LINUX.ORG.RU

а как вы инициализируете переменные

 


1

4

Я тут пишу примеры на питоне, но все о чем я говорю подходит и для других языков. Темя пятничная, поэтому комментарии о том, что в вашем любимом языке вообще нет операции присваивания думаю будут вполне уместны. Своих комментарии пока давать не буду, только номера

1.

if 'direct-dial' in menu_cfg and menu_cfg['direct-dial']:
    max_digits = 4
else:
    max_digits = 1
2.
max_digits = 1
if 'direct-dial' in menu_cfg and menu_cfg['direct-dial']:
    max_digits = 4
3.
max_digits = 4 if 'direct-dial' in menu_cfg and menu_cfg['direct-dial'] else 1
Впринципе еще можно через исключения, по принципу попробуй как хочешь, а если не получится, то сделай по умолчанию. Но изза того, что я специально выбрал двусоставное условие код выглядит совсем не очень.

★★

Темя пятничная

В моем языке это

MOV REGIST00 DEADBEEF

anonymous
()

Если условие коротенькое, то использую "?:", иначе вариант №1.
C++

Gvidon ★★★★
()

Я за второй вариант, потому что он более наглядный. И если тебе нужно закомментить 2-ю и 3-ю строчки с if-ами в тестовых целях, то в этот момент ничего не сломается.

justAmoment ★★★★★
()
if 'direct-dial' in menu_cfg and menu_cfg['direct-dial']:

я думаю можно сократить до:

if menu_cfg.get('direct-dial'):

conformist ★★★
()

голосую за номер 2

moot ★★★★
()

Что это за магические числа?

winlook38 ★★
()

Python тыкаю месяца 2, не все тонкости знаю, поэтому я за 1 вариант

garik_keghen ★★★★★
()

Ну, по-разному... Обычно 3.

FIL ★★★★
()

За 2-ой.

1 - не наглядно прятать создание переменной внутри if/else.

2 - очень наглядно появление переменной. чем проще воспринимается код тем он более надёжней и меньше багов.

3 - смешивание создания переменной и if. каша.

stalkerhouse
()

1 и 3 — почти те же яйца только в про^Wодну строчку.

Вариант 2 хуже, поскольку происходит присваивание, потом проверка условия, и если оно истинно, то ещё одно присваивание, то есть, два присваивания вместо одного.

А само условие следовало записать как if menu_cfg.get("direct-dial"), тогда третий вариант получается не такой длинный и гораздо более читаемый:

max_digits = 4 if menu_cfg.get("direct-dial") else 1

И именно его я бы и использовал.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 4)

Вот это вызывает довольно противоречивые чувства:

max_digits = 4 if 'direct-dial' in menu_cfg and menu_cfg['direct-dial'] else 1
Вроде и читается как английский, но что-то не то. Видимо, я старею.

Я бы использовал питоновский «тернарный оператор»:

max_digits = ('direct-dial' in menu_cfg and menu_cfg['direct-dial']) and 4 or 1

alix ★★★★
()
max_digits = menu_cfg.get('direct-dial', False) and 4 or 1
uralbash
()

что в вашем любимом языке вообще

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

myvar = if(foo, bar, baz)
filequest
()

1-й вариант в C++ работает? Казалось что переменная вываливается из области видимости... А в Python это работает, да.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от alix

Я бы использовал питоновский «тернарный оператор»:

Тернарный оператор в питоне это и есть тот самый убогий if ... else. Твой вариант может давать неожиданный результат если вместо явных литералов использовать переменные и в них случайно окажутся значения кастуемые в False.

mashina ★★★★★
()
from settings import MAX_DIGITS
Goury ★★★★★
()
(setf max-digits
      (if (member 'direct-dial menu-cfg)
        4
        1))
poe
()

2.

все о чем я говорю подходит и для других языков

Не во всех языках function-level scope и, как следствие, первый вариант не везде будет работать.

Deleted
()

Вначале функции использую оператор dim для определения всех переменных и массивов. Если переменная глобальна для экземпляра класса, то использую public или private.

rezedent12 ☆☆☆
()

direct_dial = 'direct-dial' in menu_cfg and menu_cfg['direct-dial']

А лучше вынести в отдельный метод.

max_digits = direct_dial ? 4 : 1

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

Зависит от того, продаете вы или покупаете.

А вообще, плюсую вариант анонимуса выше.

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

Креативно, но с if ... else и писать удобнее и быстрее должно быть.

conformist ★★★
()

Хы, использую все три в зависимости что лучше смотрится. Обычно третий слишком длинный и выбивается из общего кода.

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

Это просто от непривычки. А вообще, конечно max_digits = if('direct-dial' in menu_cfg and menu_cfg['direct-dial'], 4, 1) рулит. Но пистон так не могЁт.

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

3 - смешивание создания переменной и if. каша.

3 - это реализация тернарного оператора в Python. Если тебе не нравится тернарный оператор — так и пиши.

Virtuos86 ★★★★★
()
(let [max-digits (if (:direct-dial menu-cfg) 4 1)]
...)
Debasher ★★★★★
()

Тогда уж...

max_digits = [1,4][int('direct-dial' in menu_cfg and bool(menu_cfg['direct-dial']))]
border-radius
()

а вообще такой ситуации впринципе быть не должно
например у нас может быть зашитый дефолтный конфиг в котором уже точно есть все используемые параметры и он овверайдится пользовательским

Debasher ★★★★★
()
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от Novel

присваивание дорого нынче в питоне?

Нет. Но это хоть какой-то аргумент для осла перед двумя одинаковыми кучами сена. Иногда в принятии решения из почти равных вариантов имеет значение и совсем малозначимый аргумент.

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

Обычно чем больше в голове аутизма, тем больше подобных аргументов приходится анализировать. Каков решающий аргумент в выборе между кока колой и пепси?

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

На самом деле, основная мудрость не в том, чтобы делать оптимальный выбор, а в том, чтобы забить на этот выбор, не думать вообще о подобном говне, пока не упрешься в конкретную проблему.

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

Да. В clean code (java) кстати тоже про это топят.

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

Как в 2 не делай - это говно.

А почему? Из-за двойного присваивания, как выше сказали, или причина в чём-то ещё?

beresk_let ★★★★★
()
[1,4][bool(menu_cfg.get("direct-dial"))]
anonymous
()
Ответ на: комментарий от quantum-troll

За то этот позволит за неделю - две сделать готовое решение и отправить его в продакшн :)

(Естественно все зависит от задачи. Я представляю себе задачу - веб сервис, а ты?)

deterok ★★★★★
()
try:
    menu_cfg['direct-dial']
    max_digits = 4
except:
    max_digits = 1

#

max_digits = 1*bool(menu_cfg.get('direct-dial')) or 4
anonymous
()
Ответ на: комментарий от beresk_let

Как в 2 не делай - это говно.

А почему?

Потому что вместо конструкции «инициализация или „выбор значения“ мы получаем „значение по умолчанию, которое изменяется при некоторых условиях“.

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

На самом деле, обычно мысли, наиболее далёкие от объективной реальности, начинаются с «на самом деле» или «обычно». А тема пятничная.

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