Что значит без типов? Типы то есть, просто динамические.
Пример на руби:
case my_var
when Integer
# my_var is an integer
when String
# my_var is a string
when Array
# my_var is an array
when some_other_object
# my_var equals to some_other_object
else
raise ArgumnentError, "fuck it"
end
Гилс знатно вбросил говна, эту статью бурно обсуждали на HN и дофига где еще. Впрочем, в чем-то он, наверное, прав. Как минимум порог вхождения в рельсы сильно повысился за последние годы.
на самом деле словит ЛЮБОЙ эксепшен и вернет Errno::ENOENT. Другое дело что тут врядли что-то другое может появиться, но все же, возврат объекта эксепшена — не то что подразумевалось.
# user.rb
validate :email,
presence: true,
email: true
unless: :skip_email_validation?
validate :password,
confirmation: true,
unless: :skip_password_confirmation?
def skip_password_confirmation?
persisted? and !password_changed?
end
def skip_email_validation?
twitter_account? # просто пример, но логика, думаю, ясна
end
А дальше уже рулить всем этим по вкусу. Контроль целостности — задача модели. Модель должна быть валидироваться вне зависимости от контекста. Буть то юзер-из-твиттера или обычный.
Ничего себе. В 2012 мы ВНЕЗАПНО узнаем что JS-движки кидают эксепшен при обращении к неопределенной переменной!
Какой плохой браузер опера, делает все как надо по стандартам.
Кроме того, myVar и window.myVar никогда не были синонимами. Как минимум потому, что первое — обращение к переменной, которое может сломаться, если переменная неопределена, а второе — обращение к свойству объекта, которое мирно выдаст undefined и поедет дальше. Разные подходы, разные результаты.
Это свойство часто используется при написании мульти-плагинов. Например, для работы с jQuery, zepto и ender можно написать так:
А чем, сообственно, не нравится метод с Object#get и Object#set? Там кода на три строчки — все нормальные люди им пользуются и как-то, вцелом, довольны.
Для футболок еще обязательно размер, например, с наличием каждого размера, а для автозапчатей цвет, а для школьных тетрадей — в клеточку они или линейку, а для детской одежды еще примерный рост-возраст ребенка, а для кошачих кормов породы кошек, а для резиновых членов длину, форму и флажок ХИТ СЕЗОНА.
Суть в том, что программист все равно никогда не сможет учесть и предусмотреть все необходимые нюансы заранее и сам, если ему о них не рассказать.
б) айтюнс
Наверняка многие другие в курсе, просто я ими не пользуюсь и утверждать не берусь.
Пример на руби:
rescue
для руби неправильный.на самом деле словит ЛЮБОЙ эксепшен и вернет
Errno::ENOENT
. Другое дело что тут врядли что-то другое может появиться, но все же, возврат объекта эксепшена — не то что подразумевалось.— Капитан
А дальше уже рулить всем этим по вкусу. Контроль целостности — задача модели. Модель должна быть валидироваться вне зависимости от контекста. Буть то юзер-из-твиттера или обычный.
Какой плохой браузер опера, делает все как надо по стандартам.
Кроме того,
myVar
иwindow.myVar
никогда не были синонимами. Как минимум потому, что первое — обращение к переменной, которое может сломаться, если переменная неопределена, а второе — обращение к свойству объекта, которое мирно выдастundefined
и поедет дальше. Разные подходы, разные результаты.Это свойство часто используется при написании мульти-плагинов. Например, для работы с jQuery, zepto и ender можно написать так:
Так делал Twitter Bootstrap до версии 1.4
documentcloud.github.com/backbone/#Events — вот тут это реализовано. Можно пойти и почитать код, он простой как три рубля.
Тут можно понапридумывать все что угодно. Любые коллбеки, любые эвенты.
А чем, сообственно, не нравится метод с
Object#get
иObject#set
? Там кода на три строчки — все нормальные люди им пользуются и как-то, вцелом, довольны.Суть в том, что программист все равно никогда не сможет учесть и предусмотреть все необходимые нюансы заранее и сам, если ему о них не рассказать.