Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1193824197
Jeer
2007-10-31 12:49
2007.12.02
Утилиты, макросы


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


15-1194098943
Ya
2007-11-03 17:09
2007.12.02
Как создавать портабельные программы?


2-1194691236
piwi
2007-11-10 13:40
2007.12.02
Round


4-1179585869
alex1961
2007-05-19 18:44
2007.12.02
Windows server 2003 setvice pack 2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский