Удаление магического числа на 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 - это количество символов, которые вы вращаете. Это тоже магическое число. Вы можете улучшить свою функцию, сделав это аргументом, чтобы вы могли вращать и другие числа.