Un comportement que je n'arrive pas à expliquer...

Sowebio - Développement (via ada-france Mailing List) <[email protected]> Fri, 1 Sep 2023 12:59:25 +0200
Newsgroups gmane.comp.lang.ada.france
Organization Sowebio
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------8DB6EAD8FDC4EC398590533E
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit

Bonjour à toutes et tous,


String étant défini comme un subtype d'UXString avec un use d'UXString
tout en haut de la hiérarchie de l'application, donc partout String est
de l'UXString

On peut bien sûr continuer d'accéder à l'ex type prédéfini String par
Standard.String.

DB_DBM.Error_Message renvoie String (subtype de UXString)

From_ASCII () accepte Standard.String et renvoie String (subtype de
UXString)

DB_Temp est une String (subtype de UXString)


Ceci est valide

                  if Empty (DB_DBM.Error_Message) then
                     DB_Temp := ""; -- Ceci est bien une chaine vide de
type String (subtype de UXString)
                  else
                     DB_Temp := " > " & DB_DBM.Error_Message;
                  end if;


Ceci est invalide

DB_Temp := (if DB_DBM.Error_Message = "" then "" else " > " &
DB_DBM.Error_Message);   

Avec une erreur car DB_Temp s'attend à recevoir une String (subtype de
UXString) mais reçoit une Standard.String


Ceci est valide

DB_Temp := (if DB_DBM.Error_Message = "" then From_ASCII ("") else
From_ASCII (" > ") & DB_DBM.Error_Message);

J'aimerai comprendre pourquoi l'assignation de chaînes littérales est
correcte dans un if then else classique et pas dans une expression
ternaire (if then else) ou elle redevient visiblement une Standard.String ?


Merci d'avance d'éclairer ma lanterne ;)


Bon WE par avance,

Stef


PS

En passant, UXString v3 est un bonheur qui m'a permis de porter sans
aucun effort un framework complet vers l'UTF-8. L'API est standard, on a
l'opérateur de concaténation &¹ et on a plus besoin d'initialiser les
strings littérales avec l'opérateur +. L'usage est donc transparent et
ça rend la manip de strings UTF-8 aussi naturelle en Ada qu'en Python
(désolé pour la comparaison).

C'est aussi idéal quand on s'interface avec des DB en UTF-8 et, bien
sûr, c'était le propos initial, quand on dev pour le Web. C'est stable,
véloce, compatible Zanyblue (internationalisation). La conso mémoire
résultante est insignifiante en pratique. Merci Pascal :).
https://github.com/Blady-Com/UXStrings

¹ On est loin de certains packages de Strings UTF-8 à l'API non
conventionnelle et sans l'opérateur de concaténation &. 

-- 
Sowebio Développement
[email protected] <mailto:[email protected]>
Sowebio <http://www.soweb.io>
www.soweb.io <http://www.soweb.io>
[email protected] <mailto:[email protected]>
+33 (0) 5 46 85 58 40



_______________________________________________
Ada-france mailing list
[email protected]

--------------8DB6EAD8FDC4EC398590533E
Content-Type: multipart/related;
 boundary="------------A6517A4C487631C5E660B4C9"


