Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

TDD o Test-Driven Development
immagine docker per lavorare con lazarus e free pascal
Indice
Installare lazarus su mac osx sierra
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non)
Advanced Record Syntax: un esempio pratico
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
DB concetti fondamentali e DBGrid
Advanced Record Syntax
DB concetti fondamentali e ZeosLib
DB concetti fondamentali e connessioni standard
guida all'installazione di fpc trunk da subversion in linux gentoo
Creare un server multithread
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Free Pascal e Lazarus sul Raspberry Pi
fpcup: installazioni parallele di lazarus e fpc
Ubuntu - aggiornare free pascal e lazarus
Come interfacciare periferica twain
Lazarus 1.0
Aspetto retrò (Cmd Line)
Disporre le finestre in un blocco unico (come Delphi)
Zeos ... dietro le quinte (prima parte)
Lavorare con file in formato JSON con Lazarus
Overload di operatori
Dataset virtuale
Linux + Zeos + Firebird
Pascal Script
La gestione degli errori in Lazarus
Indy 10 - Invio email con allegati
Brute force
Le permutazioni
Da DataSource a Excel
StatusBar - aggirare l'errore variabile duplicata
Visualizzare un file Html esterno
Evidenziare voci TreeView
Toolbar
Direttiva $macro
Indy gestiore server FTP lato Client
TImage su Form e Panel
PopUpMenu sotto Pulsante (TSpeedButton)
Conversione numerica
Proprietà
Funzioni a parametri variabili
Overload di funzioni
Liste e puntatori
Conferma di chiusura di un applicazione
Il file: questo sconosciuto
UIB: Unified Interbase
System Tray con Lazarus
Intercettare tasti premuti
LazReport, PDF ed immagini
Lazarus e la crittografia
Ampliare Lazarus
Generare controlli RUN-TIME
TTreeview e Menu
TTreeView
Utilizzare Unità esterne
Lavorare con le directory
Realizzare programmi multilingua
Codice di attivazione
File INI
Esempio lista in pascal
Stabilire il sistema operativo
Recuperare codice HTML da pagina web
Trascinare un file nel programma
Mandare mail con Lazarus
Welcome to Italian community of Lazarus and Free Pascal. Please login or sign up.

Recenti

How To

Utenti
Stats
  • Messaggi totali: 20.582
  • Totale discussioni: 2.471
  • Online today: 25
  • Online ever: 5.949 (Luglio 30, 2026, 09:49:59 PM)
Utenti online
  • Users: 0
  • Guests: 22
  • Total: 22
22 Visitatori, 0 Utenti

Quante righe di codice al massimo, in media per ogni unit?

Aperto da Lorenzo, Marzo 27, 2026, 12:22:14 PM

Discussione precedente - Discussione successiva

Lorenzo

Perdonate se sembra sciocca la domanda,ma per quanto riguarda i progetti che siano in Pascal o in altri linguaggi,in questo caso Pascal,di media quante righe di codice al massimo sono UMANAMENTE accettabili per ogni units, 600,1000,2000?

E' che mi sento come suggestionato dal dubbio di diventare disordinato quando mi capita di scrivere classi con più di cinquanta elementi,tra variabili,oggetti vari e metodi.

Per fortuna che in questi casi,il nostro "migliore amico" è sempre l'ispettore del codice sia in Delphi che in Lazarus.
Amico che ci permette di orientarci tra i vari elementi di una classe,all'interno dell'implementazione dei metodi e addirittura rinominarli assieme ai loro riferimenti.

nomorelogic

#1
questo è un po' un dilemma di molti programmatori

C'è chi preferisce una unica unit per tutta una libreria, perché così chi la usa deve mettere in uses una sola unit.
C'è chi fa una unit per classe, più gestibile, ma escono una sfilza di unit.

Io uso un approccio un po' misto col quale mi trovo bene:
- faccio una unit per i tipi (record, costanti, oggetti, ecc...) di un certo "argomento"
- poi una unit che comprende tutte le classi che naturalmente servono a coprire lo stesso "argomento"

Non è sicuramente un approccio universale, tuttavia mi ci trovo bene e lo adotto spesso.

Edit:
il numero di righe è un parametro al quale non faccio mai attenzione
preferisco che le unit siano coerenti col significato che gli attribuisco
Imagination is more important than knowledge (A.Einstein)

