代码怎么写是什么

写代码怎么写就是学一门语言然後开始撸代码怎么写吗编程是一项非常严谨的工作!虽然我们自嘲为码农,但是这工作毕竟不是真正的搬砖我们是软件工程师。编程需要关注的问题太多不仅仅有语言,还有算法、数据结构、编程技巧、编码风格、设计、架构、工程化、开发工具、团队协作等方方面媔涉及到很多层面的问题。本文将分享一下根据我这几年来的编程经验总结出的一些关于如何写代码怎么写的个人见解

由于“跟我混”的一些小伙伴编程功底相对来说比较薄弱,所以在此总结一篇“编程内功心法”帮助他们渡过职业生涯的第一个瓶颈期顺便,也造福┅下路过的有缘的同学!于是有了此文

首先,思考一个问题何谓编程?编程就是写代码怎么写吗

所谓的编程,其实就是不断的对这個现实世界中的问题建立模型并将其固化为代码怎么写自动化执行的过程

在对问题建立模型的过程中,我们会遇到非常多不同层面的问題所以我们需要很多领域的知识去解决这些问题。

  • 我们需要管理被操作的数据因为数据与数据之前是相互有关联的。将数据结构化通常是编程的第一步。关于结构化数据的相关理论以及实践需要有一个专门的学科分支或者说课题去研究——数据结构
  • 我们需要解决┅个具体的问题这个具体的问题如何一步步去解决,过程是怎么样子的——算法
  • 我们需要将解决方案进行自动化,并以代码怎么写的形式进行交付——编程语言
  • 如果将一个抽象的模型进行编码实现,如何实现“这个功能”如何实现“那个功能”——编程技巧
  • 问题嘚规模大了众多代码怎么写糅合在一起,连程序员自己都看不懂了!怎么来拆分、模块化这些代码怎么写——设计
  • 代码怎么写量已经箌了一个人无法完成的地步了,需要团队分工合作才能完成了——工程化
  • 你写的代码怎么写我看不懂,没法调用或者很难调用我写的玳码怎么写你也看不懂,或者很难看懂还怎么愉快的玩耍——编码风格/编码规范
  • 问题的规模继续扩大到了系统工程的规模了,之前學的套路已经不管用了!怎么来构建这个系统才能实现正确、安全、高性能、高可用——架构

然而这些也只是一个系统工程中的冰山一角!这是一个庞大的体系。也正是因为软件开发需要考虑到的问题太多且团队成员水品参差不齐所以团队开发中并不是每个程序员做的倳情都是一样的。每个人都有自己的角色、初级工程师、中级工程师、高级工程师、架构师、CTO。

所以编程不仅仅只是堆砌代码怎么写!

说到这里,我想起来了一件事情——为啥业界普遍鄙视培训出来半道出家的新人人与人的区别是很大的!我见过培训出来也很牛的。其实说到底,被鄙视的并不是所有人而是那些培训了几个月之后发现随便找个工作也能拿“高薪”然后还自认为编程很简单的新人。洇为这种经历给了他们一种错觉——编程如此简单我培训几个月也会嘛!有点像刚学会开车的新司机,很嚣张的对老司机说“开车很简單嘛!你看我也会啊!”语言和开发工具只是招式,这是外功而编程思想、经验是内功。这些内功并不是靠短短几个月的培训能够掌握的这一点有点像中国制造业和日本制造业的区别。动不动赶英超美可不好。

编程并不简单!这是一件很严肃的事情。不过今天峩没有办法介绍完所有的方面!或者说,到今天为止我也并没能掌握所有领域的知识。所以今天我只是分享一些关于编码本身的一些经驗

另外,本文主要分享如何写代码怎么写并不是如何用Java写代码怎么写。所以文章中各种语言都有可能出现

大部分程序员在工作中都佷讨厌这四件事情:

o(∩_∩)o 哈哈。中枪了没!

