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

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

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

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

Сообщение VirtUX » 02.07.2020 16:07:31

Добрый день!
Есть в 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 (это я образно, а не буквально)...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Pavia » 02.07.2020 20:45:41

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 21:24:05, всего редактировалось 1 раз.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

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

Сообщение SSerge » 02.07.2020 20:53:03

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


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


Чего то куда-то не туда ссылка
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

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

Сообщение Pavia » 02.07.2020 21:24:23

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

Поправил.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

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

Сообщение iskander » 03.07.2020 09:33:01

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?
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение Seenkao » 04.07.2020 04:59:04

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:
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение Снег Север » 04.07.2020 08:08:39

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

да уж... :mrgreen:
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение iskander » 24.09.2020 11:20:40

Буквально только что обнаружил, что в FPC-3.2.0 уже имеется генерик TNullable<T>(в модуле Nullable, кто бы подумал) и генерик IfThen<T>(в модуле SysUtils).
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34


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

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

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

Рейтинг@Mail.ru