Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FizzBuzzで学ぶOCP
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Nokogiri
December 24, 2023
Technology
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FizzBuzzで学ぶOCP
Nokogiri
December 24, 2023
More Decks by Nokogiri
See All by Nokogiri
Zustandを用いた実践的状態管理
undefined_name
3
870
React Testing Libraryでの WAI-ARIAロールの活用事例
undefined_name
1
220
自動テストは何の役に立つのか そして役に立たないのか
undefined_name
5
1.8k
Pipe Operator (|>) の紹介
undefined_name
2
400
エンジニアとQAでコラボするフロントエンドリアーキテクチャ開発の事例
undefined_name
4
3.1k
オブジェクト指向のプラクティスをフロントエンドで活用する
undefined_name
7
1.7k
モププロ@kintone開発チーム
undefined_name
1
660
勉強会で登壇者に 質問しづらい課題を解決する サービスをリリースしました🎉
undefined_name
2
1.3k
Usefull GitLens
undefined_name
3
910
Other Decks in Technology
See All in Technology
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
230
AIエージェントが名古屋の猛暑からあなたを守る
happysamurai294
0
130
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
200
20260619 私の日常業務での生成 AI 活用
masaruogura
1
220
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
220
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
150
200個のGitHubリポジトリを横断調査したかった
icck
0
130
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
130
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
400
RAG を使わないという選択肢
tatsutaka
1
250
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
0
110
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
210
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Believing is Seeing
oripsolob
1
150
KATA
mclloyd
PRO
35
15k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
It's Worth the Effort
3n
188
29k
Optimizing for Happiness
mojombo
378
71k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
A Tale of Four Properties
chriscoyier
163
24k
Test your architecture with Archunit
thirion
1
2.3k
Transcript
FizzBuzzͰֶͿOCP Reboot kansai.ts #4 2023/11/22 Nokogiri
Nokogiri(@nkgrnkgr) αΠϘζגࣜձࣾ | ϑϩϯτΤϯυΤϯδχΞ KintoneͷϑϩϯτΤϯυͷج൫৽ϓϩδΣΫτͰ ϑϩϯτΤϯυΤϯδχΞΛ͍ͯ͠·͢ɻ ϙέϞϯରઓΨνʢϙέιϧͷμϝܭࢉπʔϧͷ։ ൃʣɺೋࣇͷ
FizzBuzzͱʁ • ϓϩάϥϛϯάͨ͜͠ͱ͕͋ΔਓͳΒҰฉ͍ͨ͜ͱ͕͋Δݴ༿༡ ͼͰ͢ɻ • ྫʣ̏ͷഒͰ Fizzɺ̑ͷഒͰBuzzɺ̏ͱ̑ͷഒͷͱ͖ʹ FizzBuzzͱ͍͏ • ϓϩάϥϛϯάͷ࿅शͱͯ͠Α͘ΘΕ·͢ɻ
• ࠓ͜ͷFizzBuzzΛͬͯOCPʹ͍ͭͯઆ໌͠·͢ɻ
OCPͬͯͳʹʁ • ΦϒδΣΫτࢦͷݪଇ SOLIDͷҰ෦ • ։์ดݪଇOpen Closed PrincipleʢOCPʣͷུ • ֦ுʹରͯ͠Φʔϓϯ
• มߋʹରͯ͠Ϋϩʔζυ
γϯϓϧͳ FizzBuzz // 3ͷഒͷ߹Fizz // 5ͷഒͷ߹Buzz // 3ͱ5ͷഒͷ߹FizzBuzz // ͱදࣔ͢Δ
export const fizzBuzz = (num: number): string => { if (num % 3 === 0 && num % 5 === 0) { return "FizzBuzz"; } if (num % 3 === 0) { return "Fizz"; } if (num % 5 === 0) { return "Buzz"; } return ""; }; 3ͷഒͷ߹Fizz 5ͷഒͷ߹Buzz 3ͱ5ͷഒͷ߹FizzBuzz ͦΕҎ֎ͷ߹"" Λฦ͢
͜Ε༷ͬͯมߋʹڧ͍ʁ
͜Ε༷ͬͯมߋʹڧ͍ʁ • ഒ̏̑Ͱͳ͍͔͠Εͳ͍ʁ • ϧʔϧՃ͞ΕΔ͔͠Εͳ͍ʁ • ฦ͢จࣈྻʮFizzʯʮBuzzʯ ͔ΒʮΘΜʯʮʹΌΜʯʹมΘΔ͔ʁ → ͜ͷͨͼʹ
fi zzBuzzؔΛमਖ਼͢Δͷෆ۩ ߹ͷݪҼʹͳΔͷͰʁ
༷ͷຊ࣭ // 3ͷഒͷ߹Fizz // 5ͷഒͷ߹Buzz // 3ͱ5ͷഒͷ߹FizzBuzz // ͱදࣔ͢Δ export
const fizzBuzz = (num: number): string => { if (num % 3 === 0 && num % 5 === 0) { return "FizzBuzz"; } if (num % 3 === 0) { return "Fizz"; } if (num % 5 === 0) { return "Buzz"; } return ""; }; Λೖྗ͢ΔͱจࣈྻΛฦ ͢ ҙͷมϧʔϧΛෳఆٛͰ ͖Δ มϧʔϧԿΒ͔ͷఆ݅ Λຬͨͨ͠ͱ͖ʹదԠ͞ΕΔ
֦ுʹରͯ͠Φʔϓϯ มߋʹରͯ͠Ϋϩʔζυ ʹͯ͠ΈΔ
ίʔυҊ // 3ͷഒͷ߹Fizz // 5ͷഒͷ߹Buzz // 3ͱ5ͷഒͷ߹FizzBuzz // ͱදࣔ͢Δ export
const fizzBuzz = (num: number): string => { if (num % 3 === 0 && num % 5 === 0) { return "FizzBuzz"; } if (num % 3 === 0) { return "Fizz"; } if (num % 5 === 0) { return "Buzz"; } return ""; }; RuleΛ࡞Δ Matchɿೖྗʹ߹க͢Δ ݅Λදݱ͢Δ apply: ݅ʹ߹கͨ͠߹ ͷॲཧΛදݱ͢Δ RULE_SETS: దԠ͞ΕΔ ϧʔϧͱॱ൪Λදݱ͢Δ
ίʔυҊ // 3ͷഒͷ߹Fizz // 5ͷഒͷ߹Buzz // 3ͱ5ͷഒͷ߹FizzBuzz // ͱදࣔ͢Δ export
const fizzBuzz = (num: number): string => { if (num % 3 === 0 && num % 5 === 0) { return "FizzBuzz"; } if (num % 3 === 0) { return "Fizz"; } if (num % 5 === 0) { return "Buzz"; } return ""; }; ֦ுʹΦʔϓϯɿϧʔϧΛ Ճ͢Δ߹৽͘͠ϧʔϧΛ ఆٛͯ͠RULE_STESʹՃ ͢Δ͚ͩ มߋʹΫϩʔζυɿϝΠϯͷ ॲཧͰ͋Δ fi zzBuzzʹӨڹ Λ༩͑ͳ͍ɻมߋରͷϧʔ ϧͷΈमਖ਼Ͱ͖Δ
·ͱΊ • ίʔυͷຊ࣭తͳ༷ʹணͯ͠Ͳ͕֦͜ுɾมߋ͞Ε͍͢ͷ͔ߟ ͑Δ • FizzBuzzαϯϓϧͰ͍ΖΜͳॲཧʹԠ༻Մೳ • ྫʣೖྗͷHTML/JSON/Text ʹ߹ΘͤͯύʔαʔͷॲཧΛΓସ͑ Δ
• ༷ͷՃɾมߋ͕ϝΠϯͷॲཧʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δͷ͕େ ࣄ
αΠϘζͰΤϯδχΞΛืू͍ͯ͠·͢ʂ
͝ࢼௌ͋Γ͕ͱ͏͍͟͝·ͨ͠😊