Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 juil. 2006 à 08:12
on est d'accord ^^
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009 27 juil. 2006 à 16:49
Oui, tester le type est une bonne alternative à un wrapper (pas ma solution préférée, mais une bonne idée, c'est sur).
Concernant le tri, c'est certes une bonne idée mais ma rêgle en matière de design applicatif est "A chacun son métier, et les vaches seront bien gardées", i.e une fonction pour chaque chose. C'est pourquoi dans la description de Compacte, il est bien indiqué qu'elle attend les données déjà triées.
Cependant, je suis d'accord avec toi que c'est une bonne idée de proposer un tri. Auquel cas, une bonne façon de faire serait à mon avis de créer une fonction de plus haut niveau (publique) qui appelerait (optionellement) une fonction de tri avant d'appeler Compacte (qu'on rendrait private).
En pseudo code, ca donnerait à peu près:
Public Function SuperCompacte(data, optional must_sort As Boolean) as string
if must_sort
Call my_sort( data ) ' call sort routine
endif
SuperCompacte = Compacte( data )
End Function
Private Function Compacte ( byval data) as string
Private Sub My_sort ( byref data)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 juil. 2006 à 15:34
un Wrapper, oui, sympatique...
tu peux aussi tester le type de parametre en entrée...
tableau, collection, etc
et peut etre même voir à trier les chiffres, en première étape du processus, afin de compacter au maxiumum (traitement optionnel)
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009 27 juil. 2006 à 11:01
Re,
on peut aussi par exemple ecrire des wrapper (un peu moins efficace, mais très sympa à maintenir). Par exemple avec le ParamArray:
Private Function CompacteParamArray(ParamArray t() As Variant) As String
Dim cdata As Collection
Dim i As Long
Set cdata = New Collection
For i = LBound(t()) To UBound(t())
cdata.Add t(i)
Next i
CompacteParamArray = Compacte(cdata)
Set cdata = Nothing
End Function
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009 27 juil. 2006 à 08:55
Hello Renfield,
Oui tu as raison. C'est ce que je notais dans explicatin finale: on peut décliner la fonction en différentes versions, utilisant différentes entrées:
- tableau
- chaine de cracatères
- paramarray
- autres?
Merci du commentaire :-)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 juil. 2006 à 08:39
plutot qu'une collection, tu aurait pu utiliser, par exemple, un paramarray, et faire :
28 juil. 2006 à 08:12
27 juil. 2006 à 16:49
Concernant le tri, c'est certes une bonne idée mais ma rêgle en matière de design applicatif est "A chacun son métier, et les vaches seront bien gardées", i.e une fonction pour chaque chose. C'est pourquoi dans la description de Compacte, il est bien indiqué qu'elle attend les données déjà triées.
Cependant, je suis d'accord avec toi que c'est une bonne idée de proposer un tri. Auquel cas, une bonne façon de faire serait à mon avis de créer une fonction de plus haut niveau (publique) qui appelerait (optionellement) une fonction de tri avant d'appeler Compacte (qu'on rendrait private).
En pseudo code, ca donnerait à peu près:
Public Function SuperCompacte(data, optional must_sort As Boolean) as string
if must_sort
Call my_sort( data ) ' call sort routine
endif
SuperCompacte = Compacte( data )
End Function
Private Function Compacte ( byval data) as string
Private Sub My_sort ( byref data)
27 juil. 2006 à 15:34
tu peux aussi tester le type de parametre en entrée...
tableau, collection, etc
et peut etre même voir à trier les chiffres, en première étape du processus, afin de compacter au maxiumum (traitement optionnel)
27 juil. 2006 à 11:01
on peut aussi par exemple ecrire des wrapper (un peu moins efficace, mais très sympa à maintenir). Par exemple avec le ParamArray:
Private Function CompacteParamArray(ParamArray t() As Variant) As String
Dim cdata As Collection
Dim i As Long
Set cdata = New Collection
For i = LBound(t()) To UBound(t())
cdata.Add t(i)
Next i
CompacteParamArray = Compacte(cdata)
Set cdata = Nothing
End Function
27 juil. 2006 à 08:55
Oui tu as raison. C'est ce que je notais dans explicatin finale: on peut décliner la fonction en différentes versions, utilisant différentes entrées:
- tableau
- chaine de cracatères
- paramarray
- autres?
Merci du commentaire :-)
27 juil. 2006 à 08:39
a = Compacte (1,2,3,4,5,6)
sympatique, sinon