首页 今日头条正文

春雪,感觉自己的代码很乱?由于你不明白套路,桂花的功效与作用

作者:Crossin先生
大众号:C薛之谦反击晒依据rossin的编程教室


编程教室开了这么久,现已有许多人从彻底零根底的小白成为了会写代码的菜鸟程序员,能够自己独立开发程序。不过到此阶段,常常会遇到瓶颈,感觉功用能够完成,但代码看起来有些别扭:

  • 代码中有许多相似的重复代码

  • 代码中有许多的 if,以至于有很长的缩进

  • 单个代码写得很长,他人很难看懂,过阵子或许自己都看不明白

  • 总会有没有考虑到的状况导致 bug

  • 修正一个 bug 又会发作新的 bug

  • 单个功用能够完成,但多个功用组合在一起就理不清

  • 假如需求发作变化,代码北京上门保健修正起来很费事

  • 有多种完成办法时不知道该用哪一种

  • 很难和其他人协作开发

上述的问题你是不是有过相似困扰?处理的办法其实也简春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果单,便是坚持“多写”和“多读”:

  1. 多写代码。许多时分你觉得欠优点理,并不是因为深邃的问题,仅仅你对代码的根本运用还不行娴熟。相同的问题,踩过坑再爬出来,重复几回天然你也知道怎样绕开了。

  2. 多读代码淫行补给。除了自己写,看看他人的代码也会学到许多。包含教程里的事例、官方示例、开源项目的源码等。所谓“熟读唐诗三百首,不会作诗也会吟”嘛。

除了这两个“笨办法”外,还有样东西,关于处在这个阶段的你或许有很大启示,这便是:

规划形式

规划形式是对重生九爷的尤物侧福晋于软件开发中常见的一些问题所总结出的处理方案,它并不重视详细的代码怎样写,而是代码的结构应该怎么规划,然后让代码愈加牢靠、可读、可重用、易于保护。它不是一种严厉意义上的“技能”,而是一门“阅历主义”,也便是开发者常常说到的“最佳实践”。所以规划形式其实便是在前人各种踩坑阅历之上,总结出的各种开发“套路”。

举几个常见的规划形式比如:

单例形式

场景举例:代码中需求一个同享的资源管理器,确保在代码只需仅有的一个实例,且代码遍地都能够拜访到。

假如你的代码只需一个文件,或许不会遇上这个问题。但当项目大一点之后,这个问题非常常见。你能够挑选界说一些大局变量来完成。但更好的“套路”是运用单例形式:它能够确保只创立一个对(第一次拜访时创立,之后拜访时直接回来已有目标),并供给大局的拜访

代码演示

# 单例类
class Singleton(object):    _instance = None    def __new__(cls, *args, 青占鱼为什么廉价**kw):        if not cls._instance:   &nbs穿越韩国做宗妇p;        白井仪人cls._insta春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果nce = super(Singleton, cls).__new__(cls, *args, **kw)        return cls._instance

# 承继单例
class MyClass(Singleton):      a = 1

# 运用
m春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果c1 = MyClass()mc2 = MyClass()print(mc1==mc2夺情花)mc1.a += 魏钰庭1
print(mc2.a)

输出

True2

之前咱们的文章《Python单例形式(Singleton)的N种完成》有专门讨论过 Python 中的单例形式完成。

工厂形式

场景举例:在一个绘图东西里,有不同的笔刷。当点击不同的笔刷按钮时,需求创立对应的笔刷供运用。

假如把每个按钮呼应里都去独自创立,代码会很冗余且不利于保护。这时可创立一个“工厂”类,将创立笔刷的代码放在其间,只需求依据传入的参数不同,回来不同的笔刷实例即可。就如同工厂依据订单出产产品相同。

代码演示

# 笔刷工厂,详细类代码略
def pen_factory(mode):    if mode == 'PEN':
       return Pen()
   elif mode == 'PENCIL':
       return Pencil()
   elif mode == 石原奈莉'BRUSH':
       retu舒庆简历rn Brush污相片()
   else:
       return None

