JavaScriptで「キャピタライズ」を 実装してみる

iPride Co., Ltd.
iPride Co., Ltd.iPride Co., Ltd.
JavaScriptで
「キャピタライズ」を
実装してみる
執筆者:トビウオ
目次
• キャピタライズとは?
• 実装例①〜③
• 実装同士のパフォーマンス比較
• おまけ:Unicodeの範囲で考える
キャピタライズとは?
• 元々の単語を「lanGUage」とする
• LANGUAGE←全部大文字にする
• language←全部小文字にする
• Language←先頭だけ大文字にする 今回扱う
のはこれ
キャピタライズとは?
• JavaScriptで書くとこんな感じ
• この中で toCapitalize() を創りたい
実装例①
• すぐ思いつくだろう実装はこんな感じ
• 先頭の文字だけ切り取って大文字にする
• それ以外の文字列を切り取って小文字にする
実装例②
• 正規表現を使って先頭文字だけ置換する
• JavaScriptの正規表現で「w」は「[A-Za-z0-
9_]」と同じ意味
出典:https://www.samanthaming.com/pictorials/how-to-capitalize-a-string/
実装例③
• 「upper camel case」のように、複数単語のそれ
ぞれの先頭文字を大文字にしたい場合の例
どの実装がベターなのか?
• 実装例③は複数単語を含むテキストを扱う場合
に使う
• 実装例①と②は、①の方がずっと高速
• 実装例①は、String.prototypeから派生するより
、普通のfunctionにした方がずっと高速
どの実装がベターなのか?
出典:https://stackoverflow.com/questions/1026069/
• 実装1と実装3は無視で
きるほどの差
• 実装2は実装1より半分
ほど遅い
• 実装4は実装1の1/5ほ
どの速度しかない
おまけ:Unicodeの話をしよう
• 先ほどまでの実装で、「普通の英数字(ASCIIコー
ドの範囲内)」なら問題ない
• 「AbC」など、それ以外の文字の先頭も大
文字にしたい場合は話がややこしくなる
このスライド以降の出典:
https://stackoverflow.com/questions/1026069/
おまけ:Unicodeの話をしよう
• スプレッド記法を使うとUnicodeな文字でも1文字
づつにバラせる
• 頭の文字だけ toUpperCase() で大文字にする
おまけ:Unicodeの話をしよう
• 先ほどのだと、例えば1万文字ある文字列相手だと
非効率なため、先頭文字だけ切り出して頑張る手も
おまけ:Unicodeの話をしよう
• 実は同じ文字でも言語によって「大文字・小文字
」の変換結果が変わったりする
• 例えば「i」を、英語と考えて大文字にすると「I」
だが、トルコ語だと「İ」に変換される
おまけ:Unicodeの話をしよう
• なので言語指定できるように修正するとこうなる
1 de 14

Recomendados

C# コンパイラーの書き換え作業の話 por
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話信之 岩永
2.5K visualizações54 slides
TypeScriptをオススメする理由 por
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由Yusuke Naka
13.4K visualizações60 slides
ちゃんとWeb会議スライド『Coffee script』 por
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
1.9K visualizações30 slides
いろいろな言語で見る「0埋め」の実装方法 por
いろいろな言語で見る「0埋め」の実装方法いろいろな言語で見る「0埋め」の実装方法
いろいろな言語で見る「0埋め」の実装方法iPride Co., Ltd.
52 visualizações10 slides
第5回アドオンモジュールセミナー発表資料 por
第5回アドオンモジュールセミナー発表資料第5回アドオンモジュールセミナー発表資料
第5回アドオンモジュールセミナー発表資料oreno
192 visualizações19 slides
コンパイラ指向ReVIEW por
コンパイラ指向ReVIEWコンパイラ指向ReVIEW
コンパイラ指向ReVIEWMasahiro Wakame
2.3K visualizações28 slides

Mais conteúdo relacionado

Similar a JavaScriptで「キャピタライズ」を 実装してみる

最近の単体テスト por
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
15.6K visualizações73 slides
Getting start with knockout.js por
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.jsAkio Ishida
2.3K visualizações19 slides
第52回なんてかんたんなJavaEE por
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEEcivicpg
3.7K visualizações33 slides
Javaで1から10まで書いた話(sanitized) por
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
12.4K visualizações164 slides
Web制作勉強会 #2 por
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
614 visualizações26 slides
JavaScriptCore.framework の普通な使い方 #cocoa_kansai por
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
38.5K visualizações86 slides

