101010

プログラミング備忘録とともに、ポエムってます。

つまり、fetchとrequestはどう違うのか?(2/27追記)

f:id:araemonz:20190222215807p:plain

サーバーからデータを取得したい場合、世の中のプログラムサンプルをみるとfetchというメソッド名が多く使われている。

自分の中でfetchとrequestはどう違うのか曖昧だったのだが、この機会に調べていくうちにイメージが掴めてきたのでメモしておく。

意味

そもそもfetchとはどのような意味なのか、辞書を引くと次のようである。

fetch

[verb] to go and get from another place and bring back

Example

  1. Run and fetch the doctor!

  2. Could you fetch me a clean shirt from my bedroom?

  3. She fetched me a cup of tea.

このとおり何かを取りに行くという行為がfetchであることがわかる。fetchで画像検索すると犬がフリスビーを取りに行く画像がたくさん出てくる。

fetchとrequestの違い

f:id:araemonz:20190222215802p:plain

fetchの意味を理解すればrequestとは明確に違うことがわかるだろう。HTTP通信の場合に、上の図のようなイメージを描くと分かりやすいと思う。fetchというボタンを押すと、HTTP clientが起動してサーバーにrequestを投げるといったイメージだ。つまりこの場合のfetchメソッドは、requestより抽象度が高いレイヤーとなる。そして、このことはまさにカプセル化と同じことではないだろうか!?

命名と概念

命名が曖昧であるならばいくらデザインパターンを使ったところで、管理はラクにならないだろう。デザインパターンなど使わなくとも命名が適切であるならば、非常に読みやすいコードになるはずだ。

名前をつけるということは概念を表現することである。抽象的なモヤモヤしたものに名前をつけることで具象化するのだ。そして概念がはっきりしたファンクションであるならばきっと、簡単にプログラミングできることだろう。逆に概念がはっきりしていないファンクションは、あれこれ機能を足したりしてメンテナンスできないコードとなってしまうかもしれない。

これを機会にもうすこし命名規則にシビアになってみたいと思った。ちなみにfetchの反対に、データをサーバーへ送りたい場合ならsendが良さそうだ。

DRAGON BALLでも使われていた(2/27追記)

f:id:araemonz:20190227222245j:plain

ドラゴンボールの英語版を読んでいたらタイムリーにfetchを使った英文ができてたので紹介したい。悟空が界王星での修行を終えて長い道から戻り、神様が悟空を地上へ連れ戻すシーンでミスターポポが言うセリフだ。

Fetch him, my loard! Hurry!

本来つながりのない遠い場所から、つかんで取ってくるといったニュアンスが伝わってくる。Downloadするイメージと重なるだろう。

参考