# 运用
p = pen_factory('BRUSH')

署理形式

场景举例:开发一个论坛,答运用户在帖子中上传图片,于春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果是需求供给保存图片的功用。

一般为了网站的拜访速度,会挑选第三方的图片保存服务。那么在保存图片的时分,就需求调用其供给的接口。而运用署理形式的话,就会在网站和第三方服务间添加一层。这样的优点是能够将一些额定的处理放在署理层中,当需求替换第三方服务时,不需求修正网站的逻辑,只需调整署理层即可。

代码演示

class ImgService:    @abstractmethod    def save(self, img):        pass

# 实在类
class XYZImgService(ImgService):    def save(self, img):   &春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果nbsp;    # 调用第三方服务接口

# 署理类
class ImgServiceProx爸爸不要了y(ImgService):    def __init__(self):        self.service = XYZImgS春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果ervice()
   def save(self, img):        return self.service.save(img)

# 运用

def
save_img(img):
   proxy = ImgServiceProxy()    proxy.save(img)

规划形式的六大准则

1、开闭准则(Open Close Principle)
对扩展敞开,对修正封闭。在需求变化时,尽或许不修正原有代码,而经过扩展完成。

2、里氏代换准则(Liskov Substitu佛山三水天气预报tion Principle)
在运用承继时,在子类中尽量不要重写和重载父类的办法。

3、依靠倒转准则(Dependence Inversion Principle)
针对接口编程,细节依靠于笼统。

4、接口阻隔准则(Interface S烟凉忘情深egregation Principle)
下降类之间的耦合度,不依靠不必要的接口。

5、迪米特规律,又称最少知道准则(Demeter Principle)
模块之间彼此独立,对自己依靠的类需求知道的信息越少越好。

6、组成复用准则(Composite Reuse Principle)
尽量运用组成/聚合的办法,而不是运用承继。

详细的解读,今日无法在一篇推送中打开胪陈。并且这是个需求不断领会和实践的工作。首要你能够找些相关书本读一读。规划形式有一本经典书本:《Design Patterns: Elements of Reusable Object-Oriented Software》(《规划形式:可复用面向目标软件的根底》)。此书又被称作“GoF”(Gang of Four,四人组),四位业界大牛总结出了 23 种规划形式。

但是,我激烈引荐新手去看这本书,因为你很或许看不明白。我引荐的是一本叫做《Head first 规划重生逐个黑道军嫂形式》的书,能够算作上面那本的文言入门版,关于新手来说友爱许多,或许协助更大。

开发者关于规划形式的了解大致存在这样几个阶段:一开端只重视语法和库,不明白规划形式,写代码无规矩;后来了解了规划形式之后,开端测验套用规划形式,懂得重构代码,但有时不免教条化或堕入过度规划的误区;比及开发经春雪,感觉自己的代码很乱?因为你不明白套路,桂花的成效与效果验丰厚之后,不再拘泥于所谓陶朱公生意经十六字诀的“形式”,自身写出的代码就现已符合规划的准则。

书上的规划形式是原封不动的,不或许包括每一种开丁维民新浪博客发场景,而软件技能自身也不断发展,许多形式现已被新的言语特性所完成。因而也有许多人关于规划形式的价值存在质疑。我的观点是,假如你处在新手阶段,学习规划形式是很好的提高办法,也能够开辟你的编程思想。而当你现已走上进阶之路之后,更多的应是重视形式背面的compell准则,写出更合理的代码,而并非为了形式而形式。

当然这一切,仍是都离不开满足的代码量。每个程序员都是一行行代码堆出来。

感谢阅览

引荐阅览

1:互联网公司迷信大全

2:爬一爬那些年你硬盘存过的教师

3:我男朋友是项目经理......

4:2018年Python爱好者社区历史文章合集(作者篇)

5:2018年终精心收拾|Python爱好者社区历史文章合集(类型篇)


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。