Главная страница
    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.54 MB
Время: 0.049 c
15-1193493795
Denis__
2007-10-27 18:03
2007.12.02
Aнимация


2-1194335656
lobach
2007-11-06 10:54
2007.12.02
Explorer.exe - как его завершить???


15-1194180366
atruhin
2007-11-04 15:46
2007.12.02
Флейм. Отношение к Open Source компонентам.


1-1189580697
cantalia
2007-09-12 11:04
2007.12.02
Событие из DLL в Main Application


2-1194291948
ProgRAMmer Dimonych
2007-11-05 22:45
2007.12.02
Проблема с TFileStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский