LINUX.ORG.RU

ruby: однострочный if


0

0

Надо в однострочный if впихнуть две команды. Без функций и прочей дряни, как в бейсике if ... then команда1 : команда 2. Руби так может? Причём разумеется чтобы обе команды выполнялись по этому if.

Уже по-всякому пробовал их отделять, в лучшем случае первая срабатывает всегда, а вторая уже по if.


Ларри заслуживает проклятья за эти концевые if-ы. И Матц, за то что идейку перенял. Древовидное представление структуры кода летит к чертям из-за этих выкрутасов.

Hjorn
()

За 2 команды в одной строке нужно бить (причем сильно) по рукам

PartyZan ★★★
()
Ответ на: комментарий от Hjorn

> Ларри заслуживает проклятья за эти концевые if-ы.

Если бы только ифы... unless и тем более for в конце совсем плохо читаются.

const86 ★★★★★
()
Ответ на: комментарий от Hjorn

> Ларри заслуживает проклятья за эти концевые if-ы. И Матц, за то что идейку перенял.

А мне нравится. Очень интуитивно и читабельно человеком.

tx
() автор топика
Ответ на: комментарий от tx

Если уж пользуешься таким if-ом, то не нужно больше одной операции - он за этим и придуман. В твоём случае надо пользоваться стандартной C-like конструкцией if(){some_code}

golodranez ★★★★
()
Ответ на: комментарий от golodranez

Кстати, Damian Conway в Perl Best Practices наглядно показывает, почему постфиксные конструкции - зло, и не рекомендуют их использовать ни для чего кроме return if, next if. Очень жаль, что Матц перетащил в Руби.

Hjorn
()
Ответ на: комментарий от UserUnknown

> иногда проще написать ...

Написать проще, а читать - "парсер" спотыкается. Ибо сначала мы видим безусловное выражение, а только в конце строчки замечаем, что оно на самом деле является ветвью и выполняется не всегда. Хорошо если выражение короткое и в конце if, а не unless или упаси бог for. В общем простор для экспериментов над читаемостью широкий открывается.

Hjorn
()
Ответ на: комментарий от Hjorn

Ещё раз повторюсь, это вопрос привычки. Люди, например знакомые с немецким или чешским языком знают, что двузначные числительные говорятся в обратной последовательности (drei und zwanzich). Или даже в английском что-то вроде 'i've found nothing' или даже 'He wants no more beer.' тоже тогда должно парсер ломать?:).

UserUnknown ★★★★★
()
Ответ на: комментарий от UserUnknown

Добавлю только, что две команды в однострочном if'е говорят о безобразной архитектуре и нет никакого оправдания для использовании такого способа. Тем более не понятна обязательность такой конструкции.

UserUnknown ★★★★★
()
Ответ на: комментарий от UserUnknown

Одно дело человеческий язык, а другое - формальный компьютерный. Я бы не хотел программировать логику на английском, не говоря уж более сложных языках. У нас и так уже есть Перл - попытка приблизиться к человеческому. Ничего особо хорошего не получилось.

Hjorn
()
Ответ на: комментарий от UserUnknown

> Тем более не понятна обязательность такой конструкции.

Объясняю - нужно было: переменнная1=X и переменная2=Y если переменная3=Z. Миллион таких строчек. X,Y,Z никак не связаны, не описываются одной формулой и тому подобное.

Меня бесит и раздражает такие вещи расписывать лесенкой if-end if. Ну неправильно это, ну нельзя так делать. Когда под условием пару килобайт кода - кто б спорил, а ради двух присвоений не хочу.

tx
() автор топика
Ответ на: комментарий от Hjorn

> У нас и так уже есть Перл - попытка приблизиться к человеческому.

На мой вкус перл это прямо противоположное. "Программирование на английском" это Руби, бейсик тот же самый, ещё какие-то языки, но никак не перл.

tx
() автор топика
Ответ на: комментарий от UserUnknown

