Le Stringhe in C++

Devo ridere o piangere?

Scritto da Roberto Rossi il 10-2019

Oggi voglio parlare di un argomento, alle volte, sottovalutato. L'uso delle stringhe nello sviluppo di applicazioni C++.

Devo dire che, ogni tanto, questo linguaggio è veramente "spassoso".

Siamo nel 2019 e ho voglia di raccontare qualcosa riguardo questo linguaggio e le sue stringhe di caratteri.

Le Stringhe

Cosa sono le stringhe?

Le stringhe sono sequenze di byte che descrivono dei caratteri.

Lettere, numeri, punteggiatura, simboli, faccine, può stare tutto in una stringa.

Le stringhe in C++

Come tutti i linguaggi tipizzati C++ memorizza le stringhe all'interno di variabili adibite a contenere questo tipo di dato.

E fin qui tutto bene.

Il problema

Peccato che di tipi che possono contenere una stringa ce ne siano a vagonate!

Alle volte non so se piangere o se ridere. Sembra che i programmatori C++ facciano a gara per creare nuovi tipi stringa.

Come i bambini che fanno a gara a chi ha il tipo stringa piu "bello".

E questa proliferazione di tipi stringa è una cosa che ho visto prevalentemente con il C++.

Forse è una malattia?

Nella mia vita ho sviluppato con molte librerie C++. Sia professionalmente che per diletto, ho scritto codice usando (elenco le piu conosciute):

  • C++ Standard.
  • MFC.
  • ObjectARX.
  • Theiga.
  • QT.
  • wxWidgets.
  • Le librerie di progeCAD/IntelliCAD.
  • ...

Sviluppando applicazioni con questi software, spesso con più librerie nello stesso progetto, ci si rende conto di un fatto.

Esattamente come i virus e i batteri, i tipi stringa proliferano e si moltiplicano in modo sorprendente.

Quindi, si incontrano:

  • char.
  • wchar_t.
  • string.
  • wstring.
  • LPTSTR.
  • LPCTSTR.
  • CString.
  • CStringA.
  • AcString.
  • IcString.
  • OdString.
  • QString.
  • wxString.

Il "bello" di tutto ciò è che sono certo di aver omesso qualche tipo, quindi questa lista è sicuramente incompleta. Nonostante ciò è evidente come, in C++, il mondo della stringa sia decisamente variegato.

Esattamente come per le malattie, questa proliferazione genera dei problemi.

Si, perchè in alcuni casi bisognerà usare un certo tipo, in altri casi un altro tipo. Quindi bisognerà convertire un tipo in un altro, in base alla situazione.

Naturalmente ogni tipo ha le sue particolarità e le sue potenzialità, con alcuni si possono fare certe operazioni, con altri no, con altri ancora le stesse cose vanno fatte in modo diverso.

Anche dal punto di vista dell'efficienza i tipi sono diversi. Alcuni sono più efficienti, altri meno. Quindi si può scoprire che, se avessi usato quel tipo piuttosto che quell'altro il mio programma sarebbe stato molto piu prestante.

Tutto questo, ovviamente, richiede del tempo, dell'impegno, una attenzione, richiede delle risorse. Chi sviluppa dovrebbe conoscere come funzionano questi tipi, come si usano, cosa possono e non possono fare, quando è meglio l'uno o l'altro.

E mentre lo sviluppatore "gioca" con le stringhe, non si occupa di altro. E magari non si accorge che l'interfaccia grafica che ha creato è talmente confusa da risultare incomprensibile per l'utente.

I mille motivi. Le scuse.

Uno sviluppatore C++ che legge questo articolo potrebbe giustificare la presenza dei tanti tipi stringa in mille modi. Negli anni, io stesso l'ho fatto tante volte.

Ci sono ragioni storiche, che dicono che la storia delle stringhe è tanto variegata da aver "costretto" gli sviluppatori a trovare tipi alternativi.

Ci sono ragione tecniche, magari legate alle prestazioni o alla flessibilità di alcuni tipi stringa rispetto ad altri.

Ci sono tipi che è piu opportuno usare in alcuni casi e non in altri, tipi che contengono un certo tipo di stringhe e tipi che contengono un tipo diverso

Ognuno ha le sue ragioni, più o meno plausibili.

Il Mio punto di vista

In questo mare di ragioni, o forse dovrei dire scuse, io continuo a trovare ridicolo l'uso delle stringhe, o meglio, l'uso dei tipi stringa in C++.

Le stringhe ci sono da tanto tempo, da decenni. E sono sempre quelle, contengono sempre lo stesso tipo di dato.

Siamo nel 2019 e dopo così tanto tempo non c'è nulla che faccia pensare che la confusione oggi esistente possa migliorare.

Alle volte mi viene da pensare che i programmatori C++ siano in preda alla sindrome NIH.

Dicono che C++ abbia uno standard. Dicono. Ma a guardare le stringhe lo standard, semplicemente, sembra solo fantasia.

Riferimenti

Licenza articolo

Licenza Creative Commons
Questo articolo è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.