Форум: "Прочее";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];
Внизи чего дельфи хоронят?.. Найти похожие ветки
← →
Inovet © (2011-12-22 09:06) [80]> [52] Кто б сомневался © (22.12.11 00:22)
> Почему то он решил обозначить символами ряд простых операций,
> вместо букв, такие как && вместо простого and || = or
> итп .
Он же ещё гад такой придумал сделать совершенно нечитаемые "+", "-", "*", "/" вместо понятных add, minus, multiplicate, divide, subtract. И верх его больного воображения - "%" вместо mod это же он в своих фантазиях представлял вот под этими кружочками с палочкой - дробь. Ужас! А может не дробь, а... ну вы поняли.
← →
Ega23 © (2011-12-22 09:07) [81]
> я про то, чтобы была возможность нормально смотреть и править
> генофонд, как в дельфи
За более 10 лет генофонд пришлось править один единственный раз. Связано было именно с 2010-й Delphi и с тем, как оно MSXMLDOM создавало.
Один раз.
← →
Kerk © (2011-12-22 09:10) [82]
> Inovet © (22.12.11 09:06) [80]
Евгений Ваганыч?
← →
Ega23 © (2011-12-22 09:12) [83]=, == (а особенно === в некоторых быдлоязыках) - вот где Адъ и Израиль.
Когда приходится писать в стиле if (5==a) штоб не дай Б-г не ошибиться...
Это не хорошо.
Хотя что-то слышал на этот счёт, мол, поправили? Сишники, проясните, кто в теме?
← →
antonn © (2011-12-22 09:14) [84]
> За более 10 лет генофонд пришлось править один единственный
> раз.
а мне за 5 лет только 2.5 раза
← →
Inovet © (2011-12-22 09:19) [85]> [83] Ega23 © (22.12.11 09:12)
> if (5==a) штоб не дай Б-г не ошибиться...
Компиляторы ворниг выдают на if(a=5). Но вот так некоторые пишут для типа оптимицации
if(a=b=с==5)
← →
Inovet © (2011-12-22 09:22) [86]> [82] Kerk © (22.12.11 09:10)
> Евгений Ваганыч?
Это Перосян что ли под псевдонимом Кернига Ритчи творил?
← →
euru © (2011-12-22 10:34) [87]
> Кто б сомневался © (22.12.11 03:37) [76]
> Ничто разработчикам не мешало сделать язык приближенным
> к английскому тексту, как тот же паскаль
> его код очень похож на английский текст
Наверно, вам встречались тексты (художественные произведения, периодика), написанные в таком стиле, раз вы это утверждаете. Можно увидеть пару примеров?
> быстрее выучить не знающему его
Незнающие почему-то бейсик учат быстрее паскаля.
> даже неподготовленный может догадаться что там происходит.
Неподготовленный, а особенно если он ещё и английского языка не знает, никогда не догадается.
А теперь сравним два языка A и B.
Операция присваивания// язык А | * язык В
x := x + 10; | add 10 to x.
Вызов подпрограммы// язык А | * язык В
proc(a, b); | perform proc using a changing b.
Цикл// язык А | * язык В
for i := 1 to n do begin | do n times.
... | ...
end; | enddo.
Обработка массива// язык А | * язык В
for i := low(a) to high(a) do | loop at a assigning <a>
begin | where fld1 = "a"
if a[i].fld1 = "a" and | and fld2 between 10 and 20.
a[i].fld2 >= 10 and a[i].fld2 <= 20 then | clear: <a>-fld3, <a>-fld4.
begin | endloop.
a[i].fld3 = 0;
a[i].fld4 = "";
end;
end;
Какой из этих двух языков будет понятен большему количеству людей?
← →
Kerk © (2011-12-22 11:00) [88]
> Какой из этих двух языков будет понятен большему количеству
> людей?
Безусловно второй. В американских ВУЗах проводились исследования среди студентов, начинающих изучать программирование. Студентов, способных описывать реализацию решения задач на естественном языке в разы больше чем тех, кто преуспевает в этом, используя языки программирования.
Твой пример с циклом очень показателен. Синтаксис типаfor item in list do...
воспринимается начинающими намного проще, чемfor i := 0 to list.count-1 do
begin
item := list[i];
P.S. Только не надо доводить до абсурда, заменяя общеизвестную со школы математическую нотацию хрен знает чем. К чему это петросянство?
← →
Rouse_ © (2011-12-22 11:14) [89]
> DiamondShark © (22.12.11 01:00) [65]
> Если у программиста где-то появился код (не для "чиста паржать",
> а реальный), зависящий от порядка вычисления параметров,
> то такого кадра надо ссаными тряпками гнать вон из профессии.
"Complete Boolean Eval" для "чиста паржать" стало быть?
С включенным флагом почти весь VCL не соберется ибо выражения плана:if (SomeVariable <> nil) and (SomeVariable.SomeParams <> nil) then
там рассованы по всему коду.
Ну так как, будем весь отдел разработки Эмбаркадеры ссаными тряпками гнать из профессии или пусть себе живут?
← →
Игорь Шевченко © (2011-12-22 11:23) [90]euru © (22.12.11 10:34) [87]
COBOL rulezz fareva
← →
Kerk © (2011-12-22 11:36) [91]Удалено модератором
← →
OW © (2011-12-22 12:04) [92]
> Какой из этих двух языков будет понятен большему количеству
> людей?
Средний, которого тут нет.
читается лучше
> add 10 to x.
> for i := 1 to n do begin
> times.
> ...
> end;
> proc(a, b);
последнее плохо и там и там :)
← →
Ega23 © (2011-12-22 12:09) [93]Удалено модератором
← →
DiamondShark © (2011-12-22 12:18) [94]
> Ничто разработчикам не мешало сделать язык приближенным к английскому тексту, как тот же паскаль его код очень похож на английский текст
Паскаль так же похож на английский текст, как язык 1С похож на русский текст.
← →
euru © (2011-12-22 12:31) [95]
> Игорь Шевченко © (22.12.11 11:23) [90]
> COBOL rulezz fareva
Не совсем. Это его родственник - АВАР.
← →
euru © (2011-12-22 12:49) [96]
> OW © (22.12.11 12:04) [92]
> Средний, которого тут нет.
В отличие от среднего языки А и В реально существуют. Это Паскаль и АВАР.
> for i := 1 to n do begin times.
для i какой-то смайлик в пропорции 1 к n сделать начальные разы.
Утрирую, конечно. Но всё-таки чем такая конструкция понятнее "do n times"?
> последнее плохо и там и там :)
А аргументировать?
← →
Ega23 © (2011-12-22 12:58) [97]
> Но всё-таки чем такая конструкция понятнее "do n times"?
Она не то чтобы понятнее. Она унифицирована.
Если вводить "do n times", то тогда надо вводить "do n times step k", "do n times with some condition" и т.д.
А зачем?
Ну теоретически можно согласиться с for item in list. Наверное да, это удобно, если регулярно что-то перебирать, не заморачиваясь на порядок перебора.
← →
Компромисс © (2011-12-22 13:02) [98]
> Ну теоретически можно согласиться с for item in list
Почему теоретически? Эта конструкция есть во многих ЯП.
← →
OW © (2011-12-22 13:10) [99]
> euru © (22.12.11 12:49) [96]
Ega23 © (22.12.11 12:58) [97]
не, times там ни к чему, это так скопировалось :)
аргументировать последнее..
трудно.
> for item in list.
думаю понятнее всего.
т.е. современный delphi, которого, правда, сам еще не видел :), наверное, ближе к понятности.
← →
euru © (2011-12-22 13:12) [100]
> Ega23 © (22.12.11 12:58) [97]
> Она не то чтобы понятнее. Она унифицирована.Если вводить
> "do n times", то тогда надо вводить "do n times step k",
> "do n times with some condition" и т.д.
Т.е. конструкция "for..." менее понятна (хотя я спрашивал именно про понятность), но зато унифицирована.
Тогда как в ней описать варианты типа "do n times step k" и "with same conditions"? И если это всё-таки невозможно, почему тогда "for ... do" более унифицирована, чем "do n times"?
← →
Anatoly Podgoretsky © (2011-12-22 13:13) [101]> Inovet (22.12.2011 09:06:20) [80]
Тебе прямой путь в АДА, тогда сможешь писать так
С := A + B
С := Add(A. B)
С := "+"(A. B)
← →
Ega23 © (2011-12-22 13:22) [102]
> Почему теоретически? Эта конструкция есть во многих ЯП.
Я не говорю, что её нет. Я говорю о её полезности. goto вот тоже есть, практически во всех ЯП.
Наверное да, полезна. Может быть даже удобна в чём-то. Но вот как-то не сложилось у меня дружба с foreach, не знаю почему.
← →
euru © (2011-12-22 13:23) [103]
> OW © (22.12.11 13:10) [99]
> не, times там ни к чему, это так скопировалось :)
Хорошо. Убираем "times". Оставляем вопрос.
> аргументировать последнее..трудно.
Если оба плохи, но нет аргументов, можно предложить свой "идеальный" вариант.
> for item in list.
Это перебор элементов списка. А если нужен просто цикл? Предложите создавать список длиной n элементов?
← →
Kerk © (2011-12-22 13:24) [104]
> Ega23 © (22.12.11 12:58) [97]
> у теоретически можно согласиться с for item in list. Наверное
> да, это удобно, если регулярно что-то перебирать, не заморачиваясь
> на порядок перебора.
Я конечно не считал, но по-моему 90% (а то и больше) всех циклов -- это обход какого-либо списка по порядку.
← →
Inovet © (2011-12-22 13:25) [105]> [101] Anatoly Podgoretsky © (22.12.11 13:13)
> С := A + B
> С := Add(A. B)
> С := "+"(A. B)
Нет, это сложно. Хочу так:Приовить сумму А и Б в С
← →
Ega23 © (2011-12-22 13:27) [106]
> Тогда как в ней описать варианты типа "do n times step k"
> и "with same conditions"?
with some condition - break.
do n times step k - я бы через while сделалi := 0;
while i < n do
try
finally
Inc(i, k)
end;
ИМХО, усложнять язык дополнительной грамматической конструкцией, которая позволяет сделать что-то в две строчки, хотя существующие конструкции позволяют сделать это же что-то в четыре строчки - это должно быть весьма веское обоснование.
← →
Ega23 © (2011-12-22 13:28) [107]
> Я конечно не считал, но по-моему 90% (а то и больше) всех
> циклов -- это обход какого-либо списка по порядку.
Вот если есть такая статистика, и если это действительно так - то да, такая конструкция крайне полезна, без базара.
← →
Kerk © (2011-12-22 13:49) [108]
> Это перебор элементов списка. А если нужен просто цикл?
> Предложите создавать список длиной n элементов?
В некоторых языках возможна такая конструкцияfor n in 1..10
воспринимается единообразно с обходом списка, а сравнивать ее читаемость вот с этим даже не хочется:for (i=0; i < 10; i++)
:)
← →
DiamondShark © (2011-12-22 13:53) [109]
> Rouse_ © (22.12.11 11:14) [89]
"Иван Василич, когда вы говорите, такое впечатление, что вы бредите" (Ц).
Речь шла о порядке вычисления АРГУМЕНТОВ, а ты приплёл схему булевских вычислений. К чему она тут -- Ктулху ведомо.
Но если тебя это беспокоит и ты хочешь об этом поговорить, давай поговорим о булевских вычислениях.
В классическом Паскале схема вычислений булевских выражений была одна: короткая, строго слева-направо. Это не случайность, Вирт в "Сообщении" особо отмечал, что такая схема выбрана сознательно исходя как раз из того соображения, что сценарии, подобныеif (SomeVariable <> nil) and (SomeVariable.SomeParams <> nil) then
илиwhile i < length and a[i] <> 0 do
являются ТИПОВЫМИ.
Потом появился Борланд со своим Турбо Паскалем. В него был введён, КАК РАСШИРЕНИЕ над стандартом, переключатель компилятора $B. По умолчанию переключатель был в состоянии, соответствующем виртовскому паскалю, а в документации было отмечено, что это опция для специальных случаев, когда важен побочный эффект.
И, наконец, состояние $B, а, следовательно, и поведение компилятора находится под контролем программиста, в отличие от рассматриваемого выше случая.
Так что весь ваш пафос, как обычно, мимо тазика.
← →
euru © (2011-12-22 14:23) [110]
> Ega23 © (22.12.11 13:27) [106]
> with some condition - break.
Во-первых, break не является частью оператора for.
Во-вторых, break не накладывает условия на цикл.
В-третьих, оператор, аналогичный break, есть и в АВАРе. Поэтому всё, что с помощью break можно сделать в Паскале, можно сделать и в АВАРе.
> do n times step k - я бы через while сделал
В АВАРе оператор while также имеется. Но мы-то обсуждаем "for .. do" vs "do ... times".
← →
OW © (2011-12-22 14:23) [111]
> euru ©
на самом деле, я не готов продолжить разговор, т.к. паскале-ориентированная запись, видимо, все же зашоривает глаза.
do N times
может и лучше чем
for i := 0 to N do
тогда, почему сказал..
наверное потому, что не вижу переменную цикла. т.е. цикл получается по-любому выполняется N раз. Внутри можно ввести переменную, для вычисления какая это итерация по счету и т.п.
Как то все равно, контроль над iterationNumber не видеть непривычно.
(И отсутствует даже теоретическая возможность его сменить
var
i: integer;
begin
for i := 0 to 9 do
begin
if i = 5 then
asm
mov i, 7
end;
memo1.Lines.Add(IntToStr(i));
end;
Да, плохо, может быть неверно в общем случае, никогда не пользуюсь, но так как-то понятнее, именно как это работает все все нутри
)
ну и вторая причина, почти что первая,
не так уж много иных вариантов/языков я знаю :)
← →
Андреевич (2011-12-22 14:30) [112]
> Но вот как-то не сложилось у меня дружба с foreach, не знаю
> почему.
ну бывают же не индексированные списки (к сожалению приходится с ними часто иметь дело :( )
> do N times
> может и лучше чем
> for i := 0 to N do
она лучше пока не нужен i в теле цикла
← →
Компромисс © (2011-12-22 14:32) [113]OW © (22.12.11 14:23) [111]
Если важно знать номер итерации, то do n time не подходит, конечно.
Кстати, в некоторых языках есть одновременно 2 for:
1) for(i in list) - перебирает индексы, то есть в i записывается индекс и поэтому внутри цикла можно обратиться к list[i] или даже list[i] = anotherList[i]
2) for each(item in list) - перебирает сами элементы, то есть в item записывается list[i]
← →
Rouse_ © (2011-12-22 14:36) [114]
> DiamondShark © (22.12.11 13:53) [109]
>
>
> > Rouse_ © (22.12.11 11:14) [89]
>
> "Иван Василич, когда вы говорите, такое впечатление, что
> вы бредите" (Ц).
"Циля, закройте рот с той стороны" (Ц).
Речь шла за то, что поведение реализованного кода может меняться, причем в том числе и по желанию программиста, на что и был дан пример. Что собственно сродни и использованию стороннего компилятора, который может рассчитывать параметры не стой стороны, бо не стандартизировано.
← →
Romkin © (2011-12-22 14:36) [115]
> В отличие от среднего языки А и В реально существуют. Это
> Паскаль и АВАР.
как насчет такой середины?
for i in range(1, n+1):
...
for i in a:
if (a[i].fld1 == "a") and (10 <= a[i].fld2 <= 20):
a[i].fld3, a[i].fld4 = 0, " "
← →
Kerk © (2011-12-22 14:37) [116]
> 1) for(i in list) - перебирает индексы, то есть в i записывается
> индекс и поэтому внутри цикла можно обратиться к list[i]
> или даже list[i] = anotherList[i]
> 2) for each(item in list) - перебирает сами элементы, то
> есть в item записывается list[i]
Это уже шаг в сторону перла :)
← →
Romkin © (2011-12-22 14:40) [117]НУ вот, фигню написал :(
for x in a:
if (x.fld1 == "a") and (10 <= x.fld2 <= 20):
x.fld3, x.fld4 = 0, " "
← →
euru © (2011-12-22 14:42) [118]
> OW © (22.12.11 14:23) [111]
> наверное потому, что не вижу переменную цикла. т.е. цикл
> получается по-любому выполняется N раз.
"Ты суслика видишь?" - "Нет." - "А он есть."
Внутри каждого цикла ведётся системная переменная sy-index, хранящая номер текущей итерации. При чём это значение можно легально изменить, не прибегая ни к каким ассемблерным вставкам, и это значение будет действительным до следующей итерации.
Единственный недостаток - это если имеются вложенные циклы, и во внутреннем цикле понадобится значение итератора внешнего цикла. Тогда для этих целей нужно заводить дополнительную переменную, в которую будет копироваться значение итератора внешнего цикла.
← →
Ega23 © (2011-12-22 14:49) [119]
> Но мы-то обсуждаем "for .. do" vs "do ... times".
Так цимес-то в том, что нет такой необходимости.
Давайте тогда вводить все команды на все случаи жизни.program AvtoShema;
begin
ZdelayTakChtobyAvtoShemaRabotalaHoroshoIBezGlukov;
end.
← →
euru © (2011-12-22 15:00) [120]
> Андреевич (22.12.11 14:30) [112]
> она лучше пока не нужен i в теле цикла
> Компромисс © (22.12.11 14:32) [113]
> Если важно знать номер итерации, то do n time не подходит, конечно.
Номер итерации хранится в системной переменной, значение которой доступно внутри цикла и содержит номер текущей итерации (см. [118]).
Страницы: 1 2 3 4 5 6 7 вся ветка
Форум: "Прочее";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];
Память: 0.7 MB
Время: 0.021 c