QQ :)))

if 10 < 20: a=2; b=4; print "10 is less than 20 \n"; print a ; print "\n hello \n"; print b ; end

elipse ★★★
()
Ответ на: комментарий от tx

>Меня бесит и раздражает такие вещи расписывать лесенкой if-end if. Ну неправильно это, ну нельзя так делать. Когда под условием пару килобайт кода - кто б спорил, а ради двух присвоений не хочу.

ты не прав.

>Объясняю - нужно было: переменнная1=X и переменная2=Y если переменная3=Z. Миллион таких строчек. X,Y,Z никак не связаны, не описываются одной формулой и тому подобное.

Только if(3 == z) {1 = x; 2 = y;} и никак иначе, а вообще конечно извращениям нет предела:))

golodranez ★★★★
()
Ответ на: комментарий от Hjorn

> У нас и так уже есть Перл - попытка приблизиться к человеческому.
Прочтите, пожалуйста, $_ и все остальные специальные переменные перла. Перемежая с регулярными выражениями (не используя нецензурные). Желательно, с выражением и в лицах. Результат представьте в виде mp3.

svu ★★★★★
()
Ответ на: комментарий от svu

Да я в курсе, что получилась лажа. Но идеи контекстов, постфиксных выражений, той же переменной $_ кстати (читать её следует как it) - это всё следствие лингвистических задвигов Ларри. Почитайте первую главу Programming Perl, если не лень - там много рассуждается на тему естественных языков и их влияния на дизайн Перла.

Моё мнение - не годится естественный язык для программной логики. Вот конфиги, декларативные DSL'и - то другое дело. SQL - хороший пример, и то с ним есть проблемы - его трудно парсить и генерировать из-за излишней свободы.

Hjorn
()
Ответ на: комментарий от Hjorn

> Очень жаль, что Матц перетащил в Руби.

Очень хорошо, что Матц перенял это в Руби.

smh ★★★
()
Ответ на: комментарий от tx

>Объясняю - нужно было: переменнная1=X и переменная2=Y если переменная3=Z. Миллион таких строчек

Программирование методом копипаста -- зло и говнокод.

Я бы сделал словарик по значениям переменной3... Но я не рубист, могу не знать ваших best practices... ;)

anonymous4
()
Ответ на: комментарий от rubyhammer

> x,y=1,2 if z==3

Это мне не нравится даже больше, чем проверка равенства через == вместо =. Опять облегчают жизнь парсеру, а не человеку.

tx
() автор топика
Ответ на: комментарий от Deleted

>Самый ужасный язык, что мне когда-либо попадался…

Он декларативный, а потому надежный. То, что вы не привыкли писать в декларативном стиле не делает sql плохим. Да, немного грубовато, но накипело, простите.

dizza ★★★★★
()
Ответ на: комментарий от anonymous4

> Программирование методом копипаста -- зло и говнокод.

У меня некоторые скрипты на руби генерятся другими скриптами на руби. Я безнадёжен? :)

tx
() автор топика
Ответ на: комментарий от tx

ты не безнадежен, но те, кому придется поддерживать твой сгенерированный код, возжелают твей смерти

Pi ★★★★★
()
Ответ на: комментарий от tx

Безнадежен. Генерить файлы с исходниками на руби -- бред, того же самого можно добиться с использованием динамической природы языка.

anonymous4
()
Ответ на: комментарий от dizza

Он декларативный, ага. Вот SVG тоже декларативный и он мне куда более понятен, чем SQL. SQL ужасен :\

Deleted
()
Ответ на: комментарий от Deleted

И вот ещё что. Он весь из себя такой декларативный, но что бы составить эффективный запрос нужно постараться и вообще знать особенности реализации конкретной БД.

Deleted
()
Ответ на: комментарий от tx

Ну да. А присвоение тогда будет ":=", где-то приобретаем. Нра-не-нра это такое дело, главное кода мало и читабельно.

rubyhammer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.