+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Nouveau Membre du Club
    Inscrit en
    novembre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : novembre 2006
    Messages : 79
    Points : 26
    Points
    26

    Par défaut Boucle For en F#

    Bonjour,

    Je voudrais traduire en F# cette boucle écrite en C#
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int i = 0;
    byte[] tabAdresseIP = new byte[4];
    
    foreach(string chainonIP in str.Split('.'))
                {
    
                    tabAdresseIP[i]= Convert.ToByte(chainonIP);
                    i++;
                }
    Merci

  2. #2
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 263
    Points
    1 263

    Par défaut

    Une traduction littérale (déconseillée) est :
    Code :
    1
    2
    3
    4
    5
     let mutable i = 0
     let tabAdresseIP = Array.zero_create 4
     for chainonIP in str.Split([|'.'|]) do
        tabAdresseIP.[i] <- Convert.ToByte(chainonIP)
        i <- i + 1
    Le problème de ce code, c'est que l'on fait des mutations inutiles de variables. La création d'un tableau non initialisé est dangereux (une alternative un poil plus jolie est "Array.create 4 0uy"). L'accès direct au tableau est aussi à éviter : il y a toujours un risque d'inattention et d'accès à un élément hors tableau.

    Une approche plus idiomatique et plus propre est :
    Code :
    let tabAdresseIP = str.Split([|'.'|]) |> Array.map byte
    Autre possibilité, si tu n'es pas habitué à map :
    Code :
    [|for b in str.Split([|'.'|]) -> byte b|]
    Au final, c'est plus court, plus sûr et plus lisible que le code initial.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •