2006年08月24日

[C言語]コードをきれいに見せるコツ

前期の授業中の先生の雑談で、「コードをきれいにみせるには」ってのがあったので、それを実践。

少し前にC言語でコーディングしたプログラムをきれいに見せてみる。

以下のプログラムは座標を回転させるプログラムです。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define MAX_LEN (255)
#define PI 4*atan (1)

int getCoodinate(float *x, float *y);
int getAngle(float *angle);
float getNum();
int getString(char *str);
float string2Num(char *str);
int rotateCoodinate(float *x, float *y, float *rotated_x, float *rotated_y, float angle);
float rotateX(float *x, float *y, float *rotated_x, float angle);
float rotateY(float *x, float *y, float *rotated_y, float angle);
float degree2rad(float angle);
int showCoodinate(float x, float y);

int main()
{
float x, y, angle;      // 回転前のx座標, y座標, 回転させる角度
float rotated_x, rotated_y; // 回転後のx座標, y座標

getCoodinate(&x, &y); // 座標を得る

getAngle(&angle); // 角度を得る

rotateCoodinate(&x, &y, &rotated_x, &rotated_y, angle); // 回転させる

showCoodinate(rotated_x, rotated_y); // 座標を表示する

return 0;
}

/* 座標を得る */
int
getCoodinate(float *x, // x座標
float *y) // y座標
{
printf("Please input x-coodinate. >> ");
*x = getNum();
printf("Please input y-coodinate. >> ");
*y = getNum();
}

/* 回転する角度を得る */
int
getAngle(float *angle) // 角度
{
printf("Please input angle (degree). >> ");
*angle = getNum();
}

/* 数値を得る */
float
getNum(void)
{
char str[MAX_LEN];
float num;
getString(str);
num = string2Num(str);
return num;
}

/* 文字列を得る */
int
getString(char *str) // 文字列のポインタ
{
fgets(str, MAX_LEN, stdin);
}

/* 文字列を数値に変換する */
float
string2Num(char *str) // 文字列のポインタ
{
float num;
num = atof(str);
return num;
}

/* 座標を回転する */
int
rotateCoodinate(float *x, // 回転前のx座標
float *y, // 回転前のy座標
float *rotated_x, // 回転後のx座標
float *rotated_y, // 回転後y座標
float angle) // 回転させる角度
{
rotateX(x, y, rotated_x, angle);
rotateY(x, y, rotated_y, angle);
}

/* x座標を回転する */
float
rotateX(float *x, // 回転前のx座標
float *y, // 回転前のy座標
float *rotated_x, // 回転後のx座標
float angle) // 回転させる角度
{
float rad;
rad = degree2rad(angle);
*rotated_x = *x * cos(rad) - *y * sin(rad); // x' = x・cosα - y・sinα
}

/* y座標を回転する */
float
rotateY(float *x, // 回転前のx座標
float *y, // 回転前のy座標
float *rotated_y, // 回転後のy座標
float angle) // 回転させる角度
{
float rad;
rad = degree2rad(angle);
*rotated_y = *x * sin(rad) + *y * cos(rad); // y' = x・sinα + y・cosα
}

/* 得た角度の単位をラジアンに変換する */
float
degree2rad(float angle) // 角度(°)
{
float rad;
rad = angle * PI / 180;
return rad; // 角度 (rad)
}

/* 座標を表示 */
int
showCoodinate(float x, // x座標を表示
float y) // y座標を表示
{
printf("Rotated Coodinate is (%f, %f)", x, y);
}


どうでしょう、見やすいでしょうか?

先生が話してくれたのは、以下の二つ。これだけでもかなりきれいにみえるとのこと。
まず
#define MAX_LEN (255)
これは、#defineの数値には()をつけるといところです。
文字列を置き換えるだけなので、()をつけないと問題がでてくるかもしれないとのこと。

次に、コレ。
int 
showCoodinate(float x, // x座標を表示
float y) // y座標を表示
{
printf("Rotated Coodinate is (%f, %f)", x, y);
}
引数のところを改行してコメントを書いてやると見やすいとのこと

つまり、
戻り値
関数名(引数1, // 引数1のコメント
引数2, // 引数2のコメント
{

}
のように書くと、非常に見やすいということです。確かに見やすい。引数が何かも、コメントが近くにあってわかりやすい。

C言語に限らず、ほかの言語でもこういうことを意識するとよりキレイなコードが書けるのかな。がんばろっと。
タグ:C C言語
posted by yu at 05:32 | Comment(0) | TrackBack(0) | C/C++
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/22734159
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。