服务粉丝

我们一直在努力
当前位置:首页 > 科技 >

是什么样的步骤,使得你的ios代码变得如此容易阅读?大咖分享

日期: 来源:编程王者之路收集编辑:函数

优秀的程序员会用尽可能简单的方式来解释他们的代码,即使是物理学家都可以用一张白纸和一只铅笔来解释虫洞,我们又何尝不可?

我会尽可能让代码写地简单、易读,包括选择合适的变量名、使用编码规范(code conventions)等等,但还是缺了点东西,理解代码不应该是去理解“如何”实现的,而是要理解想要“达成”什么。

甚至可以说要让读代码像读小说一样,而不是一大堆代码。

下面讨论三大主题:问题

阅读其他人的代码可能会非常折磨,如果不提供合适的上下文,我们会迷失在寻找某个函数或属性的意义中。建议

不论是二进制语言、低级语言还是高级语言,语法都在变得越来越友好,以便吸引更多开发者。而随着语法变得更接近英语,我们的代码也应该简明扼要、不言自明。结果

写出良好的代码,读起来像小说一样,容易阅读和理解(即使没有给出上下文)。

其实做为一个ios开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS (扣扣)交流圈

63.8+30.2=18.4 (验证码:寂静)

不管你是小白还是大牛欢迎入驻,大家一起交流学习函数命名

正确的方式是:

我们写函数时都会假设阅读它的人拥有足够的上下文,能够理解函数想实现什么。用模糊的含义来命名函数,例如“handleRedView()”会引起很多问题,”RedView”是啥?这个函数主要是想干啥?

所以在某些情况下函数的用途会很模糊,如果没有提供足够的上下文,阅读起来会非常困难

我们可以把函数的用途分为四类:通知(Informer)函数管理(Management)函数路由(Router)函数执行(Execution)函数

1. 通知函数

通常会触发路由/管理函数,例子如下:

回调函数,通知某事已经/即将发生,并给机会进行响应。

大部分情况下用于被代理(delegate)触发的操作,或是通知(notification)处理函数。

2. 管理函数

用于联合多个函数以实现更高级的用途,不需要依赖参数,block 中的所有代码都会执行。

上面的函数包含所有需要的信息,汽车启动时执行这些函数,此时我们不关注这是“如何”实现的,而是关注它做了“什么”

3. 路由函数

用于联合多个函数以实现更高级的用途,需要依赖一些参数,只在我们想执行的时候才执行。

路由函数通常同于指向执行函数,但在某些情况下,如果逻辑代码不超过一行,也可以包含自己的逻辑。

4. 执行函数

函数名字的具体实现。

这样就能写出一个干净、简短的类,可读性强,容易维护。* 谨记一项原则,每个函数都应该只有一个责任。

避免在函数名称里使用”and“:playAndMinimize()loadAndPlay()这个坏习惯会打破单一责任原则,写出能够适应两种情况的代码。

避免在函数名称里进行猜测:moveRedViewIfNeeded()上面的例子会导致后面的程序员必须深入此函数,才能理解触发移动 Red View 的时机,这样不够清晰。不,layoutIfNeeded() 并不属于这种情况,因为我们知道如果某个 view 的 setNeedDisplay 为 true,就应该重新布局。这种情况在 Swift 语言里很普遍,因为函数基本上都是应用私有的。注

谈及代码可读性,我首先会想到编码规范(code convention),它们被普遍接受、应用广泛,但使用编码规范并不一定会提升代码质量,虽然有跨应用性但可读性更差。

”is“前缀应该用于布尔型变量和方法,以便解释返回值是布尔类型的。#编码规范

既然”if“语句总是用于布尔值,那还有必要给每个布尔属性都加上”is“吗?为什么苹果要把 Swift 语法从 view.hidden 改成 view.isHidden?我只能想到一种答案……因为**“if view.isHidden”**看起来更自然。

尝试以以下原则使用“is”前缀:如果类的某个布尔属性/方法用于该类(公开)的实例,就有正当理由使用“is”前缀

如果布尔属性在类内部(私有)使用,前缀就是多余的。

如果布尔型属性/方法同时被私有和公开使用,那么应该用计算属性来返回该私有属性值。

虽然用私有 set 并公开使用该属性也是可以的,但上面这种方式可以实现封装(encapsulation)。

封装用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问。

那如果不是自己直接处理的布尔型,如果如何命名呢?private var playerIsPlaying: Boolprivate var gridConstraintIsEnabled()

“is” 需要指向某个东西:view.isHidden, “is”指向 view。上面的例子里使用了此原则,playerIsPlaying,“is”指向 player。/if playerIsPlaying { }/ 对比 /if isPlayerIsPlaying {}/

哪个更自然?我想你已经有答案了。

相关阅读

  • 魅力冰雪季,“童话边城”运动正当时

  • 岁末年初,在自治区第一届冬季运动会上,运动员们战严冬,“赛冰雪”。来自“童话边城”布尔津的“冰雪小将们”驰骋雪道,赢得了阵阵掌声。这是北京冬奥会后的
  • 阿富汗临时政府打死7名“伊斯兰国”成员

  • 当地时间1月4日,阿富汗首都喀布尔多地居民表示听到了爆炸声。对此,阿临时政府发言人穆贾希德回应称,当天晚些时候,阿安全部队在喀布尔多个区域对极端组织“

热门文章

  • OPPO k1的低价高配真实么?网友:不看不知道

  • 近日OPPO一款新机OPPO k1,摒弃了高价低配,就连自家老大哥r17都要怼一下。更是放弃了请代言人,以往的OPPO手机还没出来,各路流量小生,花样美男的代言就先来了。还有线下销售人员的
  • 一招教你手机无限制成为一台新设备

  • 大家平时用手机去注册app,肯定会遇到检测设备异常,交易关闭,等问题 这个都是手机已经不止1-2次注册过此app,不断更换手机仅是一个暂时的方法,却不是长久之计,手机总归会用完
  • 从零开始如何开网店

  • 随着互联网的高速发展,人们的生活发生了翻天覆地的变化,生活节奏越来越快,网购已经成为家家户户生活中离不开的一种购物方式了。网购的发展使得越来越多的人想要涉足电商事业,那

最新文章

  • 潍坊市车管所荣膺全国一等车管所

  •   潍坊日报社潍坊融媒讯 2022年,潍坊市车管所秉承“以人民为中心”的工作理念,紧紧围绕“两个部令实施、一等车管所创建、常态化疫情防控、减量控大考核”等重点工作狠抓落
  • 仙游济川:文化古村藏深山 旖旎风光入画来

  • 深山藏古村,世人未曾识。仙游县济川村是中国历史文化名村,拥有两千多年历史,村里古寨、古井、古桥、古树、古刹、古楼自然地分布山间,散发着浓浓的历史文化气息。济川地处仙游