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
A Ruby Programming Episode: Ruby is my glasses,...
Search
Koji SHIMADA
PRO
November 24, 2017
Programming
17
8.3k
A Ruby Programming Episode: Ruby is my glasses, my stationery, and my language
福岡Ruby会議02での発表資料です。
http://regional.rubykaigi.org/fukuoka02/
Koji SHIMADA
PRO
November 24, 2017
Tweet
Share
More Decks by Koji SHIMADA
See All by Koji SHIMADA
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
24
7.2k
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
7
17k
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
55
19k
ソフトウェアアーキテクチャメトリクスの基礎: Software architecture metrics in a nutshell
snoozer05
PRO
34
14k
これから学ぶ人のための ソフトウェアアーキテクチャ入門: Software architecture is a tool to enhance our humanity
snoozer05
PRO
43
27k
ソフトウェアアーキテクチャ・ ハードパーツ: Software Architecture The Hard Parts
snoozer05
PRO
11
6.1k
ソフトウェアアーキテクチャの基礎: Software Architecture in a Nutshell
snoozer05
PRO
69
43k
Ready Player One: 『ユニコーン企業のひみつ』に学べること
snoozer05
PRO
10
12k
Continuous Architecting and Rails: From rails new to Your Own Architecture
snoozer05
PRO
16
4.2k
Other Decks in Programming
See All in Programming
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
2
540
Select API from Kotlin Coroutine
jmatsu
1
180
AIネイティブなプロダクトをGolangで挑む取り組み
nmatsumoto4
0
120
CursorはMCPを使った方が良いぞ
taigakono
0
130
TypeScript LSP の今までとこれから
quramy
1
510
Claude Codeの使い方
ttnyt8701
1
130
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
11
2.6k
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
150
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
220
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
170
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
380
Passkeys for Java Developers
ynojima
3
870
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Thoughts on Productivity
jonyablonski
69
4.7k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
The World Runs on Bad Software
bkeepers
PRO
68
11k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
KATA
mclloyd
29
14k
Faster Mobile Websites
deanohume
307
31k
What's in a price? How to price your products and services
michaelherold
245
12k
Transcript
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF
ౡాߒೋ!TOPP[FS w גࣜձࣾ͑ʹ͠ςοΫ w 3VCZࡳຈ w Ұൠࣾஂ๏ਓຊ3VCZͷձ
IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB
普段どおりにRubyでプログラミング を⾏い、そこから⾒えてくることから、 カンファレンスのテーマである「私に とってRubyがどのような技術か」を 考えていきます
ϓϩάϥϛϯάΤϐιʔυ
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
FYFSDJTNJP
FYFSDJTNJP
FYFSDJTNJP
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
Inner Peace
実際にやっていきましょう
ͦͷલʹʜ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
ࠓͷ͓
IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT
IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT จࣈྻͱO͕༩͑ΒΕΔͱ͖ɺจࣈྻ͔ΒOࣈ ͣͭ࿈ଓ͢Δ෦จࣈྻͷू߹ΛऔΓग़ͯ͠ग़ ྗ͢Δ series = Series.new('01234') series.slices(1) #=> ['0',
'1', '2', '3', '4'] series.slices(2) #=> ['01', '12', '23', ’34'] series.slices(3) #=> ['012', '123', '234']
࣮ԋ
class Series def initialize(string) @string = string end def slices(n)
#TODO end end ४උ
string = '01234' n = 2 string[0, n] #=> `01`
string[1, n] #=> `12` string[2, n] #=> `23` n = 3 string[0, n] #=> `012` string[1, n] #=> `123` string[2, n] #=> `234` ఴࣈΛҠಈͤ͞ͳ͕Β෦จࣈྻΛूΊ͍͚͍͍ͯʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ จࣈྻͷ֤จࣈΛͣΒ͠ͳ͕Βɺ͞Oͷ࿈ଓ͢Δ෦จࣈྻΛ औΓग़͍ͯ͘͠ͱ͍͏ʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ &OVNFSBCMFXJUI@PCKFDUΛ͓͏
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ &OVNFSBCMFNBQͰྑ͍ͷͰ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
͞Oͷ࿈ଓ͢Δ෦จࣈྻΛऔΓग़ͤΔఴࣈΛ ରԠ͢Δʹม͢Δʁ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ 4USJOHTMJDFʹͯ͠ҙਤΛίʔυͰද໌͠Α͏
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ ͍ͬͨΜશ෦TMJDFͯ͠͠·͔ͬͯΒαΠζ͕߹Θͳ͍ͷΛ ϑΟϧλ͢ΔɺͩͱͲ͏͔ͳʁ
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end ͜͜ఴࣈΛશ෦औΔͱ͍͏෩ʹॻ͚ͦ͏ʁ
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋ ࠷ॳʹTFMFDU͔ͯ͠ΒTMJDF͢ΔͩͱͲ͏ͩΖ͏ʁ
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end ͬͪ͜ͷํ͕·ͩTMJDFͷڍಈΛؾʹ͠ͳͯ͘ಡΊΔ ϚγͰ͔͢Ͷ͑ɻͰ͏ͪΐͬͱ͔ͳ͋
Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n
<= @string.length }.map {|i| @string.slice(i, n) } end
Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n
<= @string.length }.map {|i| @string.slice(i, n) } end ͦ͏͔ɺͭ·ΓFBDI@DPOT͔
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢ ͏·͘ݴ͑ͯΔͷͰʁʁʁ
࠷ऴҊ class Series def initialize(string) @string = string end def
slices(n) @string.chars.each_cons(n).map(&:join) end end
None
ࢲʹͱͬͯ 3VCZ͕ͲΜͳݴޠͰ͋Δ͔
΅͘ʹͱͬͯ3VCZͱ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ʁʁʁ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
3VCZΊ͕ͶͰ͋Δ
3VCZΊ͕ͶͰ͋Δ ΛΑ͘ݟ͑ΔΑ͏ʹͯ͘͠ΕΔ
3VCZΊ͕ͶͰ͋Δ ੈքΛͲ͏ղऍͨ͠Βྑ͍͔ͷ ࢹ࠲Λ༩͑ͯ͘ΕΔ
3VCZϖϯͰ͋Δ
3VCZϖϯͰ͋Δ ΅͘ʹͱͬͯ3VCZ͍ͪΜࣗવͳ ॻ͖৺͕͢ΔϖϯͷΑ͏ͳͷ
3VCZϖϯͰ͋Δ ⾝体になじむペンは思考を促進する l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ
3VCZϖϯͰ͋Δ l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ 計算をする⼈間と紙の間にあるの がペン。投げ出しそうになった瞬 間に、あと10秒余計に考えられる かどうかはペンで決まる。
3VCZݴޠͰ͋Δ
3VCZݴޠͰ͋Δ ᅳޭҰʰதಈଶͷੈքҙࢤͱͷߟݹֶʱ l思考の可能性は、⾔語能⼒に結びつい ている。というのも、⾔語とは形式を 持った意味の構造であり、思考すると は⾔語の記号を操ることだからである。
3VCZݴޠͰ͋Δ FBDI@DPOT͖ͯͬͯͨ͠Ϧετͷ֤ཁૉΛ KPJOͨ͠จࣈྻͱNBQͯ͠Δ
3VCZݴޠͰ͋Δ ϙʔϧάϨΞϜʰϋοΧʔͱըՈίϯϐϡʔλ࣌ͷऀͨͪʱ lプログラミング⾔語はプログラマ がプログラムを考えるためのもの であって、既に考えたプログラム を書き下すためのものじゃない。
3VCZݴޠͰ͋Δ l私たちはもはや、正直⾔ってそれ をコンピュータ⾔語とは呼べない。 それはプログラマ語だ。それは私 たちが思考する⾔語なのだ。 XIZUIFMVDLZTUJ⒎ʰϗϫΠͷ ײಈత 3VCZΨΠυʱ ʮݴޠͱɺݴޠͰҙຯ͍ͯ͠Δͷʯ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ところで、私はRubyというめがねを通して問題を 認識して、Rubyというペンをつかって外部へアウ トプットしていて、頭ではRubyで思考している。 これはもう私⾃⾝がRubyと⾔ってしまっても過⾔ ではないのではないだろうか…??
けれど、実際には⼀体ではないからこそいい のである。⼤事なのはRubyと⾃分が息が合 うこと。⼀体だと錯覚してしまうと、協⼒関 係から依存関係になってしまう(よくない)
ҧ͏ͷʹ৮ΕΔͱɺΑΓʮͦͷͷʯͷ͜ͱ͕Θ͔Δ w ҧ͏Ί͕ͶͰࣄΛݟΔ w ҧ͏ॻ͖৺ͷϖϯΛ͏ w ҧ͏ݴޠͰࢥߟͯ͠ΈΔ
·ͱΊ
ϓϩάϥϛϯάΤϐιʔυɿ
FYFSDJTNJP
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜదͩͱײ͡ΔղΛબ͢Δ
今⽇ご覧いただいたような、⼩さな表 現の選択を積み重ねながら「そのもの がソフトウェアのことを語っているよ うなコード」を探っていく⾏為が、プ ログラミングという活動において⾮常 に重要な点なのではないかと考えてい ます。
Inner Peace
ࢲʹͱͬͯ 3VCZͱͲΜͳٕज़Ͱ͋Δ͔ɿ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ϓϩάϥϛϯάݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦ w εΫϦϓτ w ϓϩάϥϛϯάݴޠ Ͱ͋Δ
ΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZ
ちょっと⼤げさに表現すると、Ruby の究極の⽬的は、有限の⼈⽣において プログラミングの楽しい部分にできる だけ集中できるように助けることです。 ·ͭͱΏ͖ͻΖɺੴ௩ܓथʰΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZʱ l
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF