Free YouTube Transcribe

Video transcript

ОПЕРАТОР УСЛОВНОГО NULL | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 42

#SimpleCode · 3,173 words · 15 min read

Want to search this transcript, jump the video from any line, or download it as TXT, SRT, or VTT?

Open in the transcript tool

Full transcript

0:00приветствую вас друзья меня зовут сергей

0:02мы с вами продолжаем изучать язык

0:03программирования си sharp

0:04сегодняшняя тема нашего урока оператор

0:06условного нал выясним что это такое для

0:09чего нужен и как он используется в этом

0:11уроке у нас будет довольно простой

0:13пример на основе того что мы изучили так

0:15и более сложный на основе

0:16объектно-ориентированного

0:17программирования и скажем так на примере

0:20который повсеместно довольно часто

0:22встречаются в реальных приложениях

0:23возможно вам будет сложно понять вторую

0:26часть данного урока

0:27тем не менее я считаю что ее стоят здесь

0:29разместить потому что это типичный

0:31пример использования данного оператора

0:32любом случае в дальнейшем всегда можете

0:35вернуться и посмотреть этот урок снова

0:37для того чтобы освежить ваше знание об

0:39этом операторе не забудьте подписаться

0:41на канал жмакнуть колокольчик чтобы не

0:43пропускать следующие уроки но теперь

0:44непосредственно к делу для начала

0:46рассмотрим ситуацию когда у нас вообще

0:49возникнет необходимость использования

0:50оператора условного нал кстати выглядит

0:53он вот таким вот образом

0:54вопросительные знаки . итак у нас есть

0:58некий метод который возвращает нам acer

1:01в данном случае это у нас простой пример

1:03мазер end of как я уже говорил это может

1:05быть абсолютно любая информация массив

1:08чего угодно и запрашиваться данную

1:09информацию на сможет из базы данных к

1:11каким-то счастье перекрестном какому-то

1:13этим в данном случае у нас в качестве

1:16заглушки такого запроса выступает ггт

1:19рай и в текущей своей реализации он нам

1:22вернет массив из трех элементов где у

1:24нас будут храниться цифры один два и три

1:26на 24 строчки кода в мы вызываем данные

1:30метод и в переменной r и получаем его

1:32результат в дальнейшем на 24 строчки

1:34кода мы считаем сумму элементов данного

1:37массива с помощью метода расширения сам

1:39если мы сейчас этого запустим то все без

1:41проблем неплохо работает но как я уже он

1:44сказал этот метод гетерой у нас является

1:47заглушкой и эмулирует ситуация когда мы

1:49получаем эту информацию с какого-то

1:50внешнего источника существует

1:52вероятность что из внешнего источника

1:53вместо реальных данных нашем массиве нам

1:56придет нал в таком случае если мы

1:57запустим наш программку мы получаем

1:59исключение давайте выясним более

2:01подробно почему мы это исключение

2:03получили на 24 строчки кода в нас

2:05брейк-пойнт пускаем дебаггер с помощью

2:08клавиши f5 с помощью клавиши f10

2:11делаем шаг и мы видим что в нашем

2:13массиве сейчас знал потому что метод

2:15гетерой нам вернул нам вместо реальных

2:17данных ну вот почему и данном случае на

2:20двадцать шестой строчке кода где у нас

2:22вывод в консоль мы пытаемся обратиться к

2:24объектам и рык переменной май рыб

2:26вызвать у неё метод сам чтобы она

2:29посчитала сумма алиментов всех массивов

2:31как она это может сделать если у нас там

2:34сейчас снова вспоминаем урока ссылочных

2:36и значимых типах и мы понимаем что у нас

2:39по факту есть ярлык который не ссылается

2:42на реальные данные в куче

2:44соответственно мы пытаемся сложить

2:46какие-то элементы которые не существуют

2:49потому что нет на нас мы сила с

2:50элементами в реальности у нас только

2:52ярлык который не присвоена ссылка на

