Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

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

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

headers // => どうなる?

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

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

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

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

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

なんという罠 :scream:

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

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

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした