Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CodingStyle
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Gloin
У каждого есть свои предпочтения в стиле кодинга, кто то при вызове функции отделяет переменные от скобок пробелами, кто то нет, кто то ставит фигурную скобку на той же строке что и if, а кто то переносит её вниз — давайте поговорим о своих привычках.
Я намедни решил внимательно прочитать http://lxr.linux.no/linux/Documentation/CodingStyle и от души посмеялся над пассажами в духе вот этого :
«Encoding the type of a function into the name (so-called Hungarian
notation) is brain damaged - the compiler knows the types anyway and can
check those, and it only confuses the programmer. No wonder MicroSoft
makes buggy programs.»
gamecreator
я использую стиль Олмана, CamelCase.

зы. а насчет того высказывания - зря ты. я вот в упор не понимаю зачем типы переменных в названии нужны. разве что для асма. название переменной должно отражать ее суть, про что и говорится в цитате.
Gloin
Так я с идеей Торвальдса и не спорю, меня его острый язык рассмешил.
         
Мой стиль:
CODE

/*
ReadWholeFile - считывает весь файл в строку
OUT: BOOLEAN (флаг результата)
*/
function ReadWholeFile($FileName, &$Data) {
$FileSize = @filesize($FileName);
if ($FileSize===false) {
return false;
} // .if
if ($FileSize>0) {
$hFile = fopen($FileName, 'rb');
if (!$hFile) {
return false;
} // .if
if (strlen(($Data = fread($hFile, $FileSize)))!==$FileSize) {
return false;
} // .if
fclose($hFile);
} // .if
else {
$Data = '';
} //.else
return true;
} // .function ReadWholeFile


CODE

PROCEDURE Init;
CONST
C_REWRITE_EXISTING = FALSE;

BEGIN
IF NOT Win.CopyFile(C_FILE_IN, C_FILE_OUT, C_REWRITE_EXISTING) THEN BEGIN
Error('Cannot create output file');
END; // .if
hFileOut:=Utils.FileOpen(C_FILE_OUT, fmOpenWrite OR fmShareExclusive);
IF hFileOut<0 THEN BEGIN
Error('Cannot open output file');
END; // .if
END; // .procedure Init
Хмм..
а мне пофиг
Монца
Ну и я тогда отпишусь, поскольку пишу на дельфи придерживаюсь стиля разработчиков, примеры можно посмотреть в VCL
Guevara-chan
Цитата
Linux style for comments is the C89 "/* ... */" style.
Don't use C99-style "// ..." comments.

Хм... Попыталась). Вот что пишут:

Цитата
/* Comment */
^^
Warning(-4104): /* is a *** deprecated *** word (see src\compat\evolve.f)  ok

С "//" проблем никаких.
Монца
ну ворнинг и че? ) написано же деприкейт.
А сишный комментарий - это однострочный.
Guevara-chan
Цитата
написано же деприкейт.

Вот именно. Все что "deprecated" могут убрать в любом новом релизе.
gamecreator
однострочные коменты рулят. особенно если среда разработки имеет ф-цию комента выделенных строк
Gloin
Простите, может изза того что я только проснулся, может по другой причине, но я не понимаю, о чем вы говорите.
В С99 появились однострочные комменты, но по традиции в ядре принято использовать /**/ ещё и звёздочки в начале каждой строки ставить.
А что это за анализатор такой ворнинги на комменты выдаёт?
Guevara-chan
gamecreator
Цитата
Linux style for comments is the C89 "/* ... */" style.
Don't use C99-style "// ..." comments.

а вот ту видимо говорится как раз про си
Guevara-chan
Нет, тут говорится о комментариях в стиле С. Просто автор явно не в курсе, что они поддерживаются и некоторыми другими языками).
Gloin
Статья Торвальдса описывает стиль кода ядра Линукс и форта не касается никоим образом.
Guevara-chan
Не только, он еще пытается давать советы как надо писать программы.

Код
1) macros that affect control flow:
#define FOO(x)                                  \
             do {                                    \
                  if (blah(x) < 0)                \
                   return -EBUGGERED;      \
       } while(0)
is a _very_ bad idea.;


Кстати, не соглашусь. Сама использовала подобные констуркции в коде FH и никаких проблем. Куда лучше чем тупая последовательность почти одинаковых условий.
Gloin
Ретёрны в макросы лучше не прятать, иначе использующий твой код будет долго удивляться ходу работы получившегося продукта.
gamecreator
а я думаю что под плохой идеей он имел ввиду мусор типа do{}while(0);
Gloin
Код
Macros with multiple statements should be enclosed in a do - while block:

