Dovresti scegliere un intero su stringa se i valori un intero può avere e le operazioni un supporto intero sono più adatte per i dati in questione rispetto ai valori e alle operazioni di una stringa.
Va bene se alcuni dei valori / operazioni di quel tipo non hanno senso per quei dati, semplicemente perché ci sono così tanti diversi tipi di dati del mondo reale che se provassimo a fare in modo che tutti i database e i linguaggi di programmazione abbiano tipi integrati separati che si abbinino perfettamente a loro, non faremmo mai un vero lavoro.
Innanzitutto, gli indirizzi IP. Assumendo per semplicità ci preoccupiamo solo degli indirizzi IPv4, quindi RFC 760 dice "Gli indirizzi sono a lunghezza fissa di quattro ottetti (32 bit) ". Questo ci dice immediatamente che l'insieme di valori possibili per un intero senza segno a 32 bit è esattamente uguale all'insieme di indirizzi IP validi . In linea di principio, una rappresentazione a stringa consentirebbe tutti i tipi di indirizzi IP chiaramente non validi come "9999.9999.9999.-42e5" e "Hello World!" a meno che non scriviamo un gruppo di codice di convalida. Questa è la ragione più che sufficiente per utilizzare gli interi come rappresentazione "back-end" degli indirizzi IP, anche se il resto del codice preferisce utilizzare una stringa o qualche oggetto con un metodo di stampa abbastanza per garantire che si ottenga normalmente il "punto decimale" "La notazione degli umani piace. Se è richiesto un altro argomento, si noti che una parte del motivo della notazione decimale punto per gli indirizzi IP è così comune che i quattro componenti a 8 bit di un indirizzo IP hanno spesso significati separati. Quindi, probabilmente vorremmo estrarre quei quattro numeri a 8 bit separati da un indirizzo IP di volta in volta, e prendere il primo o l'ultimo 8 bit di un intero a 32 bit è un'operazione molto più semplice e veloce di tokenizing a string .
Quindi abbiamo numeri di porta. I protocolli TCP e UDP definiscono una porta come un numero intero senza segno a 16 bit , quindi, ancora una volta, più o meno lo stabilirà. Ma un altro argomento che si applica alle porte è che ci sono molti "range" importanti di porte, come da 0 a 1023 che sono le "porte conosciute" usate dai processi di sistema, e questi intervalli sono chiaramente definiti con l'ordinamento intero in mente piuttosto che ordinare stringhe . Nessuno sano di mente affermerebbe che la porta 50 non rientra nell'intervallo delle porte conosciute solo perché la stringa "50" è maggiore della stringa "1023".
Noterai che in entrambi questi esempi non ho descritto alcun "calcolo" come addizione o sottrazione, quindi la risposta letterale alla tua domanda è "no". Non conosco nessuna situazione in cui avrebbe senso aggiungere due indirizzi IP o numeri di porta. Ancora una volta, la maggior parte dei dati del mondo reale non sarà mai adatta perfetta per qualsiasi tipo che diamo.
E poiché ho sostenuto "interi" su entrambi gli esempi, includo alcuni controesempi: numeri di telefono e indirizzi. Per gli indirizzi stradali probabilmente non ho nemmeno bisogno di argomentare; è così ovvio che nessun tipo numerico potrebbe mai sperare di rappresentare adeguatamente quel tipo di informazione. Per i numeri di telefono è meno ovvio, ma considera quanto segue: la lunghezza di un numero di telefono varia in base al paese; la lunghezza è sempre misurata in cifre, non in bit / byte / ottetti; vari simboli come +, # e () sono talvolta usati per rappresentare informazioni importanti come codici di paesi e prefissi; Non riesco a pensare a nessun motivo per aggiungere, sottrarre o confrontare due numeri di telefono; estrarre un codice paese o prefisso da un numero di telefono completo è un vero problema di tokenizzazione delle stringhe che non possiamo ridurre a un'operazione di cambio di bit perché tutte le suddette hanno lunghezze variabili.