Полная версия этой страницы:
CodingStyle
У каждого есть свои предпочтения в стиле кодинга, кто то при вызове функции отделяет переменные от скобок пробелами, кто то нет, кто то ставит фигурную скобку на той же строке что и 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
25 Jan 2009, 22:09
я использую стиль Олмана, CamelCase.
зы. а насчет того высказывания - зря ты. я вот в упор не понимаю зачем типы переменных в названии нужны. разве что для асма. название переменной должно отражать ее суть, про что и говорится в цитате.
Так я с идеей Торвальдса и не спорю, меня его острый язык рассмешил.
Мой стиль:
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
29 Jan 2009, 11:04
Цитата
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
29 Jan 2009, 11:22
Цитата
написано же деприкейт.
Вот именно. Все что "deprecated" могут убрать в любом новом релизе.
gamecreator
29 Jan 2009, 12:21
однострочные коменты рулят. особенно если среда разработки имеет ф-цию комента выделенных строк
Простите, может изза того что я только проснулся, может по другой причине, но я не понимаю, о чем вы говорите.
В С99 появились однострочные комменты, но по традиции в ядре принято использовать /**/ ещё и звёздочки в начале каждой строки ставить.
А что это за анализатор такой ворнинги на комменты выдаёт?
Guevara-chan
29 Jan 2009, 18:27
gamecreator
29 Jan 2009, 19:12
Цитата
Linux style for comments is the C89 "/* ... */" style.
Don't use C99-style "// ..." comments.
а вот ту видимо говорится как раз про си
Guevara-chan
29 Jan 2009, 21:55
Нет, тут говорится о комментариях в стиле С. Просто автор явно не в курсе, что они поддерживаются и некоторыми другими языками).
Статья Торвальдса описывает стиль кода ядра Линукс и форта не касается никоим образом.
Guevara-chan
30 Jan 2009, 11:44
Не только, он еще пытается давать советы как надо писать программы.
Код
1) macros that affect control flow:
#define FOO(x) \
do { \
if (blah(x) < 0) \
return -EBUGGERED; \
} while(0)
is a _very_ bad idea.;
Кстати, не соглашусь. Сама использовала подобные констуркции в коде FH и никаких проблем. Куда лучше чем тупая последовательность почти одинаковых условий.
Ретёрны в макросы лучше не прятать, иначе использующий твой код будет долго удивляться ходу работы получившегося продукта.
gamecreator
30 Jan 2009, 14:49
а я думаю что под плохой идеей он имел ввиду мусор типа do{}while(0);
Код
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
30 Jan 2009, 21:00
а почему не {}? их же вроде можно ставить просто так
Чтобы постановка ; после вызова была обязательной. Т.е., для сохранения строгости правил синтаксиса.
sergroj
02 Feb 2009, 16:26
Мой в 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
03 Feb 2009, 00:39
Быгыгы.
Извините.
В любой нормальной конторе - есть coding guidlines
Вот как в них написано - так писать и надо.
Чтобы код одного проекта не превращался в смешение стилей.
Кто в лес, кто по дрова.
Guevara-chan
03 Feb 2009, 13:17
Цитата
В любой нормальной конторе - есть coding guidlines

...Ни отнять, ни прибавить...
gamecreator
04 Feb 2009, 17:20
кстати я в паскале часто пишу if () then ...
сергрой, что такое нотация паскаля? а насчет венгерской нотации ты не прав. первоначально она подразумевает другое.
sergroj
07 Feb 2009, 02:09
Цитата(gamecreator @ 04 Feb 2009, 21:20)
сергрой, что такое нотация паскаля? а насчет венгерской нотации ты не прав. первоначально она подразумевает другое.
Camel - когда первая буква маленькая thisIsAnExample, а Pascal - когда все слова с большой буквы ThisIsAnExample.
Под венгерской я понимаю вот этот ужас, которым кишит WinAPI: (префиксы)
Код
(структура FINDBODY)
LPSTR pszPriType;
LPSTR pszSubType;
DWORD dwReserved;
Современные компы достаточно мощны, что форматировать код на лету.
Достаточно установить любой формартировщик и нажатием пары кнопок получить свой стиль.
Единственное, если стили сильно различаются, то очень трудно после переформатирования искать изменения (это когда более одного разработчика).
sergroj
07 Feb 2009, 20:05
а, еще 1 необычная черта моего стиля:
Код
if i > 5 then exit;
- 2 пробела после then, если пишу в 1 строчку. Но в с++ иногда делаю 1 пробел.
gamecreator
07 Feb 2009, 23:18
Цитата(sergroj @ 07 Feb 2009, 02:09)
Camel - когда первая буква маленькая thisIsAnExample, а Pascal - когда все слова с большой буквы ThisIsAnExample.
и то, и другое - CamelCase. Просто первое это lowerCamelCase, а второе - UpperCamelCase (которое еще называется PascalCase). вот и все
Цитата(sergroj @ 07 Feb 2009, 02:09)
Под венгерской я понимаю вот этот ужас, которым кишит WinAPI
это Неправильная венгерская нотация.
про все это можно почитать в википедии
sergroj
07 Feb 2009, 23:37
Я читал. В Apps Hungarian тоже были идиотские префиксы типа w для word'ов.
А идея префиксов, как таковых, уже используется повсеместно - I перед интерфейсами почти везде принята, в Дельфи приняты T перд типами, F перед полями, 2хбуквенные префиксы пакетов, свои префиксы у каждого enum'а.
Кому как, я придерживаюсь Hungarian Notations, собственно у нас оно является обязательным в конторе для всех и уходить от этого не собираемся.
Название переменной естественно должно отражать ее суть, только вот в больших проектах куда приятнее увидев переменную четко знать что это, член класса или локальная или вообще глобально определена, заодно видеть ее тип. Естественно современные среды разработок в этом помогают и очень сильно но привычка сильна, да и не всегда в нормальном редакторе листинг смотреть приходится.
ChASnock
12 Dec 2010, 12:02
Я пишу программы (Delphi), беря пример с разработчиков системных модулей.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.