• [^] # Re: Pffff...

    Posté par (site web personnel) . En réponse au journal Un compte rendu de la conf sur isaac/lisaac. Évalué à 3.

    C'est la aussi ou on voit toute la puissance des itérator de Sather. En Sather, les classes ont des attributs, des méthodes et des itérators. Le gros avantage est de pouvoir itérer sur plusieurs iétrateurs dans une même boucle et le compilateur peux optimiser en mettant toute la partie initialisation en dehors de la boucle. L'autre gros avantage, il n'y a plus de structure for, while until ! Inutile, dépassé. for devient l'iterator upto! sur les entiers
    for (i=1, 1000) {....} 
    
    devient
    loop
     1.upto!(1000)
     ....
    end
    
    Idem pour while
    while (test) {....}
    
    qui devient
    loop
     while!(test)
     ...
    end
    
    L'itérator while! est appellé sur aucun objet. En fait, on pourrait le mettre sur un objet booléen #BOOL, true ou false et considérer que cette notation n'est que du "syntatic sugar". Bref, tout un tas de structure devienne bien plus simple avec cette notion d'itérator. La contruction de l'itérator while! est très simple (les autres aussi), en voici un exemple d'implémentation
    while!(pred:BOOL) is
     -- Yields as long as 'pred' is true
     loop
     if pred then
     yield;
     else
     quit;
     end;
     end;
    end;
    
    Si on s'authorise l'opérateur ? : du C, cela raccourci carrément le code
    while!(pred:BOOL) is
     loop
     pred ? yield : quit;
     end;
    end;