Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизСамые распространенные дельфийские заблуждения Найти похожие ветки
← →
Petr V. Abramov © (2007-11-11 03:26) [80]> Leonid Troyanovsky © (11.11.07 03:19) [78]
приятное с полезным.
> Пункт первый
N малое. программировать на Delphi - это кидать что-то непонятное на форму.
N малое 1. Если хелп на непонятном языке, его не надо читать
N малое 2. Если забить на умершее Delphi и перейти на живую жабу или vs, что-нить поменяется
← →
{RASkov} (2007-11-11 03:29) [81]> [80] Petr V. Abramov © (11.11.07 03:26)
> Если хелп на непонятном языке, его не надо читать
А как же его читать если язык непонятный? :) Был бы хотя-бы англ, то хоть перевести можно было б
:о)
← →
Petr V. Abramov © (2007-11-11 03:31) [82]> {RASkov} (11.11.07 03:29) [81]
идентифицировать язык и достать английский хелп
← →
Германн © (2007-11-11 03:31) [83]
> {RASkov} (11.11.07 03:25) [79]
>
> > [77] Германн © (11.11.07 03:17)
> > Зависит от атмосферного давления, температуры воздуха,
> возраста бабушки соседа слева и т.п.
>
> Т.е. заблуждение в том что всегда вертает кол-
> во записей в таблице?
>
Хм. RecordCount - это свойство TDataSet. А DataSet не обязательно таблица.
← →
Riply © (2007-11-11 03:34) [84]А можно и я свои пять копеек добавлю:
Крутые прогеры пишут на чистом API.
← →
Petr V. Abramov © (2007-11-11 03:35) [85]Крутые прогеры пишут чисто на API.
← →
{RASkov} (2007-11-11 03:36) [86]> [83] Германн © (11.11.07 03:31)
> Хм. RecordCount - это свойство TDataSet
Ну я про него и имел ввиду.
Т.е. свойство в любом случае вернет некое кол-во записей в ДатаСете ) Пусть под фильтр не попала не одна запись, но 0 - это тоже же кол-во...
← →
Германн © (2007-11-11 03:36) [87]
> Petr V. Abramov © (11.11.07 03:26) [80]
В плане "Anatoly Podgoretsky © (11.11.07 02:34) [49]"
перефразирую твоё высказывание.
"Хелп не надо читать, поскольку он написан на непонятном языке".
← →
Leonid Troyanovsky © (2007-11-11 03:37) [88]Получилось примерно так
Для классного программиста F1 - не кнопка, хелп - не указ, а мсдн - не догма.
Малый размер exe, иконка в трее и защита программы - главное для классного программиста.
За создание объектов и выделение памяти отвечает Пушкин.
Если существует переменная Form1, то ее надо пользовать.
Деструктор обнуляет ссылку на объект.
В DBGrid есть данные, RecordCount возвращает количество записей.
Можно смело разбивать приложения на exe и dll, и передавать между ними классы.
Обрабатывать исключения надо так, чтобы никто о них не догадался.
Разность двух дат лучше всего представить в годах, месяцах и днях.
Итак, есть еще один пункт.
Оставим его на утро, бо оно мудренее.
--
Regards, LVT.
← →
Riply © (2007-11-11 03:37) [89]> [85] Petr V. Abramov © (11.11.07 03:35)
> Крутые прогеры пишут чисто на API.
Не, твое предложение хуже. Его можно понять как "пишут на API без ошибок" :)
← →
Riply © (2007-11-11 03:39) [90]> [88] Leonid Troyanovsky © (11.11.07 03:37)
> За создание объектов и выделение памяти отвечает Пушкин.
А кто отвечает за освобождение памяти ?
← →
Petr V. Abramov © (2007-11-11 03:39) [91]> Riply © (11.11.07 03:37) [89]
дак это и имелось в виду. "и сразу" забыл добавить в конце :)
← →
Германн © (2007-11-11 03:40) [92]
> Riply © (11.11.07 03:39) [90]
>
> > [88] Leonid Troyanovsky © (11.11.07 03:37)
> > За создание объектов и выделение памяти отвечает Пушкин.
>
>
> А кто отвечает за освобождение памяти ?
>
Гоголь, разумеется!
:-)
← →
{RASkov} (2007-11-11 03:41) [93]> В DBGrid есть данные, RecordCount возвращает количество записей.
В DBGrid есть данные(записи), а RecordCount возвращает их количество.
Во)
← →
Leonid Troyanovsky © (2007-11-11 03:44) [94]
> Riply © (11.11.07 03:34) [84]
> Крутые прогеры пишут на чистом API.
Хороший довесок, но пока не знаю куда б его приспособить :)
--
Regards, LVT.
← →
Германн © (2007-11-11 03:45) [95]
> Leonid Troyanovsky © (11.11.07 03:37) [88]
> Разность двух дат лучше всего представить в годах, месяцах
> и днях.
>
Я против такой формулировки как "негативной". Поскольку очень часто используется в быту формулировка типа: мне, моему ребёнку (и т.п.) столько то лет, месяцев и дней от роду.
← →
Petr V. Abramov © (2007-11-11 03:51) [96]Германн © (11.11.07 03:45) [95]
если вычесть из одной даты другую, мы получим их разность в рабочих днях с учетом всех законов страны, где находится юзер. А в дни годы, месяцы и дни Delphi само переведет.
← →
Leonid Troyanovsky © (2007-11-11 03:51) [97]
> Германн © (11.11.07 03:45) [95]
> Я против такой формулировки как "негативной". Поскольку
> очень часто используется в быту формулировка типа
Т.е., ты часто употребляешь такое: "я старше своего ребенка
на ..лет, месяцев, дней"? :)
--
Regards, LVT.
← →
Германн © (2007-11-11 04:03) [98]
> Leonid Troyanovsky © (11.11.07 03:51) [97]
Не. Не часто.
Я очень не хотел ввязываться в обсуждение http://delphimaster.net/view/2-1194516434/
но похоже придётся.
Там кто-то высказался про функцию типа DateDiff.
Не знаю как в JEDI, но в RxLib она вычисляет разницу именно на бытовом уровне.
1. сколько лет
2. сколько месяцев
3. сколько дней.
А арифметика тут побоку, имхо. Так же как и календарь.
← →
homm © (2007-11-11 08:25) [99]Разрешите отсебятину %)
н. Размер программы на дельфи получается большой, и с этим ничего нельзя поделать.
Можно даже объеденить с тем, что дельфи дает медленный код.
← →
Sergey Masloff (2007-11-11 08:36) [100]>1. Разность двух дат может быть представлена в годах, месяцах и днях.
Конечно может. Это даже не ИМХО. Иначе бы ни одна финансовая система автоматизации не работала бы. То что в дельфи нет соответствующей функции - ну так написать не очень сложно. В чем заблуждение?
← →
Sergey Masloff (2007-11-11 08:59) [101]На дельфи транслируется в полпинка
create or replace function Months_Between2(pDate2 in date, pDate1 in date) return number deterministic
is
vM number;
-- Ðàññ÷èòûâàåò ÷èñëî ìåñÿöåâ ìåæäó äâóìÿ äàòàìè âêëþ÷èòåëüíî, íî, â îòëè÷èå îò
-- month_between êîððåêòíî ñ òî÷êè çðåíèÿ áèçíåñ-ëîãèêè ðàáîòàåò äëÿ ïîñëåäíèõ
-- äíåé "êîðîòêèõ" ìåñÿöåâ
begin
-- â ñëó÷àå êîãäà pDate2 ïîñëåäíèé äåíü êîðîòêîãî ìåñÿöà
if Months_Between(pDate2+1, Trunc(pDate2+1, "Y")) in (2,4,6,9,11) then
vM := Months_Between(Trunc(pDate2, "MM"), Trunc(pDate1, "MM"));
if Add_Months(pDate2-1, -vM) < pDate1 - 1 then
return vM;
else
return Months_Between(pDate2+1, pDate1);
end if;
else
return Months_Between(pDate2+1, pDate1);
end if;
end;
create or replace function GetPeriodStr2(pDateBeg in date,
pDateEnd in date
) return varchar2 deterministic
is
vMon number;
vYear number;
vD varchar2(10);
C_D varchar2(1):="ä";
C_M varchar2(1):="ì";
C_Y varchar2(1):="ã";
begin
-- Îòîáðàæåíèå ñðîêà äåéñòâèÿ äîãîâîðà â âèäå ñòðîêè:
-- Íàïðèìåð: "12 ì", "3 ì 15 ä (105)", "6 ä" è ò.ï.
if (pDateBeg is null) or (pDateEnd is null) then
return NULL;
end if;
if trunc(pDateEnd)<>pDateEnd then
return to_char(trunc(pDateEnd-pDateBeg+1))||" "||C_D;
end if;
vD:=" ("||To_Char(Trunc(pDateEnd)-Trunc(pDateBeg)+1)||")";
vMon:=Months_Between2(Trunc(pDateEnd), Trunc(pDateBeg));
if vMon=Trunc(vMon) then
return To_Char(vMon)||" "||C_M||vD;
end if;
if vMon<1 then
if Trunc(pDateEnd)=Trunc(pDateBeg) then
return To_Char(Trunc(pDateEnd)-Trunc(pDateBeg))||" "||C_D;
else
return To_Char(Trunc(pDateEnd)-Trunc(pDateBeg)+1)||" "||C_D;
end if;
end if;
vYear := trunc(vMon / 12);
if (vYear > 1) then
vMon := vMon - vYear * 12;
return TO_Char(vYear)||" "||C_Y||" "To_Char(Trunc(vMon))||" "||C_M||" "||To_Char(Trunc(pDateEnd-Add_Months(Trunc(pDateBeg), Trunc(vMon))+1))||" "||C_D||vD;
else
return To_Char(Trunc(vMon))||" "||C_M||" "||To_Char(Trunc(pDateEnd-Add_Months(Trunc(pDateBeg), Trunc(vMon))+1))||" "||C_D||vD;
end;
end;
← →
Sergey Masloff (2007-11-11 09:02) [102]select getperiodstr2("01-02-1900","01-03-2005") from dual
результат
105 г 1 м 1 д (38380)
Ну для разных лет менять г на л "оставляю на домашнее задание"
← →
Sergey Masloff (2007-11-11 09:05) [103]Кстати в дополнение - может показаться ошибкой прибавление одного дня но тут все правильно (с точки зрения фин. систем) - с 01.01.2006 по 01.01.2006 а не 0. С 1 февраля по 1 марта 1 месяц и 1 день а не ровно месяц. Так что все корректно если у кого-то логика другая перерабатывайте ;-)
← →
homm © (2007-11-11 09:20) [104]
select getperiodstr2("01-02-1900","01-03-2005") from dual
результат
105 г 1 м 1 д (38380)
ну дак а правильно 105 г 1 м 0 д.
← →
Sergey Masloff (2007-11-11 09:22) [105]>homm © (11.11.07 09:20) [104]
Для тех кто в танке
Sergey Masloff (11.11.07 09:05) [103]
← →
Sergey Masloff (2007-11-11 09:24) [106]Ну или у вас проездной на февраль еще 1 марта действует тогда поздравляю
← →
homm © (2007-11-11 09:24) [107]Ок, а что выведет на getperiodstr2("01-02-1900","01-03-2003") ?
2004-й был был висакосным, значит результата должен быть 105 г 1 м 0 д
← →
homm © (2007-11-11 09:25) [108]> 2004-й был был висакосным, значит результата должен быть
> 105 г 1 м 0 д
103 г 1 м 0 д
← →
Leonid Troyanovsky © (2007-11-11 09:43) [109]
> Германн © (11.11.07 04:03) [98]
Sergey Masloff (11.11.07 08:36) [100]
http://delphimaster.net/view/2-1194516434/
Обещаю учесть результат.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-11-11 09:50) [110]Итак, на настоящий момент имеем:
Классный программист никогда не ошибается, ему не нужен debuger,
Help ему не указ, MSDN - не догма, а пишет он на чистом API.
Малый размер exe, иконка в трее и защита программы - главное для классного программиста.
Главный враг классного программиста - тупой юзер (и ламерье, засевшее на DM).
За создание объектов и выделение памяти отвечает Пушкин, за все остальное - глючный Delphi.
Деструктор обнулит ссылку на объект.
Обрабатывать исключения надо так, чтобы никто о них не узнал.
Можно смело разбивать приложение на exe & dll и передавать между ними классы.
Если существует переменная Form1, то ее надо пользовать.
В DBGrid есть данные, RecordCount возвращает количество записей.
Разность двух дат лучше всего представить в годах, месяцах и днях.
Однако, смущает некоторая неоднородность, или разномасштабность
утверждений. Одни из них, скажем, академического плана,
а другие - сугубо прикладные.
--
Regards, LVT.
← →
isasa © (2007-11-11 09:58) [111]Sergey Masloff (11.11.07 08:36) [100]
Формулировка
Leonid Troyanovsky © (11.11.07 00:26)
1. Разность двух дат может быть представлена в годах, месяцах и днях.
Правильная, поскольку в ней идет речь о представлении готового результата(полученной разности, например, хранящейся в double== TDataTime). В этой ситуации предполагается, что информации о начале и конце периода может и не быть.
В вашем случае это операция с заранее заданным форматом резельтата.
← →
homm © (2007-11-11 10:10) [112]> Однако, смущает некоторая неоднородность, или разномасштабность
> утверждений. Одни из них, скажем, академического плана,
> а другие - сугубо прикладные.
огие к дельфи вообще не имеют отношения.
← →
boa_kaa © (2007-11-11 10:15) [113]Предлагаю еще один пункт:
На форуме делфимастер сидят люди, котрые обязаны отвечать на все вопросы.
← →
boriskb © (2007-11-11 10:17) [114]А где же самое главное заблуждение?
"Я программист"
:)
А вобще - ветка классная.
Только доведите до конца :)
← →
isasa © (2007-11-11 10:17) [115]Филиал Что.Где.Когда?
← →
Leonid Troyanovsky © (2007-11-11 10:18) [116]
> Leonid Troyanovsky © (11.11.07 09:50) [110]
> Однако, смущает некоторая неоднородность, или разномасштабность
> утверждений. Одни из них, скажем, академического плана,
> а другие - сугубо прикладные.
Получается, что сначала нужно разобраться с тем, кто
есть классный программист. Например:
Классный программист никогда не ошибается, ему не нужен debuger,
Help ему не указ, MSDN - не догма, а пишет он на чистом API.
Малый размер exe, иконка в трее и защита программы - цели классного программиста.
Главный враг классного программиста - тупой юзер (и ламерье, засевшее на DM).
Главный друзья классного программиста - глобальнные переменные.
Он помнит, что за создание объектов и выделение памяти отвечает Пушкин, за все остальное - глючный Delphi.
Классный программист обрабатывает исключения так, чтобы никто о них не узнал.
Классный никогда не сомневается в себе.
А прикладной уровень вывести куда-то в другой список,
с рабочим названием "страдания молодого чайника".
Т.о., разделение, видимо, неизбежно, и в главном списке
образовались незаполненные вакансии, ведь классно
было назвать сей документ: 10 заповедей КП.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-11-11 10:20) [117]
> boriskb © (11.11.07 10:17) [114]
> А где же самое главное заблуждение?
> "Я программист"
О..
Классный программист никогда не усомнится в том, что он
классный программист.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-11-11 10:35) [118]
> boa_kaa © (11.11.07 10:15) [113]
> На форуме делфимастер сидят люди, котрые обязаны отвечать
> на все вопросы.
Может что-то вроде:
КП никогда не платит денег за техподдержку, не покупает компоненты,
и не нанимает менее класных программистов, потому, что и
так слишком много платит своему провайдеру.
Немного, правда, громоздко.
--
Regards, LVT.
← →
Virgo_Style © (2007-11-11 10:37) [119]> Riply © (11.11.07 03:39) [90]
> > За создание объектов и выделение памяти отвечает Пушкин.
>
> А кто отвечает за освобождение памяти ?
Дантес?
← →
Sergey Masloff (2007-11-11 10:43) [120]Leonid Troyanovsky © (11.11.07 10:18) [116]
>Получается, что сначала нужно разобраться с тем, кто
>есть классный программист. Например:
Да это неплохая идея
>Классный программист никогда не ошибается, ему не нужен debuger,
>Help ему не указ, MSDN - не догма, а пишет он на чистом API.
Много заповеди д.б. краткими
1. К.П никогда не ошибается
2. К.П. обрабатывает исключения так чтобы никто не узнал
Это должно войти над остальным ИМХО работать. Про иконки в трее этио частности наверное нужно опустить, про тупых юзеров включить обязательно но формулировку нужно оттачивать ;-)
Страницы: 1 2 3 4 5 6 7 8 9
вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.7 MB
Время: 0.067 c