Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The Stepdown Rule in Clean Code

There is something about the Stepdown Rule (high level function at top and low level next) in clean code (Chapter 3, One Level of Abstraction per Function ).
What should I do when I use coffeescript since there is no function declarations in coffeescript.

example:

 seeAMovie = ()->
     BuyTheTicket()
     watch()

 BuyTheTicket = ()->
     //some thing

 watch = () ->
     //some thing

I want to do like this.

like image 888
user2666750 Avatar asked Jan 12 '23 15:01

user2666750


1 Answers

CoffeeScript doesn't really affect this rule. The rule doesn't have anything to do with declarations, but even if it did, CoffeeScript does have declarations anyway. As @muistooshort said, here's a CoffeeScript function declaration:

functionName = (arg1, arg2) -> 
  functionBodyLine1
  functionBodyLine2

Those parenthesis are optional in the declaration if there are no arguments. Here's an example of the Step-Down Rule in CoffeeScript in action:

highLevel = ->
  doSomethingAlmostAsHighLevel1()
  doSomethingAlmostAsHighLevel2()

doSomethingAlmostAsHighLevel1 = ->
  doSomethingALittleLowerLevel1()

...

Note about your edit: That's perfectly fine and follows the Step-down rule. What is wrong with your sample?

Not mentioned in the book, but Uncle Bob clarified to me that when two functions - at the same level of abstraction - use the same lower level function, they should be ordered like so:

highLevel1 = -> lowLevel()
highLevel2 = -> lowLevel()
lowLevel = -> ...
like image 177
Daniel Kaplan Avatar answered Mar 06 '23 18:03

Daniel Kaplan