Différence entre #Null$ et #Empty$ ???

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Différence entre #Null$ et #Empty$ ???

Message par cage »

Bonsoir a tous,

Depuis quelques temps, je me pose la question suivante:

Quelle est la différences entre #Null$ et #Empty$

J'utilise les 2 indifféremment sans voir de différence particulière.

MaVariable=#Null$ et MaVariable$=#Empty$

Dans quels cas dois-je utiliser l'une ou l'autre.
Quel est l'avantage de l'une par rapport a l'autre.

Merci pour l'éclairage que vous pourrez m'apporter.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Différence entre #Null$ et #Empty$ ???

Message par Marc56 »

Le texte officiel est au chapitre Règles de syntaxe générales

Code : Tout sélectionner

Il y a deux constantes spéciales pour les chaînes:
  #Empty$: représente une chaîne vide (exactement la même chose que "")
  #Null$ : représente une chaîne nulle. Ceci peut être utilisé avec les fonctions 
           des APIs nécessitant un pointeur NULL en guise de chaîne ou à une chaîne vraiment libre.
#Null$ est un peu l'équivalent de nil qu'on trouve en Pascal et dans d'autres langages.

Voir surtout l'exemple proposé par Kenmo
https://www.purebasic.fr/english/viewto ... 39#p480239

:wink:
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Différence entre #Null$ et #Empty$ ???

Message par cage »

Merci Marc56,

Il vaut donc mieux utiliser #Empty$ en standard pour des chaînes simple.

Je n'ai découvert #Empty$ que depuis quelques mois tellement j'étais habitué a utiliser #Null$ sans me poser de question.

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Différence entre #Null$ et #Empty$ ???

Message par Marc56 »

cage a écrit : jeu. 29/avr./2021 10:56 Il vaut donc mieux utiliser #Empty$ en standard pour des chaînes simple.
Pour #Empty$ je préfère « "" », c'est 8 fois moins de touches à taper (oui, 8 car # nécessite AltGr) et c'est de toutes façon compatible avec toutes les versions de PB.
#Null$ quant à lui a son usage pour l'appel aux API
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Différence entre #Null$ et #Empty$ ???

Message par cage »

J'ai cru comprendre qu'il vaut mieux utiliser des constantes plutôt que des chaînes texte.
Si j'ai bien compris, utiliser 50 fois ("") dans un programme revient a initialiser 50 chaînes en mémoire alors que #Empty$ étant une constante, n'est initialisée qu'une fois.

Je fais tout mon possible pour que mes applications utilisent le moins de mémoire et de CPU possible. C'est pour ça que j'essaye d'améliorer ma façon de faire avec parfois des petits détails.

A ce sujet, j'aimerais savoir ce que deviennent toutes les chaînes et variables déclarées en Protected dans une procédure a la fin de l'appel de ladite procédure. Quand la procédure se termine, le ménage est-il fait automatiquement par PB ou faut-il blanchir toutes les variables en dehors bien sur de tout ce qui est nettoyé par les fonctions ClearQuelquechose()

Merci a toi.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Différence entre #Null$ et #Empty$ ???

Message par Marc56 »

1. "" : Je ne sais pas si ça prend vraiment plus. Une chaîne (AZT) vide c'est juste (je pense?) une adresse mémoire qui pointe vers une case avec logiquement un nul (\0) donc peut être que " " prend alors 2 octets ou c'est une conversion? Un pro d' assembleur dirait sans doute plus ?Je me suis toujours demandé pourquoi cette constante existe ? :?:

2. Gratter de la ram: Je fais ça aussi (vieille habitude du ZX81 (1Ko) et du Vic 20 (3.5ko) on ne se refait pas. :mrgreen:

3. Procedure: À ma connaissance, dès qu'une procédure a fini son boulot, les variables déclarées en Protected sont supprimée automatiquement, seules celles déclarées en Static "survivent". Peut-être qu'il y a une exception si on a alloué de la ram en manuel (AllocateMemory() ?)
De même quand on quitte un programme PB il fait le ménage: libère toutes les zones de ram occupées, y compris celles déclarés dans des threads. Il libère les handles de fichier pas fermés, clos les connexions serie et base de données, vide le cendrier et éteint la lumière.
Fred pense à tout.

:wink:
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Différence entre #Null$ et #Empty$ ???

Message par cage »

Bonjour,

C'est vrai, Fred pense à (presque) tout.
Je me félicite chaque fois que j'utilise PB d'avoir pris une licence.
Impatient de voir ce que va donner la prochaine version de PB.
Prêt a repayer une licence si besoin.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre