SlideShare uma empresa Scribd logo
1 de 18
Не все комментарии одинаково
               полезны
Анна Зайцева
web-разработчик
Anna.zaytseva@softline.ru
Идеальный код не требует комментариев
       Он самодокументируем
Одна из основных причин написания комментариев
- плохое качество кода.


$currUser = new User($userName, $userPass, 0);

$currUser = new User($userName, $userPass);
$currUser->save();
Классификация плохих комментариев
Бормотание
Комментарий есть, пользы нет.




order.default_customer_type_is_juridical = 0 ;
поумолчанию тип покупателя юридическое лицо

Комментарий, смысл которого приходится искать в других
модулях, не несет полезной информации.
Избыточные комментарии
Чтение такого комментария займет больше
   времени, чем чтение самого кода
Недостоверные комментарии
Причины:
 неточно выраженная мысль;
 потеря актуальности с течением времени;

Результат:
 неверные ожидания от кода;
 неправильное использование кода;
 потеря времени на поиск источника проблемы;
Обязательные комментарии
 загромождают код
 распространяют недостоверную информацию
 вносят путаницу


/**
 * Класс менеджер ПС
 * @author Ann Zaitseva
 * @since 2012-05-04
 * @see RM-51854
 */
class PaymentSystemManager {
/**
 * Город
 */
private $city

/**
 * Возвращает город
 *
 * @return string
 */
  public function getCity()
  {
    return $this->city;
  }
Пересказы (переводы)
   не несут никакой дополнительной информации;
   уменьшают плотность информации;
   их никто не читает (даже сами авторы);
   часто недостоверны




* Класс менеджер покупателей
class DeliveryManager
Журнальные комментарии
/**
 * Добавила возможность автоотправки ключейorg.10354. (action =
editversion, updateversion)
 * @author Svetlana F. svetlanaf@softline.ru
 * @since 2008.02.18
 *
 *
 * Добавил возможность сортировки, кликая на название столбцов
 *
 * @author Виталий Попов vitaliypop@softline.ru
 * @since 15.04.2008
 *
 *
* Запрет на сортировку скриншотов
 *
 * @author Yegor Lukash
 * @since 03.06.2010
 * @seeRM-4641
 */
/**
* @desc Ставим значение NOW(), вместо $DEFDATE = date( "Y-m-d
    H:i:00" );
* Зачем вручную делать то, что должен делать MySQL и плодить
    возможные ошибки?
* @see TS2898
* @author Vladimir Savenkov
*/
$DEFDATE = 'NOW()';
Закомментированный код




       Если код не нужен, его нужно удалять!
Плохо подобранное название
/**
 * переносит содержимое корзины от гостя
 * к авторизованному пользователю
 */
public function auth {


Не трать время на написание комментария. Потрать его на написание
хорошего кода
Комментарии за закрывающей фигурной
скобкой.
          } // end foreach
     } // end getList
} // end class
Комментарии HTML
*<ul>
* <li>ESlMailingType::SpecialOffers           - Специальные акции и скидки Allsoft</li>
* <li>ESlMailingType::NewPrograms                       - Новые поступления</li>
* <li>ESlMailingType::ForDealers - Для дилеров и корпоративных клиентов</li>
* <li>ESlMailingType::News - Новости магазина и мира программного обеспечения</li>
* </ul>
* <code>
* $oMailingService = new CSlMailingService();
* $oMailingService->getMailingByType(ESlMailingType::SpecialOffers)->subscribe($aParams);
* </code>
   Единственный источник действительно достоверной
    информации - код.

   Не комментируйте плохой код - перепишите его.

   Если написания комментария не избежать, не забывайте, что
    единственная цель комментария - давать ДОПОЛНИТЕЛЬНУЮ
    и НУЖНУЮ информацию. Если комментарий не приближает
    нас к этой цели, в нем нет смысла.

   Комментарий не должен вводить в заблуждение. Если пишете
    комментарий, напишите самый понятный
Нужно всегда помнить, что все написанные комментарии в
  дальнейшем придется сопровождать, иначе они потеряют
        актуальность и будут вводить в заблуждение

Mais conteúdo relacionado

Destaque

что такое Zabbiбиxа
что такое Zabbiбиxачто такое Zabbiбиxа
что такое Zabbiбиxа
Softline
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчика
Softline
 
разработка Mvc приложений на java script
разработка Mvc приложений на java scriptразработка Mvc приложений на java script
разработка Mvc приложений на java script
Softline
 
создание команды тестирования
создание команды тестированиясоздание команды тестирования
создание команды тестирования
Softline
 
Learn lean. Технология управления от самураев.
Learn lean. Технология управления от самураев.Learn lean. Технология управления от самураев.
Learn lean. Технология управления от самураев.
Softline
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
Softline
 
Управление проектами в Softline
Управление проектами в SoftlineУправление проектами в Softline
Управление проектами в Softline
Softline
 
