Re: [RFC] Pipe Operator

From: Date: Fri, 29 Apr 2016 23:54:40 +0000
Subject: Re: [RFC] Pipe Operator
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-92967@lists.php.net to get a copy of this message
Hey, to me recursion and pipe operator looks really hard to read, I guess this is faster and better readable: foreach (scandir($arg) as $x) { if ($x == '.' || $x == '..') { continue; } $x = $arg . '/' . $x; // inline getFileArg ... $allFiles[] = $x; } Regards Thomas Bob Weinand wrote on 30.04.2016 01:37: > Hey, > >> Am 29.04.2016 um 21:58 schrieb Sara Golemon <pollita@php.net>: >> >> This is one of my favorites out of HackLang. It's pure syntactic >> sugar, but it goes a long way towards improving readability. >> https://wiki.php.net/rfc/pipe-operator > > Thanks for proposing, so that I am able to show what I don't like about the |> > pipe operator: > > In general, the pipe operator is hiding anti-patterns. It makes anti-patterns > look nicer. > > Take the first example: > > $ret = > array_merge( > $ret, > getFileArg( > array_map( > function ($x) use ($arg) { return $arg . '/' . $x; }, > array_filter( > scandir($arg), > function ($x) { return $x !== '.' && $x !== '..'); } > ) > ) > ) > ); > > Sure, it *looks* nicer with the pipe operator, if you really want to nest it. > But that nesting is horrible in itself. It should be written as: > > $files = array_filter(scandir($arg), function ($x) { $x != '.' && $x != > '..'; > }); > $fullPath = array_map(function($x) use ($arg) { return "$arg/$x"; }, $files); > $allFiles = array_merge($allFiles, getFileArg($fullPath)); > > By limiting the nesting level to 2, the code gets itself much more readable and > in addition, the variable names are self-explaining, so that you can jump right > in. > As already mentioned, the |> variant looks nicer than the above, but it still > lacks the most important part; documentation in form of obvious variable names > after each small step. > > It's always nice when code can look nicely, but this doesn't encourage writing > understandable code. This RFC is just providing another way to shoot any future > readers into the feet. > Readers want to quickly grasp what is going on. Having to follow a whole list > of operations whose result is written to a variable $ret is telling them > absolutely nothing. > > TL;DR: > -1: The |> pipe operator encourages a write-only style. > > Bob > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php >

« previous php.internals (#92967) next »