Full transcript
0:00приветствую вас друзья меня зовут сергей
0:01мы с вами продолжаем изучать язык
0:03программирования си sharp и сегодня мы с
0:05вами будем разбираться в том что такое
0:07модератор на объединения то есть вот
0:09такая вот штука для чего нужен и как его
0:11использовать не забудьте подписаться на
0:13канал и жмакнуть колокольчик чтобы не
0:15пропускать новые уроки но и
0:17непосредственно к делу
0:18данный оператор это просто
0:19синтаксический сахар то есть добавляет
0:21удобства при написании кода и задачи
0:24этого синтаксического сахара этого
0:26оператора является возможность установки
0:29дефолтного значения для типов данных
0:32которые допускают значение
0:34то есть для ссылочных типов то есть для
0:36класс сегодня мы рассмотрим несколько
0:38примеров его использованием от самых
0:40простых в пару строчек кода да немного
0:42более сложных на примере десктопного
0:44приложения написанного на winforms
0:46скажем так в условиях более приближенных
0:49к реальности когда вы занимаетесь
0:51разработкой реального приложения у вас
0:53часто возникает ситуация когда вы
0:55получаете данные из какого-то внешнего
0:56источника допустим это может быть базы
0:59данных это может быть какой-то ящичек и
1:01запрос какому-то api который высылает
1:04вам данные и по потом с ними работаете в
1:07принципе не важно каким образом вы
1:08получили эти данные но когда вы
1:10работаете со ссылочными типами
1:12существует вероятность что вместо
1:14реальных данных вы получите нал кстати
1:16если вы не знаете что такое налто
1:18рекомендую посмотрите прошлый урок там
1:20мы все это подробно разбирали ссылку
1:21найдете в описании так вот если вы
1:23получаете нал это означает что вы не
1:25получили каких-то реальных данных и
1:27часто возникает необходимость каким-то
1:28образом эту ситуацию обработать например
1:31иметь какое-то дефолтное значение
1:32давайте сначала рассмотрим проблему а
1:34потом уже применение оператор на
1:36двадцать третьей строчке кода у нас есть
1:38строка кода мы поместили значение тесты
1:40мы просто всюду делу выводим в консоль
1:42все прекрасно работает но что если у нас
1:44по какой-то причине в строке не реальное
1:46значение
1:48а вот нам пришел туда нал давайте
1:50запустим до баги
1:51двадцать пятой строчке кода breakpoint
1:54переменный стр у нас нал ну в
1:57зависимости от ситуации как построен код
1:59который будет у нас работать с этой
2:01переменной мы либо же вообще получим
2:02ошибку потому что попытаемся обратиться
2:04к данным которых нет либо же если hots
2:07который работает с такой переменная
2:09имеет какую то обработку этой ситуации
2:11как вот например метод writeline класса
2:12консоль
2:13там и просто ничего не получим у нас был
2:16на у то есть данных гибких не было и у
2:18нас ничего не вылилось
2:19но допустим нам случае если мы не
2:21получили никаких данных нужно как-то об
2:23этом сообщить пользователю чтобы мы
2:25предприняли исходя из тех знаний которые
2:28у нас есть сейчас как минимум нужно было
2:30бы добавить какую-то проверку на
2:33если значение которое хранится нашей
2:35переменной равно нал там он был выводили
2:37какое-то сообщение и найти в другом
2:39случае выводили бы именно те данные
2:41которые нам поступили в таком случае
2:44если у нас нашей переменной нал получаем
2:47сообщение нет данных
2:48если там не нал получаем наши данные
2:51либо уже второй вариант завести вторую
2:54переменную и все равно у нас сохраняется
2:56тоже проверка если в переменной стр у
2:59нас нет данных там ноутом и в нашу новую
3:01переменную присваиваем сообщения нет
3:02данных если же в переменной стр все таки
3:05данные были то у нас нашу новую
3:06переменную присваиваются те данные
3:08которые были старые переменные только
3:10после этого все это дело выводится на
3:12консоль реализация немножко другая но
3:14работает точно так же сейчас нас
3:16переменная стр слова тест получаем на
3:18вывод тест если у нас переменный стерн
3:21all получаем сообщение нет данных в
3:23любом случае что то что тот вариант
3:25реализации добавляет нам довольно много
3:28кода всего лишь для того чтобы проверить
3:30данные в одной-единственной переменной и
3:32установить для нее дефолтное значение
3:34соответственно именно для таких целей и
3:36был придуман операторного объединения
3:39вот эти два ? а он позволяет нам по
3:41факту реализовать а то же самое
3:43поведение которое мы делали вот этими
3:45двумя способами только гораздо гораздо
3:47меньшем объеме
3:48давайте этим с вами и займёмся ударим
3:52весь этот код и используем операторного
3:54объединения у нас есть переменная эстер
3:56которую мы хотели бы проверить на нам
3:58соответственно после этой переменной
4:00нам нужно описать два вопросительных
4:02знака тот самый операторного объединения
4:04и после них добавить дефолтное значение
4:07наше дефолтное значение была фраза
4:10то есть строка нет данных обращаю ваше
4:13внимание на то что если у нас тип данных
4:15string
4:16той дефолтное значение должно быть того
4:18же типа данных если бы у нас был
4:20какой-то другой тип данных ссылочный
4:22который позволяет значение она латает
4:23дефолтное значение должно было
4:25соответствовать там
4:25типу данных это проверка заняло всего
4:27лишь в парочку символов запустим наш код
4:29сейчас у нас в стр но соответственно мы
4:32должны получить сообщение нет данных
4:35мы его и получаем но если мы сюда
4:37добавим какую-то фразу например тест в
4:40нашу переменную str то мы получим нашу
4:43фразу тест для наглядности для того
4:45чтобы посмотрите добавки как это
4:46работает давайте результат работы этого
4:48оператора будем сохранять все таки
4:50отдельных переменных резал хотя в этом
4:51нет необходимости то просто для
4:53наглядности и посмотрим что у нас будет
4:56происходить где баги на двадцать пятой
4:58строчке кода на за breakpoint
4:59смотрите в переменные сторона сейчас
5:01тест соответственно пустой как у нас
5:03работает этот оператор в переменную
5:05резал помещается значение тест в строка
5:08тест и далее мы выводим ее на консоль
5:10можно не делать этого
5:11если у нас здесь но
5:14вот сейчас переменный стр нал после того
5:16как будет выполнена работа этого
5:18оператора переменную резалт у нас
5:20поместилось наше духовное значение нашим
5:22дефолтным значением является фраза нет
5:24дам видите довольно просто и полезно для
5:26того чтобы по глубже разобраться в
5:28вопросе рассмотрим еще одну ситуацию у
5:30нас даже самая переменная стр с фразой
5:33тест который помещена строка тесты и мы
5:36просто выводим на консоль количество
5:38символов в этой строке и того чтобы
5:40получить количество символов в строке
5:41нам нужно обратиться к свойству лэнс о
5:44переменной стр через точку но выполнив
5:47код мы получаем информацию о том сколько
5:48у нас символ в строке тратит очень
5:51допишем ну и соответственно все работает
5:54но если у нас вдруг случилось так что у
5:57нас здесь нал если мы запустим такой код
5:59мы получим исключения на reference
6:01exception почему это происходит мы с
6:04вами обсуждали в прошлом уроке но если
6:06коротко мы пытаемся обратиться к
6:08свойству лэнс
6:09у объекта которого не существует
6:11управляемой кучи так вот данном случае
6:13мы бы могли поступить таким образом мы
6:16бы могли использовать промежуточную
6:18переменную rezound
6:19и присваивать туда нашу переменную str
6:22и в случае если бы у нас переменная стр
6:26был нал мы бы присваивали туда пустую
6:28строку пустая строка это все-таки уже
6:31денал эта строка в которой просто нету
6:33символов и здесь соответственно
6:34обращаюсь blackalex так вот если бы мы
6:37делали это вот таким образом то вместо
6:40исключения анавара франц эксепшен мы бы
6:42получили число ноль что нашей строке 0
6:45символов еще один маленький момент
6:47помимо того что нам просто можем указать
6:49к дверь кавычки без символа внутри для
6:52того чтобы создать пустую строку мы
6:55можем обратиться к типу данных string
6:57который является алиасом для класса
7:00string то есть псевдонимом и через точку
7:04обратиться к его на свойства empty
7:06результат работы программы будет тот чем
7:08в переменную resort будет присвоен а
7:10пустая строка то есть без символов но
7:12как бы ваше намерение по ходу будут
7:15более ясные здесь явно видно что вот
7:17хотите присвоить сюда именно пустую
7:18строку
7:19они просто забыли добавить что тор
7:21кавычки если мы вас начальной переменной
7:23стр изменим значение сна у допустим на
7:26тесты запустим то наша программа
7:27работает как прежде на самом деле
7:29подобную проблему можно решить без
7:32дополнительной переменной для этого
7:33требуется использовать оператор
7:35условного на лт моего мы с вами
7:36рассмотрим в следующем уроке более
7:38подробно и эту же ситуации тоже раз
7:40внутрь теперь рассмотрим пример немного
7:42более приближены к реальности сильно
7:44упрощенный но тем ни менее
7:46более приближенный для этого я создал
7:48дополнительный проект который у нас
7:50будет работать на winforms в этом же
7:52solution пример который у нас
7:54представлен здесь и по продвижению в
7:56изучении языка программирования си sharp
7:58гораздо дальше чем мы зашли но тем не
8:01менее я считаю его будет уместно здесь
8:03добавить для того чтобы более наглядно
8:04проиллюстрировать применение
8:06оператора на объединение сначала просто
8:08запустим нашу программку посмотрим что
8:10она делает здесь обычная формочка
8:12формочки есть ли xbox задача
8:14elementalist бокс просто уводить
8:16элементы построчно и есть кнопочка ран
8:19которая запускает все это дело и все
8:21если мы запускаем кнопочку ран у нас
8:25формируется список из нескольких человек
8:28который должен вывести их фамилию имя и
8:32отчество
8:34но не у всех людей из этого списка есть
8:36отчества как видите отчество есть только
8:38у одного человека о 1 у двух других его
8:41нету и соответственно это вполне
8:43реальная ситуация когда вам может
8:46потребоваться вместо
8:48отсутствие просто отсутствие информации
8:51вывести какую-то фразу например нет
8:53данных или без отчества или что-то
8:55подобное давайте посмотрим что у нас там
8:58под капотом информация о человеке где
9:01она содержится фамилия имя отчество
9:04имплементировать классы парсон поля
9:06first name middle name is секундные
9:09это наше имя отчество и фамилия классе
9:12торсон у нас есть метод get full name
9:15задачи которого сформировать и вот ту
9:18самую запись одну запись о человеке
9:21которую мы в итоге получаем вот сюда
9:24соответственно именно вот этот код нам
9:27не нужно будет модифицировать далее
9:29посмотрим на код который у нас
9:30непосредственно выводит все это дело на
9:32экран у нас есть обработчик события
9:35нажатия на кнопки здесь у нас происходит
9:37очистка нашего списка
9:40если это может до этого были какие-то
9:42запись например если несколько раз
9:44же макнули по наши кнопочки чтобы у нас
9:46записи не просто добавлялись скал
9:47удалялись старые дальше на тридцать
9:49шестой строчке кода у нас вызывается
9:50метод get парсон который получает список
9:53объектов класса персон в котором
9:55хранится вся информация по фио каждого
9:58низу людей которые там есть далее весь
9:59этот список перебирается в цикле foreach
10:02и для каждого элементом то есть для
10:05каждого человека и у каждого человека
10:07вызывается метод get full name
10:09реализацию которого мы смотрели который
10:11собственно и формирует запись для нашего
10:13списка и
10:14в наш лист бокс в его список добавляется
10:17достройка которая у нас сформировалась
10:19после вызова метода get fun и
10:22метод get a person's с помощью которого
10:24мы получаем список людей с их фио
10:26это скажем нас некая заглушка здесь
10:28могла побыть обращения к базе данных
10:30либо же какому-то
10:32то есть обращение к кому-то внешнему
10:34источнику ну понятно дело для данного
10:35примера нам это не нужно мы здесь просто
10:38создаем новый список объектов персон и
10:41каждому вручную присваиваем фамилии имя
10:44и отчество
10:45но у некоторых этого поля и дал нам
10:47просто нет есть такие люди у которых
10:49вообще не творчество на самом деле
10:51реальная ситуация в реальных проектах
10:53такое тоже случается так вот как мы уже
10:55видели когда мы все это запускаем у нас
10:57вводится информация по этим людям и
10:59соответственно у некоторых людей
11:01информации об отчестве нет нам нужно
11:04изменить поведение нашей программы таким
11:05образом чтобы эта информация появлялась
11:07соответственно вот этот метод который
11:10для каждого человека у нас формирует
11:12полная фио полную запись где табличка
11:14listbox
11:15мы должны модифицировать и мы с вами
11:17должны сделать так чтобы в случае
11:19отсутствие отчество ростом выводилось к
11:21примеру фраза нет данных тут также к
11:23этому делали в более простом примере
11:25давайте сейчас представим что мы ничего
11:27не знаем об операторе на объяснения
11:29соответственно в таком случае нам
11:31придётся сделать вот что нам придется
11:33про
11:345 поле middle name канал и по факту если
11:38у нас гвидона и minolta вместо самого
11:40middle name а мы должны выводить фразу
11:43нет данных другом же случае возвращать
11:46строку в том формате какая у нас и было
11:48там где у нас была полями донной
11:50запустим как видите танк теперь у нас
11:52выводится отчества запись о том что нет
11:54данных но смотрите на самом деле это уже
11:56не очень удобно потому что код у нас
11:58разбросе а теперь представьте что нам
11:59похоже примерку пришлось бы сделать еще
12:01под фамилию и под имя то есть кот бы у
12:04нас разрастался очень сильно мы можем
12:06все это не делать она же просто
12:07использовать оператор на объединения как
12:10мы это уже с вами делали и просто
12:11немножко модифицировал вход вот таким
12:13образом получить тот же самый результат
12:15много раз до проще в принципе нам не
12:17составит труда вообще вся и сделать то
12:19же самое для фамилии и для имени
12:22ну правда у нас сейчас там везде есть
12:25данным
12:27допустим если мы пойдем тот метод где у
12:30нас все это дело заполняется и добавим
12:32еще какого-то персонажа и допустим
12:34заполни не только имя и напишем туда а
12:37много
12:37мы видим все это дело
12:40соответственно там где у него фамилия
12:41там будет фраза нет данных имя новыми
12:44отчество нет данных
12:45весь код данного урока для патронов
12:47канала с доступом к исходникам пули
12:49доступен на патреоне если вам понравился
12:51данный урок он был для вас полезным и
12:53интересным не забудьте поставить лайк
12:55под этим видео если у вас есть желание
12:56поддержать меня и канал финансовая
12:58информация там как это сделать найдете
13:00внизу в описании буду рад если потеряете
13:02с этим уроком ну и конечно если вы ещё
13:04не подписались на канал то обязательно
13:05подписывайтесь здесь уже есть и будет
13:07еще много полезных и интересных уроков
13:09для вас всем спасибо за внимание пока