Page 1 sur 1

Concaténation : "+" Vs "&"

MessagePublié: 16 Nov 2009 à 15:12
par Ahamay
quelqu'un pourrait il m'expliquer la différence profonde entre + et & quand il s'agit de concaténer des chaines en LS....

Parce que, par exemple :

Call doc.ReplaceItemValue("TestDbComment", "## Base Test Créée par Agent le " & Str(Now) &"##"&Chr$(13) & doc.GetItemValue("TestDbComment")(0))

ET

Call doc.ReplaceItemValue("TestDbComment", "## Base Test Créée par Agent le " + Str(Now) +"##"+Chr$(13) + doc.GetItemValue("TestDbComment")(0))


Bin c'est kiff-kiff
Et j'en ai plein ma musette des exemples comme celui ci.


Bref.... soyons académique.... selon IBM et ses Good Practices, quand doit on utiliser l'un ... ou l'autre ?

MessagePublié: 16 Nov 2009 à 16:58
par Ahamay
bin j'vois que ça vous laisse dubitatif ma question :)

MessagePublié: 16 Nov 2009 à 17:04
par Michael DELIQUE
ben franchement j'aipas de réponse !

MessagePublié: 16 Nov 2009 à 17:22
par stloje
Selon ce qu'on m'a déjà expliqué, le signe + et & sont deux opérateurs de concaténation, mais le signe + est surchargé lorsqu'il est utilisé sur une chaîne de caractères. A cause de sa nature première, qui est l'addition, il peu arriver qu'une erreur survienne lorsqu'il y a concaténation d'un numérique et d'une chaîne. Il est donc préférable de toujours utiliser le signe & pour indiquer que le traitement est bien une chaîne de caractères.

MessagePublié: 16 Nov 2009 à 17:30
par erenault
stloje a écrit:Selon ce qu'on m'a déjà expliqué, le signe + et & sont deux opérateurs de concaténation, mais le signe + est surchargé lorsqu'il est utilisé sur une chaîne de caractères. A cause de sa nature première, qui est l'addition, il peu arriver qu'une erreur survienne lorsqu'il y a concaténation d'un numérique et d'une chaîne. Il est donc préférable de toujours utiliser le signe & pour indiquer que le traitement est bien une chaîne de caractères.

Tiens ça expliquerait certaines des erreurs de logs dans une partie de l'appli ...
Il va falloir tout modifier :(
Merci

MessagePublié: 16 Nov 2009 à 17:36
par Ahamay
@erenault : désolé... c'était pas le but de ma question :oops:

MessagePublié: 17 Nov 2009 à 11:14
par oguruma
bahhh c'est simple
le & te fait simplement la conversion de type ce que ne fait pas le + où les deux chaînes doivent être alpha

exemple 1
dim A as string
dim B as integer
dim C as string

A="lapins"
B=2
c= B + " " + A
==> provoquera une erreur
il faut donc faire
c= cstr(B) + " " + A
=> OK

on peut aussi fare
c= str$(B) + " " + A
mais le str$() ajout un blanc de tête pour la gestion du signe - ici transparent car comme en math le signe est ignoré par défaut sauf dans l'ensemble Z où le spécifie

dans les view basic (le basica ou gwbasic)le cstr n'existait et on se faisait tous un bon vieux DefFN cstr=(.........) [années 80....]

ou
c= B & " " + A
==> OK le & fait conversion de B en alpha

voili voilà !

MessagePublié: 19 Nov 2009 à 09:31
par Ahamay
Yessss.... 8)

Bin en voila une réponse qu'elle est bonne :)
c'est clair, simple, précis.... nickel !

Merci oguruma.

MessagePublié: 20 Nov 2009 à 12:12
par erenault
Ahamay a écrit:@erenault : désolé... c'était pas le but de ma question :oops:


Pas de problème, il vaut mieux savoir que laisser trainer :lol:

MessagePublié: 20 Nov 2009 à 17:50
par Michael DELIQUE
je ne dirais qu'un mot : tip

MessagePublié: 23 Nov 2009 à 15:02
par oguruma
c'est fait

MessagePublié: 23 Nov 2009 à 15:13
par Michael DELIQUE
Merci Maître

MessagePublié: 08 Déc 2009 à 12:10
par d.bugger

MessagePublié: 08 Déc 2009 à 12:26
par Michael DELIQUE
en effet !

le billet de de septembre 2005 je serais curieux de voire les résultats sur la derniere version !

mais en gros que l'on utilise + ou & ça reviens a peut pres au meme !

MessagePublié: 09 Déc 2009 à 10:06
par oguruma
nous sommes d'accord, le perf peuvent évoluer sensiblement sur un gros volume d'opérations avec un grand nombre de documents à traiter dans une vue
avec la version 8 (plus rapide) il n'y a quasiment plus de différences