Sensibile alle maiuscole
# Sensibile alle maiuscole

Si dice sensibile alle maiuscole (in inglese e in gergo informatico case sensitive) ogni operazione di analisi del testo che considera come differenti due o più parole uguali solo per il fatto di essere scritte con lettere maiuscole o minuscole.

Accade spesso che, quando una stessa parola viene scritta con iniziale maiuscola o minuscola, cambi completamente il significato; per esempio "Zucchero" è il nome d'arte del cantante Adelmo Fornaciari, a differenza di "zucchero", che è un sinonimo di "carboidrato".

## Ambito informatico

I calcolatori elettronici sono in grado di identificare diversamente lettere maiuscole e minuscole. Questo risulta importante, ad esempio, nel caso delle password; spesso, tuttavia, i nomi utente sono non sensibili (in inglese sono case insensitive), cosa che può causare confusione nell'utente inesperto. Le password sono rese sensibili affinché sia più difficile risalirvi per tentativi, mentre i nomi utente non soffrono di questo problema (una loro sensibilità alle maiuscole porterebbe solo ad una maggior difficoltà di memorizzazione).

Alcuni linguaggi di programmazione come Java, C, C++ e Python sono sensibili, mentre altri non lo sono, ad esempio BASIC, Pascal e ASP.

Quando un software deve confrontare dati in modo non sensibile alle maiuscole, è richiesto più lavoro, a seconda del loro tipo. Solitamente è sufficiente, in un tipo di codifica di caratteri come ASCII o EBCDIC, convertire l'intero testo tutto in minuscolo oppure in maiuscolo. Nel caso di codifiche multi-lingua come Unicode, l'elaborazione diventa più complessa in quanto non tutti i caratteri minuscoli hanno una corrispettiva versione maiuscola e viceversa: per esempio, in tedesco, prima del 2017, non esisteva una versione maiuscola della lettera «ß» (da non confondere con «β», forma minuscola della lettera greca beta, corrispondente alla «Β» dell'alfabeto latino).

Le operazioni che non considerano maiuscole e minuscole sono chiamate a volte «fold case» (in inglese, minuscole ripiegate), dall'idea di ripiegare la tabella dei codici caratteri in modo che le lettere minuscole e maiuscole coincidano. La dizione alternativa «smash case» («minuscole distrutte») è spesso usata per riferirsi ad un comportamento volontario o involontario di un programma che converte permanentemente minuscole in maiuscole o viceversa.

I sistemi operativi di tipo Unix (tranne macOS, di default) sono sensibili alle maiuscole, al contrario di altri sistemi come Microsoft Windows, che considera equivalenti le due forme. Essendo la maggior parte dei server web basati su sistemi Unix, molti siti considerano quindi differenti pagine come «index.html» e «INDEX.HTML».

La distinzione tra maiuscole e minuscole può variare a seconda della situazione:

* Ricerca: gli utenti si aspettano che i sistemi di recupero delle informazioni siano in grado di avere o non avere la distinzione tra maiuscole e minuscole a seconda della natura dell'operazione per cui sono concepiti. Gli utenti che cercano la parola "cane" in un testo online probabilmente non desiderano distinguere tra "cane" o "Cane", poiché si tratta di una distinzione scritta. Diversamente, gli utenti che cercano informazioni relative a qualcosa che la grammatica impone di scrivere con iniziale maiuscola, come un marchio, un nome umano o un nome geografico, potrebbero essere interessati a eseguire un'operazione che distingue tra maiuscole e minuscole per filtrare i risultati non pertinenti; ad esempio chi cerca il nome proprio femminile "Giada" non vorrebbe trovare riferimenti alla pietra preziosa chiamata giada. Sulla Wikipedia in inglese, se si cerca "Friendly fire" si trova l'articolo dedicato al tema militare del fuoco amico, mentre cercando "Friendly Fire" (con entrambe le iniziali maiuscole) si ottiene una pagina di disambiguazione.
* Nomi utente: i sistemi di autenticazione di solito trattano i nomi utente come insensibili al maiuscolo/minuscolo per facilitare la memorizzazione, ridurre la complessità di digitazione ed eliminare la possibilità di errore e frode quando due nomi utente sono identici in ogni aspetto tranne il caso di una delle loro lettere. Tuttavia, questi sistemi non sono case-blind. Essi conservano il caso dei caratteri nel nome in modo che gli utenti possono scegliere una combinazione esteticamente gradevole.
* Password: i sistemi di autenticazione di solito trattano le password come case-sensitive, allo scopo di consentire agli utenti di aumentare la complessità delle loro password.
* Nomi dei file: tradizionalmente, i sistemi operativi Unix trattano i nomi dei file in modo sensibile al maiuscolo/minuscolo mentre Microsoft Windows non distingue tra maiuscole e minuscole eccetto che per la maggior parte dei file system, dove la distinzione tra maiuscole e minuscole è presente. Per maggiori dettagli, vedi sotto.
* Nomi delle variabili: alcuni linguaggi di programmazione fanno distinzione tra maiuscole e minuscole per i nomi delle variabili, mentre altri no. Per maggiori dettagli, vedi sotto.
* URL: il percorso, la query, il frammento e le sezioni di autorità di un URL possono o meno fare distinzione tra maiuscole e minuscole, a seconda del server web ricevente. Lo schema e le parti host, tuttavia, sono rigorosamente minuscole.

## Nei linguaggi di programmazione

Alcuni linguaggi di programmazione fanno distinzione tra maiuscole e minuscole per i loro identificatori (C, C ++, Java, C #, Verilog, Ruby, Python e Swift). Altri non fanno distinzione tra maiuscole e minuscole, come ABAP, Ada, la maggior parte dei BASIC (ad eccezione di BBC BASIC), Fortran, SQL (per la sintassi e per alcune implementazioni di fornitori, ad esempio Microsoft SQL Server, il dati stessi) e Pascal. Esistono anche linguaggi, come Haskell, Prolog e Go, in cui l'uso delle maiuscole di un identificatore codifica le informazioni sulla sua semantica. Alcuni altri linguaggi di programmazione hanno una diversa distinzione tra maiuscole e minuscole; in PHP, ad esempio, i nomi delle variabili fanno distinzione tra maiuscole e minuscole, ma i nomi delle funzioni non sono sensibili al maiuscolo/minuscolo. Ciò significa che se definisci una funzione in minuscolo, puoi chiamarla in maiuscolo, ma se definisci una variabile in minuscolo, non puoi fare riferimento ad essa in maiuscolo. Nim non distingue tra maiuscole e minuscole e ignora i trattini bassi, purché i primi caratteri corrispondano.

## Nella ricerca di testo

Un'operazione di ricerca di testo potrebbe essere sensibile al maiuscolo/minuscolo o senza distinzione tra maiuscole e minuscole, a seconda del sistema, dell'applicazione o del contesto. L'utente può in molti casi specificare se una ricerca è sensibile alle maiuscole/minuscole, ad esempio nella maggior parte degli editor di testo, elaboratori di testi e browser web. Una ricerca senza distinzione tra maiuscole e minuscole è più completa, trovando "Lingua" (all'inizio di una frase), "lingua" e "LINGUA" (in un titolo in maiuscolo); una ricerca con distinzione tra maiuscole e minuscole troverà il linguaggio del computer "BASIC" ma escluderà la maggior parte delle molte istanze indesiderate della parola. Ad esempio, il motore di ricerca di Google è fondamentalmente senza distinzione tra maiuscole e minuscole, senza alcuna opzione per la ricerca con distinzione tra maiuscole e minuscole. In Oracle SQL la maggior parte delle operazioni e delle ricerche fa distinzione tra maiuscole e minuscole per impostazione predefinita, mentre nella maggior parte degli altri DBMS le ricerche SQL non fanno distinzione tra maiuscole e minuscole per impostazione predefinita.

A volte si dice che le operazioni senza distinzione tra maiuscole e minuscole pieghino le maiuscole, dall'idea di piegare la tabella dei codici dei caratteri in modo che le lettere maiuscole e minuscole coincidano.

## Nei filesystem

Nei filesystem in sistemi simili a Unix, i nomi dei file fanno solitamente distinzione tra maiuscole e minuscole (possono esserci file readme.txt e Readme.txt separati nella stessa directory). MacOS è piuttosto insolito in quanto, per impostazione predefinita, utilizza HFS + e APFS in modo che non faccia distinzione tra maiuscole e minuscole (in modo che non possano esserci un readme.txt e un Readme.txt nella stessa directory) ma la modalità di conservazione delle maiuscole (in modo che un file creato come readme.txt viene mostrato come readme.txt e un file creato come Readme.txt viene mostrato come Readme.txt) per impostazione predefinita. Ciò causa alcuni problemi per sviluppatori e utenti esperti, perché la maggior parte dei file system in altri ambienti Unix fanno distinzione tra maiuscole e minuscole e, ad esempio, un albero del codice sorgente per il software per sistemi Unix potrebbe avere sia un file denominato Makefile che un file denominato makefile nella stessa directory. Inoltre, alcuni programmi di installazione per Mac presumono che non facciano distinzione tra maiuscole e minuscole e non riescono sui file system sensibili al maiuscolo/minuscolo.

I vecchi filesystem MS-DOS FAT12 e FAT16 non facevano distinzione tra maiuscole e minuscole e non preservavano maiuscole e minuscole, in modo che un file il cui nome è stato immesso come readme.txt o ReadMe.txt viene salvato come README.TXT. Successivamente, con VFAT in Windows 95, i file system FAT sono diventati un'estensione del formato di file Long di supporto. I successivi file system di Windows, come NTFS, distinguono internamente tra maiuscole e minuscole e un readme.txt e un Readme.txt possono coesistere nella stessa directory. Tuttavia, per scopi pratici i nomi dei file si comportano in modo da non fare distinzione tra maiuscole e minuscole per quanto riguarda gli utenti e la maggior parte del software. Ciò può causare problemi agli sviluppatori o al software proveniente da ambienti simili a Unix, simili ai problemi con i file system macOS senza distinzione tra maiuscole e minuscole.

