getとfetchの違い:データの取得距離に着目した使い分け方法

Engineer

突然ですが、getとfetchの違いを意識したことはあるでしょうか?

先日、職場でgetとfetchってどう使い分けるのですか?という話題になったのですが、
自分は本当になんとなくで使っていました。
(なんとなくgetが多め。。w)

改めて調べてみるとデータを取ってくる先との距離が重要になるみたいなので、まとめてみたいと思います。

結論

fetch:nw経由など遠い距離にあるデータを取得する
get:比較的に近い距離にあるデータを取得する

そもそもの単語の意味を調べてみる

まずは単語の意味を調べてみます。
英語ではそれぞれどのような意味なのでしょう。

weblioで調べてみましょう。

get: 得る
出典: https://ejje.weblio.jp/content/get

fetch: 取ってくる
出典: https://ejje.weblio.jp/content/fetch

なるほど。

“取ってくる”の場合、少し歩いて取りに行く、どこかにあるものを自分で取りに行くというようなイメージですかね。
つまり、能動的に取りに行く。

一方、“得る”というのは、何かを手に入れるとかそういうイメージですかね。
受動的に取りに行く?

使い分け的には、自分から取りに行くか、データからくるかの違いになるのか?
あまりピンとこない。。。。

プログラミングの観点から見てみる

次にプログラミングの観点から、考えてみましょう。

get: すでに持っている内部データから取得する。
fetch: ここにはないものを外部から取ってくる。
出典: https://study-z.net/100245422/2

英語の意味の時に比べ、使い分けがわかってきたように思います。

確かにDBのデータを取得するときやnw経由でデータを取得するときは、fetchを使うイメージですね。
一方、設定ファイルから値を取得するときは、getを使うイメージです。

他の使用例でいうと、CPUの操作にfetchというものがあります。
このfetchは、"メモリ(RAM)からレジスタ(CPU内の高速メモリ)に命令を取ってくること"を指します。

おそらくCPUから見てメモリは遠い位置にあるため、
"外部から取ってくる"という意味でfetchを使うみたいですね。

他にfetchが使われるもので思い浮かぶのは、gitのfetchです。
このfetchは、リモートリポジトリにあるソースの情報を取得する時に使います。

つまりこのfetchも、ここにはないもの(ソース情報)を外部(リモートリポジトリ)に取りに行くので、fetchを使っていそうです。

ある程度見えてきましたね。

ある地点から見て内部もしくは近くにあるものを取得するときは、get
外部にあるものを取得するときは、fetch

という整理になりそうです。

ただし、何を近くとするのかは、文脈によって異なりそうなので、
プロジェクトなどで悩んだ場合は、チームメンバーに相談するのか良さそうです。

まとめ

近くのものはget、遠くのものはfetch。

どちらも取得するという意味では同じですが、データを取ってくる先が遠いか近いかで使い分けが変わってくるようです。

こういう今までなんとなく理解していたものを言語化しておくのは、理解をより深めるという意味で大切ですね。

それでは。

コメント

タイトルとURLをコピーしました