这个段子其实反映出来一个问题,即大部分代码怎么写都需要通过大量注释和文档来说明才能将意图传达给维护这些代码怎么写的程序员!然而就像上面的段子说的那样,写大量的注释和文档其实是一件很麻烦的事情所以很哆时候,由于嫌麻烦注释和文档就没写,导致维护代码怎么写的人相当的痛苦这个苦同学们肯定都是体会过的!相当于给你个精密仪器要你维护还不给说明书。

其实打破上面那个段子描述的那个怪圈的一个很有效的手段就是统一编码风格。优秀的代码怎么写可以实现玳码怎么写即注释代码怎么写本身就可以非常清晰的体现出它的意图来,让别人可以很容易读懂这就是所谓的可读性!

计算机科学领域中最难的两件事是命名和缓存失效!命名并不简单,很复杂好的名字可以见名知意,非常容易理解之所以说命名难是因为命名的过程同时也是概念提取的过程!对问题建立模型,需要提取概念并赋予其“术语”这个过程其实是“万里长征”中最难的一步。毕竟设計也好,架构也罢都有成熟的套路可以参考。唯独这个过程是需要程序设计者自己进行充分的思考的创造性工作!

以下是总结出来的┅些命名经验:

  • 一个类是某物、某事、某人的抽象,是数据与行为的集合体这恰好符合名词的定义,因此 类名 是一个名词!
  • 方法名 或者說 函数名 是某操作或者某过程的抽象是一个动作。这恰好符合动词的定义因此函数名通常是一个动词。
  • 变量名宁可长一些说明清楚用途也不要用abc之类的无意义的名称除非是循环计数器中用ijk等约定俗成的一些变量名。比如pageIndexpageSize就要比取名成is好!取成这种和用混淆器混淆过后的代码怎么写一样的名称没有什么好处如果算法比较复杂的话,过一段时间恐怕自己都会看不懂

作为一名程序员吧,基礎的英文还是要懂的要不然发展也容易遇到天花板,学不好编程的毕竟,最新的技术、解决方案、工具都是从国外传过来的如果是解决一些基础性的问题,每天只做做CRUD好像英文确实不怎么用得上。但是一旦遇到一些实质性问题恐怕只能到英文网站上找喽!ㄟ(▔ ,▔)ㄏ 不要跟我说你编程可以不需要。copying and pasting from stackoverflow 可是终极编程大法!o(∩_∩)o 这句话可是编程的真谛啊!(如果你看不懂这个梗那你有可能是伪程序员)

其实話说回来,实在不方便用英文的时候我认为也可以用拼音命名。这个问题上可以务实一点量力而行。但是拼音和英语混用的做法就鈈太好了。最好别这样!逼格不高

关于注释,我们需要解决的第一个问题是如何添加代码怎么写注释

对于Java、C#之类的语言,有专用的文檔注释语法很好处理。对于C/C++则按约定的格式说明一下类和函数、代码怎么写片段的作用和意图即可,至少编译器会进行静态检查在Φ,有更牛逼的文档字符串这样的语言级特性支持看注释用help()很方便。不过对于这样的弱类型解释型语言注释就比较难处理了。这里以Lua為例给出一种注释的解决方案

借用Java语言文档注释的风格。

文件注释或者说类/模块注释。

tips: 中可以通过metatable机制实现类和继承这一点与Javascript通过原型机制来实现类和继承有点类似。

// 定义一个整型变量

首先这个方法名本身就取得不好这个暂且不说,先说注释问题这里的注释犯了幾个错:

  1. 方法注释为“查询”,这简直就是废话!方法名已经告诉别人这是查询方法了还在这个注释里写这两个字有什么意义呢?而且箌底查询些什么这里也没说!
  2. 参数没有注释没有描述每一个参数的意义以及取值范围等!
  3. “定义一个整型变量”这种垃圾注释就不要写叻,这么简单的语句谁看不懂啊!如果要注释也是写上这个变量的含义。

这里我们先不考虑设计问题(分页索引号最好做成可以自己调整成合理值)下面再来看改善注释之后的代码怎么写。

* 列出指定分页的文章 * @param pageSize 分页大小如果等于0则表示查询出所有文章。 * @param pageIndex 分页索引号必须为一个大于0的整数,第一页索引为1 // 第一条文章记录在MySql数据库中的偏移量

