Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > F#
F# Forum d'entraide sur la programmation en langage fonctionnel F#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/06/2009, 21h10   #1
Herwin78800
Membre habitué
 
Inscription : novembre 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : novembre 2006
Messages : 79
Points : 129
Points : 129
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
Herwin78800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2009, 00h55   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
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.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web