ご質問
関数を作るとき、機能ごとに関数を分けますか?機能を引数で渡して分岐し関数はまとめますか?
次のような例でふと思いました。
例
【例1】
INSERT、DELETE、UPDATE の場合
php
<?php // A:機能ごとに関数を分ける function insert_row( $args ){} function delete_row( $args ){} function update_row( $args ){} // B:機能を引数で渡して分岐し関数はまとめる function apply_row( $type, $args ){ if( $type === 'insert' ){} else if( $type === 'delete' ){} else if( $type === 'update' ){} } ?>
【例2】
ローカルストレージの値を取得する場合
JavaScript
// A:機能ごとに関数を分ける function getFontFamily(){ return localStorage.getItem('font-family') || 'serif'; } function getMode(){ return localStorage.getItem('mode') || 'normal'; } // B:機能を引数で渡して分岐し関数はまとめる function getStorage( type ){ if( type === 'font-family' ){ return localStorage.getItem('font-family') || 'serif'; }else if( type === 'mode' ){ return localStorage.getItem('mode') || 'normal'; } }
いかがでしょうか。
「どういうときにAのように分けて、どういうときにBのようにまとめる」など、みなさんがユルめに従いがちな、慣習的なものがあれば知りたいです。
私の場合
私は独学で素人で(なのでここでやり方を述べるのは恐縮ですが)、これまで「基本はBでまとめるけど、関数が長くなりすぎたらAで分ける」というなんとなくな方法でした。
または次のような感じで、Aのように分けると、引数のキーが$args = ['id'=>1',name'=>'a','age'=>20,,,,]
などと多いときに同じ展開処理が複数の関数で重複するため、これを嫌ってBでまとめること多いです。(PHPならextract
がありますが、どの変数がextract
で展開されたものなのかわかりにくいので使いたくない派です。)
php
// A:機能ごとに関数を分ける function insert_row( $args ){ // ここでも展開 $id = $args['id']; $name = $args['name']; $age = $args['age']; } function delete_row( $args ){ // ここでも展開 $id = $args['id']; $name = $args['name']; $age = $args['age']; } function update_row( $args ){ // ここでも展開 $id = $args['id']; $name = $args['name']; $age = $args['age']; } // B:機能を引数で渡して分岐し関数はまとめる function apply_row( $type, $args ){ // 展開がこの1回で済む $id = $args['id']; $name = $args['name']; $age = $args['age']; if( $type === 'insert' ){} else if( $type === 'delete' ){} else if( $type === 'update' ){} }
AとBの使い分けについて、統一的なルールや一般的な慣習や個人的なご意見など、幅広くお聞かせいただければ幸いです。よろしくお願い致します。
まだ回答がついていません
会員登録して回答してみよう