2:54данные управляемой кучи ответственно

2:57попытавшись это сделать мы получаем

2:59исключение

3:00типичная ситуация как это можно обойти

3:02это выполнить проверку на нал нашего

3:05массива

3:06если допустим dismal то мы будем

3:08выводить сообщения с ума элементу

3:10массива март допустим тогда потому что

3:15нет у нас массе никаких элементов иначе

3:18мы реально выполняем наш код в таком

3:21случае мы не получим exception потому

3:23что мы проверяем все это дело на нал и

3:25если мы сейчас добавили все это

3:27запускаем выполняется проверка на налог

3:30и исполняется именно та ветка где мы не

3:32обращаемся к массивах котором много

3:33просто выводим сообщение что сумма

3:36элементов массива 0 идем дальше как

3:38видите у нас существенно увеличилась

3:40размерность нашего кода и нас такое дело

3:43понятное дело не устраивает давайте все

3:45это откатим обратно и в данном случае

3:49нам поможет

3:50оператор условного но вместо того чтобы

3:52делать все это проверку на нал

3:54мы вот здесь прежде чем мы обращаемся к

3:57нашему массиву

3:57можем поставить ? и далее . что теперь

4:00изменится по в ходе выполнения нашей

4:02программы прежде чем обращаться к нашему

4:06массиву пытаться сложить его элементы

4:09будет выполнена проверка на на ул так

4:11вот если в момент вызова вот этого

4:13оператора в нашем массиве будет на а то

4:16дальнейший ход выполняться не будет

4:18соответственно у нас не будет попытки

4:19складывания не существующих элементов

4:21результате этого выражения если в

4:24массиве был налто вместо того чтобы

4:25выполнять вот этот код у нас здесь таки

4:28останется на давайте запустим это всегда

4:31баги смотрим в массиве у нас щас нал и

4:33если мы выполняем код на двадцать шестой

4:36строчке кода у нас просто выводиться

4:38сообщение сумма элементов массива но как

4:40видите 0 там нигде нету той простой

4:43причине что к вот этой фразе сумма

4:45элементов массива мы добавили канал то

4:47бишь ничего но если в нашем массиве

4:50будут реальные элементы и мы запустим

4:53такой код то нас выполнится и элементы

4:56массива у нас будут подсчитаны давайте

4:58вернем опять ситуацию как будто в нашем

5:00массиве у нас будет нам

5:02что нам делать если мы все-таки хотим

5:04выводить какое-то дефолтное значение

5:06если вы смотрели прошлые уроки вы знаете

5:08что у нас существует еще и оператор

5:10объединения снов и в позапрошлом уроке я

5:13упоминал что оператор объединения стал

5:16часто очень часто используется именно с

5:19вот этим вот оператором оператором

5:21условного на таким образом мы их можем

5:24комбинировать случае если в нашем

5:25массиве будет на а вот этот код у нас

5:28выполняться не будет то есть методом сам

5:31но вместо вот этого всего вот этого

5:34всего что я выделю у нас будет нал

5:37соответственно здесь мы можем

5:38использовать оператор объединения сноу и

5:41выводить дефолтное значение единственный

5:44нюанс это выражение нам нужно взять в

5:46скобочки чтобы она корректно

5:48распознавала с при конкатенации со

5:51строкой запускаем еще раз все это виды

5:53баги в массиве у нас сейчас знал

5:55соответственно этот оператор проверяет

5:57наш массивом видишь что там на а он не

6:00будет вызывать метод сам но как

6:02результат

6:03вместо вот этого всего выражения мы

6:06получаем нал далее у нас идет оператор

6:09объединения снова он проверяет это

6:12результат видит что-то нал и подставляют

6:14дефолтное значение 0 как результат на

6:17консоли мы получаем сообщения сумму

6:18элементов массива 0 если же в нашем

6:21массе я не нал а реальные данные

6:23запускаем de bani

