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
900
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.2k
オブジェクト指向のプラクティスをフロントエンドで活用する
undefined_name
7
1.8k
モププロ@kintone開発チーム
undefined_name
1
660
勉強会で登壇者に 質問しづらい課題を解決する サービスをリリースしました🎉
undefined_name
2
1.4k
Usefull GitLens
undefined_name
3
910
Other Decks in Technology
See All in Technology
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
8
7.6k
制約理論(ToC)入門 2026版
recruitengineers
PRO
3
520
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
3
430
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
270
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
280
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
120
ラジオの科学
frievea
0
210
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.7k
モダンフロントエンド 開発研修
recruitengineers
PRO
1
330
Goでデータパイプラインを作ろう
sansantech
PRO
0
240
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
200
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
Code Reviewing Like a Champion
maltzj
528
40k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
660
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
250
We Are The Robots
honzajavorek
0
290
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Six Lessons from altMBA
skipperchong
29
4.4k
Claude Code のすすめ
schroneko
67
230k
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 ʹ߹ΘͤͯύʔαʔͷॲཧΛΓସ͑ Δ
• ༷ͷՃɾมߋ͕ϝΠϯͷॲཧʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δͷ͕େ ࣄ
αΠϘζͰΤϯδχΞΛืू͍ͯ͠·͢ʂ
͝ࢼௌ͋Γ͕ͱ͏͍͟͝·ͨ͠😊