DSLs Internas
  e Ruby
    @fabiokung
DSL?
       http://www.flickr.com/photos/pragdave/173640462/
DSLs internas

hoje().mais(meses(2));
DSLs internas


hoje().mais(uns(2).meses());
Date.today + 2.months
     4.weeks.ago


 DSLs internas
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/2...
DSLs externas
Feature: Search courses
  In order to ensure better utilization of courses
  Potential students should be able to search f...
o problema...
http://www.flickr.com/photos/stephenvandyke/96983232/
http://www.flickr.com/photos/hand-nor-glove/438290969/




2.maneiras
http://www.flickr.com/photos/aussiegall/759309122/




Top-Down
http://www.flickr.com/photos/akiraikari/2657579326/




Bottom-Up
hora de codar
(define cdar-sequence?
  (automaton init
             [init : (c -> more)]

             [more : (a -> more)
             ...
hora de codar
http://martinfowler.com/dslwip/SemanticModel.html




Semantic Model
http://martinfowler.com/dslwip/SemanticModel.html




                                       My advice is
                ...
Resumo
• Module.included(klass)
• obj.extend(Module)
• Class.class_eval { ... }
• obj.send(method)
• obj.instance_eval { ....
E mais...

• method_missing(name, *args)
• Class.inherited(subclass)
• lambdas, Proc
• ...
Dúvidas?




                           Obrigado!

fabio.kung @ [gmail locaweb]
http://twitter.com/fabiokung
DSLs Internas e Ruby
DSLs Internas e Ruby
DSLs Internas e Ruby
DSLs Internas e Ruby
Upcoming SlideShare
Loading in...5
×

DSLs Internas e Ruby

1,280

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,280
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

    ×