- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
func (svc *UserSvc) isEmptyName(name model.User_Name) bool {
if name.First.RU == "" {
if name.First.EN == "" {
if name.First.TR == "" {
if name.First.IT == "" {
if name.Last.RU == "" {
if name.Last.EN == "" {
if name.Last.TR == "" {
if name.Last.IT == "" {
return true
}
}
}
}
}
}
}
}
return false
}
HIV # 0
anon007 # 0 ⇈
phpBidlokoder2 # 0
anon007 # 0 ⇈
MAKAKA # 0
Автор нескалярные структуры данных еще не проходил?
Fike # 0 ⇈
anon007 # 0 ⇈
guest # 0 ⇈
Я не знаю го, потому напишу, например, на руби
anon007 # 0 ⇈
guest # 0 ⇈
Перевёл на JavaScript.
anon007 # 0 ⇈
Да и кто на JS пишет названия методов в стиле snake_case?
666_N33D135 # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
anon007 # 0 ⇈
gost # 0 ⇈
- enum languages {RU, EN, IT};
- #define LAST_LANG IT
+enum languages {RU, EN, IT, LAST_LANG};
guest # 0 ⇈
после cpp код выглядит так
или ты о том, что итерироваться надо до IT + 1?
bormand # 0 ⇈
guest # 0 ⇈
Надо не так
enum languages {RU, EN, IT, LAST_LANG};
а вот так
enum languages {RU, EN, IT};
#define LAST_LANG IT + 1
bormand # 0 ⇈
И там и там LAST_LANG == 3. Но обычно все пишут по гостовски.
> #define LAST_LANG IT + 1
#define LAST_LANG ((IT) + 1)
Когда уже заповеди макроёбства выучишь?
guest # 0 ⇈
что именно сломается?
bormand # 0 ⇈
Но в общем случае ты не знаешь, в каком контексте будет юзаться этот LAST_LANG. Может быть я захочу массив завести для переводчика и напишу LAST_LANG * LAST_LANG?
Поэтому expression-like макросы всегда, сука, ВСЕГДА, надо писать со скобками как вокруг каждого аргумента, так и вокруг всего выражения.
guest # 0 ⇈
то-то и оно. Пример-то шуточный.
если доебываться до всего, то там и char нельзя использовать (потому что там разные языки будут храниться) например
Впрочем, я согласен, что лучше иметь привычку всегда писать правильно. К сожалению, я пишу на сях раз в год, и потому делаю это хуёво.
Мне все равно не очень нравится вариант госта, потому что он портит семантику. Появляется какой-то ебанутый язык LAST_LANG. Что это за язык такой?
С другой стороны, он позволяет не указывать последний язык явно.
А можно как-то получить макс значение енума кроме как через такой хак?
bormand # 0 ⇈
Это наименьшее зло. Все так пишут, т.к. остальные варианты ещё хуже. В твоём варианте, к примеру, надо не забывать обновлять LAST_LANG когда новый язык добавляется.
> шуточный
С макросами не шутят. Риск залёта очень высокий. Уже на банальном LAST_LANG * LAST_LANG всё ломается.
guest # 0 ⇈
"А можно как-то получить макс значение енума кроме как через такой хак?"
нет.
Я верно понял?
>Риск залёта очень высокий.
Это я понимаю:)
Я как-то попытался взять указатель на функцию, а это была не функция, а макрос
bormand # 0 ⇈
guest # 0 ⇈
666_N33D135 # 0 ⇈
MAKAKA # 0 ⇈
bormand # 0 ⇈
1) Не пиши макросы
2) Если ты всё-таки решил запилить макрос, называй его капсом
3) Если ты используешь аргумент макроса, заключи его в скобки
4) Если ты пишешь expression-like макрос, оберни его в скобки
5) Если ты пишешь statement-like макрос, оберни его в do { ... } while (0)
666_N33D135 # 0 ⇈
#undef FALSE
#undef int
#undef main
#undef void
#undef return
...
guest # 0 ⇈
MAKAKA # 0 ⇈
Fike # 0 ⇈
Noodles # 0 ⇈
Так что ещё одно правило: надо точно помнить, во что раскрывается макрос, и стараться не передавать туда выражения с побочкой (еще как пример можно вспомнить макрос MAX).
gost # 0 ⇈
guest # 0 ⇈
в общем твой вариант ок, я зря доебался
666_N33D135 # 0 ⇈
MAKAKA # 0 ⇈
anon007 # 0 ⇈
Или brainfuck на худой конец....
bormand # 0 ⇈
KOPOHABuPYC # 0 ⇈
guest # 0 ⇈
anon007 # 0 ⇈
666_N33D135 # 0 ⇈
MAKAKA # 0 ⇈
anon007 # 0 ⇈
KOPOHABuPYC # 0 ⇈
Fike # 0 ⇈
по рубёвому надо `empty?`. сам долгое время ловил ворнинги от рубимайна.
guest # 0 ⇈
Fike # 0 ⇈
guest # 0 ⇈
лучше &&
Fike # 0 ⇈