Тема: правила створення читабельного коду, коментарі у тексті програми.
Мета: ознайомити з правилами створення читабельного коду та коментарів у тексті програми, навчити правильному синтаксу написання кодів та коментарів. Після вивчення матеріалу учень
Обладнання: ПК з встановленими ОС та середовищем мови програмування, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
2. Актуалізація опорних знань
3. Вивчення нового матеріалу
При створенні програмного продукту розробник:
Чим швидше розробник буде виконувати ці завдання, тим швидше він зможе випустити чергову версію продукту, тим динамічніше розвиватиметься його кар'єра. Тому код має задовольняти такі вимоги:
Щоб отримати якісний код, достатньо дотримуватися таких правил:
Дотримуватися стандартів оформлення коду. У кожної мови програмування є свій стандарт оформлення коду: які і де робити відступи (зазвичай 2 або 4 на один рівень вкладення), де ставити прогалини і дужки, як називати об'єкти, як коментувати код тощо — див. посилання для C# (1, 2), C++ (1, 2, 3), Java, Javascript (1, 2, 3), Pascal / Delphi, Perl, PHP, Python, Ruby. Деякі організації (наприклад, Google) підлаштовують (змінюють, деталізують) стандарти під свої специфічні потреби. Стандарти можуть містити налаштування редактора коду, які допоможуть дотримуватися відповідного стилю.
Надавати змістовні назви змінним, функціям і методам. Інакше кажучи, вперше прочитавши код стороння людина має зрозуміти призначення змінної, функції або методу.
Невдалий щодо назв код:const fnm = 'Tom'; const lnm = 'Hanks'; const x = 31; const l = lstnm.length; const boo = false; const curr = true; const sfn = ‘Remember the name’; const dbl = [‘1984’, ‘1987’].map((i) => {return i * 2;});Кращий код:
const firstName = 'Tom'; const lastName = 'Hanks'; const age = 31; const lastNameLength = lastName.length; const isComplete = false; const isCurrentlyActive = true; const songFileName = ‘Remember the name’; const yearsDoubled = [‘1984’, ‘1987’].map((year) => {return year * 2;});
Писати читабельний код, який можна однаково легко зрозуміти, незалежно від того, який обсяг цього коду розглядають.
Наскільки читабельність інтуїтивна? Її можна досягти, якщо дотримуватися деяких правил та угод? Маємо кілька рекомендацій:
cкладні для сприйняття методи мають бути короткими, а прості методи можуть бути довгими;
уникати вкладених циклів і примусового виходу з циклу, де це можливо;
намагатися записувати кожен вираз (вказівку) окремим рядком;
уникати надмірної кількості методів, що послідовно викликають один за одним.
Будь-яка функція або метод мають виконували лише одну задачу (принцип поділу обов'язків) — див. приклад розмежування арифметичних операцій.
function subtract(x, y) { return x - y; } function multiply(x, y) { return x * y; } function doubleArray(array) { return array.map(number => number * 2) }
Використовувати коментарі для пояснень того, що даний метод (процедура) робить, параметрів, значення, що повертають, можливих помилок і виключень. Описати в коментарях роль кожного файлу і класу, вміст кожного поля класу і основні кроки складного коду. Писати коментарі у процесі створення коду, а не після створення. Коментарі мають описувати мету частини коду, а не механізм того, як її досягти. Інакше кажучи, описувати «навіщо», а не «як». При використанні у коментарях назв змінних краще зупинитися і переписати коментар.
Не правильно:countryCode = GetCountryCode(ServerType.BackUp);// Отримати код if (countryCode == “US”) // Якщо код US InvokeUSUser(); // Показати користувачаПравильно:
// Показати користувачів з US countryCode = GetCountryCode(ServerType.BackUp); if (countryCode == “US”) InvokeUSUser();
Стисло писати код — див. приклад використання колекції для спрощення коду при створенні списку з одного елемента.
public static List<String> toList(String item) { List<String> items= new ArrayList<>(); items.add(item); return items; }Компактніше це записують так:
public static List<String> toList(String item) { return Collections.singletonList(item); }
Уникати глибоких вкладень, які ускладнюють сприйняття коду і виявлення помилок.
Не правильно:public int DoSmth(){ if (IsWritable(folder)) { if (fp == FileOpen(filePath,”w”)) { if (stuff = getSomeStuff()) { if (FileWrite(filePath,stuff)){ // .. } else { return false; } } else { return false; } } else { return false; } } else { return false; } }Правильно:
public int DoSmth(){ if (!IsWritable(folder)) { return false; } if (fp != FileOpen(filePath, “w”)) { return false; } if (stuff != getSomeStuff()) { return false; } if (!FileWrite(filePath, stuff)) { //.. } else return false; }
Розділяти код на короткі частини. Код кожного методу, функції чи блоку має не виходити за межі вікна (25−50 рядків). Інакше його потрібно поділити на коротші частини. Хоча б порожніми рядками. Призначення кожного блоку бажано описати у коментарі на початку кожного блоку. Якщо частини коду виконують різнорідні завдання, то його потрібно розділити відповідним чином.
Використовувати тестування частинами (Unit-тести). Складність сучасного програмного забезпечення робить його створення дорожче, а тестування важче. Продуктивним підходом буде супровід кожної частини коду тестами, які перевіряють правильність саме його роботи. Цей підхід спрощує налагодження, бо дозволяє виявити помилки раніше. Unit-тестування особливо необхідно, коли програмують інтерпретованою мовою з динамічною типізацією (наприклад, JavaScript, Python чи Ruby), бо у цьому випадку можна виявити будь-які помилки лише на етапі виконання. Для мови зі статичною типізацією (наприклад C#, C++ чи Java) частину помилок можна виявити під час компіляції.
4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу
Дати відповідь на питання:
Завдання: Скласти програму розв'язання рівняння ax + b = 0 на множині дійсних чисел, використавши правила написання читабельного коду і змінивши поданий нижче алгоритм.
Алгоритм
6. Підбиття підсумків уроку
Перевірка робіт. Виставлення оцінок.
7. Домашнє завдання
Вивчити матеріал уроку.
Виписати 7 найголовніших чи найчастіше вживаних (на вашу думку) положень стандартів (домовленостей) щодо використовуваної вами мови програмування.
Використовуючи правила написання якісного коду розв'язати задачу: визначити, яка з двох дат передує іншій, не перевіряючи коректність даних.
Алгоритм (порівняти з розробленим самостійно)
Текст упорядкувала Каршева Наталія Іванівна, вчитель інформатики СЗШ № 258 Дніпровського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 29.10.2018 по 02.11.2018.