Similar a JavaScriptで「キャピタライズ」を 実装してみる(20)

最近の単体テスト por Ken Morishita
最近の単体テスト最近の単体テスト
最近の単体テスト
Ken Morishita15.6K visualizações
Getting start with knockout.js por Akio Ishida
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.js
Akio Ishida2.3K visualizações
第52回なんてかんたんなJavaEE por civicpg
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE
civicpg3.7K visualizações
Javaで1から10まで書いた話(sanitized) por Tokuhiro Matsuno
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno12.4K visualizações
Web制作勉強会 #2 por Moto Yan
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan614 visualizações
JavaScriptCore.framework の普通な使い方 #cocoa_kansai por Tomohiro Kumagai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai38.5K visualizações
JavaScriptトレンド総括(2014) por Tetsuharu OHZEKI
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
Tetsuharu OHZEKI23.5K visualizações
JavaScriptトレンド総括(2014) por VOYAGE GROUP
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
VOYAGE GROUP1.5K visualizações
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1 por 耕平 谷口
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口2.2K visualizações
議論を描く技術「ファシリテーショングラフィック」 por nishikawa_makoto7
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto726.1K visualizações
⑮jQueryをおぼえよう!その1 por Nishida Kansuke
⑮jQueryをおぼえよう!その1⑮jQueryをおぼえよう!その1
⑮jQueryをおぼえよう!その1
Nishida Kansuke11.2K visualizações
Start!! Ruby por mitim
Start!! RubyStart!! Ruby
Start!! Ruby
mitim1.9K visualizações
LT#7 Hello coffeeしてきた por Shingo Inoue
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
Shingo Inoue3.8K visualizações
PHP フィールドインジェクションに挑戦する PHP勉強会2014 por Yuuki Takezawa
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Yuuki Takezawa1.4K visualizações
演習:プログラミング言語処理をやってみよう (ver.1.01) por Takashi Ishio
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)
Takashi Ishio939 visualizações
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践 por LINE Corporation
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
LINE Corporation4K visualizações
Javaに這いよる.NET por Hiroshi Maekawa
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
Hiroshi Maekawa1.2K visualizações
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1 por Shohei Okada
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Shohei Okada5.6K visualizações
古い?ダサい?まだまだイケルChef! por Naoto Ishizawa
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa792 visualizações

Mais de iPride Co., Ltd.

画像生成AIの問題点 por
画像生成AIの問題点画像生成AIの問題点
画像生成AIの問題点iPride Co., Ltd.
138 visualizações9 slides
AI入門 por
AI入門AI入門
AI入門iPride Co., Ltd.
192 visualizações99 slides
MVCになぞらえて理解するReact por
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReactiPride Co., Ltd.
220 visualizações19 slides
AIについて学んだこと ~ 生成AIとは? ~ por
AIについて学んだこと ~ 生成AIとは? ~AIについて学んだこと ~ 生成AIとは? ~
AIについて学んだこと ~ 生成AIとは? ~iPride Co., Ltd.
85 visualizações32 slides
OAuth2.0について por
OAuth2.0についてOAuth2.0について
OAuth2.0についてiPride Co., Ltd.
33 visualizações18 slides
ゼロトラストについて学んだこと por
ゼロトラストについて学んだことゼロトラストについて学んだこと
ゼロトラストについて学んだことiPride Co., Ltd.
23 visualizações23 slides

Mais de iPride Co., Ltd.(20)

