面倒くさがり屋さんは素質がある | 技術者が教える初心者さんのためのC言語

技術者が教える初心者さんのためのC言語

〜最小限の知識でプログラム〜

いつも感謝しています。Nです。

前回の記事「Helloに下線を引いて背景色も変えてみよう」
http://ameblo.jp/engineertalksc/entry-12089758247.html
で、端末に表示されるHelloの文字をだいぶカスタマイズできるようになってきました。

今日は、前回のソースファイル(hello2.c)を少し整理してみたいと思います。

本日のブログテーマ「面倒くさがり屋さんは素質がある」を読まれて、「えっ、どういうこと?」と思われた読者さんもいるかもしれません。

実はこの言葉は、私がまだ新入社員だったころに先輩から言われた言葉です。

「優秀なプログラマーって結構面倒くさがり屋が多いんだよ」と。

この言葉の意味するところを知ることで、プログラムを整理する目の付けどころが分かってきます。

優秀なプログラマーというのは、「同じようなコードを何度も書きたくない」「思考の流れが止まるような書き方はしたくない」、そういう事は「すごく面倒くさい」と思っています。面倒くさいから、なるべくそういうことを避けるにはどうすれば良いかなぁと考えてプログラムを書こうとします。

ここにプログラムを整理するポイントがあります。つまり、

1:同じようなコードを何度も書いているところは無いか?

2:思考の流れが止まってしまうところは無いか?

に注目してプログラムを改善しようと考えます。

この上記二点を「意識」するだけでも、徐々にプログラムが上達していきますので、是非皆さんが書いたプログラムもこの視点から眺めるようにしてみてくださいね。

本ブログでは、皆さんにこの力も付けて頂きたいので、皆さんと一緒に書いているプログラムも徐々に徐々に変化するようにしていこうと考えています。

さて、具体的に述べて行きますね。

1:同じようなコードを何度も書いているところは無いか?

実はこれは、「hello1.c」から「hello2.c」になったときに忍ばせていました。
文字色設定の部分で、

printf("¥033[30m"); /* 黒 */
printf("¥033[31m"); /* 赤 */
printf("¥033[32m"); /* 緑 */
printf("¥033[33m"); /* 黄 */
printf("¥033[34m"); /* 青 */
printf("¥033[35m"); /* 紫 */
printf("¥033[36m"); /* 水色 */
printf("¥033[37m"); /* 白 */
printf("¥033[39m"); /* 規定色 */

printf("¥033[3%dm",数字);
に変えています。これは、この観点からプログラムを改善しました。

2:思考の流れが止まってしまうところは無いか?

これは、今回皆さんにお送りするプログラム(hello3.c)で改善していますが、すこし簡単に述べると、

printf("¥033[3%dm",数字); 等の部分です。

そもそも、printf("¥033[3%dm",数字);の部分が数字と記号の羅列なので、ふと「えっと、これは・・・」と思考の流れが途絶えてしまいます。

そこで、#defineというものを使用して、思考の流れが止まらないような工夫をしています。

#define  名前 定数

とすることで、プログラム中に現れた「名前」を「定数」に自動的に置き換えてくれます。C言語では伝統的に「名前」には大文字を使用するので、プログラムの中で大文字の単語を見たら、このパターンを表しているのではと思ってみてください。
#define  RED   1 あたりがこのパターンを用いています。

#define  名前(引数)   引数を使った置き換えのプログラム

とすることで、プログラム中に現れた「名前(引数)」を「引数を使った置き換えプログラム」置き換えてくれます。

#define  setCharColor(n)   printf("¥033[3%dm", (n) ); 

setCharColor( YELLOW ); =   printf("¥033[3%dm", (3) );

を意味しています。

では、本日も「3つの手順」を実行してみましょう。

STEP1
:以下リンクより、今回のプログラムをダウンロードしてみてください。
https://www.dropbox.com/s/6zwpjseflh95p0k/hello3.c?dl=0

STEP2:ファイル名はhello3.cとして「3つの手順」を実行してみてください。

STEP3:今まで作られたプログラムも、プログラムを整理する2つのポイントから観て整理してみてください。

STEP4:もしアイデアが出たら、それも「3つの手順」で実行してみてくださいね。

追伸)
「printf関数まとめ」というファイルを作成しました。

printf関数の書式について、すごく簡単に要点だけを抽出していますので、printf関数が分からない読者さんはこれをみることで、頭が整理されると思います。

ダウンロードリンクは以下になります。
https://www.dropbox.com/s/kt9qvv4ucx5sdkc/printf%E9%96%A2%E6%95%B0%E3%81%BE%E3%81%A8%E3%82%81.pdf?dl=0