• English
  • Русский
  • Українська
Need a Ruby on Rails developer? Contact Us.

Код у стилі Ruby: грамотно, красиво та раціонально по-українськи. Приклад для початківців

Код у стилі Ruby: грамотно, красиво та раціонально по-українськи. Приклад для початківців

Це переклад посту Майкла МакКі. Майкл – професійний програміст, який час від часу ділиться своїм досвідом і навичками з колегами, як кодерами-початківцями, так і професіоналами.

Більшість програмістів в останню чергу думають про естетику коду, який вони створюють. Звісно, загальних правил дотримуються майже всі. Але що, якщо йти далі? Хороший код, насамперед, має працювати. Але я вважаю, що в нього має бути свій стиль, це стосується не лише змісту, а й форми.

Насправді, це не так. Ось деякі проблеми, з якими стикаються всі програмісти-початківці, які займаються самоосвітою. Про це є тонни статей та нотаток, але я хочу розповісти, як оформити код візуально так, щоб він був не лише коректним, а й непогано виглядав із боку. Я вважаю, що самовиражатися можна не лише в образотворчому мистецтві – це можна робити завжди і скрізь.

Для мене дуже важливою є організація роботи, а також її візуальна форма. Ruby – відмінний варіант мови програмування, ніби спеціально зроблений, щоб відповідати моїм вимогам, оскільки дозволяє робити те, що ми хочемо, без жодних проблем. Він гнучкий, стильний та логічний.

Давайте розглянемо цей приклад.

446d41af4402a42a4ecce12d6d46e004

Навіть програміст-початківець зрозуміє, що тут не так. На цей код просто боляче дивитись. А ось виправлений варіант, який виглядає краще.

6122bbb7721a5459adc95430c9dbebdf

Уф! Набагато краще. Тепер ми бачимо, що до чого і яким чином. Але цей код можна поліпшити. Декларування attr_reader і attr_accessor можна зробити ще виразнішим.

c73ec207bcb0655395db307fa6a1ca64

Оголошення кожного нового атрибута з нового рядка набагато легше сприймається. Тепер ми маємо список атрибутів, які присвоєно кожному аксесору. Можна йти далі.

fbbdac3de8f25c5b17a7a017db7ac9f1

Тут уже легко зрозуміти, де є лише можливість читання, де і читання, і записи.

Давайте тепер подивимося на таку частину цього класу — метод ініціалізації. Тут можна зробити багато.

953570c7b234a30606cebc2e3e1a913f

У принципі, код читаємо, начебто все добре. Але можна зробити краще.

3e1d2ee57da93ca7980066e68fe3a290

Якщо проставити всі оператори привласнення в одну колонку, виходить дуже непогано. Дивлячись на цей код, легко сказати, що, як і чому працюватиме.

Давайте подивимося, як тепер буде виглядати InvoiceItem повністю.

7a2f80a99dd87f57ae07083d758d8175

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

Які ще є можливості для оптимізації нашого коду? Найчастіше на початку вивчення програмування написання тестів може викликати проблеми через відсутність необхідних знань. Час витрачається створення фейкових даних. У цьому немає нічого жахливого, але в багатьох випадках це призводить до створення великих масивів тексту, що складно читається. Давайте подивимося на це.

4241404f5191e334630edb5f46b01201

Ох. Тут на початку створюється новий репозиторій для зберігання класів транзакцій. Усього їх три, кожен використовується для тесту, попадання в хеш для більш пізнього використання. Причому для класу, який ми маємо намір створювати, потрібно чимало атрибутів. Кожен з них має досить довге ім’я та значення. Що можна покращити так, щоб код виглядав добре?

Все просто.

32d0cf86c8bf5a7cb82ecaf52457991a

Ми розбили кожний з цих хешей з розривом рядка у кожному новому оголошенні значення. Крім того, використано той же метод, що і при оптимізації InvoiceTeam. Тепер у редакторі без проблем можна бачити всі тестові дані у досить вузькій області огляду. Ми можемо бачити значення ключів. Якщо потрібно, їх можна змінити без скролінгу туди-сюди.

Аналогічна стратегія може бути використана, коли ми працюємо з великою кількістю атрибутів.

471fb21b7437ac63c2409dbd1846a382

У цьому випадку ми не бачимо всієї структури коду принаймні в поточній області перегляду. Для того, щоб побачити атрибути, потрібно постійно скролити, що не надто зручно. Давайте виправимо це так, як ми вже зробили вище, у прикладі з хешами.

a407bd2d08d40d826edd4fd5f59dbcaf

Новий код читаємо – і набагато human friendly, якщо так можна висловитися. У нас ясно видно всі атрибути та присвоєння. Можливий дебаггін стає простіше. Щось може піти не так і потім з’ясовувати, що і чому не працює, буде складно, якщо не привести код до «красивого» вигляду.

Коли ми пишемо програми, не можна забувати: важливо не лише те, щоб вони працювали коректно, але ще й те, щоб принцип їхнього функціонування був зрозумілий колегам, якщо це буде потрібно. Код має бути логічним, розбитим на абзаци, речення та структурні розділи.

Ну і наприкінці – мій улюблений приклад для Ruby. Давайте його розглянемо.

ed11bd2a627b583e2e160d6a818ab42d

Давайте візьмемо кожен елемент з тварин та застосуємо метод capitalize. Це виглядає непогано, але ще краще те, що код можна трохи скоротити і зробити його більш читаним для людини.

04ded6410e5c7f542b04e2fad9699f16

Загалом статтю можна назвати тривіальною, але вона дає можливість новачкові зрозуміти красу коду. Тобто сам код має бути не лише робітником, а ще й зрозумілим — нехай навіть у тому випадку, коли програма пишеться лише для себе. Якщо виробити звичку створювати гарний працюючий код, це може допомогти вашому професійному зростанню.