Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rubyの技: 文字列操作で便利かつ高速なdelete_prefixとdelete_suffix(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

日本語タイトルは内容に即したものにしました。

Rubyの技: 文字列操作で便利かつ高速なdelete_prefixとdelete_suffix(翻訳)

私がRubyを書くのが好きな理由のひとつは、プログラマーが幸せになれるように最適化されているからです。Rubyコミュニティは非常に読みやすいコードを重視しています。

他のエコシステムから来たプログラマーは、Rubyがまるで疑似コードのように見えることにショックを受けることがよくあります。Ruby標準ライブラリやActive Supportのような拡張機能のおかげで、Rubyではコードを自然な方法で書けます。

その好例として、Stringクラスのdelete_prefixメソッドとdelete_suffixメソッドをご紹介します。

使い方

delete_prefixは文字どおり、文字列の冒頭からサブ文字列を削除できます。

"BoringRails!".delete_prefix("Boring")
#=> "Rails!"

"#programming".delete_prefix("#")
#=> "programming"

"ISBN: 9780091929787".delete_prefix("ISBN: ")
#=> "9780091929787"

"mailto:test@example.com".delete_prefix("mailto:")
#=> "test@example.com"

github_url = "https://github.com/rails/rails"
repo_name = github_url.delete_prefix("https://github.com/")
#=> "rails/rails"

gsubなどの既存のメソッドと比べてみましょう。

github_url = "https://github.com/rails/rails"
repo_name = github_url.gsub("https://github.com/", "")
#=> "rails/rails"

gsubは正規表現を受け取ることも複数箇所の置き換えもできる柔軟なメソッドですが、delete_prefixほど自然な書き方ではありません。しかも、delete_prefixgsubよりも高速なのです。

文字列の末尾からサブ文字列を削除したい場合の選択肢は、chompまたはdelete_suffixです。

"report.csv".chomp(".csv")
#=> "report"

"report.csv".delete_suffix(".csv")
#=> "report"

"150 cm".delete_suffix("cm").to_i
#=> 150

スタイル上の観点では、chompというメソッド名はRubyの中では少々毛色が違います1。一方delete_suffixというメソッド名はdelete_prefixと対になっていることがはっきりわかります。なお、chompdelete_suffixのパフォーマンスはsubよりも高速です。

参考資料

関連記事

https://techracho.bpsinc.jp/hachi8833/2021_04_22/107386


  1. 訳注: Perlには以前からchompメソッドがあり、RubyのchompはおそらくPerlの影響でこのメソッド名になったと思われます。参考: Ruby - chompって何かの略ですか?|teratail 

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。