From: matthew@... Date: 2016-02-26T05:22:06+00:00 Subject: [ruby-core:74000] [Ruby trunk Feature#12075] some container#nonempty? Issue #12075 has been updated by Matthew Kerwin. Nobuyoshi Nakada wrote: > First, along this line, we'll need negative forms for all predicate methods. > > And I think `nil.empty?` makes no sense. > > Just an idea: > > ```ruby > module Kernel > def not(*a) > not a.empty? ? self : __send__(*a) > end > end > > ary = nil; ary&.not(:empty?) #=> nil > ary = []; ary&.not(:empty?) #=> false > ary = [nil]; ary&.not(:empty?) #=> true > ``` I like this proposal. I definitely prefer the word 'not' over the symbol '!', because `ary&.!:empty?` has too much consecutive punctuation for my eyes. Would there be value in extending it to accept a block? ```ruby module Kernel def not(*a, &b) not a.empty? ? self : __send__(*a, &b) # or even: #not a.empty? ? (b ? yield self : self) : __send__(*a, &b) end end ary = []; ary&.not(:any?){|x|x>0} #=> true ary = [1]; ary&.not(:any?){|x|x>0} #=> false ``` ---------------------------------------- Feature #12075: some container#nonempty? https://bugs.ruby-lang.org/issues/12075#change-57154 * Author: Yui NARUSE * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto ---------------------------------------- I sometimes write following code. ``` ary = some_metho_returns_nil_or_empty_container() # nil or "" or [] or {} if ary && !ary.empty? # some code end ``` But the condition `ary && !ary.empty?` is too long and complex. Though Ruby 2.3 introduces `&.`, but this can���t be written as `ary&.empty?`. One idea is add `nonempty?` write as `ary&.nonempty?`. akr: `nonempty?` is not good name because human is not good at handling This discussion matches following core classes: * String * Array * Hash -- https://bugs.ruby-lang.org/ Unsubscribe: