Wikipédia abstraite/Mises à jour/2022-01-28
◀ | Actualités de la Wikipédia abstraite | ▶ |
Depuis le début du projet, nous avons publié le modèle des fonctions Wikifonctions, mais la description est plutôt technique et peu attrayante. Dans les Mises à jour, nous avons précédemment décrit des parties du modèle de fonction de manière plus accessible : qu’est-ce qu’un objet, à quoi servent les fonctions, libellés et documentation, que sont les types génériques et pourquoi nous autorisons plusieurs mises en œuvre par fonction.
Aujourd’hui, abordons une préoccupation centrale : comment représente-t-on une fonction ?
Qu’est-ce qu’une fonction ? Le terme « fonction » est utilisé dans différentes disciplines. Les éditions en anglais ou en français de Wikipédia proposent des articles sur les fonctions en informatique, mathématiques, linguistique, biologie, ingénierie et sociologie. Toutes ces notions sont liées et intéressantes et pour les fonctions Wiki nous utilisons la définition spécifique suivante : une fonction prend une entrée et répond avec une sortie. L’entrée affecte la sortie de manière prévisible.
À quoi servent les fonctions ? Nous avons déjà discuté de la motivation générale pour les fonctions : les fonctions répondent aux questions et répondre aux questions est un élément crucial pour permettre à chacun d’accéder à la somme de toutes les connaissances. Les fonctions seront le type central d’objets dans Wikifonctions. Les personnes utilisant Wikifonctions pourront « appeler » ou utiliser des fonctions pour répondre à leurs questions. Les personnes contribuant à Wikifonctions pourront définir de nouvelles fonctions et créer les objets liés.
Comment représentons-nous une fonction ? Voici une vue générale de la façon dont une fonction est représentée dans Wikifonctions et les objets associés qui la supportent (nous les détaillerons ci-dessous) : une fonction a des libellés, des alias, une documentation, un type de retour et une liste d’arguments, une liste de testeurs, une liste de mises en œuvre et une identité. (Nous ne parlerons pas d’identité aujourd'hui, car c’est plutôt technique)
Libellés. On définit une fonction en lui donnant un libellé, un nom. Le libellé dépend de la langue : une fonction qui additionne deux nombres peut s’appeler « Addition » en anglais, « Zbrajanje » en croate, « Сложе́ние » en russe, « যোগ » en bengali, etc. Elle peut également avoir des alias qui aideront les gens à trouver la bonne fonction : « Add », « Sum » ou « Plus » pourraient être de bons alias en anglais, « прибавле́ние » pourrait être un alias en russe et « + » pourrait être un alias qui fonctionne dans de nombreuses langues.
Documentation. Une fonction aura aussi souvent de la documentation ― du texte qui décrit ce que fait la fonction et comment elle le fait. Cela devrait aider les gens à différencier des fonctions similaires et à permettre aux utilisateurs de comprendre ce que l’appel de cette fonction renverra et comment cela répond à leurs questions. Nous avons déjà discuté des libellés, alias et documentations.
Type de retour. Le type de retour nous indique quel type d’objet sera la réponse de la fonction. Par exemple : « nombre », « booléen » pour vrai / faux, « chaîne » pour des mots, etc. Cela peut être utile à maints égards : cela peut aider lors de la navigation dans les fonctions disponibles, car nous savons parfois que notre réponse sera un numéro ; cela peut aider lors de la combinaison de fonctions, car nous savons qu’un argument ne peut prendre qu’un type spécifique et que nous pouvons le composer avec une fonction qui renvoie le type requis. Le type de retour peut également nous aider à comprendre la fonction et ce qu’elle renvoie exactement. Pour les deux fonctions « diviser » mentionnées ci-dessous, l’une renvoie un nombre et l’autre une liste de chaînes. Même sans documentation pour la fonction dans notre langue, cela donnera des indices solides sur ce qu’elle peut faire.
Liste des arguments. Une fonction prend des entrées. L’entrée est donnée sous la forme d’un ou plusieurs arguments. Chaque argument peut avoir un libellé ou nom (encore une fois, donné dans chacune des langues que nous prenons en charge) et le type d’objet que nous attendons de cet argument. Le type est important : disons que vous avez une fonction appelée « diviser », qui prend une chaîne et un nombre et qui divise la chaîne donnée en parties de taille égale. Donc, vous appelez « diviser “Wikipédia” en 3 parties » et la fonction répond par “Wik”, “ipé” et “dia”. Séparément, il existe une autre fonction, également appelée « diviser », qui prend deux nombres, pour déterminer combien de fois le premier entre dans le second. Ce sont deux fonctions très différentes et le résultat de « diviser(333, 3) » peut être 111 ou bien 3, 3 et 3 ― selon la fonction que vous avez choisie et les types de valeurs.
La fonction de division de nombres démontre aussi le besoin de nommer les arguments : dans ce cas, il est important de savoir quel argument est le nombre par lequel nous divisons et quel est le nombre qui est divisé. Dans d’autres cas, le nom des arguments est moins important : pour la fonction « diviser une chaîne en parties égales », les types suffisent pour savoir quel argument fait quoi.
Liste des testeurs. Les testeurs joueront un rôle crucial dans les fonctions Wiki, pas seulement en remplissant le rôle standard des tests. Traditionnellement, un test vise à donner à l’utilisateur une certaine confiance dans le fait qu’une fonction renvoie effectivement la bonne réponse. Lorsqu’une fonction passe ses tests avec succès, il est probable que la fonction renverra la bonne réponse également pour d’autres arguments. Un ensemble de tests bien conçu peut explorer les « cas limites » de ce qui est attendu lorsque vous appelez une fonction avec une entrée surprenante.
Mais dans Wikifonctions, les testeurs feront tellement plus ! Lorsqu’un contributeur crée la fonction qui divise une chaîne en parties de même longueur, il pourrait immédiatement donner des exemples de ce qu’il voulait : il peut créer un testeur qui, étant donné que nous voulons transformer « Wikipédia » en trois parties égales, nous voulons obtenir un résultat qui est une liste de trois chaînes, « Wik », « ipé » et « dia ». Quelle que soit la langue qu’ils parlent, tous les autres contributeurs peuvent voir les résultats attendus d’une manière bien définie et peuvent aider à créer des implémentations qui passent les testeurs.
Les testeurs agissent comme un moyen d’obtenir un accord entre les personnes contribuant à Wikifonctions sur ce que fait exactement une fonction, quelle que soit la langue qu’ils parlent. Les testeurs sont là où des cas extrêmes peuvent être suggérés, acceptés ou rejetés (et comment ils doivent être résolus). Les testeurs limitent finalement ce que sont les mises en œuvre « correctes » de la fonction et donc précisément ce que la fonction est censée faire.
Cela signifie également que les testeurs sont une forme de documentation indépendante de la langue, car ils fournissent des exemples de la façon dont la fonction est appelée et des résultats attendus. Ainsi, même s’il n’y a pas de documentation disponible dans votre langue, les testeurs peuvent toujours permettre de deviner ce que fait une fonction et de l’utiliser de manière productive.
Liste des mises en œuvre. Une mise en œuvre (implementation en anglais) permet d’exécuter réellement la fonction sur les arguments donnés et de produire un résultat pour répondre à l’appel de la fonction. Dans Wikifonctions, les mises en œuvre peuvent être données de trois manières différentes : soit en tant que fonction intégrée, soit en tant que code dans un langage de programmation spécifique, soit en tant que composition d’autres fonctions. Nous en avons déjà parlé et nous avons expliqué pourquoi nous adoptons la façon inhabituelle d’autoriser plusieurs mises en œuvre pour une fonction.
Nous espérons que cela aide à mieux comprendre les fonctions, les testeurs et les mises en œuvre.