LISPオブジェクト指向言語では、クラス内のインスタンス変数には直接的なアクセスができないようにし、クラスの再利用性をあげるのが基本とされています。そのためにJavaでは変数や関数にはpublicと明示しないかぎり、クラス外のオブジェクトからのアクセスが制限されるようになっています。Objective-CにはC++と同じような@publicや@privateなどが用意されています。第101回を読むと、@privateのアクセス修飾子があってもコンパイル時に警告が出るだけで、クラス外からアクセスできてしまうのだとか。Cのラッパー言語なだけあります。その文書に以下のような記述がありました。Objective-Cの言語仕様を見ていると“自由と責任”という言葉が頭に浮かぶ。言語的に何かを禁止するということは、Objective-Cではあまりない。積極的に内部構造にアクセスするための文法やAPIを提供してくれている。あとは、それらを使うプログラマの責任なのだ。大いなる自由と引き換えに、秩序あるプログラムを作る責任も押し付けられるのだ。LISPには言語的に禁止されているものがほとんどなく、言語内言語を作ることが推奨されているような雰囲気すらあるようです。LISPは、責任ある少数精鋭の職人が全体像を把握して作業を進めるという、宮大工のようなプログラマが使う言語なのでしょう。Objective-Cの自由さはちょっと異なっていて、アセンブリに近いC言語の影響か、「どこでも開墾して住んで良いよ」という自由さのような気がしています。その対極にあるのが、プログラミングを産業化する牽引役となったJavaですね。与えられた部品を組み合わせることで短時間でそこそこのプログラムが書けるところが、まるでプレハブや建て売り住宅のようです。追記】考えてみたら、関数型言語は副作用が少ないので、手続き型言語よりもしっかりとしたモジュール化が進められます。すると「全体像を把握」しなくても良い部分もありますね。(21)月別アーカイブはてなブログをはじめよう!amaruiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。