xp寺子屋第9回「シンプル・プログラミング」

54
XPJUG関西 / XP寺子屋 1 「シンプル・プログラミング」 2013.11.02 XP寺子屋

Upload: takepu

Post on 13-Jul-2015

1.194 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

1

「シンプル・プログラミング」

2013.11.02

XP寺子屋

Page 2: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

2

自己紹介

Page 3: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

3

・・・・名前名前名前名前 :::: 西西西西 丈善丈善丈善丈善((((たけぷたけぷたけぷたけぷ~)~)~)~)

・・・・仕事仕事仕事仕事 :::: 組組組組みみみみ込込込込みみみみ系系系系

・・・・業界歴業界歴業界歴業界歴 :::: 20年以上年以上年以上年以上

・・・・コミュニティコミュニティコミュニティコミュニティ :::: XPJUG関西関西関西関西、、、、PFP関西関西関西関西

・・・・使用言語使用言語使用言語使用言語 :::: C, C++

・・・・SNS :::: Twitter takepu

FaceBook 西西西西 丈善丈善丈善丈善

・・・・宣伝宣伝宣伝宣伝 :::: ▼▼▼▼アジャイルラジオアジャイルラジオアジャイルラジオアジャイルラジオ 毎週水曜日公開毎週水曜日公開毎週水曜日公開毎週水曜日公開

http://www.agileradio.info/

▼▼▼▼XP祭祭祭祭りりりり関西関西関西関西2014 2014年年年年4月月月月26開催決定開催決定開催決定開催決定!!!!

http://www.xpjug.jp

▼▼▼▼出張出張出張出張アジャイルアジャイルアジャイルアジャイル社内研修社内研修社内研修社内研修((((無料無料無料無料))))受付中受付中受付中受付中

Page 4: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

4

アジェンダ

Page 5: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

5

アジェンダ

• 「シンプル・プログラミング」講座 - 50分

• コードレビュー - 10分

• 休憩 - 5分

• 練習 - 30分

• 実習 - 90分

• ふりかえり - 10分

• あとかたづけ - 10分

Page 6: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

6

シンプル・プログラミング

って何?

Page 7: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

7

ようこそ「シンプル・プログラミング」の世界へ!

Page 8: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

8

早速質問。

「シンプル」とは、どういう意味?

Page 9: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

9

kotobankより引用。

Page 10: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

10

続いて質問。

「シンプルなプログラム」とは、どんなプログラム?

Page 11: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

11

●行数が少ない?

●関数の数が少ない?

Page 12: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

12

大切なのは、

「分かりやすい」事.

Page 13: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

13

どっちが簡単?

Page 14: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

14

シンプルなプログラムのメリット

• 間違いにくい

• バグが混入しにくい

• デバッグが簡単

• 他人が書いても分かりやすい

• バグの発見が容易

• 仕様変更が容易

• 性能改善も用意

Page 15: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

15

シンプルなプログラムのデメリット

• 人に自慢できる複雑で難解なコードを書いて悦に入る事ができない

• 複雑なコードを理解した時に得られる達成感が得られない

• 残業できない

Page 16: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

16

シンプルなプログラムと複雑なプログラム、

あなたはどちらを選びますか?

Page 17: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

17

シンプル・プログラミング6つの原則

1. コメントの書き方

2. 名前の付け方

3. コピペ禁止

4. 1関数1機能

5. ボトムアップアプローチ

6. インクリメンタル開発

Page 18: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

18

1.コメントの書き方

って知ってた?

Page 19: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

19

1.コメントの書き方

• 基本は、「コメントが不要なくらい分かり易いコードを書く」.

• どうしても説明が必要な箇所にコメントを書く.

• コメントは、「処理」では無く、「やりたい事」を書く.

Page 20: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

20

悪い例/******************//* バブルソート *//******************/#include <stdio.h>#define MAX 10

void main( ){

int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 };int n,i,w;

// 未整列データ数for( n=MAX; n>1; n-- ){

for( i=0; i<n-1; i++ ){

// 次のデータが小さいif ( data[i]>data[i+1] ){

// 入れ替え—w=data[i];data[i]=data[i+1];data[i+1]=w;

}}

}

printf("¥nソート後¥n");for( i=0; i<MAX; i++ ){

printf("%d ",data[i]);}printf("¥n");

}

Page 21: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

21

改善例/******************//* バブルソート *//******************/#include <stdio.h>#define MAX 10

void main( ){

int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 };int n,i,w;

// 未整列データ数for( n=MAX; n>1; n-- ){

