Недавно, ну как недавно пяти лет еще не прошло, в языке появились автоматические переменные, объявляемые как DATA(var) = ... Я обрадовался, наконец то можно объявлять по месту, держись, C#, мы тебя догоним. Правда, все оказалось "как обычно", эта та же переменная, что и просто DATA var, scope ее ровно такой же здоровенный, никаких локальных в пределах цикла переменных нет. Синтаксический сахар, ну да и то ладно, используем.
А вот сегодня пишут мне - у тебя расчет какой-то странный (считается банальщина - кол-во * цену, суммируется в разном порядке). И тут возникает прикол, который можно продемонстрировать на этом:
data x type p DECIMALS 2. data y type p DECIMALS 3. x = '1.44'. y = '1.445'. data(z) = x * y.
Какого типа переменная Z? C# и прочие хаскели подсказывают нам, что должен быть p decimal 5. Хелп самого абапа говорит - "The date type of the variable is determined by the operand type. It must be possible to derive this type statically in full.". Ну что, вроде статически все определимо, предупреждений нет, проблем быть не должно.
Фиг! Z = 2 и тип Z = P DECIMALS 0. Произошел самый что ни на есть каст в целое, с округлением. Я, честно говоря, в шоке. В тот момент, когда другие языки уже окучивают по полной шаблоны/ФП/ПМ и прочее и прочее, нам предлагается какое-то студенческое поделие.
PS. На предыдущих страницах не нашел вроде...
Последний раз редактировалось Николай Рыжов Чт, дек 24 2015, 01:09, всего редактировалось 4 раз(а).
|