Сильно типизированный vs not, по моему мнению, не имеет большого значения для объема кода. Я делаю много сложных моделей предметной области в javascript, и вы не можете воспользоваться преимуществами свободной типизации и поддерживать вменяемый код. Как правило, вы должны сохранять тип поля экземпляра одинаковым, иногда не иметь объекта, а другой - массив - смешивание яблок и груш просто смущает вас и других.
Один раз, когда это может быть уместно, это методы, принимающие разные аргументы. В Javascript нет перегрузки методов, поэтому принимать как яблоки, так и груши может уместно.
Что может означать ваш друг под ruby, так это краткий синтаксис объявления классов. Все поля экземпляра в ruby являются закрытыми - и существует краткий синтаксис для объявления методов получения и установки, компараторов и т. Д. Сравните:
рубин
class Person
attr_reader :name, :age
attr_writer :name, :age
def initialize(name, age)
@name, @age = name, age
end
def <=>(person) # Comparison operator for sorting
@age <=> person.age
end
def to_s
"#@name (#@age)"
end
end
Java
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int compareTo(Person other) {
return this.age - other.getAge();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return name + " ("+age+")";
}
}