Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: Eternal_Shield
Дата сообщения: 27.11.2013 11:49
MGAlex

Цитата:
Не соглашусь. Главное, чтобы конечный продукт работал, как положено, а не то, как написано в коде. Тем более, такой код явно не усложняет работу программы.

И зря, а мне это будет говорить о том, что человек не имеет понятия на чём пишет. Пусть лучше к своему корыту возвращается. Его код будет нерабочим через пару мес.


Код:
If True then
Begin
ranomize;
b := random(5) + 1;
SomeProc;
AnotherFunc(b);
End
А так какой смысл в составном операторе?
Автор: MGAlex
Дата сообщения: 27.11.2013 12:08
Eternal_Shield
Причем здесь True? Я Вам про Фому, а Вы мне про Ерему.
На True вообще внимания не нужно обращать в данном примере. Я показал в пример, когда нужно использовать составной оператор. Если использовать составной оператор там, где его не нужно использовать, это говорит о неграмотности программиста.


Код: if a > b then
c := true;

if a > b then
begin
c := true;
end;
Автор: A_V
Дата сообщения: 27.11.2013 16:51
MGAlex

Цитата:
Я показал в пример, когда нужно использовать составной оператор. Если использовать составной оператор там, где его не нужно использовать, это говорит о неграмотности программиста.

не факт, есть разные подходы к оформлению кода - на языках со скобочками ('{') - чаще специально так и пишут, мол это понятнее, и сразу видно условие. в паскале обычно так не делают, но это уж никак не говорит о неграмотности программиста )
Автор: MGAlex
Дата сообщения: 27.11.2013 17:09

Цитата:
в паскале обычно так не делают

Ну так мы и ведем речь о Delphi (Pascal).

А вообще, процитирую сам себя:


Цитата:
Главное, чтобы конечный продукт работал, как положено, а не то, как написано в коде.


Кому как удобно, тот так и пишет.
Автор: A_V
Дата сообщения: 27.11.2013 17:27
MGAlex

Цитата:
Главное, чтобы конечный продукт работал, как положено, а не то, как написано в коде.


Цитата:
Кому как удобно, тот так и пишет.

..пока это не касается коллективной разработки большого проекта. там то, 'как написано в коде' имеет значение.
Автор: MGAlex
Дата сообщения: 27.11.2013 17:58
A_V
Согласен.
Но в таком случае нужно строго придерживаться общих правил написания и оформления кода.
Автор: SolidSnakeRU
Дата сообщения: 28.11.2013 09:03
Никто не знает на когда перенесли вебинар по FireDac c Дмитрием Арефьевым?
Автор: deks
Дата сообщения: 28.11.2013 15:03
Arioch1


Цитата:
В Паскалях же True - это не константа



Цитата:
Вот оно что, Михалыч!..


Конечно же, я косячнул и написал вообще не то, что думал и нет так))

На самом деле, я имел ввиду, что в паскалях True - это не TYPEDEF какого то числа, а типа самостоятельный логический тип, у которого определенные правила преобразования в другие типы, откуда Ord( .. boolean ) = определенному значению. В то же время, компилятор понимает, что речь идет именно о логическом типе. А вот в с++ компилятору будет непонятно, если функция будет возвращать BOOL, который определен каким-нибудь TYPEDEF. Вот в этом смысле компилятору паскаля попроще, и он имеет возможность делать правильные касты.

Я ввобще паскаль люблю за нормальную систему типов)
Автор: Arioch1
Дата сообщения: 28.11.2013 16:14
В общем-то ты просто написал, что в Паскале есть логический тип, а в C/C++ его нет.
Автор: alsterkh
Дата сообщения: 29.11.2013 09:28
Кто бы дал дельный совет. Давно уже застрял на Делфи 2010. Вот очередная смена компа и мысли, а может пора перейти на версию поновее. Программирую исключительно на Delphi под Винду. Если смысл переходить на XE и стоит ли аж на XE 5 (если компоненты конечно все найдутся)?
Автор: A_V
Дата сообщения: 29.11.2013 10:15
alsterkh
если все устраивает, и 64 бит не нужно, то имхо особого смысла нет.
но например, если начнешь активно использовать дженерики, то перейти придется -
в 2010-й багов с ними море, более-менее только к XE5 поправили
Автор: alsterkh
Дата сообщения: 29.11.2013 11:06
A_V, спасибо. Узнал про дженерики заодно )
Автор: delover
Дата сообщения: 29.11.2013 16:54
X11

