СОВРЕМЕННЫЕ
ПОДХОДЫ К РАЗРАБОТКЕ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ В. Н. КАРАЗИНА
ФАКУЛЬ...
ЧИСТЫЙ КОД
Clean Code
КОММЕНТАРИИ
Comments
Однострочные комментарии
Для кратких комментариев к
отдельным частям кода.
// quick check to see if we can acquire a lock,...
Многострочные комментарии
Для длинных и подробных объяснений.
def luhn(candidate):
"""
Checks a candidate number for valid...
Общепринятые теги
FIXME – потенциальная проблема,
требующая специального внимания.
NOTE – замечание относительно кода
и об...
Общепринятые теги - примеры
public class ShapeModule extends AbstractModule {
@Override
protected void configure() {
// TO...
Читабельность
Комментарии пишутся для людей.
Лучше не оставить комментарий, чем
оставить плохой комментарий.
Комментарии д...
Визуальное выделение
Не надо недооценивать значимость
пробелов и визульного выделения.
Используйте один из стандартных
сти...
Во время кодирования
Пишите комментарии во время
написания кода, а не после.
При изменении кода не забывайте
изменять или ...
Полезные советы
Сделайте паузу и подумайте прежде,
чем писать комментарий.
Спросите себя, что для вас самое
непонятное в к...
ИМЕНОВАНИЕ
Naming
Именование
Используйте адекватные по длине
имена.
Например: «i» для индекса цикла,
«hostName» для переменной и
«TransportS...
Именование
Используйте только один язык для
именования (обычно, английский).
Не используйте в именах символы,
отличные от ...
Именование
Соблюдайте общепринятые
стандарты именования для вашего
языка программирования.
Будьте последовательны при
имен...
Именование в Java
Используйте Lower Camel Case для
переменных, методов и аргументов.
Например: filterChain, getName,
setSc...
Именование в Java
Используйте заглавные буквы для
констант.
Например: DEFAULT_MIME_TYPES,
static final int DEFAULT_WIDTH
И...
Именование в Python
Используйте символ «_» в начале
имен для private полей и методов,
классов и функций для внутреннего
по...
Именование в Python
Используйте заглавные буквы для
констант.
Например: DEFAULT_MIME_TYPES
Используйте строчные буквы для
...
Именование переменных
Имена вида «value», «equals», «data»
в большинстве случаев не верны.
Имя переменной должно определят...
Именование переменных
Переменная не нуждается в
приставках и суффиксах,
показывающих, что это переменная.
Например: «o_», ...
Именование переменных
Не используйте зарезервированные
имена, даже если язык
программирования это позволяет.
Не используйт...
Именование переменных
Не используйте без необходимости
очень длинные имена переменных.
Не используйте одно и то же имя в
р...
Именование методов и функций
В большинстве случаев, начинайте
имя с глагола.
Например: createPassword, getName,
addPermiss...
Именование методов и функций
Имена должны описывать все
действия (в том числе и «побочные»).
Например: getOrCreate
Имена м...
Именование классов
Имя должно быть существительным
в единственном числе (но может
включать так же и прилагательные).
Напри...
ИСКЛЮЧЕНИЯ
Exceptions
Обработка исключений
Используйте текты сообщений об
ошибках, понятные пользователю.
Не включайте в сообщения об
ошибках да...
Обработка исключений
Используйте нестандартные
исключения только при крайней
необходимости.
При создании классов нестандар...
Обработка исключений
Обрабатывайте только исключения,
которые вы должны обработать.
Используйте глобальные обработчики
иск...
Обработка исключений
Не используйте исключения для
контроля за потоком выполнения:
static Boolean IsProductExists(string P...
Обработка исключений
Отсутствие продукта не является
здесь исключительной ситуацией.
Имя функции предполагает наличие
возв...
ПРАВИЛА ОПТИМИЗАЦИИ
Rules of optimization
Д. Кнут, «Structured Programming with
go to Statements», 1974
Преждевременная оптимизация
— корень всех зол.
Premature opt...
Правила оптимизации
Make it clear before you make it fast
Make it correct before you make it fast
«Elements Of Programming...
Upcoming SlideShare
Loading in...5
×

Семинар ФКН: современные подходы к разработке ПО - часть 2

366

Published on

Рассматриваются вопросы создания "чистого кода"

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
366
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Семинар ФКН: современные подходы к разработке ПО - часть 2

  1. 1. СОВРЕМЕННЫЕ ПОДХОДЫ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ В. Н. КАРАЗИНА ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ НАУК КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ К.Ф.М.Н., ДОЦ. КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ГАХОВ АНДРЕЙ ВЛАДИМИРОВИЧ
  2. 2. ЧИСТЫЙ КОД Clean Code
  3. 3. КОММЕНТАРИИ Comments
  4. 4. Однострочные комментарии Для кратких комментариев к отдельным частям кода. // quick check to see if we can acquire a lock, otherwise spawn to a thread pool if (mdLock.tryAcquire()) { createIndex(request, userListener, mdLock); return; } while((phraseInfo = queue.top()) != null) { // pull until we crossed the spanEnd if (phraseInfo.getEndOffset() > spanEnd) { break; } }
  5. 5. Многострочные комментарии Для длинных и подробных объяснений. def luhn(candidate): """ Checks a candidate number for validity according to the Luhn algorithm (used in validation of, for example, credit cards). Both numeric and string candidates are accepted. """ if not isinstance(candidate, six.string_types): candidate = str(candidate) try: evens = sum([int(c) for c in candidate[-1::-2]]) odds = sum([LUHN_ODD_LOOKUP[int(c)] for c in candidate[-2::-2]]) return ((evens + odds) % 10 == 0) except ValueError: # Raised if an int conversion fails return False
  6. 6. Общепринятые теги FIXME – потенциальная проблема, требующая специального внимания. NOTE – замечание относительно кода и объяснение «подводных камней». TODO – описание возможных будущих улучшений кода. XXX – предупреждение о проблематичном или «грязном» коде.
  7. 7. Общепринятые теги - примеры public class ShapeModule extends AbstractModule { @Override protected void configure() { // TODO: We could wrap this entire module in a JTS_AVAILABILITY check if (ShapesAvailability.JTS_AVAILABLE) { bind(ShapeFetchService.class).asEagerSingleton(); } } } if not (isinstance(index, basestring)): # FIXME: not sure what to do here, but we only want one # index and somehow this isn't one index. index = index[0] return index
  8. 8. Читабельность Комментарии пишутся для людей. Лучше не оставить комментарий, чем оставить плохой комментарий. Комментарии для объяснений намерений программиста. Для объяснения того, что делает код используйте правильное именование и понятную логическую структуру.
  9. 9. Визуальное выделение Не надо недооценивать значимость пробелов и визульного выделения. Используйте один из стандартных стилей для вашего языка программирования. Например: javadoc, docstring
  10. 10. Во время кодирования Пишите комментарии во время написания кода, а не после. При изменении кода не забывайте изменять или дополнять соотвествующие комментарии.
  11. 11. Полезные советы Сделайте паузу и подумайте прежде, чем писать комментарий. Спросите себя, что для вас самое непонятное в коде. Объясните проблему самым простым образом и с минимальным числом слов.
  12. 12. ИМЕНОВАНИЕ Naming
  13. 13. Именование Используйте адекватные по длине имена. Например: «i» для индекса цикла, «hostName» для переменной и «TransportSearchModule» для класса. Используйте осмысленные имена. Например: dbName, lastAccessId и т.п.
  14. 14. Именование Используйте только один язык для именования (обычно, английский). Не используйте в именах символы, отличные от ASCII, даже если язык программирования это позволяет.
  15. 15. Именование Соблюдайте общепринятые стандарты именования для вашего языка программирования. Будьте последовательны при именовании.
  16. 16. Именование в Java Используйте Lower Camel Case для переменных, методов и аргументов. Например: filterChain, getName, setSchoolName(String schoolName) Используйте Upper Camel Case для именования классов. Например: HttpServerAdapter
  17. 17. Именование в Java Используйте заглавные буквы для констант. Например: DEFAULT_MIME_TYPES, static final int DEFAULT_WIDTH Используйте строчные буквы для имен пакетов. Например: com.google.common.collect
  18. 18. Именование в Python Используйте символ «_» в начале имен для private полей и методов, классов и функций для внутреннего пользования. Используйте Upper Camel Case для именования классов. Например: HttpServerAdapter
  19. 19. Именование в Python Используйте заглавные буквы для констант. Например: DEFAULT_MIME_TYPES Используйте строчные буквы для имен переенных, функций и методов, разделяя слова знаком «_». Например: db_name, get_connection
  20. 20. Именование переменных Имена вида «value», «equals», «data» в большинстве случаев не верны. Имя переменной должно определять ее содержание. Не включайте в имя переменной инфрмацию о типе.
  21. 21. Именование переменных Переменная не нуждается в приставках и суффиксах, показывающих, что это переменная. Например: «o_», «obj_», «m_» и т.п. Не включайте в имя переменной информацию о типе. Например: studentNameString
  22. 22. Именование переменных Не используйте зарезервированные имена, даже если язык программирования это позволяет. Не используйте символы «l» (L в нижнем регистре), «I» (i в верхнем регистре) и «O» (буква О) в качестве самостоятельных переменных.
  23. 23. Именование переменных Не используйте без необходимости очень длинные имена переменных. Не используйте одно и то же имя в разных контекстах в одной и той же области видимости.
  24. 24. Именование методов и функций В большинстве случаев, начинайте имя с глагола. Например: createPassword, getName, addPermissions, isPasswordValid, setAge, updateEmail, deleteAccount Имя должно определять действие, выполняемое данным методом или функций.
  25. 25. Именование методов и функций Имена должны описывать все действия (в том числе и «побочные»). Например: getOrCreate Имена методов должны отвечать уровню абстракции класса. Например: для класса Modem имеет смысл иметь метод connect(), но не call().
  26. 26. Именование классов Имя должно быть существительным в единственном числе (но может включать так же и прилагательные). Например: Account, BasicInterface Испольуйте по-возможности стандартные ключевые слова. Например: «Interface», «Context», «Module» и т.п.
  27. 27. ИСКЛЮЧЕНИЯ Exceptions
  28. 28. Обработка исключений Используйте текты сообщений об ошибках, понятные пользователю. Не включайте в сообщения об ошибках данные, являющиеся персональными (например, пароли или номера кредитнх карт), даже если вы выводите их только в log-файлы.
  29. 29. Обработка исключений Используйте нестандартные исключения только при крайней необходимости. При создании классов нестандартных исключений давайте им само- определяющие имена. Например: RateLimitException
  30. 30. Обработка исключений Обрабатывайте только исключения, которые вы должны обработать. Используйте глобальные обработчики исключений для обработки всех необработанных исключений в программе и вывода общего сообщения об ошибке. Не забывайте освобождать ресурсы.
  31. 31. Обработка исключений Не используйте исключения для контроля за потоком выполнения: static Boolean IsProductExists(string ProductId) { //... search for the Product if ( dr.Read(ProductId) == 0 ) // no record found { throw(new Exception("Product Not found")); } return true; }
  32. 32. Обработка исключений Отсутствие продукта не является здесь исключительной ситуацией. Имя функции предполагает наличие возвращаемого значения (false в данном случае). Генерация исключения как правило намного медленнее, чем возвращение значения.
  33. 33. ПРАВИЛА ОПТИМИЗАЦИИ Rules of optimization
  34. 34. Д. Кнут, «Structured Programming with go to Statements», 1974 Преждевременная оптимизация — корень всех зол. Premature optimization is the root of all evil.
  35. 35. Правила оптимизации Make it clear before you make it fast Make it correct before you make it fast «Elements Of Programming Style», Brian Kernighan, P. Plauger, 1978
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×