Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Программирование
  3. Обучающие примеры
  4. Логические операторы

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

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

    Существует три логических оператора: 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

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы