Re: [RFC] Global functions any() and all() on iterables

From: Date: Sat, 06 Feb 2021 15:00:43 +0000
Subject: Re: [RFC] Global functions any() and all() on iterables
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-113102@lists.php.net to get a copy of this message
Hi internals, > I've created an RFC for > https://wiki.php.net/rfc/any_all_on_iterable > > This was proposed 2 days ago in > https://externals.io/message/111711 with some interest > ("Proposal: Adding functions any(iterable $input, ?callable $cb = null, int $use_flags=0) > and all(...)") > > - The $use_flags parameter was removed > > The primitives any() and all() are a common part of many programming languages and help in > avoiding verbosity or unnecessary abstractions. > > > - https://hackage.haskell.org/package/base-4.14.0.0/docs/Prelude.html#v:any > > - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some > - https://docs.python.org/3/library/functions.html#all > > - https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#allMatch-java.util.function.Predicate- > > For example, the following code could be shortened significantly > > ``` > // Old version > $satisifies_predicate = false; > foreach ($item_list as $item) { >     if (API::satisfiesCondition($item)) { >         $satisfies_predicate = true; >         break; >     } > } > if (!$satisfies_predicate) { >     throw new APIException("No matches found"); > } > > // New version is much shorter and readable > if (!any($item_list, fn($item) => API::satisfiesCondition($item))) { >     throw new APIException("No matches found"); > } > ``` > > That example doesn't have any suitable helpers already in the standard library. > Using array_filter would unnecessarily call satisfiesCondition even after the first item was > found, > and array_search doesn't take a callback. > > A proposed implementation > is https://github.com/php/php-src/pull/6053 - it takes similar > flags and param orders to array_filter(). The implementation and RFC https://wiki.php.net/rfc/any_all_on_iterable have been updated after finishing the previous straw poll: https://wiki.php.net/rfc/any_all_on_iterable_straw_poll_namespace This is now a vote on PHP\iterable\any(iterable $input, ?callable $callback = null) and PHP\iterable\all(...). A secondary vote was added for choosing between any/all and any_value/all_values within PHP\iterable. I plan to start the vote on Monday. Any other feedback? Thanks, - Tyson

« previous php.internals (#113102) next »