🎧 関数型とオブジェクト指向のちがいが、やっと少しわかってきた話
最近、言語を勉強していて「関数型」と「オブジェクト指向」っていう言葉に出会いました。正直、最初は「なんか難しそうだな……」くらいの印象で、どっちも同じように見えて、何が違うのか全然わかりませんでした。
でも少しずつコードを書いていくうちに、これはただの“書き方の違い”じゃなくて、
「世界をどう見るか」っていう考え方の違いなんだなと感じるようになりました。
🧩 オブジェクト指向は、「世界をまるごと写す」感じです
オブジェクト指向は、現実にある“もの”をそのままプログラムの中に作る考え方です。たとえば「人」というクラスを作って、その中に「名前」や「年齢」を入れて、「話す」や「歩く」といった動作(メソッド)を書きます。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"こんにちは、{self.name}です!")
p1 = Person("りたるだんど", 17)
p1.greet()
Person は設計図みたいなもので、p1 はその設計図から作った“人”です。コードなのに、ちゃんと「僕」という存在を作れるのがなんか面白いんですよね。
🧮 関数型は、「処理を積み重ねる」感じです
関数型はもっとシンプルで、「入力→処理→出力」という流れを淡々と積み上げていく考え方です。
def greet(name):
print(f"こんにちは、{name}です!")
greet("りたるだんど")
これも同じように動くけど、“世界”というより“計算”のイメージに近い感じがします。余計な情報がなくて、データを渡したら結果が返ってくるだけ。すごくクールで整った世界観だなって思いました。
💭 なんで混乱したのかを考えてみたら
僕が最初に言語を始めたのは、HTMLとCSSでした。HTMLは「構造」、CSSは「見た目」。この2つがはっきり分かれているのが当たり前だと思っていました。
でもPython等では、構造(クラス)と動作(関数)が同じ場所に書かれていて、それが最初はどうしても頭の中で整理できなかったんです。
まあ、HTMLのタグの中にスタイルは書くことができるんですが、、それはまあ置いといて、、
⚙️ C言語は関数型寄りだけど、ちょっと違う
調べてみたら、C言語は「関数型」に近いけれど、正確には「命令型+関数型」という考え方らしいです。main関数から始まって、上から順に命令を実行していく。だから“手で組み上げる”感じが強くて、なんだか「設計図を書く職人」っぽい雰囲気があります。
🌊 僕なりの今の結論
関数型は、論理的で淡々としている。オブジェクト指向は、世界をそのまま描ける。
どっちも良さがあって、どっちもむずかしいです。たぶん、どんなふうに世界を見たいかで変わるんだと思います。
僕はまだ初心者なので、「これは関数型?オブジェクト指向?」っていちいち迷ってます。でも、そうやって混乱しながら少しずつ形が見えてくるのが、ちょっと楽しいなって思えてきました。
🎨 おわりに
プログラムって、ただ動かすだけじゃなくて、「どう設計して、どう表現するか」の世界なんだなと思います。
関数型でもオブジェクト指向でも、どっちも自分の考え方や感性がそのまま出るものなんですね。
今日も、コードと音楽のあいだで悩みながら、少しずつ理解していこうと思います。