サンプル問題 科目A 問9

問題

プログラムのコーディング規約に規定する事項のうち,適切なものはどれか。 

ア  局所変数は,用途が異なる場合でもデータ型が同じならば,できるだけ同一の変
数を使うようにする。 
イ  処理性能を向上させるために,ループの制御変数には浮動小数点型変数を使用す
る。 
ウ  同様の計算を何度も繰り返すときは,関数の再帰呼出しを用いる。 
エ  領域割付け関数を使用するときは,割付けができなかったときの処理を記述する。

出典:基本情報技術者試験 サンプル問題 

コーディング規約とは

コーディング規約をGoogle検索すると、次のような説明が見つかりました。私の感覚から言うと、納得できる説明です。

コーディング規約とは、エンジニアやプログラマーが複数人で同一のタスクやプロジェクトを行う際に、ソースコードについて定めたルールのことです。 プログラムがどのように作られるべきかを示し、品質を保つために作成されます。 規約といっても、実際の内容は、タスクやプロジェクトを行うチームによって異なります。

コーディング規約とは?必要な理由と、入れるべき項目、必要ないという意見について

コーディング規約には、これが正解、というものはありません。しかし、何でも好きなように決めて良い、ということもないでしょう。

この問題は適切なものを聞かれているので、それ以外は明らかに不適切なのでしょう。

選択肢を見てみる

局所変数は,用途が異なる場合でもデータ型が同じならば,できるだけ同一の変
数を使うようにする

これは、全く異なる役割の変数を、型が同じという理由だけで使い回すことを言っています。一般的にはバグの温床になりやすいので、推奨されないでしょう。

ただし、絶対にダメというわけではなく、例えば使えるメモリ量が極限まで少ない組み込み機器などでは、仕方なくこういう規約を設けるかも知れません。昔、4ビットマイコンを使っている人に話を聞いたことがあり、限られたメモリに収めるために涙ぐましい努力をしているようでした。

しかし、一般論としてこれは避けたいので、この問題では不適切と言えるでしょう。

イ 処理性能を向上させるために,ループの制御変数には浮動小数点型変数を使用す

処理性能を向上させるためには、ループ制御変数の型をどうするか、という話です。一般的には整数型か、そのCPUが自然に扱える型にするのだと思いました。

ループ制御変数に浮動小数点型変数を使う場合もあると思いますが、普通はそれが処理性能向上につながることはないでしょう。浮動小数点型の演算は、たとえ値を+1するだけでも、結構面倒です。

もしかすると、ループ制御変数として使える型のうち一番軽く処理できるのが浮動小数点型、という処理系があるのかもしれません。「そのCPUが自然に扱える型」が浮動小数点型という場合です。しかしそれは一般的ではないでしょう。

こういうことから、この問題ではこの選択肢は不適切だと思います。

ウ 同様の計算を何度も繰り返すときは,関数の再帰呼出しを用いる

一般的に言って、関数の再帰呼び出しは、他の方法に比べて明らかにメリットがある場合しか使われないように思います。昔、業務で再帰呼び出しを使うプログラムを書いたところ、コードレビューでその理由を説明させられたことがあります。

ただ、ソースコードでは再帰呼び出しを使い、処理系でループに最適化して実行する、ということはあります。コーディング規約はソースコードの書き方の規約です。こういう処理系を前提とするプロジェクトであれば、再帰呼び出しが絶対ダメということはないでしょう。

とはいえ、この問題はもっと一般的なことを聞いているので、一般論としては適切ではないと思います。

エ 領域割付け関数を使用するときは,割付けができなかったときの処理を記述する

領域割付け関数はメモリが足りないなどの理由で失敗することがあるので、その場合のエラー処理をあらかじめ考えておく、という話です。

領域割付け関数に限らず、これは適切ですね。というか、コーディング規約で領域割付け関数だけ記述することも少ないと思いますが。

回答

ということで、特殊な場合はいろいろ考えられますが、一般論として言うと、エが答えです。