Операторы в программировании | Уроки на Python Teach
Начиная изучать программирование любой человек сталкивается с множеством новых терминов, понимание которых просто необходимо для эффективного усвоения материалов. Сегодня мы поговорим о таком термине программирования как оператор.
Содержание
- Что такое операторы в программировании
- Типы операторов в программировании
- Оператор присваивания
- Арифметические операторы
- Логические операторы
- Логический оператор «И» (AND)
- Логический оператор «ИЛИ» (OR)
- Логический оператор НЕ (NOT)
- Операторы сравнения
- Составные операторы
Что такое операторы в программировании
Различных определений, что такое оператор довольно много. Некоторые из них содержат и другие термины, с которыми может быть ещё не знаком человек, начинающий изучать программировании. Поэтому мы дадим довольно простое определение этому термину, которое будет понятно каждому.
Оператор — это автономная команда, которая выполняет определенную операцию с информацией.
Грубо говоря, как дом строится из кирпичиков, так и программа строится из операторов.
Типы операторов в программировании
Операторы в программировании делятся на довольно большое количество типов. Сейчас поговорим об основных типах операторов в программировании.
Оператор присваивания
Оператор присваивания служит для того, чтобы присвоить какое-либо значение переменной. Если упростить, то мы говорим программе возьми вот эту информацию и положи её в ящик под названием «x».
На разных языках программирования оператор присваивания может выглядеть по разному, но чаще всего используется знак равенства.
На языке Python присваивание будет выглядеть так:
x = 365
Арифметические операторы
В языках программирования встроены арифметические операторы, которые позволяют нам совершать простейшие арифметические операции над числами, такие как сложение, вычитание, умножение и деление.
В зависимости от языка программирования, число арифметических операторов, которые по умолчанию может выполнять программа, отличается. Так же в зависимости от языка отличается и само обозначение операторов.
Приведем пример того, как могут выглядеть арифметические операторы.
Арифметический оператор | Значение |
---|---|
+ | сложение |
— | вычитание |
* | умножение |
/ | деление (деление без остатка) |
% | остаток от деления (5 % 2 = 1) |
** | возведение в степень |
Логические операторы
Зачастую в программах вам будет необходимо проверить какое-либо условие и принять решение, будет ли исполнятся какой-либо код дальше или нет. Для этих целей на всех языках программирования есть логические операторы. Логические операторы обрабатывают булевые значения и выдают результат — «ИСТИНА» (true) или «ЛОЖЬ» (false).
Булев тип — примитивный тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false).
В подавляющем большинстве языков программирования есть хотя бы 3 логических оператора: И, ИЛИ, НЕ. В разных языках используется разный синтаксис, так оператор И может выглядеть как «and» или «&&», а оператор ИЛИ как «or» или «||».
Логический оператор «И» (AND)
Логический оператор «И» (AND) сравнивает два булевых типа и даёт ответ. Из всех возможных комбинаций ответ «истина» возможен только в случае когда оператор «И» (AND) используется для двух истинных значений.
Значение 1 | Значение 2 | Значение 1 И (AND) Значение 2 |
---|---|---|
ИСТИНА | ИСТИНА | ИСТИНА |
ИСТИНА | ЛОЖЬ | ЛОЖЬ |
ЛОЖЬ | ИСТИНА | ЛОЖЬ |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
Логический оператор «И» (AND) используется в тех случаях когда, вам необходимо сравнить несколько значений и принять решения о выполнении дальнейшего кода только в том случае, если все значения — «ИСТИНА».
Логический оператор «ИЛИ» (OR)
Логический оператор «ИЛИ» (OR) сравнивает два булевых типа и даёт ответ. Из всех возможных комбинаций ответ «ложь» возможен только в случае когда оператор «ИЛИ» (OR) используется для двух ложных значений.
Значение 1 | Значение 2 | Значение 1 ИЛИ (OR) Значение 2 |
---|---|---|
ИСТИНА | ИСТИНА | ИСТИНА |
ИСТИНА | ЛОЖЬ | ИСТИНА |
ЛОЖЬ | ИСТИНА | ИСТИНА |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
Логический оператор «И» (AND) используется в тех случаях когда, вам необходимо сравнить несколько значений и принять решения о выполнении дальнейшего кода в том случае, когда хотя бы одно значение — «ИСТИНА».
Логический оператор НЕ (NOT)
Логический оператор «НЕ» (NOT) известен также как «инверсия«. Этот оператор принимает булево значение и меняет его на противоположное.
Значение 1 | НЕ (NOT) Значение 1 |
---|---|
ИСТИНА | ЛОЖЬ |
ЛОЖЬ | ИСТИНА |
На первый взгляд новичкам в программировании логический оператор инверсия может показаться лишним. Но это не так, как только вы немного углубитесь в изучении программирования, вы поймете на сколько это полезный оператор.
Операторы сравнения
Довольно часто программистам приходится сталкиваться с сравнением различных значений. Для этого они используют операторы сравнения, которые сравнивают две величины и на выходе дают булево значение сравнения — «ИСТИНА» или «ЛОЖЬ». Чаще всего используются следующие операторы сравнения.Оператор сравнения | Значение |
---|---|
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
== | равно |
!= | не равно |
В различных языках программирования обозначение данных операторов может различаться.
Составные операторы
Помимо описанных выше операторов, зачастую в языках программирования существуют составные операторы, которые могут включать в себя несколько типов операторов. Например составные операторы присвоения, которые помогают делать код более лаконичным.
Приведем для примера несколько составных операторов присвоения. В каждом из примеров первая строчка кода аналогична по функционалу второй.
x = x + 365 x += 365 x = x - 365 x -= 365
Продолжая изучать программирование вы вскоре познакомитесь и с различными другими полезными операторами, которые будете использовать при работе. Вы можете продолжить своё обучение ознакомлением со следующими материалами:
- условные операторы в программировании
2. Операторы языка Python — документация Python Lessons
Большинство предложений (логических строк) в программах содержат выражения. Простой пример выражения: 2 + 3. Выражение можно разделить на операторы и операнды.
Операторы – это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например +, или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2 и 3 – это операнды.
2.1. Базовые операторы
далее стоит привести таблицу операторов:
Оператор | Название | Объяснение | Примеры |
„+“ | Сложение | Суммирует два объекта | 3 + 5 даст 8; „a“ + „b“ даст „ab“ |
„-„ | Вычитание |
| -5.2 даст отрицательное число, а 50 — 24 даст 26. |
„*“ | Умножение |
| 2 * 3 даст 6. „la“ * 3 даст „lalala“. |
„**“ | Возведение в степень | Возвращает число х, возведённое в степень y | 3** 4 даст 81 (т.е. 3 * 3 * 3 * 3) |
/ | Деление | Возвращает частное от деления x на y | 4 / 3 даст 1.3333333333333333. |
// | Целочисленное деление | Возвращает неполное частное от деления | 4 // 3 даст 1. -4 // 3 даст -2. |
% | Деление по модулю | Возвращает остаток от деления | 8 % 3 даст 2. -25.5 % 2.25 даст 1.5. |
<< | Сдвиг влево | Сдвигает биты числа влево на заданное количество позиций. (Любое число в памяти компьютера представлено в виде битов — или двоичных чисел, т.е. 0 и 1) | 2 << 2 даст 8. В двоичном виде 2 представляет собой 10. 3 даёт 6 |
~ | Побитовое НЕ | Побитовая операция НЕ для числа x соответствует -(x+1) | ~5 даёт -6. |
< | Меньше | Определяет, верно ли, что x меньше y. Все операторы сравнения возвращают True или False [1]. Обратите внимание на заглавные буквы в этих словах. |
Можно составлять произвольные цепочки сравнений: 3 < 5 < 7 даёт True. |
> | Больше | Определяет, верно ли, что x больше y | 5 > 3 даёт True. Если оба операнда — числа, то перед сравнением они оба преобразуются к одинаковому типу. В противном случае всегда возвращается False. |
<= | Меньше или равно | Определяет, верно ли, что x меньше или равно y | x = 3; y = 6; x <= y даёт True. |
>= | Больше или равно | Определяет, верно ли, что x больше или равно y | x = 4; y = 3; x >= 3 даёт True. |
== | Равно | Проверяет, одинаковы ли объекты |
|
!= | Не равно | Проверяет, верно ли, что объекты не равны | x = 2; y = 3; x != y даёт True. |
not | Логическое НЕ |
| x = True; not x даёт False. |
and | Логическое И | x and y даёт False, если x равно False , в противном случае возвращает значение y | x = False; y = True; x and y возвращает False, поскольку x равно False. В этом случае Python не станет проверять значение y,
|
or | Логическое ИЛИ |
| x = True; y = False; x or y даёт True. Здесь также может производиться укороченная оценка выражений. |
2.2. Управляющие операторы
2.2.1. Условные операторы (if/else)
Оператор if используется для проверки условий: если условие верно, выполняется блок выражений (называемый “if-блок”), иначе выполняется другой блок выражений (называемый “else-блок”). Блок “else” является необязательным.
Предупреждение
В языке Python блоки разедяются табами или пробелами
Запомните эмпирическое правило: хотя вы можете использовать для отступов пробелы или табуляции, их смешивание внутри блока обычно не будет удачной идеей применяйте либо то, либо другое. Формально табуляция считается достаточным количеством пробелов, чтобы сместить текущую строку на расстояние, кратное 8, и код будет работать в случае согласованного смешивания табуляций и пробелов. Тем не менее, такой код может быть сложнее изменять. Хуже того, смешивание табуляций и пробелов затрудняет чтение кода целиком, не говоря уже о правилах синтаксиса Python — табуляции в редакторе сменившего вас программиста могут выглядеть сов сем не так, как в вашем редакторе.
Пример использования оператора if
number = 23 guess = int(input('Введите целое число : ')) if guess == number: print('Поздравляю, вы угадали,') # Здесь начинается новый блок print('(хотя и не выиграли никакого приза!)') # Здесь заканчивается новый блок elif guess < number: print('Нет, загаданное число немного больше этого. ') # Ещё один блок # Внутри блока вы можете выполнять всё, что угодно ... else: print('Нет, загаданное число немного меньше этого.') # чтобы попасть сюда, guess должно быть больше, чем number print('Завершено') # Это последнее выражение выполняется всегда после выполнения оператора if
2.2.2. Оператор while
Оператор while — самая универсальная конструкция для итераций в языке Python. Выражаясь простыми терминами, он многократно выполняет блок операторов (обыч но с отступом) до тех пор, пока проверка в заголовочной части оценивается как истин ное значение. Это называется “циклом”, потому что управление продолжает возвра щаться к началу оператора, пока проверка не даст ложное значение. Когда результат проверки становится ложным, управление переходит на оператор, следующий после блока while. Совокупный эффект в том, что тело цикла выполняется многократно, пока проверка в заголовочной части дает истинное значение. Если проверка оцени вается в ложное значение с самого начала, тогда тело цикла никогда не выполнится и оператор while пропускается.
В своей самой сложной форме оператор while состоит из строки заголовка с вы ражением проверки, тела с одним или большим количеством оператором с отступами и необязательной части else, которая выполняется, если управление покидает цикл, а оператор break не встретился. Python продолжает оценивать выражение проверки в строке заголовка и выполняет операторы, вложенные в тело цикла, пока проверка не возвратит ложное значение:
number = 23 running = True while running: guess = int(input('Введите целое число : ')) if guess == number: print('Поздравляю, вы угадали.') running = False # это останавливает цикл while elif guess < number: print('Нет, загаданное число немного больше этого.') else: print('Нет, загаданное число немного меньше этого.') else: print('Цикл while закончен.') # Здесь можете выполнить всё что вам ещё нужно print('Завершение.')
2.2.3. Цикл for
Оператор for..in также является оператором цикла, который осуществляет итерацию по последовательности объектов, т. е. проходит через каждый элемент в последовательности. Мы узнаем больше о последовательностях в дальнейших главах, а пока просто запомните, что последовательность – это упорядоченный набор элементов.
#Расмотрим несколько примеров for х in ["spam", "eggs", "ham"]: print(x, end=' ') #результатом этого цикла будет строка spam eggs ham
Примечание
оратите мнимание на параметр end=“ „, по умолчанию фукция print() завершает вывод символом конца строки «n», в случае с end=“ „ мы меняем его на пробел. Таким обазом мы выведем сообщения на экран в строку.
for i in range(1, 5): print(i) else: print('Цикл for закончен')
2.2.3.1. Вложенные циклы for
Давайте теперь взглянем на цикл for, который сложнее тех, что мы видели до сих пор. В приведенном ниже примере иллюстрируется вложение операторов и конструк ция else цикла for. Имея список объектов (items) и список ключей (tests), код ищет каждый ключ в списке объектов и сообщает о результате поиска:
items = ["ааа", 111, (4, 5), 2. 01] tests = [(4, 5) , 3.14] for key in tests: for item in items: if item — key: print (key, ’’was found”) break else: print(key, "not found!")
2.2.4. Оператор break
Оператор break служит для прерывания[7] цикла, т.е. остановки выполнения команд даже если условие выполнения цикла ещё не приняло значения False или последовательность элементов не закончилась.
Важно отметить, что если циклы for или while прервать оператором break, соответствующие им блоки else выполняться не будут.
while True: s = input('Введите что-нибудь : ') if s == 'выход': break print('Длина строки:', len(s)) print('Завершение')
2.2.5. Оператор continue
Оператор continue используется для указания Python, что необходимо пропустить все оставшиеся команды в текущем блоке цикла и продолжить[9] со следующей итерации цикла.
while True: s = input('Введите что-нибудь : ') if s == 'выход': break if len(s) < 3: print('Слишком мало') continue print('Введённая строка достаточной длины') # Разные другие действия здесь. 20}'.format('*' * i)) # Печатаем символ выравнивая его по центру #Пример -2 SPACE = ' ' STRAR = '*' rows = int(input('Укажите размер ёлочки: ')) spaces = rows-1 stars = 1 for i in range(rows): print( (SPACE*spaces) + (STRAR*stars) + (SPACE*spaces) ) stars += 2 spaces -= 1
Язык программирования Apache Groovy
8.1. Оператор Spread
Оператор Spread-dot ( *.
), часто сокращенно просто Оператор Spread, используется для вызова действия над всеми элементами.
агрегатного объекта. Это эквивалентно вызову действия над каждым элементом и сбору результата в список:
class Car { Строка сделать Струнная модель } деф автомобили = [ новый автомобиль(марка: 'Peugeot', модель: '508'), новый автомобиль(марка: 'Renault', модель: 'Clio')] (1) деф марки = автомобили*.марка (2) assert makes == ['Peugeot', 'Renault'] (3)
1 | построить список из автомобилей элементов. Список представляет собой совокупность объектов. |
2 | вызвать оператора спреда из списка, обратившись к свойству make каждого элемента |
3 | возвращает список строк, соответствующих набору make элементов |
Выражение cars*.make
эквивалентно cars.collect{ it.make }
.
Нотация Groovy GPath позволяет сократить путь, когда указанное свойство
не является свойством содержащего списка, в этом случае он автоматически
распространение. В ранее упомянутом случае выражение тачки.марка
может
можно использовать, хотя часто рекомендуется сохранять явный оператор с расставленными точками.
Оператор распространения является нулевым, что означает, что если элемент коллекции имеет значение null,
он вернет null вместо того, чтобы выдать исключение NullPointerException
:
cars = [ новый автомобиль(марка: 'Peugeot', модель: '508'), ноль, (1) новый автомобиль(марка: 'Renault', модель: 'Clio')] assert cars*. make == ['Peugeot', null, 'Renault'] (2) утверждать null*.make == null (3)
1 | построить список, для которого один из элементов нулевой |
2 | с использованием оператора распространения вызовет , а не исключение NullPointerException |
3 | получатель также может быть нулевым, и в этом случае возвращаемое значение равно ноль |
Оператор распространения может использоваться в любом классе, реализующем интерфейс Iterable
:
class Component { Целочисленный идентификатор Имя строки } класс CompositeObject реализует Iterable{ Компоненты защиты = [ новый компонент (id: 1, имя: «Foo»), новый компонент (id: 2, имя: «Бар»)] @Override Итератор<Компонент> итератор() { компоненты. iterator() } } def составной = новый составной объект () утверждать составной*.id == [1,2] утверждать составное*.имя == ['Foo','Bar']
Использовать несколько вызовов оператора растровой точки (здесь cars*.models*.name
), когда
работа с агрегатами структур данных, которые сами содержат агрегаты:
class Make { Имя строки Список моделей} @канонический модель класса { Имя строки } деф автомобили = [ новая марка (название: «Пежо», модели: [новая модель('408'), новая модель('508')]), новый Марка (название: «Рено», модели: [новая модель('Clio'), новая модель('Captur')]) ] def makes = автомобили*.название assert делает == ['Peugeot', 'Renault'] def модели = автомобили*.модели*.название утверждать модели == [['408', '508'], ['Clio', 'Captur']] assert models.sum() == ['408', '508', 'Clio', 'Captur'] // выравнивание на один уровень assert models.flatten() == ['408', '508', 'Clio', 'Captur'] // выравниваем все уровни (в данном случае один)
Рассмотрите возможность использования метода collectNested
DGM вместо оператора с расставленными точками для коллекций коллекций:
class Car { Строка сделать Струнная модель } деф автомобили = [ [ новый автомобиль(марка: 'Peugeot', модель: '408'), новый автомобиль(марка: 'Peugeot', модель: '508') ], [ новый автомобиль(марка: 'Renault', модель: 'Clio'), новый автомобиль(марка: 'Renault', модель: 'Captur') ] ] def models = cars. collectNested{ it.model } утверждать модели == [['408', '508'], ['Clio', 'Captur']]
8.1.1. Распространение аргументов метода
Возможны ситуации, когда аргументы вызова метода можно найти в списке, который необходимо адаптировать к методу аргументы. В таких ситуациях вы можете использовать оператор распространения для вызова метода. Например, представьте, что у вас есть следующая подпись метода:
int function (int x, int y, int z) { х*у+г }
, тогда, если у вас есть следующий список:
def args = [4,5,6]
, вы можете вызвать метод без определения промежуточных переменных:
assert function(*args) == 26
Можно даже смешивать обычные аргументы с расширенными:
args = [4] функция утверждения(*args,5,6) == 26
8.1.2. Элементы списка распространения
При использовании внутри литерала списка оператор расширения действует так, как если бы содержимое элемента расширения было встроено в список:
def items = [4,5] (1) список по умолчанию = [1,2,3,*элементы,6] (2) список утверждений == [1,2,3,4,5,6] (3)
1 | пунктов список |
2 | мы хотим вставить содержимое списка элементов непосредственно в список без вызова addAll |
3 | содержимое элементов было встроено в список |
8.
1.3. Элементы карты распространенияОператор карты распространения работает аналогично оператору списка распространения, но для карт. Это позволяет вам встроить содержимое карты в другой литерал карты, как в следующем примере:
def m1 = [c:3, d:4] (1) карта защиты = [a:1, b:2, *:m1] (2) assert map == [a:1, b:2, c:3, d:4] (3)
1 | m1 это карта, которую мы хотим встроить |
2 | мы используем нотацию *:m1 для распространения содержимого m1 на карту |
3 | карта содержит все элементы m1 |
Должность оператора карты спреда имеет значение, как показано в следующем примере:
по умолчанию m1 = [c:3, d:4] (1) карта защиты = [a:1, b:2, *:m1, d: 8] (2) assert map == [a:1, b:2, c:3, d:8] (3)
1 | m1 это карта, которую мы хотим встроить |
2 | мы используем нотацию *:m1 для распространения содержимого m1 на карту , но переопределить ключ d после распространяя |
3 | карта содержит все ожидаемые ключи, но d был переопределен |
8.
2. Оператор диапазона Groovy поддерживает концепцию диапазонов и предоставляет нотацию ( ..
) для создания диапазонов объектов:
def range = 0..5 (1) утверждать (0..5).collect() == [0, 1, 2, 3, 4, 5] (2) утверждать (0..<5).collect() == [0, 1, 2, 3, 4] (3) утверждать (0<..5).collect() == [1, 2, 3, 4, 5] (4) утверждать (0<..<5).collect() == [1, 2, 3, 4] (5) утверждать (0..5) instanceof List (6) утверждать (0..5).size() == 6 (7)
1 | простой диапазон целых чисел, сохраненный в локальной переменной |
2 | и IntRange с включенными границами |
3 | и IntRange с исключительной верхней границей |
4 | и IntRange с эксклюзивной нижней границей |
5 | и IntRange с эксклюзивными нижними и верхними границами |
6 | a groovy. lang.Range реализует интерфейс List |
7 | означает, что вы можете вызвать на нем метод размера |
Реализация диапазонов упрощена, что означает, что сохраняются только нижняя и верхняя границы. Вы можете создать диапазон
из любых Сопоставимый объект
, который имеет методы next()
и previous()
для определения следующего/предыдущего элемента в диапазоне.
Например, вы можете создать диапазон символов следующим образом:
assert('a'..'d').collect() == ['a','b','c','d']
8.3. Оператор космического корабля
Оператор космического корабля ( <=>
) делегирует метод compareTo
:
assert (1 <=> 1) == 0 утверждать (1 <=> 2) == -1 утверждать (2 <=> 1) == 1 утверждать ('a' <=> 'z') == -1
8.4. Оператор нижнего индекса
Оператор нижнего индекса представляет собой сокращенную запись для getAt
или putAt
, в зависимости от того, найдете ли вы его на
левая или правая часть задания:
def list = [0,1,2,3,4] список утверждений[2] == 2 (1) список[2] = 4 (2) утвердить список[0. .2] == [0,1,4] (3) список[0..2] = [6,6,6] (4) список утверждений == [6,6,6,3,4] (5)
1 | [2] можно использовать вместо getAt(2) |
2 | , если слева от задания, вызовет putAt |
3 | getAt также поддерживает диапазоны |
4 | так же как и putAt |
5 | список изменен |
Оператор нижнего индекса в сочетании с пользовательской реализацией getAt
/ putAt
является удобным способом деструктурирования
объекты:
класс пользователя { Длинный идентификатор Имя строки защита getAt(int i) { (1) переключатель (я) { случай 0: возвращаемый идентификатор случай 1: вернуть имя } выбросить новое исключение IllegalArgumentException("Нет такого элемента $i") } void putAt (int i, значение по умолчанию) { (2) переключатель (я) { случай 0: идентификатор = значение; возвращаться случай 1: имя = значение; возвращаться } выбросить новое исключение IllegalArgumentException("Нет такого элемента $i") } } def user = новый пользователь (id: 1, имя: «Алекс») (3) утвердить пользователя [0] == 1 (4) утвердить пользователя [1] == 'Алекс' (5) пользователь [1] = 'Боб' (6) утверждать user. name == 'Боб' (7)
1 | класс User определяет пользовательский getAt реализация |
2 | класс User определяет пользовательскую реализацию putAt |
3 | создать пробного пользователя |
4 | с помощью оператора индекса с индексом 0 позволяет получить идентификатор пользователя |
5 | с помощью оператора индекса с индексом 1 позволяет получить имя пользователя |
6 | мы можем использовать оператор нижнего индекса для записи свойства благодаря делегированию putAt |
7 | и проверьте, действительно ли свойство имя было изменено |
8.
5. Оператор безопасного индексирования Groovy 3.0.0 представляет оператор безопасного индексирования, т. е. ?[]
, что аналогично ?.
. Например:
Строка[] массив = ['a', 'b'] assert 'b' == array?[1] // получаем с использованием индекса обычного массива array?[1] = 'c' // устанавливаем с использованием индекса обычного массива утверждать 'c' == массив? [1] массив = ноль assert null == array?[1] // возвращаем null для всех значений индекса array?[1] = 'c' // тихо игнорируем попытку установить значение утверждать массив null ==?[1] def personInfo = [имя: 'Daniel.Sun', местоположение: 'Шанхай'] assert 'Daniel.Sun' == personInfo?['name'] // используем индекс карты нормалей personInfo?['name'] = 'sunlan' // устанавливается с использованием индекса карты нормалей утверждать 'sunlan' == personInfo?['name'] информация о человеке = ноль assert null == personInfo?['name'] // возвращаем null для всех значений карты personInfo?['name'] = 'sunlan' // незаметно игнорируем попытку установить значение утверждать null == personInfo?['name']
8.
6. Оператор принадлежности Оператор принадлежности ( в
) эквивалентен вызову метода isCase
. В контексте списка
это эквивалентно
для вызова содержится
, как в следующем примере:
def list = ['Grace','Rob','Emmy'] утверждать («Эмми» в списке) (1) утверждать ('Алекс' !в списке) (2)
1 | эквивалентно вызову list.contains('Эмми') или list.isCase('Эмми') |
2 | отрицание членства эквивалентно вызову !list.contains('Emmy') или !list.isCase('Emmy') |
8.7. Оператор идентификации
В Groovy использование ==
для проверки равенства отличается от использования того же оператора в Java. В Groovy это вызов равно
. Если вы хотите сравнить ссылочное равенство, вы должны использовать равно
, как в следующем примере:
def list1 = ['Groovy 1.8','Groovy 2.0','Groovy 2.3'] (1) def list2 = ['Groovy 1.8','Groovy 2.0','Groovy 2.3'] (2) утверждать список1 == список2 (3) утверждать !list1.is(list2) (4) утверждать список1 !== список2 (5)
1 | Создать список строк |
2 | Создайте еще один список строк, содержащих те же элементы |
3 | , используя == , мы проверяем равенство объектов, что эквивалентно list1.equals(list2) в Java | .
4 | с использованием равно , мы можем проверить, что ссылки различны, что эквивалентно list1 == list2 в Java | .
5 | , используя === или !== (поддерживается и рекомендуется, начиная с Groovy 3.0.0), мы также можем проверить, являются ли ссылки различными или нет, что эквивалентно list1 == list2 и list1 != list2 в Java |
8.8. Оператор приведения
Оператор приведения ( как
) — вариант литья. Приведение преобразует объект из одного типа в другой без их
быть совместимым для назначения. Возьмем пример:
Целое число x = 123 Строка s = (Строка) x (1)
1 | Целое число не может быть назначено String , поэтому оно создаст ClassCastException во время выполнения |
Это можно исправить, используя вместо этого приведение :
Целое число x = 123 Строка s = x as Строка (1)
1 | Целое число не может быть присвоено строке , но использование в качестве приведет к принудительному преобразованию в строку |
Когда объект принудительно преобразуется в другой, если целевой тип не совпадает с исходным типом, приведение возвращает новый объект . Правила приведения различаются в зависимости от исходного и целевого типов, и приведение может завершиться ошибкой, если не выполняется преобразование.
правила найдены. Пользовательские правила преобразования могут быть реализованы благодаря методу asType
:
класс Идентифицируемый { Имя строки } класс пользователя { Длинный идентификатор Имя строки def asType (Цель класса) { (1) если (цель == Идентифицируемый) { вернуть новый идентифицируемый (имя: имя) } выбросить новое исключение ClassCastException («Пользователь не может быть принужден к $ target») } } def u = новый пользователь (имя: «Ксавье») (2) def p = u как идентифицируемый (3) утверждать p instanceof Идентифицируемый (4) assert !(p instanceof User) (5)
1 | класс User определяет пользовательское правило преобразования с User на Идентифицируемый |
2 | мы создаем экземпляр пользователя |
3 | мы принуждаем экземпляр пользователя к идентифицируемому |
4 | цель является экземпляром Идентифицируемый |
5 | цель не является экземпляром Пользователь Больше |
8.
9. Алмазный оператор Алмазный оператор ( <>
) является синтаксическим сахарным оператором, добавленным для поддержки совместимости с оператором
то же имя в Java 7. Оно используется для указания того, что универсальные типы должны выводиться из объявления:
Liststrings = new LinkedList<>()
В динамическом Groovy это совершенно не используется. В Groovy со статической проверкой типов это также необязательно, так как Groovy средство проверки типов выполняет вывод типа независимо от того, присутствует этот оператор или нет.
8.10. Оператор вызова
Оператор вызова ()
используется для неявного вызова метода с именем call
. Для любого объекта, который определяет метод вызова
,
вы можете опустить часть .call
и вместо этого использовать оператор вызова:
class MyCallable { внутренний вызов (int x) { (1) 2*х } } def mc = новый MyCallable() утверждать mc. call(2) == 4 (2) утверждать mc(2) == 4 (3)
1 | MyCallable определяет метод с именем call . Обратите внимание, что нет необходимости реализовывать java.util.concurrent.Callable |
2 | мы можем вызвать метод, используя классический синтаксис вызова метода |
3 | или мы можем опустить .вызов спасибо оператору звонка |
Операторы — язык программирования Python
Операторы — это конструкции, которые могут управлять значением операндов.
Рассмотрим выражение 4 + 5 = 9. Здесь 4 и 5 называются операндами, а + называется оператором.
Язык Python поддерживает следующие типы операторов.
- Арифметические операторы
- Операторы сравнения (реляционные)
- Операторы присваивания
- Логические операторы
- Побитовые операторы
- Операторы членства
- Операторы идентификации
1.
Арифметические операторы Python:Python имеет много арифметических операторов. Это следующие:
+ | оператор сложения |
— | оператор вычитания |
* | оператор умножения |
/ | оператор дивизиона |
% | оператор модуля |
** | оператор экспоненты |
// | оператор дивизиона этажа |
2. Операторы сравнения Python:
Эти операторы сравнивают значения по обе стороны от них и определяют отношение между ними. Их также называют реляционными операторами.
== | равно оператору |
!= | не равно оператору |
> | больше, чем оператор |
меньше оператора | |
>= | больше, чем равно оператору |
меньше, чем равно оператору | =
3.
Операторы присваивания Python:Python имеет много арифметических операторов. Вот они:
= | оператор присвоения значения |
+= | Добавляет правый операнд к левому операнду и присваивает результат левому операнду |
-= | Вычитает правый операнд из левого операнда и присваивает результат левому операнду |
*= | Умножает правый операнд на левый операнд и присваивает результат левому операнду |
/= | Делит левый операнд на правый операнд и присваивает результат левому операнду |
%= | Модуль принимает два операнда и присваивает результат левому операнду |
4. Побитовый оператор Python:
Следующие побитовые операторы поддерживаются языком Python —
и | Двоичный оператор И копирует бит в результат, если он существует в обоих операндах |
| | Двоичный оператор ИЛИ копирует бит, если он существует в любом из операндов. | Двоичный оператор XOR копирует бит, если он установлен в одном операнде, но не в обоих. |
~ | Двоичный оператор дополнения к единице является унарным и имеет эффект «переворачивания» битов. |
Двоичный оператор сдвига влево перемещается влево на количество битов, указанное правым операндом. | |
>> | Двоичный сдвиг вправо сдвигается вправо на число битов, указанное правым операндом. |
5. Логический оператор Python:
Следующие логические операторы поддерживаются языком Python.
и | (логическое И) Оператор — Если оба операнда истинны, то условие становится истинным. |
или | (логическое ИЛИ) Оператор — Если любой из двух операндов отличен от нуля, условие становится истинным. |
не | (логическое НЕ) Оператор — используется для изменения логического состояния своего операнда. |
6. Операторы принадлежности Python:
Операторы принадлежности Python проверяют принадлежность к последовательности, такой как строки, списки или кортежи. Есть два оператора членства, как описано ниже:
в операторе | .Возвращает значение true, если находит переменную в указанной последовательности, и значение false в противном случае. |
не в операторе | Возвращает значение true, если не удается найти переменную в указанной последовательности, и значение false в противном случае. |
оператор | Возвращает значение true, если переменные по обе стороны от оператора указывают на один и тот же объект, и значение false в противном случае. |
не оператор | Возвращает значение false, если переменные по обе стороны от оператора указывают на один и тот же объект, и значение true в противном случае. Оставить комментарий
|