Practices

24
Практики написання коду

Transcript of Practices

Page 1: Practices

Практики написання коду

Page 2: Practices

Мова

• Це лише засіб реалізації

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

http://en.wikipedia.org/wiki/Brainfuck

Page 3: Practices

“Поганий” код

• Наявність помилок

• Легкість внесення помилок (розсадник помилок)

• Проблеми швидкодії

• Винаходження “Велосипеду”

• Ігнорування “Best practices”

Page 4: Practices

Форматування

Мета

• Підкреслення логічної структури коду

• Читабельність

Page 5: Practices

Форматування

• ||||||||||||

• |||||||

• |||||

• ||||||||||||

Page 6: Practices

Форматування

if((('0' <= inChar) && (inChar <= '9')) || (('a' <= inChar) &&

(inChar <= 'z')) || (('A' <= inChar) && (inChar <= 'Z')))

if ((('0' <= inChar) && (inChar <= '9')) ||(('a' <= inChar) && (inChar <= 'z')) || (('A' <= inChar) && (inChar <= 'Z')))

Page 7: Practices

Форматування

• Не більше 120 символів в рядку коду

• Очевидність незавершеного виразу

• Одна змінна – один рядок

• Групування об’явлень по змісту

Page 8: Practices

Іменування

Pascal casing

• Класи, інтерфейси, структури

• Методи

• Поля

• Простори імен (namespace)

Page 9: Practices

Іменування

Camel casing

• Локальні змінні

• Приватні поля класу

• Аргументи методів

Page 10: Practices

Об’єм коду

Уникайте:

• Файлів з більш ніж 500 стрічками

• Методів “більших за екран”

• Методів з більш ніж з 5 аргументами

Page 11: Practices

Іменування

• Ім’я сутності не повинне містити надлишкового контексту

public class Person{

private int personAge;private int age;

}

Page 12: Practices

Іменування

• Prefix “Is”, “Has” or “Can” for booleanproperties like “IsVisible”, “HasChildren”, “CanExecute”. These give proper meaning to the properties

• “Get” – should returns something

• “Set” – shouldn’t returns any values

Page 13: Practices

Клас

Вимоги:

• Мінімальна достатність

• Тільки явний функціонал і поведінка

• Суцільність

• Абстрагованість від зовнішніх факторів

Page 14: Practices

Функція

Вимоги:

• Очевидність по її назві

• Робить тільки свій функціонал

Page 15: Practices

Програма

Очікування користувача:

• Корректна робота програми при любих вхідних даних

public int DoTransformation(int value){

return 0; //TODO: доробити коректне обчислення...}

Page 16: Practices

Проект

Цілі:

• Як найменша складність

• Легкість супроводження

• Маштабування

• Можливість повторнго використаня

• Мінімальна, але повна функціональність

Page 18: Practices

Enums

• Don’t

– Assume that enums can only have defined values

– Assume that the set of defined values will never change

Page 19: Practices

Користуйтесь готовими рішеннями

• Prefer string.Format() or StringBuilder for String Concatenation

• Always Prefer the foreach(…) Loop

• Properly Utilize try/catch/finally Blocks

• …

Page 20: Practices

Коментарі

• Замовник вимагає

• Опис public інтерфейсу

• TODO:

Page 21: Practices

Розміщення коду

• Одна сутність – один файл

• Групуйте файли за змістом

• Логічний набір функціоналу – одна зборка

Page 22: Practices

Код

• Уникайте “хітрого” коду

• Код повинен бути максимально простий

• Ваш код повинен “гарно читатися” на англійській мові

var data = obj is ObjectWithData? obj.GetType().GetProperty("Data").GetValue(obj, null): null;

Page 23: Practices

Особистість програміста

При чому вона тут?

• Цікавість

• Експерементування

• Лінь

• Наполегливість

• Професійна чесність

Page 24: Practices

Оцінка задачі і часу

• Як взагалі оцінити складність/час?

• Скільки часу треба, щоб написати калькулятор?