Angular4以降で導入された HttpHeaders
。
正直、これを使わなくても良い感じに HttpClient
は書けるので、使う必要のある場面は多くはない。
でも、公式っぽいから使いたいと思ってしまい、いつも罠にはまる
HttpHeaders
には、 set
, append
, delete
メソッドが存在する。
しかし、 HttpHeaders
は immutable
なので、奇妙な動きをする。
例えば下記のような記述をする
const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers.set('Accept', 'application/json');
headers // => どうなる?
一見なにも間違っていない。 headers
には、 Content-Type
と Accept
の両方のヘッダーが存在しているはずです。
普通なら。
しかし、上記コードでは HttpHeaders
は immutable
なので、変更されない。
なんと set
は 新しく HttpHeaders
を作って返す メソッドなのだ。
つまり、上記コードを正しく各なら下記のように書く必要がある
let headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers = headers.set('Accept', 'application/json');
headers // => どっちも設定される!
なんという罠
この問題、何が問題って set
という名前が、自分を変更しているように感じるのだ。
いわゆる 名前重要 ってやつです。
しかし、考えてみても良い名前が浮かばない。
Ruby
なら !
のあるなしで判断できるのだが、 JS では、どうしたら良いかわからない。(いや本当に Ruby
はよくできた言語です)
でもとにかく set
で自分を変更しないのは気持ち悪い。
非常に腹立たしいのだが、良い名前が思いつかない!!
良い名前があったら feature request
したいので、良さげな名前があれば教えてください