Удаление магического числа на ROT13 в ColdFusion

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

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам