2020/04/12 今日したこと

JavaScript の変数スコープ#

すごく基本的なことだが、変数のスコープが「これちゃんと反応するよな…?」と不安になったのでメモ。

function hoge() {
  let foo = { b: 2 };
  let bar = "";
  Object.keys(foo).forEach((key) => {
    bar = foo[key];
    return;
  });
  console.log(bar);
}
hoge(); // => 2

この結果は '' ではなくちゃんと 2 になる。Python31 だと nonlocal キーワードとかを使って外の変数使いまっせと宣言しなければならない。

あと Object.keys(foo).forEach(() => {}) はあくまで forEach の中でどのような操作を実行するかなので、 returnhoge の返り値ではなく forEach の返り値である。当たり前なんだけど、そういう当たり前のことでこんがらがる。

#

最近書く Python コードに型を書いたり書かなかったりしている。あんまり mypy とか使って頑張ろうという気にはなってない。

漸進的型付けというのは TypeScript が有効なアプローチだとその身をもって示し続けている…らしいのと、単純に自分のコードへのコメント代わりになるので書いたほうがいいとは思っている。ただ書いたところでどうせ静的解析しないなら書かなくてもよくない?という気持ちもある。よく間違ったまま放置しちゃうし。間違ったコメントはコメントがないより有害だっていうのは古くから知られている話だし。

今の所 Pyright がなんかうるさいなーと思ったら頑張る、程度のことしかやっていないが果たしてそんなんでいいのか、と思いながらもやっている。

cherry-pick を一気にやる#

自分が作業していたブランチが古すぎて、origin/master をマージしたら GitHub の PR 上で差分がえらいことになって、とても読めたものじゃなくなってしまった。というわけで自分のしたコミットを cherry-pick して feature ブランチを master から生やし直そうと思った。

こういう作業をするときの鉄則は、元となるブランチは消さないまま作業すること。消さなければ何度でもやり直せる2ので。

やり方、といっても、コツは git log にオプションつけるだけ。

$ git log --author 515hikaru --oneline

これで自分のしたコミットがずらっと出てくる。あとはまぁ、

$ git log --author 515hikaru --oneline | awk '{print $1}' | head -n ${必要な分} | tac | pbcopy

とかすると、必要なコミットハッシュの一覧が取れると思う。あとは master ブランチから生やし直した feature に移動して、

$ pbpaste | xargs -n 1 git cherry-pick

とかやれば OK だと思う。いや、今日の自分は一回コピペして hash.txt なるファイルを作ってからやったからここまで標準入出力オンリーでやってないけど w

とはいえまぁ、何も難しいことはしていない。


  1. わたしが Python と書いた時は 9 割 5 分くらいの確率で Python3 のことを指している。 ↩︎

  2. 消してもやり直せるらしいけど、要らない冷や汗はかきたくない。 ↩︎