知者不言
(1) pi
(2) >
(3) 電卓
(4) 文関数
(5) VB
(6) parameter
 
(7)  abs(x-y) < 1.0e-5
(8)  0
(9)  コメント
(10) go to
(11) 日本人向け
(12) if
(13) A4 landscape
(14) 英語
(15) frame
(16) Lisp
(17) Get

(18) Beep
(1) pi
    Fortran, Basic には pi を返す標準組込関数がない. 多分, それに代わる 
  関数があるので敢えて組み込まなかったのであろう.

    pi = 2.0 * acos(0.0) ! or = 4.0 * atan(1.0), in Fortran
    pi = 4# * atn(1#) '* in Basic

    それとも, 東洋の島国の愚民の将来を思ってくれたのであろうか.
  pi = 3 となれば, クヌース先生はどうするのであろうか.

    integer, public, parameter :: pi = 3
 
(2) >
    ここ数年来, 比較演算子 > を使わないように心がけている.

    if (MaxTemperature < DesignTemperature) then
  ! if (DesignTemperature > MaxTemperature) then

    if (.not. DesignTemperature < MaxTemperature) then
  ! if (.not. MaxTemperature > DesignTemperature) then

    慣れるとコードを読まなくてすむように思える. 比較演算子は < か > の
  どちらか一方だけあれば困らない.

    また, 等値比較では定数を先に置くようにしている.

    if (10 == EntryNo) then
  ! if (EntryNo == 10) then
 
(3) 電卓
    そう遠くない昔, "パイは 3.141592654 とする." の一文を計算書に明記し
  なければならないことがあった. それを提出する公の機関からのお達しとの
  ことだった. "どこのメーカーの型番何の電卓で計算しろ" とのお達しはな
  いのですかと聞き返したが, 回答はあるはずもない.

      Public Const Pi As Double = 3.141592654 '* in ?

    電卓の計算結果とプログラムの計算結果が微妙に違うぞ.
  ピタゴラスさん 7 桁の電卓を作って下さい. 必ず 1 個は買います.
 
(4) 文関数
    Fortran といえば 90/95, Basic といえば VB を指すようだ. それに伴い
  文関数なるものも使わなくなった. N88 Basic が Basic であった頃, またこ
  の頃構造化プログラミングが声高に叫ばれたように思う. その頃次のコード
  を見た.

    DEF FN MAX(X,Y) = -1 * X * (X > Y) -1 * Y * (X < Y)

    昔の人はよく考えたものだ (顔文字省略).
 
(5)  VB
    VB (Visual Basic) に足を向けて寝たいが現実が許してくれない. どこか
  に書いてあるのだろうが度々実験してしまう. Fortran と同じだと覚えてい
  ても実験してしまう.

    (a) For ループを抜ける時のカウンタ変数は何だっけ --- 常人の考える値
    (b) if 文でショート サーキットしたっけ --- しない
    (c) 多次元配列は列優先だっけ --- 列優先

    ランゲージ リファレンスのなんとぶあついこと.
 
(6) parameter
    Fortran 77 では parameter は副プログラム単位に有効範囲が限られていた.
  教科書の小プログラムで見ることがあっても, ほかで見たことは殆どない.
  Fotran 90 でモジュールが導入され, parameter 文は実用の意味を持つよう
  になった.

    "Programmar's Guide to F" [1] という Fortran 95 のサブ セット言語の
  教科書がある. 邦書では見かけない類の本である. parameter の重要性につ
  いてジョークで以下の様に説明している. プログラム parameter_example で
  number_of_states = 50 と parameter 宣言した例を示し,

    For example, if Puerto Rico becomes the 51st state, the program
    parameter_example can be corrected easily.

    やっぱりなと思うのは考え過ぎか. USA, MS の底流が垣間見える.
    --- on May/07/2003

(7) abs(x-y) < 1.0e-5
    "Programmar's Guide to F" で出色なのは, 7 頁, 1.2.5 比較演算子の項に
  abs(x - y) < 1.0e-5 を示していることだ. いうまでもなく, if (x == y)
  then はだめだよ, if (abs(x - y) < 1.0e-5) then にしなさいといっている
  のである.
    実数を日々扱うものには常識ではあるが, こんなに早い段階で説明した本に
  出会ったことはない. そもそも例を示した本が日本にあっただろうか.

(8) 0
    ブランク (' ') は 0 と考えてしまう. Fortran ではファイルを読む時に
  デフォルトで blank='zero' となるため, ブランク値は 0 と解釈してくれる.
  これに慣れているためかもしれない. これが常人の感覚だと思う.
    それとも, 文字列を整数に転換する関数 atoi があるとして,

    charge = atoi('') ! 料金はただ, (但し, Fortran 90 以降)
    charge = atoi(' ') ! 料金は任意又は規定料金

    が正常な考えであろうか. VB のように空白, ヌル文字は数字でないと考
  えればよいのだろうけれど.
 
 
