悩ましい識別子の命名

プログラミング言語というと、誰もが気軽に、プログラムの中からユーティリティ機能を呼び出せるようにしないと、不便ということになっています。たとえば文字列の一部を切り取るとか、値を四捨五入するとか、文字列を整形するとかいったように、大域的な目的に依らず、汎用的に役立ちそうな機能です。

こうやってスクリプト言語云々を作っていると、その呼び出しの名前に悩むわけです。古今東西、腐るほどプログラミング言語と呼ばれる存在はありますけれども、標準装備のユーティリティ機能はだいたい似たり寄ったりでして、その割に、それぞれで使われている機能名には、だいぶばらつきがありまして。

たとえば文字列の長さを調べる機能ひとつとっても、size,count,lengthの三つが一瞬にして思い浮かびます。いったいどれを採用したらいいものやら。

それに、DesigeonはいまだシフトJISでやっているので、半角文字と全角文字のデータサイズが違うという問題もあります。文字の表示に固定ピッチフォントを使っていると、これが便利なこともありますが、可変ピッチフォントでは文字のバイトサイズにほとんど意味がない。純粋な文字数はカウントできるようにすべきだろうね。

こんな風に、ちっこい世界のスクリプト言語に見えても、考えることが多そうで、かゆいところに手が届くようになるにはかなり時間がかかりそうです。


いま作っている奴は、手続き型言語のくせにクラスベースで動いているので、stringクラスとかdoubleクラスとかにユーティリティ機能を搭載することに。

大丈夫かなあこれ。見た目はスマートっぽいんだけどなあ。行頭命令だけでやる方がいいのかもしれない……、と悩みつつ、今回は過去をベースに作っているので、妥協しているところもあって。

#MsgBox "長さは" + ( 123 + 456 ).string().length() + "文字です!"

(Desigeon向けに、関数呼び出しのカッコは外せるようにしようと思っています。ということで、255.string.lengthとやると3が返ります)

いや、これって妥協なんだろうか。これを単純命令に分割するのは、慣れた人にとってはむしろ扱いにくい。上の場合だと、足し算と、文字列化と、長さを取得するのと、文字列を連結するのと、メッセージを表示する、の5ステップ以上が必要になります。かといって、メソッドだとかメンバだとかを、プログラミングと縁のない人に語っても説明が難しいし。


上の例のように、数値を文字列にする方法は「数値.string」ということになりそうだけど、C#の仕様をみたら、数値の文字列化はToString()という名前らしい。

ToString()は私、手元C++内のソースコードでは使ってるんですが、スクリプトだと大文字小文字を区別しないので、tostring()とかやられたら悲しいです。なんかマヌケじゃないですか。だって「トースト・リング」ですよ日本人的に。良くても朝食のパンか映画扱い、悪けりゃ東スポになる。だからToString()は避けたんですが、どうしようかなあ。

だってC言語のtoupper()だって私、初めて見たときは、スターウォーズのトルーパーかと思いましたよ。toupper()と一緒にtolower()が目に飛び込んでくることが多いから、ごちゃ混ぜになってトルーパー。文字を大文字にするんだからbigchar()あたりを期待していました。なのにトルーパーって。やっぱりハリウッドなんですよねぇUSAって。

C#の文字列の切り出しはSubString()だけど、VB互換の命名クラスが用意されていて、Left(),Right(),Mid()もあるらしいです。JavaScriptでもそうだけど、まずSubString()って命名がねぇ。ストリングのサブだそうですよ。主役じゃないってことです。じゃあ文字列からゴミを切り落として、主役を抽出するときはどうするんですか。SubString()じゃなくてMainString()にしたくなりませんか。

あと、C++STLのstringクラスは、文字を数えるのにsize()とlength()の二つがある。sizeというと座椅子やサイゼリヤと間違えますし、なにより女性にとって触れたくない言葉かもしれません。だから普通はlength()を使いますね。ただ、こちらは男性が神経過敏になるというご意見も。難しいなあ。

なるほど、二つ採用してしまう手もあるか。思い切ってstring型をやめて、moziretsuクラスにして、文字を数えるときはmoziretsu.kazoeru()ってのはどうですかね。標準ライブラリのkazoeruメソッド。もう一つ用意してnagasa()。すいませんウソです。