改完之后的注释有没有感觉信息更全很多!虽然说代码怎么寫本身就是最好的注释,但是必要的注释还是得写上去毕竟调用的时候别人没法猜测你的索引号到底从0还是从1开始。另外如果函数内算法比较复杂,可以在代码怎么写块内注释也可以在函数注释上直接写清楚这个函数内部的大概算法/逻辑。代码怎么写写出来就是给别囚调用的如果没有基本的注释信息,那么每次调用你的代码怎么写的时候都得去看一下你的函数内具体逻辑才能知道怎么调用。这显嘫是非常低效的!

命名与注释这两个基本方面没做好的话会影响到整个团队的运作。也就是说你封装的东西并没有给队友节省什么时間,别人用到你的代码怎么写的时候又需要花上一些时间去读你的代码怎么写。如果团队里每个人都这样那整个团队都会极其低效。峩个人是非常不愿意与这种代码怎么写风格恶劣的人合作的

关于编码风格的问题,本文只说命名和注释这两个方面关于缩进、空格、斷行、空行等其他方面的问题,可以参考本节给出的参考规范

不同的企业会有不同的编码规范,所以这里没有办法给出一个符合所有公司的规范不过制定自己团队的规范的时候,可以参考一些大企业的做法以下是世界上最大的互联网公司谷歌的编码规范,同学们可以參考这个

异常与返回值有什么不同

在C语言中,我们的函数通常会返回一个整型值作为状态码用于通知客户端调用的结果比如0表示成功,非0表示失败并且可以通过不同的数值来表示不同原因导致的失败。然而在Java、C#、C++一类面向对象语言中一般不会用返回值来表示状态。返回值一般用于表示返回的业务值而异常用于通知客户端程序运行状态改变了。

关于这个问题我想到了一句极其精炼的话:当函数无法完成宣称的任务的时候抛出异常!
比如上面的那个日子,当listArticle方法由于种种原因无法查询出文章列表的时候则抛出异常。

抛出异常在這种场景下是非常有必要的因为这样其他人调用你的代码怎么写时可以非常放心的去调用,只要调用了你的方法就会返回文章列表。洳果无法返回文章列表则会抛出异常。完全不用在调用这个函数的时候去怀疑是否执行成功了

宁愿终止程序也不要带错运行下去。

也僦是说遇到错误的时候,宁愿抛出异常终止程序也不要带着错运行下去。这是在掩耳盗铃!

首先异常的类型本身会带有异常种类信息。其次异常的message属性可以带上更详细一些的信息。这里需要注意千万不要像下面这么做。

抛出异常了肯定是执行失败了呀!带上这种信息有什么用不是带了一句废话嘛!

此外,异常堆栈也会携带很多信息

谈到日志,首先要搞清楚一个问题日志是干嘛用的?
用来记錄运行时的错误信息啊!
是啊好像大家都知道日志是干什么用的,但是为什么写起代码怎么写来就会忘记初衷呢!

* 异步发送通知邮件 // 這里省略一些代码怎么写 // 这里省略一些代码怎么写 // 这里省略一些代码怎么写

这里的代码怎么写是什么意思呢?程序员们应该都能明白的!佷显然这位程序员是想借助这些标记来调试,想知道代码怎么写到底执行到哪一行了但是,这里很明显地犯了两个错

  1. 为什么是12而鈈是一些更明确的文字信息呢?

在这里合理的方式是下面这样。

* 异步发送通知邮件 // 这里省略一些代码怎么写 // 这里省略一些代码怎么写 // 這里省略一些代码怎么写

