Аналог сишного оператора ? :
Модератор: Модераторы
Аналог сишного оператора ? :
В C-подобных языках можно подставлять в выражениях аргументы в зависимости от условий, типа a < b ? C : D.
Есть ли в freepascal какой-то аналог? Кто-то интересовался?
Есть ли в freepascal какой-то аналог? Кто-то интересовался?
Нет. Инлайн функции IfThen совершенно не то.
viewtopic.php?f=1&t=6228
viewtopic.php?f=1&t=6228
Да ifthen не подходит
....
Вообще мне не очень нравится как выглядит этот оператор в C ибо бывает напишешь что-то типа , удобно, но через пол года возвращаешься к этому коду и долго думаешь как-же оно работает.
Но сейчас нужно сделать какой-то аналог для своего интерпретатора, поскольку он используется для создания html шаблонов - короткие выражения там важны, но нужно чтоб были интуитивно понятными.
Думал сделать типа
c if a < b else f1 and f2 or fe1 if x > b else fc1;
то есть поставить условие в центре, так легче понять ветвления
c if a > b else d
Вообще мне не очень нравится как выглядит этот оператор в C ибо бывает напишешь что-то типа
Код: Выделить всё
a < b ? (d > a && z || b : a - b) : a && f1 && f2 || b = a ? f3:f4;Но сейчас нужно сделать какой-то аналог для своего интерпретатора, поскольку он используется для создания html шаблонов - короткие выражения там важны, но нужно чтоб были интуитивно понятными.
Думал сделать типа
c if a < b else f1 and f2 or fe1 if x > b else fc1;
то есть поставить условие в центре, так легче понять ветвления
c if a > b else d
А не проще для операций сравнения написать несколько функций?
Зачем много функций? Можно обойтись одним дженериком, но проблема в том что и в том и в другом случае исполняются все операнды, а должно исполняться только два и то как правило не полностью.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
а для реализации надо-то только макросы с параметрами....
Макросы тут не помогут, поскольку условие должно проверяться вовремя исполнения, а не перед компиляцией.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
carrots писал(а):, удобно, но через пол года возвращаешься к этому коду и долго думаешь как-же оно работает.
А зачем самому себе проблемы делать?
Почему не пользоваться старым добрым if then else?
И стандартно, и читаемость выше, и через пол года не забудешь, что написал.
PS
Только вот не надо флейм об экономии времени набора конструкции... Это будет просто смешно...
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
экономия строчек и DRY ^_^
против
а насчет макроса - если бы было что-то вроде:
та же конструкция выглядела бы как
Код: Выделить всё
var param = (object.value?object.value:"нет значения")
против
Код: Выделить всё
If assigned(object.value) Then
param := object.value
Else
param := 'нет значения';
а насчет макроса - если бы было что-то вроде:
Код: Выделить всё
{$define MIfThen :=
if ($1) Then $0 := $2 Else $0 := $3;}
та же конструкция выглядела бы как
Код: Выделить всё
MIfThen(param, Assigned(object.value), object.value, 'нет значения');
Сейчас как, холивар начнётся:D
alexs писал(а):Почему не пользоваться старым добрым if then else?
И стандартно, и читаемость выше, и через пол года не забудешь, что написал.
PS
Только вот не надо флейм об экономии времени набора конструкции... Это будет просто смешно...
Делать себе неприятности конечно не хочется, вопрос в том как сделать чтоб сохранить удобность но при этом чтоб было интуитивно понятно.
Оффтоп:
Терпеть не могу всякие сокращения! Особенно, если ковыряешься в чужом коде! Ох уж эти Си'шники - повбывав бы всих
Терпеть не могу всякие сокращения! Особенно, если ковыряешься в чужом коде! Ох уж эти Си'шники - повбывав бы всих
