私の意見では、コードの量に大きな違いはありません。私はjavascriptで複雑なドメインモデルをたくさん作成しています。通常、インスタンスフィールドの型を同じに保つ必要があります。オブジェクトと配列を別々にする必要はありません。リンゴと梨を混ぜるだけで自分や他の人が混乱することがあります。
これは適切な場合がありますが、異なる引数を取る方法です。 Javascriptにメソッドオーバーロードがないので、リンゴと梨の両方を受け入れるが適切かもしれません。
あなたの友人がルビーと何を意味していたかは、クラスを宣言するための簡潔な構文です。ルビーのすべてのインスタンスフィールドはプライベートです - 比較など、短い手構文はゲッターとセッターを宣言するためにあります、コンパレータ:
ルビー
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+")";
}
}
ので、 C#はgetters/settersでプロパティを宣言するauto-propertiesを持っていますが、フィールドを宣言するよりもそれほど長くありません。 – CodesInChaos
"強く型付けされているのと比べて、私の意見では、コードの量に大きな違いはありません。同意する。私たちはそれを補うために他のコードを書くことになります。さまざまな言語間の私の本当の違いは、違いをカバーするコードを簡単に書くことができ、それが流れるかどうか、それを選び出して詮索しなければならないことです。 –
Rubyでは、.NETでやっているのと同じことをやって、クライアントが特定の方法でコードを使用できるようにしますか?ルートを集約し、不変条件を供給するように強制しますコンストラクタパラメータ、ファクトリクラスなどを介して実装されています。これは(少なくとも静的型の言語では)良いドメイン設計と見なされますが、その考えがRubyに引き継がれているのか疑問に思っていました。 –