JavaScriptの仕事を数ヶ月缶詰状態でやっていて、JavaScriptについての知見がたまってきた

[Sponsored Link]


当ブログでは「役に立った!」「写真使いました!」などご参考頂いた方からのAmazonギフト券の寄付をお待ち致しております。

Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrPin on PinterestShare on LinkedInDigg this

6月から渋谷某所にてJavaScriptの仕事をずっとしている。もともとJavaScriptは言語仕様的にも緩くて「なんでもあり」の言語だと思っていた(いやいまだにそうだと思うし実際そうだし)。しかしルール決めさえ徹底すればオブジェクト指向的な開発も可能であるということが最近ようやくわかった。まあNode.jsとかさわってる人からすると当たり前なのかもしれないけれど、とにかくJavaScriptは苦手意識しかなかったのだが、最近ようやくそれもなくなってきたかな…という感じは、しないでもない。

言語仕様に詳しいわけではないけれど、JavaScriptは実際に仕様策定者も認識している仕様上のバグもあったりして(nullはnull型があるが、typeofで型チェックするとobjectとして認識されるためtypeofでの型チェックはnullについてはできない。修正すると問題がでかいので修正されずに仕様として残存している)、どうもこの言語大丈夫なのか…という印象も否めない。

それ以外にもDOMだのjQueryだのとにかくめんどくさい印象しかなくて、まあそれでも生DOMを直接扱うよりjQueryのほうが…ということで使っていた時期もあったけれど、JavaScriptへの抵抗感を打ち勝つための道具にはなりえなかった(私にとっては)。

という中でのJavaScriptの仕事。
とってもとっても消極的であったがお仕事なので仕方がない。
生活には変えられません。

初めて見て2ヶ月は、ぶっちゃけ、やっぱくさった言語だと思った。
ただそれは、腐った設計者によってつくられた腐った偽フレームワーク上での作業を強いられていたという点も大きいかもしれない。

違うな、と感じ始めたのは、それから少し経ってからであった。

8月から新たなフレームワーク構築を目標として別の優秀なエンジニアの元で仕事をすると……。
確かにJavaScriptでも、お堅いコンパイラ言語に近い開発が十分にできるということがわかった。
柔軟なだけにいろいろテクニックも要したりする部分もあるし、トリッキーとも思える方法論でコーディングできてしまう部分については疑問を持たざるをえないこともあるのだが、頭のいい人がJavaScriptを使うとこうなるのだという実例は目の当たりにできた。

まあ私も開発におけるプログラミング言語への依存部分はそう大きくはない(◯◯言語だから開発できない等はよほどのことがない限り無い)というスタンスだったが、今回のJavaScriptの事例は開眼である。

勉強のために書店に行けば、確かにJavaScriptの本はGoやSwiftやScalaなどなどの言語よりもぜんぜん多くて、新たな規格も検討され、そしていまだに新刊が発行されているところを考えると、今をときめく注目言語の1つなんだなぁというのも感じたのである。

まあ知見はたまったけど、まとまった記事が書けるほど気持ちの余裕も時間の余裕もないので、それはいずれまた……。

ただ本気でJavaScriptで仕事するなら、JSのエンジンの特徴(たとえばSpiderMonkeyなのかV8なのかなど)を理解した実装を目標にしたり、コード記法はチーム内でしっかりルール化して統一したり、prototypeを活用した継承、クラス的用法(JavaScriptにはクラスの概念はない)などを理解したりと、いろいろノウハウは必要になってくる。

Node.jsは使ったことが無いのでアレだけど、たぶんいわゆる「オブジェクト指向JavaScript」の作り方は間違いなくしているだろう。こうした書籍も多数出版されているので、私もいくつか買い揃えて改めて読んでいるところである。

[Sponsored Link]



確かな力が身につくJavaScript「超」入門JavaScriptによるデータビジュアライゼーション入門入門者のJavaScript (ブルーバックス)開眼!  JavaScript ―言語仕様から学ぶJavaScriptの本質パーフェクトJavaScript (PERFECT SERIES 4)シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA

Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrPin on PinterestShare on LinkedInDigg this

当ブログでは「役に立った!」「写真使いました!」などご参考頂いた方からのAmazonギフト券の寄付をお待ち致しております。


Atsushi Ezura について

ナチュラルな女性のしぐさや表情を撮りたいIT系エンジニア。女性モデル募集中プロフィール
カテゴリー: JavaScript, コンピュータ, プログラミング言語 タグ: , パーマリンク

JavaScriptの仕事を数ヶ月缶詰状態でやっていて、JavaScriptについての知見がたまってきた への2件のフィードバック

  1. 通りすがり のコメント:

    JSを扱う上で大事なのは、JSの性質をよく理解し、固く考えないことだと思います。
    手順をかけて何かをするより、性質を上手く使ったトリッキーな一発の方法で熟すのも重要です。

    特に重要になってくるのが型変換周りでしょうか。
    これは型をチェックして何かをしようと考えるとコードも複雑になり、うまく行きません。
    そうではなく、何の型か気にせずに、最低限利用できる形に整形して使うというテクニックが肝です。

    例えば
    double = +any || 0 、 int = any | 0
    とすることができます。
    ここで0または非数は0になってしまいますが、非数をそもそもエラーにしようと思わず、
    この0になるという性質を活用して全体のロジックを作っていくのです。

    こういった型変換と、ダックタイピングによる柔軟で効率的なコードを書けるようになると、
    JavaScriptが楽しくなってくると思います。
    オブジェクト指向についてもまた然りで、オブジェクト指向というものは別に大したものでもないですし、
    手続き型と競合するものでもありません。
    悩むようなものではなく、自然とそうなっているようなものなのです。

  2. 通りすがり のコメント:

    それとJSの気持ち悪さの要因の1つに、prototypeを使った継承の仕方が挙げられると思います。
    この継承システムは、プロトタイプベースにクラスベースの皮を被せようとしたもので、確かに気持ち悪いです。
    ですが、これを使わないという手もあります。
    例えば
    function Human(name) {
    this.name = name
    }
    Human.prototype.hello = function () {
    alert(‘こんにちは\nby ‘+this.name)
    }
    var mike = new Human(‘mike’)

    var HumanProto = {
    hello: function () {
    alert(‘こんにちは\nby ‘+this.name)
    }
    }
    var mike = Object.create(HumanProto)
    mike.name = ‘mike’
    もしくは最後を
    var mike = {__proto__:HumanProto, name:’mike’}
    などとすることも出来ますし、

    ES6では
    class Human {
    constructor(name) { this.name = name }
    hello() {alert(‘こんにちは\nby ‘+this.name) }
    }
    var mike = new Human(‘mike’)
    だとか

    var Proto = {
    new() {return Object.create(this)}
    }
    としておいて
    var Human = {
    __proto__: Proto,
    new (name) {
    Object.assign(super.new(), {name})
    },
    hello() {
    alert(‘こんにちは\nby ‘+this.name)
    }
    }
    var mike = Human.new(‘mike’)
    のようにすることもできます。

    最後ほどよりJavaScriptらしい(プロトタイプらしい)です。

コメントを残す

メールアドレスが公開されることはありません。