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