6:25ну вот масс массивно три элемента антами

6:27с этим 23 что у нас в этом случае

6:30произойдет наш массив провериться с

6:32помощью этого оператора он видит что-то

6:34мне мал и ответственно будет вызван

6:36метод сам далее оператор объединения

6:38снова проверяет все что то у нас

6:40получилось он видит что у нас нам сумма

6:42реальных чисел они нам соответственно

6:44дефолтное значение использоваться не

6:45будет и мы консоль мы получим сообщение

6:47о сумму элементов массива 6 теперь

6:50рассмотрим ещё один пример типичную

6:52ситуация которая он придет встречаться в

6:54постоянно когда вы будете разрабатывать

6:56приложения на языке программирования си

6:58шер у нас здесь есть класс person этот

7:01самый класс который мы использовали в

7:03позапрошлом уроке где показывал пример

7:05работы с оператором объединения сноу на

7:08примере winforms кстати сегодня у нас

7:11тоже будет примерно winforms

7:13если мы посмотрим на реализацию этого

7:15класса там у нас имеется три поля со

7:17своими данными со камней мото фамилия

7:19имя отчество и в данном случае у нас

7:21добавилась

7:22еще одно поле это контакты данного

7:24человека эти контакты у нас реализованы

7:27в отдельном классе в данном случае мы

7:30ограничились телефонным номером и

7:32email если мы вернемся непосредственно к

7:34нашему коду то мы видим что если у нас

7:37создан объект класса parsun мы должны

7:39обратиться через точку к нему получить

7:42доступ к его контактам и далее мы можем

7:44получить уже доступ к телефонному номер

7:46на каждом из этих шагов мы можем

7:49получить нам reference exception каждый

7:52из объектов этого класса и сам объект

7:56класса торсон и контракты и фоном барр

7:59это

7:59ссылочные типы соответственно в каждом

8:03из этих полей

8:04везде каждом элементе этой цепочки мы

8:06можем наткнуться на но соответственно

8:08можно получить на убрав индекс общин для

8:10начала давайте рассмотрим благополучный

8:13исход ситуации итак наша с вами задача

8:16получить телефонный номер этого человека

8:19и вывести его на консоль в этом простом

8:22примере опять-таки мы рассматриваем

8:24ситуации когда информацию об этом

8:26человеке мы получаем от кто-то извне

8:28база данных и щеки запрос неважно

8:31соответственно мой как мы можем получить

8:33себе полную информацию о человеке так и

8:35частичную такие допустим вообще можно

8:38получить нал и соответственно

8:39обратившись к этому полю получим новый

8:41francisco сообщи в данном случае почти

8:44заглушки у нас выступает опять-таки me

8:46to get тоже сам ставим брейк пойнта 24

8:49строчки кода и в данном случае в данной

8:53реализации нашей заглушки мы реально

8:55получаете данные который нам нужны нам

8:57возвращается объект класса парсон у него

9:00создан объект класса compact и

9:02соответственно у него есть фон набор

9:04куда мы печатали вот такую вот заглушку

9:06мы преспокойненько получаем доступ к

9:08этому филда то есть поле

9:10вот какие данные у нас переменный фоном

9:12барр для наглядности я просто сохраняя

9:15ее отдельно но в принципе мы могли бы

9:16сразу вводить информацию вот сюда в

9:18конце ну и в дальнейшем мы этот номер

9:21выводим на консоли теперь рассмотрим

9:23такую ситуацию мы сделали запрос к базе

9:25данных допустим и вместо реального

9:28объекта класса person

9:29но вернулся нам

9:30теперь смотрите вот здесь мы пытаемся

9:33обратиться к полю контакты к телефонному

9:35номеру

9:37у объекта классы по лесам но признал

9:41то есть у нас есть первый для объекта

9:44класса процессом а реальных данных

9:45управляем на куче нет соответственно

9:48если мы попытаемся обратиться к реальным

9:50данным классов person например кива

