4

ROT13を計算するこの関数があります。

string function rot13(required string inString) output="false"  {

  var j = 0;
  var k = 0;
  var out = "";
  for (var i = 1; i <= Len(arguments.inString); i++){
    j = asc(Mid(arguments.inString, i, 1));
    if(j >= asc("A") && j <= asc("Z")) {
        j = ((j - 52) % 26) + asc("A");
    }
    else if(j >= asc("a") && j <= asc("z")) {
        j = ((j - 84) % 26) + asc("a");
    }

    out &= Chr(j);
  } // end for

  return out;
}

52、26、84 の 3 つのマジック ナンバーがあるように見えるのが気に入らない。asc("Z") - asc("A") + 1

しかし、52 と 84 が何を表しているのかわかりません。私は彼らに何と名前を付けるかわかりません。

4

1 に答える 1

5

マジック ナンバーと ASCII テーブルを見て、これを思いつきました。

26はアルファベットの文字数です。それがあなたの最初のマジックナンバーです。

asc('A')は 65 です。65 から 13 を引いたものが 52 で、2 つ目のマジック ナンバーです。

asc('a')97 です。97 から 13 を引くと 84 になり、3 番目のマジック ナンバーになります。

それを数字が表しています。変数に名前を付ける方法を決定できます。または、説明をコメントとして追加することもできます。

ここから編集開始

13 は回転しているキャラクターの数です。これもマジックナンバーです。これを引数にすることで関数を強化できるため、他の数値でも回転できます。

于 2018-12-14T04:17:40.157 に答える