setterとか

今の案件は、

  • C言語だけど、オブジェクト指向っぽい感じでやる。
  • 1ファイル1オブジェクト。
  • オブジェクト内の変数の代入は、オブジェクト内でしか行えない。

ってなってるんだけど、getter()、setter()が無いんだよね。

じゃあどうしてるのって言うと、getter()は、普通に外部参照。
まぁこれは許せるといえば許せる。(嫌だけど)

問題は、setter()。
今は下のような感じでやってる。

piyo.c:

extern char piyoFlag = False;

void piyo(void){
  if( fooExpression ){
	piyoFlag = True;
  }
}

hoge.c:

extern int hogeVal;

void hoge(void){
  if( piyoFlag == True ){
	hogeVal = 100;
  }
}

オブジェクト内でしか変数の代入は行えないので、piyo.c で一旦 piyoFlagというフラグを作って、それをhoge.c で参照して、hogeValに代入するというすごく回りくどいことをしている。

コレダメだろと思うけれども、なぜかこんな事にしてるし、setter()用意するとレビューで指摘くらうのでやらない。

コレでダメな理由は
1. デバッグしづらい。
2. 代入するタイミングが変更するたびにフラグを再考慮する必要がある。
3. そもそもオブジェクト指向になってない。(最初からわかってたけど
4. 代入されるタイミングがぱっと見わからない。
...

まぁ他にもいろいろあるけれど、なんでsetter()がダメなんだろ。
関数が増えるのがそんなに嫌なんだろうか。

意味がわからない。

ちなみに、自分がしたいのは下。

piyo.c:

void piyo(void){
  if( fooExpression ){
	setHogeVal( 100 );
  }
}

hoge.c:

int hogeVal;

void setHogeVal(int hoge){
  hogeVal = hoge;
}

こっちの方がすっきりすると思うし、デバッグもしやすいと思うんだけどなー…