Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScript&可視化講習会#1

 JavaScript&可視化講習会#1

OUCC(http://oucc.org/) で5/24に行ったJavaScriopt&可視化講習会の一回目資料です。

domitry

May 24, 2015
Tweet

More Decks by domitry

Other Decks in Programming

Transcript

  1. 始める前に • 次の用語がわかる人?  変数  関数  オブジェクト 

    クラス • 次の言語が使える人?  C言語  C#  Python  Java
  2. 最近のJavaScript • 高速化高速化  V8 Engine  asm.js • 際限なく広がっていくJavaScriptの世界

     Node.js (サーバーサイド)  WebGL (3D)  WebCL (並列化) • もうJavaScript書きたくない人たち  AltJS (TypeScript, CoffeeScript, JSX, etc.)  babel
  3. 九九の表 for(var i=0; i<=9; i++){ for(var j=0; j<=9; j++){ console.log(i

    + " * " + j + " = " + i*j); } } • コンソールで試してみよう
  4. 念のため用語の説明 • 手続き … procedure, 処理そのもの。 • 状態 … 処理の結果生まれたもの。(または

    処理の前段階で準備してあったもの) • アルゴリズム … 手順を記したもの。料理本 のレシピみたいなもの
  5. JavaScriptの特徴 • 制御文(if, forなど)はC言語に似ている • ブロックは{}, 文の終わりに; for(var i=0; i<=9;

    i++){ if(i%3 && i%5)console.log(“FizzBuzz”); else if(i%3)console.log(“Fizz”); else if(i%5)console.log(“Buzz”); else console.log(i); }
  6. JavaScriptの特徴 • 変数はvarで宣言 • 動的型付け言語、変数に何でも入れられる var hoge = 30; hoge

    = “Hello, world!”; hoge = [“a”, 1, 10, “hogehoge”]; console.log(hoge);
  7. JavaScriptの特徴 • 演算子  +, -, *, /, %, ++,

    --, << , >>, >, <, =, ==, ===等 • 大体Cと一緒。 var a = 10, b = 3, c = 10; console.log(a+1, a%3, a++, a--, a==b, a==c); var hoge = [“a”, “b”, “c”]; var nya = [“a”, “b”, “c”]; console.log(a===b);
  8. 演算子 • = … 代入 • == … 値の比較 •

    === … 厳密等価演算子(型を含めて比較, 暗 黙の型変換を行わない)  Ex: console.log(“1” === 1); // false console.log(“1” == 1); // true
  9. 演算子 • A && B … AかつB • A ||

    B … AまたはB • !(falseかtrue)で真偽を反転 console.log(1==1, 1==2); console.log(1==1 && 2==2, 1!=2 || 1==2); console.log(!false, !true);
  10. typeof, instanceof演算子 • 変数はそれぞれ”型, type”を持っている。(型 については後述) • typeof A (Aは変数)とすると変数の型の名前

    を文字列で返す。 var a = “HogeHoge”; var b = 10; console.log(typeof a); // => “string” console.log(typeof b); // => “number”
  11. for文 • for(A;B;C){D}  1. Aで変数を初期化する。  2. Bの条件を満たしていればDを実行する。 

    3. Cを実行して2に戻る。後は繰り返し。 for(var i=0; i<10; i++){ for(var j=0; j>-5; j--){ console.log(i*j); } }
  12. 練習問題 • 与えられた数のmodを求める関数を作ろう  mod(10, 3); // 1 • nの階乗を求める関数を作ろう

     fanc(3); // 6 • n番目のフィボナッチ数を求める関数を作ろう  fib(3); // 1+1 = 2
  13. 変数とデータ型 • JavaScriptは動的型付け言語。 • 型はちゃんとある。 var hoge = 30; hoge

    = “Hello, world!”; hoge = [“a”, 1, 10, “hogehoge”]; console.log(hoge);
  14. 数値型(number) • 整数や少数の区別なし var num0 = 1; var num1 =

    1/3; var num2 = 100000000000000000000000000000000000000000000; console.log(typeof num0, typeof num1, typeof num2); console.log(num2);
  15. 連想配列型(object) • 鍵から値にアクセスできる。アクセスの仕方 は二種類。  obj[“key”]  obj.key • どちらも同じ意味。だけどこれのおかげで

    JavaScriptは面白い。(後述) var obj = {“a”: 10, “b”: 30}; console.log(obj.a, obj[“a”]); obj[“c”] = 40; obj.d = 100; console.log(obj);
  16. 練習問題 • 与えられた連想配列に”hoge”というキーが存 在するか確かめる関数を作ろう  hasHoge({hoge: 3}); //-> true 

    hasHoge({nya: 4}); //-> false • 与えられた配列の中に入っているのがすべて数 値であるか確かめる関数を作ろう  isAllNumber([3, 4, 5]); //-> true  isAllNumber([1,2,”hoge”]); //-> false
  17. 練習問題 • 与えられた連想配列に”hoge”というキーが存 在するか確かめる関数を作ろう  hasHoge({hoge: 3}); //-> true 

    hasHoge({nya: 4}); //-> false • 与えられた配列の中に入っているのがすべて数 値であるか確かめる関数を作ろう  isAllNumber([3, 4, 5]); //-> true  isAllNumber([1,2,”hoge”]); //-> false
  18. ライブラリ • Math.log, pow, exp, cos, sin, tan, acos, atan,

    atan2, … それぞれの値を求める関数 • Math.PI, Math.E …定数 • Math.floor, ceil, round…切り捨て切り上げ 四捨五入の関数 • Math.min, Math.max…渡された引数の内最 小最大のものを返す関数 等々。使い方がわからなければググろう。
  19. JavaScriptにおけるクラス • classという言葉は使わないがクラス的に使 える機能ならある。 function A(val){ this.hoge = val; }

    A.prototype.printHoge = function(){ console.log(this.hoge); }; var a = new A(100); a.printHoge(); //=> 100
  20. 問題 • 以下の3つのコードを実行し、thisが何になって いるか確認してください。  _.apply({a: 3, b: 4}, function(){console.log(this);})

     function A(){ console.log(this); } A();  function B(){ this.hoge = “Hoge”; } B.prototype.printHoge = function(){ console.log(this.hoge); } var b = new B(); var func = b.printHoge; func();
  21. 矩形(くけい) <rect></rect> Attributes: x, y, width, height Example: <rect x=“10”

    y=“10” width=“100” height=“100” fill=“yellow” stroke-width=“3” stroke=“black”></rect>
  22. 円 <circle></circle> Attributes: cx, cy, r, stroke, stroke-width, fill Example:

    <circle cx=“50” cy=“50” r=“20” fill=“yellow”></circle>
  23. 線① <line></line> Attributes: x1, y1, x2, y2, stroke, stroke-width, fill

    Example: <line x1=“0” y1=“0” x2=“10” y2=“10” stroke-width=“5” stroke=“yellow”></line>
  24. グループ <g></g> Attributes: Example: <g transform=“translate(10, 10)”> <rect x=“0” y=“0”

    width=“300” height=“100” fill=“white” stroke-width=“2” stroke=“black”></rect> <circle cx=“150” cy=“50” r=“35” fill=“red” stroke- width=“0”></circle> </g>
  25. Selectionその他のAPI • Selection.append(str)  新しい要素を付け足す。strはrectなど要素名。 • Selection.remove()  selectionがラップする要素を削除する。 •

    Selection.text(str)  <div>hoge</div>のhogeにあたる部分を変更する。 • Selection.select(str), selectAll(str)  子要素から条件に合う要素を探す。
  26. Selection.attrの謎 • 実はSelection.attrの第二引数には即値だけ でなく関数を入れることができる。 var arr = [1, 10, 30];

    d3.select("svg") .selectAll("rect") .data(arr) .enter() .append("rect") .attr({ x: function(d, i){return 40*i}, y: 0, height: function(d, i){return 10*d;}, width: 30, fill: "#000" });
  27. Selection.data • 下のenter()や存在しない要素へのselectAll を理解するにはstageの概念が必要である。 var arr = [1, 10, 30];

    d3.select("svg") .selectAll("rect") .data(arr) .enter() .append("rect") .attr({ x: function(d, i){return 40*i}, y: 0, height: function(d, i){return 10*d;}, width: 30, fill: "#000" });
  28. 出展 • Wikipedia-tan:  CC-BY-SAで配布されています。  Wikipe-tan  User:Lokisis 

    User:Malyszkz/gallery  File:Neko Wikipe-tan.png • 猫のイラストは全てPublic Domainで配布さ れています。