Добрый день!
Есть в 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 (это я образно, а не буквально)...
Где на русском почитать про нетипичные операторы?
Модератор: Модераторы
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 раз.
Чего то куда-то не туда ссылка
Чего то куда-то не туда ссылка
Поправил.
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?
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;
бывает тяжело читаемым.
облегчил...
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Seenkao писал(а):облегчил...
да уж...
Буквально только что обнаружил, что в FPC-3.2.0 уже имеется генерик TNullable<T>(в модуле Nullable, кто бы подумал) и генерик IfThen<T>(в модуле SysUtils).