Цитата:
Цитата:Писать if value = true then , где value - boolean - считается дурным тоном.


что за бред, уж извините за выражение
да, я не пишу if value = true then, но не вижу здесь ничего, что могло бы считаться дурным тоном

+1 Пишите как считаете нужным, даже имея опыт, я не назову это глупостью или дурным тоном. В Pascal если речь идёт о нём true=1 (все версии компилятора).
На счёт стиля Олмана. 4 года работал в программе где 8 пробелов стиль. Непривычно вначале, а потом ни бегины ни энды не мешают - уверяю.

Eternal_Shield
Вы иногда вспоминайте что у Вас опыт гораздо больше. (Это так к слову)

MGAlex

Цитата:
А вообще, процитирую сам себя:


Цитата:Главное, чтобы конечный продукт работал, как положено, а не то, как написано в коде.

Двойка. Я работаю в программе где до меня 10 таких как вы сидели и теперь в программе не сделать ничего чтобы не сделать ошибку. Вам учиться ещё надо.

deks
А Вас читаем без перевода и пост-объяснений понятно.



Добавлено:
ps
Дэкс это я про true=1 я понял что не константа в том смысле что у меня ссылочная модель на константы, думаю Вы в курсе.
Автор: jonikDk
Дата сообщения: 29.11.2013 20:33

Цитата:
Кто бы дал дельный совет. Давно уже застрял на Делфи 2010. Вот очередная смена компа и мысли, а может пора перейти на версию поновее. Программирую исключительно на Delphi под Винду. Если смысл переходить на XE и стоит ли аж на XE 5 (если компоненты конечно все найдутся)?

Круто, а я еще на Delphi7. Вот наконец собираюсь на D2007 переползать :-d. И через полгодика думаю уже на XE5 Внимательно слежу за баталиями по XE5. Особых проблем в VCL x32 не наблюдается, так что я для себя вижу смысл постепенного переползания
Автор: volser
Дата сообщения: 30.11.2013 13:44
alsterkh
После delphi 2009 чем больше версия тем лучше (при условии что все есть для перехода на новую версию)
Автор: MGAlex
Дата сообщения: 30.11.2013 21:59
delover
Вы хоть читаете, что пишите?

Цитата:
+1 Пишите как считаете нужным


Цитата:
Двойка. Я работаю в программе где до меня 10 таких как вы сидели и теперь в программе не сделать ничего чтобы не сделать ошибку. Вам учиться ещё надо.

По-моему, Вы с логикой вообще не дружите, а другим пишите, что учиться надо. Видимо, дело не в тех, кто сидел до Вас, а именно в Вас.
Автор: LGTeam
Дата сообщения: 01.12.2013 03:45
ребята, как на FM перехватывать прорисовку видеокадра,что бы свою хню отрисовывать? (камера, видео)..
Автор: delover
Дата сообщения: 01.12.2013 11:17
MGAlex

Цитата:
По-моему, Вы с логикой вообще не дружите, а другим пишите, что учиться надо.

Пишите по существу. Вы пишете чтобы главное программа работала, а какой дереволазный код после Вас - хоть потоп - без разницы. Я Вас так понял. Дружите со своей дереволазной логикой дальше. В моей логике написание внятного кода важнее желаний очередного директора. Стоп флуд.


Цитата:
+1 Пишите как считаете нужным

Да пишите
if value=true then
Если будет работать с багами, то надо писать в Квелити-Централ статью.

