SlideShare a Scribd company logo
モテる JavaScript
日本マイクロソフト株式会社
デベロッパー& プ ラットフォーム統括本部
物江修
Twitter : osamum_MS
Blog : http://blogs.msdn.com/b/osamum/
目的
• 他人に見られて恥ずかしくない
コードを書く
• 格好良い JavaScript コードを
書いてモテる
アジェンダ
•知っておきたい JavaScript の
慣例的な記述方法とマナー
•使われているとなんかカッコ良い
JavaScript の機能
•最近、こんなふうに書いてます。
知っておきたい JavaScript の
慣例的な記述方法とマナー
変数/関数の命名規則
• 基本
var fistName; (キャメルケース)
• コンストラクタ
var calendar = new CalenderCtrl();
(先頭が大文字)
• this (現在の名前空間)
var that = this;
• 定数
var GENERAL_API_KEY = "4fh5cv$sp";
• プライベート
var _userName = "user01";
変数/関数を判別する工夫
•関数 : 動詞を先頭
ex) setHandler, getInfo, loadContent
•変数 : 単語間を _ (アンダースコア) で
ex) var first_name = "";
変数を宣言する場所
•関数の先頭
•すべての変数
function myFunc(){
var shopName;
var address;
var phone;
var catchCopy;
・
・
function myFunc(){
var shopName,
address,
phone,
catchCopy;
・
・
スコープ (1/2)
• JavaScript の変数スコープは関数単位
//変数 i と fullName のスコープは for 文内に閉じていな
い
for (var i = 0; i < length; i++) {
var fullName = items[i].firstName + " "
items[i].lastName;
:
//以下は期待どおりの動作とならない
for (var i=0; i<5; i++) {
console.log("Outer loop " + i);
for (var i=0; i<10; i++) {
console.log("Inner loop " + i);
}
}
• 宣言されていない変数は巻き上げられる
• 複数回宣言可能 (上書きれる)
スコープ (2/2)
function myFunc(){
$ = "Hello";
//jQuery を使用していた場合、正常に動作しなく
なる
意図しない名前空間の変数書き換え
⇒ 名前空間の汚染
名前空間を汚染しないための工夫
• “use strict” の使用
• 即時実行関数に閉じる
<script>
(function(){
"use strict";
onload = function(){
var variable1, variable2, variable3;
//ページ読み込み時の処理
};
function otherFunction(){ //関数の処理 };
})();
</script>
オブジェクトを利用した書き方(1)
var myUtil = {
methodA : function () {
//method A の処理
return resultValue;
},
methodB : function(arg){
//method B の処
理
return resultValue;
}
};
//呼び出し方
var variable = myUtil.methodA();
オブジェクトを利用した書き方(2)
var myUtil = {};
myUtil.methodA = function () {
//method A の処理
return resultValue;
};
myUtil.methodB = function (arg) {
//method B の処理
return resultValue;
};
//呼び出し方は同じ
var variable = myUtil.methodA();
中括弧({})の書き方 (1/2)
• 中括弧の開始タグの前で改行しない
• 暗黙的 ; (セミコロン) の挿入による意図
しない動作となる場合がある
function userInfo(){
return {
firstName : "ひろし",
lastName : "山田",
age : 23};
}
×〇
function userInfo()
{
return
{
firstName : "ひろし",
lastName : "山田",
age : 23};
}
エラーが発生
中括弧({})の書き方 (2/2)
• if 文は {} を省略せずに書く
if( itemslength == MAX_LENGTH) countLabel.innerText = "Full";
else countLabel.innerText = itemslength;
if( itemslength == MAX_LENGTH) {
countLabel.innerText = "Full";
}else{
countLabel.innerText = itemslength;
}
△
〇
DOM アクセスについて
• DOM ツリーを探すのでアクセスにはコストがかかる
• 2 回以上アクセスする際はインスタンスを変数に
//一般的に使用される DOM エレメントのインスタンスの取得法
var element = document.getElementById("エレメントの
ID");
.getElementByName("エレメントの名前");
.querySelector("CSS セレクタ");
.activeElement();
.all();
DOM アクセスの例
//非常に効率が悪い例
for(var i=0; i < document.getElementById(“itemList”).childNodes.length; i++){
document.getElementById("itemList").childNodes[i].innerText = "アイテム" +
i;
}
//ロスを減らした例
var nodes = document.getElementById("itemList").childNodes;
var length = nodes.length;
for(var i=0; i< length; i++){
nodes[i].innerText = "アイテム" + i;
}
ここまでのまとめ
•慣例的な記述方法
• 可読性を高めるため
• メンテナンス性を高めるため
• 意図しない動作を避けるため
• 他者に迷惑をかけないためのマナー
使われていると
なんかカッコ良い
JavaScript の機能
あいまいな評価の利用 (1/3)
• JavaScript の 5 つの false
以下はいずれも false と判断される
false
null
undefined
"" (空文字)
0
NaN (not a number)
if(stringData!="")
⇒ if(stringData)
あいまいな評価の利用 (2/3)
いろいろな使いみち
if(myObject) //オブジェクトのインスタンスの有
無
if(document.addEventListener) //メソッドの有無
if(items.length) //要素の有無 (数)
定義済み判定のさらに短い書式
//変数の初期値設定
function(stringArg){
stringArg = stringArg || "defaultValue";
//安全な名前空間の登録
var myApp = myApp||{};
•注意が必要な場合も
あいまいな評価 (3/3)
以下の式は正しく評価されない
console.log(0 == ''); //true
console.log(0 == '0'); //true
console.log(false == '0'); //true
console.log(null == undefined); //true
console.log(0 == 'trn'); //true
あいまいな評価を避けるには
===
!==
•厳密な評価が可能
イコール
Not イコール
console.log(null === undefined); //false
即時実行関数
• (function(){//処理})();
• 一か所からのみ呼び出される
• 名前空間を使用しない
var shopName = item.shopName;
var avgFare = item.avgFare;
var creditCard = (function(sepChar){
var dotList = "",
cardList = item.creditCardList,
length = cardList.length;
for(var i=0; i<= length; i++){
dotList += cardList[i].name + sepChar;
}
return dotList;
})(",");
クロージャー(1/3)
• 渡された引数の値を保持する
function makeAdder(x){
return function(y){
return x + y;
}
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); //7
console.log(add10(2)); //12
クロージャー(2/3)
[[scoope]]
makeAddr
add5
add10
function(y)
{return x + y}
[[scoope]]
function(y)
{return x + y}
[[scoope]]
[[scoope]]
x : 10
[[scoope]]
x : 5
function (x)
{
return
function( y )
{ }
}
クロージャー(2/3)
var ctrl_listView = document.getElementById("itemList"),
ctrl_item = null;
for(var i=0; i <=5; i++){
crtl_item = document.createElement("li");
crtl_item.innerText = "リンク" + i;
crtl_item.addEventListener("click",
function (index) {
return function(){
console.log(index
+ "番目がクリックされました。");
}
}(i)
, false);
ctrl_listView.appendChild(crtl_item);
}
• ex) リストに生成時のインデックスを保持
メソッドチェーン (1/2)
• ワンライナー(一行)で複数メソッドの呼び出し
• オブジェクトツリーの検索処理の軽減
01| myPage.setCtrl();
02| myPage.setHendler();
03| myPage.loadData();
01| myPage.setCtrl().setHendler().loadData();
メソッドチェーン (2/2)
var myPage = {
methodOne : function(){
console.log("ONE");
return this;
},
methodTwo : function(){
console.log("TWO");
return this;
},
methodThree : function(){
console.log("THREE");
return this;
}
}
//呼び出し
myPage.methodOne().methodTwo().methodThree();
ここまでのまとめ
• JavaScript の良い意味での「曖昧さ」
を理解してうまく使うことでコンパクト
で効率の良いコードが書ける
• 関数の実行タイミング、メモリの使われ
方をすることで頓智の効いたコードが書
ける
最近、こんなふうに
書いてます。
完結したページ/コントロールを
1 対 1 のオブジェクトで管理
var thisPage ={
ctrls:{
//コントロールの
//インスタンスを保持
},
init:{
//ページの初期化関数群
},
handlers:{
//イベントハンドラ群
},
util:{
//一般関数群
}
}
初期化オブジェクトの中身
var thisPage ={
ctrls:{
listBox:null
},
init:{
setCtrls:function(){
this.ctrl.listBox = id$("listBox");
return this;
},
setHandlers:function(){
this.ctrl.listBox.addEventListener("change",
this.hendlers.changeItem,false);
return this;
},
lenderPage:function(){ //listBox へのデータロード処理等
return this;
}
}
初期化メソッドの呼び方
onload = function(){
thisPage.init.setCtrls()
.setHandlers()
.lenderPage();
}
//正常時、エラー時に実行する関数を引数に
.lenderPage(success,error);
Web ページの場合の応用
・ブラウザ間のイベント設定の記述の違いを吸収する
var util ={
addEvent:null,
init: function () {
if(document.addEventListener) {
this.addEvent = function(element, type, handler){
element.addEventListener(type, handler, false);
}
}else if(document.attachEvent) {
this.addEvent = function(element, type, handler){
element.attachEvent('on' + type, handler);
}}}}
//初期化
util.init();
//イベントハンドラの設定
util.addEvent(document.getElementById("button"));
ここまでのまとめ
• インタラクティブに動作する Web アプ
リケーションは、ページをオブジェクト
を介して抽象化すると扱いやすい
まとめ
•日々是学び
•「オトコならシャツ一枚にもこ
だわれ」⇒「技術者ならコード
一行にこだわれ」
enjoy!
参考
O’RELLY Japan
JavaScript
http://www.oreilly.co.jp/books/9784873113296/
参考
O’RELLY Japan
JavaScript: The Good
Parts――「良いパーツ」による
ベストプラクティス
http://www.oreilly.co.jp/books/9784873113913/
参考
O’RELLY Japan
JavaScriptパターン
――優れたアプリケーションの
ための作法
http://www.oreilly.co.jp/books/9784873114880/
モテる JavaScript

More Related Content

What's hot (20)

PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
civic Sasaki
 
PDF
メディア芸術基礎 II jQuery入門
Atsushi Tadokoro
 
PDF
JavaScript超入門 基礎
tetsu6
 
PDF
これからのJavaScriptの話
Shogo Sensui
 
PDF
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
PDF
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
 
PDF
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
 
PPT
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
Kazunori Tatsuki
 
PDF
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
 
PDF
TypeScript 1.0 オーバービュー
Akira Inoue
 
PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
 
PDF
ECMAScript6による関数型プログラミング
TanUkkii
 
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
 
PDF
⑳CSSでアニメーション!その1
Nishida Kansuke
 
PDF
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
 
PDF
javascript を Xcode でテスト
Yoichiro Sakurai
 
PDF
⑮jQueryをおぼえよう!その1
Nishida Kansuke
 
PDF
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
 
PDF
JavaScriptの落とし穴
ikdysfm
 
PDF
20110714 j queryベーシック
良太 増子
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
civic Sasaki
 
メディア芸術基礎 II jQuery入門
Atsushi Tadokoro
 
JavaScript超入門 基礎
tetsu6
 
これからのJavaScriptの話
Shogo Sensui
 
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
 
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
 
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
Kazunori Tatsuki
 
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
 
TypeScript 1.0 オーバービュー
Akira Inoue
 
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
 
ECMAScript6による関数型プログラミング
TanUkkii
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
 
⑳CSSでアニメーション!その1
Nishida Kansuke
 
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
 
javascript を Xcode でテスト
Yoichiro Sakurai
 
⑮jQueryをおぼえよう!その1
Nishida Kansuke
 
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
 
JavaScriptの落とし穴
ikdysfm
 
20110714 j queryベーシック
良太 増子
 

Similar to モテる JavaScript (20)

PDF
Kanazawa.js.Next
dynamis
 
PPTX
JavaScriptクイックスタート
Shumpei Shiraishi
 
PDF
JavaScript Basic 01
Yossy Taka
 
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
ODP
Javascriptで学ぶ Functional Programming
todorokit
 
PPT
20090121 J QueryからはじめるJava Script~初級編~
Hiromu Shioya
 
PDF
150420 flash004 変数
elephancube
 
PDF
JavaScript.Next
dynamis
 
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
 
PDF
Effective JavaScript Ch.1
Teppei Sato
 
PPTX
Startup JavaScript
Akinari Tsugo
 
PPTX
前期講座09
Takenori Nakagawa
 
PDF
JSer Class #1
mizuky fujitani
 
PDF
第3回 JavaScriptから始めるプログラミング2016
kyoto university
 
PDF
Webページで学ぶJavaScript2013 第2回
京大 マイコンクラブ
 
PDF
JavaScript 基礎文法のまとめ
Yossy Taka
 
PDF
Swiftの概要をザックリと
Keisuke Tanaka
 
PDF
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
 
PDF
ちょっと詳しくJavaScript 特別編【悪霊の神々】
株式会社ランチェスター
 
Kanazawa.js.Next
dynamis
 
JavaScriptクイックスタート
Shumpei Shiraishi
 
JavaScript Basic 01
Yossy Taka
 
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
Javascriptで学ぶ Functional Programming
todorokit
 
20090121 J QueryからはじめるJava Script~初級編~
Hiromu Shioya
 
150420 flash004 変数
elephancube
 
JavaScript.Next
dynamis
 
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
 
Effective JavaScript Ch.1
Teppei Sato
 
Startup JavaScript
Akinari Tsugo
 
前期講座09
Takenori Nakagawa
 
JSer Class #1
mizuky fujitani
 
第3回 JavaScriptから始めるプログラミング2016
kyoto university
 
Webページで学ぶJavaScript2013 第2回
京大 マイコンクラブ
 
JavaScript 基礎文法のまとめ
Yossy Taka
 
Swiftの概要をザックリと
Keisuke Tanaka
 
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
株式会社ランチェスター
 
Ad

More from Osamu Monoe (20)

PDF
高品質な Teams アプリを開発するためのポイント
Osamu Monoe
 
PDF
PWA on Windows
Osamu Monoe
 
PDF
これでできる! Microsoft Teams アプリ開発のポイント徹底解説
Osamu Monoe
 
PDF
Web プラットフォーム再考 ~PWA のもたらす未来の光と影~
Osamu Monoe
 
PDF
Microsoft Edge のFIDO サポート状況
Osamu Monoe
 
PDF
JavaScript と Bot Service を使った Bot 開発
Osamu Monoe
 
PDF
Web サーバー管理者のための Azure App Service 再入門
Osamu Monoe
 
PDF
NativeScript 環境のインストールとはじめてのプロジェクト実行
Osamu Monoe
 
PDF
Microsoft Bot Framework と Cognitive Services を活用した 業務サポートBOT 構築
Osamu Monoe
 
PDF
JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~
Osamu Monoe
 
PDF
For every people achieve more : マイクロソフトの Inclusive Design について
Osamu Monoe
 
PDF
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Osamu Monoe
 
PDF
Microsoft Edge 最新アップデートとこれから
Osamu Monoe
 
PDF
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
 
PDF
html5j Webプラットフォームの紹介
Osamu Monoe
 
PDF
Microsoft edge deep dive
Osamu Monoe
 
PDF
Edge と IE、来年からの Web 制作
Osamu Monoe
 
PDF
マイクロソフトにおけるエバンジェリズム活動
Osamu Monoe
 
PDF
Windows 10 のあたらしい Web ブラウザーの F12 開発者ツール
Osamu Monoe
 
PDF
Microsoft Edgeで サポートされる 新しい API について
Osamu Monoe
 
高品質な Teams アプリを開発するためのポイント
Osamu Monoe
 
PWA on Windows
Osamu Monoe
 
これでできる! Microsoft Teams アプリ開発のポイント徹底解説
Osamu Monoe
 
Web プラットフォーム再考 ~PWA のもたらす未来の光と影~
Osamu Monoe
 
Microsoft Edge のFIDO サポート状況
Osamu Monoe
 
JavaScript と Bot Service を使った Bot 開発
Osamu Monoe
 
Web サーバー管理者のための Azure App Service 再入門
Osamu Monoe
 
NativeScript 環境のインストールとはじめてのプロジェクト実行
Osamu Monoe
 
Microsoft Bot Framework と Cognitive Services を活用した 業務サポートBOT 構築
Osamu Monoe
 
JS で Bot つくろうぜ! ~刮目せよ!、これがMSのBot Framewok だ!!~
Osamu Monoe
 
For every people achieve more : マイクロソフトの Inclusive Design について
Osamu Monoe
 
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Osamu Monoe
 
Microsoft Edge 最新アップデートとこれから
Osamu Monoe
 
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
 
html5j Webプラットフォームの紹介
Osamu Monoe
 
Microsoft edge deep dive
Osamu Monoe
 
Edge と IE、来年からの Web 制作
Osamu Monoe
 
マイクロソフトにおけるエバンジェリズム活動
Osamu Monoe
 
Windows 10 のあたらしい Web ブラウザーの F12 開発者ツール
Osamu Monoe
 
Microsoft Edgeで サポートされる 新しい API について
Osamu Monoe
 
Ad

モテる JavaScript