8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AngularのHttpHeadersの罠。set, appendの新しい名前を考えたいだけの人生だった

Posted at

Angular4以降で導入された HttpHeaders 。
正直、これを使わなくても良い感じに HttpClient は書けるので、使う必要のある場面は多くはない。
でも、公式っぽいから使いたいと思ってしまい、いつも罠にはまる

HttpHeaders には、 set, append, delete メソッドが存在する。
しかし、 HttpHeadersimmutable なので、奇妙な動きをする。

例えば下記のような記述をする

.ts
const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers.set('Accept', 'application/json');

headers // => どうなる?

一見なにも間違っていない。 headers には、 Content-TypeAccept の両方のヘッダーが存在しているはずです。
普通なら。

しかし、上記コードでは HttpHeadersimmutable なので、変更されない。
なんと set新しく HttpHeaders を作って返す メソッドなのだ。

つまり、上記コードを正しく各なら下記のように書く必要がある

.ts
let headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers = headers.set('Accept', 'application/json');

headers // => どっちも設定される!

なんという罠 :scream:

この問題、何が問題って set という名前が、自分を変更しているように感じるのだ。

いわゆる 名前重要 ってやつです。

しかし、考えてみても良い名前が浮かばない。
Ruby なら ! のあるなしで判断できるのだが、 JS では、どうしたら良いかわからない。(いや本当に Ruby はよくできた言語です)
でもとにかく set で自分を変更しないのは気持ち悪い。

非常に腹立たしいのだが、良い名前が思いつかない!!

良い名前があったら feature request したいので、良さげな名前があれば教えてください :bow:

8
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?