基本情報技術者 2018年 秋期 午前(科目A) 問07
問題文
プログラムのコーディング規約に規定する事項のうち、適切なものはどれか。
選択肢
ア:局所変数は、用途が異なる場合でもデータ型が同じならば、できるだけ同一の変数を使うようにする。
イ:処理性能を向上させるために、ループの制御変数には浮動小数点型変数を使用する。
ウ:同様の計算を何度も繰り返すときは、関数の再帰呼出しを用いる。
エ:領域割付け関数を使用するときは、割付けができなかったときの処理を記述する。(正解)
プログラムのコーディング規約に規定する事項のうち、適切なものはどれか。【午前2 解説】
要点まとめ
- 結論:メモリ割付け関数を使うときは、割付け失敗時の処理(エラー処理や後始末)を必ず規定することが重要です。
- 根拠:割付け失敗はランタイムの致命的な不具合や情報漏洩を招くため、仕様書で扱いを統一する必要があります。
- 差がつくポイント:性能最優先や短いコードのためにエラーチェックを省略しない、可搬性と安全性を最優先に規約を定めましょう。
正解の理由
正解: エ
領域(メモリ)割付け関数は失敗する可能性が常にあり、その場合の振る舞い(戻り値のチェック、リトライ、例外送出、ログ記録、クリーンアップなど)を規約で明確にしておくことはコーディング規約の基本です。割付け失敗を放置するとクラッシュや未初期化参照、セキュリティ脆弱性につながるため、規約に盛り込むのが妥当です。
領域(メモリ)割付け関数は失敗する可能性が常にあり、その場合の振る舞い(戻り値のチェック、リトライ、例外送出、ログ記録、クリーンアップなど)を規約で明確にしておくことはコーディング規約の基本です。割付け失敗を放置するとクラッシュや未初期化参照、セキュリティ脆弱性につながるため、規約に盛り込むのが妥当です。
よくある誤解
- 「ローカル変数を再利用すればメモリ効率が良い」は可読性やバグの温床になりやすく、許容すべきではないと考えられます。
- 「浮動小数点をループ制御に使えば高速化できる」は一般に誤りであり、丸め誤差や性能低下の原因となります。
- 「再帰は読みやすいので何度も繰り返す処理に常用すべき」はスタック深度や性能面での問題があるため安易に使うべきではありません。
解法ステップ
- 各選択肢が「コーディング規約で定めるべき内容か」を基準に評価する。安全性・可搬性・保守性の観点を重視する。
- ア〜ウについては可読性・性能・安全性の観点で実務的に問題があるかどうかを検討する。
- エについては失敗時の扱いが規約に含まれることが安全設計上必要か確認する。
- 最終的に最も妥当で普遍的に適用すべき項目を正解とする。
選択肢別の誤答解説
- ア: 局所変数を用途が異なるのに同一変数で使い回すと可読性とバグ発見性が低下します。規約では明確な命名と責務の分離を推奨します。
- イ: ループ制御変数に浮動小数点型を使うと丸め誤差や予期しないループ継続条件となりやすく、整数型が基本です。性能向上の理由にはなりません。
- ウ: 再帰呼出しは表現力は高いものの、深い再帰でスタックオーバーフローや性能劣化が発生します。繰返し処理は反復(ループ)で記述する方が安全・効率的な場合が多いです。
- エ: エ は正解。割付け失敗の扱いを規約で定めることは、堅牢性・可搬性・保守性の観点から必須です。
補足コラム
コーディング規約は「どう書くか」だけでなく「何をチェックし、何をどう扱うか」を定める文書です。特にメモリ割付けやリソース獲得(ファイル、ソケットなど)は失敗する可能性を前提に設計し、呼出し側とライブラリ側で責任の所在をはっきりさせることが重要です。例:関数は割付け失敗でNULLを返すのか、例外を投げるのか、ログ出力やリトライ方針はどうするかを規約で統一します。
FAQ
Q1: 割付け失敗時の具体的な対処はどのように規定すべきですか?
A1: 戻り値のチェック、例外ポリシー、ログの出力基準、リソース解放順序、アプリケーションの終了方法(安全シャットダウンなど)を明確にします。
A1: 戻り値のチェック、例外ポリシー、ログの出力基準、リソース解放順序、アプリケーションの終了方法(安全シャットダウンなど)を明確にします。
Q2: 再帰とループ、どちらを規約で推奨すべきですか?
A2: 一般的には明確で効率的なループを推奨し、再帰は簡潔性が有意に上回る場合に限定して使用を許可するなど条件付きで扱うとよいです。
A2: 一般的には明確で効率的なループを推奨し、再帰は簡潔性が有意に上回る場合に限定して使用を許可するなど条件付きで扱うとよいです。
Q3: ループ制御に浮動小数点を絶対に使ってはいけないのでしょうか?
A3: 完全に禁止する必要はありませんが、丸め誤差や予期せぬ挙動のリスクがあるため、使用する場合は収束条件や許容誤差を明記するなど規約で制約すべきです。
A3: 完全に禁止する必要はありませんが、丸め誤差や予期せぬ挙動のリスクがあるため、使用する場合は収束条件や許容誤差を明記するなど規約で制約すべきです。
関連キーワード: コーディング規約、コーディングスタイル、メモリ管理、エラー処理、防御的プログラミング、可読性、ループ最適化、再帰の制約、例外設計、リソース解放

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

