Fonction variadique

En programmation informatique, une fonction variadique est une fonction d'arité indéfinie, c'est-à-dire qui accepte un nombre variable de paramètres.

De nombreuses opérations mathématiques et logiques peuvent se représenter sous forme de fonctions variadiques. Par exemple, l'addition de nombres ou la concaténation de chaînes de caractères peuvent s'appliquer à un nombre arbitraire d'opérandes.

Implémentations

C

Le langage C permet la définition de fonctions variadiques.

Les exemples les plus connus sont les fonctions standard d'entrée-sortie printf et scanf.

La récupération des arguments se fait grâce au type va_list et aux macros va_start(), va_arg() et va_end() de <stdarg.h>. La fonction doit alors trouver un moyen de connaître le type des arguments qui lui ont été fournis, ceux-ci étant choisis par l'utilisateur. Néanmoins, le prototype d'une fonction variadique doit comporter au moins un paramètre muet dont le type est connu.

Exemple : la fonction suivante illustre l'utilisation de <stdarg.h>.

#include <stdio.h>
#include <stdarg.h>

/* Renvoie la moyenne des valeurs réelles passées en
   paramètres. Le premier paramètre, le nombre de valeurs,
   doit être strictement positif. Les suivants doivent être
   des nombres réels (de type float ou double, pas int)  */
double moyenne(int nb_valeurs, double valeur1, ...)
{
        double somme = valeur1;
        va_list params; // pointeur de la liste des paramètres
        va_start(params, valeur1); // initialise le pointeur grâce
                                   // au dernier paramètre fixe
        for (int i = 1 ; i < nb_valeurs ; ++i) {
                // récupérer le paramètre suivant de la liste:
                double valeur_suiv = va_arg(params, double); 
                somme += valeur_suiv;
        }
        va_end(params); // fermeture de la liste
        return somme / nb_valeurs;
}

int main(void)
{       // exemple d'utilisation :
        printf ("%.3f\n", moyenne(3, 14.5, 18.0, 17.5)); // affiche 16.667
        return 0;
}

Java

Les méthodes variadiques existent en Java depuis la version 5. Un paramètre (le dernier, s'il y en a plusieurs) peut être déclaré variadique en ajoutant trois points de suspension après son type. Ce paramètre sera en fait un tableau dont les éléments, du type déclaré, prendront les valeurs des paramètres effectifs multiples.

Exemple :

double moyenne(double... valeurs)
{
      double somme = 0;
      for (double valeur : valeurs)
            somme += valeur;
      return somme / valeurs.length;
}

L'invocation de cette méthode pourra se faire avec n'importe quel nombre de paramètres :

m1 = moyenne(14.5, 17, 15); // m1 = 15.5
m2 = moyenne(10);           // m2 = 10.0
m3 = moyenne();             // m3 = NaN

PHP

PHP, depuis la version 4, permet de définir des fonctions variadiques. Au sein d'une telle fonction, les paramètres peuvent être obtenus à l'aide des fonctions func_num_args(), func_get_arg() et func_get_args()[2].

Exemple de code :

// Avant PHP 5.3 :
function somme() {
    $args = func_get_args();
    return array_sum($args);
}

// Syntaxe autorisée depuis PHP 5.3 :
function somme() {
    return array_sum(func_get_args());
}

somme(2, 2); // renvoie 4

Depuis la version 5.6[3], il est possible (et préférable) d'utiliser l'opérateur ..., appelé splat operator :

function somme(...$termes) {
    return array_sum($termes);
}

De plus, depuis la version 7.0[4], il est possible de spécifier le type des paramètres :

function sommeEntiers(int ...$termes) {
    return array_sum($termes);
}

python

Exemple de code :

#!/usr/bin/env python
#-*- coding: utf-8 -*-
# Python 3.7

def moyenne(*argv) -> float:
    somme : float = 0
    for arg in argv:  
        somme = somme + arg
    return somme / len(argv)

if __name__ == '__main__':
    # exemple d'utilisation :
    print(moyenne(14.5, 18.0, 17.6)) # affiche 16.7

Tcl

Le langage Tcl] permet la définition de fonctions variadiques depuis le début.

