On Monday, 23 March 2015 at 11:31:16 UTC, FG wrote:
And honestly, compared to
File("/tmp/a").byChunk(4096).joiner.startsWith(s)
you can *easily* guess that you have a file - do some
nonobvious magic on it - and check if *it* starts with `s`
just by reading it as plain English.
Now you've injured yourself with your own weapon. I can guess
that File(path) opens the file for reading (probably because of
other language libraries)
That's why I used the word "guess" ;)
and that byChunk(size) reads it one chunk at a time (but
frankly only because it looked similar to byLine which I've
known before), but what the hell is joiner? Does it glue ranges
together so that they appear as a single contiguous one? Oh,
wait, I may have actually read about it somewhere already. But
if I didn't, I wouldn't have a clue.
I'd argue that joiner is intuitive enough, but I agree on
byChunk. I am also baffled why this byLine/byChunk madness is
necessary at all, it should be something like
File("path").startsWith(s)
or
File("path").data.startswith(s)
The same goes for stdin, something as simple as cin >>
intvariable in C++ rises to an almost insurmountable task in D.
What should start with s? The file, any chunk, the joiner -
whatever it meant? It is much clearer than the loop, but I'm
not sure I'd guess what it does, because of the two middle
elements in the UFCS chain. This *nonobvious magic* may have
transformed the contents of the file in a way that makes
startsWith(s) do something different.
You're right, I didn't even think of that.