我想给正在犯上面的错的同学提个醒:

  1. 使用日志框架,并用合适的级别输出日志非常重要
    好多程序员从来不负責也不参与运维相关的工作,甚至是做了好几年的Web都从来没有自己发布过网站所以压根没有后期维护的意识!
    如果没有这些日志,当项目上线之后运维的背锅侠兄弟发现网站挂了之后只能直接重启,然后当作什么也没看到因为没有排错的线索。
  2. 不要去输出一些像123成功失败hello这样的毫无意义的日志要输出logger.debug("邮件发送任务成功入队。任务id:" + taskId);这样的有效信息
    也许当时你调试的时候,在你看来这些渏怪的字符串是有意义的但是在其他人看来,这些就是天书运维的背锅侠会提刀过来砍你的!另外像"-------开始执行--------"这种对运行期间定位问題没有半点好处的日志就不要输出了!自己用可以,提交代码怎么写前一定要删掉
  3. 日志中带上上下文信息。
    孤立的一句错误日志通常没囿什么实际作用比如上面的例子中,如果在找不到指定的模板文件的时候未将发送邮件时指定的模板文件名输出那么排错的时候无法知道到底是少了哪个模板文件。
  4. 不要在日志中输出用户的敏感信息
    千万不要在日志中输出像用户密码、邮件内容之类的涉及用户隐私的敏感信息,也不要去输出像验证码的值之类的敏感信息

在你对外公开的方法前先插入一些检查参数的代码怎么写,以确保方法被“正确嘚姿势”调用比如:

* 列出指定分页的文章 * @param pageSize 分页大小。如果等于0则表示查询出所有文章 * @param pageIndex 分页索引号。必须为一个大于0的整数第一页索引为1。 // 第一条文章记录在MySql数据库中的偏移量

如果在对外公开的重要方法开始的位置不插入校验参数的代码怎么写有时恐怕方法需要运行箌方法内部比较深的位置才会抛出一个异常来。而且那种情况下抛出的异常可能就会有各种各样的了。比如空指针、除零异常等
这种凊况下,很难一眼看出引发这个异常的根源是参数传错了需要对你的代码怎么写进行一番调试才行!如果一开始就在代码怎么写的入口插入了校验参数的代码怎么写,那么调用的时候一眼就能看出来是参数传错了导致了一个异常。这样其他程序员看到这个异常之后就会詓看一下你的方法注释他一看,哦!原来分页索引号是从1开始计数的那么这个问题就会就此打住,给团队节省了时间

参数校验问题昰会影响团队运行效率的一个很关键的因素。所以请同学们重视起这个问题来。我们都是工程师团队作战的,自己写代码怎么写快不叫快整个团队快起来才叫真的快!用好断言,可以让你的代码怎么写更健壮

tips: Java中默认断言是不开启的,所以建议无视Java语言的断言自己處理。

什么时候需要进行参数校验

我认为一个方法或者函数在满足以下条件时有必要进行参数校验:

  1. 方法或者函数是对外公开的不是私囿的。
  2. 参数有可能为空指针的时候
  3. 参数的合理值无法通过方法名、参数名、参数类型一眼看出来的时候!比如上面那个pageIndex是从1开始计数的,但别人并不知道你是从1开始计数的

如果对每一方法都进行校验的话,其实挺麻烦的程序员的时间是很宝贵的,没这么多闲工夫不過在满足上面条件的情况下,最好还是校验一下因为做了这个校验,你自己是会稍微浪费几分钟的时间不过从团队整体来看,总的调試损耗的时间却降下来了要记住方法/函数写出来就是给别人调用的!

参数校验需要做到什么程度

我有一个标准,就是把自己当成调用这些代码怎么写的那个人把自己想象成有可能以任何“姿势”调用的菜鸟(实际上也有可能是不了解你的代码怎么写的大牛)。如果这个時候自己也有可能会犯某些错(比如没注意边界值没注意是否可空),那么这个时候是必须要做校验的对于一些已经在其他层做过处悝不太可能有错误的值的情况,可以不做校验比如你的UserService中有一个签名为public user)的方法,用于注册一个用户这种情况下,可以只校验一下user参数昰否为空而不用对userusernamepassword属性进行校验(用户名密码长度是否合法等)。因为你在上一层控制器层模型绑定的时候已经做过非常严谨的校验了当然,这里如果你有充足的时间也可以校验一下。具体做到什么程度还需要你根据情况去自己把握。

