リファクタリング、させてくれ

このエントリーをはてなブックマークに追加
327クラス化してみた:2005/10/03(月) 15:55:48
class Board {
enum { BOARD_SIZE = 3 };
enum { BLANK, MARU, BATSU };
int array[BOARD_SIZE][BOARD_SIZE];
...
public:
bool CheckRow(int nRow, int n) { // 横判定
assert( nRow >= 0 || nRow < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[nRow][i] != n ) return false;
}
return true;
}
bool CheckCol(int nCol, int n) { // 縦判定
assert( nCol >= 0 || nCol < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[i][nCol] != n ) return false;
}
return true;
}
// 斜め判定:bDirがtrueなら左上→右下 そうでなければ 右上→左下
bool CheckNaname(bool bDir, int n) {
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( bDir ) {
if ( array[i][i] != n ) return false;
}
else {
if ( array[i][BOARD_SIZE - 1 - i] != n ) return false;
}
}
return true;
}
328クラス化してみた:2005/10/03(月) 15:57:57
あー半角スペースだめだったかorz
329クラス化してみた 1/2:2005/10/03(月) 15:59:21
class Board {
 enum { BOARD_SIZE = 3 };
 enum { BLANK, MARU, BATSU };
 int array[BOARD_SIZE][BOARD_SIZE];
 ...
public:
 bool CheckRow(int nRow, int n) { // 横判定
  assert( nRow >= 0 || nRow < BOARD_SIZE );
  for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
   if ( array[nRow][i] != n ) return false;
  }
  return true;
 }
 bool CheckCol(int nCol, int n) { // 縦判定
  assert( nCol >= 0 || nCol < BOARD_SIZE );
  for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
   if ( array[i][nCol] != n ) return false;
  }
  return true;
 }
 // 斜め判定:bDirがtrueなら左上→右下 そうでなければ 右上→左下
 bool CheckNaname(bool bDir, int n) {
  for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
   if ( bDir ) {
    if ( array[i][i] != n ) return false;
   }
   else {
    if ( array[i][BOARD_SIZE - 1 - i] != n ) return false;
   }
  }
  return true;
 }
330クラス化してみた 2/2:2005/10/03(月) 16:00:36
 // 全判定
 bool CheckWinAll( int n ) {
  int i;
  for (i = 0; i < BOARD_SIZE; i++){
   if ( CheckRow( i, n ) ) return true;
  }
  for (i = 0; i < BOARD_SIZE; i++){
   if ( CheckCol( i, n ) ) return true;
  }
  if ( CheckNaname( true, n ) ) return true;
  if ( CheckNaname( false, n ) ) return true;
  return false;
 }
 // 判定&表示
 bool Hantei( int n ) {
  assert(n == MARU || n == BATSU);
  if (CheckWinAll(n)) {
   if (n == MARU) {
    printf("「○」の勝ちです\n");
   }
   else {
    printf("「×」の勝ちです\n");
   }
   return true;
  }
  return false;
 }
};
331デフォルトの名無しさん:2005/10/03(月) 17:46:42
おれだったら置いた石の左右上下斜め4方向だけ調べるようにするな
3ます3ますのこの場合はおなじ8回検査ってことになるけど
332クラス化してみた:2005/10/03(月) 22:26:45
>>331
それもありやね。ま、計算量的に問題なければどっちでもいいと思う。

>>332
最後のHantei()関数は外部に書くほうが class Board が生きてくるな。
内部データクラスに出力まで混ぜて書くのは設計上まずげ。
333デフォルトの名無しさん:2005/10/04(火) 13:14:21
何マスでの何目並べでも大丈夫なようにしてあげたよ

int BOARD_SIZE = 3;
int STONES_FOR_WIN = 3;
bool check_move_for_win(int x, int y, int n)
{
 static int vectors[8][2] = {
  {1, 0}, {1, 1}, {0, 1}, {1, -1}, {-1, 0}, {-1, -1}, {0, -1}, {-1, 1}
 };

 for(int i = 0; i < 8; i++)
 {
  int curx = x;
  int cury = y;
  for(int j = 2; ; j++)
  {
   curx += vectors[i][0];
   cury += vectors[i][1];
   if(curx < 0 || cury < 0) break;
   if(curx >= BOARD_SIZE || cury >= BOARD_SIZE) break;
   if(array[curx][cury] != n) break;

   if(j >= STONES_FOR_WIN) return true; // win
  }
 }
 return false; // continue
}
334デフォルトの名無しさん:2005/10/04(火) 20:03:17
>>333
これのどこがリファクタリングなんだろうか・・・・・
335デフォルトの名無しさん:2005/10/05(水) 04:32:39
>リファクタリング 【refactoring】. プログラムの振る舞いを変えることなくソースコードを変更すること。

