рд╕реНрд▓рд┐рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди - Haml'y рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ

рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣реЗрдорд▓ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдирдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреА рдЦреЛрдЬ рдХреА, рдЬреЛ рдореБрдЭреЗ рддреБрд░рдВрдд рдкрд╕рдВрдж рдЖрдпрд╛ред рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬреЗрдб рдФрд░ рд╣реЗрдорд▓ рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд▓рд┐рдпрд╛ред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрд▓рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд┐рдЦрддрд╛ рд╣реИ:
doctype html html head title Slim Examples meta name="keywords" content="template language" body h1 Markup examples #content.example1 p Nest by indentation = yield - unless items.empty? table - for item in items do tr td = item.name td = item.price - else p No items found #footer | Copyright ┬й 2010 Andrew Stone = render 'tracking_code' script | $(content).do_something(); 


рд╣реИрдо рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрдЬрд╛рдп <% =%> , = рдЪрд┐рд╣реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Html рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд┐рдирд╛ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдФрд░ рдХреЗ рд▓рд┐рдП ), - рд╕рд╛рдЗрди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Haml рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдИ% рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЯреИрдЧ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ <> рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл HTML рд╣реИ, рдЬреЛ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЗрдВрдбреЗрдВрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдкрдХреА рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реЗ рдХрдо рдирд╣реАрдВред

рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА:

 |    ,     .    ""  . '       ,     . -      Haml,   ,   ,      <% ... %> =     <%= ... %>,    html ='     ,      . ==     ,    " ",    escape_html =='  ,   ,     . /  .         html . /!   html  (<!-- -->),    . 


рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдЖрдИрдбреА рдФрд░ рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╛рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 blockquote id="quote-#{@quote.id}" class="quote" p class="title" = @quote.title p style="padding:1em;" = @quote.body 


Haml рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП:
 %blockquote{:id => "quote-#{@quote.id}", :class => "quote"} %p{:class="title"}= @quote.title %p{:style => "padding:1em;"}= @quote.body 


рд╕реНрд▓рд┐рдо рднреА рдХрдИ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 /    .   , ,    Haml' #nav.top div id="nav" class="top" /       h1 class=page_header_class = page_header h1{class=page_header_class} = page_header h1[class=page_header_class] = page_header h1(class=page_header_class) = page_header 


рдПрдХ рдФрд░ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдКрдкрд░ рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ page_header_class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
 #    ,  . a href="#{url_for @user}" = @user.name #        "#{...}" a href=url_for(@user) = @user.name 


рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд рдЖрддрд╛ рд╣реИ, рддреЛ HTML рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА (Haml рдореЗрдВ):
 option value="Slim" selected=option_selected?("Slim") # -> <option value="Slim"></option> 


рд░реВрдмреА рддрд╛рд░ рдореЗрдВ рдЖрдк рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 body h1 , #{current_user.name} |     #{{content}}   ,    escape_html. 



рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
 #          /.comments - @comments.each do |comment| == render comment 


рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдбрдмрд▓ рдмрд░рд╛рдмрд░ рдЪрд┐рд╣реНрди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрд╕реНрдХреЗрдк_рдПрдЪрдПрдирдЬреА рджреЛ рдмрд╛рд░ рдХрд╛рдо рди рдХрд░реЗред

рд▓реЙрдЬрд┐рдХ-рдХрдо рдореЛрдб

 Slim::Engine.set_default_options :sections => true 

рдФрд░ рдпрд╣рд╛рдБ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 /     false  empty?,    h1   - article h1 = title 


 /  ,  article   false  empty?     -! article p    


рд╢рд╛рдпрдж, рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ - рдЪрд░ 'рд╢реАрд░реНрд╖рдХ' рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ? рд╕реНрд▓рд┐рдо рдЦреБрдж рдЙрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
 / If article.respond_to?(:title) - article /  article.send(:title) h1 = title 

 / If article.respond_to?(:has_key?) and article.has_key?(:title) - article /   article[:title] h1 = title 

 / If article.instance_variable_defined?(@title) - article /       article.instance_variable_get @title h1 = title 

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдзрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛

