Як зробити код красивим і зручним для читання
Опубліковано 2017.02.06 у розділі Php
Спочатку трохи теорії. Один і той самий код можна писати різними способами. Код може бутипроцедурним,функціональним таоб'єктно-орієнтованим.
Процедурний підхід
Процедурний підхід найпростіший. Під ним мається на увазі скрипт, в якому суцільником написано команди та викликані елементарні php функції.
Такий підхід доречний, якщо у вас дуже маленький код або він виконує строго одне завдання (наприклад, генерує картинку), як то кажуть "ні крок вправо, ні крок вліво".
Функціональний підхід
Також у кожної функції буде своя власна область видимості змінних. Тобто змінні, "що живуть всередині неї" ніколи не проникнуть назовні і змінні, що використовуються поза функцією так само не потраплять у саму функцію.
Визначаючи функцію, ви самі можете вказати які змінні повинні потрапити в функцію і що вона повинна повернути, тобто ви суворо контролюєте цей процес.
Винятки становлятьсуперглобальні змінні, такі як $_SERVER, $_REQUEST, $_GET, $_POST - вони доступні завжди та скрізь.
Перепишемо процедуру на функції:
Тепер обчислення залишку від поділу $a на $b і перебування суми від $c і $d загорнуто функції getRemainder і getSum.
Функції можуть бути визначені як до їхнього виклику, так і після. Напевно ви звернули увагу, що функції getSum "використовуються змінні" $a і $b, хоча ми складаємо $c і $d. Це якраз і є область видимості змінних усередині функції і вони не мають нічого спільного з числовими змінними $a і $b, визначеними поза функцією. Ми могли назвати їх як завгодно. Оператор return наприкінці функції повертає роботифункції. Тобто змінна $result повертається назовні та її значення присвоюється змінною $d чи $e.
Якщо просто викликати функцію, не присвоюючи ніякої змінної її значення, що повертається - то функція просто "відправить в космос" значення, що повертається їй.
Поясню на прикладі:
Якщо потрібно провести якусь типову операцію багато разів (використовуючи різні вхідні дані) - її обов'язково треба помістити в функцію і викликати скільки завгодно раз.
Об'єктно-орієнтований підхід
І третій підхід – об'єктно-орієнтований. Скорочено ООП(об'єктно-орієнтоване програмування).
Він так називається у зв'язку з тим, що він є довільною кількістю об'єктів з певними наборами властивостей і дій, званих методами.
У ОВП також є такі речі, як успадкування, поліморфізм, абстракція, інтерфейси, конструктори, деструктори і багато іншого. Це велика тема і розкривати її в рамках цієї статті я не буду.
Я покажу лише найпростіший приклад використання класу.
public - це означає загальнодоступний і до цієї властивості чи методу можна звернутись у будь-якому контексті.
private – до таких властивостей та методів можна отримати доступ лише всередині класу, в якому вони визначені.
Також властивість чи метод можна визначити якprotected. Це означає, що доступ до методу або властивості можна отримати з поточного класу або класу, який успадковує властивості і методи поточного класу.
Ключове словоself посилається на поточний клас і можна звернутися до методів поточного класу.
Змінна$this використовується для звернення до змінної або методу в контексті класу.
Ось коротко і все, можете перевірити, чи всі 3 способи будуть видаватиоднаковий результат.
Тепер зазвичай ставимо завдання та її прикладі розглядаємо рішення, обкатаємо теорію.
Маємо 5 видів фруктів та у кожного вказана вартість (за кг).
За умовами завдання потрібно порахувати скільки коштуватиме 5кг, 12кг, 14кг, 16кг, 22кг, 135кг, 150кг, 200кг, 254кг, 300кг та 400кг кожного фрукта.
Для наочності спробуємо вирішити її процедурно.
Виглядає це громіздко та некрасиво. А якщо треба буде порахувати не 11 значень, а 500? І готовий посперечатися, щопри копіпасті ви точно не все поправите і отримуватимете невірні дані.
Тепер пробуємо функціонально.
Код вийшов набагато читабельнішим. Ваги вказані у функції getWeights і простим додаванням їх туди порахувати скільки б коштувала інша вага кожних фруктів.
Я перебрав усі фрукти і при кожному переборі перебирав усі ваги. Можна було зробити й навпаки.
І, нарешті, реалізація на ООП.
Як бачите - код більший. При простих обчисленнях можна обійтися і функціональним підходом, але всі справді великі та складні проекти написані з використанням ОВП.