Добавлено:
Просто красивый безобидный пример того, что не важно как написано, главно чтобы работало.
[more=Незнание Action.GroupIndex]
Код: procedure TfmMain.RefreshFilterActionsChecked(TheState: boolean; TheAction:
TAction);
var
Act1, Act2, Act3, Act4, Act5, Act6, Act7, Act8, Act9: TAction;
begin
if TheAction = actFilterByName then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByPrice then
begin
Act1 := actFilterByName;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByEan13 then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByName;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByBarcode then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByName;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else
if TheAction = actFilterByIdPrep then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByName;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByCode1 then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByName;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByCode2 then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByName;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByCode3 then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByName;
Act8 := actFilterByRemPrep;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByRemPrep then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByName;
Act9 := actFilterByCode123;
end
else if TheAction = actFilterByCode123 then
begin
Act1 := actFilterByPrice;
Act2 := actFilterByEan13;
Act3 := actFilterByBarcode;
Act4 := actFilterByIdPrep;
Act5 := actFilterByCode1;
Act6 := actFilterByCode2;
Act7 := actFilterByCode3;
Act8 := actFilterByRemPrep;
Act9 := actFilterByName;
end
else
exit;
TheAction.Checked := TheState;
Act1.Checked := Act1.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act2.Checked := Act2.Checked and (not TheAction.Checked) and (not Act1.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act3.Checked := Act3.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act1.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act4.Checked := Act4.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act1.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act5.Checked := Act5.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act1.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act6.Checked := Act6.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act1.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act7.Checked := Act7.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act1.Checked) and (not Act8.Checked) and (not
Act9.Checked);
Act8.Checked := Act8.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act1.Checked) and (not
Act9.Checked);
Act9.Checked := Act9.Checked and (not TheAction.Checked) and (not Act2.Checked)
and (not Act3.Checked) and (not Act4.Checked) and (not Act5.Checked) and (not
Act6.Checked) and (not Act7.Checked) and (not Act8.Checked) and (not
Act1.Checked);
end;
Автор: MGAlex
Дата сообщения: 01.12.2013 13:15

Цитата:
Вы пишете чтобы главное программа работала, а какой дереволазный код после Вас - хоть потоп - без разницы. Я Вас так понял.

Причем тут древолазный код? Вы поддерживаете нарушение общепринятых стандартов и при этом рассказываете, что другие писать не умеют. Стандартов нужно придерживаться, но стиль написания программ у каждого свой. Решений той или иной задачи может быть множество.
В данном контексте мое высказывание относилось конкретно к теме разговора, а именно if value = true then и об использовании составных операторов там, где их не нужно использовать. Сюда можно и стиль Олмана отнести, который тоже нельзя назвать общепринятым. Опять же, мое высказывание касается строго индивидуального написания программ, а не коллективного. Если программу пишет не 1 человек или известно, что твое дело кто-то будет продолжать, то стандартов придерживаться просто необходимо.


Цитата:
В моей логике написание внятного кода важнее желаний очередного директора

А вот это действительно двойка и такие работники обычно долго не задерживаются. Кому интересно, какой у Вас код, если в Вашей программе одни сплошные глюки?
Автор: delover
Дата сообщения: 01.12.2013 13:52

Цитата:
А вот это действительно двойка и такие работники обычно долго не задерживаются. Кому интересно, какой у Вас код, если в Вашей программе одни сплошные глюки?

Наоборот, последний директор держится за меня будь-то я ему жизнь спас когда-то. Везде задерживаюсь на долго. А вот когда меня просят достать воздушный шарик там где куча оголённых проводов - получают по бороде. В моей программе глюков много до меня было, но постоянно их количество сводится на нет только потому, что я не иду на поводу индивидуальной логики. Я не один работаю в программе, а работаю ОДИН в каждом месяце я разный. И могу запросто не узнать то, что сам писал. Главное чтобы была возможность работать в программе самому не накосячив в своём же коде (что делали до меня постоянно).


Цитата:
Вы поддерживаете нарушение общепринятых стандартов и при этом рассказываете

