CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Логические операторы

    Запланировано Прикреплена Закрыта Перенесена Обучающие примеры
    ce luaлогикаобучалка
    1 Сообщения 1 Posters 652 Просмотры 1 Watching
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MasterGHM Не в сети
      MasterGH Администраторы
      отредактировано MasterGH

      Существует три логических оператора: and, or, not.

      Те, кто уже знаком с языками программирования знают, как эти логические операторы работают.

      Например,

          A = true
          B = true    
          if A and B then print('Условие "A and B" выполняется') end    
          if A or B then print('Условие "A or B" выполняется') end    
          B = false
          if not (B == A) then print('Условие "not (B == A)" выполняется') end
      

      Но, дальше интереснее.

      Все логические операторы считают false и nil ложными, а все остальное — истинными. 
      Оператор "and" возвращает свой первый аргумент, если он ложен и в противном случае возвращается второй аргумент
      Оператор "or" возвращает свой первый аргумент, если он не равен false и в противном случае возвращается второй аргумент.
      

      Сходу можно запутаться, но с примерами станет понятнее

        print (4 and 5) --> "5". В этом примере '4" не ложный, а значит при операторе "and" вернется второй аргумент "5".
        print(0 and 13) --> "0". Аналогично
        print(false and 13) --> "false". В этом примере первый аргумент false(ложный), а значит при операторе and вернется "false".
      
      print(4 or 5)  --> "4"  В этом примере "4" не ложный, а значит при операторе "or" вернется уже первый аргумент "4".
        print(false or 5) --> "5" В этом примере "false" ложный, а значит при операторе "or" вернется уже первый аргумент "5".
      

      Если кто вспомнил, то в C# есть такой оператор "?" (условный)

       string result = 4 == 4 ? "равно" : "не равно";  // result будет равен true
      

      На Lua это эквивалентно

      local result = ( (4 == 5 and "равно") or "не равно")
      

      А если опустить все скобки, то

      local result = 4 < 5 and "равно" or "не равно".
      

      Скобки можно опустить, потому что "and" имеет выше приоритет чем "or."

      Или вот еще пример

      compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'
      

      Вот такая интересная штука для ускоренного сравнения вместо конструкции

       if условие then
          -- код
        else
          -- код
        end
      

      Идем дальше. Полезной идиомой Lua является

      x = x or v
      

      что эквивалентно

       if not х then 
           х = v 
        end
      

      Т. е. x равен значению v, когда x ложное.

      Оператор "not" всегда возвращает true или false

          print(not nil)      --> true
          print(not false)    --> true
          print(not 0)        --> false
          print(not not nil)  --> false
      
      1 ответ Последний ответ Ответить Цитировать 0

      • 1 / 1
      • Первое сообщение
        Последнее сообщение
      Powered by NodeBB | Contributors
      СeLua[RU] 2025©