9:52контактным к фоном барр по их нету мы

9:56получаем доллары френдс exception

9:57соответственно для того чтобы в данном

9:59случае

9:59избежать подобной ситуации мы должны

10:02выполнить проверку нашего объекта

10:04персонал чтобы там ни был мал и так у

10:07нас дикси класса персонал мы вообще

10:09ничего не выверено консоль

10:11конечно мы можем здесь составить

10:12какой-то код допустим написать вот так

10:15нет данных и случай если у нас в объекте

10:18класс a person

10:19ничего не была во владении данных потому

10:21что код не выполнился хорошо

10:23представим что нам теперь все таки

10:25вернулся какой-то объект класса тоже без

10:28проблем запускаем наш код и еще раз

10:31объект was a person as вернулся мы

10:33попадаем в тело iv обращаемся класс a

10:35person не обращаемся к контактам

10:37смотрите что у нас сейчас vkontakte

10:40vkontakte у нас нал ну нет у него

10:42контактов с нам опять получаем на ура

10:45фрицек сообщить соответственно либо

10:47здесь внутри нужно еще один из

10:48дописывать и проверять контакты теперь

10:51еще на нал и вот так вот все делать либо

10:54же вот так нужно сделать проверять на то

10:56что тоже summer in anal и контакты не

10:59равно тогда вот этот код нам не

11:00понадобится в любом случае что так что

11:02до кода разрастается и поехали дальше

11:05теперь у нас в person не нал

11:07а в контактах нал этот код не

11:09выполняется в теле блока if

11:12соответственно мы получим вывод не отдам

11:14теперь давайте добавим сюда еще контакты

11:17создадим ему контакты

11:18но в самих контактах у нас нету допустим

11:22телефона мы не писали логику телефон

11:24смотрим что у нас будет теперь я думаю

11:27вы уже догадываетесь

11:28что что наснимал в контактах у нас не

11:30нал опять мы попадаем в блоков фоном

11:34брана snow

11:35соответственно здесь у нас в этой

11:37переменной нал и на вывод мы получаем

11:40ничего но это хорошо что метод writeline

11:43класса консоль может работать снова если

11:45мы должны с этим телефоном были еще что

11:47то делать там и вы получили еще один

11:49мало reference xf таком случае нам нужно

11:51дописать еще одну проверку и проверяет

11:53что еще и конном бы равен

11:55но таким образом наш код все

11:57разрастается разрастается и разрастается

11:59во избежание вот этого всего мы можем

12:02использовать оператор условного на

12:03давайте теперь все это же сделай но

12:06только с оператором условного нам

12:08выбираем этот лишний код каждый момент

12:11где у нас есть вероятность того что мы

12:13получим нам

12:14мы должны использовать литературу словно

12:17смотрите данном случае я стою вот здесь

12:20в объекты класса person мы получим нал

12:22давайте сейчас запускаем у нас там

12:24сейчас нал наш оператор условного на

12:26проверяют есть пита но если там реально

12:28налто вот эта вот вся цепочка который

12:30идет дальше она уже не будет выполняться

12:32просто в переменную фоном барр нос при

12:34свой канал ну и дальше мы на консоль

12:37ничего не получит соответственно так как

12:39мы с вами рассмотрели ситуацию когда в

12:41этой цепочки и в контактах может быть

12:44нам и в самом телефоне может быть нам

12:46нам нужно всю цепочку

12:48проверять потому что если где-то в этой

12:50цепочке у нас будет новый мы обратимся к

12:52объекту в котором но мы получим новый

12:54рефрен секс шоп соответственно если у

12:56нас допустим будет вот такая ситуация

12:58когда у нас позже саннин all the

12:59vkontakte0

13:00и вот здесь мы не проверяем наши

13:02контакты с помощью оператора условного

13:04наук и вот здесь при обращении контактам

13:05мы обратимся к несуществующим данным и

13:08все равно получаем доллары france