--------------A6517A4C487631C5E660B4C9
Content-Type: text/html; charset=iso-8859-15
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Bonjour à toutes et tous,<br>
    </p>
    <br>
    <p>String étant défini comme un subtype d'UXString avec un use
      d'UXString tout en haut de la hiérarchie de l'application, donc
      partout String est de l'UXString</p>
    <p>On peut bien sûr continuer d'accéder à l'ex type prédéfini String
      par Standard.String.<br>
    </p>
    <p>DB_DBM.Error_Message renvoie String (subtype de UXString)</p>
    <p> From_ASCII () accepte Standard.String et renvoie String (subtype
      de UXString)</p>
    <p>DB_Temp est une String (subtype de UXString)</p>
    <p><br>
    </p>
    <p>Ceci est valide<br>
    </p>
    <p>                  if Empty (DB_DBM.Error_Message) then<br>
                           DB_Temp := ""; -- Ceci est bien une chaine
      vide de type String (subtype de UXString)<br>
                        else<br>
                           DB_Temp := " &gt; " &amp;
      DB_DBM.Error_Message;<br>
                        end if;</p>
    <p><br>
    </p>
    Ceci est invalide <br>
    <br>
    DB_Temp := (if DB_DBM.Error_Message = "" then "" else " &gt; " &amp;
    DB_DBM.Error_Message);    <br>
    <br>
    Avec une erreur car DB_Temp s'attend à recevoir une String (subtype
    de UXString) mais reçoit une Standard.String<br>
    <br>
    <br>
    Ceci est valide<br>
    <br>
    DB_Temp := (if DB_DBM.Error_Message = "" then From_ASCII ("") else
    From_ASCII (" &gt; ") &amp; DB_DBM.Error_Message);<br>
    <br>
    <p>J'aimerai comprendre pourquoi l'assignation de chaînes littérales
      est correcte dans un if then else classique et pas dans une
      expression ternaire (if then else) ou elle redevient visiblement
      une Standard.String ?</p>
    <p><br>
    </p>
    <p>Merci d'avance d'éclairer ma lanterne ;)<br>
    </p>
    <p><br>
    </p>
    <p>Bon WE par avance,</p>
    <p>Stef</p>
    <p><br>
    </p>
    <p>PS</p>
    <p> En passant, UXString v3 est un bonheur qui m'a permis de porter
      sans aucun effort un framework complet vers l'UTF-8. L'API est
      standard, on a l'opérateur de concaténation &amp;¹ et on a plus
      besoin d'initialiser les strings littérales avec l'opérateur +.
      L'usage est donc transparent et ça rend la manip de strings UTF-8
      aussi naturelle en Ada qu'en Python (désolé pour la comparaison).
      <br>
    </p>
    <p>C'est aussi idéal quand on s'interface avec des DB en UTF-8 et,
      bien sûr, c'était le propos initial, quand on dev pour le Web.
      C'est stable, véloce, compatible Zanyblue (internationalisation).
      La conso mémoire résultante est insignifiante en pratique. Merci
      Pascal :). <a class="moz-txt-link-freetext" href="https://github.com/Blady-Com/UXStrings">https://github.com/Blady-Com/UXStrings</a><br>
    </p>
    <p>¹ On est loin de certains packages de Strings UTF-8 à l'API non
      conventionnelle et sans l'opérateur de concaténation &amp;.  </p>
    <div class="moz-signature">-- <br>
      <meta http-equiv="content-type" content="text/html;
        charset=iso-8859-15">
      <table width="160" height="148" border="0" cellspacing="2"
        cellpadding="2">
        <tbody>
          <tr>
            <td valign="top"> <font face="Helvetica, Arial, sans-serif"
                size="-2"> Sowebio Développement<br>
                <a href="mailto:[email protected]">[email protected]</a><br>
              </font> </td>
          </tr>
          <tr>
            <td valign="top"><a href="http://www.soweb.io"><img
                  title="Cliquer pour accéder au site Web" alt="Sowebio"
                  src="cid:[email protected]" width="150"
                  height="30" border="0"></a></td>
          </tr>
          <tr>
            <td valign="top"> <font face="Helvetica, Arial, sans-serif"
                size="-2"> <a href="http://www.soweb.io">www.soweb.io</a><br>
                <a href="mailto:[email protected]">[email protected]</a><br>
                +33 (0) 5 46 85 58 40 </font> </td>
          </tr>
        </tbody>
      </table>
      <br>
    </div>
  <div style="background: transparent; border: none; clear: both; display: block; float: none; position: static"><br/>_______________________________________________<br/>Ada-france mailing list<br/>[email protected]</div></body>
</html>

--------------A6517A4C487631C5E660B4C9
Content-Type: image/png;
 name="eidjnpmjccmgpfpj.png"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Content-Disposition: inline;
 filename="eidjnpmjccmgpfpj.png"

