[Moscow.pm] Perl 6

Olga Smirnova o.smirnova на corp.mail.ru
Вт Окт 13 09:49:39 PDT 2015


Ни за ни против типизации, просто пример, когда строгая типизация могла 
бы решить проблему простым способом

Примерно вот такой кусок кода:

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 и уже неважно было, что делали с этой чиселкой 
раньше.

С другой сторону, в пользу не строгой типизации - если бы такой 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: o.smirnova на corp.mail.ru <mailto:o.smirnova на corp.mail.ru>
skype: olga_smirnova89
mail-agent: o.smirnova на corp.mail.ru
ISQ: 232733122

mail.ru <http://mail.ru>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151013/5bf4871c/attachment-0001.html>
----------- следущая часть -----------
Вложение не в текстовом формате было извлечено…
Имя: logo_full.png
Тип: image/png
Размер: 9565 байтов
Описание: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151013/5bf4871c/attachment-0001.png>


Подробная информация о списке рассылки Moscow-pm