Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.083 c
1-1104748480
Roobee
2005-01-03 13:34
2005.01.16
TParser - как побороть?


4-1101666645
Davinchi
2004-11-28 21:30
2005.01.16
Как послать на СОМ порт несколько команд модему


14-1103896711
Тимур
2004-12-24 16:58
2005.01.16
Железо - хелп!


9-1096632596
Xenon
2004-10-01 16:09
2005.01.16
Вопрос про игры


1-1104391214
MgFox
2004-12-30 10:20
2005.01.16
Хрень с интерфейсом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский