Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
FizzBuzzで学ぶOCP
Search
Nokogiri
December 24, 2023
Technology
180
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
950
React Testing Libraryでの WAI-ARIAロールの活用事例
undefined_name
1
230
自動テストは何の役に立つのか そして役に立たないのか
undefined_name
5
1.9k
Pipe Operator (|>) の紹介
undefined_name
2
420
エンジニアとQAでコラボするフロントエンドリアーキテクチャ開発の事例
undefined_name
4
3.3k
オブジェクト指向のプラクティスをフロントエンドで活用する
undefined_name
7
1.8k
モププロ@kintone開発チーム
undefined_name
1
680
勉強会で登壇者に 質問しづらい課題を解決する サービスをリリースしました🎉
undefined_name
2
1.4k
Usefull GitLens
undefined_name
3
930
Other Decks in Technology
See All in Technology
eBPF 簡介 2026 版
shunghsiyu
0
180
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
210
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
160
攻撃 3 時間 vs 復旧 10 時間。アクセスキー流出の非対称性を体感するために CTF を作った話
kazzpapa3
1
140
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
200
今から始めるAWS環境の暗号移行 - ポスト量子時代に備える
sato4mi
0
150
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.3k
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
5
680
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
590
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.3k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
The Curse of the Amulet
leimatthew05
3
17k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
4 Signs Your Business is Dying
shpigford
187
23k
Automating Front-end Workflow
addyosmani
1370
210k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
810
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
390
Test your architecture with Archunit
thirion
2
2.5k
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 ʹ߹ΘͤͯύʔαʔͷॲཧΛΓସ͑ Δ
• ༷ͷՃɾมߋ͕ϝΠϯͷॲཧʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δͷ͕େ ࣄ
αΠϘζͰΤϯδχΞΛืू͍ͯ͠·͢ʂ
͝ࢼௌ͋Γ͕ͱ͏͍͟͝·ͨ͠😊