おもいくそ違っとるがな >333
精進せえよ
336neta:2005/10/08(土) 17:58:16
void Func(void)
{
 int i = 0;
 while ( 1 ) {
  if ( Judgement(i) > 0 ) {
   Execute( i );
   i++;
  }
  else {
   break;
  }
 }
}
337クラス化してみた:2005/10/08(土) 20:29:49
それをどうせえっちゅうねん
338デフォルトの名無しさん:2005/10/09(日) 07:27:31
for(i=0; Judgement(i) > 0; ++i) Execute( i );
339デフォルトの名無しさん:2005/10/18(火) 05:25:57
もうちょっと面白いネタ投下してくれ
340デフォルトの名無しさん:2005/10/19(水) 02:51:21
 printf("並び 1:昇順 2:降順\n");
 scanf("%d", &k);
 start = clock();
 if(k==1){
  for(i=0; i<n-1; i++){
   for(j=i+1; j<n; j++){
    if(z[i]>z[j]){ temp = z[j]; z[j] = z[i]; z[i] = temp; }
   }
  }
  for(i=0; i<n; i++){ printf("%d\n", z[i]); }
 }
 else if(k==2){
  for(i=0; i<n-1; i++){
   for(j=i+1; j<n; j++){
    if(z[i]<z[j]){ temp = z[j]; z[j] = z[i]; z[i] = temp; }
   }
  }
  for(i=0; i<n; i++){ printf("%d\n", z[i]); }
 }
 finish = clock();
 printf("処理時間→%lf\n", finish - start);
341デフォルトの名無しさん:2005/10/19(水) 18:02:08
sort使えで終わるじゃんか・・・
342デフォルトの名無しさん:2005/11/03(木) 14:03:26
サンプルコード
(1987年度「最悪なスタイル賞」受賞作品 by Spencer Hines)
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79,
ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot:
if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott;
gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0)
goto oggt; goto ggot; ogog: if ( !ogot) goto gogo;
goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto
gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg;
goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo);
goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto
oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3;
goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo;
goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen(
toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto
ggot;}
343デフォルトの名無しさん:2005/11/09(水) 02:10:28
obfuscatorかけたような感じだな
344デフォルトの名無しさん:2005/11/12(土) 19:03:05
上司SEにスケジュールの遅れで怒られるのが嫌なのでとりあえず単体テストおkにしておいて
あとでこっそり修正するのもリファクタリングか?
345デフォルトの名無しさん:2005/11/14(月) 03:01:13
振る舞いが変わっちゃうのはリファクタリングとは言わない
デバッキングもしくはリストラクチャリング
346デフォルトの名無しさん:2005/12/21(水) 16:40:16
VS2005でVC++だけがリファクタの機能をハブられた件について
347デフォルトの名無しさん:2005/12/21(水) 20:06:54
>>345 そんな言葉遊びされても現場は困ります。現実を見つめるように。
348デフォルトの名無しさん:2006/01/07(土) 12:35:27
int main(int argc, char* argv[])
{
int a=10,b=7;
printf("割ってかける演算子、かけて割る演算子\n");

// 3で割ってから3でかける演算子
a/*=3;
  
// 5でかけてから5で割る演算子
b*/=9;

printf("a=%d b=%d\n",a,b);
getchar();
return 0;
}
349デフォルトの名無しさん:2006/01/08(日) 12:59:29
コメント文にしか見えませんけど・・・
350デフォルトの名無しさん:2006/02/13(月) 23:38:28
利ファクタリングしてる?
351デフォルトの名無しさん:2006/02/14(火) 00:59:07
コントにしか見えませんけど・・・
352デフォルトの名無しさん:2006/02/14(火) 15:53:56
もうややこしいこと言わんと全部作り直せや
353デフォルトの名無しさん:2006/02/14(火) 19:13:15
#include <stdio.h>
int main(int, char *[])
{
int a=10, b=7;
printf("割ってかける演算子、かけて割る演算子\n");
// 3で割ってから3でかける演算子
a /= 3; a *= 3;
// 5でかけてから5で割る演算子
b *= 5; b /= 5;

printf("a=%d b=%d\n", a, b);
getchar();
return 0;
}

