Perché Java (e anche altri lang) hanno funzioni apparentemente ridondanti come "str.startsWith (String str, int fromOffset)"?

0

Mi chiedevo perché Java e altri linguaggi di programmazione implementassero (apparentemente) funzioni ridondanti come:

"foobar".startsWith("bar", 3);
// same as
"foobar".substring(3).startsWith("bar");

// or even indexOf(str, offset), regionMatches(...)

C'è una ragione dietro a questo?

    
posta Wes 11.04.2015 - 09:08
fonte

2 risposte

6

Ci sono poche possibili ragioni per questo tipo di cose:

  1. Come nella risposta di JacquesB, potrebbe essere semplicemente convenience per l'utente della libreria chiamare un singolo metodo piuttosto che due metodi e mantenere il loro codice più sintetico.

  2. Le prestazioni potrebbero essere una considerazione. Se si chiama .substring(3) verrà creata una nuova stringa, e quindi si esegue il looping della stringa due volte, è possibile 1 per .startsWith("bar", 3) da implementare senza creare una sottostringa temporanea e solo loop attraverso la stringa una volta. .startsWith ha un altro piccolo punto di ottimizzazione: può uscire presto se il primo carattere non corrisponde, .indexOf dovrà continuare a controllare il resto della stringa.

  3. Espressione esplicita : mentre è abbastanza ovvio ciò che stai facendo con una delle due varianti, richiede al lettore un po 'di tempo per considerare lo scopo rispetto a una singola chiamata di metodo che dì esattamente quello che stai facendo.

  4. Come sottolinea Phillipp, la cronologia può essere un fattore, l'aggiunta di nuovi metodi a un'API è abbastanza semplice, la modifica o la rimozione dei metodi esistenti è molto più difficile in quanto interromperà il codice esistente, quindi a volte potresti semplicemente vedere un artefatto della storia dello sviluppo dell'API 2 .

1 Non ho idea se questo è effettivamente il caso qui, ma sarei sorpreso se lo fa.
2 Probabilmente non in questo caso però.

    
risposta data 11.04.2015 - 11:10
fonte
5

Queste sono chiamate funzioni di convenienza. Sono inclusi in modo che gli utenti possano scrivere codice più breve e più semplice.

Si noti che quasi tutte le librerie sono "ridondanti" nel senso che gli utenti possono scrivere lo stesso codice al di fuori della libreria. Tuttavia il punto di utilizzo delle librerie è che si risparmia tempo e codice, e si può riutilizzare la conoscenza della biblioteca in diversi progetti.

    
risposta data 11.04.2015 - 10:04
fonte