hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

encode_jsonとdecode_json、どっちがどっちか覚えられないので、VSCodeのsnippetにjson_stringifyとjson_parseとして登録してしまう

encodeとdecode、どっちがどっち?

普段Perlを書いていて、JSON::XSのencode_jsonとdecode_jsonをよく使うのですが、encodeとdecode、どっちがどっちだっけ?と分からなくなります。
落ち着いて考えると、JSONにencodeするのがencode_json、JSONをdecodeするのがdecode_jsonに決まっているのですが、そうは言ってもよく分からなくなるので、たぶん、右と左、どっちがどっち?となる人もこんな気持ちなのだと思います。

JSON.stringifyとJSON.parseなら覚えやすい気がする

一方で、JavaScriptを書いているときに使うのがJSON.stringifyJSON.parseで、これは混乱したことがなくて、良い名前だと思います。
これがもし、Perlでもjson_stringifyとjson_parseで書けたら覚えやすいと思うのですが…でも個人の主観なので、JSON::XS::MyAliasみたいなパッケージを作って、勝手に使い始める、というのも困ったものです。
あなたはjson_stringifyがいいとして、私はjson_loadとjson_dumpが良いんだけど?とか、自転車置き場の議論が始まりそう。

覚えられないなら、VSCodeのsnippetで好きな名前で登録してしまおう

キーワードが何なら覚えてられるか、というのは個人の好みによるものでもあるので、思い出すためのキーワードを登録して、それをエディタに入力するだけで、これですよね?って補完してくれると便利そうです。
VSCodeのsnippet機能を使って、json_stringifyでencode_json、json_parseでdecode_jsonをそれぞれ出力できるようにしてしまいます。
Configure User Snippetsから、こういうスニペットを設定します。キーワードとしてjson_stringifyを入力するとencode_json();を出力する、という設定です。

{
  "json_stringify": {
    "prefix": "json_stringify",
    "body": [
      "encode_json($1);"
    ],
    "description": "Converts the given Perl data structure to a UTF-8 encoded, binary string (that is, the string contains octets only)."
  },
  "json_parse": {
    "prefix": "json_parse",
    "body": [
      "decode_json($1);"
    ],
    "description": "expects a UTF-8 (binary) string and tries to parse that as a UTF-8 encoded JSON text, returning the resulting reference."
  }
}


これで無事、json_stringifyと入力するとencode_json、json_parseと入力するとdecode_jsonが出力されるようになりました。

json_stringifyのスニペットを選択すると、encode_jsonが入力される


普通はforって入れるとforeachの雛形が出るとか、入力した文字列の拡大版が出力されることが多いと思うのですが、入力値とぜんぜん違う文字が出力されるのがおもしろポイントだと思います。
スニペットの確定後はencode_jsonだけが残るので、手元で変なスニペットを使っていることをチームメンバーに知らせず済み、人事評価のときにも、encode_jsonとdecode_jsonのどっちがどっちか覚えてない信用ならない人物、ということで評価を下げられずに済みそうです。


この記事はPerl Advent Calendar 2022の3日目でした。
まだまだ空いてる日に参加できるようなので、みなさん参加してください!