Bikeshed.js - connpassに参加したメモ


『let vs. const』 @yosuke_furukawa

  • Effective Java
  • 気持ちはImmutable
  • スレッドがないJavaScriptだと微妙
  • const だけで防げるのか
    • const + Object.freeze
    • Map+SetとかもImmutableではないのでimmutable.jsなどを使う必要がある
  • やる意味
    • prefer-const
    • let使うときはforでぶん回す時ぐらい
    • 逆にletつかているところを見ると注意して見るようになった
    • やりたいことはconst 強制 => 初学者のミスを減らせる
  • 基本的には const を使う

セミコロン付けるつけない - @yoshiko_pg

  • 付ける人が殆ど

Bikeshed.jsのボードを見ながら自転車置場の議論をした。

インデントとか改行位置とかスタイルの話が殆どだった。

自分は設計においてこういうどっちでもいいような議論が多くあると思ってるので、JavaScriptとCSSの設計についてのスライドを用意したけど使わなかったので忘れる。


power-assertがツールになった話 - twada

のissueでは、

const assert = require("assert");
export function hello(name) {
    assert(typeof name === "string");
    return "Hello " + name;
}

のようなコードをプロダクション側(テストではない)に書いてた時に、assert()の中身がpower-assert化(位置情報などを含んだオブジェクトを返す)されてしまい、常にassert(object)をパスしてしまうという問題。

これは、次のようにpower-assertが使われていれば解決すること。

const assert = require("power-assert");
export function hello(name) {
    assert(typeof name === "string");
    return "Hello " + name;
}

そのため、require("assert") を require("power-assert") するものが同時に行われればいいということで、babel-plugin-empower-assertというプラグインができた。

しかし、このプラグインはあくまでオプトインなので、既存のbabel-plugin-espowerだけを使ってる人は自分で以下のように追加する必要がある。

{
  "presets": [
  ],
  "env": {
    "development": {
      "plugins": [
        "babel-plugin-empower-assert",
        "babel-plugin-espower"
      ]
    }
  }
}

毎回2つのプラグインをいれるのは面倒だということで、babel-preset-power-assertという2つのプラグインをまとめたpresetsが追加された。

これにより、require("power-assert")ではなく、ただのrequire("assert")もpower-assert化された状態でassertionが行えるようになった。

{
  "env": {
    "development": {
      "presets": [
        "babel-preset-power-assert"
      ]
    }
  }
}

コード上からはNode.jsのassertモジュールに見えるけど、Babelによってpower-assertモジュールに差し替えられるため、power-assertはライブラリではなくツールになったという話。


おわり