Где на русском почитать про нетипичные операторы?

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

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

Ответить
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Где на русском почитать про нетипичные операторы?

Сообщение VirtUX »

Добрый день!
Есть в fpc ряд нетипичных операторов, например:
i+= 1;
s:= i.ToString;

Где можно посмотреть весь список нетипичных возможностей?
И есть-ли что-то похожее на:
i = (x < 0) ? y : z; (Java, PHP)
Сейчас делаю в некоторых ситуациях так:
i:= BoolToStr(x < 0, y.ToString, z.ToString).ToInteger;
так как:
if (x < 0) then i:= y else i:= z;
бывает тяжело читаемым.
Еще придумать замену:
try i:= y except i:= 0 end;
на что-то типа:
i = y ?? 0; (PHP)
тоже частая ситуация невозможности 100% предугадать инициализирована-ли y (это я образно, а не буквально)...
Аватара пользователя
Pavia
постоялец
Сообщения: 290
Зарегистрирован: 07.01.2011 11:46:51

Сообщение Pavia »

i+= 1;

http://freepascal.ru/download/book/doc_ ... ments.html
s:= i.ToString;

Читать про классы хэлперы
http://freepascal.ru/download/book/doc_ ... lpers.html
И есть-ли что-то похожее на:
i = (x < 0) ? y : z; (Java, PHP)

Функция IfThen из модуля Match
https://www.freepascal.org/docs-html/rt ... fthen.html
https://stokito.blogspot.com/2011/09/delphipascal.html

try i:= y except i:= 0 end;

if Assegned(y) then i:=y else i:=nil;

i = y ?? 0; (PHP)

i:=StrToIntDef(y,0); - из модуля strUtils;
Другие функции
https://www.freepascal.org/docs-html/rt ... dex-5.html
Для получения контекстной подсказки начинаем писать нажимаем ctrl+<пробел>

name:= ifThen(_Get['name'],'' ,'nobody')

name:=_Get['name'];
if name ='' then name:='nobody';
Последний раз редактировалось Pavia 02.07.2020 20:24:05, всего редактировалось 1 раз.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Pavia писал(а): s:= i.ToString;


http://freepascal.ru/download/book/doc_ ... ments.html


Чего то куда-то не туда ссылка
Аватара пользователя
Pavia
постоялец
Сообщения: 290
Зарегистрирован: 07.01.2011 11:46:51

Сообщение Pavia »

Чего то куда-то не туда ссылка

Поправил.
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Pavia писал(а):Функция IfThen из модуля Match

С выходом FPC3.2.0 можно сделать обобщённую функцию IfThen

Код: Выделить всё

...
generic function IfThen<T>(aCond: Boolean; const aOnTrue, aOnFalse: T): T; inline;
...
generic function IfThen<T>(aCond: Boolean; const aOnTrue, aOnFalse: T): T;
begin
  if aCond then exit(aOnTrue);
  Result := aOnFalse;
end;

Но суррогат получается все равно неполноценный.
VirtUX писал(а):Еще придумать замену:
try i:= y except i:= 0 end;

Посмотреть в сторону LGenerics/TGOptional?
Seenkao
энтузиаст
Сообщения: 567
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

VirtUX писал(а):i+= 1;

дебильная фразировка никогда не нравилась. И видимо ни когда не пойму, почему люди за ней гонятся.
Inc(i); используйте для целых чисел.
Pavia писал(а):Читать про классы хэлперы

VirtUX писал(а):Сейчас делаю в некоторых ситуациях так:
i:= BoolToStr(x < 0, y.ToString, z.ToString).ToInteger;
так как:
if (x < 0) then i:= y else i:= z;
бывает тяжело читаемым.

облегчил... :lol: :lol: :lol:
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Seenkao писал(а):облегчил...

да уж... :mrgreen:
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Буквально только что обнаружил, что в FPC-3.2.0 уже имеется генерик TNullable<T>(в модуле Nullable, кто бы подумал) и генерик IfThen<T>(в модуле SysUtils).
Ответить