Carl Sassenrath, CTO REBOL Technologies 9-Apr-2006 21:59 GMT Article #0008

Les fonctions ordinales (first, second, etc.) ont été à l'origine conçues pour être assez strictes - principalement pour les débutants.

Par exemple :


print first tail "abc"
** Script Error: Out of range or past end

provoque une erreur. Cependant, la fonction pick n'en provoque pas :


print pick tail "abc" 1
none

Je pensais que cette différence était Ok, car les experts n'utilisent pas first. Cependant, je ne crois plus cela. Les fonctions ordinales sont des fonctions très efficaces et je tends moi-même à les utiliser comme des "sélecteurs" rapides dans des bouts de code comme celui-ci :


the-name: :first
the-email: :second
the-message: :third

send the-email data the-message data

Pour du code "haute performance", cette méthode est aussi rapide qu'il est possible.

Lorsque elle est utilisée dans des grandes boucles, elle est plus efficace en rapidité que de sélectionner les champs d'objets ( qui nécessitent à la fois une interprétation des paths et le binding durant l'exécution). En fait, j'utilise si souvent cette méthode, que j'avais implémentée une fonction ordain pour définir dans mon code les relations ordinales précédentes.

Il y a seulement un problème. L'erreur "past end" n'est pas souhaitée.

En REBOL 3.0, les changement dans l'implémentation des fonctions ordinales (depuis les fonctions d'action spécifiques aux datatypes jusqu'aux natives génériques) rend leur comportement similaire à pick, par défaut. L'erreur "past end" est maintenant supprimée.

Cela semble préférable, et la modification devrait conserver la compatibilité, car le cas "past end" rconduisait à une erreur (une exception) dans les versions précédentes, de sorte qu'il n'était pas utilisé dans le code existant.

Notez que ceci nécessitera certaines mises à jour mineures dans la documentation.

(Traduction : Philippe Le Goff)