Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DSLs Internas e Ruby

1,670 views

Published on

Palestra que aconteceu no Rails Summit Latin America 2009, em São Paulo - Brasil.

Published in: Technology
  • Be the first to comment

DSLs Internas e Ruby

  1. 1. DSLs Internas e Ruby @fabiokung
  2. 2. DSL? http://www.flickr.com/photos/pragdave/173640462/
  3. 3. DSLs internas hoje().mais(meses(2));
  4. 4. DSLs internas hoje().mais(uns(2).meses());
  5. 5. Date.today + 2.months 4.weeks.ago DSLs internas
  6. 6. var d1 = Hoje mais 2 meses var d2 = Amanhã menos 1 mês e mais 10 anos e mais 1 dia Scala: http://gist.github.com/207718 (by Sergio Lopes) Date.today + 2.months 4.weeks.ago DSLs internas
  7. 7. DSLs externas
  8. 8. Feature: Search courses In order to ensure better utilization of courses Potential students should be able to search for courses Scenario: Search by topic Given there are 240 courses without topic "biology" And there are 2 courses A001, B205 with topic "biology" When I search for "biology" Then I should see the following courses: | Course code | | A001 | | B205 | DSLs externas
  9. 9. o problema...
  10. 10. http://www.flickr.com/photos/stephenvandyke/96983232/
  11. 11. http://www.flickr.com/photos/hand-nor-glove/438290969/ 2.maneiras
  12. 12. http://www.flickr.com/photos/aussiegall/759309122/ Top-Down
  13. 13. http://www.flickr.com/photos/akiraikari/2657579326/ Bottom-Up
  14. 14. hora de codar
  15. 15. (define cdar-sequence? (automaton init [init : (c -> more)] [more : (a -> more) (d -> more) (r -> end)] [end : accept]))
  16. 16. hora de codar
  17. 17. http://martinfowler.com/dslwip/SemanticModel.html Semantic Model
  18. 18. http://martinfowler.com/dslwip/SemanticModel.html My advice is to always use a Semantic Semantic Model
  19. 19. Resumo • Module.included(klass) • obj.extend(Module) • Class.class_eval { ... } • obj.send(method) • obj.instance_eval { ... }
  20. 20. E mais... • method_missing(name, *args) • Class.inherited(subclass) • lambdas, Proc • ...
  21. 21. Dúvidas? Obrigado! fabio.kung @ [gmail locaweb] http://twitter.com/fabiokung

×