【JavaScript】オープン・クローズドの原則(OCP)を意識して書く
Open/Closed Principle (OCP)
オープン・クローズドの原則(OCP)
As stated by Bertrand Meyer, "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification." What does that mean though? This principle basically states that you should allow users to add new functionalities without changing existing code.
Bertrand Meyer(バートランド・メイヤー)が記したように、「ソフトウエアの構成要素(クラス、モジュール、関数など)は、拡張に対してオープンで、変更に対してはクローズであるべき」 それはどう言う意味でしょうか? この原則は基本的に、ユーザーに対して既存のコードを変更することなく、新しい機能を加えることができるようにするべき
例題がclass構文だったのを書き直してみた
このような感じ
// bad 👎
function badAdd(obj){
if(obj.type === "A"){ // ここの中でtypeによって同じ引数の型と返値の型を別関数を呼ぶなら
console.log(badAdd1(obj.value))
} else if(obj.type === "B"){
console.log(badAdd2(obj.value))
}
}
function badAdd1(value){
return value + 1
}
function badAdd2(value){
return value + 2
}
const badObj = {
type: "A",
value: 1
}
const badObj2 = {
type: "B",
value: 2
}
badAdd(badObj)
badAdd(badObj2)
// good 👍
const goodObj = {
type: "A",
value: 1,
add(value){ // オブジェクト自信が持っちゃう
return value + 1
}
}
const goodObj2 = {
type: "B",
value: 2,
add(value){ // オブジェクト自信が持っちゃう
return value + 2
}
}
function goodAdd(obj) { // 関数はただaddを呼ぶだけ
return obj.add(obj.value)
}
console.log(goodAdd(goodObj))
console.log(goodAdd(goodObj2))
「武骨日記の」プライバシーポリシーに関して
・プライバシーポリシー
・個人情報取り扱いに関して
・サイトTOP
・私は何者か
・29歳よしもと芸人がWebデザイナー未経験で学校に通い5年後フリーランスのフロントエンドエンジニアになるためにやった9つのこと
・フロント記事
・フロントエンドエンジニア
・フロントエンド記事(タグ)
・TypeScript
・TypeScript練習問題集
・【TypeScript】TypeSript中級者になる為に知っておくと良い108個のこと
・JavaScript練習問題
・styled-componentsの使い方
・SCSS問題集
・GraphQL「Apollo x Relay-Style-Cursor-Pagination(リレースタイルカーソルページネーション)」
・recomposeと仲良くなりたい
・機動戦士FlowType
・初めてReactNativeWebを触ってみて
・Ramda.jsシグネチャの読み方
・環境変数の話
・いちごタルトの作り方
・フロントエンドエンジニア豚汁の作り方
「武骨日記の」プライバシーポリシーに関して
プライバシーポリシー
株式会社TerraceTechについて
最近起業しました。
・株式会社TerraceTech
SNS
・しずかなインターネット kenjimorita
・インド旅 instagram
・適当な日常写真 instagram
・シュールさーん instagram
・シュールさーん LINEスタンプ
・もりたけんじTwitter
・ネタ帳Twitter
・note
※わたしが結成しているWebチームではWeb未経験者、フリーランスの方へのお仕事を紹介しています。
また個人レッスンしてほしい生徒も募集中です。
もしご興味ある方はチャットからご連絡ください。
※業務連絡やお久しぶり連絡もチャットからお願いします。