-
-
Save wayneeseguin/1095634 to your computer and use it in GitHub Desktop.
| # I have now programmed in a lot of languages, and one thing I can say for sure | |
| # is that shell scripting does construct end styles very well. | |
| # | |
| # Example from http://redmine.ruby-lang.org/issues/5054 | |
| # | |
| # This is indeed also one of my few personal issues with Ruby syntax, the end trail. | |
| # | |
| module MyModule | |
| class MyClass | |
| def my_method | |
| 10.times do | |
| if rand < 0.5 | |
| p :small | |
| end | |
| end | |
| end | |
| end | |
| end | |
| # For longer codebases, this lets you more clearly know where you stand and | |
| # what is being ended. | |
| module MyModule | |
| class MyClass | |
| def my_method | |
| 10.times do | |
| if rand < 0.5 | |
| p :small | |
| fi | |
| od | |
| fed | |
| ssalc | |
| eludom | |
| # And allow for shortened forms, | |
| module MyModule | |
| class MyClass | |
| def my_method | |
| 10.times do | |
| if rand < 0.5 | |
| p :small | |
| fi | |
| od | |
| ed #'end def' | |
| ec # 'end class' | |
| em # 'end module' | |
| # es => 'end case' | |
| # | |
| # I *am* ok with this also :) | |
| # | |
| module MyModule | |
| class MyClass | |
| def my_method | |
| 10.times do | |
| if rand < 0.5 | |
| p :small | |
| # Suggested by @elliottcable: | |
| module MyModule { | |
| class MyClass { | |
| def my_method { | |
| 10.times { # This one already works ;) | |
| if rand < 0.5 { | |
| p :small | |
| } | |
| } | |
| } | |
| } | |
| } | |
Oh and btw @ELLIOTTCABLE, your solution is discredited due to using tabs instead of spaces :P ::grin::
Gotta toss a whitespace-aware version in there! Python/Coffee/Haml-style.
Added @croaky :)
@wayneeseguin get yourself The Editor. Like Vim. ;)
Also, this example is somewhat a greenhouse one.
class MyModule::MyClass
def my_method
10.times { p :small if rand < 0.5 }
end
endIn other words, this is not a language problem.
I've been having this "problem" with dapper-dan, for instance:
html5 :root => true do
head do
title @title
description @description
keywords @keywords
stylesheet 'application.css' # Links to /asset/stylesheet/application.css
javascript 'application.js' # Links to /asset/javascript/application.js
end
body do
header do
render :partial => :header
end
# This is where Rails puts all the content from a view...
article :id => 'content', :class => '3column' do
yield
end
footer do
render :partial => :footer
end
end
endThe first recourse is to partialize the code, but that only makes other problems more prominent. In my case, however, your solution does very little! I know I'm going to hate myself for suggesting it, but what if there was:
if true
while true
some_method do
...
/some_method
/while
/ifYou might want to bring those up here.
@rkh you mean in the url I linked to at the top of the gist? :)
@cheba the example is contrived yes, I nabbed it from the discussion is all. It is only meant to exhibit an 'end trail'
@wayneeseguin You just put that there, right? :D
@rkh I'd claim that was true however the git history would prove me wrong ;)
Well shit, if this is going to go on like this:
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
end:if
end:do
end:def
end:class
end:moduleShort-hand ?:
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
end:if:do:def:class:moduleVery short-hand:
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
end:allAnd double hell with it. Let Ruby support Python style indention if : is used.
module MyModule:
class MyClass:
def my_method:
10.times do:
if rand < 0.5:
p :smallPostfixing the name of the start does not solve the problem.
- You write twice as much in most cases, you're now writing XML plus an extra character.
- This only looks swell if you're writing a module, with a single class, with a single method, with a single block, with a single if condition.
- Still requires you to keep track of the other end, which is the bigger problem here.
And while the joke continues here's a lovely one:
module MyModule
| class MyClass
| | def my_method
| | | 10.times do
| | | | if rand < 0.5
| | | | | p :small.i .ui!
how about,
module.MyModuleclass.MyClassdef.my_method10.times.doif(rand < 0.5)~p :small
Had to see that all hi-litey
module.MyModule~class.MyClass~def.my_method~10.times.do~if(rand < 0.5)~p :smallEek! It sucks :-D
Perhaps we can strip out even more characters and go the minimalistic approach! ;)
Hah. Yes, we had a long discussion about using Unicode box-drawing characters to denote blocks early-on in the development of Paws; I think we’ll have at least one patois playing with things like that in the long run.
Er, what do you mean tabs? I haven’t used a hard-tab in a fuckin’ decade! In fact, despite the shitstorm it abused, my language downright doesn’t allow hardtabs instead. #ew
This gist provides quite a lot of food-for-thought as a developer of a nascent programming language.
Now, that said, PLEASE STOP STUFFING MY INBOX WITH NOTIFICATIONS ;_;
@ELLIOTTCABLE I dont believe there is currently a way to 'unsubscribe' from a gist notification feed?
No, there’s not. And that’s the point of my all-caps request. ;D
HELLO GUYS HOW ARE YOU?
Also, IMHO if you want to go the bracket route then we might as well adopt python style syntax indentation and not even need them :)