2011-11-05 20 views
7

In Mathematica I simboli incorporati iniziano con lettere maiuscole. Pertanto è prassi comune non iniziare i nomi dei simboli creati dall'utente con lettere maiuscole.Lettere maiuscole per i modelli con nome

Quanto deve essere estesa questa limitazione ad altri aspetti della sintassi? Le buone pratiche richiedono che una lettera maiuscola non venga utilizzata per un modello denominato in un'espressione SetDelayed o RuleDelayed (dove tali nomi sono localizzati)?

Penso che le maiuscole espandano il namespace in un modo utile e visualizzano visivamente le lettere minuscole L e 1, ad esempio. Consentono inoltre che gli argomenti vengano nominati in maniera da manuale.

Se vengono introdotti nuovi simboli nelle versioni future, i patter denominati devono sostituirli e il codice esistente non deve interrompersi.

Un cono è ambiguità se vengono utilizzati nomi esistenti come N e D, ma ritengo che sia il contesto di utilizzo sia l'evidenziazione della sintassi FrontEnd lo attenuino.

+0

+1 Ma 1 pensa che 1 L minuscolo è facile da distinguere da 1 se i tuoi nomi sono abbastanza descrittivi. Inoltre, l'utilizzo dell'espansione dello spazio dei nomi dovrebbe essere considerato con attenzione: nominare un symbo1 myHome e un altro MyHome è una ricetta di stufato di bug c1assica1 ... –

+0

@belisarius Dal momento che ho una predilezione per il terse coding, la maggior parte dei miei nomi di pattern sono un singolo carattere, quindi 'l' e' 1' sono abbastanza simili. Allo stesso modo, è dubbio che confonderei i simboli in 'f [A_, a_]: = ...'. Usato globalmente, sono d'accordo con te e renderò i miei nomi globali più dettagliati, ma in questo caso specifico mi chiedo se posso cambiare la mia pratica. –

+0

Il riflesso "la maggior parte" non è preciso, ma molte sono lettere singole, specialmente in breve, regole di sostituzione ben incapsulate. Vedi [questa risposta] (http://stackoverflow.com/questions/5644801/tweaking-style-attributes-of-existing-graphics-objects-in-mathematica/5645482#5645482); Mi piacerebbe cambiare 'l: Line [__]' in 'L_Line' in quel codice. –

risposta

2

Questa è una pratica accettata che non accetto!

Mi riferisco a pacchetti, per uso personale o di terze parti. In generale, voglio che il mio lavoro finito sia il più possibile indistinguibile dall'aspetto, dall'aspetto e dalla qualità ideali (WRI). Include nomi descrittivi lunghi per i miei comandi, con tutte le convenzioni di maiuscole utilizzate da WRI.

Naturalmente i miei pacchetti sono - al momento - tutt'altro che vicino alla qualità WRI, ma almeno sto cercando di integrarli nel miglior modo possibile con la funzionalità MMA standard. E questo include avere comandi in maiuscolo.

Durante lo sviluppo, l'evidenziazione della sintassi mi avvisa di possibili conflitti con le funzioni MMA standard, pertanto è possibile intraprendere azioni appropriate. Naturalmente i miei comandi e pacchetti potrebbero entrare in conflitto con le versioni future di MMA, ma nulla dura per sempre e se un futuro comando MMA è simile nel nome e nella funzionalità a uno dei miei, passerò semplicemente alla funzione standard con modifiche minime o nulle denominazione.

Oltre a ciò, trovo molto più attraente l'uso visuale di lettere maiuscole per distinguere i comandi del pacchetto da variabili temporanee più modeste. Se vuoi vedere qualche codice visivamente opaco/sgradevole, guarda solo un codice Maple medio.

Riguardo alle variabili di pattern, cerco di dare nomi di pattern significativi, per lo più brevi, senza maiuscole, quindi l'utente può indovinare guardando il modello Ctrl/Cmd-K che tipo di input è previsto nei miei comandi del pacchetto.

+0

Direi che è utile non usare i nomi in maiuscolo durante il lavoro/i quaderni interattivi per evitare * accidental * conflitti con i built-in * o * con i simboli del pacchetto. Se i simboli del pacchetto sono in maiuscolo che aiuteranno l'utente in questo, non ostacolarlo. Quindi sì, preferisco anche i pacchetti per avere nomi di simboli in maiuscolo. – Szabolcs

+1

Secondo Roman Maeder, usare i nomi in maiuscolo per le funzioni pubbliche nei pacchetti * è * una pratica accettata. Per i pacchetti, i nomi in maiuscolo non presentano alcun problema, poiché il nome completo (lungo) è diverso, poiché i contesti sono diversi ('' Sistema' '' rispetto a qualsiasi sia il contesto del pacchetto), quindi gli scontri si manifestano come istanze di shadowing. Evitare lo shadowing è un problema diverso. –

Problemi correlati