输入处理,功能实现,输出处理,异常处理。
铁人赛第三天,
今天在进入对於方法的『 输入处理 』前:
第一个问题是,
答案:当然是正确。
你会说这问题太好笑了吧,
不!这真的很重要!
因为我们目标是写出简洁大方的资优生程序码,
故太多不必要的程序码定义是非常占据效能与空间的。
那故事说回来,
大部分方法都会有某种形式的输入,例如直接输入 与 间接输入。
参数输入:
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 』 一书,一起飞扬研究吧 )
简单来说,就是『 对的人,放在对的事,与对的时间点,才会事半功倍 』
同样的,要写出好的程序码(清晰度ok、健康度ok)就得先从输入下功夫。
从根本下手,为方法准备输入时需思考:
1.可用的输入与方法之间所需要的角色如何建立关联。
2.输入处理的方法,以及本身可以容纳多少类别、与如何协调。
读完这篇章,翻翻曾经写过的 Code ,
仔细阅读曾经定义方法的地方与上述思考方式做结合,
再重新用自己的话去描述写出来的程序码进行表达,
会发现对於写出资优生笔记的道路上,又再度往前一脚步了!
稳紮稳打才是基础!一起加油!
>>: DAY8 MongoDB 批次操作(bulk wirte) 与 Operators
练习范例教学 六指渊:https://www.sixvfx.com/rolling_paper 开始...
解题思维 const app = new Vue({ el: "#app", d...
Document Object 我们知道 DOM 是 Document Object Model(文...
工作日志碎碎念 抱歉,我做不完,在此下跪 一样开始报告今天的进度,今天主要在搞那个日期阿,没错就是那...
其实我们这样子写的方式, 感觉有点像在呼叫API, 所以我们决定要把它改成放到API, 我们把原本在...