рд░реЗрд▓ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреИрд╢реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдорд╛рдирдХ рдПрд░реНрдм рд╕реЗ рдкрд╣рд▓реЗ рдЧрддрд┐ рдореЗрдВ рд╣реА рдкрд┐рдЫрдбрд╝ рдЬрд╛рдПрдВрдЧреЗ, рдЬрдм рд╡реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рдПрдХ рддреБрд▓рдирд╛ рдЪрд╛рд░реНрдЯ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕реНрд▓рд┐рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рд╣реЛрдЧрд╛:
 # Linux + Ruby 1.9.2, 1000 iterations user system total real (1) erb 0.680000 0.000000 0.680000 ( 0.810375) (1) erubis 0.510000 0.000000 0.510000 ( 0.547548) (1) fast erubis 0.530000 0.000000 0.530000 ( 0.583134) (1) slim 4.330000 0.020000 4.350000 ( 4.495633) (1) haml 4.680000 0.020000 4.700000 ( 4.747019) (1) haml ugly 4.530000 0.020000 4.550000 ( 4.592425) (2) erb 0.240000 0.000000 0.240000 ( 0.235896) (2) erubis 0.180000 0.000000 0.180000 ( 0.185349) (2) fast erubis 0.150000 0.000000 0.150000 ( 0.154970) (2) slim 0.050000 0.000000 0.050000 ( 0.046685) (2) haml 0.490000 0.000000 0.490000 ( 0.497864) (2) haml ugly 0.420000 0.000000 0.420000 ( 0.428596) (3) erb 0.030000 0.000000 0.030000 ( 0.033979) (3) erubis 0.030000 0.000000 0.030000 ( 0.030705) (3) fast erubis 0.040000 0.000000 0.040000 ( 0.035229) (3) slim 0.040000 0.000000 0.040000 ( 0.036249) (3) haml 0.160000 0.000000 0.160000 ( 0.165024) (3) haml ugly 0.150000 0.000000 0.150000 ( 0.146130) (4) erb 0.060000 0.000000 0.060000 ( 0.059847) (4) erubis 0.040000 0.000000 0.040000 ( 0.040770) (4) slim 0.040000 0.000000 0.040000 ( 0.047389) (4) haml 0.190000 0.000000 0.190000 ( 0.188837) (4) haml ugly 0.170000 0.000000 0.170000 ( 0.175378) 1.      .   ,   slow=1. 2.  .   .  Ruby         .     API . 3.  .    ,   ,  Ruby    .    ,          . 4.  Tilt-.     Tilt,              Sinatra, Ramaze and Camping. 

рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдкрд╣рд▓рд╛ - рдмрд┐рдирд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрдирд░реЗрдЯрд░ рдЬреЛрдбрд╝рдиреЗ (рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдордЪрд╛рди)ред рджреВрд╕рд░рд╛ - рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рдеред
 #     Slim gem 'slim' #    Slim   Scaffold' gem 'slim-rails' 
рдлрд┐рд░ рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рд░рддреНрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрдВрдбрд▓ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕реНрд▓рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрд░реНрдерд╛рдд, index.html.erb рдлрд╝рд╛рдЗрд▓ рдХреЛ Erb рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ index.html.slim рдлрд╝рд╛рдЗрд▓ рдХреНрд░рдорд╢рдГ рд╕реНрд▓рд┐рдо рд╣реЛрдЧреАред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ

slim-lang.com - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреГрд╖реНрда
github.com/stonean/slim - рдЬреАрдердм рдкрд░ рдкреГрд╖реНрда
github.com/fredwu/haml2slim - рд╕реНрд▓рд┐рдо рдХрдиреНрд╡рд░реНрдЯрд░ рдХреЛ рд╣реИрдо
github.com/fredwu/ruby-slim-tmbundle - TextMate рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓
github.com/bbommarito/vim-slim - рд╡рд┐рдо рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ

Source: https://habr.com/ru/post/In128645/


All Articles