定数定義

プログラムを書くときに、変数とか定数に適切な名前をつけることが良いことであることに異論のある人はあまりいないと思うけど、現実には結構ひどいのとよく遭遇する。

文字そのまま

final static String COMMA = “,”;

記号系に英語名つけて、グローバル定数クラスに定数定義。これよく見るんだけど、なんのためにやっているのか理解に苦しむ。これを書く人の大半は文字列をそのまま使うのはいけない、というルールを何も考えずに適用して責任逃れをしているにすぎないのではないか。「, 」をそのまま書くよりも明らかに長くてコード書きづらいし、名前みても追加情報が得られるわけでもなく、何も嬉しくない。

文字の説明ではなく意味の説明を

カンマとかはよくCSVのセパレータとして定義されているけど、それを定数定義するなら何の文字が入っているかではなく、何のための記号なのかを書くべきではないか。例えばFIELD_SEPARATORとか。java.io.Fileにもいい例があるでしょ、File.separator。(まぁあっちはまたプラットフォームによって値が変わるとかちょっと色合いが違うけど)。

中の文字ではなく何のための識別子なのか定義しておけば、後から仕様変更がきてセパレータがタブになったとしても、FIELD_SEPARATORの定義箇所だけ直せば済む(これが元々文字列を定数定義する意義だろう)。COMMAって名前にしちゃう人は、名前がCOMMAのままで内容がタブだと混乱するので、(中身だけ修正するというのは議論するまでもないので置いておいて)final static String TAB = “\t”;とかにRefactoringで名称変更するのだろうけど、それ自体無駄な作業だし、Refactoringが正しく実施できるのは、修正対象の最新ソースをすべてワークスペースに持っている前提だ。大規模プロジェクトで一部のコンポーネントのみ開発している人は全ソースを手元に持っていなかったりするから、Refactor漏れする可能性もある。Refactoringってみんなが思っているほど当てにならない。

それに、ソースコードのオーナーシップを変な風に適用して、自分の担当分のソース以外はチェックインしない、みたいな人も結構いる(これもひどい責任逃れだよね…)。それじゃあんたがチェックインしたところ以外が軒並みビルドエラーですがな。

定数定義のスコープ

変数とか定数には適用されるコンテキストとスコープがある。本来モジュール間の結合度を下げるためにあっちのクラスからもこっちのクラスからも参照されるものは極力減らすべきだけど、大規模と呼ばれる案件でトラブっているところに支援で入ると確実に遭遇するのが巨大な定数定義クラス。CommonConstとかConstantsとかSharedConstantsとか[プロジェクト名]Constとか。みんなが使いそうな定数を定義してあちらこちらに同じようなものが定義されているのを防いでいるのだろうけど、使い方が正しいかというとたぶん半分くらいは間違ってると思う。

たとえば先のCOMMA。これを全体で使う定数インターフェースに定義したとき、カンマを使う人はこの定数を参照するようにはするだろうけど、果たしてそのときにただの「カンマという文字の別名」として扱うのか、あるいは「外部連携ファイルのファイルセパレーター文字」として使うのか意識しているだろうか?ファイルセパレーターがかわったときにこの定数の値を変更したら、ただのカンマだと思って使っていた人のプログラムは軒並み壊れるよね。

だから定数なり変数なりを定義するときは、その値がどこまで見えていればよいのかをちゃんと考えるべきで、自分が定義したその値は他の人にとって混乱するものではないか、誤解されないか、そもそも他の人に見える必要があるのか、をグローバルなインターフェースに置く前に考えろという話である(そういうコードを平気で書く人たちはモジュールの設計してないだろ絶対、って思うわけで)。

要するに

最初に戻って結論はグローバルの定数クラスにCOMMAとか意味不明な変数・定数を定義するなバカモノ、ってことである。フツーのプログラマだったらそんなことわざわざ書くなよ、って思う訳なんだが、自分が参加するプロジェクトはこんなのばっか。悲しい。

Apple Keyboard I

それこそ星の数ほどあるキーボード。HHKとかRealForceとかはよく聞くけど、自分にとってのNo.1キーボードは、Apple Keyboard I。これは今使用しているもの。もともとカラクラIIをヤフオクで落札したときについてきたおまけなんだけど、前オーナーはほとんど使われていなかったのか、色やけの少ない、なかなかの美品。結局カラクラはディスクをフラッシュ化したりして遊んだ後は使ってなくて放置されているけど、おまけでついてきたに過ぎないこのキーボードにはホント毎日世話になってる。

keyboard00

そんなこだわりのKeyboard I、先日ヤフオクに箱入りの上物がでていたので、バックアップとして確保しておくことにした。どういうわけかもともと出荷数が少ないはずのGS Keyboardは割と頻繁に出品されるんだけど、Keyboard Iはなかなかきれいなのが出ない。ましてや、箱付きなんて。ヤフオクはずっと観察してるけど、箱入りがきたのは数年ぶりじゃないかな。

おそらく元々は白色の箱なんだけど、結構色がついている。なんだかんだいって1980年代の商品だもんね。およそ30年も前になるんだから、きれいに原形をとどめていること自体に拍手したい感じ。

