Операторы в стиле C

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Операторы в стиле C

Сообщение Mr.Smart » 01.09.2011 13:23:58

vada вот эта конструкция не помешала бы.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Операторы в стиле C

Сообщение daesher » 01.09.2011 15:18:41

Ask писал(а):
daesher писал(а):конструкции вида PByte(a)[3] вместо PByteArray(a)^[3]

Арифметика с указателями -- это, конечно, зло (хотя в последней версии сделали немного удобнее),
но в данном конкретном случае не вижу разницы -- range check что так, что этак бесполезен,
а визуально первый вариант даже приятнее.

Визуально он короче, но выглядит менее осмысленно. Вдумайтесь: третий элемент массива, который на самом деле не массив, а указатель на байт. Где здесь логика языка Паскаль? Я, конечно, понимаю, что в С так принято, но при чём здесь Паскаль? Думаю, такие вещи надо сопровождать Warning: poor Pascal code.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Операторы в стиле C

Сообщение alexs » 01.09.2011 20:08:11

Ask писал(а):Потому что глупо ставить целью дизайна языка "сделать не как в Си".

Вы абсолютно не правильно поняли суть наших высказываний.
Данные операторы не способствуют повышению читабильности исходного кода. Смысыл всех паскалеподобных языков в том, что они отчасти сами являются документацией. Т.е. максимально приближены к естественному языку. С в этом смысле гораздо хуже приспособлен для чтения исходных текстов.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Операторы в стиле C

Сообщение Ask » 01.09.2011 21:15:26

alexs писал(а):Вы абсолютно не правильно поняли суть наших высказываний.

Что и неудивительно, поскольку Я читал только их, а не ваши мысли :-)

Данные операторы не способствуют повышению читабильности исходного кода.

Читабельность, конечно, отчасти вопрос вкуса, но принцип DRY Я считаю объективным критерием.
Операторы сокращенного присваивания позволяют применить этот принцип в достаточно важном частном случае,
вот например как в этой строке из Lazarus:
Код: Выделить всё
FGraphPoints[i - FLoBound].X += AxisToGraphY(Source[i]^.YList[AIndex])

Я решительно утверждаю, что переписывать её в виде
Код: Выделить всё
FGraphPoints[i - FLoBound].X := FGraphPoints[i - FLoBound].X + AxisToGraphY(Source[i]^.YList[AIndex])

или
Код: Выделить всё
with FGraphPoints[i - FLoBound] do X  := X + AxisToGraphY(Source[i]^.YList[AIndex])

менее читабельно.
Более того, Я полагаю, что
x += 1 более читабельно, чем Inc(x), поскольку визуально выделяет оператор присваивания
в отличие от простого вызова функции. Конечно, это уже более субъективное мнение.

alexs писал(а):Смысыл всех паскалеподобных языков в том, что они отчасти сами являются документацией. Т.е. максимально приближены к естественному языку. С в этом смысле гораздо хуже приспособлен для чтения исходных текстов.

Смысл -- тоже понятие растяжимое, однако можно с достаточной степенью объективности утверждать, что все три вышеперечисленные утверждения неверны:
1) "Максимально приближенный к естественному языку" был Кобол, и, в меньшей степени, его современный наследник SQL.
В счастью, человечество быстро поняло, что языки, слишком близкие к естественному, снижают читабельность программ.
2) Действительно, для каждого конкретного программиста имеется наиболее комфортабельная плотность синтаксической информации на один символ. Существенное подмножество программистов предпочитает более низкую плотность Паскаля и Питона по сравнению с
более плотными Си и Перл. Однако, как я говорил, плотность -- это одно, а DRY -- совсем другое, значительно более важное свойство.
3) Меня вообще удивляют упорные попытки сравнивать (современный) Паскаль с Си. Такое ощущение, что аудиенция данного сайта обучалась программировать, когда Я обучался ходить :) Это сравнение было адекватным в 70'е годы, когда действительно был флейм между Виртом и K&R.
Object Pascal -- совершенно другой язык. Си предназначен для системного программирования, в то время как Object Pascal -- для прикладного. У этих языков практически нулевая область пересечения приложений (кроме, пожалуй, олимпиадных задач).
Лучшими сравнениями будет C#, как идеологический преемник, и Python, как идеологический аналог, хоть и интерпретируемый.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Операторы в стиле C

Сообщение files32 » 02.09.2011 07:24:52

Мне тоже более понятны += чем inc(). Это дела вкуса

Т.е. максимально приближены к естественному языку

Тогда конструкции нужно переводить так
x := x+2 // К иксу прибавляем два и записываем в икс.
x += 2 // К иксу добавляем два.

Разницу подсветил. И то и то выражение в русском языке являются допустимыми. Почему же их аналогии на паскале должны быть не допустимы?
files32
новенький
 
Сообщения: 24
Зарегистрирован: 27.10.2007 13:42:41

Re: Операторы в стиле C

Сообщение Maxizar » 02.09.2011 08:42:14

Думал не буду отвечать, но не сдержался :(

alexs - получает +1 в башню.

Мне тоже более понятны += чем inc().


Эээ вы это за правду.... операции вида += на самом деле раскрывают себя только в C++, при перегрузке операторов, спасая от создания копии аргумента и впринцыпе на этом все.

Теперь про теже указатели.
В паскале взятие адреса и разименоавние указателя даже обозночаются по разному (@, ^) тогда как в С только *.
Всегда привожу один и тот же пример сравнения адресов
Pascal
Код: Выделить всё
  (@A and @B)

C
Код: Выделить всё
(&A & &B)


Не ну правда, зачем вы себя мучаете пишите на С, зачем портить себя и свой мозг .... и ..... Pascal-ем.

PS. Я благодарен разрабам за то что они не допустили такое в Free Pascal.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Операторы в стиле C

Сообщение files32 » 02.09.2011 09:03:52

Не ну правда, зачем вы себя мучаете пишите на С, зачем портить себя и свой мозг .... и ..... Pascal-ем.

А не кто не мучается. Разрабам +1, что добавили такую возможность включать через директивы компилятора. Кому надо - пусть использует. Язык программирования должен быть для человека, а не наоборот.
files32
новенький
 
Сообщения: 24
Зарегистрирован: 27.10.2007 13:42:41

Re: Операторы в стиле C

Сообщение eastorwest » 02.09.2011 12:53:36

vada
А мне люто не хватает конструкции
Код: Выделить всё
a := (F?b:c);


Обратите внимание на модуль RTL.Math. В списке функций имеется ifthen( ), с помощью которой в FPC/Delphi ваша конструкция примет вид:
Код: Выделить всё
a := ifthen(F,b,c);
eastorwest
новенький
 
Сообщения: 57
Зарегистрирован: 23.07.2009 20:21:46
Откуда: Н-ск

Re: Операторы в стиле C

Сообщение Mr.Smart » 02.09.2011 12:58:57

eastorwest принять то она примет, но отработают оба параметра b и c. http://freepascal.ru/forum/viewtopic.php?f=1&t=6228
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Операторы в стиле C

Сообщение vada » 02.09.2011 15:26:02

Обратите внимание на модуль RTL.Math. В списке функций имеется ifthen( ), с помощью которой в FPC/Delphi ваша конструкция примет вид:


Ага. Шутку понял. Очень смешно.

Код: Выделить всё
var
  A,B: Integer;
  C: Real;
begin
  A := 1;
  B := 0;
  C := ifthen(B<>0,A/B,A);
end;
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Операторы в стиле C

Сообщение Timid » 02.09.2011 18:13:59

Не понимаю, в самом деле, Вы не понимаете, что "стиль" Паскаля - защищать программиста от случайных ошибок кодинга.
Посмотрите сами, практически нет ни одной конструкции, которая содержала бы "случайную" логическую ошибку, вроде
Код: Выделить всё
if (x=1) {}
вместо
if (x==1) {}


Вот пример для разбираемого случая:
Код: Выделить всё
x++=1

Есть здесь ошибка? Синтаксически - нет.
Попробуйте так же наколоться с inc()

PS.
Когда будете собирать проекты в сотни тысяч строк из кода десятка "недоделанных" проектов, поймете важность "случайных ошибок".
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: Операторы в стиле C

Сообщение alexs » 02.09.2011 22:28:24

Ask писал(а): Си предназначен для системного программирования, в то время как Object Pascal -- для прикладного.

:lol: :lol: :lol:
Это за вас так решила фирма одна не бес-известная. Я думаю не надо объяснять почему они в своё время перевели свои окошки с паскаля не с?
Ask
Я не буду приводить вашу цитату. Просто очень часто за красивыми выкладками о удобстве, скорости и т.д. и т.п. скрывается обыкновенная человеческая лень и надежда на авось (авось не будет ошибок, авось все данные будут верными).
Я не спорю - С сокращает нажатие кнопок на клавишах. Но оправдана ли тут эта цель?
Можно тоже приводить кучу таких примеров - но тема превращается в холивар. Надо закругляться.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Операторы в стиле C

Сообщение Mr.Smart » 03.09.2011 00:05:54

alexs судя современной традиции, все находятся в "анальном" рабстве упомянутой фирмы и это отрицают!
это было лирическое отступление....
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Операторы в стиле C

Сообщение alexs » 03.09.2011 01:28:18

Mr.Smart писал(а):все находятся в "анальном" рабстве упомянутой фирмы и это отрицают!

Хотелось бы, чтобы это было не так. Но финансовые вложения данной фирмы в продвижение своих продуктов таковы, что в нашей стране прочим компаниям честно конкурировать с ней просто без вариантов...
Мне очень бы хотелось в этом ошибаться, но слишком часто я с этим сталкиваюсь.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Операторы в стиле C

Сообщение Mr.Smart » 03.09.2011 01:40:49

alexs и не только в "нашей" стране :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru
cron