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
Впринципе еще можно через исключения, по принципу попробуй как хочешь, а если не получится, то сделай по умолчанию. Но изза того, что я специально выбрал двусоставное условие код выглядит совсем не очень.

★★

Ответ на: комментарий от deterok

Второй вариант. Третий вообще противоречит pep20 пункту 3.

В том виде, как написан, может и противоречит. Но что такого сложного (что оно аж сложнее второго варианта) в

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

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

Все зависит от логики данного куска кода.

Если max_digits = 1 дефолтное значение и это подразумевается логикой программы, то тогда второй вариант.

Если max_digits =1 нельзя понимать как дефолт, то первый вариант предпочтительнее.

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

Питон не знаю, но поскольку условие достаточно сложное я бы сделал как-то так

bool is_direct_dial = menu_cfg.contains("direct_dial") && menu_cfg["direct_dial"];
int max_digits  = is_direct_dial ? 4 : 1;

Также 4 и 1 лучше вынести в константы


const int DEFAULT_MAX_DIGITS = 1;
const int DIRECT_DIAL_MAX_DIGITS = 4;

...

bool is_direct_dial = menu_cfg.contains("direct_dial") && menu_cfg["direct_dial"];
int max_digits  = is_direct_dial ? DIRECT_DIAL_MAX_DIGITS : DEFAULT_MAX_DIGITS;
ncuxer
()
Ответ на: комментарий от deterok

Видимо, кому как. Лично мне так читаемость больше.

Psych218 ★★★★★
()

Для инициализации переменной второй вариант только пэхэпист выберет разве (ну или упоротый). Выбор между тернарным оператором и оператором if для инициализации переменной – серьезный вопрос для development, ага...

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

Это как раз читается намного хуже

Я ж говорю, старею, наверное. Привык к int a = direct_dial ? 4 : 1

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