Il "letterale stringa" è sempre uguale a "stringa hardcoded"? [chiuso]

7

Sto imparando la programmazione e spesso vedo il termine "stringa letterale" usato in vari luoghi. Dal suo aspetto, sembra essere un sinonimo di "stringa hardcoded", ma da un altro lato il termine sembra piuttosto specifico.

"string letterale" è sempre uguale a "stringa hardcoded"?

    
posta SherlockEinstein 09.12.2015 - 16:41
fonte

6 risposte

18

Per me, un string letteral è un costrutto linguistico, una stringa codificata è una stringa il cui valore è fisso in un programma (puoi discutere se è necessario risolto in fase di compilazione o potrebbe essere in qualche modo determinato da alcune considerazioni di runtime). Una stringa hardcoded è spesso una stringa letterale ma potrebbe provenire da altre fonti (ad esempio concatenazione di caratteri letterali o anche alcuni calcoli fissi come la concatenazione di un nome prodotto con una versione del prodotto quando la versione è archiviata in una coppia di variabili intere costanti).

    
risposta data 09.12.2015 - 17:03
fonte
8

Dipende.

Qui viene usata una stringa letterale che è anche una stringa codificata.

Print("Robbie");

Ma qui, una stringa letterale è usata per definire la costante (che è anche una stringa hard coded). Tuttavia, l'istruzione di stampa non più utilizza una stringa codificata poiché dipende dal valore della costante.

const name = 'Robbie';
Print(name);
    
risposta data 09.12.2015 - 17:43
fonte
7

Sì, i termini significano lo stesso.

Una stringa letterale significa il modo in cui una stringa appare nel codice (diciamo in JavaScript, che sarebbe quotata in virgolette singole o doppie ( 'literal' o "literal" ), nello stesso modo in cui si avrebbero numeri che appaiono nel codice - di nuovo, un letterale (quindi, nel codice var n = 2; , il 2 è un valore letterale numerico).

Come puoi vedere - questo è essenzialmente lo stesso di stringhe / numeri di codifica rigida.

Ci sono sottili differenze, ma per tutti gli usi pratici - sono la stessa cosa.

    
risposta data 09.12.2015 - 16:45
fonte
4

Una stringa letterale è una stringa codificata, ma non tutte le stringhe codificate sono stringhe letterali.

var greet = ", ".join("Hello", "Bob")

Il codice precedente ha tre stringhe letterali hard-coded: la virgola, Hello e Bob. La variabile greet è hardcoded per essere "Hello, Bob", ma non è una stringa letterale. Un linguaggio interpretato non avrebbe mai memorizzato quei caratteri come "Ciao, Bob" prima dell'esecuzione. Un linguaggio compilato potrebbe, se fosse abbastanza intelligente.

La connotazione è che hardcoded significa "non cambia con l'input" ed è generalmente un trampolino di lancio per modificare qualcosa come sopra a questo:

var greet = separator.join(greeting, name);

In molti casi, alcune cose potrebbero ancora essere hardcoded, ad esempio:

var greet = ", ".join(greeting, name);

Sebbene la virgola sia hardcoded, normalmente non si chiamerebbe quel fatto a meno che non fosse necessario un separatore diverso.

    
risposta data 09.12.2015 - 20:13
fonte
2

"String letteral" è solo un costrutto del linguaggio di programmazione che stai utilizzando. In C o C ++

char* p = "This" " is " "a string" " made from four string literals";

è una singola stringa hardcoded composta da quattro stringhe letterali. Swift d'altra parte ha stringhe letterali che non sono stringhe codificate, come

let aString = "i + j = \(i + j)"
    
risposta data 09.12.2015 - 18:13
fonte
1

Il termine string letteral si riferisce al modo in cui il parser della tua lingua interpreta il tuo programma. Dopo che il preprocessore (se presente) viene applicato al codice sorgente, i token che assomigliano a "Hello world" saranno interpretati tipicamente come valori letterali stringa dal parser.

Il termine stringa codificata si riferisce a una stringa che non dipende dall'input al programma ma ha anche connotazioni di difficoltà di modifica, il che significa che potrebbe essere necessario modificare il codice in uno o più posti per cambiarlo.

Ecco una stringa che è sia una stringa letterale che codificata:

char * libPath = "/usr/lib";

Ecco una stringa che è ancora una stringa letterale, ma la sua definizione proviene da una macro del preprocessore:

#define LIB_PATH "/usr/lib"
char * libPath = LIB_PATH;

È ancora una stringa letterale, ma non sono sicuro se la chiamerei hard-coded. La definizione potrebbe dipendere da alcuni #ifdefs, oppure la definizione potrebbe essere generata dagli script di configurazione del software, che ispezionano il tuo ambiente di elaborazione e configurano il software affinché funzioni correttamente. Se "/ usr / lib" non appare nel tuo codice sorgente ma proviene dal tuo sistema di compilazione, penso che la maggior parte dei programmatori non lo chiamerebbe "hard-coded", perché la codifica hard ha delle connotazioni che è difficile o no supportato per cambiare la variabile.

    
risposta data 09.12.2015 - 22:06
fonte

Leggi altre domande sui tag