[ruby-core:62820] [ruby-trunk - Feature #9867] Introduce each/else block into ruby

From: rr.rosas@...
Date: 2014-05-28 11:13:31 UTC
List: ruby-core #62820
Issue #9867 has been updated by Rodrigo Rosenfeld Rosas.


Ah, now I see. Indeed it would be useful for templates processing. Since I =
barely write any ERB those days, that's probably the reason why I never nee=
ded something like that... For example, this is how I'd handle those cases =
usually in my methods:

~~~
(do_something_else; return) if array.empty?
array.each {...}
~~~

But even this is not that much common in my code. Way more common is the si=
tuation where a variable could be even an array or not be present (in which=
 case I'd get nil). In such cases I often write code like:

~~~
(hash[:array] || []).each{...}
# or:
Array(hash[:array]).each{...}
~~~

But I can definitely see how your proposal would be useful for template lan=
guages, like ERB.

It's also interesting to point out that other people seem to be interested =
on a better approach for handling this case:

http://stackoverflow.com/questions/1027871/rails-an-elegant-way-to-display-=
a-message-when-there-are-no-elements-in-databas

Here's one suggested idiom for dealing with it that you might consider:

~~~
<% if @messages.each do |message| %>
  <%# code or partial to display the message %>
<% end.empty? %>
  You have no messages.
<% end %>
~~~

----------------------------------------
Feature #9867: Introduce each/else block into ruby
https://bugs.ruby-lang.org/issues/9867#change-46944

* Author: =C5=81ukasz Strzebi=C5=84czyk
* Status: Feedback
* Priority: Low
* Assignee: Yukihiro Matsumoto
* Category: syntax
* Target version:=20
----------------------------------------
Hi

Code like this happens quite often:

    if array.any?
      array.each do |elem|
        some_work
      end
    else
      do_something_else
    end

I was thinking if it was possible, to introduce syntax like this:

    array.each do |elem|
      some_work
    else
      do_something_else
    end

where code in else would fire if array is empty. This would simplify a lot =
of code nicely and would be completely backwards compatible. Is that a good=
 idea?



--=20
https://bugs.ruby-lang.org/

In This Thread

Prev Next