水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > JavaScript勉強会 三回目

JavaScript勉強会 三回目

2012年7月20日(金曜日)

JavaScript勉強会 三回目

公開: 2012年8月2日0時25分頃

「ツッコミながらスクラムで学ぶ JavaScript勉強会」第三回が開催されました。今回の範囲は、「よくわかるJavaScriptの教科書 (www.amazon.co.jp)」のLecture1-3~1-6の部分。

事前に第三回目の課題を出していたので、各人の課題を見ながら進行。

課題 3-1: 前回の振り返りと感想

前回を振り返っていろいろと。他人の書いた変態的なプログラムが参考になったとか、ツッコミが参考になったとかいろいろ。

課題 3-2: 前回の応用

前回の応用的なスクリプトを書く課題。

どのタイミングでキャンセルしてもキャンセル時のメッセージは同じなのですが、それを一箇所に書くようにした人、ばらばらに書いた人など。

課題 3-3: 目覚まし時計の問題

これはテキストの練習問題そのままなのですが、まず、仕様をどう読み解くかで分かれました。これは目覚ましだと言っているのですが、テキストの解答例ではF5を連打し続けなければアラートが出ないという実装になっています。これでは目覚ましとしては機能しません。寝ている人がF5を連打することはできないはずだからです。

というわけで、これはあり得ないだろうと考えた人は頑張ってオリジナルの実装をしてきました。中にはアドレスバーに時刻情報を入れるという変態実装も……。

課題 3-4: Lecture1-3~Lecture1-6を読んで

今回の範囲の感想や疑問ですが、最も多かったのは「===」について。「==」を説明せずに「===」だけを使うというポリシーのようですが、たいていの人は「==」のほうを見かけたことがあり、説明がないことに疑問を感じたようです。しかしそもそも「型」を説明していないので、その状態で説明するのは難しいと思いますが。

課題 3-5: Lecture1-3~Lecture1-6はどうなの?

今回はツッコミが多めですが、一部を紹介。

予約語の話

48ページに予約語のリストが出ていますが、不完全です。テキストに書かれていませんが、以下の語も予約語です。

  • debugger
  • class
  • enum
  • extends
  • super
  • const
  • export
  • import

ECMA-262の "7.6.1 Reserved Words" にリストがあるので、そのまま引用するだけで良いはずなのですが。

この話に関連して、"window" や "alert" は予約語ではないのか、という疑問が出ました。これらは言語仕様として予約されているわけではありませんが、ブラウザが使っているので、プログラマーが使おうとすると名前がバッティングしてしまいます。alertなどは使えないのではなく、あっさり上書きできてしまうので注意が必要です。windowやdocumentは上書きできませんが (IE8以前ではdocumentが上書きできたというのは有名な話ですが、IE9からできなくなりました)。

変数名の命名

51ページに変数の命名の話が出ています。ハイフンとアンダースコアを使い分けるとどちらなのか迷うと書かれているのですが、そもそもJavaScriptでは変数名にハイフンを使えませんので、迷う余地はありません。JavaScriptに限らず、たいていの言語ではハイフンは減算記号とみなされます。

おそらく、HTMLのクラス名の話と混同されたのではないでしょうか。

文字列連結

「文字列」という言葉は説明されていないのですが、「文字列連結」は登場。

「文字列連結とは……パラメータの中で連結するテクニック」とありますが、べつにパラメータ(引数)の中でなくても連結できます。

演算の優先順位

「前後をかっこで囲っているのは、それが演算であることを明確に示すため」とありますが、括弧の機能は算数で習うそれと同じで、演算の優先順位を示すものです。

テキストで示されている例は以下のようなものですが、

document.write('1年は' + (365*24) + '時間です')

実はこの場合は括弧がなくても問題なく動作します。もともと加算より乗算のほうが優先度が高いため、この括弧はなくても優先順位は変わりません。括弧の有無で結果が変わるのは以下のような例です。

document.write('6月~7月の日数は' + 30 + 31 + '日です');

この場合は文字列と30という数値との連結が先に行われ、結果として '6月~7月の日数は3031日です' という文字列になってしまいます。以下のように括弧をつけると、

document.write('6月~7月の日数は' + (30 + 31) + '日です');

優先順位が変わり、30+31という数値同士の加算が先に行われた後で文字列と連結されるため、意図通りに動作するようになります。

ようやくプログラムらしくなってきたところですが、目覚ましの練習問題などはいろいろな意味で厳しかったですね。

関連する話題: Web / JavaScript / / ツッコミながらスクラムで学ぶ JavaScript勉強会

最近の日記

関わった本など