13:09exception то есть в этой цепочке научи

13:11вот здесь нужно добавить

13:12оператору словно в таким образом

13:14это получается как будто ну некие вагоны

13:18поезда для того чтобы избежать крушения

13:20нам нужно выполнить вот эту цепочку

13:21pro.ru нас выполняется ярко персонал

13:24если там не нал то мы обращаемся

13:27контактам и выполняется проверка

13:29контактов на на контактах у нас же знал

13:32поэтому мы уже не будем обращаться

13:33пытаться обратиться к полю фон на борт

13:35потому что я просто не существует и

13:37сразу же поместим нашу переменную фон

13:39обр временное значение на ул но как

13:42видите при такой реализации мы на вывод

13:44ничего не получаем и здесь имеет смысл

13:46использовать дефолтное значение а для

13:50плотного значения у нас есть оператор

13:51объединения знал два знака вопроса как я

13:54говорил эти два оператора оператор

13:57объединения снов вот этот оператор

13:59условно в вот этот они очень часто

14:01используются вместе и здесь мы допустим

14:03напишем нет данных если мы в этой всей

14:05цепочке которой мы проверяли с помощью

14:07оператора условно в

14:09вот здесь так и не получили реальные

14:11данные то есть у нас все равно где-то

14:12здесь встретился мал вот в этом всем

14:15выражении то наш оператор объединения

14:18снова выглядит этот но и в качестве

14:21диффузного значения приходят сообщения

14:23нет данных данном случае у нас в объекте

14:25person была информация в контактах он

14:28основал соответственно дальше выполнения

14:29не пошло после этого всего оператор

14:32кабине я снова увидел здесь но в этой

14:34части кода и присвоил фоном барр

14:36дефолтное значение на вывод мы получили

14:38нет данных тоже есть у нас изначально

14:39вместо объекта класса торсен будет нам

14:42все отработать точно так же ну что мы

14:44всю цепочку проверяя если же у нас

14:46вернулся decals a person с контактами и

14:49с телефонным номером вот эта вся цепочка

14:51проверок на нал у нас отработает

14:54далее этот оператор видит что здесь есть

14:57реальные данные и фоном барр мы получаем

15:005 по нам борт и выводим его на консоль и

15:03вот эта перемена мы использовали для

15:05того чтобы просто наглядно было видно

15:06какие реально данные у нас получается

15:09после обработки всей этой цепочки на

15:11самом деле она не нужно мы можем сразу

15:13вот так делать

15:15таким образом объем кода у нас учить

15:18сокращается и мы соответственно получаем

15:20все нужные нам проверки

15:21теперь же давайте рассмотрим ещё один

15:23пример работы с оператором условным орал

15:25на примере нашел простого приложения

15:28который мы писали на winforms

15:30позапрошлом уроке задачей данного

15:32приложения является вывод списка не этих

15:35персонажей и в позапрошлом уроке при

15:37нажатии на кнопку рану нас выводилось

15:39информация только фамилии имени и

15:41отчестве данном уроке я добавил

15:42возможность выводить еще контактную

15:44информацию виде номера телефона если мы

15:47нажимаем кнопочку ран у нас водится

15:49практически все то же самое но только

15:51добавилось еще позиция фоном барр и как

15:53видите у нескольких персонажей такого

15:56телефона нету но одного из них есть

15:57номер телефона в данном случае для

15:59примера здесь просто набор цифр это

16:01абсолютно тот же класс парсон который мы

16:03с вами только что использовали мы вам

16:05можем использовать в проекте лосины по

16:07той простой причине что в данном проекте

16:10качестве ссылки у нас подключен проекта

16:12lesson on wf a8 wf это именно вот

16:16проектную информ который мы писали так

16:18вот в этом проекте у нас есть тот самый

16:19класс прошлом который мы только что

16:21рассматривали и разница лишь в том что

16:23нужно добавилось дополнительное поле

16:24контакты