if Value=true then
- Это нарушение стандартов????? Вы мягко сказать погорячились. Как Вам тип вариант не надоел ещё? -
if Dataset.Value=true then


Добавлено:
Вот стартовый код:

Код: procedure TForm2.Button2Click(Sender: TObject);
begin
dataset.FieldByName('Nullable').Value := null;
if dataset.FieldByName('Nullable').Value then
ShowMessage('OK!')
else
ShowMessage('else');
end;
Автор: MGAlex
Дата сообщения: 01.12.2013 17:26
Вы бы уже определились с типом поля Nullable, прежде чем писать пример.


Цитата:
Удивительно - выполнит OK!

Это, похоже, для Вас только удивительно.
Автор: delover
Дата сообщения: 01.12.2013 18:04
MGAlex
Предлагаю мир, только выбросите из головы что написание кода не важно.
Автор: MGAlex
Дата сообщения: 01.12.2013 18:14
delover


Написание кода, безусловно имеет значение. Неграмотно составленный код если и не приведет к ошибкам, то к проблемам с его анализом - однозначно.
Автор: delover
Дата сообщения: 01.12.2013 18:33
MGAlex
Кстати из примера взял слово Value - в исходниках Delphi поиск даёт только сложные типы и тип Variant.
Автор: MGAlex
Дата сообщения: 01.12.2013 22:32
delover
Я взял это из следующей темы: http://www.delphimaster.net/view/15-1261471578/0-39
На мой взгляд, тема не совсем верно названа.
В данном случае правильнее было бы назвать if boolean = true then
Автор: delover
Дата сообщения: 02.12.2013 10:54
MGAlex
Спасибо, прочитал весь топик. В конце не очень интересно, но вот с переименованием был бы согласен. Даже так
if B = true then

Ещё раз сформулирую несколько мыслей.

1) В своё время я довольно привык работать в сишарп .NET с нулабле типами. Их абсолютно легко сделать и они правильно соответствуют типам данных из базы. Пишется типо так

Код: System.Nullable<bool> f;
f = null;
if (f == true) {
MessageBox.Show(f.ToString());
}
Автор: alsterkh
Дата сообщения: 03.12.2013 07:24
volser, спасибо ))
jonikDk, смысла "плавного переползания" не вижу, мне кажется большая потеря времени - поиск/установка/перекомпиляция компонент, это все время, лучше сразу "в конец" ))

Автор: kot3
Дата сообщения: 03.12.2013 10:52
delover

Цитата:
и используют Tag не по назначению

А где оговорено его назначение? Не припомню. Тут дело не в боязни новой переменной, а просто порой это единственный способ (без наследования) что-то замутить с существующими компонентами.
Автор: alsterkh
Дата сообщения: 03.12.2013 11:46

Цитата:
5) Довольно часто использую всякие простые плюшки чтобы затуманить CPU код отладчика (Mode = true   -   cmp EAX,1) это вполне в моём духе. Нужно иногда быть творцом не только текста программы, но и того мяса из которого состоит EXE.

Я конечно не уверен, но мне кажется оптимизатор Delphi из "if Mode then" и из "if Mode = true then" сделает один и тот же машинный код. Разве нет?
Автор: 1ddd1
Дата сообщения: 03.12.2013 15:48

Цитата:
Круто, а я еще на Delphi7. Вот наконец собираюсь на D2007 переползать :-d. И через полгодика думаю уже на XE5 Внимательно слежу за баталиями по XE5. Особых проблем в VCL x32 не наблюдается, так что я для себя вижу смысл постепенного переползания



Кстати, подскажите пожалуйста по версиям XE, сейчас пишу на 2007, но захотел обновить и задумался. Для редакции XE5 Professional написано что она поддерживает только локальные соединения к БД, не могу понять это касается только их компонентов или там все вырезано и я не смогу работать с FIBPlus на XE5 Professional? Т.к. разница в цене между XE5 Professional и XE5 Enterprise существенная, возник такой вопрос. Не использую FireDAC и DataSnap, только FIBPlus для доступа к Firebird. В триале только макс версия, проверить не могу

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.