Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

Кто что думает?   Найти похожие ветки 

 
Zeqfreed ©   (2007-06-03 16:49) [40]

Недели софистики с Юрием Зотовым на Дельфимастере :)


 
TUser ©   (2007-06-03 16:50) [41]

> Да. И что?

Некто считает, что в распространенном случае Си понятнее. Вы привели в качестве контраргумента пример нечитаемого кода на Паскале. Но кода, который практически никому никогда не пригодится. Так что контрпример хромает, имхо. Мало ли странностей можнео создать на любом языке. Давайте сравнивать одинаковые по распространенности конструкции. Увеличение значения переменной - одна из них. На мой взгляд конструкция
a := a + b // присводить а сумму текущих значений а и b
менее понятна, чем
a += b // увеличить а на величину b
Она длинее и плохо переводится в человеческий язык (мой перевод приведен в комментариях). Поэтому я использую
inc (a, b)

:)


 
Alx2 ©   (2007-06-03 16:55) [42]

Судя по всему, встроенные inc и dec - тоже туманны и опасны.

>Kostafey ©   (03.06.07 16:48)

Скорее, способ мышления.
Мне составные
<op>=
нравятся.

Нисколько при разборе не вгоняет в ступор. Конечно, если остальное тоже сразу понятно :)


 
Юрий Зотов ©   (2007-06-03 17:03) [43]

> TUser ©   (03.06.07 16:50) [41]

Если плохочитаемая конструкция к тому же еще и распространена - то что же сильнее хромает?

Насчет a += b: вот как раз ЭТА запись на ЧЕЛОВЕЧЕСКИЙ язык переводится ПЛОХО. Потому что на ЧЕЛОВЕЧЕСКОМ языке должно быть ДВА слагаемых, а здесь одно из них - НЕЯВНОЕ. А в записи a := a + b все явно и привычно даже пятикласснику.

Еще - попробуйте ошибиться и случайно поменять знаки местами: a =+ b. Среди сотен строчек кода. Веселая жизнь гарантирована. И попробуйте сделать такую же ошибку на Паскале - не получится.


 
ferr ©   (2007-06-03 17:05) [44]

Я вам завидую..
Искренне спорить на тему что лучше a += b или a = a + b. Класс!


 
Kostafey ©   (2007-06-03 17:09) [45]

Одним словом, как ни крути, Pascal - forever ! ;)


 
homm ©   (2007-06-03 17:11) [46]

> Насчет a += b: вот как раз ЭТА запись на ЧЕЛОВЕЧЕСКИЙ язык
> переводится ПЛОХО. Потому что на ЧЕЛОВЕЧЕСКОМ языке должно
> быть ДВА слагаемых, а здесь одно из них - НЕЯВНОЕ.

Увеличь а на б. Где здесь непереводимость?


 
Юрий Зотов ©   (2007-06-03 17:16) [47]

> homm ©   (03.06.07 17:11) [46]

А где здесь "увеличь а на б"?

Читаем: "а плюс <неизвестно_что> равно b". Где здесь "увеличь а на б"?

Чисто искусственная запись, без всякого человеческого смысла.


 
Eraser ©   (2007-06-03 17:20) [48]

> [47] Юрий Зотов ©   (03.06.07 17:16)

для пятиклассника a = a + b тоже "Чисто искусственная запись, без всякого человеческого смысла" :o)

a += b дело привычки, раньше тоже плевался, а как на php поработать пришлось, так через месяцок привык, ко всему привыкаешь :))


 
Alx2 ©   (2007-06-03 17:21) [49]

>Юрий Зотов ©   (03.06.07 17:16)

>Читаем: "а плюс <неизвестно_что> равно b". Где здесь "увеличь а на б"?

Вот парсер как-то с этим справляется однозначно.

Юрий, вас не устраивает именно запись "+="  как синоним "увеличить на"?


 
Johnmen ©   (2007-06-03 17:26) [50]


> homm ©   (03.06.07 17:11) [46]
> Увеличь а на б. Где здесь непереводимость?