iVBORw0KGgoAAAANSUhEUgAAAJYAAAAgCAYAAADwkoGKAAAMuXpUWHRSYXcg
cHJvZmlsZSB0eXBlIGV4aWYAAHjapZhpcmS5DYT/8xQ+AneAxyG4RMwNfHx/
eFWSW2pNhNsjhVSlV28hkYnMhML59183/IuvkrqG2kT76D3yVUcdefJG4+tr
Pr9TrM/v52v092fp6/GQ38dj5lDhtbz+1PcF6eN4+rzB62Xyrv1yI13vD+zr
B6O+76/fbvR+UPEV+Sr2+0bjfaOSXx+k9w3ma1uxD5Vft2Dn9bo/dqKvn+C/
9n0d/7jJ97+rUL3deE7J+ZRUIr9LeS+g+E8JZT5vJh8rJ6bSeZ9Le458bImC
/FSnz6/Biq4vtf540hdUPt99Q6u8QQnf0ar5fUr5VuT++frj8ZDaz6g8pf/l
yVXf7/LX4ylFe63oW/X9596t99kzu5i1U+r+3tTHFp93nMdNqj9aA0vrUfhp
3EKe78G3wuoFajsunmi8HykD10017TTTTed5XWmxxJpPyMKbnFcuz0Etkkde
xfGr/p1uljLKLgqW64G9lvy5lvQ8dsQVnqcpT96JU3PiZolL/vg7/OkF965X
ifWBPr3wzdmLzTIcOf/NaSCS7ruo7Snwx/f3L8e1gGDzKnuLDAprr1tYS/9V
gvIAXTix8fpqlyT7fQNKxKMbi0kFBEAtlZZ6ipKzpEQhFYAmS8+lZgOB1Fre
LDLXUjrY0Ek8mkskPafmljkcOI6YgUSjywRsRpmAVWuDP1IVDs1WWm2t9SZN
22izl157671Ld1GcUqQGadJFRGXI1KJVm3YVVR06Rx4F0WyjDxk6xpiTZ07u
PLl6csKclq1YtRasm5jasLmgz6qrrb5k6Rpr7rzLRj9237J1jz1POlDp1NNO
P3L0jDMvVLsl3Hrb7Veu3nHnJ2pvWH/7/gPU0hu1/CDlJ8onahwV+bhFcjlp
jhmA5VATiItDAKGzYxY11ZodOccsDuSvtMwim2O2kyMGgvWk3G76wC7kF6KO
3D/CLUj9glv+f5ELDt0fIvc7bj+htt2G1oPYqwu9qLHQfTfTilrjXa3c60Lf
bNylXLq7hM7akv/KSbVPypC3pSGFR16WtXV1uezxiruU6JwbgMds0Za2uvqZ
0quFNNZgybqQLMp/ZhmzXhCiMCeXHbsYfiWjn60Uf0WXwuMLqzrPEQpadJ8Q
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
DAR2gUbNtr+PbbtxAvifgSu95S/XgelP0mstLXIEhLaBi+uWpuwBlzvAwJMh
m7Ij+WkKuRzwfkbflAH6boHuNbe35j5OH4AUdZW4AQ4OgZE8Za97vLurvbd/
zzT7+wGVu3K1AbClJQAADRppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/
eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3pr
YzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5z
OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4
LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHht
bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgog
ICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9z
VHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVy
bC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6
Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9u
cy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8v
bnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJn
aW1wOmRvY2lkOmdpbXA6MzNlOTQ5YjItZjU3Ni00OWFiLWI4NjMtNTVlZTZi
YzRiZjE3IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVhOTU1NDJk
LTE4NzktNGI5Mi04YWY3LWQ3MDU2MDQwMWE2MCIKICAgeG1wTU06T3JpZ2lu
YWxEb2N1bWVudElEPSJ4bXAuZGlkOjllNGMzZjYyLWEwMTItNGIwMy1iNGZk
LTRjNDM2YzY5NzdlYSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJ
TVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1Q
OlRpbWVTdGFtcD0iMTY3NjczMzkxMzM4MjA5NCIKICAgR0lNUDpWZXJzaW9u
PSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3Jl
YXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAg
PHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNh
dmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0
YW5jZUlEPSJ4bXAuaWlkOjU0MDRiZTY1LTY0ZDYtNGRkMy1iNTlhLWNhMjUy
MTQyNTViMCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEw
IChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMDItMThUMTY6MjU6
MTMrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5
PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0
YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+
7ZbrvQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAABFWwAARVsBtQF/+gAA
AAd0SU1FB+cCEg8ZDamo33YAABE9SURBVHja7Vt5lBTVvf5uLV1LV/fsIPhQ
XJ5RQJDFJYIC4ihPVNwAlRgXBEkETKKo4HkuQRaXPAXUPGRzeajIphLFLQFm
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

--------------A6517A4C487631C5E660B4C9--

--------------8DB6EAD8FDC4EC398590533E--