Exemple de code :

proc moyenne args {
  if {[set n [llength $args]] == 0} {return 0}
  expr {[tcl::mathop::+ {*}$args] / double($n)}
}
moyenne 1 2 3 4 5 6 7 8 9 ; # affiche 5.0
moyenne 1 2 3 4 5 ; # affiche 3.0
moyenne 1 2 ; # affiche 1.5

Notes et références

Lien externe

Read other articles:

The Saga of the Viking Women and Their Voyage to the Waters of the Great Sea SerpentSutradaraRoger CormanPemeranAbby DaltonSusan CabotDistributorAmerican International PicturesTanggal rilis Desember 1957 (1957-12) Durasi71 menit.NegaraAmerika SerikatBahasaInggrisAnggaran$65,000 (perkiraan) The Saga of the Viking Women and Their Voyage to the Waters of the Great Sea Serpent (juga dikenal sebagai The Viking Women and the Sea Serpent) adalah film 1957 yang disutradarai oleh Roger Corman dan...

 

Albert BierstadtAlbert Bierstadt by Napoleon SaronyLahir(1830-01-07)7 Januari 1830Solingen, Rhine Province, JermanMeninggal18 Februari 1902(1902-02-18) (umur 72)New York City, A.S.KebangsaanAmerikaPendidikanDüsseldorf SchoolDikenal atasPaintingGerakan politikHudson River School Albert Bierstadt (7 Januari 1830 – 18 Februari 1902) adalah seorang pelukis Jerman-Amerika yang terkenal karena pemandangannya yang mewah dan luas di Amerika Barat. Dia bergabung dengan beberapa ...

 

Air warfare branch of Bahrain's military Royal Bahraini Air Forceسلاح الجو الملكي البحرينيEmblem of the Royal Bahraini Air ForceFounded1976; 48 years ago (1976)[1]Country BahrainTypeAir forceRoleAerial warfareSize1,500 personnel[2]118 aircraft[2]Part ofBahrain Defence ForceEngagementsGulf WarSaudi-led intervention in the Yemeni civil warCommandersCurrentcommanderMajor General Sheikh Hammad bin Abdullah Al KhalifaInsigni...

Basilika Tempat Ziarah Nasional Bunda Cinta Kasih, Santiago de Cuba Ini adalah daftar basilika di Kuba. Katolik Daftar basilika Gereja Katolik di Kuba[1]: Basilika Tempat Ziarah Nasional Bunda Cinta Kasih, Santiago de Cuba Basilika Bunda Cinta Kasih, Havana Basilika Katedral Bunda Maria dari Candelaria, Camagüey Basilika Katedral Bunda Maria Diangkat ke Surga, Santiago de Cuba Lihat juga Gereja Katolik Roma Gereja Katolik di Kuba Daftar katedral di Kuba Daftar basilika Referensi ^ Ba...

 

Campagne de Malaisie Les troupes japonaises avançant dans Kuala Lumpur. Informations générales Date 8 décembre 1941 - 31 janvier 1942 Lieu Malaisie britannique, frontière thaïlandaise Issue Victoire japonaise décisive, retraite alliée sur Singapour Changements territoriaux Occupation japonaise de la Malaisie Belligérants Empire du Japon Thaïlande Royaume-Uni Raj britannique Australie Nouvelle-Zélande Pays-Bas États malais fédérés Commandants Tomoyuki Yamashita Arthur Percival ...

 

Koordinat: 5°03′19″S 119°29′39″E / 5.0553468°S 119.4941828°E / -5.0553468; 119.4941828 TemmappaduaeᨈᨛᨆᨄᨉᨘᨕᨕᨙᨈᨆᨄᨑᨘᨕᨐDesaKantor Desa TemmappaduaeNegara IndonesiaProvinsiSulawesi SelatanKabupatenMarosKecamatanMarusuKode pos90551[1]Kode Kemendagri73.09.08.2001 Luas7,54 km² tahun 2017Jumlah penduduk3.093 jiwa tahun 2017Kepadatan410,21 jiwa/km² tahun 2017Jumlah RT12Jumlah RW2 Temmappaduae (Lontara Bugis: ᨈᨛᨆᨄ...

Paus bryde Balaenoptera brydei Perbandingan besar dengan manusiaTaksonomiSubkerajaanEumetazoaKladParahoxozoaKladBilateria$0NephrozoaSuperfilumDeuterostomiaFilumChordata$0OlfactoresSubfilumVertebrataInfrafilumGnathostomataMegaclassOsteichthyesSuperkelasSarcopterygiiKladDipnotetrapodomorphaKladTetrapodomorphaSuperkelasTetrapodaKladReptiliomorphaKladAmniotaKladSynapsidaKladEupelycosauriaKladSphenacodontiaKladSphenacodontoideaKladTherapsidaKladEutheriodontiaKladCynodontiaKladEpicynodontiaKladEucy...

 

Bladedance of ElementalersSampul novel ringan volume pertama精霊使いの剣舞(Seirei Tsukai no Bureidodansu)GenreLaga, komedi, harem Novel ringanPengarangYū ShimizuIlustratorHanpen Sakura (1–13)Yuuji Nimura (14–16)Kohada Shimesada (17–20)PenerbitMedia FactoryImprintMF Bunko JDemografiPriaTerbit24 Desember 2010 – 25 Maret 2019Volume20 + 1 spesial MangaPengarangYū ShimizuIlustratorHyōju IsseiPenerbitMedia FactoryPenerbit bahasa InggrisNA Digital MangaMajalahMonthly Comic AliveDem...

 

2000 single by Savage Garden AffirmationSingle by Savage Gardenfrom the album Affirmation Released10 January 2000 (2000-01-10)Length4:15Label Roadshow Music Warner Music Australia Songwriter(s) Daniel Jones Darren Hayes Producer(s) Walter Afanasieff Daniel Jones Darren Hayes Savage Garden singles chronology I Knew I Loved You (1999) Affirmation (2000) Crash and Burn (2000) Music videoAffirmation on YouTube Affirmation is a song by Savage Garden, released as the third single fro...

Rights of workers, unions, and duties of employers in the UK In the UK in 2021, of the total working population 32.5 million people were employed, there was 4.2% unemployment, and 6.6 million trade union members. The average income was £30,472, and the average working week was 36 hours.[1] United Kingdom labour law regulates the relations between workers, employers and trade unions.[2] People at work in the UK have a minimum set of employment rights,[3] from Acts of P...

 

2006–2011 German computer memory manufacturer Qimonda AGCompany typeAGIndustrySemiconductorsFounded2006Defunct2011FateFiled for bankruptcy in multiple jurisdictionsHeadquartersMunich, GermanyKey peopleKin Wah Loh(CEO)Thomas J. Seifert(CFO, COO)ProductsDRAMRevenueEuro 1.79 billion net sales (FY 2008)Number of employeesAround 13,500 at height (2007).[1] no official figures updated since restructuring Oct 2008Websitehttp://www.qimonda.com Qimonda 512 Mbit GDDR3 Qimonda AG (/ˌkiˈmoʊn...

 

Celtic tribe CatuvellauniGeographyCapitalVerulamium (St. Albans)LocationModern Bedfordshire, Buckinghamshire and Hertfordshire. (Also parts of Berkshire, Cambridgeshire, Essex, Greater London and Oxfordshire.)RulersTasciovanusCunobelineCaratacusTogodumnusEpaticcus Catuvellauni, Tasciovanus, Hidden Faces gold stater. Obv: stylized crescents and wreaths with hidden faces. Rev: Celtic warrior on horse right, carrying carnyx. The Catuvellauni (Common Brittonic: *Catu-wellaunī, war-chiefs) were a...

Alicia AyliesAlicia Aylies pada Miss France 2017.Lahir21 April 1998 (umur 26)Fort-de-France, Martinique, PrancisPekerjaanModelKota asalCayenne, Guyana Prancis, PrancisTinggi178 cm (5 ft 10 in)GelarMiss French GuianaMiss France 2017Pemenang kontes kecantikanWarna rambutHitamWarna mataHijauKompetisiutamaMiss Guyane 2016(Juara)Miss France 2017(Juara)Miss Universe 2017(Peserta) Alicia Aylies, (lahir 21 April 1998) adalah model berkebangsaan Prancis. Dia memenangi kontes ...

 

Den här artikeln behöver källhänvisningar för att kunna verifieras. (2015-01) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. KékesKékes är Ungerns högsta berg och ligger i kedjan Mátra. Toppen ligger 1 014 meter över havet. Namnet Kékes kommer från bergets blåaktiga färg. På ungerska betyder kék blå medan kékes betyder blåa...

 

Part of the Sioux Wars Red Cloud's WarPart of the Sioux WarsBattle locationsDate1866–1868LocationPowder River CountryResult Native American victoryBelligerents  United StatesCrow Nation LakotaNorthern CheyenneNorthern ArapahoCommanders and leaders Henry B. CarringtonWilliam Fetterman † Red CloudCrazy HorseMan Afraid Of His HorsesHigh BackboneStrength 700 soldiers300 civilians 1,500–2,000Casualties and losses ~200 killed[1] UnknownvteSioux Wars First Sioux War Dakot...

Sungai UpanoSungai Upano, LogroñoPeta OpenStreetMap Tampilkan peta yang diperbesarTampilkan peta yang diperkecilTampilkan peta penuhKoordinat:2°45′27.259″S 78°16′29.449″W / 2.75757194°S 78.27484694°W / -2.75757194; -78.274846942°8′23.78″S 78°30′31.824″W / 2.1399389°S 78.50884000°W / -2.1399389; -78.50884000LokasiCountryEkuador Sungai Upano adalah sebuah sungai di Ekuador. Sungai ini mengalir dari Sierra hingga kedalaman ...

 

ДоменикиноDomenichino Портрет Доменикино. Заставка из книги «Фельсина-художница» К. Ч. Мальвазиа. 1678Исследовательский институт Гетти[англ.], Лос-Анджелес Имя при рождении итал. Domenico Zampieri Дата рождения 21 октября 1581(1581-10-21) Место рождения Болонья Дата смерти 15 апреля 1641(1641-04-...

 

German painter This article is about the painter. For the American author, see Karl Hess. For the scientist, see Karl Hess (scientist). Portrait of a priest (Karl Hess, 1820s) Karl Hess (1801 in Düsseldorf – 16 November 1874 in Bad Reichenhall) was a German painter. Biography Hess was the third son of Carl Ernst Christoph Hess, an engraver. The elder Hess had already acquired a name when in 1806 the elector of Bavaria, having been raised to a kingship by Napoleon, transferred the Düsseldo...

1900 battle of the Second Boer War Some of this article's listed sources may not be reliable. Please help improve this article by looking for better, more reliable sources. Unreliable citations may be challenged and removed. (January 2024) (Learn how and when to remove this message) Battle of Faber's PutPart of Second Boer WarDate29–30 May 1900LocationFaber's Put, Cape Colony, South AfricaResult British victoryBelligerents  United Kingdom Canada  South African RepublicCommand...

 

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages) The topic of this article may not meet Wikipedia's notability guidelines for products and services. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to ...