Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тернарная операция 
V
    Опции темы
Pawl
Дата 2.10.2012, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Уважаемые форумчане, столкнулся с программой на С++, которая на входе получает 3 числа и меняет местами первое число с максимальным. Вот она:
Код

#include <stdio.h>

int main(void)
{
    int a, b, c;
    scanf("%d %d %d",&a,&b,&c);
    a=((b>=a)&&(b>=c)) ?
        a=a+b, b=a-b, a-b :
    (c>=a)&&(c>=b) ? a=a+c, c=a-c, a-c : a;
    printf("%d\ %d\ %d\n",a,b,c);
    scanf("\n");
}

Я удивился, какой гибкой в С++ может быть тернарная операция. Скажите, можно ли таким образом извратиться и в java?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Stolzen
Дата 2.10.2012, 11:23 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Нет, запятыми несколько операторов в тернарной операции разделять нельзя. 
По мне, это не гибкость - это нечитаемое мессиво. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Адриано
Дата 2.10.2012, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.9.2012

Репутация: нет
Всего: нет



Pawl, интересный пример, спасибо.

Такой вопрос к форумчанам. Как раз по поводу применимости и читаемости тернарной операции. 

Я сталкивался с двумя крайними мнениями по поводу читаемости кода. 

1. Кое-кто считает, что если он САМ пишет программу (а не, допустим, в команде программистов), то и исходный код должен быть понятен только ему САМОМУ. И то, я так понимаю, с трудом. С/С++ для этого даёт большой простор. Как и Java, да и где угодно можно непонятно и запутанно написать.

2. Писать надо максимально понятно и читаемо. Такие люди не только тернарную операцию не любят использовать, но даже if -else, точнее else. Лучше написать несколько if
Потому что даже свою собственную программу уже через каких-нибудь несколько месяцев в подробностях не помнишь. Тем более через несколько лет. И чтобы прочитать и понять собственное творение, если оно сложнее, чем "Hallo, world", иногда требуется значительное 
время. Время, куда большее, чем потребовалось бы на написание комментариев и упорядочивание кода, тогда когда писал, -- на свежую голову, по свежей памяти.

А как вы думаете?
Хотелось бы для себя выработать правила. Исходя, конечно, из каких-то разумных аргументов. А то я на эту тернарную операцию посматриваю, и не могу понять для себя, -- стоит ли её применять на практике. Или это способ повыделываться, почудить, типа показать свою необыкновенность программерскую. "Для форсу бандитского" (с)  smile 

Это сообщение отредактировал(а) Адриано - 2.10.2012, 12:56
PM MAIL   Вверх
baldina
Дата 2.10.2012, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(Адриано @  2.10.2012,  12:51 Найти цитируемый пост)
Или это способ повыделываться, почудить, типа показать свою необыкновенность 

это способ сделать что-то, недоступное другими средствами.
тернарная операция - выражение, и может применяться везде, где допустимо выражение, в отличие от if/else.
Код

(pred ? x : y) = value;

Код

foo (cond ? x : y);


PM MAIL   Вверх
Pawl
Дата 2.10.2012, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(Stolzen @  2.10.2012,  11:23 Найти цитируемый пост)
Нет, запятыми несколько операторов в тернарной операции разделять нельзя.

А вообще, несколько операторов использовать можно?
Цитата(Stolzen @  2.10.2012,  11:23 Найти цитируемый пост)
По мне, это не гибкость - это нечитаемое мессиво.

Ну, да. Просто тут код плохо отформатирован.
Код

#include <stdio.h>

int main(void)
{
    int a, b, c;
    scanf("%d %d %d",&a,&b,&c);

    a = ( b>= a) && (b >= c) ? a = a + b, b = a - b, a-b :
    (c >= a) && (c >= b) ? a = a + c, c = a - c, a - c : a;

    printf("%d\ %d\ %d\n", a, b, c);
    scanf("\n");
}

Так лучше?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Stolzen
Дата 2.10.2012, 15:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(Pawl @  2.10.2012,  15:48 Найти цитируемый пост)
Так лучше? 

Нет smile


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Mirkes
Дата 12.10.2012, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



А в Java существует аналог этого оператора?


--------------------
Mirkes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0865 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.