Мы изучили самые базовые типа данных и конструкции языка си шарп и можно переходить к сути вопроса — изучению ООП. Однако я хочу остановиться еще на одном моменте — сокращениях в коде, которые не только сделают Ваш код меньше, но и заметно увеличат его читаемость.
Если Вы смотрели примеры из прошлой части, Вы могли заметить, что все каждая новая переменная была объявлена в новой строчке, что занимает много места. Язык C# позволяет объявлять несколько переменных одного типа через запятую.
int var1 = 1, var2 = 2, var3 = 3; string str1 = "Str1", str2 = "Str2"; Class c1 = new Class(), c2 = new Class();
Вторым возможным путем сокращения Вашего кода может стать использование кратких записей для простых операций над переменной (сложения, вычитания, умножения и т.п.)
int number = 0; number += 5; //тоже самое что number = number + 5; number /= 5; //тоже самое что number = number / 5;
Таким образом общий шаблон краткой записи выглядит как «переменная операция= значение»
Если мы говорим об операции сложения или вычитания, а в качестве значения мы используем еденицу, то возможны дополнительный варианты сокращения:
number++; //Прибавление 1 к number. Способ 1 number--; //Вычитаем 1 из number. Способ 1 ++number; //Прибавление 1 к number. Способ 2 --number; //Вычитаем 1 из number. Способ 2
Между способом 1 и 2 существует различие, которое можно наглядно продемонстрировать на примере:
int a = 5, b = a++, c = ++a;
В результате работы данной программы в b мы получим значение 5, в то время как в c значение 6. Связанно это с тем, что ++ вначале переменной — сначала увеличивает значение переменной, а потом возвращает ее результат. ++ в конце переменной — сначала возвращает значение переменной, а потом увеличивает его на единицу.
Еще один способ сократить пару символов в Вашем коде — это возможно не ставить фигурные скобки { } после объявления циклов, условий и других конструкций. В данном случае к объявленному действию отнесется первая идущая следом команда.
int a = 0, b = 0; if(a > 0) { a++; ++a; } if(b > 0) b++; ++b; //данная строчка выполнится, так как после if нет фигурных скобок //a = 0 //b = 1
Примечание: Не смотря на прозрачность данной конструкции, я советую всегда использовать фигурные скобки. Так как это избавит разработчиков от дополнительного действия (проставить скобки), если они захотят добавить код в такой блок.
Для тех, кто уже уверенно владеет типами данных и «на лету» может объявлять нужные переменные, могу посоветовать использовать универсальную конструкцию var. Данное ключевое слово автоматически заменится компилятором на тип, который будет определен после знака равенства. Данный способ имеет ограничение — на одно ключевое слово var должна создаваться только одна переменная.
int a = 0; var b = 0; string c = "Test"; var d = "Test"; bool e = true, f = false; var g = true, h = false; //ошибка так как возможно создать только одну переменную за раз VaryLongClassName x = new VaryLongClassName (); var y = new VaryLongClassName ();
Забегая вперед, хочется рассказать о краткой возможности заполнить массив данными. Приведенные в примере массивы будут абсолютно одинаковы.
int[] arr1 = new int[3]; arr[0] = 0; arr[1] = 1; arr[2] = 2; int[] arr2 = new int[] { 0, 1, 2 };
Теперь представим ситуацию что нам нужно выполнить какое-либо действие, если число x равно 0, 10, 33, 199, -1. Можно написать данную проверку в лоб:
if(x == 0 || x == 10 || x == 33 || x == 199 || x == -1) { //... }
Однако если воспользоваться краткой записью создания массива, а так же зная то, что в C# присутствует функция проверки вхождения значения в массив можно получить следующее:
if(new int[] { 0, 10, 33, 199, -1 }.Contains(x)) { //... }
Работать такой вариант будет медленнее, однако он легче читаем и его гораздо проще редактировать.
Одно из моих самых любимих сокращений — краткая запись условия if else. Условие можно заменить двумя символами ? и :.
int a = 0, b = 1; if(b > 0) { a = 2; } else { a = 3; } int d = 1, c = d > 0 ? 2 : 3;
Данный пример наглядно демонстрирует насколько короче становится код с использование краткой формы условия if else. Как можно заметить из примера: сначала мы записываем наше условие, потом ставим знак вопроса, далее пишем возвращаемое значение если условие истинно (true), а далее через двоеточие возвращаемое значение если условие ложно (false).