Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
8-1219132442
young
2008-08-19 11:54
2012.04.29
Как увеличить картинку bmp без потери качества


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


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


2-1325752586
Anthony
2012-01-05 12:36
2012.04.29
Вопрос о передаче фокуса элементу


15-1324556838
OW
2011-12-22 16:27
2012.04.29
Быдлокодером в Питере, продержаться пару-тройку месяцев реально?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский