Розробка уроку

Тема: правила створення читабельного коду, коментарі у тексті програми.

Мета: ознайомити з правилами створення читабельного коду та коментарів у тексті програми, навчити правильному синтаксу написання кодів та коментарів. Після вивчення матеріалу учень

Обладнання: ПК з встановленими ОС та середовищем мови програмування, (дана) інструкція.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Інструктаж з ТБ.
  5. Закріплення вивченого матеріалу.
  6. Підбиття підсумків уроку.
  7. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань

  1. Що називають мовою програмування?
  2. У чому причина великої кількості різних мов програмування?
  3. На які класи традиційно поділяються мови програмування?
  4. За якими ознаками класифікуються мови програмування?
  5. Які мови програмування називаються процедурними?
  6. Що таке структурне програмування?
  7. На якому розділі математики базується логічне програмування?
  8. Яке програмування називається логічним?
  9. У якій мові програмування втілено ідеї логічного програмування?
  10. Що називають об'єктно орієнтованим програмуванням?
  11. У чому суть основних понять об'єктно-орієнтованого програмування?
  12. Що таке «візуальне програмування»?
  13. Що називають системою програмування?
  14. Яку функцію виконують транслятори?
  15. Поясніть різницю між інтерпретацією та компіляцією.

3. Вивчення нового матеріалу

При створенні програмного продукту розробник:

Чим швидше розробник буде виконувати ці завдання, тим швидше він зможе випустити чергову версію продукту, тим динамічніше розвиватиметься його кар'єра. Тому код має задовольняти такі вимоги:

Щоб отримати якісний код, достатньо дотримуватися таких правил:

  1. Дотримуватися стандартів оформлення коду. У кожної мови програмування є свій стандарт оформлення коду: які і де робити відступи (зазвичай 2 або 4 на один рівень вкладення), де ставити прогалини і дужки, як називати об'єкти, як коментувати код тощо — див. посилання для C# (1, 2), C++ (1, 2, 3), Java, Javascript (1, 2, 3), Pascal / Delphi, Perl, PHP, Python, Ruby. Деякі організації (наприклад, Google) підлаштовують (змінюють, деталізують) стандарти під свої специфічні потреби. Стандарти можуть містити налаштування редактора коду, які допоможуть дотримуватися відповідного стилю.

  2. Надавати змістовні назви змінним, функціям і методам. Інакше кажучи, вперше прочитавши код стороння людина має зрозуміти призначення змінної, функції або методу.

    Невдалий щодо назв код:
    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;});

  3. Писати читабельний код, який можна однаково легко зрозуміти, незалежно від того, який обсяг цього коду розглядають.

    Наскільки читабельність інтуїтивна? Її можна досягти, якщо дотримуватися деяких правил та угод? Маємо кілька рекомендацій:

    • cкладні для сприйняття методи мають бути короткими, а прості методи можуть бути довгими;

    • уникати вкладених циклів і примусового виходу з циклу, де це можливо;

    • намагатися записувати кожен вираз (вказівку) окремим рядком;

    • уникати надмірної кількості методів, що послідовно викликають один за одним.

  4. Будь-яка функція або метод мають виконували лише одну задачу (принцип поділу обов'язків) — див. приклад розмежування арифметичних операцій.

    function subtract(x, y) {
      return x - y;
    } 
    
    function multiply(x, y) {
      return x * y;
    } 
    
    function doubleArray(array) {
      return array.map(number => number * 2)
    }
  5. Використовувати коментарі для пояснень того, що даний метод (процедура) робить, параметрів, значення, що повертають, можливих помилок і виключень. Описати в коментарях роль кожного файлу і класу, вміст кожного поля класу і основні кроки складного коду. Писати коментарі у процесі створення коду, а не після створення. Коментарі мають описувати мету частини коду, а не механізм того, як її досягти. Інакше кажучи, описувати «навіщо», а не «як». При використанні у коментарях назв змінних краще зупинитися і переписати коментар.

    Не правильно:
    countryCode = GetCountryCode(ServerType.BackUp);// Отримати код
    if (countryCode == “US”)                        // Якщо код US
       InvokeUSUser();                              // Показати користувача
    Правильно:
    // Показати користувачів з US
    countryCode = GetCountryCode(ServerType.BackUp);
    if (countryCode == “US”)
       InvokeUSUser();
  6. Стисло писати код — див. приклад використання колекції для спрощення коду при створенні списку з одного елемента.

    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);
    }
  7. Уникати глибоких вкладень, які ускладнюють сприйняття коду і виявлення помилок.

    Не правильно:
    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;
    }
  8. Розділяти код на короткі частини. Код кожного методу, функції чи блоку має не виходити за межі вікна (25−50 рядків). Інакше його потрібно поділити на коротші частини. Хоча б порожніми рядками. Призначення кожного блоку бажано описати у коментарі на початку кожного блоку. Якщо частини коду виконують різнорідні завдання, то його потрібно розділити відповідним чином.

  9. Використовувати тестування частинами (Unit-тести). Складність сучасного програмного забезпечення робить його створення дорожче, а тестування важче. Продуктивним підходом буде супровід кожної частини коду тестами, які перевіряють правильність саме його роботи. Цей підхід спрощує налагодження, бо дозволяє виявити помилки раніше. Unit-тестування особливо необхідно, коли програмують інтерпретованою мовою з динамічною типізацією (наприклад, JavaScript, Python чи Ruby), бо у цьому випадку можна виявити будь-які помилки лише на етапі виконання. Для мови зі статичною типізацією (наприклад C#, C++ чи Java) частину помилок можна виявити під час компіляції.

4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу


Дати відповідь на питання:

  1. Назвати основні дії розробника під час роботи над проектом.
  2. Назвати вимоги до якісного коду.
  3. Що описують стандарти оформлення коду?
  4. Назвати основні правила створення читабельного коду.
  5. З якою метою використовують коментарі?
  6. Що таке Unit-тести?

Завдання: Скласти програму розв'язання рівняння ax + b = 0 на множині дійсних чисел, використавши правила написання читабельного коду і змінивши поданий нижче алгоритм.

Алгоритм

  1. Ввести (зчитати) величини a, b.
  2. Якщо a0, вивести:
    • повідомлення: «Рівняння має єдиний корінь»;
    • величину x = – b/a,
    інакше:
    • якщо b ≠ 0, вивести повідомлення: «Рівняння не має коренів»;
    • інакше вивести повідомлення: «Коренем рівняння є будь-яке число».
Блок-схема

6. Підбиття підсумків уроку
Перевірка робіт. Виставлення оцінок.

7. Домашнє завдання

  1. Вивчити матеріал уроку.

  2. Виписати 7 найголовніших чи найчастіше вживаних (на вашу думку) положень стандартів (домовленостей) щодо використовуваної вами мови програмування.

  3. Використовуючи правила написання якісного коду розв'язати задачу: визначити, яка з двох дат передує іншій, не перевіряючи коректність даних.

    Алгоритм (порівняти з розробленим самостійно)

    1. При j = 1, 2:
      • ввести вхідні дані d, m, y — число, номер місяця й рік;
      • обчислити nj = d + 31(m + 12y).
    2. Вивести відповідь, виходячи з того, що та дата j передує, для якої число nj менше.


Текст упорядкувала Каршева Наталія Іванівна, вчитель інформатики СЗШ № 258 Дніпровського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 29.10.2018 по 02.11.2018.