Practices
-
Upload
victor-matyushevskyy -
Category
Documents
-
view
767 -
download
2
Transcript of Practices
Практики написання коду
Мова
• Це лише засіб реалізації
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
http://en.wikipedia.org/wiki/Brainfuck
“Поганий” код
• Наявність помилок
• Легкість внесення помилок (розсадник помилок)
• Проблеми швидкодії
• Винаходження “Велосипеду”
• Ігнорування “Best 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')))
Форматування
• Не більше 120 символів в рядку коду
• Очевидність незавершеного виразу
• Одна змінна – один рядок
• Групування об’явлень по змісту
Іменування
Pascal casing
• Класи, інтерфейси, структури
• Методи
• Поля
• Простори імен (namespace)
Іменування
Camel casing
• Локальні змінні
• Приватні поля класу
• Аргументи методів
Об’єм коду
Уникайте:
• Файлів з більш ніж 500 стрічками
• Методів “більших за екран”
• Методів з більш ніж з 5 аргументами
Іменування
• Ім’я сутності не повинне містити надлишкового контексту
public class Person{
private int personAge;private int age;
}
Іменування
• 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
Клас
Вимоги:
• Мінімальна достатність
• Тільки явний функціонал і поведінка
• Суцільність
• Абстрагованість від зовнішніх факторів
Функція
Вимоги:
• Очевидність по її назві
• Робить тільки свій функціонал
Програма
Очікування користувача:
• Корректна робота програми при любих вхідних даних
public int DoTransformation(int value){
return 0; //TODO: доробити коректне обчислення...}
Проект
Цілі:
• Як найменша складність
• Легкість супроводження
• Маштабування
• Можливість повторнго використаня
• Мінімальна, але повна функціональність
Приведення типів
• Prefer “is” and “as” operators while casting
http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.100).aspx
Derived d = new Derived();Base b = d as Base;if (b != null){
Console.WriteLine(b.ToString()); }
Enums
• Don’t
– Assume that enums can only have defined values
– Assume that the set of defined values will never change
Користуйтесь готовими рішеннями
• Prefer string.Format() or StringBuilder for String Concatenation
• Always Prefer the foreach(…) Loop
• Properly Utilize try/catch/finally Blocks
• …
Коментарі
• Замовник вимагає
• Опис public інтерфейсу
• TODO:
Розміщення коду
• Одна сутність – один файл
• Групуйте файли за змістом
• Логічний набір функціоналу – одна зборка
Код
• Уникайте “хітрого” коду
• Код повинен бути максимально простий
• Ваш код повинен “гарно читатися” на англійській мові
var data = obj is ObjectWithData? obj.GetType().GetProperty("Data").GetValue(obj, null): null;
Особистість програміста
При чому вона тут?
• Цікавість
• Експерементування
• Лінь
• Наполегливість
• Професійна чесність
Оцінка задачі і часу
• Як взагалі оцінити складність/час?
• Скільки часу треба, щоб написати калькулятор?