プログラミングの学び方(4) – 出力メッセージの実装の仕方
プログラミングの学び方シリーズも、いつの間にか連載シリーズになってきた笑
前回は、プログラミングの学び方(3)で、処理フローの重要性をお伝えした。
今回は、実際にプログラムを書く際に、気を付けたほうが良いポイントの1つ、「出力メッセージの実装の仕方」を、個人的な経験をもとにお伝えする。
処理フローは決まった、が・・・
処理フローを設計書やラフの図で定義したのちに、実際にプログラミングを書いていくと、いくつか悩ましい問題が出てくる。特に悩ましいのが、処理フローには出てこないが処理する際に必要な機能だ。
サーバーサイドのWebプログラミングの例でいえば、
- エラーメッセージの出力
- ログ出力
- 通信処理(≒API連携)結果を踏まえた、次の処理
といったケースがあげられる。
例えば、以下のソースコードを見てみよう。
function validate($request) { if (!ctype_digit($request['tax'])) { // ここでエラーメッセージを返したい① return false; } if (!ctype_digit($request['price'])) { // ここでエラーメッセージを返したい② return false; } return true; }
プログラミングを始めて数年以内の方には共感いただけるかもしれないが、このようなエラーメッセージをクライアントサイド返す処理の実装に迷ったことはないだろうか?
上記はPHPのソースコードなので、ソースコード内にHTMLタグを差し込むことでエラーメッセージを出力することもできるが、デザイン修正等の変更に弱くなってしまうので、ここではその手法はとらない前提とする。
そこで、このソースコードを修正してエラーメッセージを返すにはどうすればよいだろうか?
メッセージ出力処理の実装例
上記の処理を修正するにはいくつか対策があるが、今回は以下の2種類の実装方法で解説する。
- 参照渡しでエラーメッセージを返す
- 戻り値にエラーメッセージを含める
参照渡しでエラーメッセージを返す
まず、参照渡しでエラーメッセージを返す実装を見てみよう。
function validate($request, &$errorMessage) { if (!ctype_digit($request['tax'])) { // ここでエラーメッセージを返したい① $errorMessage = 'Taxは数値で入力してください'; return false; } if (!ctype_digit($request['price'])) { // ここでエラーメッセージを返したい② $errorMessage = 'Priceは数値で入力してください'; return false; } return true; }
このように、処理の途中でエラーメッセージをセットし、戻り値を返すことになる。
エラーメッセージをセットできるようになったので、先ほどのソースコードよりは若干エラーハンドリングが行いやすくなっている。
オブジェクトや連装配列でエラーメッセージを返す
一方、オブジェクトや連装配列でエラーメッセージを返す場合、次のようになる。
function validate($request, &$errorMessage) { if (!ctype_digit($request['tax'])) { // ここでエラーメッセージを返したい① $result = array( 'success' => false, 'message' => 'Taxは数値で入力してください' ); return $result; } if (!ctype_digit($request['price'])) { // ここでエラーメッセージを返したい② $result = array( 'success' => false, 'message' => 'Priceは数値で入力してください' ); return $result; } $result = array( 'success' => true, 'message' => '' ); return $result; }
先ほどの戻り値との大きな差は、オブジェクトの利点を活用しやすいところだ。つまり、オブジェクト指向の最大のメリットである拡張性を担保している点にある。
例えば、今後エラーコードも一緒に返したり、エラーの発生場所もついでに返したりすることができるようになるわけだ。
実装例○○の時に△△の様な実装の型ってあるの?
ここまで、メッセージの出力処理について簡単なソースコードを用いて実例を示してきたが、メッセージの出力だけにとどまらず、世の中にはある程度プログラムを書く際に「こうしたほうが良い」という型が存在する。それをデザインパターンと呼ぶ。
後日、そのデザインパターンと使うシーンについて解説していこうと思う。