読者です 読者をやめる 読者になる 読者になる

野次馬エンジニア道

野次馬な気持ちでプログラミングをあれこれと綴ります

AngularJSのスタイルガイドの日本語訳

AngularJS Design Pattern 英語 JavaScript

同僚とベストプラクティスに関して議論になりそこで紹介されたのが、

というスタイルガイド。

クロスで参照されている @toddmottoの方が分量も少なく要点が絞ってあり@tama3bbによる日本語訳もあるので有難い。

johnpapaの方はテスト方法やツールの話まで包括的に書いてあるが、残念ながら日本語訳が未だ無い、ということで自分で翻訳してみた。

文章の量がそれなりにあったので、スキマ時間に2-3行ずつ翻訳するというスタイルでなんとか完成。予想以上に時間をかけてしまった。せっかくなのでPull Request

肝心の内容はオリジナルを参考にしてもらうとして翻訳中に気になったことをいくつか。

IIFE (Immediately Invoked Function Expression)

即時関数式と日本語で見れば誰でもピンとくると思うのが、イッフィー と音だけ聞くと??になるかも。

var str = (function(){ 
    return "foo"
})();

Hoisting

「巻き上げる」という訳が当てはまる。スコープの先頭で宣言されたときと同じ動作になる。

var foo = "a";
function test() {
    console.log(foo);  //undefine
    var foo = "b";
    console.log(foo);  //"b"
}
test();

コールバック関数などの実装をソースの下側で宣言して可読性を保つことができる。

The Revealing Module Pattern

定番の書き方だけに、名前を知っていると人に説明するときに便利。

Learning JavaScript Design Patternsのリンクが参照されている。

var myRevealingModule = (function () {
        var privateVar = "Ben Cherry",
            publicVar  = "Hey there!";
        function privateFunction() {
            console.log( "Name:" + privateVar );
        }
        function publicSetName( strName ) {
            privateVar = strName;
        }
        function publicGetName() {
            privateFunction();
        }
        // Reveal public pointers to
        // private functions and properties
        return {
            setName: publicSetName,
            greeting: publicVar,
            getName: publicGetName
        };
    })();
myRevealingModule.setName( "Paul Kinlan" );

抽象性の破綻 (Leaky Abstruction)

日本語を見てもピンとこないが、Joel Spolskyの本に登場するらしい。

抽象化によっては、次々に構築される概念を完全に隠蔽することでプログラマが把握しなければならない概念の幅を制限しようとする。Joel Spolskyは、あらゆる抽象化は破綻しやすいと主張して批判した。つまり、抽象化によって下部構造が完全に隠蔽できたためしがないというのである。

抽象化 (計算機科学) - Wikipedia より

具体例も交えた

の説明が素晴らしい。

元のスタイルガイドの文脈はグローバルになってしまう外部のライブラリなどを

(function() {
    'use strict';

    angular
        .module('app.core')
        .constant('toastr', toastr)
        .constant('moment', moment);
})();

のように宣言するというもの。

次は

翻訳に手一杯で肝心のコードを追っていたかどうか怪しいが、、、早速このスタイルのいくつかを実践してみたい*1

大昔に読んだJoel Spolskyの本のリンクを貼っておく。

Joel on Software

Joel on Software

*1:やっぱり英語を見ながら目の前のコードを書き直した方が覚えたかも