0xd34df00d 16.07.2011 13:39 Azoth_primary

Пстачик, а как делаешь ты в такой ситуации: есть функция шифрования сообщения, которая должна вернуть непустой массив при успехе. В общем, два варианта:
1. Возвращаем bool насчет успеха + out-параметр.
2. Возвращаем пустой массив в случае неуспеха, в caller'е проверяем массив на пустоту.
Как делаешь ты?

1. magog 16.07.2011 13:39 Psi+

я такого типа обычно вторым способом рещаю

2. rman 16.07.2011 13:40 утюга

это очень сложно ?!

3. 0xd34df00dmagog /1 16.07.2011 13:40 Azoth_primary

Saemshit. А вот у нас с @octocat'ом дискуссия.

4. gelraen 16.07.2011 13:40 imax

1 вариант налагает меньше ограничений на входные данные

5. Rayslava 16.07.2011 13:40 Home

второе.

6. Minoru 16.07.2011 13:40 netbook

Maybe [String]. А если серьёзно, я бы предпочёл второе.

7. 0xd34df00dgelraen /4 16.07.2011 13:40 Azoth_primary

Схуя?

8. 0xd34df00dMinoru /6 16.07.2011 13:40 Azoth_primary

Ты квадратные скобки зря поставил, похоже )

9. Minoru0xd34df00d /8 16.07.2011 13:41 netbook

Я вообще зря указал там тип, надо было Maybe Message, а ты уж сам там разбирайся… :)

10. gelraen0xd34df00d /7 16.07.2011 13:41 imax

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

11. Rayslavagelraen /10 16.07.2011 13:42 Home

У вас плохое шифрование же!

12. 0xd34df00dgelraen /10 16.07.2011 13:42 Azoth_primary

Ты там rot13 чтоле юзаешь в качестве шифрования?

13. gelraenRayslava /11 16.07.2011 13:42 imax

што.

14. gelraen0xd34df00d /12 16.07.2011 13:42 imax

штоблять. вы тут все упоролись штоле?

15. 0xd34df00dgelraen /13 16.07.2011 13:42 Azoth_primary

Плохая музыка, очень плохая музыка.

16. 0xd34df00dgelraen /14 16.07.2011 13:43 Azoth_primary

Возможно, ты имел ввиду, что традиционные алгоритмы шифрования сохраняют нулевой элемент.

17. gelraen0xd34df00d /16 16.07.2011 13:45 imax

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

19. ulidtko 16.07.2011 14:50 lunatic asylum

3. бросаю исключение.

20. 0xd34df00dulidtko /19 16.07.2011 15:01 Azoth_primary

Питон-вей, хуле.

21. ulidtko0xd34df00d /20 16.07.2011 15:12 lunatic asylum

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

22. gelraenlHooFool /18 16.07.2011 15:22 imax

а if (encrypt(in, &out)) { кот; } не?

23. gelraenulidtko /19 16.07.2011 15:23 imax

двачую

24. 0xd34df00dgelraen /22 16.07.2011 15:24 Azoth_primary

Зачем? Ну и нужда сделать out неконстантным. А Я ЛЮБЛЮ CONST.

25. 0xd34df00dgelraen /23 16.07.2011 15:24 Azoth_primary

Все скриптоёбы такие упоротые?

26. gelraen0xd34df00d /25 16.07.2011 15:25 imax

это то, для чего и предназначены исключения и их обработка, ёпт. Не получилось зашифровать — а поче^Wхуйн^Wисключение. Бросили его вверх, а дальше кому надо обработали.

27. 0xd34df00dgelraen /26 16.07.2011 15:26 Azoth_primary

В данном случае вполне можно обойтись без исключений. Нахуй так жить?

28. gelraen0xd34df00d /24 16.07.2011 15:27 imax

const string ololo = encrypt(rofl); ?
ПРИШЛО ВРЕМЯ СКОНСТРУИРОВАТЬ ОБЪЕКТ
ОБЪЕКТ САМ НЕ СКОНСТРУИРУЕТСЯ
СКОНСТРУИРУЙ ЕГО ЕЩЁ РАЗ

29. 0xd34df00dgelraen /28 16.07.2011 15:28 Azoth_primary

const string& даже в данном случае почти наверняка.

30. gelraen0xd34df00d /27 16.07.2011 15:29 imax

это просто ты с плюсцами не привык к тому что исключения полезны (да и я ещё не привык, хуле)

31. ulidtko0xd34df00d /29 16.07.2011 15:29 lunatic asylum

примешивая к типу нерелевантные специальные значения, ты деляешь бяку имо.
Именно поэтому из двух предложенных вариантов я предпочёл бы bool и out-аргумент.

32. 0xd34df00dgelraen /30 16.07.2011 15:29 Azoth_primary

Полезны, они в плюсцах полезны, но зачем их юзать там, где без них точно так же неплохо?

33. ulidtko0xd34df00d /32 16.07.2011 15:41 lunatic asylum

понимаешь ли, писать в стиле
if(!try_do_something(...)) { handle_error(); }
if(!proceed_further(...)) { handle_other_error(); }
if(!you_got_the_point(...)) { handle_yet_another_error(); }

— это слишком низкоуровнево и приводит к полунечитаемому коду и идиотским интерфейсам функций (впрочем, без интегрированных в синтаксис tuples, обойтись без out аргументов становится и так тяжело). Так можно, и вообще даже нужно, писать в C. Но ведь плюсцы лучше, чем C!!!

Чем тебе не нравится интерфейс функции encrypt :: String → Maybe String, с той семантикой Maybe, что функция, возможно, бросит исключение? Это ведь, как отмечает @gelraen, позволяет писать удобно, без повсеместных семантически не нагруженных перепроверок.

34. 0xd34df00dulidtko /33 16.07.2011 15:42 Azoth_primary

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

35. ulidtko0xd34df00d /34 16.07.2011 15:45 lunatic asylum

для Maybe вполне себе есть.

36. 0xd34df00dulidtko /35 16.07.2011 15:46 Azoth_primary

Причем тут maybe? Мы щас про исключения же.

37. ulidtko0xd34df00d /36 16.07.2011 15:46 lunatic asylum

а причём тут монадическая структура? ._.

38. 0xd34df00dulidtko /37 16.07.2011 15:47 Azoth_primary

Чтобы >>= был разумным.

39. ulidtko0xd34df00d /38 16.07.2011 15:48 lunatic asylum

а он и есть, для исключений. Зафейлившееся вычисление биндуется с любым в зафейлившееся.

40. 0xd34df00dulidtko /39 16.07.2011 15:51 Azoth_primary

Хм, я тогда криво выразился весьма.

41. octocatMinoru /6 16.07.2011 15:51 emacs2FD4A853

Вот кстати да, Maybe было бы очень в тему.

42. werdn 16.07.2011 18:25

Возвращаю что положено, но бросаю эксепшен в случае неуспеха

43. ulidtkowerdn /42 16.07.2011 18:26 lunatic asylum

всё правильно делаешь.

Do you really want to delete ?