Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.29;
Скачать: CL | DM;

Вниз

и чего дельфи хоронят?..   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.72 MB
Время: 0.035 c
2-1325418734
3asys
2012-01-01 15:52
2012.04.29
переход с Indy9 на Indy10


2-1325325305
Gu
2011-12-31 13:55
2012.04.29
очередность


2-1325688285
Scott Storch
2012-01-04 18:44
2012.04.29
обрезаются символы при назначении значения полю


15-1324623216
Faceless
2011-12-23 10:53
2012.04.29
информация об используемых библиотеках


15-1324593730
alexdn
2011-12-23 02:42
2012.04.29
Open source проект