(9) コメント
    "一にコメント, 二にもコメント" の対に "無意味なコメントはつけるな."
  がある. 識別子の長さの制限が実用上ない現在, 変数のコメントは必要か.

      integer :: i ! index
      real :: DesignTemperature ! self-explaining, deg. C
      real :: ID ! of cylinder, mm

    学校の教科書も安易な方に流れているときく. 新プログラミング__法を待
  とう.

 
(10) go to
    構造化の流れの中で, 古語にも構造化 go to 文が加わった. "go to less"
  プログラミングは死語となったのであろうか. "go to LABLE less" にはなっ
  た. 具の無いイカスミ スパゲッティ プログラムが書けるようになった.

      If error Then
          Exit Sub '* structured go to ?, "return" in Fortran/C
       '* GoTo exit_sub, non-conditional go to
      End If

      exit_sub: '* LABEL

    言葉の言い換えやすり替えの好きな, 構造改革を叫んでいる民の国はどこへ
  go to するのだろうか. LABLE があるべきではないか.

 
(11) 日本人向け
    Fortran では空白は区切り子 (Delimiter) でないはずだ. 次の様に書き  
  たい. --- が大抵の場合コンパイラに叱られる. 誰だ Ratfor 化したのは.

      e = 2.7182818284 5904523536 0287471352 6624977572

    Fortran には予約語がない.

      DoWhile(Do<2000.0) ! Rear Do is outside diameter

    日本人にぴったりの言語じゃないか.
 
(12) if
    if 文ではありそうな条件から引っかけていくべきか, それともなさそうな
  条件から引っかけていくべきか.

      if Today = Weekday then begin {Recomended by major books probably}
        DoWork()
      end else begin
        TakeDayOff()
      end;

      if Today = Sunday then begin
        DoWork() {I am a hard worker}
      end else begin
        DoWork()
      end

    捻くれものは "読み難さは, 注意を喚起する." とでも弁解するのであろう.
 
(13) A4 landscape
    VB のプログラマはプリンタの用紙設定を A4 横置きにしているのだろうか.
  IDE のエディタは色々とお節介をやいてくれる. ついでに 1 行 80 文字辺り
  で自動的に継続行として欲しい. プログラマは物理的視野が広くないと勤ま
  らないのだろうか.
    さらに, "*" と "/" の前後に空白を入れないオプションを追加して欲しい.
  米国では通常の文書でも空白を入れるのだろうか.

      y = a*x^2 + b*x + c '* y = a * x ^ 2 + b * x + c

 
(14) 英語
    プログラムを英語読みする必要はない.

    if (10 < entry) then または do while (10 < entry) を読むとき, 多分
  プログラマは "10 < entry" しか読んでいないと思う. if は mosi でも ?
  でも他と区別できる記号で良かったはずだ. このような記号は 1006 もない.

(15) frame
    今でも小学校では作文, 習字の時間に枠の中に文字を収めるように指導して
  いるのだろうか. 原稿用紙, 役所への届け出用紙, 全て枠だらけだ. 枠だら
  けの文書になれているので, "えくせる" が好まれるのかもしれない.
    "わーど", "びじお" の代わりに "えくせる" を使い, "えくせる" を使えな
  いと日本人にあらずの時代がくるのかもしれない.
    いまだに, 句読点も同じ一ますの美意識だけは受け入れ難い.
 
(16) Lisp
    時をあけず Fortran 77, 95, V.B, Pascal, Lisp でコーディングする日が
  ある. 夜遅くともなるとコンパイラに悪態を吐く. Lisp と揶揄されようが
  腱鞘炎を恐れず括弧を使おう.

    負の定数は必ず;
      y = ((-1.0) ** i) * ...

    論理式は;
      if (0 <> i) and (0 == j) then begin {Scolded}

    Wirth さん, 配列の添え字はやはり [] です. ところで, 冗長な括弧は何
  重まで許されるのだろうか.

 
(17) Get
    "Get, Get" と喚く人気者がいるそうだ. 次は "Set, Set" と叫ぶのだろか
  それとも "Temp, Temp" で end.
    プログラマは常に "Get, Get" と呟いている. プロシージャの名前の先頭
  は動詞とすべきだが, Get ばかりだとうんざりしてくる. プレフィックスだ.
  Get して Set して Check して Do して Put しているだけだからいかんと
  もしがたいのかもしれない.

  
(18) Beep
    久しぶりに "Beep" をコードに埋め込んだ. コンパイラにビー, ビー言わ
  れるが嫌だそうで, スピーカの音量を 0 にする若者と一緒に仕事をしたこと
  がある. コードには "Beep" とあるのに不思議に思い聞いて判った. コン
  パイラ オプションを見ると予想通り, これも文句の言いようがなかった.
    口うるさいオヤジが煙たがられるように, うるさい箱も嫌われるのかも知れ
  ない. "MsgBoxWithVoice" がない理由の一つかもしれない.

  
(C) Copyright 2003, N.T., All Right Reserved.