Un po 'tardi qui, ma vorrei provare a creare una definizione precisa: le funzioni statiche sono funzioni che non fanno o non possono fare riferimento a proprietà / metodi dell'istanza della classe contenente.
In alcuni linguaggi, come C #, potrebbero esserci campi statici o proprietà in classi statiche, quindi non è esatto dire che non sono usati per lo stato; una funzione statica potrebbe fare uso dello stato statico (globale).
Fondamentalmente, si riduce a: le funzioni statiche, come qualsiasi cosa statica, sono utili quando ha senso che siano sempre disponibili senza dipendenza da istanze non statiche.
Le funzioni di supporto, come le funzioni matematiche, sono spesso un esempio, ma ce ne sono altre.
Se la classe creata richiede che i dati siano immutabili, potrebbe avere senso creare funzioni statiche che accettano un'istanza e passano una nuova istanza poiché l'istanza non può (o non dovrebbe) essere modificata. Le classi di stringa, ad esempio, potrebbero avere funzioni statiche che accettano una stringa (o 2 o più) e restituiscono una nuova stringa.
Un altro motivo potrebbe essere che esiste una classe che mantiene uno stato globale o dati di qualche tipo. Potrebbero esserci funzioni statiche che funzionano con le proprietà o i campi statici in quella classe statica.