『手続き型』のプログラミング言語を学ぶポイント

   

手続き型言語というと、C言語だったり、もっと古いとCOBOL、FORTRANなどがあります。

古い言語っていう印象があるかと思いますが、オブジェクト指向言語もメソッドの中は基本的に手続き型です。

オブジェクト指向って手続きとデータをオブジェクトにして一体として扱うものです。

Javaであれば
・手続き = メソッド
・データ = フィールド(インスタンス変数)

C++であれば
・手続き = メンバー関数
・データ = メンバー変数

となってます。

よって、メソッドやメンバー関数の中は手続きなので、手続き型言語の基本を学ぶとオブジェクト指向プログラミングにも大いに役立ちます。

そんなわけで今回は「手続き型のプログラミング言語を学ぶポイント」を紹介します。

専門学校で習った基礎中の基礎の話

専門学校でプログラミングを習った時に、はじめに言われたことがあります。

「同じことを何度も繰り返し書かないようにしましょう = 重複したコードをなくしましょう」

同じコードがいくつかあったら、関数に切り出して共通化して、それを呼び出すようにしましょうということです。

これをやっていくと大体の場合、うまくコードを書けると思います。

「わかりやすく書くために、長いコードは適切に関数・メソッドに切り分けていきましょう」というのもありますが、これって、人によって何行続いたら長いと感じるかって異なるので一概には言えませんが、「重複してるコード」というのは誰にとっても同じです。ですから、一つの確固たるポリシーになるわけです。

そして、もう一つのポイントは「構造化プログラミング」です。す。

構造化プログラミングをしよう!

構造化プログラミングを簡単に言うと「GOTO文を使わないようにしましょう」ってことです。Wikipediaを見ると、「構造化プログラミング = GOTO文を使わないようにする」という認識は誤りであると書かれていますが、ひとまず、最初の入口としてGOTO文を使わないというトピックから理解していくことは良いと思います。

C言語やC++ではGOTOというものがあります。指定した場所に処理をジャンプさせる命令です。

GOTO ADMIN_LOGIC;って書くと、ADMIN_LOGIC:と書いた場所に移ります。

その後、GOTO START;と書いたところでは、START:の地点に戻ります。

コードがあちこちに行ったり来たりします。しかも、そこにルールはありません。

普通プログラミング、if ~だったら、~をするみたく、制御構造が階層的で秩序がありますが、GOTO文を使うと、印をつけたところにいきなり飛んでいってしまうので、プログラム構造が無秩序になってしまうんです。

こういうコードって、書いた本人ならば、わかっても他人が読むとわけがわからなくなります。このサンプルだとコードが短いから、そこまで難しく感じないでしょうけど、これが何万行もあるコードの中で、GOTO XXXX;と数万行先にジャンプされたら追っていけないですよね?

ですから、最近のプログラミング言語にはGOTO文ないんです。

また、GOTO文を多用したコードをスパゲッティコードと言います。スパゲッティのように複雑に絡み合っているというのが名前の由来です。

名前は美味しそうなんですけど、決してそんなコードは書いてはいけません(笑)

プログラムの階層を意識しよう

大きなものって階層的に分けていくと、把握がしやすくなります。 何かを説明する時にも、大枠を説明してから、詳細を説明した方がわかりやすいですよね。 プログラムを書くときも同じで、大きな処理ごとに関数・メソッドを作って、それらを呼び出す、全体の流れを最初に作って、その後、各メソッドに詳細ロジックを書いていくと、読みやすく書きやすいコードになります。 その時に、階層化のレベル = メソッドに切り出す単位のレベルを合わせる必要があります。 例えば、あるプログラムでテキストファイルを一行ずつ読み込んで処理するコードがあったとします。そのループの中を関数・メソッドに切り出したとします。 その場合、別のプログラムでも、同じようにループの中は関数・メソッドに切り出します。すると、階層化のレベルが統一されたコードになります。 PHPのコード例で示します。

という風に実装したのに、別の同じようなプログラムで

と実装したら階層のレベルが合っていません。前者は一行の処理を関数に切り出しているのに後者はループの中に直接をロジックを書いているからです。

そうではなく後者を

と書いて、統一した方が、コードの書き方が揃うので、理解がしやすいし、書く際にも自分の中で書き方をパターンか出来るので、発想やコードパーツを再利用することが出来ます。

チーム開発では他のメンバーに合わせるべき?

趣味などで自分一人で開発する場合は自分で階層化レベルのルールを決めればいいんですけど、会社でチーム開発をする場合は、自分の中だけで統一してても他の人とずれていた意味がありません。

厳密にコーディング規約が決まってる会社もありますが、そうでない会社も多いものです。

ではどうすればいいかというと、自分のコーディングルールは、できるだけ一般的なものにします。

「こういう処理だったら、こういう風に階層化するよな」っていう発想でルールを作っていきます。

自分の個人的な意見だけでなく、「一般的にどうかな?」とか、「あの先輩だったら、どう書くかな?」などのように考えるんです。

そうやって作り出したルールでコードを書いていけば、大体は他のメンバーが書いたコードと同じような階層わけのコードになると思います。

こうすれば、厳密なコーディング規約がなくても、ある程度コードレベルの揃ったソフトウェアになるはずです。

とはいえ、自分が一般的と思っている書き方でも、他の人はそう思わないかもしれませんし、他のメンバーには一般的なコードを書こうというモチベーションが無いかもしれません。

こういう場合、一番いいのは他のメンバーが書いたコードを読んでみることです。「この人はこういう処理ではこういうふうに書くのかぁ」とか、「このプロジェクトのコードはこういう特徴があるな」などというのが見えてきます。

それに合わせたコードを書けばいいんです。もちろん、あまりに誤ったコードの書き方をしているのならば、それに従う必要はないですし、「これ、こういう風に変えたほうがいいと思います」という提案をすればいいでしょう。

プログラミング作法を啓蒙しよう!

「一般的なコードを書きましょう」という話は私が勝手に考えだしたものではなく、カーニハンとロブ・パイクが書いたプログラミング作法という名著でも述べられています。

この本の中で良いコードとは

1. 簡潔性 …コードに重複がなく簡潔であること
2. 明瞭性 …わかりやすいこと
3. 一般性 …一般的な書き方であること(奇をてらったものでないこと)

とされています。この記事で紹介した内容とも合致しています(ドヤ顔!)

あまりに汚いコードを書く人がいたら、読むようにぜひ勧めてみてください。

プログラミング作法は2000年に出版された本でやや内容が古いので、リーダブルコードも合わせて読むといいと思います。


エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - 勉強法