if
语句作为减少代码复杂度的工具。他使用了一个具体的例子来说明他的观点。现在,我一直在思考其他具体的例子,以帮助我更好地学习无条件/
if
less/for
less编程。例如,在这个猫咪克隆中有一个
if..else
块:#!/usr/bin/env ruby
if ARGV.length > 0
ARGV.each do |f|
puts File.read(f)
end
else
puts STDIN.read
end
原来 Ruby 有
ARGF
,这使得程序变得简单很多:#!/usr/bin/env ruby
puts ARGF.read
我在想如果没有
ARGF
,上面的例子该如何重构,以便不需要if..else
块?同时也对其他说明性具体示例的链接感兴趣。
ARGV
创建一个IO对象数组,并且如果该列表为空,则使用STDIN
来简化代码。io = ARGV.map { |f| File.new(f) }; io = [STDIN] if !io.length;
然后你的代码可以随意使用io
。虽然这严格来说有相同数量的条件语句,但它消除了if/else块,因此分支是线性的。由于它将数据收集与使用分开,你可以将其放入方法中并重复使用,从而进一步减少复杂性。 - Schwernif
绊住。 - Schwern