2011-08-13 7 views
6

Ma question est la langue transcendante, j'ai souvent trouvé des prototypes de fonctions "copy" définissant des paramètres dans l'ordre: argument1: "destination" puis argument2: "source". C'est le cas de memcpy par exemple en C. Mais ce n'est PAS le cas de la copie de fichier sur bash! Vous dites, par exemple: "$ cp file file2" où file2 est le nouveau fichier. Ce qui me fait beaucoup plus de sens, nous disons toujours "copier ce texte ici s'il vous plaît" et non "copier ici ce texte" qui est Yoda-esque. Donc, la vraie question est: une bonne API devrait utiliser quelle forme (ordre)? et peut-être une autre question subsidiaire: quelle forme tout le monde attend-il, s'il y en a?qui est mieux "destination, source" ou "source, destination"?

+0

Cette question a déjà été posée ici. J'essaie de le trouver, cependant, aidez-moi. :) – Shi

+0

Je ne trouve plus la réponse, donc je donne un bref résumé: l'assemblage x86 utilise "mnemocode destination, source", comme "mov ah, 17h", à l'école on apprend que "y = 17 * x", et en parlant nous disons "y est 17 fois x". Et dans la plupart des langues (naturelles), le sujet vient avant le verbe. Donc encore, "y est 17 fois x". Mais en même temps, si vous déplacez une boîte, vous dites: «déplacez cette boîte là-bas à côté du mur». Dans ce cas, la source ("quoi" = sujet) est la première et la seconde destination. – Shi

+0

@shi, notez que lorsque vous utilisez du gaz (l'assembleur GNU), il est inversé: 'mv $ 17,% ah', donc je ne suis pas sûr que l'assemblage soit un bon argument. –

Répondre

3

Je m'attends à ce que la source arrive en premier et la destination plus tard.

Si vous pouvez désambiguïter dans la langue, ce serait mieux. Par exemple, dans un langage OO:

source.copyTo(destination); 

Dans une langue avec des paramètres nommés:

copy(source: s, destination: d); 

L'important est de faire clairement ce qui se passe pour les gens lecture le code. Le code est plus souvent lu qu'il est écrit.

0

J'ai toujours préféré la source-destination (je pousse d'ici à là), mais cela dépend probablement aussi de l'appel. Si c'est seulement une 'copie' dont vous parlez, je pense que cela fonctionne. Je suis sûr qu'il y a d'autres appels orientés que dest-source s'appliquerait mieux.

Questions connexes