Domanda sul codice
Home › Forum › Discussioni › Domanda sul codice
- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 6 anni, 9 mesi fa da Giuseppe Vizziello.
-
AutorePost
-
-
MarcusOspite
Per curiosità stavo dando un’occhiata al codice (visto che ho imparato un pochino di C++ come hobby), non riconosco il linguaggio ma pare comunque comprensibile, potrei sapere di che linguaggio si tratta? 🙂
Seconda domanda, stavo guardando questa funzione qua:Function cerca_riga_rossa(oNomeSheet) ' (c) Giuseppe Vizziello 2014 ' oNomeSheet = ThisComponent.currentcontroller.activesheet.Name oSheet = ThisComponent.Sheets.getByName(oNomeSheet) lastRow=getLastUsedRow(oSheet) For i = 0 To lastRow 'print oSheet.GetCellByPosition(0,i).cellstyle ' ThisComponent.CurrentController.Select(oSheet.getCellByPosition(0, i) If oSheet.GetCellByPosition(0,i).cellstyle = "Riga_rossa_Chiudi" And _ oSheet.GetCellByPosition(1,i).cellstyle = "Riga_rossa_Chiudi" And _ oSheet.GetCellByPosition(2,i).cellstyle = "Riga_rossa_Chiudi" Then cerca_riga_rossa = i Exit For End If Next if cerca_riga_rossa = 0 Then ' msgbox ("Quasi certamente manca la riga rossa di chiusura della tabella!"& CHR(10)_ ' & "Controlla e PROVVEDI!", 16, "ERRORE!") ThisComponent.CurrentController.Select(oSheet.getCellByPosition(0, getLastUsedRow(oSheet)+1)) ScriptPy("pyleeno.py","inserisci_riga_rossa") ' Exit Function End If cerca_riga_rossa = i End Function
ed ho notato che si parte dalla riga 0 pur conoscendo la riga finale. Visto che la riga rossa si trova alla fine del documento, non sarebbe più efficiente fare un loop partendo dall’ultima riga ed andando a ritroso fino a 0?
Inoltre mi domandavo,
For i = 0 To lastRow
mostra che ‘=’ serve per assegnare un valore ad una variabile, però in quella funzione c’è anche
if cerca_riga_rossa = 0 Then
che mostra che ‘=’ è anche il comparison operator, in C++ sarebbe ‘==’. E’ un bug nel codice o in questo linguaggio il simbolo ‘=’ ha diversi significato a seconda del contesto?
Inoltre, volevo provare a personalizzare il comportamento del bottone “Nuova Voce” in modo che si ricordi il setting dell’ultima voce che ho modificato e crei una nuova voce settata nello stesso modo(sempre che sia una cosa legale da fare), percui potrei sapere il nome della funzione dietro il bottone “Nuova Voce”? 🙂 -
Giuseppe VizzielloAmministratore del forum
Ciao Marcus,
LeenO è scritto essenzialmente in due linguaggi: FreeBasic e Python, poi c’è XML con cui sono scritti i menù. Tu ti stai riferendo al FreeBasic con cui Bart Aimar scrisse Ultimus da cui LeenO deriva.
Ormai evito volentieri di scrivere codice in FreeBasic limitandomi solo a correggere piccoli bug. Quando si tratta di dover manomettere porzioni consistenti di codice preferisco riscrivere le funzioni in Python e questo succede da almeno un paio di anni. Niente C++.La funzione cerca_riga_rossa(oNomeSheet) in effetti potrebbe iniziare la sua ricerca almeno dalla metà del foglio, ma ricorda che, trattandosi di un “comune” foglio di calcolo, è possibile che in calce al foglio del computo possono esserci anche altri dati, oltre il limite della riga rossa, ad occupare dello spazio. Considerato che questa operazione di ricerca è piuttosto rara e non comporta tempi lunghi, l’ottimizzazione della funzione non è determinate per la velocizzazione del programma. In realtà va utilizzata solo in caso di cancellazione accidentale della riga rossa nel foglio e devo dire che questo non mi succede da parecchio tempo.
La riga rossa ha la funzione di delimitare la fine del computo e costituisce una sorta di margine oltre il quale i comandi di LeenO si rifiutano di funzionare.
Per inciso, se la riga rossa non c’è, cercare dall’inizio del foglio o dalla sua fine, non fa differenza.Il simbolo ‘=’ in FreeBasic ha il duplice significato di assegnare un valore ad una variabile e di comparison operator, quindi non è un bug.
Il pulsante “Nuova Voce” avvia lo script Python nuova_voce_scelta() che si trova nel file ../pyLeenO/pyleeno.py.
Ma cosa intendi dire per “sempre che sia una cosa legale da fare”?
LeenO è Free Software rilasciato con licenza LGPL, pertanto liberamente scaricabile ed utilizzabile per tutti gli usi.
Per questo motivo aderisce perfettamente alle quattro libertà essenziali che caratterizzano in software libero che qui testualmente cito:Un programma è software libero se gli utenti del programma godono delle quattro libertà fondamentali:
– Libertà di eseguire il programma come si desidera, per qualsiasi scopo (libertà 0).
– Libertà di studiare come funziona il programma e di modificarlo in modo da adattarlo alle proprie necessità (libertà 1). L’accesso al codice sorgente ne è un prerequisito.
– Libertà di ridistribuire copie in modo da aiutare il prossimo (libertà 2).
– Libertà di migliorare il programma e distribuirne pubblicamente i miglioramenti da voi apportati (e le vostre versioni modificate in genere), in modo tale che tutta la comunità ne tragga beneficio (libertà 3). L’accesso al codice sorgente ne è un prerequisito.
https://www.gnu.org/philosophy/free-sw.it.htmlFai un po’ tu…
Se ti va di confrontarti e magari dare una mano, raggiungici su https://t.me/leeno_computometrico e proviamo ad organizzarci. -
MarcusOspite
Ti ringrazio Giuseppe, tutto chiaro 🙂
Pur essendo un principiante in fatto di programmazione, il fatto che in FreeBasic l’ ‘=’ può essere sia assignment che comparison operator mi fà un pò rabbrividire…ma forse non posso dire nulla, visto che in C++ tramite l’overload degli operatori in sostanza l’ ‘=’ potrebbe fare qualsiasi cosa xD
Comunque python sembra interessante e diffuso, e a quanto pare nessun vero programmatore conosce un solo linguaggio, quindi magari nel futuro prossimo (visto che al momento sto studiando algoritmi e c++) gli darò un’occhiata più da vicino.
Grazie per l’invito ma per ora passo, sono ancora un principiante, magari mi farò avanti quando potrò realmente contribuire 🙂 -
Giuseppe VizzielloAmministratore del forum
Io non sono un programmatore. Mi ritengo solo un utente avanzato del copia/incolla.
Noi siamo qui…
-
-
AutorePost