| 1 | = Uniba Lab: Stile di programmazione = |
| 2 | |
| 3 | == Note generali == |
| 4 | === UTF-8 === |
| 5 | Tutti i file devono avere codifica UTF-8. |
| 6 | Cio' si ottiene impostando il proprio editor in maniera tale da codificare i caratteri in utf-8 al momento del salvataggio. |
| 7 | Inoltre per i file PY e' opportuno far cominciare il file con lo slug: |
| 8 | {{{ |
| 9 | # -*- coding: utf-8 -*- |
| 10 | }}} |
| 11 | Questo istruisce opportunamente il compilatore a runtime. |
| 12 | |
| 13 | == File py == |
| 14 | I file .py sono relativi a tool, config, contents, __init__, browser view, interfaces, e qualsiasi altro modulo si voglia consolidare in un file a se stante. |
| 15 | |
| 16 | === Imports === |
| 17 | - Le imports devono essere effettuate tutte in testa al file (fatto salvo lo slug utf-8 |
| 18 | - Le imports dovrebbero essere ordinate alfabeticamente |
| 19 | - Le imports devono essere raggruppate tra loro sulla base del namespace di primo livello del pacchetto |
| 20 | - i blocchi delle imports devono essere separati da un blank line |
| 21 | {{{ |
| 22 | from CMFPlone.utils import getToolByName |
| 23 | |
| 24 | from DateTime import DateTime |
| 25 | |
| 26 | from zope import schema |
| 27 | from zope.interface import Interface |
| 28 | }}} |
| 29 | |
| 30 | === Naming Conventions === |
| 31 | 1. Fatte salve le regole generali per cui le variabili devono avere sempre nomi verbosi fatte salve le eccezioni: |
| 32 | - list comprehension: {{{[x for x in lista if x.valore == 'alfa']}}} |
| 33 | - cicli for numerali: {{{for i in range(1,1000):}}} |
| 34 | - abbreviazioni canoniche quali |
| 35 | msg:: messaggio |
| 36 | pwd:: password |
| 37 | flg:: flag[[br]] |
| 38 | ecc... |
| 39 | [[br]] |
| 40 | 2. Lavorando in ambiente Plone ne ereditiamo le naming conventions per la definizione di classi, metodi, interfacce.[[br]] |
| 41 | In genere il pattern è **{{{CamelCase}}}** per tutte le occorrenze (classi interfacce, metodi, variabili...). [[br]] |
| 42 | In particolare: |
| 43 | classi:: {{{class primaLetteraMinuscolaAltreCamel(object)}}} |
| 44 | interfacce:: {{{class INomeInterfaccia(Interface):}}} Cominciano con I maiuscola e seguono col CamelCase dell nome dell'interfaccia |
| 45 | metodi:: |
| 46 | - {{{def camelCaseMethod(self,): }}} |
| 47 | - {{{def __init__(self,): }}} i metodi privati/convenzionali python sono prefissati con il doppio undersrcore |
| 48 | - |
| 49 | variabili: |
| 50 | |
| 51 | |
| 52 | == Zope Page Template == |
| 53 | |
| 54 | estensioni:: |
| 55 | - *.pt |
| 56 | - *.cpt |
| 57 | |
| 58 | |