所以我最近决定我的编码风格有点笨拙。问题是,我似乎永远无法达到可以找出将其简化为更少行更高效代码的方法的阶段。

前几天,我在团队编码的情况下尝试使用 TDD 编写自动换行功能。当我坐在驾驶座上时,我大部分时间都在使用 String.Split() 以及 if 语句 this 和 if that。和我一起编码的人问为什么这么复杂,然后选择了更简单的递归代码,它返回所需的值,并在他完成后提供一些条件让他退出递归循环。

所以我的问题是——下面是我编写的一些代码,用于仅使用小写字母且不使用空格对字符串输入进行凯撒移位加密。单元测试通过,我相信我已经实现了可能出现的各种条件。

简而言之,你们如何简化下面的代码以使其更具可读性和效率?

我很感谢你在这方面的帮助,因为归根结底,我需要让我的编码风格不那么冗长,更简单,但我无法找到最好的起点。

干杯

C# 代码:

 public static string Encrypt(string inputString, int shiftPattern) 
    { 
        StringBuilder sb = new StringBuilder(); 
 
        char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 
 
        //y = x + 3 (mod 26) 
        foreach (var letter in inputString.ToLower()) 
        { 
            if (!alphabet.Contains(letter)) 
            { 
                return "The " + letter + " Character was not in the sample set, please ensure you only use letters"; 
            } 
 
            var res = Array.IndexOf(alphabet, letter) + (shiftPattern % 26); 
 
            if (res >= 26) 
            { 
                res = res - alphabet.Length; 
 
                sb.Append(alphabet[res]); 
            } 
 
            else if (res < 0) 
            { 
                res = alphabet.Length + res; 
                sb.Append(alphabet[res]); 
            } 
 
            else 
 
                sb.Append(alphabet[res]); 
        } 
        return sb.ToString(); 
    } 

请您参考如下方法:

1.- 只将 sb.Append(alphabet[res]) 放在条件语句之外一次。
2.- 考虑抛出一个异常而不是返回一条消息...这样以后您就可以轻松地检查该操作是否正常工作。如果您的字母表定义中没有字符,您还应该考虑让字符“按原样”。它将允许您处理空格等。
3.- 检查最后一个条件是否真的必要。乍一看...它看起来可以安全移除...所以确认一下。我们可以添加一个 Math.Abs​​ 函数来避免 ShiftPattern 中的负数问题。
4.- 在某些地方你使用 alphabet.Length,而在其他地方你使用 26。总是使用 alphabet.Length。
5.-不勾选(res >= 26),直接做MOD操作即可。

    public static string Encrypt(string inputString, int shiftPattern) 
            { 
                StringBuilder sb = new StringBuilder(); 
 
                char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 
 
                //y = x + 3 (mod 26) 
                foreach (var letter in inputString.ToLower()) 
                { 
                    if (!alphabet.Contains(letter)) //Consider throwing and exception instead 
                    { 
                        return "The " + letter + " Character was not in the sample set, please ensure you only use letters"; 
                    } 
 
                    var res = Array.IndexOf(alphabet, letter) + (Math.Abs(shiftPattern) % alphabet.Length); 
                    res = res % alphabet.Length 
                    sb.Append(alphabet[res]); 
                } 
                return sb.ToString(); 
            } 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!