美文网首页
「一个函数只做一件事」实例练习

「一个函数只做一件事」实例练习

作者: 查无此人123 | 来源:发表于2016-08-13 14:27 被阅读153次
面向对象编程秘籍.jpg

面向对象编程心法: 「高内聚,低耦合」

第一式:

单一职责原则(Single responsibility principle)

A class should have only one reason to change.

一个函数只应该做好一件事情,这个函数就是高内聚
如果一个函数做了3件事,就很SB
这个世界上的好东西,只会专注的做好一件事情

持续练习

  • 分数的加减乘除 – 提炼出「化简」与「处理符号」两个元功能

    • 把分数化简写成单独的功能函数func simplify() -> Fraction {}
    • 把分子分母符号合并问题写成单独的函数normalize() -> Fraction {}
  • 玩扑克 – 提炼出「摸一张牌」「发一张牌」两个元功能

    • 摸牌这个动作,直接被分解成摸一张牌这个动作func getOneCard(card: Card) {}
    • 发牌这个动作,被归类到扑克自己的行为上,于是分解成从牌堆顶或牌堆底发出一张牌func deal() -> Card? {}
  • 生成随机数

    • 专门为生成随机数,写了一个随机函数

      func randomInt(min: UInt32, _ max: UInt32) -> Int {
        return Int(arc4random_uniform(max - min + 1) + min)
      }
      
  • 奥特曼打小怪兽 – 提炼出「选怪兽」「检查是否死亡」两个元功能

    • 奥特曼面对一堆小怪兽要从里面选一个攻击,这个选择的过程,就本单独拿出来做了一个函数func pickOneMonster(mArray: [Monstet]) -> Monster {}
    • 如果小怪兽都死了,那么游戏就结束了,这里就把判断小怪兽是不是都死了,单独写了一个函数func isAllDead(mArray: [Monster]) -> Bool { }
  • 计算游泳池修建费用 – 提炼出「圆」这个元类

    • 一个圆的游泳,外侧还有一个圆形环绕的过道,面对这种问题,我是把整个游泳池作为一个对象,但是老师给出的解答是,看到这两个两个玩意儿都是圆,所以他就针对圆做了一个圆的对象,这个圆的对象里有半径,计算周长,和计算面积.而我最初只是想针对这个问题而把游泳池场景作为一个整体,而你想想,天下的游泳池都是长这个样的吗?答案很明显了,这个类,你写出来,很难复用,所以,面对问题,一定要找到那种元级别的共同可复用点,然后针对这个很小的元单元设置一个元级的类,啊哈~

相关文章

网友评论

      本文标题:「一个函数只做一件事」实例练习

      本文链接:https://www.haomeiwen.com/subject/nnoesttx.html