for( i=0; i<n-1; i++ ){

// 次のデータが小さいif ( data[i]>data[i+1] ){

// 入れ替え—w=data[i];data[i]=data[i+1];data[i+1]=w;

}}

}

printf("¥nソート後¥n");for( i=0; i<MAX; i++ ){

printf("%d ",data[i]);}printf("¥n");

}

/******************//* バブルソート *//******************/#include <stdio.h>#define MAX 10

void main( ){

int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 };int n,i,w;

// // // // バブルソートバブルソートバブルソートバブルソートをををを行行行行ううううfor( n=MAX; n>1; n-- ){

for( i=0; i<n-1; i++ ){

// // // // データデータデータデータをををを交換交換交換交換するするするするif ( data[i]>data[i+1] ){

w=data[i];data[i]=data[i+1];data[i+1]=w;

}}

}

// // // // ソートソートソートソート結果結果結果結果をををを表示表示表示表示するするするするprintf("¥nソート後¥n");for( i=0; i<MAX; i++ ){

printf("%d ",data[i]);}printf("¥n");

}

Page 22: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

22

解説/******************//* バブルソート *//******************/#include <stdio.h>#define MAX 10

void main( ){

int data[MAX]={ 80,5,36,23,12,100,45,9,1,78 };int n,i,w;

// // // // バブルソートバブルソートバブルソートバブルソートをををを行行行行ううううfor( n=MAX; n>1; n-- ){

for( i=0; i<n-1; i++ ){

// // // // データデータデータデータをををを交換交換交換交換するするするするif ( data[i]>data[i+1] ){

w=data[i];data[i]=data[i+1];data[i+1]=w;

}}

}

// // // // ソートソートソートソート結果結果結果結果をををを表示表示表示表示するするするするprintf("¥nソート後¥n");for( i=0; i<MAX; i++ ){

printf("%d ",data[i]);}printf("¥n");

}

/******************//* バブルソート *//******************/// // // // バブルソートバブルソートバブルソートバブルソートをををを行行行行うううう

// // // // データデータデータデータをををを交換交換交換交換するするするする

// // // // ソートソートソートソート結果結果結果結果をををを表示表示表示表示するするするする

•コメントは「やりたい事」

•コードは「実現方法」

Page 23: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

23

2.名前の付け方

にルールがあるの?

Page 24: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

24

2.名前の付け方

• 一般的に、コーディング規約で命名規則が決まっている.

• しかし、諸事情でコーディングルールが無かったり、非オブジェクト指向言語では、分かりにくい名称がはびこっている.

• 最近のオブジェクト指向言語で提唱されている命名規則を使用することで、コードの可読性が向上し、シンプルなプログラミングが可能となる.

Page 25: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

25

命名規則(1) 関数名

• 変数を取得する関数– XXX getXXX( )

• 変数を設定する関数– void getXXX( XXX 変数 )

• Booleanを返す関数– is + 形容詞,can + 動詞,has + 過去分詞,三単元動詞,三単元動詞 + 名詞.

– boolean isEmpty() // JavaBeans でプロパティとして扱える(推奨)

– boolean empty() // だめ!’空にする’という動詞的な意味に取れるため良くない.

– boolean canGet()

– boolean hasChanged()

– boolean contains(Object)

– boolean containsKey(Key)

Page 26: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

26

命名規則(2) 変数名

• Boolean 変数– 形容詞,is + 形容詞,can + 動詞,has + 過去分詞,三単元動詞,三単元動詞 + 名詞.

– boolean isEmpty

– boolean dirty

– boolean containsMoreElements

• 全て有意な名前を付ける

– Info, Data, Temp, Str, Bufという名前は極力使わない

– ループカウンタなどで用いる i, j, k も、適切な名前を付ける

Page 27: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

27

命名規則(3) 名前の対称性

• add/remove • insert/delete • get/set • start/stop • begin/end • send/receive • first/last • get/release • put/get • up/down • show/hide • source/target • open/close

• source/destination

• increment/decrement

• lock/unlock

• old/new

• next/previous

クラス名,メソッド名を付ける際は,本頁記載の英語の対称性に気を付ける.

Page 28: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

28

悪い例/****************/

/* 素因数分解 */

/****************/

#include <stdio.h>

#include <stdlib.h>

void FuncFactorization ( int argc, char *argv[] )

{

int n0,n; // 整数

int ns=2; // 素因数

int j; // 乗数

n0=atoi(argv[1]);

// 因数分解

for( n=n0,ns=2; n>=ns; ns++ )

{

for( j=0; n%ns==0; j++ )

{

n /= ns;

}

if ( j==0 ) continue; // 1回も割り切れなかった

printf("素因数:%d 乗数:%d¥n",ns,j);

}

}

Page 29: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

29

改善例/****************/

/* 素因数分解 */

/****************/

#include <stdio.h>

#include <stdlib.h>

void FuncFactorization ( int argc, char *argv[] )

{

int n0,n; // 整数

int ns=2; // 素因数

int j; // 乗数

n0=atoi(argv[1]);

// 因数分解

for( n=n0,ns=2; n>=ns; ns++ )

{

for( j=0; n%ns==0; j++ )

{

n /= ns;

}

if ( j==0 ) continue; // 1回も割り切れなかった

printf("素因数:%d 乗数:%d¥n",ns,j);

}

}

/****************/

/* 素因数分解 */

/****************/

#include <stdio.h>

#include <stdlib.h>

void DoFuncFactorization ( int argc, char *argv[] )

{

int num; // 整数

int num_div; // 割り算した整数

int prime = 2; // 素因数

int multiple; // 乗数

num=atoi(argv[1]); // 整数を入力

// 素因数分解

for( num_div=num,prime=2; num_div>=prime; prime++ )

{

for( multiple=0; num_div%prime==0; multiple++ )

{

num_div /= prime;

}

if ( multiple==0 ) continue; // 1回も割り切れなかった

printf("素因数:%d 乗数:%d¥n",prime,multiple);

}

}

Page 30: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

30

3.コピペ禁止

コピペで生産

性大幅Up!

なのでは?

Page 31: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

31

3.コピペ禁止

ダメ、絶対!ダメ、絶対!

Page 32: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

32

「コピペ禁止」の理由

• コピペすると、同じコードが重複して存在することになる。

• ある場所でバグが発生すると、重複するコードすべて変更する必要がある。うっかり修正が漏れると、バグが発生。

• 更にややこしいのは、「関数A」では修正必要だが、「関数B」では変更してはならない場合。それが簡単に気付けるかどうか想像して欲しい。

• コピペはバグの温床と知るべし。

Page 33: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

33

悪い例//-----------------------------------------int FuncA( int *array, int array_cnt ){

int idx;for( idx=0; idx<array_cnt; idx++ ){

printf( "%d ", array[idx] );}printf( "¥n" );

}

//-----------------------------------------int FuncB( int *array1, int array_cnt1,

int *array2, int array_cnt2 ){

int idx;int *array;int array_cnt;

array = array1;array_cnt = array_cnt1;for( idx=0; idx<array_cnt; idx++ ){

printf( "%d ", array[idx] );}printf( "¥n" );

array = array2;array_cnt = array_cnt2;for( idx=0; idx<array_cnt; idx++ ){

printf( "%d ", array[idx] );}printf( "¥n" );

}

Page 34: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

34

改善例//----------------------------------------------------------void arrayPrint( int array, int array_cnt ){

int idx;for( idx=0; idx<array_cnt; idx++ ){

printf( "%d ", array[idx] );}printf( "¥n" );

}

//----------------------------------------------------------int FuncA( int *array, int array_cnt ){

arrayPrint( array, array_cnt );}

//----------------------------------------------------------int FuncB( int *array1, int array_cnt1,

int *array2, int array_cnt2 ){

arrayPrint( array1, array_cnt1 );arrayPrint( array2, array_cnt2 );

}

//-----------------------------------------

int FuncA( int *array, int array_cnt )

{

int idx;

for( idx=0; idx<array_cnt; idx++ )

{

printf( "%d ", array[idx] );

}

printf( "¥n" );

}

//-----------------------------------------

int FuncB( int *array1, int array_cnt1,

int *array2, int array_cnt2 )

{

int idx;

int *array;

int array_cnt;

array = array1;

array_cnt = array_cnt1;

for( idx=0; idx<array_cnt; idx++ )

{

printf( "%d ", array[idx] );

}

printf( "¥n" );

array = array2;

array_cnt = array_cnt2;

for( idx=0; idx<array_cnt; idx++ )

{

printf( "%d ", array[idx] );

}

printf( "¥n" );

}

小さい関数を作る事で、再利用性が向上します。

Page 35: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

35

4.1関数1機能

関数は複雑な

方がカッコイ

イのに

Page 36: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

36

4.1関数1機能

• シンプル(=簡単)にコードを書くためには、複雑なコードを書いてはダメ。

• 関数は「小さい機能をまとめる」のはNG。

• 「小さい関数をたくさん作る」方がシンプル。