Да всё переводится. Вот только а=а+б и переводить не надо.
И сквозь мозг, воспаленный си, пропускать тоже не требуется...:)


 
Alx2 ©   (2007-06-03 17:29) [51]

Вообще, зыбкая тема. Сродни религиозным.
Есть же возможность писать и на С++ "человечьим" языком. Только при нужде предохранители ставить рублем или администрацией.
Строгие рамки дает Pascal. С окончанием пеленочного роста программеру можно дать и бритву со всей ответственностью за ее использование.

Вот сейчас имеются в Delphi эксперименты над расширением синтаксиса. Недавно helper-ы обсуждали. Или та же перегрузка операций - вот чем они вызваны?


 
Юрий Зотов ©   (2007-06-03 17:30) [52]

> Alx2 ©   (03.06.07 17:21) [49]

> Вот парсер как-то с этим справляется однозначно.

Спасибо, но я и не сомневался. Только мы говорим о понятности для ЧЕЛОВЕКА, а не для парсера.

> вас не устраивает именно запись "+="  как синоним "увеличить на"?

Если речь идет обо мне лично, то все эти синтаксисы мне давно пофигу. Не раз и не два уже были случаи, когда садился - и с ходу писал программу на незнакомом языке. И без особых проблем, и все работало. Так что лично меня устраивает все. Даже Форт.

А если речь идет о сравнении самих языков, то я считаю, что понятнее тот язык, который ближе к человеческому. И что Паскаль к нему ближе, чем Си.


 
TUser ©   (2007-06-03 17:35) [53]

Для пятикласника символ := тоже очень непонятен. А еще ему непонятно, почему надо писать собака.


 
Alx2 ©   (2007-06-03 17:39) [54]

>Юрий Зотов ©   (03.06.07 17:30)

Спасибо. Согласен, конечно, что паскаль понятнее и строже.

Да, есть гораздо большая возможность допустить кучу ляпов на С++ труднообнаружимой небрежностью.  Но можно просто не давать детям опасные "игрушки", а вместо этого использовать хорошие стороны языка.
И доверить это делать зрелому и классному специалисту. :)


 
Johnmen ©   (2007-06-03 17:40) [55]


> TUser ©   (03.06.07 17:35) [53]

Откуда знаешь?


 
Юрий Зотов ©   (2007-06-03 17:42) [56]

> TUser ©   (03.06.07 17:35) [53]

Символ := означает ПРИСВАИВАНИЕ. Этот оператор так и называется - оператор ПРИСВАИВАНИЯ. И читать этот символ так и нужно: ПРИСВОИТЬ.

Поэтому запись a := a + b на "человеческий" язык переводится "в лоб". Прямо так, как она и пишется: "Присвоить переменной a значение суммы переменных a и b". Все очень просто, очень естественно и очень понятно.

Попробуйте так же "в лоб", просто, естественно и понятно перевести на "человеческий" язык запись a += b. Не получится. Потому что запись искусственная, "нечеловеческая".


 
Юрий Зотов ©   (2007-06-03 17:46) [57]

> Alx2 ©   (03.06.07 17:39) [54]
> Но можно просто не давать детям опасные "игрушки"

Можно. Но есть и еще один способ. Причем и гораздо более простой, и гораздо более безопасный - не ДЕЛАТЬ опасных игрушек.
:о)


 
Alx2 ©   (2007-06-03 17:46) [58]

Но ведь можно написать
a = a + b

только присваиванием здесь работает "=", которое, правда, воспитывалось как "равенство".


 
Alx2 ©   (2007-06-03 17:48) [59]

>Юрий Зотов ©   (03.06.07 17:46)

Да, тут не могу возразить. Но так скучно будет... :)


 
TUser ©   (2007-06-03 17:52) [60]

> Юрий Зотов

В порядке бреда. Вот мы же не говорим: "Добейся того, чтобы в емкости А было столько же воды, сколько сейчас в емкостях А и Б вместе." Мы говорим: "Перелей воду из Б в А."

