Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизПо каким моментам кода вы понимаете - профи или так... ? Найти похожие ветки
← →
Кудесник © (2004-12-21 10:30) [0]сабж...
← →
Игорь Шевченко © (2004-12-21 10:31) [1]Опыт...
← →
y-soft © (2004-12-21 10:32) [2]По каким моментам текста вы отличаете классический роман от школьного сочинения? :)
← →
Суслик © (2004-12-21 10:32) [3]конкретный код есть всего лишь необходимое условие профи...
← →
Gero © (2004-12-21 10:35) [4]Новичок никогда не назовет функцию IncludeTrailingPathDelimiter.
← →
Игорь Шевченко © (2004-12-21 10:39) [5]Gero © (21.12.04 10:35) [4]
И тем более RtlActivateActivationContextUnsafeFast или
ExWaitForRundownProtectionReleaseCacheAware :)
С уважением,
← →
Суслик © (2004-12-21 10:41) [6]
> И тем более RtlActivateActivationContextUnsafeFast или
> ExWaitForRundownProtectionReleaseCacheAware :)
Я вот, этих функций не знаю :)
Но если бы мне про них рассказал Игорь Шевченко, то я обязательно бы вставил их в свой код и тут же стал профи. :)
← →
antonn © (2004-12-21 10:42) [7]А если чел Лабелы обзывает так: L_CAPTION_VISION и тп?
Кстати, а как можно сменить стандартные названия компонент? Чтобы вместо Button1 было B_1.
← →
y-soft © (2004-12-21 10:49) [8]Разница в самом подходе к написанию приложения...
Профи всегда идет от задачи. Код для него не самоцель, а средство реализации. Он всегда знает что и для чего делает. Отсюда - лаконичность и логичность кода - ничего лишнего, но одновременно предусматриваются такие вещи, о которых новичок даже не задумывается...
У хорошего профи в коде виден свой неповторимый почерк, ход мысли...
← →
Sandman25 © (2004-12-21 10:49) [9][7] antonn © (21.12.04 10:42)
Кстати, а как можно сменить стандартные названия компонент? Чтобы вместо Button1 было B_
GExperts for Delphi. У меня кнопки сразу принимают название btN, остается только N заменить на осмысленный текст, префикс уже есть :)
← →
vecna © (2004-12-21 11:07) [10]профи - относительное понятие, в том коллективе, где тебя считают/не считаю профи это определяется качеством задаваемых вопросов и пермонентностью консультаций...
← →
y-soft © (2004-12-21 11:11) [11]Неопытный программист и пишет слепо.
Код его представляет из себя коктейль из шаблонных кусков, чужих рецептов и результатов собственных эмпирических изысканий ("плясок с бубном") :)
← →
Sandman25 © (2004-12-21 11:26) [12]У опытного программиста меньше операторов case и нет конструкций типа:
case (Sender as TBitBtn).Tag of
0: DoSomeThing(3);
1: DoSomeThing(5);
2: DoAnotherThing();
end;
Do(...);
← →
Fay © (2004-12-21 11:29) [13]2 Sandman25 © (21.12.04 11:26) [12]
Очень странное наблюдение. Мопоподробнее?
← →
Johnmen © (2004-12-21 11:30) [14]"Меньше кода, больше дела" (с) из баннера
← →
Sandman25 © (2004-12-21 11:32) [15][13] Fay © (21.12.04 11:29)
Неопытные программисты не понимают, что вместо case часто эффективнее использовать полиморфизм, а вместо одного обработчика нескольких разных кнопок следует использовать несколько разных обработчиков.
← →
Fay © (2004-12-21 11:35) [16]2 Sandman25 © (21.12.04 11:32) [15]
Мне не очевидно, что
1) DoAnotherThing - метод
2) case имеет отношение с полиморфизму и кнопкам
← →
Sandman25 © (2004-12-21 11:41) [17][16] Fay © (21.12.04 11:35)
1)Пример был не про полиморфизм, а про искусственное самоограничение на количество обработчиков. В чужом коде видел даже такой ужас:procedure ...Click(Sender: TObject);
begin
if Sender = Button1 then
begin
...
end
else
if Sender = Button2 then
begin
...
end
end;
2) Неопытные часто используют поле в качестве варианта case.
← →
TUser © (2004-12-21 11:46) [18]
> В чужом коде видел даже такой ужас
А что тут ужасного?
По сабжу - в хорошем коде фенкции занимают не более одной печатной страницы. Все что больше - разбивается на несколько процедур/функций. Исключение м.б. сделано только для большого кол-ва однотипных строк, чего (кстати) следует избегать. Хороший код не пишется методом копи-паст (в прямом и переносном смысле).
← →
Fay © (2004-12-21 11:47) [19]2 Sandman25 © (21.12.04 11:41) [17]
Да ладно, код не очень страшный, хотя и несколько странный 8)
Я вот с превеликим презрением отношусь к коду видаwhile чё-то do
begin
...
... Нечто.FieldByName("ИмяПоля").КакаяТоФигня ... ;
...
end;
Но знаю, что некоторые уважаемые мною мастера (со значками) так пишут, причём упорно. Видимо моё отношение и такому коду неявляется критерием мастерства 8)
← →
Val © (2004-12-21 11:48) [20]>[18] TUser © (21.12.04 11:46)
По поводу копи-паст - а вот та жуть, про которую написал Игорь Шевченко, обязательна к набору руками? :)
← →
Sandman25 © (2004-12-21 11:48) [21][18] TUser © (21.12.04 11:46)
А что тут ужасного?
Следовало сделать 2 разных обработчика.
← →
Val © (2004-12-21 11:50) [22]>[19] Fay © (21.12.04 11:47)
не поясните, что вас там так смущает ?
← →
Fay © (2004-12-21 11:50) [23]2 Sandman25 © (21.12.04 11:48) [21]
IMHO, такая необходимость не совсем очевидна.
← →
Sandman25 © (2004-12-21 11:51) [24][19] Fay © (21.12.04 11:47)
Вы про объявление переменных типа T...Field и присвоение им значений до цикла?
Или про использование persistent полей?
← →
Fay © (2004-12-21 11:52) [25]2 Val © (21.12.04 11:50) [22]
Зачем вычислять поле в цикле?
← →
TUser © (2004-12-21 11:52) [26]
> Fay ©
> Sandman25 ©
У каждого свои причуды. Я вот тут уже несколько раз нагоняй получал за function rAny: TAnyType (типа - читаю так проперти). Что поделать, что это r мне привычнее, чем Get.
← →
Sandman25 © (2004-12-21 11:56) [27][23] Fay © (21.12.04 11:50)
Не знаю, что и ответить. Разве что довести идею до абсурда и отказаться от всех обработчиков, всё управление программой поместив в ApplicationEvents.OnMessage.
А как же структурность?
← →
Суслик © (2004-12-21 11:58) [28]флейм похуже прочих
← →
Val © (2004-12-21 11:58) [29]>[25] Fay © (21.12.04 11:52)
Ну, например, я вижу - что это за поле, смотря на код. Мне не нужны статические поля - запрос создался и умер.
Можно ваш вариант и аргументы?
← →
antonn © (2004-12-21 11:59) [30]А чего плохово в Копипасте? Вот я "тренируюсь на левом проекте", если получается я готовый код вставляю в рабочий проект. И далее этот "левый" проект пригодится, зачем все время изобратать велосипед? Ну пару раз изобрели и хватит. ИМХО
← →
Johnmen © (2004-12-21 12:01) [31]>Fay © (21.12.04 11:52) [25]
>Зачем вычислять поле в цикле?
Это про FieldByName ?
Тогда Val © (21.12.04 11:58) [29]
+ если порядок полей изменился в силу каких-то причин, то переделка кода...
← →
07BB:080Dh (2004-12-21 12:01) [32]Sandman25 © (21.12.04 11:41) [17]
чем вас не устроил код?
← →
Sandman25 © (2004-12-21 12:01) [33][29] Val © (21.12.04 11:58)
var
MyField, AnotherField: TField;
begin
with DataSet do
begin
MyField := FieldByName("my_field");
AnotherField := FieldByName("another_field");
while not Eof do
begin
...
MyField.AsInteger := AnotherField.AsInteger + ...
...
end;
end;
end;
← →
WondeRu © (2004-12-21 12:02) [34]Sandman25 © (21.12.04 11:26) [12]
case (Sender as TBitBtn).Tag of
0: DoSomeThing(3);
1: DoSomeThing(5);
2: DoAnotherThing();
end;
Do(...);
только что сделал очень похожую конструкцию: есть 20 менюшек, которые создают 20 разных объектов, унаследованных от общего интерфейса IXXXXXInterface. Зачем мне делать 20 обработчиков, если могу создать в каждом кейсе объект IXXXXXInterface, а дальше менять параметры тока у IXXXXXInterface????
← →
Fay © (2004-12-21 12:02) [35]2 Val © (21.12.04 11:58) [29]
Так сильно хуже?var
fldИмяПоля : TField;
begin
...
fldИмяПоля := Нечто.FieldByName("ИмяПоля");
while чё-то do
begin
...
... fldИмяПоля.КакаяТоФигня ... ;
...
end;
...
end;
← →
msguns © (2004-12-21 12:03) [36]>Игорь Шевченко © (21.12.04 10:39) [5]
>И тем более RtlActivateActivationContextUnsafeFast или
ExWaitForRundownProtectionReleaseCacheAware :)
Когда-то в детстве увлекался шахматами. В секции был один орел - большой любитель мата Лаваля. И всегда его пытался поставить. Короче, считался среди нас, четырех-пятиклашек, крутым перцем. Потому что на всех турнирах выигрывал быстро и всегда.
Пока однажды оппонент не сделал первого хода E7-E5.. В общем, перец продул ту партию.. И следующую. Авторитет еще какое-то время держался, но чувак так и не перестроился... В итоге через пару месяцев из секции ушел ;))
← →
Суслик © (2004-12-21 12:04) [37]
> [36] msguns © (21.12.04 12:03)
:-))))
← →
Sandman25 © (2004-12-21 12:07) [38][32] 07BB:080Dh (21.12.04 12:01)
Тем, что он неверен с точки зрения логики и выполняется медленнее.
[34] WondeRu © (21.12.04 12:02)
Весь обработчик может заключаться в
ObjectsProperty[TComponent(Sender).Tag].Create,
где property ObjectsProperty[Index: Integer] read GetObjectsProperty
или еще лучше
ObjectsProperty[GetObjectIndexByComponent(Sender)].Create,
или еще лучше
ObjectByComponentFunction(Sender).Create,
← →
Sandman25 © (2004-12-21 12:10) [39][34] WondeRu © (21.12.04 12:02)
Иначе говоря, не стоит делать интерфейс пользователя и интерфейс объекта зависисмыми друг от друга.
← →
Johnmen © (2004-12-21 12:10) [40]>Fay © (21.12.04 12:02) [35]
А в чем фишка ? В чем глубина/хорошесть/etc ?
Страницы: 1 2 3 4 5 6 7 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.039 c