2

Code Complete(第7章、第3章)では、返される値に適切な関数名を付け、クラスの名前を付けてください。同じクラスにグローバル変数を設定するルーチンの命名規則は良いですか?

私はDelphi(2009年以前)で同期メソッドを記述するときに、時には変数を渡すことができないので、一見悪いプログラミング慣行であるグローバル変数を設定する必要があります。私は自分のプロパティメソッドのためにそれらを使用するので、私はそれらを "Get"または "Set"と呼んでいません。

誰でもこれらの名前付け規則が優れていますか?

答えて

3

私は「ゲット」または 私は プロパティ・メソッドのものを使用しているため、「設定」それらを呼び出すにしたくありません。

これは非常に恣意的な決定のようです。 「setAge」でも使用したので、「setName」で「set」を使用したくないと言うかもしれませんか?

言い換えれば、セッターで静的にすることは、文字通りパブリックなグローバル変数ALA Basicです。あなたの使命を達成する唯一の方法だと確信していますか?

私は静的が絶対に間違っていると言っているわけではありませんが、セッターを持っているのではなく、オブジェクトを定義するオブジェクトでそれを操作するのに最善を尽くす必要があります。そうしないと、制御するのが難しいだろう。

+0

(Visual)Basic:グローバル変数の使用を強要したり、推奨したりすることはありません。それは、それを使用する悪いプログラマーのために得られる印象です。 – dummzeuch

+0

私のポストのどこにでもビジュアルという言葉が見えましたか?私は昔の学校を話していましたが、変数を作る方法はありませんでした。 –

1

私は、コードコンプリートのアドバイスは非常に強く、あなたの反対は「私がそれらのプロパティメソッドを使用しているため」という意見はかなり弱いと思います。これらのプロパティ設定/ゲッターは、とにかくプライベートでなければなりません。それをオーバーロードの一形態とみなし、SetFooとGetFooと呼んでください。

+0

彼が名前を付けようとしている方法は、彼がSynchronizeにそれを渡しているのでプライベートでなければならない。それが定義されているスレッドクラスを除いて、他のものがそのメソッドを呼び出す理由はありません。 –

1

どのデルファイバージョンを使用していますか? D2006または2007を使用する場合は、クラスメソッドを使用してグローバルをクラスプロパティに移動し、値を取得および設定できます。これらはプロパティゲッターとセッターなので、GetとSetを使用するのが適切です。

type 
TMyObject = class(TObject) 
private 
    class var 
     FStringProperty : string; 

    class function GetStringProperty: String; static; 
    class procedure SetStringProperty(const Value : string);static; 
    public 
    class property StringProperty : String read GetStringProperty write SetStringProperty; 
    end; 
+1

これは本当に何も達成しません。通常のグローバル変数を使用するのと等価です。また、Synchronizeメソッドは、パラメータのないメソッドである必要があるため、SetStringPropertyメソッドを引数として受け入れることはできません。スレッド間で共有される場合、グローバル文字列変数には同期が必要です。 –

+0

Delphi 7を使用していますが、2009年には匿名メソッドを使用していますが、私たちがコードを移植する際には心に留めておきます。 –

1

プロパティのゲッターとセッターは取得し、それはゲッターとセッターを命名するために予約いくつかの大会だからを設定で始まる名前を持っていません。彼らはそれらが何であるのするので、それらの名前があります。同期メソッドの目的は変数の値を設定することであるため、 "set"という名前を付けるのが理にかなっています。あなただけの異なるように、割り当てまたはコピーのように、代名詞動詞を選択することができ

を設定するが、それらはあなたが説明してきた目的のために異例の名前です。 Fooの値を設定するルーチンがある場合、規則では、その関数の名前はSetFooでなければなりません。最終的には、プロパティアクセサーではないものに対して、を使用しているハングアップをすべて取得する必要があると思います。に設定してください。

+0

日常的な名前に関してはハングアップしているわけではありませんが、特定の大会があるかどうか疑問に思っていました。私は、assign(alaクラスオブジェクトのクローン作成)とcopy(ala memory copying)と同じ問題を抱えています。私はgetSomething()またはsetSomething({no params})というプロシージャを呼び出すのが嫌いでした。 –

+0

私は、あなたが日常の名前についてハングアップしていると思います。あなたが話し続けている "問題"は、あなたがそれらをそうしているので問題に過ぎません。しかし、彼らは本当にそうではありません。 –

0

私の意見では、グローバル変数への書き込みは、通常のセッターと簡単に区別できるはずです。大域変数を避けることができない場合、私は通常、この目的のために

を使用します。長い名前のオーバーヘッドはOK IMOです。これらの構造はほとんど使用されないはずです。

0

プライベート変数とグローバル変数にはSetXXXGetXXXを使用しますが、これらのメソッドの違いがわかりません。 SetXXXへの操作は、データ領域上のセットです。そのデータ領域がグローバル、ローカルまたはリモートの場合、メソッドの内部詳細は外部からは見えないはずです。

IDEは、そのデータ領域がローカルかどうかを知るのに役立ちますが、必要に応じて簡単なコメント行を書くことができます。

関連する問題