トップ «前の日記(2005-10-26) 最新 次の日記(2005-10-28)» 編集

日々の破片

著作一覧

2005-10-27

_ ぎろちょんが家にやって来た

ピカピカのぎろちょん (fukkan.com)(佐野 美津男)

復刊ドットコムで投票してから1年半くらい。復刊して手元にやって来た。

カラーのページとか見てると、確かにこれだという感触を得る。

で、巻末を眺めると赤木かん子か、なんかいつもこの人が出てくるな。

それはそれとして、ぱらぱら眺めて、最後を確認して(なるほど)、で子供に渡す。

これ中学年向けくらいな感じだ。あっと言う間に読み終えてぴろぴろって何だとかふざけたことを訊くから自分で考えろ、と応える。

でも、多分、子供にはわからないはずだ。まさに大人の世界(といっても上部構造のほう)がぴろぴろ。確か僕も読んだとき、結局わからなかったが(でも、僕のほうが有利なのは、明治公園から催涙ガスの煙がもくもくやって来たり、剥がされた敷石を見たり―でアスファルトに変わったり、駅の線路に降りて石を拾い集める連中を見たり、という光景をオーバーラップできたからだが)なんとなくぴろぴろ。結局ぴろぴろはぴろぴろだったかも知れないけど。

で、謎は謎としてひっかかっていればそのうち思い出して、そう言えばぴろぴろとかぎろちょんとか出てくる不思議な雰囲気の挿絵の妙な本を子供の頃に読んだなと思えればそれで良いのだ。

_ 日本語で書くプログラム

福盛さんが、XMLのアフォーダンスから発展させて、プログラムに日本語を混ぜることについて考察されている。

僕については、(面倒だからJavaに絞るけど)、それもありだろうな、と考えているけれど、自分で積極的に使う気にはなれないのは、IMEのON/OFFがどう考えてもわずらわしいからだ。全角英数ってやつの間延びっぷりも大嫌いだし。

でも、その間延びっぷりさえ克服し、コンパイラ(の前に言語仕様)が、ちょっとがんばればそれでいいじゃん、と思わないでもない。

public class Zen {
    public static void main(String[] args) {
        int 数値 = Integer.parseInt("12345");
        System.out.println(数値);   // 12345と表示
        System.out.println(Character.isWhitespace(' ')); // 真
                    // コンパイルエラー(不正な文字)全角空白がある
        数値 = 12345;          // コンバイルエラー(不正な文字)
        System.out.println(数値);
        数値 = Integer.parseInt("百二十一"); // NumberFormatException
        System.out.println(数値);
    }
}

実際のところ、もうちょっとなのだ。

  • シンボルについてはすでにOK
  • 直定数はそのロケールで数値として通れば認めるように変更(int 数値 = 12345;を通すようにする)
  • 空白はそのロケールで空白ならOK(早い話が全角空白のようにCharacter.isWhitespaceが真なら空白とみなす。これ相当救われる人がいるような気がする)
  • 百二十一はちょっと微妙だけど、カンマ区切り数字のようなもので、数値の表示用の文字列表現だから、直接は数値として扱うことはできないで良いかも
  • 演算子についてもエイリアスを認める。&と&は同じとみなすということ。

あと、メソッド/クラス名/パッケージにエイリアスを認める。全角/半角だけではなく、シンボルをアサインするようにするということ。

公開 クラス ほげ {
 公開 静的 void メイン(文字列配列 引数) {
  整数 数値 = Integer.整数としてパース(”12345”);
  //みたいな感じ。

publicのエイリアスとしてpublicと公開が使える。staticのエイリアスとしてstaticと静的、voidのエイリアスはvoidだけ。ということだな。Integerのエイリアスはこれを見る限りIntegerだけではなく『整数クラス』みたいなのが必要かも。というか、やっぱり全角英数は気持ち悪いが。

しかし、次のようなプログラムを書くやつはやっぱりいるだろうな、という気もするのであった。

public クラス くらす {
 public void 行進(レコード れこーど) {
  整数 テンポ = れこーど.今の客数 + れこーど.昨日のお客様の数;
  れこーど.書く;
  if (れこーど.書けた == 真) {
    _れこーど.書き込み;
  }
  for (整数 い = 0; ……

「行進」じゃなくて「更新」だろ? っていうか、クラス名「レコード」ってなんのことだ? 「テンポ」って……、「客数」と「お客様の数」って、なぜ同じ概念に異なる名前を付けるのか、と小一時間。「書く」と「書き込み」って、これ英語だとwrite()とwriteRecord()みたく、やはり同一の意味に異なる名前ってことか……、っていうか_を付けるなよ。「い」。

ちなみに、エイリアスから英語への変換はjavatというコマンドによって実行できる。この時、ユーザー定義シンボルの変換表を用意しておくと、それについても変換がかかるので、上のプログラムをjavatすると次のソースが得られる。

public class klass {
  public void update(Record record) {
    int tmp = record.currentCustomerCount + record.kinouNoOkyakusamaNoCounte;
    record.write();
    if (record.isWritten() == true) { // == trueは冗長だな
      _record.write();                // やっぱり同じだったか
    }
    for (int i = 0; ...

変数は「い」「ろ」「は」かそれとも「い」「じぇー」「けー」なのか、「れく」とか「くんと」とか「ありー」とかが出てくるんじゃなかろうかとか(本当の判じ物化だな)いろいろ良からぬ想像がされるのであった。

まじめな追記:変数や属性名に日本語は使えるけれど、クラス名やパッケージ名に日本語を使うと、フィイル名(ディレクトリ名)で悲しいことが起きるかも知れないので注意が必要です。

本日のツッコミ(全4件) [ツッコミを入れる]
_ Kazz (2005-10-27 14:02)

"テンポ"は激しく笑いました。<br>仮に実現可能だったとしてもコードレビューは気が狂いそうです。内容は別にしても上の例のjavatした結果がなんと見やすいことか。

_ arton (2005-10-27 14:15)

あ、でもダメな書き方は問題にならないけど、福盛さんがかかれているような例であれば、圧倒的に読みやすい/理解しやすいと思います。<br>BigDecimal 売上金額=商品.外税額*(1+税金情報.消費税率);<br>とか。微妙かな?

_ Kazz (2005-10-27 14:58)

>BigDecimal 売上金額=商品.外税額*(1+税金情報.消費税率); <br><br>これ位確かに書かれていれば可読性にも優れますね。ローカルスコープに限ってであれば充分に実用的かと。変数のスコープとか、文脈が絡んでくるととたんに厳しくなりそうですけど。<br>昔々、汎用機の仕事をしていた頃に日本語COBOLで書かれた卸売り市場システムのソースを見る機会がありましたが、本当に"イカ"とか"スイカ"等の名前の変数が書いてあって、笑い転げた記憶があります。

_ arton (2005-10-27 17:22)

イカとかスイカ……確かに可笑しい。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え