Silex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложенийSilex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложений
Softline
 
Voip-телефония.Unified Communications. Биллинг телеком-услуг
Voip-телефония.Unified Communications. Биллинг телеком-услугVoip-телефония.Unified Communications. Биллинг телеком-услуг
Voip-телефония.Unified Communications. Биллинг телеком-услуг
Softline
 
Axure по для создания прототипов веб-сайтов
Axure   по для создания прототипов веб-сайтовAxure   по для создания прототипов веб-сайтов
Axure по для создания прототипов веб-сайтов
Softline
 
эффективные ретроспективы (доклад)
эффективные ретроспективы (доклад)эффективные ретроспективы (доклад)
эффективные ретроспективы (доклад)
Softline
 
Разработка прототипов на Axure
Разработка прототипов на AxureРазработка прототипов на Axure
Разработка прототипов на Axure
Softline
 
Use cases на практике
Use cases на практикеUse cases на практике
Use cases на практике
Softline
 

Destaque (19)

что такое Zabbiбиxа
что такое Zabbiбиxачто такое Zabbiбиxа
что такое Zabbiбиxа
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчика
 
разработка Mvc приложений на java script
разработка Mvc приложений на java scriptразработка Mvc приложений на java script
разработка Mvc приложений на java script
 
создание команды тестирования
создание команды тестированиясоздание команды тестирования
создание команды тестирования
 
Learn lean. Технология управления от самураев.
Learn lean. Технология управления от самураев.Learn lean. Технология управления от самураев.
Learn lean. Технология управления от самураев.
 
Введение в анализ требований
Введение в анализ требованийВведение в анализ требований
Введение в анализ требований
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
 
Управление проектами в Softline
Управление проектами в SoftlineУправление проектами в Softline
Управление проектами в Softline
 
Silex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложенийSilex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложений
 
Voip-телефония.Unified Communications. Биллинг телеком-услуг
Voip-телефония.Unified Communications. Биллинг телеком-услугVoip-телефония.Unified Communications. Биллинг телеком-услуг
Voip-телефония.Unified Communications. Биллинг телеком-услуг
 
Axure по для создания прототипов веб-сайтов
Axure   по для создания прототипов веб-сайтовAxure   по для создания прототипов веб-сайтов
Axure по для создания прототипов веб-сайтов
 
эффективные ретроспективы (доклад)
эффективные ретроспективы (доклад)эффективные ретроспективы (доклад)
эффективные ретроспективы (доклад)
 
Use-case diagram
Use-case diagramUse-case diagram
Use-case diagram
 
Разработка прототипов на Axure
Разработка прототипов на AxureРазработка прототипов на Axure
Разработка прототипов на Axure
 
МАПО Лекция 14 UML Use Case
МАПО Лекция 14 UML Use CaseМАПО Лекция 14 UML Use Case
МАПО Лекция 14 UML Use Case
 
Use Cases
Use CasesUse Cases
Use Cases
 
п15 16
п15 16п15 16
п15 16
 
Пишем пользовательские сценарии
Пишем пользовательские сценарииПишем пользовательские сценарии
Пишем пользовательские сценарии
 
Use cases на практике
Use cases на практикеUse cases на практике
Use cases на практике
 

Semelhante a не все комментарии одинаково полезны

Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
Mikhail Davydov
 
Nicme full presentation
Nicme full presentationNicme full presentation
Nicme full presentation
team-nicme
 
Система документации phpDocumentor
Система документации phpDocumentorСистема документации phpDocumentor
Система документации phpDocumentor
roadhump
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community
 
Такой разный емейл-маркетинг - доставляем и интригуем
Такой разный емейл-маркетинг - доставляем и интригуемТакой разный емейл-маркетинг - доставляем и интригуем
Такой разный емейл-маркетинг - доставляем и интригуем
Evgeniy Romanov
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
See ( занятие №1)
See ( занятие №1)See ( занятие №1)
See ( занятие №1)
Bulatov Edward
 

Semelhante a не все комментарии одинаково полезны (20)

Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
 
Intersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую ямуIntersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую яму
 
Nicme full presentation
Nicme full presentationNicme full presentation
Nicme full presentation
 
Euroclimate.org
Euroclimate.orgEuroclimate.org
Euroclimate.org
 
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...
 
Tagconf 13 - SphinxSearch - 2
Tagconf 13 - SphinxSearch - 2Tagconf 13 - SphinxSearch - 2
Tagconf 13 - SphinxSearch - 2
 
Контекстная реклама: минимум затрат - максимум отдачи
Контекстная реклама: минимум затрат - максимум отдачиКонтекстная реклама: минимум затрат - максимум отдачи
Контекстная реклама: минимум затрат - максимум отдачи
 
Sti33
Sti33Sti33
Sti33
 
