Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.021 c
15-1193238690
Рекрутер
2007-10-24 19:11
2007.12.02
Программист-пенсионер - кто он?


2-1194425186
lobach
2007-11-07 11:46
2007.12.02
ListBox


3-1184680236
BlackCat
2007-07-17 17:50
2007.12.02
Помогите разобраться с запросом или кодом... голову сломал...


2-1194363691
dumka
2007-11-06 18:41
2007.12.02
DBImage


15-1193844179
antonn
2007-10-31 18:22
2007.12.02
регулярка