3

Objective-C のコーダーなので、次のような説明的なメソッド名には慣れています。

[car insertFuelWithAmount:fuelAmount
                     type:fuelType
  causesCarToSelfDestruct:NO];

ほとんどのプログラマーは、C++ で対応するメソッドにどのように名前を付けるでしょうか? 特に 2 つの質問があります。

  1. 「C++ Primer」第 4 版の私のコピー (p. 46)gosh_this_is_an_impossibly_long_name_to_typeは、「本当に悪い識別子名」であると述べています。これは、たとえ長くても非常にわかりやすい名前を推奨する Objective-C の考え方とは異なります。C++ コーダーが長いものを評価しないのはなぜですか?

  2. やみくもに移行するのではなく、考え方を一新することではないでしょうか。もしそうなら、どのような変更を加える必要がありますか?

よろしければ、ご自身でさらに一般的な考えを浮かび上がらせてください。(これは一般的で曖昧な質問のためのフォーラムではないことを知っています。したがって、上記の内容をもう少し具体的にしようとしました。)

4

5 に答える 5

5

フェルナンデスが指摘するように、あなたはある種のバランスを見つける必要があります。ただし、ほとんどのC ++プログラマーは、より短いがやや説明的なメソッド名を使用しますが、それはすべて好みに関するものであることを忘れないでください。

非常に長い名前を使用することは、コードが実質的に読めなくなるため、決して望ましくありません。個人的には、プログラマーの目には非常に不安を感じます。

もちろん、言語は異なりますが、移行フェーズの焦点は、無関係な名前を削除することです。上記の方法と同じように。Obj-Cプログラマーが「WithSomething」拡張機能をあちこちで使用していることに気づきました。ここで変更することの1つは、たとえば、オーバーロードを使用してそれらを取り除くことです。

あなたが説明した方法は、おそらく次のように書くでしょう:

car.insertFuel<int>(amount, false);

整数形式の燃料を想定している場合。

于 2012-08-16T10:27:53.370 に答える
2

Objective-Cのコーダーとして、私は他のプログラミング言語で長いメソッド名を個人的に作成しています。他の誰かからゲームを変更する必要があるとき、コードは読み取り不可能なメソッド名と変数名で暗号化されているため、コードを理解するのに本当に苦労します。

今日では、大きなソースファイルに注意する必要はありません。自分自身と、コードを変更する必要のある他の人のために、すべてを明確にしましょう。

したがって、あなたの例では、私は個人的に次のように書きます。

car.insertFuelTypeAndSelfDestruct(fuelAmount, fuelType, NO);

または、メソッドの説明が表示されている場合は、car.insert

于 2012-08-16T10:27:38.677 に答える
2

関数パラメーターのそのレベルの記述性は、それらの型を定義し、関数名自体を短く読みやすいままにすることによって最もよく行われます。次に例を示します。

enum class fuel_type { petrol, diesel, coal, coffee };
enum class self_destruct { no, yes };

car.insert(amount, fuel_type::petrol, self_destruct::no);

関数はさまざまな引数の型に対してオーバーロードできるため、これにより、さまざまなオーバーロードによって他のものを挿入できます。

car.insert(amount, oil_type::crude, self_destruct::yes);

これをさらに進めて、数値パラメーターにも型を導入することをお勧めします。特に、オーバーロードする「タイプ」パラメーターがない場合:

struct fuel_amount {double litres;};
struct oil_amount {double litres;};

car.insert(fuel_amount{100});
car.insert(oil_amount{3});

これらの手法は、新しい C++11 機能 (スコープ列挙と均一な初期化) に依存していることに注意してください。言語の古いバージョンでは、同様の手法が可能ですが、より厄介です。

于 2012-08-16T10:42:40.780 に答える
0

個人的には、私(およびこれまでに働いたすべての場所)は、C++コード全体で説明的なメソッド名と変数名を推奨しています。ただし、ほとんどのプログラマーは長すぎる名前を嫌う傾向があります。このような場合、通常は妥協する必要があります。長さを短くするために、説明性の一部を犠牲にするか、一般的に短いまたはより説明的な他の単語を考えます。

あなたの場合、私はこのようにします:

car.insertFuelWithAmount(fuelAmount, fuelType, safeDestruct);

メソッドの名前をidのままにし、最後のパラメーターの「causesCarTo」プレフィックスをスキップします。

于 2012-08-16T10:29:17.240 に答える
0

単純なメソッド呼び出しに固執したい場合は、次のようにします。

car.insertFuel(amount, type, false);

Fuelまたは、単純なコンストラクターを使用してクラスを作成することもできます。

class Fuel {
public:
    Fuel(int amount, int type, bool selfDestruct)
        : amount(amount), type(type), selfDestruct(selfDestruct) {}

    int amount;
    int type;
    bool selfDestruct;
};

car.insert(Fuel(amount, type, false));

Fuel名前付きパラメーターのイディオムを実装するクラスを作成することもできます。

class Fuel {
public:
    Fuel() : amount(0), type(0), selfDestruct(false) {}

    Fuel& Amount(int amount) {
        this->amount = amount;
        return *this;
    }
    Fuel& Type(int type) {
        this->type = type;
        return *this;
    }
    Fuel& SelfDestruct(bool selfDestruct) {
        this->selfDestruct = selfDestruct;
        return *this;
    }

    int amount;
    int type;
    bool selfDestruct;
};

car.insert(Fuel().Amount(amount).Type(type).SelfDestruct(false));
于 2012-08-16T10:54:23.710 に答える