Система документации phpDocumentor
Система документации phpDocumentorСистема документации phpDocumentor
Система документации phpDocumentor
 
Trening modul2-webinar14
Trening modul2-webinar14Trening modul2-webinar14
Trening modul2-webinar14
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
Такой разный емейл-маркетинг - доставляем и интригуем
Такой разный емейл-маркетинг - доставляем и интригуемТакой разный емейл-маркетинг - доставляем и интригуем
Такой разный емейл-маркетинг - доставляем и интригуем
 
Mkc32
Mkc32Mkc32
Mkc32
 
WTF Code @ jug.lv
WTF Code @ jug.lvWTF Code @ jug.lv
WTF Code @ jug.lv
 
Mpk rais
Mpk raisMpk rais
Mpk rais
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Статический анализ и ROI
Статический анализ и ROIСтатический анализ и ROI
Статический анализ и ROI
 
Master tree
Master treeMaster tree
Master tree
 
See ( занятие №1)
See ( занятие №1)See ( занятие №1)
See ( занятие №1)
 

не все комментарии одинаково полезны

  • 1. Не все комментарии одинаково полезны Анна Зайцева web-разработчик Anna.zaytseva@softline.ru
  • 2. Идеальный код не требует комментариев Он самодокументируем
  • 3. Одна из основных причин написания комментариев - плохое качество кода. $currUser = new User($userName, $userPass, 0); $currUser = new User($userName, $userPass); $currUser->save();
  • 5. Бормотание Комментарий есть, пользы нет. order.default_customer_type_is_juridical = 0 ; поумолчанию тип покупателя юридическое лицо Комментарий, смысл которого приходится искать в других модулях, не несет полезной информации.
  • 6. Избыточные комментарии Чтение такого комментария займет больше времени, чем чтение самого кода
  • 7. Недостоверные комментарии Причины:  неточно выраженная мысль;  потеря актуальности с течением времени; Результат:  неверные ожидания от кода;  неправильное использование кода;  потеря времени на поиск источника проблемы;
  • 8. Обязательные комментарии  загромождают код  распространяют недостоверную информацию  вносят путаницу /** * Класс менеджер ПС * @author Ann Zaitseva * @since 2012-05-04 * @see RM-51854 */ class PaymentSystemManager {
  • 9. /** * Город */ private $city /** * Возвращает город * * @return string */ public function getCity() { return $this->city; }
  • 10. Пересказы (переводы)  не несут никакой дополнительной информации;  уменьшают плотность информации;  их никто не читает (даже сами авторы);  часто недостоверны * Класс менеджер покупателей class DeliveryManager
  • 11. Журнальные комментарии /** * Добавила возможность автоотправки ключейorg.10354. (action = editversion, updateversion) * @author Svetlana F. svetlanaf@softline.ru * @since 2008.02.18 * * * Добавил возможность сортировки, кликая на название столбцов * * @author Виталий Попов vitaliypop@softline.ru * @since 15.04.2008 * * * Запрет на сортировку скриншотов * * @author Yegor Lukash * @since 03.06.2010 * @seeRM-4641 */
  • 12. /** * @desc Ставим значение NOW(), вместо $DEFDATE = date( "Y-m-d H:i:00" ); * Зачем вручную делать то, что должен делать MySQL и плодить возможные ошибки? * @see TS2898 * @author Vladimir Savenkov */ $DEFDATE = 'NOW()';
  • 13. Закомментированный код Если код не нужен, его нужно удалять!
  • 14. Плохо подобранное название /** * переносит содержимое корзины от гостя * к авторизованному пользователю */ public function auth { Не трать время на написание комментария. Потрать его на написание хорошего кода
  • 15. Комментарии за закрывающей фигурной скобкой. } // end foreach } // end getList } // end class
  • 16. Комментарии HTML *<ul> * <li>ESlMailingType::SpecialOffers - Специальные акции и скидки Allsoft</li> * <li>ESlMailingType::NewPrograms - Новые поступления</li> * <li>ESlMailingType::ForDealers - Для дилеров и корпоративных клиентов</li> * <li>ESlMailingType::News - Новости магазина и мира программного обеспечения</li> * </ul> * <code> * $oMailingService = new CSlMailingService(); * $oMailingService->getMailingByType(ESlMailingType::SpecialOffers)->subscribe($aParams); * </code>
  • 17. Единственный источник действительно достоверной информации - код.  Не комментируйте плохой код - перепишите его.  Если написания комментария не избежать, не забывайте, что единственная цель комментария - давать ДОПОЛНИТЕЛЬНУЮ и НУЖНУЮ информацию. Если комментарий не приближает нас к этой цели, в нем нет смысла.  Комментарий не должен вводить в заблуждение. Если пишете комментарий, напишите самый понятный
  • 18. Нужно всегда помнить, что все написанные комментарии в дальнейшем придется сопровождать, иначе они потеряют актуальность и будут вводить в заблуждение