スポンサーリンク

JavaScriptの動かないコード(中級編) 正規表現の括弧キャプチャを,グローバルで繰り返しmatchできない (gオプションを付けると部分文字列の抽出が無効)


以下のJavaScriptコードが,意図した動作をしないのは,なぜですか。(制限時間1分)


やりたい事:

  • (試行1)では,文字列からトップレベルドメインを1つだけ抽出する。
    • これは上手くいく。
  • (試行2)では,文字列からトップレベルドメインを全て抽出する。
    • これは正常に動作しない。なぜなのか。

<script>

// 元の文字列
var str = "URLは,http://a.com/ と,https://b.jp/ です。よろしくね。";


/*
  (試行1)
  正規表現にgオプションを付けず,
  情報を1個だけ抽出してみる。
*/


// トップレベルドメインを抜き出す。
var m;
m = str.match( new RegExp( "https?://[^\\/]+\\.([^\\.\\/]+)/" ) );

	// httpとhttpsの両方に対応。
	// ドメイン名の最後の部分だけを,カッコで抜き出す。
	// つまり,ドメイン中の最後のドット以降の文字列を抜き出す。


// 配列の0番目には,マッチした文字列全体が入っている。
//alert( m[0] );  =>  "http://a.com/"

// 配列の1番目には,括弧でキャプチャした部分が入っている。
alert( "トップレベルドメインは" + m[1] );  // => "com"



/*
  (試行2)
  正規表現にgオプションを付けて,
  マッチした情報を全て抽出してみる。
*/


// 正規表現にgオプションを付ける。
m = str.match( new RegExp( "https?://[^\\/]+\\.([^\\.\\/]+)/", "g" ) );

// 括弧でキャプチャした部分を2つとも表示。
alert( "1つ目にマッチしたトップレベルドメインは" + m[1] );
alert( "2つ目にマッチしたトップレベルドメインは" + m[2] );


</script>

発生する不具合

続きを読む

JavaScriptの動かないコード(中級編) forループ内でイベントリスナを定義したら,動作がおかしい。(クロージャや関数オブジェクトの性質を理解していないために発生するエラー)


以下のJavaScriptコードが,意図した動作をしないのは,なぜですか。(制限時間1分)


やりたい事:
・ボタンごとに,0, 1, 2 という異なる数を表示したい。


<h3>ボタンごとに異なる数字をアラート表示するサンプル</h3>

<input type="button" id="id0" value="0">
<input type="button" id="id1" value="1">
<input type="button" id="id2" value="2">


<script>

for (var i = 0; i < 3; i ++ ){

  // クリック時のイベントを定義
  document.getElementById( 'id' + i ).onclick = function(){

    // それぞれ異なった数値を表示する。
    alert( i );

  };

}

</script>

解答は下記の通り。

続きを読む

大学1年生で学ぶ数学「解析学・微積分」の要点まとめ,勉強法の解説。 入門用に全体像・概要をわかりやすく紹介


大学一年生で学ぶ数学のうち,「解析学の基礎(微積分)」について

勉強法やポイントを,図表を交えつつ分かりやすく解説。

つまずきがちな微積分の全体像をつかめる。


解析学は,「微小量の厳密な理論」だ。

これを学ぶ理由・価値は何なのか?

また,どのように全体像を把握して学習を進めたらよいのか。


下記は,新入生が「解析学の概要」を理解する助けになるだろう。

  • (要約) 解析学とは,一言でいうと「微小量の理論」であり,微積分や極限のこと
  • (特徴) 無限小のレベルでの「精密さ・厳密さ」を追求する学問
  • (価値・意義) 微小量を制する者は,巨大な量をも制する。厳密な理論を展開できるから
  • (要点のつながり) 大学1年生の「解析学」のポイントを追いかけるストーリー
    • (ステップ1)「多重積分」のためには,1変数での積分や微分が必要。
    • (ステップ2)1変数の微分のためには,「関数列」や「点列」の極限操作が必要。
    • (ステップ3)「点列の極限」と「関数列の極限」には,収束法や連続性に応じた橋渡しが必要。
    • (ステップ4)点列の収束のために「ε-δ論法」が必要。(※最大のヤマ場)
    • (ステップ5)「極限の収束」を定義できれば,実数上に存在するさまざまな数や区間を正しく定義できる。
  • (実用性) 無限小がわかると,精度のよい「近似」が可能になる(テイラー展開)
  • (1年生の終盤) 多変数の解析学は,「ベクトル解析」の一歩手前まで
  • (まとめ)要点の復習
  • (その先へ) 大学2年生からの発展


(要約) 解析学とは,一言でいうと「微小量の理論」であり,微積分や極限のこと

大学の1年次の数学では,主に「解析学」と「線形代数」の2つを学ぶ。


このうち「解析学」とは,つまり微積分のことだ。

極限や無限を使って,関数の性質を調べ計算する。


解析学のカリキュラムでは,1年生の夏と冬で,

それぞれ以下のようなことを学ぶ。

  • 解析学(夏): 
    • 1変数の,微分と積分。
    • ε-δ論法による極限や,関数の収束の扱い方。
  • 解析学(冬): 
    • 2変数および多変数の,微分と積分。
    • 複雑な面積や体積の計算により,重積分をつかいこなす。

そして教官にもよるが,1年間の中でたいてい,常微分方程式の解法を教わる。


微分,積分,そして微分方程式

これが解析学の「1年間の成果」だと言える。


1年次の解析学は,下記のPDFまとめで独学できる。

大学の数学で,微積分(解析学)の講義ノートPDF。演習問題と解答付き(大学1年で学ぶ,1変数と多変数の微分積分学のオンライン教科書) - 主に言語とシステム開発に関して
http://language-and-engineering.hatenablog.jp/entry/20140509/UniversityCalculusPDFNoteLinks

  • 微分には極限やε-δ論法,級数展開,収束などが含まれる。
  • 積分には線・面・体積の積分や広義積分を含む。
  • 良質な講義資料を集めた。演習問題と解答もある。おかげで,高い参考書を買わなくて済む。


しかし,無料でぶあつい教科書PDFが手に入るのはありがたいが,

まずは手っ取り早く,全体の概要だけを知りたい。

という人も多いだろう。


そういう人のために,解析学のポイントのつながりを解説するのが本記事だ。

(特徴) 無限小のレベルでの「精密さ・厳密さ」を追求する学問

解析学とは,「無限小のレベルで厳密に正しいかどうか」を突き詰める学問だ。

どれほど細かくしても正しい,という精緻(せいち)で精密な理論を構築する。


たとえば,関数 f(x) と g(x) を比べて,

遠くから眺めると「だいたい一致している」ように見える。


しかし,よく見ると g(x) には,いくつか小さなでっぱりがあって,

細かいところで f と g は互いに一致していないことが分かったとする。


f:id:language_and_engineering:20160330183030p:plain


このでっぱりの大きさはεだ。

εをものすごく小さくできる場合,どこまで小さければ,

「f(x) と g(x) は互いに等しい」

と言えるのだろうか?

続きを読む