#define macrofun(a, b, c)                       \
       do {                                    \
               if (a == 5)                     \
                       do_this(b, c);          \
       } while (0)
gamecreator
а почему не {}? их же вроде можно ставить просто так
Irh
Чтобы постановка ; после вызова была обязательной. Т.е., для сохранения строгости правил синтаксиса.
sergroj
Мой в Delphi:
Код
i:= 5;

Т.е. нет пробела перед ":=", но есть после, а так же локальные переменные с коротким именем пишу с маленькой буквы. В остальном примерно как в VCL.
Ну и еще
Код
if then
begin
end else
begin
end;

case i of
 0:
 begin
 end;
end

if then
 try
 finally
 end;


В C++:
Код
i = 5;
if ()
{
}

switch ()
{
 case 0:
   break;
 case 1:
 {
   break;
 }
}

И люблю выражения типа (flag ? 11 : 22), циклы типа
Код
for(char* s = (char*)what; *d = *s; s++, d++);

Имена всего - PascalNotation и camelCase.

Цитата(Хмм.. @ 26 Jan 2009, 02:53)
а мне пофиг

А зря. Старайся делать код красивым - обязательно делай отступы, разбивай на функции.

Цитата
Linux style for comments is the C89 "/* ... */" style.
Don't use C99-style "// ..." comments.

Да, глупейшая традиция. Примерно того же порядка, что "Hungarian notation".
Gingerk
Быгыгы.
Извините.
В любой нормальной конторе - есть coding guidlines
Вот как в них написано - так писать и надо.
Чтобы код одного проекта не превращался в смешение стилей.
Кто в лес, кто по дрова.
Guevara-chan
Цитата
В любой нормальной конторе - есть coding guidlines



...Ни отнять, ни прибавить...
gamecreator
кстати я в паскале часто пишу if () then ...

сергрой, что такое нотация паскаля? а насчет венгерской нотации ты не прав. первоначально она подразумевает другое.
sergroj
Цитата(gamecreator @ 04 Feb 2009, 21:20)
сергрой, что такое нотация паскаля? а насчет венгерской нотации ты не прав. первоначально она подразумевает другое.

Camel - когда первая буква маленькая thisIsAnExample, а Pascal - когда все слова с большой буквы ThisIsAnExample.
Под венгерской я понимаю вот этот ужас, которым кишит WinAPI: (префиксы)
Код
(структура FINDBODY)
   LPSTR pszPriType;
   LPSTR pszSubType;
   DWORD dwReserved;
Монца
Современные компы достаточно мощны, что форматировать код на лету.
Достаточно установить любой формартировщик и нажатием пары кнопок получить свой стиль.
Единственное, если стили сильно различаются, то очень трудно после переформатирования искать изменения (это когда более одного разработчика).
sergroj
а, еще 1 необычная черта моего стиля:
Код
if i > 5 then  exit;

- 2 пробела после then, если пишу в 1 строчку. Но в с++ иногда делаю 1 пробел.
gamecreator
Цитата(sergroj @ 07 Feb 2009, 02:09)
Camel - когда первая буква маленькая thisIsAnExample, а Pascal - когда все слова с большой буквы ThisIsAnExample.
и то, и другое - CamelCase. Просто первое это lowerCamelCase, а второе - UpperCamelCase (которое еще называется PascalCase). вот и все

Цитата(sergroj @ 07 Feb 2009, 02:09)
Под венгерской я понимаю вот этот ужас, которым кишит WinAPI
это Неправильная венгерская нотация.

про все это можно почитать в википедии
sergroj
Я читал. В Apps Hungarian тоже были идиотские префиксы типа w для word'ов.
А идея префиксов, как таковых, уже используется повсеместно - I перед интерфейсами почти везде принята, в Дельфи приняты T перд типами, F перед полями, 2хбуквенные префиксы пакетов, свои префиксы у каждого enum'а.
orgus
Кому как, я придерживаюсь Hungarian Notations, собственно у нас оно является обязательным в конторе для всех и уходить от этого не собираемся.
Название переменной естественно должно отражать ее суть, только вот в больших проектах куда приятнее увидев переменную четко знать что это, член класса или локальная или вообще глобально определена, заодно видеть ее тип. Естественно современные среды разработок в этом помогают и очень сильно но привычка сильна, да и не всегда в нормальном редакторе листинг смотреть приходится.
ChASnock
Я пишу программы (Delphi), беря пример с разработчиков системных модулей.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.