Що таке "хороший стиль програмування"?

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

Звідси з'явилося поняття структурне програмування. З'явилося воно ще в 60-ті роки минулого століття, коли весь світ переживав кризу розробки програмного забезпечення. Тобто створення великих автоматизованих систем затягувалося, програмісти не вкладалися в терміни, а в готових програмах виявлялося безліч помилок. З цими двома проблемами (низька продуктивність розробки програм і помилки в них) програмісти борються ы до сьогодні. У 1968 році голландець Дійкстра назвав (припустив) причину - у великих програмах часто немає чіткої математичної структури, вони невиправдано складні. Причому цю "невиправдану" складність вносить команда goto. Програму з безліччю goto називають "спагетті". Для порівняння, уявіть, що ви читаєте роман: спочатку дві сторінки назад, потім чотири сторінки вперед і т. Д. Якщо програма містить багато операторів goto, то людині простежити передачу управління (послідовність управління) досить важко (це тільки комп'ютерам все одно). Замість операторів goto Дійкстра запропонував використовувати всього три типи керуючих структур. Перший тип - це проста послідовність (проходження), коли оператори виконуються один за одним зліва направо і зверху вниз. Другий тип - це альтернатива (розгалуження), вибір за умовою (if - else), множинний вибір (switch - case). І третій тип керуючої структури - це цикл, тобто повторення одного або декількох операторів до виконання умови виходу з циклу.

Так ось, основна ідея Дійкстра полягає в тому, що, використовуючи ці три структури (звідси і назва "структурне програмування"), можна обходитися без операторів goto. Він стверджував, що відсутність наочності - це і є основне джерело помилок. Спочатку програмісти лише посміювалися над ідеями Дійкстра, тим більше що він був всього лише теоретиком програмування. Однак сміятися над чимось новим - дуже необачно. Один російський прославлений генерал, коли йому вперше показали тільки що винайдений кулемет, поблажливо поплескав винахідника по плечу і сказав, що якби в реальному бою потрібно було вбити одну людину кілька разів, то його винахід був б дуже доречним. Так що не слід поспішати висміювати нове, незрозуміле і незвичне.

Так сталося і з ідеями Дійкстра - фірма IBM вельми успішно застосувала принципи структурного програмування для створення бази даних газети "Нью-Йорк таймс". І це стало вагомим аргументом на користь такого підходу. Згодом оператор goto програмісти стали називати "ганебним" і використовувати його лише в дуже крайніх випадках. І з тих пір концепція структурного програмування робить помітний вплив на теорію і практику програмного забезпечення всіх рангів.

Сьогодні структурне програмування, як альтернатива "інтуїтивного", "рефлекторному" підходу, - це методологія розробки програмного забезпечення, в основі якої лежить не тільки три типи керуючих структур, а й багато іншого, що допомагає представляти програму у вигляді ієрархічної структури і тим самим " заховати складність ". Все тіло програми намагаються ділити на логічно цілісні обчислювальні блоки, які оформляються у вигляді підпрограм, функцій і класів. Ці обчислювальні блоки і формують собою ієрархічну структуру, причому найменш значущі "подробиці" програми намагаються заховати в найдальші гілки ієрархії, щоб вони не заважали розумінню основної логіки програми. Ховаючи ті чи інші смислові блоки подалі від очей, ми тим самим приховуємо складність програми для того, щоб її (програми) логіка була максимально зрозумілою. Причому "зрозумілість", читабельність потрібно забезпечити не тільки автору програми, а й іншим розробникам. Цілком справедливим є твердження, що будь-яку, найскладнішу, програму можна зробити доступною для розуміння "широким верствам розробників", приховуючи складності в смислових блоках.

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

Слід завжди враховувати простий факт - суть програми, яку ви писали тиждень тому, дуже швидко забувається. А якщо ви подивіться на програму, написану вами ж місяць тому? Ви здивуєтеся, але у вас створиться враження, що це чужа програма, написана ніяк не вами. Не варто дивуватися, це особливість людського організму - відкидати все на його (організму) погляд непотрібне!

В ході написання програмного коду слід велику увагу приділяти якомога точнішим назв об'єктів, змінних, процедур. Тоді сенс написаних операторів буде більш "прозорий". Взагалі, слід пам'ятати, що антонімом слова "структура" буде - "хаос".

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