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

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/29 09:45
2022/05/29 09:54
2022/05/30 00:49
2022/05/30 09:31
2022/05/30 10:22
2022/05/31 06:08