Ruby best practice : if not empty each do else in one operator

What about?

array.each do |x|
  #...
  puts "x",x
end.empty? and begin
  puts "empty!"
end

The cleanest way I've seen this done in HAML (not plain Ruby) is something like:

- array.each do |item|
    %li
        = item.name
- if array.empty?
    %li.empty
        Nothing here.

As mentioned by other answers, there is no need for the else clause because that's already implied in the other logic.

Even if you could do the each-else in one clean line, you wouldn't be able to achieve the markup you're trying to achieve (<p> if array.empty?, <ul> if array.present?). Besides, the HAML you show in your question is the best way to tell the story behind your code, which means it will be more readable and maintainable to other developers, so I don't know why you would want to refactor into something more cryptic.


If array is empty, then it will not be iterated, so the each block does not need to be conditioned. Since the return value of each is the receiver, you can put the each block within the empty? condition.

if (array.each do |el|
  # process el
end).empty?
  # process empty array
end

I think there is no much more elegant or readable way to write this. Any way to somehow combine an iteration with a condition will just result in blackboxed code, meaning: the condition will just most likely be hidden in an Array extension.