J'ai recherché dans tous les fichiers Emacs Lisp dans le repo Emacs Git, et j'ai trouvé (goto-char (point-min))
se produit 3621 fois et (goto-char 1)
se produit 31 fois. Personnellement, j'en vois beaucoup (point-min)
mais aucun 1
, même dans de nombreux cas, c'est sûr à 100% que la région n'est pas rétrécie. Voici donc ma question: est (point-min)
toujours préféré que 1
même dans un tampon non rétréci?
Je suppose que 1
c'est plus rapide que (point-min)
, peu importe à quel point il est léger, car il 1
est constant tout en (point-min)
étant un appel de fonction. En outre, 1
est beaucoup plus court que (point-min)
1 caractère contre 11 caractères.
Réponses:
Comment savez-vous que le tampon n'est pas réduit?
À moins que vous ne l'ayez élargi juste avant d'appeler la fonction, vous ne pouvez pas en être sûr. De plus, un "excellent logiciel" est souvent défini comme "étant utilisé d'une manière que l'auteur n'a jamais envisagée" - il faut donc toujours être prêt pour l'utilisation inhabituelle de son code.
La lisibilité du code est roi
Lorsque vous écrivez
(goto-char 1)
, la personne qui lit le code (y compris vous 6 mois plus tard) passera une réflexion sur le cerveau précieuxFondamentalement, sauf si vous l'avez
(widen)
déjà fait, vous avez besoin d'un commentaire expliquant pourquoi vous êtes sûr que le tampon n'est pas réduit.Le coût est insignifiant
Sauf si vous avez profilé votre code et constaté le contraire, une hypothèse sûre est que le coût ici sera trivial. Comparé à toutes les autres choses qu'ELisp fait (réseau, accès au disque, même correspondance de chaînes),
(point-min)
n'aura pas un coût significatif (et pourrait même être moins cher , voir la réponse de Stefan).la source
point-min
est généralement plus générale que celle qui utilise1
- elle peut généralement fonctionner que la région soit restreinte ou non.Compléter la réponse de sds (avec laquelle je suis entièrement d'accord), malgré les apparences,
(point-min)
peut être plus efficace que1
. En termes de vitesse d'exécution, mes tests ne voient aucune différence mesurable, mais en termes de taille:C'est parce qu'il
point-min
a son propre code d'octet, et est donc codé et exécuté très efficacement par rapport aux autres appels de fonction.Bien sûr, une autre raison pour laquelle j'utilise
point-min
est que je considère le choix historique de1
comme une erreur (les tampons auraient dû commencer à 0).la source
point-min
est légèrement plus petit? On dirait une raison assez dérisoire. Pourquoi y attacher de l'importance? Ou peut-être que votre réponse était vraiment un commentaire , juste pour corriger l'hypothèse que l'un est plus performant que l'autre ou que le1
code d'octets est plus petit?