10

動的な型指定(およびオプションの静的型付け)を持つGroovy言語になっています。また、リスト、マップ、および範囲をネイティブサポートしているので、リストやリスト、リストのリスト、リストのリストなどのリストやマップを多く使用しています。動的に型指定された言語のマップ/リストの変数命名規則

静的言語)あなたはいつも自分のタイプが何であるかを知っています。私は動的言語にはかなり慣れていませんし、変数が何を想定しているのかを把握するのが少し難しくなっていますので、他の人が変数命名規則を使用してこれらを真似しているのか疑問に思っていました。

たとえば、キーの日付のマップと値の整数があるとします。または文字列をキーとして、またアカウントオブジェクトを値として含む整数リスト、またはマップリスト。

変数名の後ろに明白な規則を作成するように見えるので、私が扱うデータ型構造を調べなくてもそれを追跡できます。

ヒント?

+1

残念ながら、コメントを落とす能力はありません。これは完全に受け入れられる質問のようです。 –

+0

@David、Comments * "rude"または "non-constructive"のフラグを付けることができます。 – leoger

+0

"def"を使用するのは一般的ですが、Javaプログラマにとっては不快なことがあります。 "String"や "Map"より "def"を使用する利点はありません。次の人が自分のコードを読んでいるより "スタイル"です。あなたのオブジェクトがどんなタイプであるか知りたいのであれば、それは疑問であれば実際のタイプを使用してください。これにより、IDEの有用性も高まります(Ctrl +スペースの補完がよりうまく機能します)。しかし、進歩するにつれて、時にはdefで快適になるかもしれないので、正しい時に使用してください。一般的にジェネリックスも同様に機能します。 –

答えて

13

これは一般的な初心者の嘆きです。あなたは命名規則を使うことができますが、あまりにも長すぎると、変数が表現されている(それは残りのコードとの関係での意味)に焦点を当てます。 "タイプ")。

+1

これは非常に古い質問ですが、私自身は、どのような変数が、どのような操作が利用可能であるかを一目で判断できるように表現されているわけではありません。たとえば、何かが配列かリストかどうかは気にしないかもしれませんが、それを反復処理できるかどうかは気にします。この場合の大会はどうですか?例えば。 "nameList"対 "names"? – ossek

2

名前を短くしておけば、「nounToNoun」のような名前のマ​​ップにする傾向があります。だからあなたの日付の例を使用して整数にマッピングすると、私はその名前を "dateToCount"(整数が何かのためのカウンターの場合)です。そうすることで、マップであることが明らかになり、何がマップされているのかが明らかになります。問題は、時には、これらの名前を短くて読みやすいものにすることが難しいことです。たとえば、「userToLoginHistory」は少し扱いに​​くくなり始めます。

リストの場合は、通常、変数名に複数形を使用します。したがって、「ユーザー」は単一のユーザーになり、「ユーザー」はユーザーのリストになります。

正直言って、私はマップのリストのために良い名前が何であるか分かりません。

7

変数の名前は、それが何を意味するのかをコードを読む人に説明する必要があります。あなたは整数に日付のマップを持っている場合、それは(提案変数名はカッコ内にある)例えば、表しん:

  1. その日のため、支払回数(paymentsDue
  2. 間の日数スタックオーバーフローの上にその日に投稿されたメッセージ(numberOfPostedMessages)変数の型が容易に入手できない言語で

の日時でいくつかの他の点(daysPassed

  • 数マッピングされ、あなたが追加したい場合があります接頭辞o f接尾辞(たとえば、paymentsDueMap)。しかし、私は、より良い害よりも害を及ぼすような、可変名の中に追加の型情報(例えば、datesToInts)をコード化しないよう勧めます。

    最後に、文字列とアカウント間のマップのリストなど、複雑なデータ構造を持つ場合は、それを別のクラスにカプセル化し、その意図に従って名前を付けるのが最善の方法です。

  • 3

    静的言語(一般的なesp)では、あなたのタイプが何であるかが常にわかります。

    動的言語でプログラミングしているうちに、このようにタイプを使用すると松葉杖であることがわかります。アドバイスの2つの部分:

    1. 良い変数の命名を使用してください。たとえば、intの日付のマップがある場合は、BirthdateToTotalLookupのような名前を付けることができます。
    2. どのような視覚的手がかりを探すかを学びます。それは明白なように見えるかもしれないが、それはこのような手がかりを探しているの習慣に取得するために私にしばらく時間がかかった:

      sum += x['10-16-92'] 
      

    を上記のコードの一部からは、私は、xが持っているマップであることを伝えることができますキーとして日付を返し、いくつかの種類の番号を返します。

    2

    動的言語の利点の1つは、オブジェクトをマップとして使用していても、マップである必要はありません。それがしなければならないことは、メッセージが送信されたものをサポートすることだけです。 Groovyでは、指定されたメソッドがマップを期待してStringキーで検索できるようになっていることを知っていれば、そのマップに完全マップ、取り除かれたマップ、キーと同じ名前のプロパティを持つExpando 、またはキーと同じ名前のプロパティを持つ他のオブジェクトを使用します。 someObject ["keyname"]とsomeObject.keynameは同じものですからです。 (もちろん、コードがsomeObject.get( "keyname")を呼び出す場合は、何とかそのメソッドを配線しなければなりません)。

    ポイントは、Groovyのような動的言語では、TYPESやサポートされるものメッセージ。概念的に地図であれば、birthdateToTotalという名前を付けても意味があります(ただし、合計[birthdate]はbirthdateToTotal [birthdate]よりも優れているため、 'totals'と呼ぶ方がいいですが)それを指定しないでください。あなたは後で柔軟性を失います。

    2

    これは時間の経過とともに成長するものです。 20歳のプログラマーがまだハンガリー語を使っているのを知らないのですが、スタティック型言語でコーディングしているので、ほとんど理解できます。

    これを考慮してください。その変数はHashMapなので、名前にどのような型を追加しますか?地図?これは途中での答えです。なぜコレクションではないのですか?そのようにして、データを保存する方法を変更する場合は、変数名を変更する必要はありません。あなたが本当に何が起こっているのかを読者に知らせたいのであれば、HashMapはどうでしょうか。

    疑わしい場合もありますが、これらのどれも必要ありません。動的言語(および多型性)のポイントは、表示される変数の正確なタイプを知る必要はなく、データそのものだけが重要であるということです。そのデータにどのようにインターフェースするかについてのヒントが気に入っているかもしれませんが、ほとんどの場合、すでに知っているか、アドレスビーコードコード、合計ビーバースデートなどの変数を簡単に変数に入れることができます。

    関連する問題