◆ シンプルな機能のほうが中で複雑な機能の方を呼び出して使ってたりする
◆ 実は速そうと思う機能のほうが遅かったりする

機能が似ている関数で動きを想像したらこっちのほうが余計なことしなくて速そうで 自分がほしい結果も得られるならそっちを使うことが多いと思います

例えば
  • 検索して以降の文字列を返すかその位置を返すか (PHP の strstr, strpos)
  • 検索して見つかったものを返すかその位置を返すか (JavaScript の find, findIndex)
  • 検索して見つかったかどうかを返すか見つかった位置を返すか (JavaScript の includes, indexOf)
  • 検索してマッチした情報を返すか見つかったかどうかを返すか (JavaScript の exec, test)

などなどたくさんあると思います

言語標準のものだと 出来る限り高速で動くよう機能がシンプルなものほど内部でも余計なことをしないようになっていて実行速度が速いと思います
(計測はしてませんけど

ただ その辺に落ちてるようなライブラリだとちょっとしたレベルの速度より作りやすさや見やすさなどを重視していることが多いのでそうとは限らないです
似たコードを複数書いておくと修正時に両方変えないとダメですし それを忘れると片方がおかしな動きになってしまいます
そういうのを防いで楽にするためにも 同じのはまとめてしまってることが多いです

でもそうなると 必要なデータはごく一部なのに とりあえず全部取得して必要な部分だけ抜き出して結果として返す という作りになります
共通の 「データを作る機能」を用意してそれぞれの関数はそれで得られたデータから必要な部分だけ返すというシンプルな作りでよくなりますからね

上で上げた例を使うと
「includes は indexOf の結果が 0 以上かを確認する実装」
「test は exec の結果が null でないことを確認する実装」
みたいなものです
これらが実際にはどうかは知らないのであくまで例です
ただ それでも自分でこれらの機能を作るとしたら それぞれに対してそのメソッドには余分な機能を除いて検索処理のところからつくる なんてことはしないで一方がもう一方を呼び出してその結果からメソッドの結果を作る人が多いかと思います

すべてがこうとは言えませんがそうなってるのは比較的多いと思います
この記事を書くキッカケになったのも自分で作ったコードがそうなっていて 見直してたらすごくちょっとした機能なのにデータ取り出すためになくても良い処理を色々してるなぁと思ったからです
他でよく使われる部分でちょっとでも速くしたくて そこだけ独自に作ったら同じようなのができて何とも言えない気分でした

外から機能見たときに一番重そうって思うメソッドを実は他のほぼ全部のメソッドが内部で呼び出してたりするのですからね
それどころか その重いメソッドの結果を各メソッドの返り値に合わせて整形するので 実は一番重そうなメソッドが最も処理が少なかったりもします

どうするのがベストなんでしょうね
多少ムダがあっても実用に難がなければ気にしない みたいな考え方もありますが 「軽いはずの機能のほうが重いはずの機能より重い」とまでなってしまうと気にせずにはいられないです