Перейти до вмісту

Хороший код


Повідомлень в темі: 40

#1 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ->НТУУ "КПІ"

Відправлено 26.01.2012 – 23:21

  • 40
Ділимось принципами написання хорошого програмного коду. Хто та як його пише? Сам починати не буду, він у мене не дуже.

#2 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 27.01.2012 – 00:15

таких нема) є принципи не написання поганого)
  • 0

#3 Nolex

    Старійшина

  • Адміністратори
  • 1047 повідомлень
  • Стать:Чоловік
  • Місто:Житомир

Відправлено 27.01.2012 – 10:51

Раніше зневажав коментами типу //блабла та /* блабла */, але коли почав працювати з великими програмами, то взяв їх на обзроєння - дуже зручно. ;)

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

#4 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ->НТУУ "КПІ"

Відправлено 27.01.2012 – 11:08

Хіба стислий код не стає менш зрозумілим?
  • 0

#5 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 27.01.2012 – 12:31

Перегляд дописуNolex (27.01.2012 10:51) писав:

Раніше зневажав коментами типу //блабла та /* блабла */, але коли почав працювати з великими програмами, то взяв їх на обзроєння - дуже зручно. ;)

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

Не завжди, не всім. тільки якщо хотіти сдосконалюватися і любити це.

Перегляд дописуFT232BM (27.01.2012 11:08) писав:

Хіба стислий код не стає менш зрозумілим?

Тут головне баланс, між простотою, стислістю, гарним кодом, та швидкістю виконання.
  • 0

#6 Nolex

    Старійшина

  • Адміністратори
  • 1047 повідомлень
  • Стать:Чоловік
  • Місто:Житомир

Відправлено 27.01.2012 – 19:45

Перегляд дописуFT232BM (27.01.2012 11:08) писав:

Хіба стислий код не стає менш зрозумілим?
Не завжди, це вже по ситуація треба дивитись.


Наприклад, можна юзати спрощений вигляд if-else(в c# таке є, незнаю як в php).

if(isActive) { myint = 1; }</p><p>else { myint = 5; }

  myint = isActive ? 1 : 5;

Хоча, я таким спрощенням не користуюсь, найчастіше спрощення полягає:
- у правильному виборі виду зберігання інформації(dictionary, масив, list);
- винесення частин коду, що повторяються;
- оптимізації різних запитів до БД(часто буває, що 2-3 запити, можна замінити одним).


Та купа іншого, це от, що сходу прийшло на думку.

Lactarius, та звісно, якщо немає бажання програмувати, то тут нічого не вдієш. Краще шукати іншу нішу, як на мене. ;)
  • 0

#7 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 27.01.2012 – 20:34

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

Ну звичайно знання паттернів у випадку ооп.
  • 0

#8 Патріот

    Ледар

  • Користувачі
  • PipPip
  • 22 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 02.02.2012 – 11:51

Перегляд дописуLactarius (27.01.2012 00:15) писав:

таких нема) є принципи не написання поганого)

Чому ж нема?


1. Називати змінні змістовними іменами.

2. Позначати кінці великих вкладених циклів (2 сторінки і більше).

3. Баланс між простотою і швидкістю виконання коду.

4. Використовувати якомога меншу кількость змінних.

5. Відділяти частини коду.

6. Вкладені частини коду мають мати відступ (3-4 символи).

7. Структура програми має бути такою, щоб було легко вносити зміни.
  • 0

#9 _Ex

    STATUS_OK

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1326 повідомлень
  • Стать:Чоловік
  • Місто:Бахмут, Південна Слобожанщина, Україна

Відправлено 03.02.2012 – 00:56

Перегляд дописуПатріот (2.02.2012 11:51) писав:

Чому ж нема?


1. Називати змінні змістовними іменами.

2. Позначати кінці великих вкладених циклів (2 сторінки і більше).

3. Баланс між простотою і швидкістю виконання коду.

4. Використовувати якомога меншу кількость змінних.

5. Відділяти частини коду.

6. Вкладені частини коду мають мати відступ (3-4 символи).

7. Структура програми має бути такою, щоб було легко вносити зміни.
3 - більш ніж сумнівне, бікозоф швидкість понад усе!
7 - нагадує шось накшталт: добрий код має бути добрим.
  • 0

#10 Патріот

    Ледар

  • Користувачі
  • PipPip
  • 22 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 03.02.2012 – 10:06

Перегляд допису_Ex (3.02.2012 00:56) писав:

3 - більш ніж сумнівне, бікозоф швидкість понад усе!
7 - нагадує шось накшталт: добрий код має бути добрим.

3 і 7 існують для того, щоб не було такого:


#include <stdio.h>

main(int t, int _, char*a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,

main(-86,0,a+1)+a)): 1,t<_ ? main(-94,-27+t,a)&&t==2\

?_<13?main(2,_+1,"%s %d,%d\n"):9:16:t<0?t<-72?

main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\

{n+,/+#n+,/# ;#q#n+,/+k#;*+,/'r : 'd*'3,}{w+K w'K:'+}e#';dq#'+d'K#!\ ... І ще 7 схожих рядків


:rolleyes:

У цьому коді ще має бути декілька рядків але набирати це так само важко як і читати. Цей фрагмент робочої програми на С++ демонструє, що швидкість виконання не завжди має переважати над простотою написання. І внести зміни до такої програми дуже тяжко.
  • 0

#11 Dr. Zlo

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 293 повідомлень
  • Стать:Чоловік

Відправлено 03.02.2012 – 14:37

Дивно що ніхто з вас не згадав про цю книгу:

Цитата

Совершенный код
Автор: С. Макконнелл

Тот самый Стив Макконнелл, которому приписывают фразу: "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."

  • -1

#12 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ-&gt;НТУУ &quot;КПІ&quot;

Відправлено 03.02.2012 – 15:22

Перегляд дописуDr. Zlo (3.02.2012 14:37) писав:

Дивно що ніхто з вас не згадав про цю книгу:
Така?
Зображення

Повідомлення відредагував FT232BM: 03.02.2012 – 15:23

  • 1

#13 Dr. Zlo

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 293 повідомлень
  • Стать:Чоловік

Відправлено 03.02.2012 – 15:29

Перегляд дописуFT232BM (3.02.2012 15:22) писав:

Така?
Зображення
Ога, прочитав?
  • 0

#14 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ-&gt;НТУУ &quot;КПІ&quot;

Відправлено 03.02.2012 – 16:30

Перегляд дописуDr. Zlo (3.02.2012 15:29) писав:

Ога, прочитав?

Почав тільки.
  • 0

#15 _Ex

    STATUS_OK

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1326 повідомлень
  • Стать:Чоловік
  • Місто:Бахмут, Південна Слобожанщина, Україна

Відправлено 05.02.2012 – 21:50

І лого внизу справа, підверджує звідки йде совєршенство кода. :D Сагласєн.
  • 0

#16 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 06.02.2012 – 03:08

"2. Позначати кінці великих вкладених циклів (2 сторінки і більше)."

Ну що це за булшіт?! такі штуки не позначати треба а рефакторити.

"4. Використовувати якомога меншу кількость змінних."

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

"1. Називати змінні змістовними іменами."
"6. Вкладені частини коду мають мати відступ (3-4 символи)."

Це не правила написання хорошого коду, це code convention, вони є для кожної мови, навіть можуть бути для конкретного проекту.


"5. Відділяти частини коду."

Ага давайте їх повідділяємо... Оцей кусок запхаємо глибоко сюди, а цей сюди. Їх не треба відділяти, тут повинен бути порядок. Тобто допоміжний код можна запхати в методи обєкту, а логіку роботи з ним бажано тримати в одному місці (не в жопі, а в коді ;))


"7. Структура програми має бути такою, щоб було легко вносити зміни."

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




Якщо я навіть написав, що саме треба робити, то це не значить, що саме це треба робити. Це ваша робота - думати над тим, що треба робити.

Тут є всього два правила.


1. Включи мозок.
2. Якщо твій мозок генерує інші правила, значить ти не виконав правило номер 1. goto 1;

Повідомлення відредагував Lactarius: 06.02.2012 – 03:09

  • 0

#17 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ-&gt;НТУУ &quot;КПІ&quot;

Відправлено 06.02.2012 – 11:27

Перегляд дописуLactarius (06.02.2012 – 03:08) писав:

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

Перегляд дописуLactarius (06.02.2012 – 03:08) писав:

"7. Структура програми має бути такою, щоб було легко вносити зміни."
Чим гнучкіша твоя структура, тим більше і ній коду і складнішою вона є. Це погано.
Ну не скажи, "Вимоги до проекту подібні до води. Спиратись на них легше, коли вони заморожені" (с) Анон. Але ж таки ніколи не буває.
Тобі, мабуть близькі думки Фредеріка Брукса у "Міфічний людино-місяць": Будьте готові викинути першу версію своєї програми. Ті часи давно пройшли, зараз краще модифікувати код, а ніж заново писати. Так що код має бути зручним для цього.
  • 0

#18 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 06.02.2012 – 11:58

Перегляд дописуFT232BM (06.02.2012 – 11:27) писав:

Що є то є :)


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


Ніхто не каже, що твоя програма не повинна бути такою. Говориться про те, що чим більше ти прагнеш гнучкості - тим гірше. Тому краще розбивати все на модулі і зберігати слабку звязність. А далі просто забути про гнучкість і тримати все на своїх місцях.
  • 0

#19 FT232BM

    私は人々嫌い

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3435 повідомлень
  • Стать:Чоловік
  • Місто:Київ-&gt;НТУУ &quot;КПІ&quot;

Відправлено 06.02.2012 – 12:05

Перегляд дописуLactarius (06.02.2012 – 11:58) писав:

Ніхто не каже, що твоя програма не повинна бути такою. Говориться про те, що чим більше ти прагнеш гнучкості - тим гірше. Тому краще розбивати все на модулі і зберігати слабку звязність. А далі просто забути про гнучкість і тримати все на своїх місцях.
Я вважав, що розбиття на модулі програми і є підвищенням гнучкості, чесно :) Типу можна один модуль викинути і безболіснопоставити інший з такими же інтерфейсами.
  • 1

#20 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 06.02.2012 – 12:15

Перегляд дописуFT232BM (06.02.2012 – 12:05) писав:

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

Ну мова є іде про код, а не архітектуру)
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних