zoukankan      html  css  js  c++  java
  • 一个合格的码农,应该如何恰当的使用空行

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

    那为什么需要代码规范?

    扪心自问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个大块,恰当的空行可以很明显的理解写代码的人当时是在做一件什么事情

  • 相关阅读:
    java堆和栈的区别
    什么是java 序列化,如何实现java 序列化?
    HashMap和Hashtable的区别
    [LeetCode] 548. Split Array with Equal Sum 分割数组成和相同的子数组
    [LeetCode] 533. Lonely Pixel II 孤独的像素 II
    [LeetCode] 531. Lonely Pixel I 孤独的像素 I
    [LeetCode] 205. Isomorphic Strings 同构字符串
    [LeetCode] 351. Android Unlock Patterns 安卓解锁模式
    Python list、tuple、dict区别
    Minimum number of swaps required to sort an array
  • 原文地址:https://www.cnblogs.com/luciusliang/p/12168202.html
Copyright © 2011-2022 走看看