Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизОцените код 2 Найти похожие ветки
← →
@!!ex © (2007-11-23 13:48) [0]Собственно по моему коду все уже опнятно, занимаюсь исправлением идиотских мест.
Интересно было бы услышать комменты по этому коду:procedure delet (var l:spisok; m: string);
var a,b : spisok;
begin bl:=false;
if l<>nil then begin
if l^.info=m then begin
a:=l;
l:=l^.next; bl:=true;
dispose(a);
end
else begin
b:=l;
while (bl=false) and (b^.next<>nil) do begin
if b^.next^.info=m then begin
a:=b^.next;
b^.next:=a^.next; bl:=true;
dispose(a);
end
else
b:=b^.next;
end;
end;
end;
end;
← →
turbouser © (2007-11-23 13:56) [1]1) a,b,l,m,bl - дать адекватные имена
2) begin bl:=false; разнести на 2 строчки
3) if l<>nil then begin if l^.info=m then begin можно и в одну строку сделать
← →
Котик Б (2007-11-23 14:04) [2]Я так понимаю в лице Мастеров Delphi Вы нашли бесплатный рефакторинг ?
← →
homm © (2007-11-23 14:04) [3]> [1] turbouser © (23.11.07 13:56)
> if l<>nil then begin if l^.info=m then begin можно и в
> одну строку сделать
А лучше не делать
> if l<>nil then begin
> if l^.info=m then begin
Не желей пробеловif l <> nil then begin
if l^.info = m then begin
Что такое spisok? Это указатель? Плохое имя для указателя. PSpisok.
Зачем var l, если это и так указтель? Если хочеш вернуть значение, сделай функцию. А то хорошо плучается, передал список, указал удалить и он невалидный стал.
← →
Zeqfreed © (2007-11-23 14:08) [4]
procedure Delete(var list : PMyList; m : String);
var
tmp, node : PMyList;
begin
bl := false; //Глобальная переменная с таким говорящим названием?
if not Assigned(list) then Exit;
node := list;
while Assigned(node^.next) and (node^.next^.info <> m) do
node := node^.next;
if Assigned(node^.next) and (node^.next^.info = m) then begin
tmp := node^.next^;
node^.next := tmp^.next;
Dispose(tmp);
bl := true;
end;
end;
Примерно так я бы написал.
← →
homm © (2007-11-23 14:11) [5]> [4] Zeqfreed © (23.11.07 14:08)
> var list
Вар можно убрать теперь :)
← →
Zeqfreed © (2007-11-23 14:11) [6]> homm © (23.11.07 14:11) [5]
Даже нужно :)
← →
@!!ex © (2007-11-23 14:12) [7]> [2] Котик Б (23.11.07 14:04)
1) Это не мой код.
2) Мне код не рефакторили, а указывали на неправильные места, если вы внимания не обратили.
3) Вы тут никакого участия не принимаете, чего возмущаетесь?
← →
Zeqfreed © (2007-11-23 14:15) [8]И вообще, bl надо убрать и возвращать булев результат из функции.
← →
Anatoly Podgoretsky © (2007-11-23 14:32) [9]> @!!ex (23.11.2007 13:48:00) [0]
Какие то странные имена, какие то глобальные переменные. Код трудно читаемый и трудно понимаемый для постороннего глаза. Нет отступов в блоках.
← →
DrPass © (2007-11-23 15:20) [10]...и еще пора избавляться от дурацкой студенческой привычки писать begin в той же строке, что и предыдущий оператор
← →
@!!ex © (2007-11-23 15:56) [11]> [10] DrPass © (23.11.07 15:20)
Разве это плохо?
Я наоборот всю жизнб писал на следующей строчке, а в ВУЗе переучили ставить на туже строчку...
← →
Anatoly Podgoretsky © (2007-11-23 16:02) [12]> @!!ex (23.11.2007 15:56:11) [11]
Не знаю, никогда не видел рекомендаций писать два оператора на одной строке, странный какой то ВУЗ - беги ты оттуда, плохому научат.
> l:=l^.next; bl:=true;
← →
homm © (2007-11-23 16:07) [13]> [10] DrPass © (23.11.07 15:20)
> ...и еще пора избавляться от дурацкой студенческой привычки
> писать begin в той же строке, что и предыдущий оператор
Не надо. Незачем раздувать код во вертикали, вставая бессмысленные элементы. Стоит там begin или не вполне видно по следующей строке, если взять за правило всегда ставить перенос строки и деать отступ после begin.
← →
@!!ex © (2007-11-23 16:16) [14]> > l:=l^.next; bl:=true;
Я так не пишу никогда. Это ИМХО очень не читабельно.
А вот против begin на той же строчке не вижу ничего плохого...
Буду благодарен, если расскажите, почему плохо это плохо...
← →
DVM © (2007-11-23 16:28) [15]
> Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> элементы.
В VCL везде с новой строки ставят.
← →
@!!ex © (2007-11-23 16:31) [16]> [15] DVM © (23.11.07 16:28)
И что это значит?
← →
J_f_S (2007-11-23 16:33) [17]
> Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> элементы. Стоит там begin или не вполне видно по следующей
> строке, если взять за правило всегда ставить перенос строки
> и деать отступ после begin.
Вот экономить на символах перевода строк и пробелах не надо точно. Читаемость текста повышается в разы.
← →
clickmaker © (2007-11-23 16:35) [18]C vs Delphi
if (true)
{
}
if true then
begin
end
или
if (true) {
}
if true then begin
end
← →
DVM © (2007-11-23 16:37) [19]
> @!!ex © (23.11.07 16:31) [16]
> И что это значит?
Это значит, что begin ставят с новой строки. Лучше придерживаться традиций.
← →
J_f_S (2007-11-23 16:39) [20]Не в обиду, но код из 0 действительно напоминает "код" студента из среднестатистического ВУЗа...
Граммитические ошибки в английских словах, транслит (это жесть), экономия на пробелах и переодах строк, несколько опереаторов в одной строке, отсутствие комментариев, имена вспомогательных переменных типа a,b,c...
← →
Anatoly Podgoretsky © (2007-11-23 16:40) [21]> @!!ex (23.11.2007 16:16:14) [14]
Чего рассказывать то?
Я пишу на одной строке с if что бы получить структуру
if ... then begin
..
else begin
..
end"
Но могу написать и
if ... then
begin
..
end;
Если будут требования, то буду писать по требованиям.
← →
@!!ex © (2007-11-23 16:40) [22]> [19] DVM © (23.11.07 16:37)
Традиции везде разные.
← →
J_f_S (2007-11-23 16:40) [23]Граммитические = Грамматические
;)
← →
Kolan © (2007-11-23 16:41) [24]> Интересно было бы услышать комменты по этому коду:
Полное гэ. (одно название че стоит), такое лучьше никому не показывать, элеметарные ошибки из прошлой ветки мог бы и исправить…
← →
DVM © (2007-11-23 16:41) [25]
> Традиции везде разные.
это понятно, но, думаю никто не будет против, если твой код будет подражать во всем VCL.
← →
@!!ex © (2007-11-23 16:43) [26]Итак. Собственно почему я создал вторую тему с кодом.
Я подрабатываю репетитором информатики. Преподаю в основном всякую начальную ерунду, тем кто совсем не в теме.
После разборов в теме "Оцените код" у меня появились большие сомнения в том, что я имею право кому то что-то преподавать...
Код приведенный в данной теме - написано официальным ПРЕПОДАВАТЕЛЕМ ВУЗа, причем ВУЗа выдающего дипломы международного образца...
← →
homm © (2007-11-23 16:44) [27]> [17] J_f_S (23.11.07 16:33)
> Вот экономить на символах перевода строк и пробелах не надо
> точно. Читаемость текста повышается в разы.
Я не предлагаю экономить, я говорю «не раздувать бесдумно» разница есть.
> [19] DVM © (23.11.07 16:37)
> Лучше придерживаться традиций.
Жертвоприношение знаем? тоже лучше?
> [25] DVM © (23.11.07 16:41)
> это понятно, но, думаю никто не будет против, если твой
> код будет подражать во всем VCL.
Предлагаю подрожать во всем, кроме этого ;)
← →
Германн © (2007-11-23 16:45) [28]
> Anatoly Podgoretsky © (23.11.07 16:02) [12]
А вот так пишу я:
adr:=o2;bdc;wrc:=$84;ind2;
if(scala=1) then begin
adr:=co*10;adr:=adr div 8;
end else adr:=co;
bdc;wrc:=$8f;ind1;
adr:=co2;bdc;wrc:=$c4;ind2;
:)))
← →
DVM © (2007-11-23 16:45) [29]
> @!!ex © (23.11.07 16:43) [26]
печально
← →
Dennis I. Komarov © (2007-11-23 16:46) [30]> [21] Anatoly Podgoretsky © (23.11.07 16:40)
+1
← →
homm © (2007-11-23 16:46) [31]> [28] Германн © (23.11.07 16:45)
> А вот так пишу я:
Это вырезка из скомпилиного экзешника? Нет? А похожа %)
← →
Германн © (2007-11-23 16:49) [32]
> Это вырезка из скомпилиного экзешника?
Да.
← →
DVM © (2007-11-23 16:49) [33]
> Германн © (23.11.07 16:45) [28]
Так не лучше?
Adr := o2;
Bdc;
Wrc := $84;
Ind2;
if Scala = 1 then
begin
Adr := co * 10;
Adr := Adr div 8;
end
else
Adr := co;
Bdc;
Wrc := $8f;
Ind1;
Adr := co2;
Bdc;
Wrc := $c4;
Ind2;
← →
DVM © (2007-11-23 16:50) [34]
> Это вырезка из скомпилиного экзешника?
это скриншот окна скомпиленного экзешника кверху ногами.
← →
Kolan © (2007-11-23 16:50) [35]> Код приведенный в данной теме — написано официальным ПРЕПОДАВАТЕЛЕМ
> ВУЗа, причем ВУЗа выдающего дипломы международного образца…
Ну и че, все преподы что я знал так пишут, они не профессионалы, это как семинар Лебедева/Горбунова и пребод по дизайну в универе разница огромна.
← →
Германн © (2007-11-23 16:58) [36]
> DVM © (23.11.07 16:49) [33]
>
>
> > Германн © (23.11.07 16:45) [28]
>
>
> Так не лучше?
>
Неа.
А знаешь какая жаба меня душила, когда я делал отступ после в блоке begin end?
← →
Anatoly Podgoretsky © (2007-11-23 17:00) [37]> @!!ex (23.11.2007 16:43:26) [26]
Международного образца - то есть печать.
← →
Anatoly Podgoretsky © (2007-11-23 17:01) [38]> Германн (23.11.2007 16:45:28) [28]
Жалко, столько строчек испортил, не мог обойтись одной?
← →
Германн © (2007-11-23 17:04) [39]
> Anatoly Podgoretsky © (23.11.07 17:01) [38]
Не мог. Все-таки хоть как-то нужно это читать.
:-)
Но мой вариант таки на 30 лучше, чем вариант [33].
← →
Anatoly Podgoretsky © (2007-11-23 19:05) [40]> Германн (23.11.2007 16:58:36) [36]
Пробелы было жалко?
← →
Германн © (2007-11-23 19:08) [41]
> Anatoly Podgoretsky © (23.11.07 19:05) [40]
Нет. Байты было жалко. Компилятор зараза не переваривает pas-файлы более 32К
← →
J_f_S (2007-11-23 19:16) [42]
> Нет. Байты было жалко. Компилятор зараза не переваривает
> pas-файлы более 32К
Это какой-то Паскаль для embedded устройств? :)
← →
Германн © (2007-11-23 19:20) [43]
> J_f_S (23.11.07 19:16) [42]
Для 51-го процессора.
:-)
← →
Dmitry S(1) (2007-11-23 20:18) [44]Блин, после создания собственного c-подобного скрипта со всеми операторами pre-post incremement/decrement, указателями, статементами for, switch и тп, генерации кода, от дельфи блевать охота :) После visual assist для visual net - ставишь { скобку(shift + "["), а тебе сразу ставят "}" с верным переносом на следующей сторке ваш begin-end - просто ха-ха. Бедные убогие дельфисты с комплексом неполноценности. На форуме C++ дельфи не обсуждается, только на вашем форуме поливают грязью с++. Все как в жизни.
← →
turbouser © (2007-11-23 20:28) [45]
> Dmitry S(1) (23.11.07 20:18) [44]
Спасибо. Поржал. :))
Пеши исчо.
← →
DVM © (2007-11-23 20:37) [46]
> После visual assist для visual net - ставишь { скобку(shift
> + "["), а тебе сразу ставят "}" с верным переносом на следующей
> сторке ваш begin-end
Вы давно делфи видели? Поглядите, например, D2007.
> На форуме C++ дельфи не обсуждается, только на вашем форуме
> поливают грязью с++
Там просто никто не знает его. Как показывает практика, программисты на делфи в большинстве своем владеют и си и делфи. Те кто программирует исключительно на си в большинстве своем о делфи вообще не имеют представления. Как они могут чего то сравнивать там.
← →
Efir (2007-11-23 20:55) [47]
> Dmitry S(1) (23.11.07 20:18) [44]
А что ж ты здесь тогда забыл?
← →
@!!ex © (2007-11-23 20:56) [48]> [44] Dmitry S(1) (23.11.07 20:18)
Ага. Сишники приходят похоливарить сюда. ;)
← →
Anatoly Podgoretsky © (2007-11-23 20:58) [49]> @!!ex (23.11.2007 20:56:48) [48]
Только плохо у них выходит на нашей площадке.
← →
isasa © (2007-11-23 21:49) [50]Взрослые люди, в некоторых местах, профессионалы, блин ...
Ну кому какая разница, ка он обозвал переменную. Ограничения - корпоративные правила, исключения - венгерская нотация(мужик дико удивил самоорганизованностью). С приходом ООП пиши, что поле значит своими словами ...
Кстати, уже можно и по русски ...
← →
@!!ex © (2007-11-23 21:51) [51]> [50] isasa © (23.11.07 21:49)
я не понял...
← →
isasa © (2007-11-23 22:03) [52]:)
Проехали ...
Качество кода определяется нк названиями переменных и т.д, а качеством использования ресерсов среды, в которой написан код.
Например, длинное наследование, или большое количество потомков - плохо(это с точки зрения MS), или использование оператора case (что меня изумило, добезобразия), много if в завершенном модуле ...
← →
Anatoly Podgoretsky © (2007-11-23 22:04) [53]> @!!ex (23.11.2007 21:51:51) [51]
Он имел ввиду последние версии Дельфи, там переменные можно называть на родном языке, единственный недостаток регистрозависимо. Можно написать - ДельтаВремени := ...
← →
@!!ex © (2007-11-23 22:14) [54]> [53] Anatoly Podgoretsky © (23.11.07 22:04)
Да как раз про русский я понял, не понял к чему сказано все остальное. к моему коду или просто абстрактно.
← →
isasa © (2007-11-23 22:17) [55]@!!ex © (23.11.07 22:14) [54]
абстрактно
← →
isasa © (2007-11-23 22:19) [56]Зы. Это, все равно, что обсуждать почерк человека. Ошибки, или нерациональность - обсуждаемы. Остальное - холивар.
← →
Anatoly Podgoretsky © (2007-11-23 22:20) [57]> @!!ex (23.11.2007 22:14:54) [54]
Перпердикулярно.
← →
isasa © (2007-11-23 22:24) [58]Anatoly Podgoretsky © (23.11.07 22:20) [57]
Не, нельзя так, меня, в принципе, и первая ветка заинтересовала, но работа, будь она ладна, задрала ...
Боюсь затюкают "доброжелатели" простую душу ... :)
← →
Anatoly Podgoretsky © (2007-11-23 22:28) [59]Ну да, можешь таааааааакой холивар разжечь.
← →
isasa © (2007-11-23 22:30) [60]Чукча не писатель, чукча читатель ...
ОтписАлся ..
← →
Германн © (2007-11-24 01:02) [61]
> DrPass © (23.11.07 15:20) [10]
>
> ...и еще пора избавляться от дурацкой студенческой привычки
> писать begin в той же строке, что и предыдущий оператор
>
Весьма "апломбное" утверждение. Некогда было днём заниматься архивами, поэтому промолчал. Сейчас время нашел. Не знаю сколько тебе лет, но сей стиль, который ты ругаешь появился очень давно. И не у студентов.
Например именно в этом стиле написана библиотека Turbo Professional. Кто хорошо помнит времена ДОСа и ТР5, тот хорошо знает эту библиотеку. Собственно тот, кто писАл тогда программы на Паскале только её и использовал (если, конечно не был дураком).
Идём дальше. Широко известная и очень популярная (и в добавок очень полезная всем новичкам) RxLibrary тоже использует такой стиль.
> DVM © (23.11.07 16:28) [15]
>
>
> > Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> > элементы.
>
> В VCL везде с новой строки ставят.
>
Не везде. В VCL Д4 есть 5 иных примеров. (Кстати я искал только then begin). В VCL Д6 - 32.
Но действительно - это скорее исключения из правил.
> DVM © (23.11.07 16:37) [19]
>
>
> > @!!ex © (23.11.07 16:31) [16]
>
>
> > И что это значит?
>
> Это значит, что begin ставят с новой строки. Лучше придерживаться
> традиций.
>
Лично для меня "традиция" - это Turbo Professional, с которого я и начинал.
← →
Pavia © (2007-11-24 02:16) [62]Пишу всегда так
if True then
begin
end;
что бы для begin и end отступы совпадали. Тогда легко отследить где какой блок кончается где начинается следующий блок.
← →
Германн © (2007-11-24 02:21) [63]
> Pavia © (24.11.07 02:16) [62]
>
> Пишу всегда так
>
> if True then
> begin
> end;
>
> что бы для begin и end отступы совпадали. Тогда легко отследить
> где какой блок кончается где начинается следующий блок.
>
И что?
← →
homm © (2007-11-24 07:21) [64]Пишу всегда так
if True then begin
Code := Sode;
inc(Pode);
Dec(Mode);
end;
что-бы были верные выравнивания текста. Тогда легко отследить где какой блок кончается где начинается следующий блок.
Я что-то не так делаю?
← →
Dmitry S © (2007-11-24 08:03) [65]Раньше писал так
if True then begin
Code := Sode;
inc(Pode);
Dec(Mode);
end;
Но с недавнего время пишу всегда так:if True then
begin
Code := Sode;
inc(Pode);
Dec(Mode);
end;
И вроде как лучше стало:)
← →
isasa © (2007-11-24 09:12) [66]Германн © (24.11.07 01:02) [61]
:)
Подтверждаю. Вот образец и того кода.
По качеству продукта видно, что писали серъезные дядьки и тетки.
{*********************************************************}
{* TPCMD.PAS 5.05 *}
{* Copyright (c) TurboPower Software 1987. *}
{* Portions copyright (c) Sunny Hill Software 1985, 1986 *}
{* and used under license to TurboPower Software *}
{* All rights reserved. *}
{*********************************************************}
unit TpCmd;
{-Convert keystrokes to commands. This unit is intended primarily for
internal use.}
...
function ScanCommands(K : KeyArrayPtr;
var CmdBuffer : CmdBuffArray;
BufNext : Word;
var Cmd : Byte;
var FoundAt : Word) : MatchType;
{-Scan K^ for a match on CmdBuffer}
var
BufIndex : Word;
CmdIndex : Word;
CmdLen : Byte;
Matching : Boolean;
begin
Cmd := NoCmd;
CmdIndex := 0;
CmdLen := K^[CmdIndex];
{Scan the command list}
while CmdLen <> 0 do begin
FoundAt := CmdIndex;
Inc(CmdIndex);
BufIndex := 0;
Matching := True;
while Matching and (BufIndex < BufNext) and (BufIndex < CmdLen-1) do
if CmdBuffer[BufIndex] = K^[CmdIndex+BufIndex] then
Inc(BufIndex)
else
Matching := False;
if not Matching then begin
{No match, try next command}
Inc(CmdIndex, CmdLen);
CmdLen := K^[CmdIndex];
end else begin
if BufNext = CmdLen-1 then begin
{Complete match}
ScanCommands := FullMatch;
Cmd := K^[CmdIndex+BufIndex];
end else
ScanCommands := PartMatch;
Exit;
end;
end;
{No match if we get here}
ScanCommands := NoMatch;
end;
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.043 c