振る舞いは変わってないはずだが元のコードに意味がなさ過ぎるので
リファクタリングしようが何しようがやっぱり意味が無い。
大体コメントは5なのにコードは9ってどっちなんだよ。
いや中間全部コメントだけどさ…
354デフォルトの名無しさん:2006/02/14(火) 22:58:47
>>353
クマー
355デフォルトの名無しさん:2006/02/23(木) 02:02:32
アフォなコメントは悪
除去汁!
356デフォルトの名無しさん:2006/06/21(水) 21:43:46
357デフォルトの名無しさん:2006/06/21(水) 22:10:45
>>356
仕様が無けりゃリファクタリングなんてできないよ。
358デフォルトの名無しさん:2006/06/22(木) 00:24:42
359デフォルトの名無しさん:2006/06/22(木) 00:25:50
Classとか使うのも可。<358
360デフォルトの名無しさん:2006/06/22(木) 00:29:25
某宿題スレの奴で、コンストラクタとか使ってくれという依頼。とりあえずクラス使うようにしたのがこれ。
配列は使ってない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2119.txt
361デフォルトの名無しさん:2006/06/22(木) 00:31:21
さあどうだ?ウズウズするだろう?
暇だったら>>358をリファクタリングしてくれ。
362デフォルトの名無しさん:2006/06/22(木) 10:08:05
>>358
とりあえず配列と関数を使うようにしてみた。
( 暫定 )
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2142.cpp
363356:2006/06/22(木) 19:48:32
仕様は書くほどのものではないのですが、
何の変哲も無いB木です。
データの追加と削除のみができます。
364デフォルトの名無しさん:2006/06/22(木) 20:18:43
俺の人生をリファクタリング
365デフォルトの名無しさん:2006/06/22(木) 22:10:28
>>364
仕様は?
366デフォルトの名無しさん:2006/06/22(木) 23:29:06
>>363
何かしらの問い合わせを持たないと、どんな実装でもテスト不能なわけだが。
367デフォルトの名無しさん:2006/06/22(木) 23:53:15
B-Treeなんだし、提示されたコードが正しく動いているという前提ならリファクタリングは出来る。
ただ面白みがないので、俺はやらんが。
368デフォルトの名無しさん:2006/06/25(日) 20:37:58
>358
とりあえずmain()だけ
{
//◆タイトル
title();

//◆ゲームシステム
int credit;//出力整数:所持メダル数
int game=0;//出力整数:総ゲーム回数

srand( (unsigned)time( NULL ) );
for(credit = 5; credit > 0;){// ↓ ↓ ↓ ↓ ↓ ここからループ ↓ ↓ ↓ ↓ ↓
int bet;//入力整数:賭けメダル数
if((bet = setBet(credit)) == 0) continue;
if(bet<0 && endCheck()) break;
credit -= bet;

//メダル投入完了・ゲーム開始
++game;
dispSlot(bet);
reelStop(bet);
credit += payCheck(bet);
//ゲーム終了
}// ↑ ↑ ↑ ↑ ↑ ループここまで ↑ ↑ ↑ ↑ ↑

//メダル切れもしくは任意の終了
endTitle(credit, game);
}
369デフォルトの名無しさん:2006/07/27(木) 09:26:32
hos
370デフォルトの名無しさん:2006/10/31(火) 12:06:38
ファウラーの「リファクタリング」を拾い読み
してふと思ったこと。「クラスの抽出」で多量のメソッド
とデータがある場合、とありますが、(定)量的な目安なんか
は議論されているのだろうか。
371デフォルトの名無しさん:2006/11/01(水) 01:52:31
372デフォルトの名無しさん:2006/11/01(水) 07:56:37
>>371
ナールほどね。こういう方面からのアプローチもあるね。
でもソフトウェアエンジニアリングプロパーでの議論
とかOO業界での論議とかは、ちょっと見当たらない。
知ってる人がいたら教えて。なんかベックの未邦訳
の論文でちらっと読んだ気がするんだけど。。。
記憶違いかも。
373デフォルトの名無しさん:2006/11/18(土) 17:59:10
>>364
アウトプットは同じでいいの?
374デフォルトの名無しさん:2006/11/18(土) 18:00:46
なんか、PMDっていうソースコードをチェックするツールに
「複雑すぎる、どないかせぇ!」ってよく怒られます。
>>370
なんか関係ありかなぁ
375デフォルトの名無しさん:2007/04/12(木) 23:25:52
 
376デフォルトの名無しさん
リバーシスレより
マクロ使いまくり。

ttp://up2moe.moe.hm/img/q927.txt