I'm recently working on a small project, which is basically about importing an excel file into our system. Among all the implementing steps, one thing i need to do is to validate each cell of the excel file. The same validation can be applied to the cells within the same column, because they are of the same data type. So I could've written something like this:
def validate_column_1
for i in 1..sheet.last_row
# do some validation
end
end
def validate_column_2
for i in 1..sheet.last_row
# do some validation
end
end
...
By doing this, I ended up written a bunch of identical for loops (I mean the for loops themselves, not the code within them). However, you can write something smarter by using a technic which is commonly used in functional programming. What you can do is write one method which takes each different validation code as parameter and apply it to each cell while iterating through rows. This way, you only need to write one for loop. In Ruby, you can achieve this by using blocks. There are a bunch of excellent blogs about Ruby block out there, so I will not repeat that.
So here is the smarter way to go;
def validate_excel(args, &block)
for i in 1..sheet.last_row
block.call #pass in the argument for the block
end
end
# call the method
validate_excel(args) {|variables| validation_code}
nice blog!
ReplyDelete