Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
ВнизFAR открыл исходники ! Найти похожие ветки
← →
wicked © (2007-10-31 15:18) [40]
> > усложняющая чтение кода
>
> а в чем усложение? наоборот - знак вопроса там можно рассматривать
> как приближение к человеческой речи
личное восприятие - после того, как глаз натыкается на "?", автоматически возвращаюсь влево и нахожу условие, потом прыгаю вправо и пробую найти границы двух выражений после "?"
и даже зная, что тернарный оператор имеет наинизший приоритет, стараюсь выражения заключать в скобки
но это лично моё восприятие - "не все приближения к речи одинаково полезны" :)
← →
wendy parkinson (2007-10-31 15:36) [41]Польза этого оператора в том, что он возвращает значение, в отличие от if.
"Salam Aleikum " + directory.get_user_initials("Djashmet") + ".\nCan you please send me a " + (directory.is_suspicious("Djashmet")? "post card": "gift") + "?\nThank you."
← →
ferr (2007-10-31 15:41) [42]#include <stdio.h>
#include <conio.h>
#include <math.h>
void main ()
{
int a = 1, b = 2, c = 3;
(a > 1 ? b : c) = 4;
printf("%d, %d, %d", a, b, c);
}
← →
wicked © (2007-10-31 16:03) [43]> ferr (31.10.07 15:41) [42]
> #include <conio.h>
> #include <math.h>
лишние
> int a = 1, b = 2, c = 3;
> (a > 1 ? b : c) = 4;
> printf("%d, %d, %d", a, b, c);
D:\temp>bcc32 ternary_test.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
ternary_test.c:
Error E2277 ternary_test.c 6: Lvalue required in function main
*** 1 errors in Compile ***
← →
wicked © (2007-10-31 16:05) [44]а вот так сработает
#include <stdio.h>
int main ()
{
int a = 1, b = 2, c = 3;
*(a > 1 ? &b : &c) = 4;
printf("%d, %d, %d", a, b, c);
return 0;
}
особенно хорошо это выглядит с ссылками на классы - тоже никаких звездочек ;)
← →
ferr (2007-10-31 16:07) [45]Ну так и знал что кто-нибудь сочтёт своим долгом докопаться. Воткнул в первый попавшийся шаблон, а шаблоном оказалась программа одного студента который просил меня проверить..
#include <stdio.h>
int main (void)
{
int a = 1, b = 2, c = 3;
(a > 1 ? b : c) = 4;
printf("%d, %d, %d", a, b, c);
return 0;
}
// gcc
← →
Anatoly Podgoretsky © (2007-10-31 16:50) [46]> wicked (31.10.2007 13:55:38) [38]
С запутанность легко бороться, путем создания функции IIF (на любом языке программирования, а если язык поддерживает вариаты, то еще и изящно)
← →
Anatoly Podgoretsky © (2007-10-31 16:52) [47]> clickmaker (31.10.2007 13:58:39) [39]
Смеешься, ну так попробуем перевести на человеческий язык
x = (a == b ? c : d);
Х присвоить а=b впорос c двоеточие d
Не лучше я пойду повешусь.
← →
homm © (2007-10-31 17:21) [48]> [47] Anatoly Podgoretsky © (31.10.07 16:52)
> Не лучше я пойду повешусь.
А лучше? Пойдете и повешаетесь?
Казнить нельзя помиловать.
← →
Anatoly Podgoretsky © (2007-10-31 19:55) [49]> homm (31.10.2007 17:21:48) [48]
Ну не вешаться же на рабочем месте.
← →
Бывалый (2007-11-01 02:08) [50]
> clickmaker © (31.10.07 13:39) [37]
>
> истинная красота кода возможна только в с++
>
> x = (a == b ? c : d);
Так лучше:if a = b then x := c
else x := d;
А можно так.function IfThen(const ab, c, d : Boolean): Boolean;
begin
if ab then Return c
else Return d;
end;
x := IfThen(ab, c, d);
Но обычные If и Then выделяются чёрным шрифтом, и поэтому хорошозаметны. А такая конструкция сливается с прочими вызовами функций, и можно незаметить, что здесь условие. Поэтому я вполне сознательно ею никогда не пользуюсь.
Символ ? в Си вообще не заметен на общем фоне, также как и скобки { }. Не язык, а тест на внимательность. Поэтому Си плох.
← →
Иа (2007-11-01 03:45) [51]
> С запутанность легко бороться, путем создания функции IIF
> (на любом языке программирования, а если язык поддерживает
> вариаты, то еще и изящно)
В такой самописной функции все параметры будут вычисляться, что зачастую неприменимо
сравни x != null ? x.Foo() : y.Bar() и IIF(x != null, x.Foo(), y.Bar())
← →
Джо © (2007-11-01 06:52) [52]> [51] Иа (01.11.07 03:45)
> сравни x != null ? x.Foo() : y.Bar() и IIF(x != null,
> x.Foo(), y.Bar())
Боже, какой ужас...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.044 c