bonmario

Anche io ragiono per argomento e non bado al numero di righe.

DragoRosso

#3
Ciao,
io ragione in modalità ancora più mista:

- una unit con tutte le dichiarazioni globali e tutte le classi, record e quant'altro di supporto generico (tipo RTL). Questa unit viene duplicata per ogni progetto e adattata.
- ogni ulteriore unit contiene classi, record privati, ed altro ad uso specifico. Ogni unit è indipendente come funzionalità e generalmente non richiama altre classi se non tramite la unit tipo RTL;
- una unit orchestatrice, cioè mantiene il monitor di tutto (ed ha accesso a tutto) per verificare tempi, leak ed altro. In tale unit vengono verificati anche semafori, crtical section ed altro relativi alla sincronizzaione tra Thread (normalmente una mia applicazione crea ed usa da 20 ai 50 Thread).
- una unit relativa al database, dove LI e solo LI vengono gestite le chiamate da e per il DB. L'accesso dal DB non è normalmente consentito da nessuna altra unit in tutta l'applicazione.
- il programma composto da unit / form che usano poi tutto il resto per svolgere il compito dell'applicazione.

La lunghezza di ogni unit non è importante, l'importante è che ogni unit sia sufficientemente autonoma per il suo scopo.
Ho unit da oltre 20000 righe tra codice e definzioni.

