0: Приветствую вас, друзья. Меня зовут Сергей. Мы с вами продолжаем изучать язык программирования сишар. Сегодня мы будем говорить о том, что такое логические операторы и для чего они нужны в прошлом уроке. Мы с вами уже изучили конструкцию if else, и это позволит нам на более понятно.
1: Примерах, собственно, посмотреть, что такое логические операторы, для чего они нужны. Поэтому если вы не знаете, что такое конструкция, if else и как она используется, посмотрите прошлый урок, ссылку оставлю внизу в описании. Собственно, если вам нравятся мои уроки, вы хотите поддержать и развить
2: Канала, то не забудьте поставить лайк под этим видео и начнём мы с самого простого, с самого последнего из этих операторов. Унарный оператор не что он вообще означает проще всего посмотреть на практике. Для этого мы опять-таки будем использовать коды с прош.
3: Урока, но немножечко модифицируем его. Давайте прочитаем наш код, как он у нас выглядел в прошлом уроке. Собственно, суть этого кода выводить информацию о том, что в нашей игре персонаж либо инфицирован, либо же здоров, если
4: В нашей переменной из infected либо true, либо false. Итак, как читаем мы сейчас наш код? Если персонаж инфицирован из инфект тру, мы вводим информацию о том, что персонаж инфицирован. Иначе же мы вводим сообщение, что
5: Персонаж здоров, все отлично работает, но представим, что мы бы хотели написать код немножечко иначе. Если бы мы хотели писать, что если наш персонаж не инфицирован, то мы выполняем какую-то логику и else нам вообще.
6: Допустим, не нужен. Итак.
7: Нам нужно выводить сообщение о том, что наш персонаж здоров, это означает, что он не инфицирован, но наши данные, которые помещаются в переменную bool, нам сообщают о том, что он либо инфицирован, либо нет, поэтому мы не можем сделать.
8: Вот. Так что если он из infected инфицирован, то мы должны писать персонаж здоров, поэтому здесь нам в любом случае нужен какой-то else, а если нам не нужен else, нам вот нужно конкретно 1 условие, вот именно для
9: Для таких ситуаций мы можем использовать оператор, унарный оператор, не, и, собственно, если мы поставим перед вот этой булевой переменной этот оператор это просто восклицательный знак, то бишь
10: Не из infected, не тру, не инфицирован, то, значит здоров. Запустим и посмотрим, что получается. У нас сейчас ничего не вывелось на консоль. Почему? Потому что в нашей переменной из инфект значение. True значит, персонаж инфицирован, а мы выводим сообщение, что наш
11: Персонаж здоров, если он не инфицирован, соответственно здесь должно быть false и если наш персонаж не инфицирован.
12: То у нас выведится сообщение о том, что персонаж здоров.
13: Другими словами, вот этот оператор просто инвертирует то значение, которое находится перед ним. Давайте в отладчике посмотрим из инфект. У нас сейчас фолс ифу для того, чтобы выполнить то, что у него находится.
14: В его фигурных скобках вот здесь, в круглых скобках, необходимо значение true но из инфект у нас фоллс, а так, как я сказал, оператор не просто инвертирует значение, которое ему переда.
15: То есть меняет его на противоположное, если у нас переменная из инфект фолс.
16: То if получит своим результатом благодаря вот этому оператору сюда тру и, соответственно, код выполнится.
17: Ну и соответственно, мы получаем вывод на консоль, что персонаж здоров. Таким образом мы считаем эту запись как персонаж не инфицирован. То, что мы использовали здесь опера.
18: Не, не значит, что мы не можем использовать else вместе с ифом, мы можем использовать else и также можем здесь выводить сообщение о том, что персонаж инфицирован, но так как у нас оператор не инвертирует то, что мы получаем на вход в iv
19: И места вывода наших сообщений о том, что персонаж здоров, квалифицирован, просто меняются местами. Результат работы кода тот же самый, но просто логика выполнения немножечко по другому работает. Поэтому и записали мы её немножечко по другому таким образом.
20: Если мы раньше проверяли, что персонаж инфицирован и если он инфицирован, мы просто вводили, что он инфицирован, иначе персонаж здоров, сейчас мы проверяем, что персонаж не инфицирован, если он не инфицирован, значит, он здоров, иначе же выполняется блок.
21: Мы пишем, что он инфицирован. Это что касается оператора, не теперь перейдём к рассмотрению операторов, логических операторов и и или а точнее, их сокращённых версий. То есть вот таких вот Двойных и
22: Затем уже выясним, в чем разница между сокращённым и не сокращённым, а также между сокращённым или и не сокращённым. Перейдём, к примеру. Допустим, мы с вами занимаемся написанием программы, которая выполняет
23: Мониторинг охлаждения процессора. Соответственно, у нас мониторятся 2 параметра. Это температура процессора и наличие охлаждения, то есть вращается ли наш кулёр или нет. Соответственно, в отличие от нашего прошлого примера у нас есть
24: G2 параметра, на основании которых у нас может что-либо выполняться, к примеру, какая-то логика в блоке if если в прошлом примере у нас была переменная из инфект, это если она true, то мы выводили какое-то сообщение, в данном случае у нас.
25: Есть уже 2 параметра из хай темперачер и has no Кулин, соответственно нам нужно проверять 2 эти параметра и вот именно для того, если у нас есть 2 и более каких-то
26: Параметров, которые нам нужно проверить, мы можем использовать, собственно, вот эти операторы, сокращённое и или сокращённое, или в данном случае, вот в данном нашем примере мы используем сокращённое, и и как этот оператор Ван
27: Данном случае работает, что он делает? У нас есть 2 булевые переменные и, собственно, нам нужно проверить истинность и той, и другой переменной. И если у нас и высокая температура, то есть значение переменной из хайт, имперер тру и
28: Colin тоже true, мы должны вывести сообщение, угроза повреждения процессор даже во время того, когда я уже говорил, я, собственно, назвал всю логику, как работает наша программа, то есть, если у нас высокая темпера.
29: Температура и, заметьте, логический оператор и нет охлаждения, мы выводим сообщение, соответственно, если у нас эта переменная и эта переменная true, мы что-то делаем, и проверка эта происходит в Ифе, давайте.
30: Посмотрим, запустим, выводится ли у нас сообщение. Изменим какой-то из этих параметров. К примеру, параметр хэз ноу кулинг у нас будет false.
31: Таким образом, у нашего процессора высокая температура, но охлаждение есть таким образом, вот эти 2 параметра уже не истины соответственно у нас здесь true, а здесь false таким образом, у нас уже.
32: Не будет результата тру в случае, если мы выполним оператор и над вот этими 2 параметрами давайте запустим в отладчике посмотрим для того, чтобы результатом вот этого
33: Всего выражения. Была истина, чтобы мог выполниться блок кода, который находится в вот этих фигурных скобочках нашего ифа, чтобы if получил на вход тру вот эти 2 параметра и и
34: No кулинг должны быть true, как в данном случае работает наша программа, проверяется 1 параметр из хай тимер, он у нас true оператор и проверяет следующий параметр хэз ноу кулинг.
35: Colin тоже true, то iv получает результатом своей работы true, то есть истину, так как 2 эти параметра будут истинными, соответственно, мы заходим в этот блок кода, выводим сообщение, но так как у нас только
36: 1 параметр в данном случае истина, то есть у нас высокая температура, но но переменная хз ну, colin falls, значит охлаждение есть, соответственно, 2 эти параметра, 2 условия не выполняются, и мы не попадаем.
37: В этот блок кода, ну и, соответственно, как результат наша программа ничего не выводит таким образом, вот этот оператор логическая и проверяет свои операнды, которые находятся слева и справа от него, и если они оба true, то результат
38: Mega работы тоже будет истина true и if получит истину, соответственно, мы сюда заходим, если же какой-то из вот этих параметров уже не истина, соответственно, оператор и расценивает все выражение как не
39: Другими словами, чтобы было понятно, как это все работает, вот этот код можно считать таким образом, если у нас из хай темпер ещё и has no Кулин, мы заходим сюда таким образом, если что-то из этого false, мы сюда уже
40: Не попадаем, но мы можем сделать нашу программу, скажем так, более параноидальной. И чтобы даже при каком-то 1 из этих параметров, если что-то пошло не так, мы уже выводили предупреж,
41: О том, что у нас есть угроза, к примеру, оставим сейчас все как есть у нас из хай, но переменная наукуи фолс. То есть охлаждение у нас есть, и нам все равно нужно, чтобы если хоть что-то у нас пошло, не так, выводилось сообщение.
42: О том, что у нас есть угроза повреждения процессора, они все вместе были не в норме. Вот именно в этом случае мы можем использовать сокращённое или давайте поменяем наше и на или и посмотрим, как это будет работать как наш
43: Код выглядит теперь, если у нас либо высокая температура, либо нет охлаждения, мы выводим сообщение о том, что у нас есть угроза повреждения процессора. В предыдущем же случае нам нужно было, чтобы оба эти параметра
44: Совпали, чтобы у нас температура была высокая и не было охлаждения вместе, когда мы использовали и сейчас же даже какой-то 1 из этих параметров, если он true, если уже где то что-то не так, мы сразу же выводим сообщение, что
45: У нас есть угроза повреждения процессора. Давайте посмотрим в отладчике. Итак, у нас значение переменной из хай темпер тру, но h Кулин фолс. Таким образом, температура зашкаливает, но охлаждение есть, и так как мы прове,
46: Эти параметры с помощью логического или то есть или то или то тру, то мы попадаем в блок кода, где у нас пишется сообщение о том, что есть угроза повреждения процессора. Ну и соответственно, получаем
47: Соответствующий вывод на экран. Если же мы уберём и высокую температуру, то есть здесь поставим фолс. Оба наши значения, обе переменные будут false. Соответственно, сюда мы непо.
48: Ну, если, к примеру, has кулинг, у нас будет has no кулинг?
49: У нас будет true это означает, что у нас низкая температура, но нет охлаждения в данном случае, так как наша программа параноидальная и хотя бы какое-то 1 отклонение.
50: И мы должны сразу же бить тревогу, мы попадаем сюда.
51: В этот блок кода if, так как 1 из параметров у нас true, или этот, или этот должен быть тру, чтобы мы попали в блок if, ну и, соответственно, мы вводим сообщение об угрозе повреждения процессора, отличие между и и или и
52: Проверять, чтобы все параметры были тру и лишь в том случае мы попадаем в блок кода с if или же проверять все параметры. И если хоть какой-то из них true, мы попадаем в блок кода с if, ну и теперь ещё 1 такой маленький нюанс, который
53: Служит напоминанием темы прошлого урока об операторах сравнения, как вы понимаете, вот эти переменные из хай импера и у неё берутся просто из воздуха, они появляются на основе каких-то выражений. К примеру. Давайте сейчас наша
54: Переменная хэз ноу кулинг будет появляться на основе операции сравнения добавим переменную, пускай это будет int, назовём её fan speed, скорость вентилятора пускай будет 3000 Оборотов и собственно хэз ноу кулинг.
55: Это будет результат проверки. На то, вращается наш вентилятор или нет. И если фан спид у нас меньше или равно нулю, то, соответственно, наша переменная
56: Has no Кулин будет true то есть у нас не будет охлаждения и, соответственно, мы будем получать на основании этого выражения уже не просто захардкодим его true или false наш результат давайте посмотрим переменная из
57: Хай темп мы оставили все как было либо true, либо false, хотя там тоже можно было применять такую же логику, как с fan спидом, как для хзно Кулин в данном случае вот конкретный пример здесь fun speed у нас сейчас 3000 Оборотов, это значение не.
58: И не равно нулю. Соответственно, когда мы выполним вот это действие, присвоим результат работы этого выражения в переменную. Здесь будет false. И так как мы заранее определили, что у нас из
59: False и has no кулинг на основании того, что у нас 3000 Оборотов, у вентилятора тоже false. Мы не попадём в блок if, и у нас не выведется сообщение о том, что у нас есть угроза повреждения процессора, но если мы поставим значение нашей переменной,
60: Speed, который, к примеру, будет браться с каких-то датчиков. Ну в реальном случае значение 0. Это будет означать, что у нас вентилятор не вращается, соответственно, результатом сравнения вот этой переменной фан спид.
61: С нулём меньше или равно нулю мы получим тру, соответственно, 1 из параметров, который мы проверяем для того, чтобы выводить сообщение об угрозе нашему процессору, будет true, и мы будем бить тревогу. У нас сейчас хаос, потому чт
62: Что мы это захардкодили, но has no Кунинг на основании этого выражения у нас получился тру, так как скорость вентилятора 0 соответственно, мы вводим сообщение, что у нас есть угроза повреждению процессора. Возможно, у некоторых из вас возник вопрос, почему я проверяю
63: Скорость вентилятора на то, что эта скорость меньше или равна нулю, ведь скорость вентилятора не может быть отрицательной, на самом деле это так. Но, скажем так, это профессиональная привычка на всякий случай. А вдруг будет какой-то глюк?
64: Датчиком и fan speed у нас определится как отрицательное число, и, соответственно, мы не будем знать, на самом деле вентилятор работает или нет, потому что при проверке на 0 мы не сможем этого определить, вот давайте просто я покажу этот пример допустим, мы проверяем на 0, если
65: Fan speed у нас 0, и мы сравниваем с нулём, что вентилятор стоит has no calling тру, угроза повреждения процессора все хорошо, теперь мы получаем отрицательное число, у нас какой-то глюк с датчиком, и просто кулёр встал и fan speed - 1 соответственно.
66: Fan speed не будет равен нулю и наша переменная хэз ноу кулинг не будет true и, соответственно, наша программа будет думать, что все нормально с нашим вентилятором, и мы не попадём сюда, не выведем сообщение о том, что у нас есть угроза.
67: За повреждение процессора. Поэтому если у вас есть вот такие вот странные граничные значения, лучше их проверять. Именно вот так, так безопаснее. Теперь рассмотрим, в чем, собственно, разница между сокращёнными и или и несокращённый разни,
68: Между сокращёнными и не сокращёнными в том, что в случае с сокращёнными они не обрабатывают 2 часть условия, если в этом уже нет необходимости, что я подразумеваю под этим отредактируем немножечко код. Итак, мы с вами
69: Знаем, что для оператора сокращённого оператора, и важно, чтобы обе оба операнда, над которыми он работает, были true, и только в таком случае результатом его работы в их тоже мы получим true, но.
70: Если у нас 1 оперант уже false, зачем нам проверять 2? Если мы знаем, что если у нас уже хотя бы 1 из них false, то у нас не будет конечное выражение through соответственно, вот этот
71: Сокращённый оператор и этого и не делает если у нас вот здесь false, то эта часть выражения уже не проверяется, но если же мы сделаем вот так, то даже если здесь false, мы все равно проверим эту часть выражения, хотя в этом особой необходимо.
72: Нет, поэтому вот эти штуки на самом деле, ну, практически не используются именно в логике. С if else, во всяком случае, у меня не было необходимости их использовать вообще, потому что это просто тормозит ваш код, но работать это будет также, но просто медленней.
73: Допустим, у нас сейчас is false и has no Кулин фолс запускаем сообщение не выводится, потому что у нас 2 эти части должны быть true давайте поставим 2 часть тру.
74: Сообщение не выводится, и это тру вот только теперь, когда обе части true сообщение вывелось, есть поведение у него абсолютно точно такое же, как и у этого, но только этот работает быстрее, потому что не проверять 2 часть.
75: Если уже по 1 понятно, что условие не будет истинно, то есть нету необходимости проверять все остальное. Теперь, что касается сокращённого или и обычного, или здесь логика точно такая же, то есть не проверяется часть выражения, если
76: Она не нужна, к примеру, при использовании или нам нужно, чтобы какой-то из этих операндов был истинным, и если, к примеру, у нас этот уже истинный, то это означает, что мы можем заходить в этот if и выполнять то, что в нём нахо.
77: Ходится нам не нужно проверять остальные так вот вот этот или так и делает он смотрит если здесь true, то этот уже не проверяется, потому что нам нужен только какой-то 1 из них, но если здесь false, он посмотрит следующий этот же.
78: Все равно посмотрит и сюда, и сюда, хоть здесь уже было true и можно было бы все выполнять таким образом обычно используют именно сокращённые операторы и или ну потому что они просто быстрее теперь у нас будет пример для
79: Более продвинутых в изучении, в программировании. Если вы новичок, скорее всего, вам будет трудно его понять. Но если этот язык уже не ваш 1, или же вы хотя бы знаете, что такое функции же методы класса? Рассмотрение этого примера позволит вам лучше понять разницу между сокращён
80: И и, или и не сокращёнными. Если вы до этого ещё не поняли, если же вы новичок, который ещё не знает, что такое функция или методы класса, то рекомендую вам вернуться в этот момент этого урока, когда вы уже изучите эту
81: Тем, собственно, в чем здесь суть вместо того, чтобы предоставлять в iv наш блок if, который проверяет температуру и статус охлаждения уже готовые данные.
82: Готовых переменных. Мы будем вызывать здесь методы, которые в идеале должны каким-то образом обрабатывать эту информацию и возвращать результат работы либо true, либо false уже эти результаты будут проверяться. Так вот, здесь мы можем наглядно посмотреть разницу работы.
83: Операторов и и или в отладчике. Собственно давайте сейчас рассмотрим сначала обычный или а потом сокращённый все это будем рассматривать в отладчике с точками остановок в каждом из методов
84: Get темпере и get colin. Статус у нас тоже стоит точка Останова на моменте, когда возвращается результат работы. Ну, собственно, это все очень просто и примитивно. Нам главное проверить, зайдём ли мы в этот метод для того, чтобы получить результат его работы или нет из этого.
85: Мы получим суть разницы работы операторов сокращённых и несокращённых. Итак, сейчас у нас несокращённое или и все делаем пошагово. В отладчике мы сейчас дошли до 31 строчки кода, где у нас должны проверяться, да?
86: Но прежде чем мы получим сюда какие-то данные, мы должны выполнить методы, которые нам эти данные возвращают. Соответственно, если мы в метод заходим, значит часть кода выполняется оператором. Или если же не заходим, значит не выполняется, но
87: Вот эта штука у нас должна выполниться по любому, потому что хоть какая-то часть данных у нас должна быть делаем шаг мы попадаем в метод, он у нас возвращает true то есть истина соответственно, вот здесь.
88: У нас уже true, мы сейчас используем оператор или нам важно хотя бы 1 из этих параметров если хоть где-то тру мы уже сюда можем заходить, нам не нужно проверять, что дальше, но так как у нас или не сокращённый.
89: Ему все равно, он пойдёт проверять все дальше. Соответственно, хоть у нас уже здесь и truth, мы все равно попадём в метод get colin статус, давайте сделаем шаг и, как видите, вот мы сейчас попали в этот метод, хотя нам уже не важны результаты его работы.
90: Потому что вот здесь мы получили тру, ну и дальше выполняется код угроза повреждения процессора. Используем же теперь сокращённое. Или, я думаю, уже понимаете, в чем будет разница. Собственно, сейчас мы зайдём в метод.
91: Он возвращает у нас true и, соответственно, так как мы используем оператор или и нам нужно хотя бы 1 true из всех его компонентов, 1 мы уже получили то, что там будет дальше, нам не обязательно выпол.
92: Мы уже знаем, что мы уже все равно сюда заходим. Соответственно, делая шаг, мы не заходим в этот метод еткуль статус, а просто выполняем дальше код, который находится в Ифе. Вот разница между сокращённым или несокращённый. Теперь давайте проверим.
93: Это же на сокращённом и для сокращённого, и важно, как и не для сокращённого важно то, чтобы все параметры были true, но если в 1 параметре у нас уже false, это значит, что все true уже быть не могут таким образом, если сокращённый.
94: Если сокращённый оператор и видит, что здесь у нас фолс, следующий параметр он проверять не будет. Давайте сделаем, чтобы наш метод get them возвращал false и попробуем выполнить наш код. 31 строчка кода заходим в get темпер, он возвращает.
95: False и оператор, сокращённый оператор и уже видит, что в конечном результате у нас не будут все компоненты, все элементы этого выражения тру. Соответственно, остальные нам проверять уже не нужно, потому что у нас уже ничего не получится. Соответствен.
96: Он не будет выполнять метод get colin статус и просто пойдёт дальше. Если же мы выполним несокращённый оператор и заходим в метод get темпер, он возвращает false. Соответственно, здесь у нас
97: False. И у нас, как видите, уже не может быть для всех элементов этого выражения тру, чтобы мы в итоге получили тру и зашли в этот код. Но у нас не сокращённый оператор и он все равно полезет выполнять. 2 параметр. Делаем
98: Шаг. Как видите, мы попали в метод get colin статус, хотя нам уже неважно, что здесь будет, потому что в 1 половине выражения у нас фолс, и у нас не может быть истины и там, и там. Ну, как видите, все равно эта часть кода выполнилась. Думаю, это наглядный пример. Здесь уже точно
99: Понятно в чем разница между сокращённым, не сокращённым и и или и собственно, на этом у меня на сегодня все. Если вам понравился этот урок, он был для вас полезным, интересным. Не забудьте поставить лайк под этим видео, если у вас есть желание поддержать меня канал финансово, информация о том, как это сделат.
100: Вы найдёте внизу в описании под этим видео вот этот код вот прям сейчас в таком виде, как он есть, вы найдёте на патрионе для патронов соответствующего тира, сможете с ним поэкспериментировать? Ну либо можете написать сами. Буду очень рад, если вы поделитесь этим уроком со своими друзьям.
101: Которые изучают программирование.