JavaScriptをやっている絵

【JavaScript】オープン・クローズドの原則(OCP)を意識して書く

【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

FaceBook -kennji.morita-

わたしが結成しているWebチームではWeb未経験者、フリーランスの方へのお仕事を紹介しています。
また個人レッスンしてほしい生徒も募集中です。
もしご興味ある方はチャットからご連絡ください。

※業務連絡やお久しぶり連絡もチャットからお願いします。