[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 needed 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 situation 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 languages, 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: Łukasz Strzebińczyk
* Status: Feedback
* Priority: Low
* Assignee: Yukihiro Matsumoto
* Category: syntax
* Target version: 
----------------------------------------
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?



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

In This Thread

Prev Next