• 一个合格的码农,应该如何恰当的使用空行


    先说说代码规范,很多公司就提这个,真的做得比较严谨的,其实不多。小公司就更不用说,都是说说而已,该怎么写怎么写。

    那为什么需要代码规范?

    扪心自问2个问题:

      1. 写了几个月的代码,那种超过50行的,你还能简单2分钟就理解自己以前的思路和逻辑么?(这里只谈代码写法,没有说逻辑思想)

      2. 你在看别人代码时,有没有内心MMP过?

    如果没有,大佬请出门左转,请不要浪费您宝贵的时间。如果有,那么推荐看三本书《代码简洁之道》《重构-改善现有的代码(虽然是Java代码,不影响阅读哈)》《Effective C#:改善C#代码的50个有效方法》。

    我讲个自己亲身经历,在一个中型公司,跟自己的主观吵了1个小时,就是为了这个代码问题。

    总结来说,我的观点是写代码可以求快,但是代码本身需要一定的规范,虽然是道德约束,但也是一个码农的基本素养,起码这坑不能挖太深。

    领导观点比较有意思,说文无第一,武无第二。

    我反驳,这没错,但代码写得水平如何,一眼就能看出,起码的第一点,第一眼看上去就不会觉得很乱(C,C++ 写算法之类就不说了,这里只谈C#)。

    不说废话,代码见真章(我自己的代码就不贴了,没有客观性,我们拿官方开源代码来说):

    这是官方的代码,地址为 https://github.com/dotnet/runtime/blob/master/src/libraries/System.Collections/src/System/Collections/Generic/Queue.cs  105~133 行(找了个不太复杂,又写得比较明确的)

    public void CopyTo(T[] array, int arrayIndex)
            {
                if (array == null)
                {
                    throw new ArgumentNullException(nameof(array));
                }
    
                if (arrayIndex < 0 || arrayIndex > array.Length)
                {
                    throw new ArgumentOutOfRangeException(nameof(arrayIndex), arrayIndex, SR.ArgumentOutOfRange_Index);
                }
    
                int arrayLen = array.Length;
                if (arrayLen - arrayIndex < _size)
                {
                    throw new ArgumentException(SR.Argument_InvalidOffLen);
                }
    
                int numToCopy = _size;
                if (numToCopy == 0) return;
    
                int firstPart = Math.Min(_array.Length - _head, numToCopy);
                Array.Copy(_array, _head, array, arrayIndex, firstPart);
                numToCopy -= firstPart;
                if (numToCopy > 0)
                {
                    Array.Copy(_array, 0, array, arrayIndex + _array.Length - _head, numToCopy);
                }
            }

    以上代码我读下来,没有障碍,目的一目了然,但是我不改一行代码内容和执行逻辑,我用曾经见过的曾经见过的风格改一改,代码行数最少的方式:

    public void CopyTo(T[] array, int arrayIndex)
            {
                if (array == null) throw new ArgumentNullException(nameof(array));
                if (arrayIndex < 0 || arrayIndex > array.Length) throw new ArgumentOutOfRangeException(nameof(arrayIndex), arrayIndex, SR.ArgumentOutOfRange_Index);
                int arrayLen = array.Length;
                if (arrayLen - arrayIndex < _size) throw new ArgumentException(SR.Argument_InvalidOffLen);
                int numToCopy = _size;
                if (numToCopy == 0) return;
                int firstPart = Math.Min(_array.Length - _head, numToCopy);
                Array.Copy(_array, _head, array, arrayIndex, firstPart);
                numToCopy -= firstPart;
                if (numToCopy > 0) Array.Copy(_array, 0, array, arrayIndex + _array.Length - _head, numToCopy);
            }

    代码行数明显的减少了很多哈,但是不具备可读性,这段代码逻辑比较简单,如果稍微复杂点的业务逻辑,可想而知有多混乱。

    个人经验总结:写代码要有明显的分块,一个函数通常有:必要参数效验,业务逻辑,返回值 3个大块,恰当的空行可以很明显的理解写代码的人当时是在做一件什么事情

  • 相关阅读:
    Jquery 图片预览插件 imgPreview
    对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
    JavaScript拖拽实现(附注释),最经典!最简单!短小精悍!
    如何使用VC++写一个小程序来检测.NetFrameWork版本
    利用TreeView实现C#工具箱效果
    JavaScript中json对象和string对象之间的转化
    Ubuntu Server上搭建可用于生产环境的ASP.NET服务器
    winexec()函数的参数说明(c++)
    C#对文件夹的判断、创建、移动、删除
    C#程序不用安装.NET环境运行(让C#程序脱离.net框架)
  • 原文地址:https://www.cnblogs.com/luciusliang/p/12168202.html
Copyright © 2020-2023  润新知