Skip to content

Commit ecd0ff2

Browse files
committed
classの歴史を更新
1 parent 2ed66cf commit ecd0ff2

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

class.rst

+17-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,23 @@
11
クラス
22
================
33

4-
昔は関数と\ ``prototype``\ という属性をいじくり回してクラスを表現していました。正確には処理系的にはクラスではないのですが、コードのユーザー視点では他の言語のクラスと同等なのでクラスとしてしまいます。
5-
なお、Javaなどのような書き味を求めて、この仕組みをラップした自前の\ ``extends``\ 関数みたいなのを作ってクラスっぽいことを表現しようという一派も一時期いましたが、今のJavaScriptとTypeScriptでは、より良い書き方が提供されています。
4+
JavaScriptとJava風オブジェクト指向文法の歴史
5+
--------------------------------------------------------
6+
7+
クラスはプログラミング言語によってはとても重要な位置付けにあります。たとえば、Javaはすべての要素がクラスに属し、そのクラスの組み合わせでプログラムを作成していきます。クラスの利用方法を学び、クラスの実装方法を学び、よりよいクラスの設計方法を知ることがJavaにおいてはとても重要です。また、20年ほど前はJavaはプログラミングのパラダイムにおいては最先端であり、クラスを元にした設計手法、デザインパターン、アジャイルソフトウェア開発のプログラミング系のプラクティス(テスト駆動開発やリファクタリング)を通じて、多くのプログラミング言語にJava流の設計が輸出されていきました。クラスを使いこなすことで、次のことが実現可能になるとさかんに喧伝されていました。
8+
9+
* 大規模なコード
10+
* 再利用性の高いコード
11+
12+
例えばPythonやRubyなどの今は古参扱いのプログラミング言語の多くも、当時は機能拡張を積極的に行っておりJavaやその周辺のベストプラクティスに影響を受けたと思われるライブラリなどがいくつか組み込まれています。クラスを持ってその先端の設計技法が利用できることは、当時の一級言語のステータスでした。
13+
14+
JavaScriptはクラスをダイレクトに表現する文法はなかったものの、昔は関数と\ ``prototype``\ という属性をいじくり回してクラスを表現していました。正確には処理系的にはクラスではないのですが、コードのユーザー視点では他の言語のクラスと同等なのでここではこの当時の記法で作るものもクラスとして扱います。とはいえ、それでもJavaScriptはクラスがないことを理由に「大規模開発に向かないおもちゃ言語」と言われることもありました。
15+
16+
その欠点をカバーしてJavaなどのような書き味を求めて、ひと昔前のJavaScript界隈では、この\ ``prototype``\ の仕組みをラップした自前の\ ``extends``\ 関数みたいなのを作ってクラスっぽいことを表現しようという一派も一時期いました。また、5年ほど前までは、クラスを使うためにCoffeeScriptに救いを求める人も多数いました。今のJavaScriptとTypeScriptでは、言語の標準機能として良い書き方が提供されています。
17+
18+
クラスをようやくサポートしたものの、近年ではクラスを使わない書き方、関数型言語のエッセンスを取り入れた書き方も流行ってきています。大規模といえばオブジェクト指向でクラス、という短絡的な言い方をする人はもはや絶滅危惧種です。
19+
20+
しかし、大規模なアプリケーションの部品としてではなく、末端の部品としては便利です。みなさんも、文字列や配列などの組み込み型を通じて、自然とオブジェクト指向には触れています。あのような部品を自分で作るための手段です。関数型のスタイルとも組み合わせて利用できますし、書き方を学んでおきましょう。
621

722
用語の整理
823
---------------------

0 commit comments

Comments
 (0)