Ждем какого-нибудь события, а оно не наступает. Мы говорим всегда: "Подождем еще час." Никто не говорит: "Мы ждем уже 9 часов. Будем ждать столько, чтобы время ожиданияв целом получилось равным 10 часам."

Если я еще не напился, то говрю себе: "Дай ка я выпью еще две бутылки водки." Мне и в голову не прирдет что-нибудь вроде: "Скока тама я уже вылакал? Три, не, пять, надодогнать до того, чтобы это вот плюс два было семь."

и т.д.


 
Anatoly Podgoretsky ©   (2007-06-03 17:58) [61]

> Alx2  (03.06.2007 17:21:49)  [49]

Да где же здесь увеличение, число сложить и сравнить


 
Kostafey ©   (2007-06-03 17:59) [62]

> [60] TUser ©   (03.06.07 17:52)

;)

Я в какой-то книжке читал, что в результате
a += b
будет сгененирован более оптимальный код, чем в результате
a = a + b

Это наверное от компилятора зависит ?


 
Alx2 ©   (2007-06-03 17:59) [63]

И все-таки, по моему опыту, на С++ часто получается меньше рутины, чем для аналогичных вещей на Паскале. Вопрос только в уместности использования инструментов.


 
Alx2 ©   (2007-06-03 18:01) [64]

>Anatoly Podgoretsky ©   (03.06.07 17:58)

Ой, забыл отметить. Я для синтаксиса С. И точка с запятой забыта в конце. :(


 
Юрий Зотов ©   (2007-06-03 18:02) [65]

> Alx2 ©   (03.06.07 17:46) [58]

> Но ведь можно написать
> a = a + b

Можно. И это было бы правльно. Потому что точно так же легко и понятно переводится на язык "человеческий".

Неправильно другое - то, что "нечеловеческая" конструкция a+=b вообще в языке допустима.

Учитывая, что символ = читается "присвоить", переведите "в лоб" с английского на русский две конструкции:
1. if <условие_справедливо> then a = <выражение_1> else a = <выражение_2>
2. a = <условие_справедливо> ? <выражение_1> : <выражение_2>

Первое перводится естественно и просто, даже без знания. языка. Второе "в лоб" не переводится вообще никак, нужно знать условности языка.


 
Юрий Зотов ©   (2007-06-03 18:07) [66]

> Kostafey ©   (03.06.07 17:59) [62]

> Это наверное от компилятора зависит ?

Естественно. Только от него, и ни от чего другого. Входной язык здесь вообще ни при чем.


 
Anatoly Podgoretsky ©   (2007-06-03 18:07) [67]

> Alx2  (03.06.2007 17:46:58)  [58]

Ну в математике такое выражение не возможно, поэтому в более развитых языках и применены два оператор - сравнение и присваивание.
Человеческие языки позаботятся чтобы не было проблема, шаманские позволять применить вместо одного другое и не заметить этого.


 
Kostafey ©   (2007-06-03 18:08) [68]

> Учитывая, что символ = читается "присвоить", переведите
> "в лоб" с английского на русский две конструкции:
> 1. if <условие_справедливо> then a = <выражение_1> else
> a = <выражение_2>
> 2. a = <условие_справедливо> ? <выражение_1> : <выражение_2>
>
> Первое перводится естественно и просто, даже без знания.
> языка. Второе "в лоб" не переводится вообще никак, нужно
> знать условности языка.


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

По читабельности - спору нет.


 
Anatoly Podgoretsky ©   (2007-06-03 18:09) [69]

> Kostafey  (03.06.2007 17:59:02)  [62]

Ты такие книжки более не читай


 
Gero ©   (2007-06-03 18:09) [70]

> [57] Юрий Зотов ©   (03.06.07 17:46)
> Можно. Но есть и еще один способ. Причем и гораздо более
> простой, и гораздо более безопасный &#151; не ДЕЛАТЬ опасных
> игрушек.

Тогда взрослые запаникуют — им с безопасными неинтересно.


 
Юрий Зотов ©   (2007-06-03 18:12) [71]

> Kostafey ©   (03.06.07 18:08) [68]

> По читабельности - спору нет.

А мы тут о чем, вообще, говорим-то? Начиная аж с [5].


 
Kostafey ©   (2007-06-03 18:13) [72]

> Ты такие книжки более не читай

Вот не могу вспомнить. Давно читал.
Возможно, это я вычитал в первом русском издании книжки страуса.
Но не уверен.


 
Petr V.Abramov   (2007-06-03 18:13) [73]

> Попробуйте так же "в лоб", просто, естественно и понятно перевести на "человеческий" язык запись a += b
а увеличить  на значение b :)


 
homm ©   (2007-06-03 18:14) [74]

