
Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.
Розповідає Мош Хамедані, автор курсів з C# і AngularJS на udemy
Для тих, хто добре розуміє англійську, радимо також звернути увагу на подібну статтю про найчастіші помилки C# програмістів.
Багато студентів мого базового курсу із С# надсилають мені свій код, і, коли у мене є можливість, я його переглядаю і даю корисні поради для поліпшення їх навичок програмування. При цьому я помітив помилки, що часто зустрічаються. У цій статті я проллю світло на подібні моменти і розповім, як зробити Ваш код чистішим і спростити життя людям, які його підтримуватимуть.
Перевіряйте вхідні дані в першу чергу
Зверніть увагу на цей відрізок коду:
public void Draw (Shape shape){ if (shape != null) { Console.WriteLine ("Drawing " + shape.ToString()); Console.WriteLine ("---"); } else {
throw new ArgumentNullException ("shape"); }}
Зараз треба прочитати весь код до кінця, щоб дійти до рядка, де викидається виняток, якщо аргумент функції рівний null. Але куди краще було б перевіряти вхідні дані в першу чергу. Це полегшує розуміння того, як цей метод повинен використовуватися для людей, які читатимуть цей код після Вас. Тому давайте змінимо порядок операторів порівняння:
public void Draw (Shape shape){ if (shape == null) { throw new ArgumentNullException ("shape"); } else { Console.WriteLine ("Drawing " + shape.ToString()); Console.WriteLine ("---"); }}
Тепер Ви можете відразу визначити, який аргумент є валідним для передачі в цей метод, і Вам не треба переглядати весь код до самого кінця, щоб це зрозуміти.
Оператор else потрібний далеко не завжди
Продовжуючи з кодом із попереднього прикладу, якщо аргумент shape дорівнюватиме null, буде викинуто виняток, і тоді залишок методу точно не виконається. Тому немає жодного сенсу в додаванні else, який, крім того, додає відступів до більшої частини коду. Такий код виглядає чистіше:
public void Draw (Shape shape){ if (shape == null) { throw new ArgumentNullException ("shape"); } Console.WriteLine ("Drawing " + shape.ToString()); Console.WriteLine ("---");}
Зверніть увагу на те, що код після оператора if не має додаткових відступів.
Фігурні дужки?
Цей пункт є повністю суб’єктивним. Одні розробники люблять фігурні дужки, інші ні. Я особисто пройшов через різні стадії. Тут немає однозначної думки про те, як чинити правильно. Ви повинні самі для себе вирішувати, ставити фігурні дужки або опустити їх. Давайте приберемо фігурні дужки в нашому прикладі, і подивимося як це виглядає:
public void Draw (Shape shape){ if (shape == null) throw new ArgumentNullException ("shape"); Console.WriteLine ("Drawing " + shape.ToString()); Console.WriteLine ("---");}
Мені здається, тепер код став чистішим. А що Ви думаєте з цього приводу?
Звертайте увагу на назви ідентифікаторів
Назви ідентифікаторів у Вашому коді важливі так само, як і те, як Ви назвете своїх дітей. Я не серйозно. Ніхто не захоче читати чужий код з подібними назвами:
- od: Що означає od? Черговий день? Оператор доставки? Опція доступу?
- Button1_Click (): Що за Button1? І чим вона відрізняється від Button2?
- thisAs: А це що взагалі таке?!
Використайте назви, які без спотворень передаватимуть Ваші ідеї в коді.
Уникайте непотрібних змінних
У 80-х роках ХХ століття книги з програмування вчили нас оголошувати змінну з будь-якого приводу. Подивіться на цей відрізок коду, який читає два числа з консолі й виводить максимальне з них:
var firstInput = Console.ReadLine ();var firstNumber = Convert.ToInt32 (firstInput);var secondInput = Console.Readline ();var secondNumber = Convert.ToInt32 (secondInput);var max = (firstNumber > secondNumber) ? firstNumber: secondNumber;
Console.WriteLine (max);
У мене буквально очі на лоб вилізли, коли я оголошував усі ці змінні! У чому основна мета цього коду? Правильно – знайти максимум двох чисел. Тому firstInput і secondInput, які є рядками з ліченим введенням користувача, не є корисними або потрібними в цьому коді. Все, що нам потрібно – два числа. Часовий рядок, який ми отримуємо з консолі в процесі, не є важливим. Тому ці дві змінні ніяк не покращують цей код в плані читабельності, а тільки додають зайвого шуму. Ми можемо рахувати введення з консолі і перетворити його в число одним рядком коду:
var firstNumber = Convert.ToInt32 (Console.ReadLine());var secondNumber = Convert.ToInt32 (Console.Readline());var max = (firstNumber > secondNumber) ? firstNumber: secondNumber;
Console.WriteLine (max);
Загалом, уникайте оголошень непотрібних змінних. Використовуйте змінні для підвищення читабельності коду, а не навпаки.
Якщо поради в цій статті видалися Вам занадто тривіальними, зверніть увагу на статтю з 10 корисними особливостями мови C#.
Також радимо Вам ознайомитися зі списком із 20 інших програмістів, які дають корисні поради з програмування на C#.
Джерело: programmingwithmosh.com
Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?