方法的输入处理,其实不简单!

输入处理,功能实现,输出处理,异常处理。

铁人赛第三天,/images/emoticon/emoticon08.gif
今天在进入对於方法的『 输入处理 』前:

第一个问题是,

如果方法本身没有实现任何功能,就没有存在必要不是吗?

答案:当然是正确

你会说这问题太好笑了吧,
不!这真的很重要!
因为我们目标是写出简洁大方的资优生程序码,
故太多不必要的程序码定义是非常占据效能与空间的。

那故事说回来,

有哪些输入的方法?

大部分方法都会有某种形式的输入,例如直接输入 与 间接输入。

常用的直接输入:

参数输入:

def month_in_year(num_months)
    num_months * 12 * 30 
end   

类或模组中:

class MonthlyCalendar
    MONTH_IN_YEAR = 12 * 30 

    def month_in_year(num_months)
        num_months * MONTH_IN_YEAR
    end 
end 

实体变数:

class MonthlyCalendar
  def initialize
    @start_date = Time.now
  end
      
  def time_n_month_from_now(num_months)
    @start_date + num_months * 12 * 30 
  end 
end 

MonthlyCalendar.new.time_n_month_from_now(3)

第3行提出了一个特别的点,
这里的 Time 被当成是类别『名』输入而非常数、类别输入。
原因是在 Ruby 中,类本身也是一种物件。而类名是一个普通的常数,
所以经过 initialize 定义了 Time 这个常数,Time 恰好被引用成一个类而已。
这也是一种特别形式的输入。

常用的间接输入:

举例:

Time.now # 间接输入

引用 Time 类,把 now 消息发送给 Time 。实际上所需要的是 now 的回传值,而不是 Time 常数本身,这就是一种间接输入。

还有种方法是没有带任何参数的 :

举例:

def month_in_year
    12 * 30 # 定义一个计算一年天数的方法
end   

也等同於以下:

MONTH_IN_YEAR = 12 * 30 # 将方法替换成常数

常数就好比定义、定量。它设定好的内容通常就不太会去变更。
所以通常这种方法功能是有限的。

那有特殊情况吗?

其实是有的,
这将在下章节再深入探讨变化:

间接输入只能有一层吗?
间接输入如果带层次与程序码的影响?
间接输入後的程序码与环境的改变?
(也可以未看先猜XDD )
(跟着我一起翻开 『 优雅的 Ruby 』 一书,一起飞扬研究吧 )

最後,为什麽要提出输入探讨?
『 优雅的 Ruby 』道出关键,

From Roles to Object (从角色到对象)

简单来说,就是『 对的人,放在对的事,与对的时间点,才会事半功倍 』
同样的,要写出好的程序码(清晰度ok、健康度ok)就得先从输入下功夫。

从根本下手,为方法准备输入时需思考:

1.可用的输入与方法之间所需要的角色如何建立关联。
2.输入处理的方法,以及本身可以容纳多少类别、与如何协调。

读完这篇章,翻翻曾经写过的 Code ,
仔细阅读曾经定义方法的地方与上述思考方式做结合,
再重新用自己的话去描述写出来的程序码进行表达,
会发现对於写出资优生笔记的道路上,又再度往前一脚步了!

稳紮稳打才是基础!一起加油!


<<:  【Day6】Opcua的介绍与连线

>>:  DAY8 MongoDB 批次操作(bulk wirte) 与 Operators

AE卷轴制作1-Day2

练习范例教学 六指渊:https://www.sixvfx.com/rolling_paper 开始...

(JS地下城)九九乘法表 步骤解析

解题思维 const app = new Vue({ el: "#app", d...

JavaScript Document Object

Document Object 我们知道 DOM 是 Document Object Model(文...

DAY30 进行式--工作日志005

工作日志碎碎念 抱歉,我做不完,在此下跪 一样开始报告今天的进度,今天主要在搞那个日期阿,没错就是那...

[Day 14] 简单的单元测试实作(八)-修改成API来呼叫

其实我们这样子写的方式, 感觉有点像在呼叫API, 所以我们决定要把它改成放到API, 我们把原本在...