画像生成AIの問題点 por iPride Co., Ltd.
画像生成AIの問題点画像生成AIの問題点
画像生成AIの問題点
iPride Co., Ltd.138 visualizações
AI入門 por iPride Co., Ltd.
AI入門AI入門
AI入門
iPride Co., Ltd.192 visualizações
MVCになぞらえて理解するReact por iPride Co., Ltd.
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReact
iPride Co., Ltd.220 visualizações
AIについて学んだこと ~ 生成AIとは? ~ por iPride Co., Ltd.
AIについて学んだこと ~ 生成AIとは? ~AIについて学んだこと ~ 生成AIとは? ~
AIについて学んだこと ~ 生成AIとは? ~
iPride Co., Ltd.85 visualizações
OAuth2.0について por iPride Co., Ltd.
OAuth2.0についてOAuth2.0について
OAuth2.0について
iPride Co., Ltd.33 visualizações
ゼロトラストについて学んだこと por iPride Co., Ltd.
ゼロトラストについて学んだことゼロトラストについて学んだこと
ゼロトラストについて学んだこと
iPride Co., Ltd.23 visualizações
Recoilライブラリを 触ってみる por iPride Co., Ltd.
Recoilライブラリを 触ってみるRecoilライブラリを 触ってみる
Recoilライブラリを 触ってみる
iPride Co., Ltd.27 visualizações
ReactでuseEffect()を減らしたい話 por iPride Co., Ltd.
ReactでuseEffect()を減らしたい話ReactでuseEffect()を減らしたい話
ReactでuseEffect()を減らしたい話
iPride Co., Ltd.83 visualizações
AIについて学んだこと ~ AIとは? ~ por iPride Co., Ltd.
AIについて学んだこと ~ AIとは? ~AIについて学んだこと ~ AIとは? ~
AIについて学んだこと ~ AIとは? ~
iPride Co., Ltd.21 visualizações
単一責任の原則について por iPride Co., Ltd.
単一責任の原則について単一責任の原則について
単一責任の原則について
iPride Co., Ltd.24 visualizações
オブジェクト指向 por iPride Co., Ltd.
オブジェクト指向オブジェクト指向
オブジェクト指向
iPride Co., Ltd.21 visualizações
Pythonで学ぶ数理計画法の初歩 por iPride Co., Ltd.
Pythonで学ぶ数理計画法の初歩Pythonで学ぶ数理計画法の初歩
Pythonで学ぶ数理計画法の初歩
iPride Co., Ltd.22 visualizações
OIDC(OpenID Connect)について解説③ por iPride Co., Ltd.
OIDC(OpenID Connect)について解説③OIDC(OpenID Connect)について解説③
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.33 visualizações
DrupalをDockerで起動してみる por iPride Co., Ltd.
DrupalをDockerで起動してみるDrupalをDockerで起動してみる
DrupalをDockerで起動してみる
iPride Co., Ltd.50 visualizações
HTTPの仕組みについて por iPride Co., Ltd.
HTTPの仕組みについてHTTPの仕組みについて
HTTPの仕組みについて
iPride Co., Ltd.29 visualizações
通信プロトコルについて por iPride Co., Ltd.
通信プロトコルについて通信プロトコルについて
通信プロトコルについて
iPride Co., Ltd.16 visualizações
OIDC(OpenID Connect)について解説① por iPride Co., Ltd.
OIDC(OpenID Connect)について解説①OIDC(OpenID Connect)について解説①
OIDC(OpenID Connect)について解説①
iPride Co., Ltd.49 visualizações
SpringBootにおけるテンプレートエンジンの活用 por iPride Co., Ltd.
SpringBootにおけるテンプレートエンジンの活用SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用
iPride Co., Ltd.174 visualizações
SpringBootの研修本で学んだこと por iPride Co., Ltd.
SpringBootの研修本で学んだことSpringBootの研修本で学んだこと
SpringBootの研修本で学んだこと
iPride Co., Ltd.50 visualizações

Último

定例会スライド_キャチs 公開用.pdf por
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
146 visualizações64 slides
光コラボは契約してはいけない por
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
28 visualizações17 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 por
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PC Cluster Consortium
28 visualizações36 slides
IPsec VPNとSSL-VPNの違い por
IPsec VPNとSSL-VPNの違いIPsec VPNとSSL-VPNの違い
IPsec VPNとSSL-VPNの違い富士通クラウドテクノロジーズ株式会社
606 visualizações8 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 por
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PC Cluster Consortium
66 visualizações12 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 por
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
109 visualizações26 slides

Último(7)

定例会スライド_キャチs 公開用.pdf por Keio Robotics Association
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association146 visualizações
光コラボは契約してはいけない por Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga28 visualizações
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 por PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium28 visualizações
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 por PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium66 visualizações
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 por Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 por Hitachi, Ltd. OSS Solution Center.
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可

JavaScriptで「キャピタライズ」を 実装してみる