Vantaggi di avere tipi di dati numerici come classi piuttosto che primitive [chiuso]

2

Mi chiedevo perché alcune lingue scelgano di implementare tipi numerici (booleani, interi, float, caratteri ecc.) come classi / oggetti (ad esempio Kotlin) e alcuni come tipi primitivi (ad esempio Java). Sto prendendo in considerazione specificamente le lingue interpretate piuttosto che le lingue compilate.

Di seguito sono riportate le differenze che sono riuscito a trovare:

Come classe:

  • Il tipo potrebbe essere esteso, in modo che le nuove classi possano essere trattate anche come tipi numerici (vale a dire applicabili agli operatori aritmetici).

  • Nessuna necessità per le classi wrapper, in quanto la funzionalità rilevante del tipo potrebbe essere incapsulata all'interno della classe del tipo numerico stesso.

Come primitivo:

  • Meno utilizzo della memoria, in quanto verrà memorizzato solo il valore del primitivo, piuttosto che la massa aggiuntiva necessaria per un oggetto.

Quali altri motivi potrebbe essere?

Modifica: non è un duplicato di questa domanda , poiché questa domanda riguarda esclusivamente il linguaggio design, piuttosto che ciò che dovrebbe essere scelto per uno specifico problema pratico e reale.

    
posta SamTebbs33 22.04.2015 - 22:58
fonte

1 risposta

6

Una delle caratteristiche più importanti che rendono efficiente un linguaggio di programmazione è la vicinanza dei tipi di dati supportati ai tipi di dati nativi dell'hardware sottostante. Una primitiva int corrisponde direttamente a una parola macchina; non c'è niente di meglio. Nel momento in cui trasformi la primitiva int in un oggetto Integer hai ridotto le prestazioni delle operazioni su interi di un ordine di grandezza.

Ora, le applicazioni moderne sono per lo più interfacce grafiche che non fanno altro che aspettare l'input dell'utente, quindi in molti casi l'efficienza non ha molta importanza e le considerazioni sulla facilità d'uso hanno la precedenza.

È molto utile e mantiene molte cose semplici da essere in grado di trattare i tipi numerici come oggetti, perché in tal caso è possibile applicare operazioni uniformi su di essi senza dover scrivere separatamente un codice speciale per ognuno di essi.

Ad esempio, implementando l'interfaccia Comparable , gli oggetti Integer sanno come confrontarsi con altri oggetti Integer e gli oggetti Double sanno come confrontarsi con altri oggetti Double , quindi essenzialmente la routine quicksort e la routine di ricerca binaria devono essere implementate una sola volta, per funzionare semplicemente con qualsiasi tipo di oggetto comparabile.

Detto questo, ti ripeto che se scrivi un'applicazione che ha un numero qualsiasi di scricchiolii da fare, le primitive sono sicuramente la strada da percorrere.

Potrebbe anche valere la pena notare che una delle cose più belle di C # è che è riuscito a ottenere il meglio da entrambi i mondi a questo riguardo: ha struct s, che sono tipi di valore che mappano (forse no perfettamente, ma abbastanza bene) ai tipi di macchine native e allo stesso tempo sono in grado di implementare le interfacce come fanno gli oggetti.

    
risposta data 22.04.2015 - 23:17
fonte