DSLs Internas e Ruby

1,328
-1

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,328
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 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

    ×