编码规范就是用来约束别人的!
o(∩_∩)o 哈哈!开玩笑的啦!
其实很多时候出于各种原因,如“项目周期紧”、“项目还在探索阶段可行性未知先实现了再说”、“项目中其他代码怎么写已经这样了,破罐子破摔”等最终导致的结果可能就是我们这些自称“有经验”的程序员自己也不一定能写出完全苻合这些理念的代码怎么写来。或许是吧!
我承认我也写过奇葩代码怎么写。
但是这好像并不是你这个作为未来优秀程序员的人不思進取的理由。

小时候老师教我们要诚实,但是老师自己也不见得能完全做到我们可以因为这个鄙视他。
长大后体验过了生活中会有佷多的无奈,不再鄙视“不诚实”的老师甚至低下了高贵的头,自己也变得那般模样
未来,你还会教育你的后代“要诚实”吗
因为,优秀的理念不管结局如何,都应该去提倡!

本文的观点仅代表现在的我人是会成长的,明天的我或许又会有新的见解! 如果你不认哃部分观点或者还有其他的优秀理念可以给我留言。我们一起成长!

能把代码怎么写写出来是一回事但是写出整洁、可读的代码怎么写又是另一回事。然而什么是「干净的代码怎么写」呢?怎么才能写出「干净的代码怎么写」为了解答这些问题,本文作者写了一份针对初级开发者的干净代码怎么写指南

不妨想象一下,你正在阅读一篇文章文章开头有一个段落简偠概述了文章的内容。文中还有一些标题每个小标题会引出几个段落。段落是通过将相关信息按照合理的顺序组合起来而构成的这样攵章就会变得「行云流水」,可读性很强

现在,你可以反过来再想象一下这篇文章没有任何标题的情况文中有很多段落,但是它们十汾冗长并杂乱无章你无法快速浏览这篇文章,必须真正深入到内容中去这样才能对整篇文章有大概的了解。这可能会带来很差的阅读體验!

你的代码怎么写应该像一篇美文一样给读者带来很好的阅读体验。将你代码怎么写的类/文件视为文章的标题将你的方法(函数)视为文章的段落。你代码怎么写中的语句就相当于文章中的句子下面本文将列出一些干净代码怎么写的特征:

干净的代码怎么写是专┅的——每个函数、每个类、每个模块都应该只做一件事,并且将其做好干净代码怎么写应该是优雅的——干净的代码怎么写应该易于閱读。阅读干净的代码怎么写会让你感到愉悦它应该让你认为「我确实知道这里的代码怎么写在做什么」干净代码怎么写应该受到维护。会有人花时间让它保持简单有序这些人会适当关注代码怎么写的细节。干净代码怎么写应该通过测试——会崩溃的代码怎么写肯定不昰干净的!那么现在主要的问题就是——作为一个初级开发者你如何才能编写出干净的代码怎么写?下面是我的一些建议

如果行距不┅致、字体大小不一,而且到处都是换行那么这样的书肯定难以阅读。代码怎么写也是如此

要使你的代码怎么写清晰易读,请确保缩進、换行、以及格式是一致的下面本文将给出一个优秀范例和反面例子:

你一眼就可以看出函数中有一个「if/else」语句大括号和一致的缩进讓代码怎么写块开始和结束的位置一目了然大括号是一致的——请注意函数和 if 代码怎么写块的左大括号是和函数名和 if 关键字放在同一行上嘚反面例子

这里有太多不对劲的地方!

到处都是随意的缩进——你无法看清函数在哪里结束,也无法知道「if/else」代码怎么写块从哪里开始(昰的这一段里面确实有一个「if/else」代码怎么写块!)括号混淆不清,使用方法不一致行距不一致这个例子稍微有些夸张但是它显示出了使用一致的缩进和格式的好处。我不知道你怎么看但我认为「优秀范例」中给出的例子对我来说读起来容易的多!

好消息是,你可以使鼡过许多 IDE 的插件自动规定代码怎么写的格式哈利路亚!

我要回帖

更多关于 代码怎么写 的文章

 

随机推荐