Sempre in generale, solo la unit simil RTL viene usata nella sezione interface delle altre (comrpese le unit / form dell'applicazione). Tutte le altre unit se necessario verranno richiamate nella sezione implementation.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Lorenzo

In linea di massima sono d'accordo con tutti gli interventi.
Trovo che sarebbe un fattore limitante mantenersi sotto una determinata di soglia a livello di righe di codice.
Anche usare una Unit per ogni argomento ha il suo fine orientativo.
Vi ringrazio per i vostri interventi.

Citazione di: DragoRosso il Marzo 28, 2026, 09:45:32 AM
- una unit relativa al database, dove LI e solo LI vengono gestite le chiamate da e per il DB. L'accesso dal DB non è normalmente consentito da nessuna altra unit in tutta l'applicazione.
- il programma composto da unit / form che usano poi tutto il resto per svolgere il compito dell'applicazione.

Riguardo questa parte aprirei un altro post dedicato al data module.
La trovo parecchio interessante dal punto di vista della sicurezza dell'applicazione dove il  nostro software ha anche il dovere di non fungere mai da veicolo per attacchi al DBMS.

DragoRosso

Cosa diversa, a differenza della lunghezza di una unit, è il numero di proprietà / procedure / funzioni / campi presenti in una classe o record.

Generalmente tendo a spezzare classi / record in ulteriori record base, proprio per non avere una lunghezza infinita di "singolarità" da gestire ... che poi nella maggior parte delle volte ciò torna produttivo perchè sono parti che vengono riusate anche in altri ambiti.

Un record con molti campi tendenzialmente è possibile "spezzarlo" in ultreiori record che poi lo comporranno.
Poi faccio uso abbondante (direi smodato) di record avanzati, ossia record che definiscono anche funzioni / procedure pubbliche per la gestione degli elementi (che generalmente sono privati).

Facendo coì mi torna molto facile adattarli ed espanderli, mantenendo piena compatibilità (elemento più che fondamentale per me) con il passato.
E ogni record ha la sua "finalization" e "initialization" sempre, i campi interni vengono sempre messi a default (che non è detto sia quello corrispondente al tipo del campo).
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Lorenzo

Tendenzialmente se ho una form,per le funzioni specifiche che hanno ha che fare con la macchina,uso i metodi privati,per richiamarli,i metodi pubblici che spesso mi fungono da controllers.
@DragoRosso
L'impiego dei record in Pascal può risultare geniale perchè trattandosi di una monoistanza(un solo oggetto) farebbero anche risparmiare memoria ed è anche un modo di incapsulare i metodi senza dichiararli all'interno di una classe come statici o metodi di classe.
Credo che i loro vantaggi abbiano ispirato gli sviluppatori di Golang con le Struct.

Tornando alla lunghezza delle righe,in Delphi oso di più perchè l'ispettore di codice pare un pelino più efficace e rapido.
Senza togliere nulla a quello di Lazarus che già fa molto bene il suo lavoro.


DragoRosso

Citazione di: Lorenzo il Aprile 04, 2026, 10:45:37 AM
Tornando alla lunghezza delle righe,in Delphi oso di più perchè l'ispettore di codice pare un pelino più efficace e rapido.
Senza togliere nulla a quello di Lazarus che già fa molto bene il suo lavoro.
Bhè, l'ho espresso più volte, Lazarus /FPC e Delphi sono due prodotti affini ma profondamente differenti. Con risorse e strutture (supporto ed economiche) completamente differenti e non paragonabili (anche solo per il fatto che Delphi sia a pagamento, a parte la CE).

In genere, ma forse sono di parte (anzi sicuramente), l'assistenza di Delphi nella produzione di codice è sicuramente un gradino superiore a quella di Lazarus. Se non altro per la dotazione standard di componenti, per la faciltà di una loro aggiunta e per gli ausili disponibili durante l'editing (come un server LSP, o il codeinsight o l'errorinsight o le vecchie IOTA).

Il "live binding", lo "style manager", il supporto integrato al "touch" e alle "gesture", la tastiera virtuale nativa sono strumenti a cui difficilmente riuscirei a fare a meno.

Lazarus / FPC hanno dalla loro il fatto che sono altamente modulabili con un sacco di "switch" che consentono di personalizzare sia la funzionalità del codice scritto che del codice compilato.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Lorenzo

#8
@DragoRosso
E' proprio per gli strumenti da te citati,utilizzo Delphi CE per prototipare un progetto concepito per FCP/Lazarus.
C'è FireDAC mi dà molti meno grattacapi di Zeos.

Sono più che d'accordo: le soluzioni commerciali sono e saranno sempre più rifinite rispetto alla controparte open source.
A parte diverse meravigliose eccezioni in cui il software open source eguaglia(se non addirittura supera) in qualità il software commerciale.
Prima di fare un colloquio per una software house oramai mi informo prima per capire se usano tecnologie open source,perchè voglio capire se per sviluppare usano anche tecnologie open source o solo quest'ultime.
Perchè nel caso sviluppassero con solo materiale open source(perdonate il pregiudizio),secondo me o si tratta quasi sempre di una startup.

DragoRosso

Citazione di: Lorenzo il Aprile 04, 2026, 06:51:20 PM
Perchè nel caso sviluppassero con solo materiale open source(perdonate il pregiudizio),secondo me o si tratta quasi sempre di una startup.
Tieni presente che Lazarus / FPC viene usato da diversi membri del forum in produzione (per prodotti commerciali).
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Lorenzo

Su Lazarus/FPC non ho dubbi sulla qualità,lo sto facendo anch'io.
Perchè per un singolo,le licenze Embarcadero possono essere un bel salasso.

Parlo in generale,visto che mi occupo principalmente di software in C++ e C# e riguardo a molte librerie Open Source,ci troviamo dinanzi a prodotti spesso scarsamente documentati o poco rifiniti.

DragoRosso

Citazione di: Lorenzo il Aprile 07, 2026, 04:40:00 PM
Su Lazarus/FPC non ho dubbi sulla qualità,lo sto facendo anch'io.
Perchè per un singolo,le licenze Embarcadero possono essere un bel salasso.
Parlo in generale,visto che mi occupo principalmente di software in C++ e C# e riguardo a molte librerie Open Source,ci troviamo dinanzi a prodotti spesso scarsamente documentati o poco rifiniti.

Bhè in quei linguaggi (in particolare sul C++) è probabile che la profusione di energie vada sul codice più che sulla documentazione. Inoltre sono linguaggi "popolari" quindi si trovano anche "librerie" sviluppate dalla IA o con ampie porzioni di copia / incolla.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Lorenzo

Citazione di: DragoRosso il Aprile 07, 2026, 04:43:52 PM

Bhè in quei linguaggi (in particolare sul C++) è probabile che la profusione di energie vada sul codice più che sulla documentazione. Inoltre sono linguaggi "popolari" quindi si trovano anche "librerie" sviluppate dalla IA o con ampie porzioni di copia / incolla.

Hai nominato i due principali mali,la IA ed i copia & incolla,entrambe sembrano condividere le stesse probabilità di fallacità.
Sulle fallacità IA,tiro un sospiro di sollievo: c'è ancora speranza per noi umani.

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.