1

正方形の境界線を印刷したい...正方形の1辺だけ、またはそれ以上の辺を印刷する可能性があるので、このメソッドを作成しました

printBorder(N, E, S, W) {
  if (N) {
     square.printBorder(0,0,0,10);
  }
  if (E) {
     square.printBorder(0,10,10,10);
  }
  if (S) {
     square.printBorder(10,0,10,10);
  }
  if (W) {
     square.printBorder(0,0,10,0);
  }
}

それはうまくいくかもしれませんが、それはそれほどエレガントではなく、多すぎると思います、そしてすべてのステートメントは多かれ少なかれ同じです。このコードを単純化する方法が必要だと思いますが、何か提案はありますか?

4

6 に答える 6

5

それを簡素化する1つの方法...必要がない場合でも呼び出しを行いますが、実装を条件付けします:

printBorder(N, E, S, W){
  square.printBorder(n, 0,0,0,10);
  square.printBorder(e, 0,10,10,10);
  square.printBorder(s, 10,0,10,10);
  square.printBorder(w, 0,0,10,0);
}

次にSquare(または何でも):

printBorder(condition, top, left, bottom, right) {
  if (!condition) {
    return;
  }
  printBorder(top, left, bottom, right);
}

同様の代替手段はprintBorder、元の関数で条件を保持することです。

printBorder(N, E, S, W){
  printBorder(n, 0,0,0,10);
  printBorder(e, 0,10,10,10);
  printBorder(s, 10,0,10,10);
  printBorder(w, 0,0,10,0);
}

printBorder(condition, top, left, bottom, right) {
  if (!condition) {
    return;
  }
  square.printBorder(top, left, bottom, right);
}
于 2009-08-08T08:00:28.000 に答える
5

私はifsを気にしません。読みやすくするだけです:

printBorder(N, E, S, W){
  if(N) square.printBorder( 0,  0,  0, 10);
  if(E) square.printBorder( 0, 10, 10, 10);
  if(S) square.printBorder(10,  0, 10, 10);
  if(W) square.printBorder( 0,  0, 10,  0);
}
于 2009-08-08T08:03:10.457 に答える
3

個人的には、バイナリ比較がとても好きです。

const uint NORTH = 1;
const uint SOUTH = 2;
const uint EAST = 4;
const uint WEST = 8;

// ... some code ...
printBorder(NORTH + EAST);
// ... some other code ...

printBorder(uint Sides)
{
   if((NORTH & Sides) > 0) square.printBorder(0, 0, 0, 10);
   if((SOUTH & Sides) > 0) square.printBorder(0, 10, 10, 10);
   if((EAST & Sides) > 0) square.printBorder(10, 0, 10, 10);
   if((WEST & Sides) > 0) square.printBorder(0, 0, 10, 0);
}

これにより、関数内のコードが読みにくくなると言う人もいるかもしれません。ただし、私の考えでは、この関数は 1 回しか出現しないのに対し、この関数はあらゆる場所で呼び出されます。しばらく見ていないコードを実行している場合、どちらが読みやすいでしょうか?

printBorder(true, false, true, true);

また

printBorder(NORTH + SOUTH + EAST);

私の意見です。:)

于 2009-08-08T08:26:41.860 に答える