宣言型(Declarative)でプログラムを書けると良いですね!
と指摘を受けたことはありますでしょうか?
この記事では宣言型プログラミングとは何か?メリットについて伝えたいと思います!
宣言型プログラミングとは?
何をするかを明確に宣言した記述方法です。
コードが最終的にどうなってほしいかの結論から書く考え方です。
対比として例に上がる手続型プログラミングは、どのように実行されるか?の具体的な手順にフォーカスした書き方です。
なぜ宣言型プログラミングをオススメするのか?
宣言型プログラミングをすすめる理由は、コードの可読性や保守性を向上させることができます。
手続き型は、処理を順番におって最終行を読み終えるまでその処理が何を結果として返すのかわからないため可読性が宣言型と比較して劣るのだと考えています…
宣言型と手続き型どちらが正解とかはないと思っています。
ただ、後から読む人が読みやすいのは、宣言型だと考えているのでオススメしてます!
いくつか具体的な例を挙げてみます!
配列の数字を合計する関数
手続き型
function sumArray(array) {
let total = 0;
for (let i = 0; i < array.length; i++) {
total += array[i]
}
return tatal;
}
const numbers = [1, 2, 3, 4, 5];
const result = sumArray(numbers);
宣言型
function sumArray(array) {
return array.reduce((total, num) => total + num, 0);
}
const numbers = [1, 2, 3, 4, 5];
const result = sumArray(numbers);
宣言的なプログラミングでは、結果を得る処理だけが記述されています。
手続き型の書き方は、どのように結果が得られるか?の手順を明記しています。
フィルタリングする関数
手続き型
function filterEvenNumbers(array) {
const result = [];
for (let i = 0; i < array.length; i++) {
if (array[i] % 2 === 0) {
result.push(array[i]);
}
}
return result;
}
const numbers = [1, 2, 3, 4, 5, 6];
const result = filterEvenNumbers(numbers);
宣言型
function filterEvenNumbers(array) {
return array.filter(num => num % 2 === 0);
}
const numbers = [1, 2, 3, 4, 5, 6];
const result = filterEvenNumbers(numbers);
手続き型のプログラミングはfor文と分岐処理で結果を返すのに対して、
宣言型のプログラミングではfilter
メソッドを利用して結果を返す方法で記述しています。
分岐処理が追加されたことで可読性が悪いと感じた方もいると思います。
関数の場合であれば何が結果として返されるのか?をシンプルにかけると読みやすコードが保てるのではないかと考えています。
【宣言型プログラミングのススメ】まとめ
特定の問題や状況に対する最適な解決策を提供します。
どちらのアプローチを採用するかは、具体的な問題によって決まることが多いと思います。
全てを宣言的に記述するのも難しいかもしれませんが、読む人のことを考えて読みやすいコードを書く考え方として知っておけると良いと考えています。