Page 37: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

37

悪い例/********************************//* ファイルの内容を1行づつ表示 */ /********************************/#include <stdio.h>

int main(void){

FILE *fp;char *fname = "test.txt";char str[100];

fp = fopen( fname, "r" );if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}

printf( "¥n-- fgets() --¥n" );

while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}fclose( fp );return 0;

}

Page 38: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

38

改善例/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

int main(void)

{

FILE *fp;

char *fname = "test.txt";

char str[100];

fp = fopen( fname, "r" );

if( fp == NULL )

{

printf( "%sファイルが開けません¥n", fname );

return -1;

}

printf( "¥n-- fgets() --¥n" );

while( fgets( str, 100, fp ) != NULL )

{

printf( "%s", str );

}

fclose( fp );

return 0;

}

/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

Page 39: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

39

5.ボトムアップアプローチ

上から書くのが普通で

しょ!?

Page 40: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

40

5.ボトムアップアプローチ

• 下(下層)の関数から書く。

• 作った関数単体でテストする。

• テストがパスすれば、その関数の1つ上位関数を作り、以降これを繰り返す。

Page 41: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

41

ボトムアップアプローチのメリット

• 下位関数から開発するので、コンパイルが通しやすい。

• 足元からしっかり開発するので、バグが混入しにくい。

• 呼び出す関数を考慮しなくて済むので、開発中の関数にのみ集中できる。

Page 42: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

42

悪い例/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}

//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}

//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}

//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

①~④の順に開発する

Page 43: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

43

改善例/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}

//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}

//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}

//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}

//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}

//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}

//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

①~③は最下層なのでどの順に開発しても良い

Page 44: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

44

ポイント

• この方法を実現するためには、xUnitなどのテスト環境が必要。

• テスト環境が無ければ、main( )から開発中の関数を呼び出せばOK。関数を追加する度にmain( ) を変更する。最後にmain( )を実装する。

Page 45: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

45

6.インクリメンタル開発

手戻りは悪!

Page 46: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

46

6.インクリメンタル開発

• インクリメンタル(機能を順次追加する)に開発する。

• ①手短な設計 → ②テスト → ③コード → ④リファクタリング

• これを、関数単位に実施する。

• ①手短な設計

– 関数の仕様を考える

• ②テスト

– 関数のテストパターンを考える

– xUnitのテストコードを書く

• ③コード

– テストがパスする様、製品コードを書く

• ④リファクタリング

– コードを見直し、必要であれば修正する。

Page 47: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

47

悪い例/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}

//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}

//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}

//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

•手短な設計

•①~④の順に開発する

•一気にテストを実施

•バグってたら修正

•「リファクタリング」しない

Page 48: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

48

改善例/********************************/

/* ファイルの内容を1行づつ表示 */

/********************************/

#include <stdio.h>

//-------------------------------int main(){

FILE *fp = NULL;

fp = openFile( "test.txt" ) ;if( fp == NULL ){

printf( "%sファイルが開けません¥n", fname );return -1;

}displayFile( fp );closeFile( fp );return 0;

}

//-------------------------------FILE* openFile( char * fname){

return fopen( fname, "r" );}

//-------------------------------void displayFile( FILE* fp ){

char str[100];printf( "¥n-- fgets() --¥n" );while( fgets( str, 100, fp ) != NULL ){

printf( "%s", str );}

}

//-------------------------------void closeFile( FILE *fp ){

fclose( fp );}

•①開発

•手短な設計

•テストパターン検討

•①開発

•main( )から①を呼び出しテスト

•①リファクタリング

•②開発

•手短な設計

•テストパターン検討

•②開発

•main( )から②を呼び出しテスト

•②リファクタリング

Page 49: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

49

「シンプル・プログラミング6つの原則」

をご紹介しました。

Page 50: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

50

シンプル・プログラミング6つの原則

1. コメントの書き方

2. 名前の付け方

3. コピペ禁止

4. 1関数1機能

5. ボトムアップアプローチ

6. インクリメンタル開発

Page 51: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

51

しかし、開発状況により「6つの原則」を守れない

場合があります。

Page 52: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

52

•新しい考え方を導入する時間が無い

•メモリ空き容量が少なく、関数をまとめる必要がある

•高速化のため、変数名を短くする必要がある

などなど。

Page 53: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

53

大切なのは、

「分かりやすい」事.

Page 54: XP寺子屋第9回「シンプル・プログラミング」

XPJUG関西 / XP寺子屋

54

最後までお付き合い頂き、ありがとうございます。