I had to work much with classes in CoffeeScript for last few days. The main problem of my work is that I convert Java code to CoffeeScript. Thus I need to have all the Java-like constructions in my disposal: anonymous classes, interfaces, nested classes, enums...
To be honest, interfaces are absolutely useless in CoffeeScript (as you can never declare a typed variable) but in Java they sometimes contain constants that you may need in other parts of code. So, making interface in CoffeeScript is pretty simple - you just declare the class with all the necessary fields (and empty method - if you wish to make your code more readable and self-documented).
The interesting thing I found out several days ago is that CoffeeScript allows making anonymous classes quite easily, though I failed to find this option in its' official docs (http://coffeescript.org/).
Let's take the same example as in the previous post but with anonymous classes:
class Animal name: undefined @numberOfRegisteredAnimals: 0 constructor: (@name) -> Animal.numberOfRegisteredAnimals += 1 @printNumberOfRegistedAnimals: () -> console.log "The number of registered animals is equal to", Animal.numberOfRegisteredAnimals sayName: () -> console.log "My name is " + @name + ", " + @voice() Animal.printNumberOfRegistedAnimals() cat = new (class extends Animal voice: () -> return "meow!!!" )("Kuzya") cat.sayName() Animal.printNumberOfRegistedAnimals() dog = new (class extends Animal voice: () -> return "woof!!!" )("Sharik") dog.sayName() Animal.printNumberOfRegistedAnimals()Take a look at lines 16-19 and 22-26: instead of declaring child classes as we did in previous sample, we create anonymous classes with added method
@voice
and call their constructors. You can check that the output will be exactly the same as in previous example.To be continued...
No comments:
Post a Comment