Ranges
Ali Çehreli
acehreli at yahoo.com
Thu Aug 4 22:07:56 UTC 2022
On 8/4/22 06:08, pascal111 wrote:
> In next code from
> "https://www.tutorialspoint.com/d_programming/d_programming_ranges.htm",
That page seems to be adapted from this original:
http://ddili.org/ders/d.en/ranges.html
> we have two issues:
>
> 1) Why the programmer needs to program "empty()", "front()", and
> "popFront()" functions for ranges
The programmer almost never needs to implement those functions. Existing
data structures and algorithms are almost always sufficient. (I did need
to implement them but really rarely.)
I tried to explain what those functions do. I don't like my Students
example much because wrapping a D slice does not make much sense. Again,
I just try to explain them.
> while they exist in the language
> library?
The existing front, popFronh, etc. are only for arrays (slices).
> it seems there's no need to exert efforts for that.
Exactly.
> "https://dlang.org/phobos/std_range_primitives.html"
>
> 2) "front()", and "popFront()" are using fixed constants to move forward
> the range, while they should use variables.
Well, 0 is always the first element and 1..$ are always the rest.
Variables would not add any value there.
However, the example could use the existing library function that you
mention:
> @property bool empty() const {
> return students.length == 0;
Better:
import std.array : empty;
return students.empty;
> }
> @property ref Student front() {
> return students[0];
Better:
import std.array : front;
return students.front;
> }
> void popFront() {
> students = students[1 .. $];
Better:
import std.array : popFront;
students.popFront();
But I think those implementations might confuse the reader.
Ali
More information about the Digitalmars-d-learn
mailing list