<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Ни за ни против типизации, просто пример, когда строгая типизация
могла бы решить проблему простым способом<br>
<br>
Примерно вот такой кусок кода:<br>
<br>
use JSON qw(to_json);<br>
use Data::Dumper;<br>
<br>
my $numbers = {<br>
one => 1.5,<br>
two => 2,<br>
};<br>
my $str = to_json( $numbers );<br>
print $str . "\n\n";<br>
<br>
my $str2 = Dumper($numbers);<br>
my $str3 = to_json( $numbers );<br>
<br>
print $str3 . "\n\n";<br>
<br>
Получаем вот такой вывод:<br>
<br>
{"one":1.5,"two":2}<br>
<br>
{"one":"1.5","two":2}<br>
<br>
Т.е. берем структуру с заведомыми чиселками, которую нужно
преобразовать в json, затем применяем к ней какую-нибудь функцию, в
данном случае Dumper, и теперь наша дробная чиселка легким движением
руки превращается в строчечку при json-сериализации. Если бы была
строгая типизация, то такой проблемы бы не возникло.<br>
<br>
Конкретно у нас это стало проблемой, когда понадобилось посылать
внутри json'а сумму в рублях (соответственно, это дробная чиселка),
а на принимающей стороне был сервис, написанный на скале (т.е. со
строгой типизацей), валидатор которого ругался на наши "1.5" и
говорил, мол это не чиселка.<br>
<br>
Тут, конечно, можно сказать, мол, просто не используйте Dumper (или
любую другую функцию, неявно преобразующую тип), но это не панацея,
т.к. в любой момент в проект может прийти новый человек, не знающий
про эту фичу, который возьмет да и начнет использовать одну из таких
функций перед отправкой и все нахрен поломается.<br>
В нашем случае решением проблемы стал перевод единицы измерения
суммы из рублей в копейки и на нашей стороне и на принимающей
(благо, принимающий сервис тоже наш), т.е. избавление от дробных
чисел - перед отправкой для суммы всегда делался int и уже неважно
было, что делали с этой чиселкой раньше.<br>
<br>
С другой сторону, в пользу не строгой типизации - если бы такой json
(с "1.5") пришел в сервис, написанный на перле, то проблемы бы не
было - мы бы адекватно распарсили и 1.5 и "1.5"<br>
<br>
<br>
<div class="moz-cite-prefix">13.10.2015 19:08, Victor Efimov пишет:<br>
</div>
<blockquote
cite="mid:CAF7QZD4cTP7Y-g3zeBq5Kao2njBjpe9Y4vJKT4cpFgQ33cwrGw@mail.gmail.com"
type="cite">
твой пример был про программиста, который написал
$b='20' с кавычками, а потом решил с переменной $b произвести
сложение.
это не вменяемый программист, даже по реальностям Perl5. он
присваивает переменной заведомо строковое значение прямо в
исходном
коде, зачем-то пишет кавычки,
а затем эту же переменную пытается складывать.
если у тебя какой-то xml парсер - то и приводи примеры xml
парсера. я
за то чтобы избавиться от абстракций в этом треде, тут и так полно
недопонимания. так что лучше пример кода обсужать
а не на пальцах пытаться что-то объяснить и демагогией заниматься.
</blockquote>
<br>
<div class="moz-signature">-- <br>
<span style="color:#4b4a45;font-style:italic">С уважением,<br>
<br>
Ольга Смирнова<br>
Perl-программист проекта Деньги@mail.ru<br>
раб.: +7 (495)-725-63-57 (внутр. 2199)<br>
моб.: +7 (926)-959-16-23<br>
e-mail: <a href="mailto:o.smirnova@corp.mail.ru">o.smirnova@corp.mail.ru</a><br>
skype: olga_smirnova89<br>
mail-agent: <a class="moz-txt-link-abbreviated" href="mailto:o.smirnova@corp.mail.ru">o.smirnova@corp.mail.ru</a><br>
ISQ: 232733122<br>
</span>
<br>
<a target="_blank" href="http://mail.ru" title="mail.ru"><img
alt="mail.ru" src="cid:part2.00020405.01090605@corp.mail.ru"></a></div>
</body>
</html>