【雑談】変数名のご相談

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たいちう

【雑談】変数名のご相談

#1

投稿記事 by たいちう » 15年前

雑談半分なのですが、変数名の相談をさせてください。
質問の目的は、私のコーディングスタイルの洗練です。
私は次のような書き方をしばしばします。
int getValue() {
    int ret = 0; // 初期値・デフォルト値
    
    ret = ...; // retを計算
    
    return ret;
}

void sub() {
    ...
    
    int ret = getValue();
    
    if (ret == ...) {
        ...
    }
}
ループ変数にi, jを使うように、戻り値にはretを使うことが多いのです。
上の2つの関数内で、変数retはどちらも同じ戻り値を扱いますが、
一方は自分が戻す戻り値を、他方は戻ってきた戻り値を扱っています。

ここでsubを変更します。getValue()の戻り値も参照しながら自分自身も戻り値を
返すように変更する場合、上述の2つの意味の戻り値を扱う必要があります。

そこで質問なのですが、両者を区別できる適当な名前はないでしょうか?
基本的に変数名等は英語で付けていますので、できれば英語でお願いします。

<回答例>
自分が戻す値:result
戻ってきた値:ret

回答例のretはreturnの略で、resultと本質的には変わらないのですが、
このような自分ルールを付けることで、ルールを知る自分では区別がつき、
ルールを知らない人にも違和感がないということで、
今私が思いつく中では最良です。

斬新なアイディアをお待ちします。
もしあれば熱き思いも書いちゃってください。
月並みな意見もOKです。

たかぎ

Re:【雑談】変数名のご相談

#2

投稿記事 by たかぎ » 15年前

私が普段やっている方法を書きます。

関数が自分で返す値にはresultを使っています。
これは、返却値でも引数経由でも同じですが、両方ある場合は臨機応変に対応しています。
返ってきた値にretやresultを使うことは、それ自体をさらに自分の返却値として使うのでない限りありません。
なぜなら、自分が返す値がどういったものかは、その関数内部の共通認識としてあるわけですが、呼び出した関数が返す値がどういったものなのかはもっと明示的な名前を付けてあげないとわからないからです。

やんち

Re:【雑談】変数名のご相談

#3

投稿記事 by やんち » 15年前

/*
 * output 出力
 * input  入力
 * return 処理結果(0:成功, 0以外:失敗)
 */
int calc(char *output, const char *input)
{
    int iResult = 0; // 結果
    
    // inputを使って、処理を実行、outputへ出力
    // 途中処理に失敗したら、iResult にエラーコードを設定。
    
    return iResult;
}

void sub()
{
    char input[/url] = "input data";
    char output[100];
    int iResult = 0;
    
    iResult = calc(output, input);
    if (iResult)
    {
        // エラー処理
    }
    
}
単に処理結果コードを戻すだけの場合は、iResult とか result とする
場合が私は多いです。

関数名が getValue とか結果コード以外の意味を持つ値を戻す場合には、
value 等、の名前にしていますよ。

tk

Re:【雑談】変数名のご相談

#4

投稿記事 by tk » 15年前

自分のやり方ですが、

・関数内での戻値 「ret」 で統一
・関数からの戻値 「関数名_ret」で統一

たいちうさんの例でいうなら
int getValue() {
    int ret = 0; // 初期値・デフォルト値
    
    ret = ...; // retを計算
    
    return ret;
}

void sub() {
    ...
    
    int getval_ret = getValue();   // ←getValueの戻値なのでgetval_retで受け取る
    
    if (getval_ret == ...) {
        ...
    }
}
といった感じです。

スコープと似てるかな?
関数(オブジェクト)内からなら、関数名_(スコープ)を付けなくてもいい。
ただし、別の関数(オブジェクト)にアクセス(判別)するには、関数名_(スコープ)をつけましょう。
要は関数名(オブジェクト名) + _(::) + ret(メンバ)です。


追記
質問とは関係ないですけど、
書き込みに時間かけるとポイント落とすんですね。
昼ごはん食べながら40~50分かけて書いてたらポイントが^^; 画像

たいちう

Re:【雑談】変数名のご相談

#5

投稿記事 by たいちう » 15年前

確かに関数の中で"戻り値"が何を指すかといえば、
自分自身の戻り値ですね。自分が受け取る戻り値は、
数あるローカル変数の1つでしかない、と。

すっきりしました。ご回答ありがとうございました。

tkさん
> 書き込みに時間かけるとポイント落とすんですね。
> 昼ごはん食べながら40~50分かけて書いてたらポイントが^^;

たまたまではないでしょうか。

閉鎖

“C言語何でも質問掲示板” へ戻る