経緯
- FlMMLonHTML5 に prを出そうとした
- 出した
- 自分の JavaScript 能力があまりにも低かったので、勉強することにした
- uhyo_さんの「JavaScript 中級者になろう」講座がとても品質高かった
- その他にも何個か読んだ
細部
- webpackで引数が消滅していたのは、wrapperが間に挟まっているからだった (wrapper の 方でも引数をいじらないといけなかった)
勉強
uhyoさん編
- 十六章第十一回 クラス — JavaScript初級者から中級者になろう — uhyohyo.net
- ES2015 でクラスが入ったんだなあ
- 九章第一回 オブジェクト指向とは — JavaScript初級者から中級者になろう — uhyohyo.net
- ここから、9-4まで読んで、継承について知った
1つはクラス指向、もう1つはプロトタイプ指向です - 10年前に効いた覚え
- コンストラクタでは this.xxx に色々いれるだけでよくて、return しなくていいんだなぁ
- 九章第二回 prototypeの活用 — JavaScript初級者から中級者になろう — uhyohyo.net
- prototype 初めて理解した
- 九章第三回 継承とは — JavaScript初級者から中級者になろう — uhyohyo.net
- apply call 初見 (やっぱり勉強が要るなぁ)
なお、この例ではfunction sum()となっているのでsumは引数を取らないように見えます。しかし、それは引数が渡されてもそれが入る変数がないということであり、引数を取ること自体はできます。そして、引数が入る変数が無くてもargumentsにはちゃんと入っています。
- むずかしい
- 14年前に見た覚えがある プロトタイプチェーンの話
prototypeをだんだんさかのぼって探していくことは、プロトタイプチェーンと呼ばれます。
- 継承したクラスを継承することに対応した概念というより、遡る方だったのね
- 十一章第七回 継承2 — JavaScript初級者から中級者になろう — uhyohyo.net
- 九章第四回 プロトタイプ指向 — JavaScript初級者から中級者になろう — uhyohyo.net
prototypeの仕組みを用いれば自然と継承が実現できるということです。。。一方クラスベースでは、基本的に言語の機能として継承があり、言語レベルで特殊な扱いが必要になります
- プロトタイプはそれ自体に継承できる性質があるのね
JSの歴史編
- JSの歴史を知りたくなったので JavaScript入門 - とほほのWWW入門 を読む
javascriptとは、netscape communications社が開発したプログラミング言語です
c言語を祖先として生まれた言語
javascriptは元々livescriptという名前で開発されていましたが、javaが流行しはじめたことや、netscape社とsun社が技術提携したこともあり、javascriptと名前を変えたようです。
- とほほさんは2019年も更新されてるのね
- ES4が放棄になったので、 ES3(1999年)→ ES5 (2009年)がだいぶ開いてる
- ES2015(ES6, 2011年)→ ES7(ES2016, 2016年) も結構あいてる そのあとは毎年更新
- ☆ 各バージョンで追加された機能が列挙されてて素晴らしい
- このリンク先を読んでいけばES博士になれそう そのうちやりたい
- JavaScript が勝ち残った理由を知りたくなった
- ウェブブラウザ上で動作するプログラミング言語において、なぜJavaScriptだけが生き残ることができたのでしょうか? - Quora
- 非同期イベントループが画期的とのこと。 確かに、他のライバルは全部読み込んだ枠の中だけで世界が完結してた
- スマホ時代の前は jsよりflashの方が…確かに人気あったかも。
同じ時期にnetscape社はブラウザ上で動作するlivescriptというスクリプト言語を開発していました。しかし、javaが大人気だったため、このlivescriptをjavascriptという名前に変更しました。
microsoft は mosaicというブラウザを買収しこれを基にinternetexplorerを開発していきます。
このmosaicは、netscape社起業前にnetscape社の開発陣が作った本家webブラウザです。mozzilaの語源はここにあります。
IEは htmlを厳密に書かなくてもレイアウトが崩れないというのが受けたようです。
activexも一時期よく使われましたが、脆弱性の問題もあり、皆使わなくなっていきます。 - プログラミング言語(何でもできてしまう)で脆弱性は致命的だなぁ
- JavaScript は Flash 前の時代、各社勝手に拡張してたらしい
多くの古い仕様が残っているというのも事実です。 - これがJSの難しさの原因っぽい
c#でwindowsアプリを作るのと比較すると遥かに効率よくユーザーインターフェースが作成できます。
現在ではプログラム言語としても優秀なのでどんどん使いましょう。 - 過去が悪いのね (腑に落ちた)
読みたかったものを読む編
- 関係ないけど PowerShellの記事読もう 2021/09/08 0:47
- PowerShell(パワーシェル)で何ができる? 6つの実例とメリットでひも解く保守運用術 連載:サーバ自動化の勘所|ビジネス+IT
- 過去に windows script host というものもあったとのこと
- PSはcmdのいいところも継承してるらしい
実は現在はwindows以外でも利用可能
- 構成管理でも大活躍とのこと
メインの作業は他のツールに任せ、その穴埋めをpowershellで行うといった具合に、どちらかというと便利屋の位置づけで利用する
windows osで人が行う操作は、ほぼpowershellでスクリプト化が可能 - 確かに cmdはそこまではパワフルではなかったかも
※上述した「ansible」はosの構成管理を自動化できるツールで、windows osの設定や情報収集には内部的にpowershellを使用している
リモートでのサーバ管理。 管理対象サーバにわざわざスクリプトを配置しなくとも任意のpcからpowershellで対象サーバにリモート接続してスクリプトを実行することが可能だ
- ここでも名前をみる Active Directory (遠隔ユーザ管理機能)
- うーん、ansibleでよさそう
- Ansibleの方が習得言語数を減らせそうなのでよさそう
powershellのスクリプトを定期的にスケジュール実行する場合は、windowタスクスケジューラーを使うことが多い。 - Windows タスクスケジューラーが cronなのね
- ログイン必須になる前まで読んだ
またJSのことを知るぞ編
- JavaScriptはなぜシングルスレッドでも非同期処理ができるのか/Why Can JavaSctipt Invoke Asynchronous in Single Thread? - Speaker Deck
- Event Loop はなんか聞いたことある nginxのやり方で、積んであるのを順番にやっていくんだよね シングルスレッドが
- prototype.js って 2005- からあったんだなぁ
- node も 2009なんだなぁ
- node の重要なポイントは モジュール管理なのね
- シングルスレッドだから、非同期処理がややこしいのね (?)
型編 (TypeScript編)
- 型ってそんなに大事なの? 調べたい 2021/09/03 2:06
- 敗北者のTypeScript - Qiita
- A4判 36P相当 (28600文字)
- フロントエンドは、ユーザ側に環境があるので、実際に死ぬ言語が何個も出てきた(Silverlight, ActionScript などなど) …ので、煽り調で注目を得て生き残っていかねばならないのだと思う
- 型があると色々なエラーを避けられるんだね
- 安全ということをプログラマが手作業で示すか、機械的な保証を強制するか の違いみたい
typescript時代においては、ちゃんと型で表現できるようにプログラムを設計するということもtypescriptのスキルの一つですね。
- コード例が多くて分かりやすい
- 型があることによる安全性がわかってきた
ここまでで紹介したany,as,!くらいがtypescriptが持つ代表的な危険性です - 分かりやすい
- TypeScriptの強力な型システム
type MyObjWithName = MyObj & { name: string; };
- TypeScript って誰が 作ったの?
- TypeScript - Wikipedia
- マイクロソフトが 2012年に初めて出した
javascriptに対して、省略も可能な静的型付けとクラスベースオブジェクト指向を加えた厳密なスーパーセット
jscript.netとtypescriptはよく似ている
プリミティブ型のためのアノーテーションはnumber、boolean、stringである。
- プリミティブ型はこの3つしかないのかあ型アノーテーションは別個の「宣言ファイル」に外出しすることが出来る (C++のheader ファイルみたいなもの) jQuery とかを TypeScriptにできる(ヘッダーファイルみたいなもので型情報をつけることで) - 知らなかった
declare module arithmetics { add(left: number, right: number): number; subtract(left: number, right: number): number; multiply(left: number, right: number): number; divide(left: number, right: number): number; }
- Dart のことも知っておこうかな
- Dart - Wikipedia
まとめ
- JavaScriptのことを (uhyoさんの中級者になろうを全部読んで)ちゃんと知りたいとおもった
時間まとめ
- 9/1~9/3, 9/8~9/13 の 9日 (9時間) これにかけた
- でも知らなくて、今後というか本来必要なことを知れたと思うのでいいかな