Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКоварный With Найти похожие ветки
← →
Palladin © (2006-08-28 16:16) [0]позорище... так для прикола :)
With TMASSqlSource.Create(gl_theCon),GridKidsInTable.DataController Do
Try
n:=AppendRecord;
Select("select date_birth, gender from People where id="+IntToStr(nIDHuman));
Values[n,KIColLastName.Index]:=strLastName;
Values[n,KIColFirstName.Index]:=strFirstName;
Values[n,KIColMidName.Index]:=strMidName;
Values[n,KIColBirthDate.Index]:=cmnDate(DatFld[0,1]);
Values[n,KIColGender.Index]:=cmnGenderToStr(IntFld[0,2]);
Values[n,KIColIsNew.Index]:="";
Values[n,KIColIDHuman.Index]:=nIDHuman;
Finally
Free;
End;
пол дня угробил на поиск ошибки... чудовище... :)
← →
jack128 © (2006-08-28 16:20) [1]Palladin © (28.08.06 16:16)
позорище...
Угу ;-) Я сразу увидел. Хотя наверно только потому что ТОЧНО знал, что здесь есть ошибка.
← →
guav © (2006-08-28 16:22) [2]:)
А я тут пытаюсь С++ учить... не пониммаю за что его ругают.
Там такая ошибка впринципе невозможна, т.к. with нет и finally с free неявный
← →
Александр Иванов © (2006-08-28 16:23) [3]У меня как-то в конструкции:
with TForm.Create(nil) do
begin
...
if ShowModal = mrOk then
...
end;
происходило обращение к ShowModal формы в методе которой мы находимся.
Стараюсь этот оператор не использовать вообще.
← →
TUser © (2006-08-28 16:23) [4]> Там такая ошибка впринципе невозможна, т.к. finally с free неявный
AFAIK ты с шарпом перепутал.
Зы. Я не сишник :)
← →
jack128 © (2006-08-28 16:24) [5]guav © (28.08.06 16:22) [2]
Там такая ошибка впринципе невозможна,
сколько раз на "if (a=b)" напарывался? Я из-за этого руть монитор выкинул
← →
guav © (2006-08-28 16:27) [6]> сколько раз на "if (a=b)" напарывался?
Пока один, (в цикле while) но у меня ещё всё впереди ;-)
Видел рекомендацию сравнивать с константой так INVALID_HANDLE_VALUE == hFile.
← →
guav © (2006-08-28 16:28) [7]> AFAIK ты с шарпом перепутал.
Нет. В шарпе вроде finally есть, как и в Managed C++ .
Я не сишник - пока ещё.
← →
jack128 © (2006-08-28 16:38) [8]guav © (28.08.06 16:28) [7]
в обычном (не управляемом) C++ в реализации MS тоже есть. Но это не стандарт.
← →
guav © (2006-08-28 16:45) [9][8] jack128 © (28.08.06 16:38)
Ну, в реализации MS виндовый SEH реализован в более полной мере чем в Delphi, это понятно.
Меня сейчас больше интересует стандартный umanaged C++. Впрочем, заканчиваю оффтопик.
← →
Desdechado © (2006-08-28 19:10) [10]> With TMASSqlSource.Create(gl_theCon)
,
GridKidsInTable.DataController Do
Никогда не использую with с более, чем одним объектом сразу. Выбираю только один (самый длинно названный или часто используемый в блоке), а остальные явно.
← →
Ketmar © (2006-08-28 20:58) [11]> [2] guav © (28.08.06 16:22)
разруха -- она в головах.
← →
guav © (2006-08-28 21:06) [12]> [11] Ketmar © (28.08.06 20:58)
не понял.
← →
default © (2006-08-28 21:14) [13]guav © (28.08.06 16:27) [6]
"Иногда встречается С-программист, пишущий что-то типа if((strlen(x)==iLen)), помещая константное выражение слева от ==. Это очень хороший признак. Это значит, что он уже столько раз попадался на путанице между = и ==, что выработал в себе привычку, исключающую это. " Джоэль Спольски :)
guav © (28.08.06 16:22) [2]
а я вот C# изучаю
кстати в нём проблема (a=b) стоит не так остро ибо результат обязан быть либо true либо false
то есть
int a=3, b=5;
if (a=b) будет ошибка компиляции
← →
default © (2006-08-28 21:20) [14]"то есть
int a=3, b=5;
if (a=b) будет ошибка компиляции"
ибо результат a=b будет 5, а это не true и не false и к ним не приводится ни неявно ни явно по правилам языка
← →
guav © (2006-08-28 21:25) [15]> результат обязан быть либо true либо false
Ух ты, как в Delphi для Boolean :)
А что тогда с виндоузными FALSE, TRUE ?
← →
Ketmar © (2006-08-28 21:30) [16]> [12] guav © (28.08.06 21:06)
а что тут неясного? молотком можно забить гвоздь в стену, а можно проломить голову соседу дяде Абраму.
← →
DiamondShark © (2006-08-28 21:48) [17]
> А я тут пытаюсь С++ учить... не пониммаю за что его ругают.
> Пока один, (в цикле while) но у меня ещё всё впереди ;-)
И до сих пор не понял, за что ругают?
Тогда, записывай список:
0. За возведение побочного эффекта в норму.
Операция присваивания должна присваивать, а не возвращать значение.
1. За непродуманый выбор символики.
Логический предикат "равно" имеет устоявшийся традиционно символ "=", известный людям с первого класса школы. Оператор присваивания специфичен именно для императивных языков. Логично оставить для сравнения традиционный символ, а для новой операции использовать новый символ.
...ту би континуе...
← →
Ketmar © (2006-08-28 21:58) [18]> [17] DiamondShark © (28.08.06 21:48)
не надо. баян. %-)
← →
DiamondShark © (2006-08-28 22:12) [19]А может меня это беспокоит. Хочу об этом погойворить.
← →
guav © (2006-08-28 22:17) [20]> не надо. баян. %-)
"with - источник ошибок" таки тоже баян.
И что, после этого людям высказаться на эти темы нельзя ?
← →
Ketmar © (2006-08-28 22:21) [21]> [19] DiamondShark © (28.08.06 22:12)
Вы-таки боитесь погромов?
> [20] guav © (28.08.06 22:17)
АПВС?
зыж Дим, ну не провоцируй. меня же забанят! %-)
← →
DiamondShark © (2006-08-28 22:22) [22]
> И что, после этого людям высказаться на эти темы нельзя
> ?
Льзя.
Обычно получается славный холиворчег или душевная философия ;)
И то и другое я очень люблю (не ахт.).
← →
DiamondShark © (2006-08-28 22:24) [23]
> меня же забанят
"Сядем усе!" (ц)
← →
default © (2006-08-28 22:28) [24]guav © (28.08.06 21:25) [15]
а что с ними должно быть не так?
← →
Alx2 © (2006-08-28 22:34) [25]>DiamondShark © (28.08.06 21:48)
Перечисленное, кажется, не особо критично.
Мне, когда начинал, сильно нехватало вложенных функций. Как правило, чем "алгоритмичнее" задачка, тем больше потребность в функциональной подразбивке. Потом, правда, нашел сему замену вложенными классами. Но дискомфорт имеет место до сих пор.
← →
default © (2006-08-28 22:41) [26]DiamondShark © (28.08.06 21:48) [17]
тут двояко
например, мы можем спросить "a=b?" в данном случае производится сравнение
а можем написать, "положим a=5" понимая это как то, что в дальнейшем под буквой "a" будем иметь цифру "5" это можно считать присвоением, но никак не сравнением
поэтому спорно для чего "=" лучше - для присвоения или проверки на равенство
← →
DiamondShark © (2006-08-28 22:46) [27]
> Перечисленное, кажется, не особо критично.
Так это только по одному эпизоду: "наткнулся в while".
> Мне, когда начинал, сильно нехватало вложенных функций
А как мне их сейчас не хватает!
Пишу на C#, тихо ругаюсь.
Я за паскалевское прошлое привык сверху-вниз писать, сначала крупными блоками, потом постепенно детализируя. Так замечательно это на вложенные функции ложилось...
← →
Ketmar © (2006-08-28 22:51) [28]> [26] default © (28.08.06 22:41)
а ни для чего. так и надо писать: "положим ..."
← →
default © (2006-08-28 23:09) [29]DiamondShark © (28.08.06 22:46) [27]
сорри за оффтопик
говорите, что пишите на C#
говорится, что .NET код может быть переносим между ОС
это как? ведь, допустим, программируя для ОС Windows я могу оперировать понятием "окно"(представленного некоторым типом), а ведь в другой ОС может быть всё совершенно по-другому, там и понятия "окно" то может и не быть или быть, но другим по смыслу
как вообще возможно писать операционно-независимый код в общем случае?
по-моему это невозможно
даже если "понятия" в разных ОС совпадают или близки, можно писать только один код для этих ОС
но появится другая с другими "понятиями" и код нужно будет переписывать
хотя обещают, что мол написанный вами код будет работать и на другой ОС для которой напишут свою CLR
объясните
← →
Карелин Артем © (2006-08-28 23:20) [30]
> default © (28.08.06 23:09) [29]
Жаву вспомни. Там тоже кросс-платформенность
← →
default © (2006-08-28 23:22) [31]Карелин Артем © (28.08.06 23:20) [30]
а как это работает?
не понимаю
← →
Marser © (2006-08-28 23:23) [32]> 1. За непродуманый выбор символики.
> Логический предикат "равно" имеет устоявшийся традиционно
> символ "=", известный людям с первого класса школы. Оператор
> присваивания специфичен именно для императивных языков.
> Логично оставить для сравнения традиционный символ, а для
> новой операции использовать новый символ.
Согласен.
← →
guav © (2006-08-28 23:30) [33]> guav © (28.08.06 21:25) [15]
> а что с ними должно быть не так?
Они вроде как не bool а целочисленны, д.б. несовместимы дляif, fo,r while, do
и? :
, при этом проверка if (ApiCall() == TRUE) тоже опасна.
> Я за паскалевское прошлое привык сверху-вниз писать, сначала
> крупными блоками, потом постепенно детализируя. Так замечательно
> это на вложенные функции ложилось...
Помойму, классами можно, они вроде как бы влаживаются...
В продолжение оффтопика :
Не понравилось мне как структуры инициализируются без указания имён полей. подумав, решил что зря и в С и в Паскале не указываются имена формальных параметров, типаCreateCompatibleBitmap(DC: hRefDC, Width: 0, Height: 0);
← →
isasa © (2006-08-28 23:34) [34]default © (28.08.06 23:22) [31]
а как это работает?
Интерпретатор, знаешь? :)
← →
Ketmar © (2006-08-28 23:36) [35]> [29] default © (28.08.06 23:09)
оно переносимо между ОС WinXP на одной машине и ОС WinXP на другой машине.
← →
default © (2006-08-28 23:41) [36]Ketmar © (28.08.06 23:36) [35]
имеешь ввиду процессорную независимость?
я говорю о независимости от ОС
isasa © (28.08.06 23:34) [34]
можно подробнее
← →
isasa © (2006-08-28 23:42) [37]Ketmar © (28.08.06 23:36) [35]
оно переносимо между ОС WinXP на одной машине и ОС WinXP на другой машине.
:)
Заявлено еще и "кроссязыковость". Ну, по крайней мере, между MS C# и MS VB
← →
Vendict © (2006-08-28 23:43) [38]default © (28.08.06 23:41) [36]
имеешь ввиду процессорную независимость?
я говорю о независимости от ОС
тяжело... шуток человек не понимает...
← →
isasa © (2006-08-28 23:44) [39]default © (28.08.06 23:41) [36]
можно подробнее
:)
Ну ей Богу, вот я уже книги точно писать не умею. :)
Там много наворочено.
← →
Ketmar © (2006-08-28 23:45) [40]> [36] default © (28.08.06 23:41)
имею в виду, что полноценной реализации CLR нет нигде, кроме как на винде. поэтому оно переносимо только с виндов на винды. и то не ниже 2k, по-моему. %-))
← →
Суслик © (2006-08-28 23:47) [41]что плохого присвоить результат create коротенькой переменной и потом его юзать? зато дебагер и codeinsite не глючат.
← →
default © (2006-08-28 23:47) [42]isasa © (28.08.06 23:44) [39]
так что есть гарантия, что код написанный для группы ОС не придётся переписывать для ОС которая появится лет эдак через 7?
← →
default © (2006-08-28 23:51) [43]Ketmar © (28.08.06 23:45) [40]
"Важно отметить, что .Net Framework не ограничена платформой Windows и написанные для этой платформы программы могут быть в будущем перенесены на другие платформы"
значит это всё полное фуфло? точнее есть лишь вероятность небычайно близкая к нуля подобного свершится
← →
isasa © (2006-08-28 23:52) [44]default © (28.08.06 23:47) [42]
так что есть гарантия,
Тольео от MS, и то, очень вялая. Причем они не гарантируют, что через 7 лет они не сделают с .NET то, что сейчас делают с COM/COM+
← →
jack128 © (2006-08-28 23:55) [45]default © (28.08.06 23:47) [42]
так что есть гарантия, что код написанный для группы ОС не придётся переписывать для ОС которая появится лет эдак через 7?
смеёшся?? Нету, конечно такой гарантии. Через 7 лет MS вместо .NET изобретёт какой нить .DA и всё по новой.. Ну слава богу, нам за это деньги платят.
← →
Ketmar © (2006-08-28 23:57) [46]> [42] default © (28.08.06 23:47)
теоретически -- да. практически... не знаю. вообще-то microsoft тратит титанические усилия на поддержание совместимости, но что им долбанёт в голову через год, например, -- тайна.
← →
Ketmar © (2006-08-28 23:58) [47]> [43] default © (28.08.06 23:51)
"другие платформы" в данном случае -- это
а) маркетинговый ход "в пику" "солнечным";
б) текст должен звучать так: "другие платформы Windows". %-)
← →
isasa © (2006-08-29 00:04) [48]А вот такой взгляд от MS.
Любому современному программисту, который желает идти в ногу с последними
веяниями, каждые несколько лет приходится переучиваться. Языки (C++, Visual
Basic, Java), библиотеки (MFC, ATL, STL), архитектуры (COM, CORBA), кото-
рые стали вехами в развитии программирования за последние годы, постепенно
уходят в тень лучших или по крайней мере более молодых программных техноло-
гий. Вне зависимости от того, нравится это программистам или нет, этот процесс
неизбежен. Платформа .NET компании Microsoft — это следующая волна корен-
ных изменений, которая идет к нам из Редмонда.
Троелсен. Э.
Т70 С# и платформа .NET. Библиотека программиста. — СПб.: Питер, 2004.
← →
Ketmar © (2006-08-29 00:11) [49]> [48] isasa © (29.08.06 00:04)
я бы написал -- "которая прёт на нас из Р.". %-) ничего супернового в .NET не сделали. лет 20 назад Вирт создал Оберон. это было просто, ясно и красиво. потом на базе Оберона сделали Juice, при виде которого Java даже нервно курить бы не смогла -- сигарету от тремора не удержала б. но это были "нераспиареные" проекты. через несколько лет оттуда взяли идеи, основательно их попортили и выдали за "суперинновацию". скучно. пиар.
← →
default © (2006-08-29 00:16) [50]а вот, например, код на Java на какие ОС распространяется?
а то ссылки, что может работать на системах отличных от WIndows ну у всех
Рихтер, Троелсен, Шилдт, Мохика
guav © (28.08.06 23:30) [33]
я эту тему пока не рассматривал, в другом копаюсь, сборщик мусора - просто сказка!
← →
default © (2006-08-29 00:19) [51]isasa © (29.08.06 00:04) [48]
сколько же я ругался на этого Троелсена когда читал главы по основам...
читать надо между строк и то опасно без проверок
← →
Loginov Dmitry © (2006-08-29 03:04) [52]> Desdechado © (28.08.06 19:10) [10]
> > With TMASSqlSource.Create(gl_theCon),GridKidsInTable.DataController
> Do
> Никогда не использую with с более, чем одним объектом сразу.
> Выбираю только один (самый длинно названный или часто используемый
> в блоке), а остальные явно.
Я максимум 2 использую. Примерно так:
with DataModule, DataModule.FieldByName("FieldName1") do
begin
while not Eof do
begin
FieldByName("FieldName2").Value := Value;
Next;
end;
end;
Экономия кода (выраженная в кол-ве строк и их длине) получается весьма значительной. А на Free в with натыкался уже неоднократно, и каждый раз долго ищешь, почему это не работает. Считаю, что оператор with весьма надежный, если им пользоваться правильно. Глюков как таковых ни разу не встречал.
← →
guav © (2006-08-29 03:06) [53]> Считаю, что оператор with весьма надежный, если им пользоваться
> правильно.
А разве оператор бывает надёным или ненадёжным ?
← →
SergP © (2006-08-29 03:44) [54]> [52] Loginov Dmitry © (29.08.06 03:04)
> > Desdechado © (28.08.06 19:10) [10]
> > > With TMASSqlSource.Create(gl_theCon),GridKidsInTable.DataController
>
> > Do
> > Никогда не использую with с более, чем одним объектом
> сразу.
> > Выбираю только один (самый длинно названный или часто
> используемый
> > в блоке), а остальные явно.
>
>
> Я максимум 2 использую.
Мне вообще очень нравится with. Текст исходников получается более простым и понятным. Но более одного объекта в with я никогда не использовал.
Извиняюсь за ламерство, но вот всегда хотел спросить: Как использовать with с более чем одним объектом? Просто такое почему-то в голове не особо укладывается...
например усли у обоих объектов имеется одноименный метод. и я напишу его в блоке with a,b do ....
Метод которого из объектов будет выполнен?
← →
lookin © (2006-08-29 04:03) [55]С чем я стал пытаться бороться уже неделю назад...
← →
default © (2006-08-29 04:04) [56]SergP © (29.08.06 03:44) [54]
используется первый объект(или запись) начиная с конца в котором встретился вызываемый член
именно поэтому в сабже Free вызывается только для второго объекта в with
справка, как обычно, рулит
← →
SergP © (2006-08-29 04:19) [57]> [56] default © (29.08.06 04:04)
Я так понял, что если писать:
with TClass1.create, TClass2.create do ...
то сделать free обоим объектам не получится, только последнему?
← →
default © (2006-08-29 05:03) [58]SergP © (29.08.06 04:19) [57]
ага
но код в сабже, полагаю, можно переписать так
With GridKidsInTable.DataController, TMASSqlSource.Create(gl_theCon) Do
Try
n:=AppendRecord;
Select("select date_birth, gender from People where id="+IntToStr(nIDHuman));
Values[n,KIColLastName.Index]:=strLastName;
Values[n,KIColFirstName.Index]:=strFirstName;
Values[n,KIColMidName.Index]:=strMidName;
Values[n,KIColBirthDate.Index]:=cmnDate(DatFld[0,1]);
Values[n,KIColGender.Index]:=cmnGenderToStr(IntFld[0,2]);
Values[n,KIColIsNew.Index]:="";
Values[n,KIColIDHuman.Index]:=nIDHuman;
Finally
Free;
GridKidsInTable.DataController.Free;
End;
правда можно делать так:
c1 := TClass1.create; c2 := TClass2.Create;
← →
default © (2006-08-29 05:04) [59]вот это убрать "правда можно делать так:
c1 := TClass1.create; c2 := TClass2.Create;"
:):):)
← →
euru © (2006-08-29 09:37) [60]Не знаю, что мешает разработчикам ввести конструкцию вида
with <объект> as <псевдоним> do
Тогда всё было бы, как мне кажется, однозначно:
with X.Y as A, X.Y.Z as B do begin
f(); // вызывется либо глобальная процедура, либо текущего класса
A.f(); // X.Y.f();
B.f(); // X.Y.Z.f();
end;
← →
Карелин Артем © (2006-08-29 09:40) [61]На Линуксе MONO вроде как есть, так что проекты под старый фреймворк и там пашутЪ
← →
Ketmar © (2006-08-29 09:57) [62]> [60] euru © (29.08.06 09:37)
точно так же не знаю, какая религия запрещает завести локальную переменную и использовать её.
> [61] Карелин Артем © (29.08.06 09:40)
тихий ужос.
← →
jack128 © (2006-08-29 11:22) [63]Ketmar © (29.08.06 9:57) [62]
точно так же не знаю, какая религия запрещает завести локальную переменную и использовать её.
Это не религия, это Лень-матушка, которая, как известно, вперед нас родилась ;-)
← →
Palladin © (2006-08-29 12:01) [64]With я обычно использую очень часто, как сказал Ketmar, молотком можно не только соседа убить, но и гвоздь забить, эта конструкция писалась в два присеста,
сначалаWith TMASSqlSource.Create(gl_theCon) Do
Try
n:=GridKidsInTable.DataController.AppendRecord;
Select("select date_birth, gender from People where id="+IntToStr(nIDHuman));
GridKidsInTable.DataController.Values[n,KIColLastName.Index]:=strLastName;
GridKidsInTable.DataController.Values[n,KIColFirstName.Index]:=strFirstName;
Finally
Free;
End;
отвлекли... вернувшись, увидев и поленившись писатьGridKidsInTable.DataController
много много раз, быстренько закинул его в With и благополучно перешел к другому методу, который обдумывался во время написания этого.
поиск ошибки затруднялся тем, что
1 она возникала все время в разных юнитах и разных местах devexpress"а
2 она возникала не сразу, а только при отображении GridKidsInTable
3 добавление, тобишь этот самый "коварный" With отладчиком проходился на ура (в голову то не пришло на Free F7 нажать, F8 блин жмем, прально чего туда идти, чего мы там не видели...), и к тому же это самое добавление проходило в другой вкладке PageControl"а, GridKidsInTable не был виден при этом
4 толпа кода и BreakPoint"ов по которым приходилось шлятся
отвлекающие были "жестоко" наказаны :)
← →
pasha_golub © (2006-08-29 14:25) [65]
> 1 она возникала все время в разных юнитах и разных местах
> devexpress"а
Воистину, убиться веником. Компоненты хорошие, что уж тут скажешь. Но, блин, имена и организация всего этого хозяйства, это "шо-то с чем-то", например
TcxComboboxProperties(tlcIndexTablespace.Properties).Items.Assign(cbTablespace.P roperties.Items);
← →
Alkid © (2006-08-29 15:54) [66]
> На Линуксе MONO вроде как есть, так что проекты под старый
> фреймворк и там пашутЪ
У меня есть уже Mono, который и .NET 2.0 реалзует. Хотя, конечно же, там не все классы реализованы, но C# 2.0 компилируется целиком в соответсвии со своей спецификацией (дженерики там всякие и иже с ними).
← →
Ketmar © (2006-08-29 16:36) [67]> [66] Alkid © (29.08.06 15:54)
толку с пустого копмилятора? всё, что есть хорошего в .net -- это именно компоненты.
← →
Alkid © (2006-08-29 18:02) [68]А кто сказал, что он пустой? Там есть некотрое множество классов, даже Windows Forms реализовали.
← →
Ketmar © (2006-08-29 23:06) [69]> [68] Alkid © (29.08.06 18:02)
если б оно ещё и работало нормально...
← →
evvcom © (2006-08-30 08:51) [70]> [54] SergP © (29.08.06 03:44)
> Метод которого из объектов будет выполнен?
Кто последний, тот и папа! (c)
← →
Palladin © (2006-08-30 09:45) [71]
> SergP © (29.08.06 04:19) [57]
With с несколькими идентификаторами аналогичен нескольким вложенным With"ам
тоесть напиши я не
With TMASSqlSource.Create(gl_theCon),GridKidsInTable.DataController
а
With GridKidsInTable.DataController,TMASSqlSource.Create(gl_theCon)
ошибки бы не было...
with TClass1.create, TClass2.create do ...
неа, не получится
with TClass1.Create Do
Try
With TClass2.Create Do
Try
....
Finally
Free;
End;
Finally
Free;
End;
так получится :)
> default © (29.08.06 05:03) [58]
в том то и дело что нельзя DataController.Free, это не мой объект... не я создал не мне и убивцей быть...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.045 c