Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Внизищу программу которая стилизует исходный код Найти похожие ветки
← →
Кто б сомневался © (2010-03-23 13:00) [40]
> Те же блоки. Вид сверху.
Не те же.if A = B then begin
qweqwe
asdasd
if B=A and A=B then begin
qweqwe
if A-b then begin
//..
end;
asdasd
end;
asdasd
qweqwe
end;
if A = B then
begin
qweqwe
asdasd
if B=A and A=B then
begin
qweqwe
if A-b then
begin
//..
end;
asdasd
end;
asdasd
qweqwe
end;
← →
Кто б сомневался © (2010-03-23 13:01) [41]Второй код читается намного быстрее.
← →
Кто б сомневался © (2010-03-23 13:07) [42]Когда Begin и End на одном уровне, сразу видишь блок, в отличии если begin и end на разных уровнях по горизонтали. нужно найти сначала Begin потом искать ближайший end - больше времени уходит на анализ.
← →
RWolf © (2010-03-23 13:17) [43]блок и так видно, без поиска begin и end — он выделен отступом.
и да, первый вариант читабельнее. имхо, конечно.
← →
Кто б сомневался © (2010-03-23 13:17) [44]Последние годы я в целом взял за правило писать код, который требует меньше анализа, не в ущерб оптимизации конечно же. N/к. отпимизация на первом месте.
К примеру я пишут приват и протектед переменные с маленькой буквой f.
fMyVar - это лучше чем с большой.
Все локальные переменные метода отмечаю прописной буквой - v. переменные в параметрах метода, с большой буквой A. Все это здорово помогает.
← →
Кто б сомневался © (2010-03-23 13:19) [45]
> и да, первый вариант читабельнее. имхо, конечно.
Менее читабельный, не надо спорить, я в свое время тоже также писал, потом перестал так делать, по этой же причине. дайте почитать человеку далекому от программирования, и спросите какой проще воспринимается.
← →
Кто б сомневался © (2010-03-23 13:23) [46]
> RWolf © (23.03.10 13:17) [43]
Мы читаем слева направо. Поэтому нам сначала надо найти слово begin. т.к. оно идет после выражения, то сначала приходится пробегать все выражение.
А если begin идет отдельной строкой, то это происходит быстрее.
Еще сложнее в плане парсинга языки в которых блок определяется скобкой (С - php итд ), все время напрягаешь зрение в поисках микроскобки.
← →
Anatoly Podgoretsky © (2010-03-23 14:03) [47]> Кто б сомневался (23.03.2010 13:19:45) [45]
И ответ будет одинаковый, в обеих какая то абракадабра написана.
← →
Petr V. Abramov © (2010-03-23 14:10) [48]
> Мы читаем слева направо. Поэтому нам сначала надо найти
> слово begin. т.к. оно идет после выражения, то сначала
> приходится пробегать все выражение.
а слово begin искать нафик не надо, все отступами выделено.
тот же вариант без потери смысла на pl/sql:
if A = B then
qweqwe;
asdasd;
if B=A and A=B then
qweqwe;
if A-b then
//..
end if;
asdasd;
end if;
asdasd;
qweqwe;
end if;
← →
TUser © (2010-03-23 14:11) [49]А зачем человеку находить слово begin? Пусть компилятор ищет.
← →
test © (2010-03-23 15:25) [50]TUser © (23.03.10 14:11) [49]
Человеку надо дописать/исправить код, тут одно из двух либо непривычно читать VCL и множество исходников Гугл, либо тяжело читать творения автора имярек. Он начинает читать, неудобно хотя автор как бы против все удобно и видно сразу, надо только на шкаф залезть. Еврит читаем в другую сторону, китайский сверху вниз, это тоже неудобства для тех кто читает по другому. Но подобные извороты в программировании, это мой стиль!
← →
Игорь Шевченко © (2010-03-23 16:05) [51]
> А зачем человеку находить слово begin? Пусть компилятор
> ищет.
Золотые слова. Пусть, гад, ищет:procedure TApplication.WndProc (var Message: TMessage);
type TInitTestLibrary = function(Size: DWord; PAutoClassInfo:Pointer
): Boolean; stdcall; var I: Integer; SaveFocus, TopWindow: HWnd;
InitTestLibrary: TInitTestLibrary; procedure Default ; begin with
Message do Result := DefWindowProc(FHandle,Msg, WParam, LParam);end;
procedure DrawAppIcon; var DC :HDC; PS :TPaintStruct; begin with
Message do begin DC := BeginPaint(FHandle, PS); DrawIcon(DC, 0, 0 ,
GetIconHandle) ; EndPaint ( FHandle, PS);end ; end ; begin try
Message.Result := 0 ; for I := 0 to FWindowHooks. Count - 1 do if
TWindowHook(FWindowHooks[I]^)(Message) then Exit ; CheckIniChange(
Message); with Message do case Msg of WM_SYSCOMMAND: case WParam and
$FFF0 of SC_MINIMIZE:Minimize;SC_RESTORE: Restore; else Default;end;
WM_CLOSE: if MainForm<>nil then MainForm.Close;WM_PAINT: if IsIconic
(FHandle ) then DrawAppIcon else Default ; WM_ERASEBKGND : begin
Message.Msg := WM_ICONERASEBKGND; Default; end ; WM_QUERYDRAGICON :
Result:= GetIconHandle; WM_SETFOCUS: begin PostMessage( FHandle ,
CM_ENTER,0,0);Default;end;WM_ACTIVATEAPP:begin Default; FActive :=
TWMActivateApp(Message).Active; if TWMActivateApp(Message ). Active
then begin RestoreTopMosts; PostMessage(FHandle, CM_ACTIVATE, 0, 0)
end else begin NormalizeTopMosts; PostMessage(FHandle,CM_DEACTIVATE,
0, 0); end; end; WM_ENABLE: if TWMEnable(Message).Enabled then begin
if not DisablingWindows then begin RestoreTopMosts; if FWindowList<>
nil then begin EnableTaskWindows(FWindowList);FWindowList:= nil;end;
end;Default;end else begin Default; if (FWindowList = nil ) and not
DisablingWindows then FWindowList :=DisableTaskWindows ( Handle);
NormalizeAllTopMosts ; end; WM_CTLCOLORMSGBOX .. WM_CTLCOLORSTATIC:
Result:=SendMessage(LParam,CN_BASE+Msg,WParam,LParam);WM_ENDSESSION:
if TWMEndSession(Message).EndSession then begin CallTerminateProcs;
Halt; end; WM_QUERYENDSESSION: Message.Result := 1; WM_COPYDATA: if
(PCopyDataStruct(Message. lParam)^.dwData = DWORD ($DE534454 ) )and
(FAllowTesting) then if FTestLib = 0 then begin
{$IFDEF MSWINDOWS}FTestLib:=SafeLoadLibrary("vcltest3.dll");{$ENDIF}
if FTestLib <> 0 then begin Result := 0; @InitTestLibrary :=
GetProcAddress(FTestLib, "RegisterAutomation"); if @InitTestLibrary
<> nil then InitTestLibrary(PCopyDataStruct(Message.lParam)^.cbData,
PCopyDataStruct(Message.lParam)^.lpData); end else begin Result :=
GetLastError ; FTestLib := 0 ;end ;end else Result := 0;
CM_ACTIONEXECUTE , CM_ACTIONUPDATE : Message. Result := Ord (
DispatchAction( Message.Msg, TBasicAction ( Message. LParam ) ));
CM_APPKEYDOWN: if IsShortCut( TWMKey(Message)) then Result := 1;
CM_APPSYSCOMMAND:if MainForm<>nil then with MainForm do if(Handle <>
0) and IsWindowEnabled(Handle) and IsWindowVisible( Handle )then
begin FocusMessages := False ; SaveFocus := GetFocus ;Windows.
SetFocus(Handle); Perform(WM_SYSCOMMAND, WParam, LParam) ;Windows.
SetFocus(SaveFocus); FocusMessages := True ;Result := 1 ;end;
CM_ACTIVATE: if Assigned (FOnActivate )then FOnActivate(Self);
WM_THEMECHANGED :ThemeServices. ApplyThemeChange ; WM_NULL:
CheckSynchronize; else Default; end; except HandleException (Self);
end; end;
← →
Jeer © (2010-03-23 16:25) [52]Привык к такому стилю давно.
Поскольку на самом-то деле такой блок - это выделение if или if else,
то мне так удобнее визуально их просматривать.
Мой код никто кроме меня не читает, поэтому мне пофигу, кто и что об этом думает :)
if ( A = B) then begin
...
end; // if
if ( A = B ) then begin
...
end
else begin
..
end; // if
← →
test © (2010-03-23 16:43) [53]Игорь Шевченко © (23.03.10 16:05) [51]
А какая экономия по стране в целом! А в мире!
Jeer © (23.03.10 16:25) [52]
Сейчас да, а потом?
← →
TUser © (2010-03-23 16:48) [54]
> Игорь Шевченко
Интересно, как народ на питонах пишет?
← →
test © (2010-03-23 16:53) [55]TUser © (23.03.10 16:48) [54]
Видимо так же, вот на С свабода, только замшелые Pascal программисты единый стиль соблюдают и то не все. ))
Что делать когда часть книг по С, Python посвящены стилю, игнорировать и придумавать единственный и свой?
← →
TUser © (2010-03-23 16:55) [56]
> Видимо так же, вот на С свабода, только замшелые Pascal
> программисты единый стиль соблюдают и то не все. ))
Попробуйте в стиле [51] написать на питоне.
← →
test © (2010-03-23 16:57) [57]TUser © (23.03.10 16:55) [56]
Там 3 == слово можно сравнивать думаешь мешанину покруче представленной там сложно изобразить?
← →
Игорь Шевченко © (2010-03-23 17:10) [58]TUser © (23.03.10 16:48) [54]
> Интересно, как народ на питонах пишет?
Руками
← →
TUser © (2010-03-23 17:12) [59]
> Там 3 == слово можно сравнивать
Мы про язык говорим или про оформление кода?
Желаю увидеть мешанину на питоне, круче, чем в 51. В смысле оформления, всяких там отступой и прочей красивости.
Не нравится питон, можете показать мешанину на VB, там нельзя 3==слово.
← →
TUser © (2010-03-23 17:12) [60]
> Игорь Шевченко
Наверное, несчастные, слезами обливаются, никак бегина в отдельной строчке найти не могут. :)
← →
test © (2010-03-23 17:16) [61]TUser © (23.03.10 17:12) [59]
Вроде бы не раз уже обсуждали, пишешь для мамы на коленке пиши как хочешь, если пишется код который будут использовать коллеги, уважай коллег пиши как принято.
← →
Игорь Шевченко © (2010-03-23 17:21) [62]TUser © (23.03.10 17:12) [60]
У каждого языка свой синтаксис, как тебе известно. Пишущие на APL или TCL тоже не могут найти begin, однако им это не мешает. Пишущие на С/С++/С#/Java тоже не могут найти begin, хотя там есть явные операторые скобки
← →
test © (2010-03-23 17:24) [63]Игорь Шевченко © (23.03.10 17:21) [62]
И у каждого языка есть общепринятый стиль, в отношении С их даже несколько.
← →
TUser © (2010-03-23 17:39) [64]
> test © (23.03.10 17:16) [61]
>
> TUser © (23.03.10 17:12) [59]
> Вроде бы не раз уже обсуждали, пишешь для мамы на коленке
> пиши как хочешь, если пишется код который будут использовать
> коллеги, уважай коллег пиши как принято.
Собственно, против этого я не выступал. Стандарт, конечно, надо соблюдать, каков бы он ни был. А вот когда говорят "при прочтении такого кода чаще хочется выкинуть его" ([13]), то тут уже речь о том, что стандарт А лучше стандарта Б. В частности, вынесенный в отдельную строчкуbegin
якобы лучше (удобнее, понятнее, как увиделbegin
, так сразу и понятно, что новый блок). Вот это мне кажется неверным - см. [33]. Могу повторить - глазами блок кода выделяется по отступам, а не по операторным скобкам. Вы же, читая код, мысленно дерево разбора не строите. Ну вот. А тогда лишняя строчка - просто лишняя информация, она отвлекает внимание от более важных вещей (да и занимает место на экране, между прочим).
> Игорь Шевченко
Довольно странно, что в [33] кто-то вообще видит призыв писать в стиле [51].
← →
test © (2010-03-23 17:46) [65]TUser © (23.03.10 17:39) [64]
Тебе повезло не работать с этими супер кодерами со своим стилем, мне наоборот, поймешь когда встретишь. [51] тоже стиль автор художник он так видет.
← →
test © (2010-03-23 17:51) [66]TUser © (23.03.10 17:39) [64]
Кстате переменные и функции матом звать тоже стиль!
← →
ProgRAMmer Dimonych © (2010-03-23 17:52) [67]Давайте попробую предложить другое обоснование. Есть такое понятие, как составной оператор. Блок операторов, ограниченный операторными скобками. Без операторных скобок он перестаёт быть составным оператором и становится просто набором "более простых" операторов. С точки зрения синтаксиса он может находиться везде, где допустимо употребление одиночного оператора. Вспоминаем синтаксические диаграммы и т.п., например. Операторные скобки - это часть составного оператора, а не синтаксическая конструкция условного оператора или операторов цикла.
Если упрощённо, то вот так:if <Условие> then <Оператор>[ else <Оператор>];
Конструкция состоит из ключевых слов if, then, else. Оператором может быть как простой, так и составной. Следовательно, операторная скобка begin синтаксически привязана к составному оператору, а не к оператору if. Да и по смыслу, вообще говоря, тоже: "Если выполняется условие <Такое-то>, то выполнить действие <ОченьСложное>, иначе выполнить действие <ДругоеСложное>". Блочный подход, если хотите. Есть подзадача, которую мы решаем по ветви then, и подзадача, решаемая по else. Эти подзадачи могут использоваться в любом другом месте программа. С минимальными изменениями, которые будут связаны с областью видимости переменных и т.п. вещами. С сам условные оператор - это более сложная подзадача - подзадача, связанная с принятием решения. Идёт в голову древовидная структура.|
Оператор_if_then_else
/ \
Оператор_по_then Оператор_по_else
/ \ / \
Аналогично для while и for:while <Условие_входа> do <Оператор>;
for <Переменная>:=<Значение1> [down]to <Значение2> do <Оператор>;
Иначе дело обстоит с repeat-until"ом:repeat <Оператор1>; <Оператор2>; ... <ОператорN> until <Условие_выхода>;
Вот здесь уже действительно работает только отступ.
=====
Кстати, в bash"е, например, за отсутствием слова begin на отдельную строку выносят слово then:if <Условие>
then
else
fi
Можно и так, конечно:if <Условие>; then
else
fi
Но здесь уже вмешивается точка с запятой, которая отделяет then от if. Т.е. это обходной путь, не более того. Так что для приведённых примеров, где упоминаются языки без операторных скобок, есть альтернативный вариант.
=====
Кстати, интересно, если мы решаем всё же писать begin в предыдущей строке, то теперь так писать, что ли?procedure Foo; begin
end;
Если нет, то почему?
← →
TUser © (2010-03-23 17:54) [68]
> [51] тоже стиль автор художник он так видет.
Любую идею можно довести до состояния абсолютного идиотизма. И хорошую тоже.
← →
Игорь Шевченко © (2010-03-23 18:04) [69]TUser © (23.03.10 17:39) [64]
Я много лет писал в стиле K&R - отчасти от того, что первые 6 лет после железной машины только на С. Потом, когда стал писать одновременно и на паскале и на С, оставил за собой стиль K&R и в паскале. А с переходом на D2006 перешел на стиль Borland по одной простой причине - среда сама при code completion ставит операторыне скобки в стиле Borland. Ну не переформатировать же.
← →
TUser © (2010-03-23 18:19) [70]
> Операторные скобки - это часть составного оператора, а не
> синтаксическая конструкция условного оператора или операторов
> цикла.
Это так. Но пишут жеwhile (Result <> nil) and not Result.ShowHint do Result := Result.Parent;
и ничё.
> Кстати, интересно, если мы решаем всё же писать begin в
> предыдущей строке, то теперь так писать, что ли?
>
> procedure Foo; begin
> end;
>
> Если нет, то почему?
Я так не пишу. Почему - хз. Наверное,begin
будет мешать разглядеть тип у функции (сразу в конце заголовка) :-)
← →
test © (2010-03-23 18:28) [71]TUser © (23.03.10 17:54) [68]
Я уже задавал вопрос, в чем выгоды от if then begin where repeat end на одной строке, так и не ответили, в чем выгоды?
← →
TUser © (2010-03-23 18:31) [72]
> test © (23.03.10 18:28) [71]
> Поэтому, лишняя строка с одним словом begin только мешается,
> прыгает в глаза, не сообщая никакой ценной (для человека)
> информации.
← →
test © (2010-03-23 18:36) [73]TUser © (23.03.10 18:31) [72]
Уже три или четыре отзыва по ветке что не видно где блок. Выгода для них в чем? Может это скрытие каких то особенностей?
Обфускация кода работает еще более эффективно.
Может просто обфускацию после написания проводить?
← →
Кто б сомневался © (2010-03-23 18:38) [74]
> Это так. Но пишут же
>
> while (Result <> nil) and not Result.ShowHint do Result
> := Result.Parent;
>
> и ничё.
Тут причина в другом, здесь будут проблемы при отладке этого кода.
По поводу того, что определяют по отступам, ты не прав, не только по ним. Слово begin выделяется жирным, слово end также. поэтому сразу бросается в глаза цельный блок.if A=b then
begin
//код
end
Равнозначноif A=b then
-------------
//код
-------------
← →
ProgRAMmer Dimonych © (2010-03-23 18:48) [75]> [74] Кто б сомневался © (23.03.10 18:38)
Не думаю, что это удачный аргумент. Всё-таки Pascal и его разновидности - это не только Delphi. И отображение исходника во время его редактирования - штука некросссредовая :)
А в приведённом примере есть одна особенность:while (Result <> nil) and not Result.ShowHint do Result := Result.Parent;
Имеем целиком весь оператор в одной строке с "обрамляющим" его if"ом. Т.е. если заменять составным оператором, то эквивалентным кодом будет:while <Условие> do begin OperatorPreved; OperatorMedved; OperatorEsche; OperatorHvatit; end;
Именно так, в одну строку. Т.к. иначе разрывается цельность составного оператора и, возвращаясь к одиночному оператору, получим что-то в духе:while (Result <> nil) and not Result.ShowHint do Result
:= Result.Parent;
← →
Sergey Masloff (2010-03-23 18:50) [76]Я на Delphi (если это не противоречило правилам команды) всегда писал
if something then begin
end
Розыч мне за пивом тыкал в нос руководством от тогда еще Борланда но я не внял. Все же на строчку меньше а ничему не мешает (в отличие от
if something then foo else bar;)
← →
TUser © (2010-03-23 18:56) [77]Отлаживать, конечно, проще
while (Result <> nil) and not Result.ShowHint do
Result := Result.Parent;
а еще проще, наверное,
while Result <> nil do
with Result do
if ShowHint then
break
else Result := Parent;
// :)
← →
Игорь Шевченко © (2010-03-23 18:59) [78]
while Result<>nil do with Result do if ShowHint then break else Result:=Parent;
Так всяко лучше
← →
test © (2010-03-23 19:01) [79]Авторы неповторимых стилей, продолжайте писать, мое отношение к такому коду выкинуть к чертовой матери.
← →
TUser © (2010-03-23 19:04) [80]
> Игорь Шевченко © (23.03.10 18:59) [78]
Убедили, буду писать так.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.072 c