> Попробуйте так же "в лоб", просто, естественно и понятно
> перевести на "человеческий" язык запись a += b. Не получится.

Юра, вы что-то уже совсем в спор увлеклись. Как так не получиться????
«а увеличить на б»


 
homm ©   (2007-06-03 18:17) [75]

К а прибавить б куда естественнее и понтнее для человека. Он видит, лежит 2 яблока, и ложит еще 3 рядом, он прибавил. По вашему он должен взять те два, потом еще 3 и потом положить обратно, туда где взял 2.


 
Юрий Зотов ©   (2007-06-03 18:17) [76]

> Petr V.Abramov   (03.06.07 18:13) [73]

Перевод не "в лоб", он придуман. В исходной записи нет символа, переводящегося как "увеличить". Есть символ, переводящийся как "сложить".


 
Kostafey ©   (2007-06-03 18:17) [77]

> > По читабельности - спору нет.
>
> А мы тут о чем, вообще, говорим-то? Начиная аж с [5].

На нет, тут спора быть не может. Pascal понятнее.
Единственное, что мне в нем не нравилось, так это работа с динамическими объектами.
Но это давно было.
С появлением object pascal исчезла и проблема.


 
Alx2 ©   (2007-06-03 18:17) [78]

>Anatoly Podgoretsky ©   (03.06.07 18:07)

Да, про математику хотел заикнуться тоже. Часто возникала проблема формульно описать присваивание. Вследствие чего искусственно уезжал на реккурентные соотношения.

Но ведь здесь другая формальная система. Есть непротиворечивая аксиоматика. Есть правила работы с ней. Другое дело, что много труднее сориентироваться в построении оптимальных с точки зрения восприятия вещей. Это минус. Но она (я про С++ в жен. роде :) ) включает как подмножество всю классику. Ничего нет такого на Паскале, что с такой же лаконичностью не выразилось бы на С++. Кроме двух досадных исключений: мне жутко нехватает множеств и вложенных функций с процедурами. Правда, с последними я более-менее освоился вложенными классами. Но все-равно остается нехорошее чувство.


 
homm ©   (2007-06-03 18:18) [79]

> Перевод не "в лоб", он придуман. В исходной записи нет символа,
> переводящегося как "увеличить". Есть символ, переводящийся
> как "сложить".

Кто вам сказал??? += такое-же увеличить, как := присвоить.


 
Petr V.Abramov   (2007-06-03 18:19) [80]

> В исходной записи нет символа, переводящегося как "увеличить". Есть символ, переводящийся как "сложить".
есть символ "увеличить на". вот если б он записывался как "-:" - вот тогда действительно тяжко было б :)



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.062 c
15-1185396061
c0ddeR
2007-07-26 00:41
2007.08.26
Страшно жить.


1-1181888482
JanMihail
2007-06-15 10:21
2007.08.26
Смена иконки папки под Vista


1-1182243710
DrAndrew
2007-06-19 13:01
2007.08.26
Ошибка #10061 у IdHTTP1. Как исправить?


10-1136459207
Gear
2006-01-05 14:06
2007.08.26
OleVariabt и safearray of BSTRs


15-1185781382
@!!ex
2007-07-30 11:43
2007.08.26
Delphi глючит или я.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский