Здравствуйте, nbaksalyar, Вы писали:
N>За время программирования на JS лично мне такой проверки не понадобилось почти ни разу.
а какого размера проекты писали? Просто у меня даже задачи средней сложности это хотя бы человек 5-ть над кодом в течении хотя бы лет 5-ти работали и это команда хотя бы разок полностью поменялась. В типизированных языках новым людям приходится работать с контрактами
пока проект маленькийи работаешь один и все с памяти держишь — на динамике оно может и быстрее пишется
ЕА>> не забудь написать юнит тест на КАЖДОЕ использование этого метода — мы же не хотим чтобы о неправильном количестве переданных параметров узнал конечный пользователь вместо программиста, не забываем затраты на поддержание этого зоопарка в актуальном состоянии (сравни количество действий при добавлении параметра с типизацией и без: в первом случае надо только добавить параметр и пройти по ошибкам компилятора, во втором еще исправить проверки и в ручную найти все обращения)
N>Не вижу причин присобачивать к динамическому языку костыли в виде системы проверки типов. Тут всего лишь другой подход — у него есть свои плюсы и минусы — так же как и у статически типизированных языков. Если смотреть с точки зрения C#/Java-программиста — то да, без проверки типов жить невозможно. А вот мне с точки зрения любителя функциональных и динамических языков непонятно, как можно жить без возможности pattern matching'а и добавления методов в рантайме.
ЕА>>ну и выполнятся эти проверки будут в рантайме, что еще сильнее просадет производительность
N>Да, на проверке типов теряется примерно 20-30% скорости при вызове метода.
N>В абсолютном значении для нетяжелых вычислений разница небольшая — 2-4 мс.
30%(!) — и это только проверки, а еще оверхед для поиска метода по имени итд. итп. Надо совсем никуда не спешить чтобы с этим мириться.
N>Пожалуйста:
N>N>var Foo = new atom.Class({
N> bar : atom.Class.protectedMethod(function(msg) {
N> console.log(msg);
N> }),
N> foo : function(msg) {
N> this.bar(msg);
N> }
N>});
N>var Bar = new atom.Class({
N> Extends : Foo,
N> bar : atom.Class.protectedMethod(function(msg) {
N> console.log('Hello, ' + msg + '!');
N> })
N>});
N>var a = new Foo();
N>var b = new Bar();
N>a.bar('world'); // Error: The method «bar» is protected.
N>b.bar('world'); // -/ /-
N>a.foo('world'); // Hello
N>b.foo('world'); // Hello, world!
N>
что protected вижу, а где internal override?
ну опять же единственный способ убедиться, что везде вызвается коректно, написать тесты с 100% покрытием
N>Теперь у меня встречный вопрос — как средствами самого языка в Java добавить mixin'ы?
никак, типизированным языкам тоже есть куда расти