16:25здесь у нас может содержаться телефонным

16:28анапе e-mail но email и в данном случае

16:30не используя используя только

16:31телефонный номер и вот он самого класса

16:35parsun

16:36мы добавили помимо метода get full name

16:38которые мы использовали в позапрошлом

16:40уроке для вывода информации здесь не

16:42будем повторно смотреть здесь ничего не

16:44поменялось мы добавили еще не пакет

16:46фоном барр и здесь в этом методе гид по

16:48набору на собственно выполняется те же

16:50самые проверки с помощью оператора

16:52условного нал делается это по той же

16:54самой причине потому что если мы

16:56допустим получаем список объектов класса

16:58пашин откуда-то извне и то не факт что

17:01там будут контакты и не факт что в

17:03контактах будет именно телефонный номер

17:04возможно там будет только email или

17:06вообще ничего не будет соответственно

17:08вот эти все проверки реализованы в

17:10нашими attacked это джейсон амбар

17:12который нас возвращает строку которая

17:14формируется общение фона бар и

17:15соответственно

17:17тот самый телефонный номер если вам есть

17:19если же его нет то в качестве дефолтного

17:21значения будет возвращено записи нет

17:23данных логика работы абсолютно точно

17:25такая же

17:26какую мы использовали под здесь но

17:28только здесь она скажем так на более

17:30конкретном примере

17:32ещё раз посмотрим логику которая у нас

17:34отрабатывает при нажатии на кнопку ран

17:37весь у нас есть небольшие изменения но

17:39во первых это выйдет то шанс которая нас

17:41возвращает список людей наша заглушка мы

17:43его модифицировали той что для одного из

17:45них у нас добавляется еще контакт вот у

17:47нас есть некий а но он которую мы не

17:49знаем для него создается объект комплект

17:52и в более набор добавляет цена

17:54соответственно у одних людей получается

17:56так что номер телефона есть а других нет

17:58опыт этих троих во-первых поле контактов

18:01будет мал и соответственно никакого

18:03телефонного номера там не будет ну out

18:05to 4 будет соответственно именно поэтому

18:08нам и нужна вот эта проверка если у нас

18:10вообще нету контактов или не по

18:12телефонного номера до соответственно у

18:14нас будет выводиться сообщение

18:16нет данных ну и у нас немножечко

18:19модифицирован вывод этих самых сообщений

18:21в listbox это вот сюда мы перебираем

18:24список всех элементов типа торсом и

18:28у каждого из них вызываем метод get full

18:31name и помимо этого вызываем get phone

18:34number соответственно под get фон и нам

18:37формируют запись фамилии имени и

18:40отчестве и дальнейшем еще возвратили

18:42взгляд фоном барр и вот эти вот

18:44результаты которые возвращают 2 эти

18:46метода у нас формируется в отдельную

18:47строку через разделитель соответственно

18:49благодаря этому мы получаем вот такой

18:52список дальнейших уроках мы с вами более

18:53подробно рассмотрим десктопную

18:55разработку в том числе и на winforms а

18:57весь исходный код всех примеров которые

18:59мы сегодня рассматривали для патронов

19:01каналов с доступом к исходному коду

19:03будет доступен на обед реване и не

19:05забудьте поставь лайк если вам

19:06понравился данный урок он был для вас

19:08полезным и интересным если желание

19:09поддерживать меня канал финансово

19:11информацию том как это сделать найдете в

19:13описании буду рад если поделитесь

19:15уроком с друзьями ну и конечно если вы

19:17не подписаны на канал то обязательно

19:18подписывайтесь здесь уже есть и будет

19:20еще много полезных и интересных уроков

19:22для вас всем спасибо за внимание пока

More from #SimpleCode

Recently added transcripts

Browse the whole transcript library

This transcript was generated from the captions YouTube publishes for this video. Get the transcript of any YouTube video atfreeyoutubetranscribe.com, free, unlimited, no sign-up.