Удаление магического числа на ROT13 в ColdFusion - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть эта функция, которая вычисляет 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;
}

Мне не нравится, что у нее 3 магических числа 52, 26 и 84. Я думаю, что 26 можно заменить на asc("Z") - asc("A") + 1

Но я не знаю, что представляют собой 52 и 84.Я не знаю, как бы я их назвал.

1 Ответ

0 голосов
/ 14 декабря 2018

Посмотрев на ваши магические числа и таблицу ASCII, я пришел к следующему.

26 - количество букв в алфавите.Это ваше первое магическое число.

asc('A') равно 65. 65 минус 13 равно 52, ваше второе магическое число.

asc('a') равно 97. 97 минус 13 равно 84, ваше третье волшебствочисло.

Вот что представляют цифры.Вы можете решить, как назвать ваши переменные.Кроме того, вы можете добавить объяснение в качестве комментария.

Редактирование начинается здесь

13 - количество вращающихся символов.Это тоже магическое число.Вы можете улучшить свою функцию, сделав этот аргумент аргументом, чтобы вы могли вращать и другие числа.

...