keyboard01

通称はKeyboard Iだけど、正式名称はApple Keyboard。

keyboard08

Classicあたりから急に庶民に手の届くコンピューターとなったMac、それと時を同じくしてフニャペナキータッチの安っぽいApple Keyboard IIが出てきたので、便宜上Iと呼ばれているのだろう。ちなみにApple Keyboard IIは形こそGS keyboardを彷彿とさせるかわいいデザインだったけど、キータッチは同じメーカーの品とは思えない粗悪品だった。どこのメーカーもコストがかかってタイプ音がうるさいキーボードを低評価していた時代なんだろうな。

で、こちらが今回落札したもの。

keyboard04

並べてみると今回の品がどれだけきれいなのかがよくわかる。奥が現行、手前が今回入手したもの。写真の光の入り方の関係ももちろんあるけど、かなり白い。現行機もかなりきれいなんだけどやはり比較するとこうなるか。

keyboard05

Keyboard I、Extended Keyboard Iに共通するのがこの6色リンゴの位置。後期のKeyboard II系では上にロゴが入る。

keyboard09

CapsとControlがこの位置なのもこのキーボードの特徴。学校なんかでUNIXワークステーションを使っていた理系の人が好きなレイアウトかな。俺様は文系の安物PC育ちなので、この配列が実はあまり好きじゃない。

そんなのCaps Lockと入れ替えればいいじゃん、と思われるかもしれないがこの頃のAppleのキーボードはCapsが押し込まれてロックされるタイプのスイッチになっていて、使えないとまではいわないけど、リマップしても今まで以上に違和感の残る感じになってしまう。だから変な話だけど、人間の方がキーボードに合わせるようにしている。

そうそう、このキーボードでレイアウトについてもう一つ重要なのが、ファンクションキーがついていないということ。今のMac OS Xでは様々な機能がFunctionキーにマッピングされているので、結構不便。それでもまぁ、Functionキーがないとできないような操作は基本的にはないので、LaunchBarとかを駆使することで無理矢理対応する。漢字変換なんかはFunctionキーを使う作業の筆頭じゃないかと思うけど、これもCtrlキーのショートカットでやってる(これは、慣れてくるとこっちのがいいかも)。

その代わりでは絶対にないと思うんけど、Power Keyなるものがついている。この頃のMacはこのPower Keyを押すことで、Macの電源をKeyboardからONにすることができた。当時自分はAT互換機ユーザーだったのでこのどうでもいい機能にあこがれたものだ(ACPIがWindowsに来たときはこういうのが実現するのも時間の問題と思ったけど、全く来なかったな…)。

keyboard06

実はこのPower Key、電源は入れられないけど、落とす方は今のOS Xでも使える。このキーを押すと、リンゴメニューからShutdownを選んだ時と同じダイアログが表示される。まぁうれしいかっつーと微妙なんですが。

キーボードの接続インターフェースはADB(Apple Desktop Bus)。iMac以降ADBは廃止されているので、当然そのままでは今のMacにはつながらない。そこでADB-USB変換するためのデバイスであるiMate経由で接続する。iMateはブラウン管iMacが出た頃に、ソフトウェアのHWドングルなんかをつなぐのによく使われていた。iMateは10年以上前の品でもう遠い昔にディスコンだけど、なぜか今でもデッドストックがvintage computerとか秋葉館で買える.…と思ったら秋葉館は売り切れているな。iMateが普通に買えるのもそろそろ最後か。

keyboard07

この頃のキーボードらしく、横から見たキーの並びも緩やかな曲線で美しい。最近はノートパソコンみたいな薄っぺらくて平たいキーボードが主流になりつつあるけど、あれはなんか違う気がするんだよね…

写真をみればわかるけど、これ、かなり厚みがあるキーボードである。デスクに直接手を置くと高さが足りないし、手を浮かせてタイプするのは疲れるので何らかのパームレストが必須。HHK用と組み合わせることを想定して作られているというAssistonの木製パームレストが高さ的に最適、デザインもかなり素敵で、個人的にはものすごくおすすめしたい感じ。

palm

…なんだけど、これまたディスコンでもう入手できないんだよね。

受注生産とかで高くてもいいから、もう一回だけ作ってくれないかなぁ。Assistonで残っていた最後の1個を安く譲ってもらったけど、あまりにきれいなのでもったいなくて使えなくて。最初に買ったのはかなり汚れてしまっているので…せめて革の張り直しができればなぁ。

 

Apple Keyboard IってGS Keyboardほどには評価されていないように思うけど、すごくいいキーボードだと思う。テンキーはいらないとかFunctionキーがほしいとかバックスラッシュの位置が変とか、レイアウトについては不満がないわけでもないんだけど。

今回バックアップ機の入手でこれからも当面はこのキーボードでやっていけそうなのでうれしい反面、そろそろこれの代わりになるようなキーボードに登場してもらいたい気もするんだよね。キーボードって無線になるとかそういう進化はしたけど、キータッチ自体は低コスト化による退化の一途で、本当に残念な進化の仕方をしている。