On 10/13/2015 07:49 PM, Olga Smirnova wrote:
> Ни за ни против типизации, просто пример, когда строгая типизация могла бы
> решить проблему простым способом
>
> Примерно вот такой кусок кода:
>
> use JSON qw(to_json);
> use Data::Dumper;
>
> my $numbers = {
> one => 1.5,
> two => 2,
> };
> my $str = to_json( $numbers );
> print $str . "\n\n";
>
> my $str2 = Dumper($numbers);
> my $str3 = to_json( $numbers );
>
> print $str3 . "\n\n";
>
> Получаем вот такой вывод:
>
> {"one":1.5,"two":2}
>
> {"one":"1.5","two":2}
>
> Т.е. берем структуру с заведомыми чиселками, которую нужно преобразовать в
> json, затем применяем к ней какую-нибудь функцию, в данном случае Dumper, и
> теперь наша дробная
> чиселка легким движением руки превращается в строчечку при json-сериализации.
> Если бы была строгая типизация, то такой проблемы бы не возникло.
>
> Конкретно у нас это стало проблемой, когда понадобилось посылать внутри
> json'а сумму в рублях (соответственно, это дробная чиселка), а на принимающей
> стороне был сервис,
> написанный на скале (т.е. со строгой типизацей), валидатор которого ругался
> на наши "1.5" и говорил, мол это не чиселка.
>
> Тут, конечно, можно сказать, мол, просто не используйте Dumper (или любую
> другую функцию, неявно преобразующую тип), но это не панацея, т.к. в любой
> момент в проект может
> прийти новый человек, не знающий про эту фичу, который возьмет да и начнет
> использовать одну из таких функций перед отправкой и все нахрен поломается.
> В нашем случае решением проблемы стал перевод единицы измерения суммы из
> рублей в копейки и на нашей стороне и на принимающей (благо, принимающий
> сервис тоже наш), т.е.
> избавление от дробных чисел - перед отправкой для суммы всегда делался int и
> уже неважно было, что делали с этой чиселкой раньше.
как вариант в функции-сериализаторе приводить значение к соотв. типу через:
to_json({ one => $numbers->{one} +0, two => $numbers->{two} +0 })
по этой теме на CPAN'е есть: https://metacpan.org/pod/JSON::Schema::Fit
>
> С другой сторону, в пользу не строгой типизации - если бы такой json (с
> "1.5") пришел в сервис, написанный на перле, то проблемы бы не было - мы бы
> адекватно распарсили и
> 1.5 и "1.5"
>
>
> 13.10.2015 19:08, Victor Efimov пишет:
>> твой пример был про программиста, который написал $b='20' с кавычками, а
>> потом решил с переменной $b произвести сложение. это не вменяемый
>> программист, даже по
>> реальностям Perl5. он присваивает переменной заведомо строковое значение
>> прямо в исходном коде, зачем-то пишет кавычки, а затем эту же переменную
>> пытается складывать.
>> если у тебя какой-то xml парсер - то и приводи примеры xml парсера. я за то
>> чтобы избавиться от абстракций в этом треде, тут и так полно недопонимания.
>> так что лучше
>> пример кода обсужать а не на пальцах пытаться что-то объяснить и демагогией
>> заниматься.
>
> --
> С уважением,
>
> Ольга Смирнова
> Perl-программист проекта Деньги@mail.ru
> раб.: +7 (495)-725-63-57 (внутр. 2199)
> моб.: +7 (926)-959-16-23
> e-mail: [email protected] <mailto:[email protected]>
> skype: olga_smirnova89
> mail-agent: [email protected]
> ISQ: 232733122
>
> mail.ru <http://mail.ru>
>
>
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org