Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22291 > unrolled thread

raggruppamento delle variabili

Started byalex <1j9448a02@lnx159sneakemail.com.invalid>
First post2018-10-13 12:42 +0200
Last post2018-10-17 17:52 +0200
Articles 20 on this page of 31 — 5 participants

Back to article view | Back to it.comp.www.php


Contents

  raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-13 12:42 +0200
    Re: raggruppamento delle variabili fmassei@gmail.com - 2018-10-13 13:42 -0700
      Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-14 13:08 +0200
        Re: raggruppamento delle variabili fmassei@gmail.com - 2018-10-14 04:16 -0700
          Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-14 15:48 +0200
            Re: raggruppamento delle variabili fmassei@gmail.com - 2018-10-14 12:13 -0700
              Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-14 22:24 +0200
                Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-15 00:20 +0200
                  Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-15 18:26 +0200
                    Re: raggruppamento delle variabili Flavix <imeil@a.a> - 2018-10-17 17:45 +0200
                    Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-18 22:45 +0200
                      Re: raggruppamento delle variabili fmassei@gmail.com - 2018-10-18 15:45 -0700
                        Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-20 16:16 +0200
                          Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-21 11:46 +0200
                            Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-21 13:12 +0200
                              Re: raggruppamento delle variabili Flavix <imeil@a.a> - 2018-10-21 14:26 +0200
                                Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-21 15:07 +0200
                                  Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-21 15:11 +0200
                      Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-19 22:35 +0200
                        Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-20 22:36 +0200
                          Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-21 11:56 +0200
                            Re: raggruppamento delle variabili Leonardo Serni <lserni@gmail.com> - 2018-10-21 13:13 +0200
                            Re: raggruppamento delle variabili Alessandro Pellizzari <shuriken@amiran.it> - 2018-10-22 10:11 +0100
                              Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-22 13:35 +0200
                                Re: raggruppamento delle variabili Alessandro Pellizzari <shuriken@amiran.it> - 2018-10-22 12:55 +0100
                                  Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-22 17:19 +0200
                                    Re: raggruppamento delle variabili Alessandro Pellizzari <shuriken@amiran.it> - 2018-10-22 16:31 +0100
                                      Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-22 17:56 +0200
                Re: raggruppamento delle variabili fmassei@gmail.com - 2018-10-14 21:38 -0700
                  Re: raggruppamento delle variabili alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-10-15 19:09 +0200
                  Re: raggruppamento delle variabili Flavix <imeil@a.a> - 2018-10-17 17:52 +0200

Page 1 of 2  [1] 2  Next page →


#22291 — raggruppamento delle variabili

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-13 12:42 +0200
Subjectraggruppamento delle variabili
Message-ID<ppsi60$1dd7$1@gioia.aioe.org>
function ex1() {
	// dati
	$a = 1;
	$b = 2;
	// risultato
	$x = $a + $b;

	// dati
	$c = 3;
	$d = 4;
	// risultato
	$y = $c * $d;
}

function ex2() {
	// dati
	$a = 1;
	$b = 2;
	$c = 3;
	$d = 4;

	// risultati
	$x = $a + $b;
	$y = $c * $d;
}

Quale tipo di raggruppamento scegliere?
Sembra una stupidaggine eppure ogni volta è un lavaggio mentale :D

[toc] | [next] | [standalone]


#22294

Fromfmassei@gmail.com
Date2018-10-13 13:42 -0700
Message-ID<41b40b1c-aa68-4b35-9f99-24406daa80ea@googlegroups.com>
In reply to#22291
On Saturday, October 13, 2018 at 6:42:10 AM UTC-4, alex wrote:
> function ex1() {
> 	// dati
> 	$a = 1;
> 	$b = 2;
> 	// risultato
> 	$x = $a + $b;
> 
> 	// dati
> 	$c = 3;
> 	$d = 4;
> 	// risultato
> 	$y = $c * $d;
> }
> 
> function ex2() {
> 	// dati
> 	$a = 1;
> 	$b = 2;
> 	$c = 3;
> 	$d = 4;
> 
> 	// risultati
> 	$x = $a + $b;
> 	$y = $c * $d;
> }
> 
> Quale tipo di raggruppamento scegliere?
> Sembra una stupidaggine eppure ogni volta è un lavaggio mentale :D
>

Assumendo ovviamente sia un esempio di qualcosa di più generale, e che non
ti rifai ad un coding standard, che decidi di seguire o che t'impongono,
che altrimenti queste cose le dice:

Il secondo.

Anche nei linguaggi dove non c'è bisogno di dichiarare le varibili
all'inizio del blocco (invece e.g. del C, dove il compilatore è one-pass
e ha la necessità di sapere quanto stack allocare alla funzione spostando
lo stack pointer) il programmatore ha subito sott'occhio quanta memoria
necessita la funzione (statica, automatica o dinamica che sia), che torna
comodo quando fai debug di casi di out of memory, o comunque di casi di
troppa memoria allocata.

In PHP non succede mai, ma visto che anche nei linguaggi dove non serve
quasi tutti lo fanno per convenzione (e.g. C++, Java), non vedo perché
andare contro ad una prassi comune che fonda le sue regole sul buon senso.

Se vuoi, è lo stesso motivo del perché si usa il pre-incremento nei for
invece del post-incremento (for(; $i<$N; ++$i) invece di $i++ (che deriva,
a parte un bug di un famoso vecchio compilatore, dall'ordine in cui gli
operatori sono eseguiti in C++)) o quando si scrive la parentesi graffa
di aperta funzione sulla stessa riga della definizione (e.g. PHP, Java)
invece di andare a capo (e.g. C) (che deriva dal sottolineare che, essendo
le funzioni innestabili, si sta aprendo un blocco come un altro, con
l'unica differenza che ha un nome).

Quando si programma in team le convenzioni sono tanto importanti quanto
le regole del linguaggio, beh, quasi.


Ciao!

[toc] | [prev] | [next] | [standalone]


#22295

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-14 13:08 +0200
Message-ID<ppv8b0$1kjf$1@gioia.aioe.org>
In reply to#22294
Il 13/10/2018 22:42, fmassei@gmail.com ha scritto:
> Quando si programma in team le convenzioni sono tanto importanti quanto
> le regole del linguaggio, beh, quasi.
> 

Quindi meglio tenere separati i dati (a, b, c, d...) dalle incognite (x, 
y, z...)?

[toc] | [prev] | [next] | [standalone]


#22296

Fromfmassei@gmail.com
Date2018-10-14 04:16 -0700
Message-ID<65b2ad17-ba84-4d9e-973e-2968493bbcbd@googlegroups.com>
In reply to#22295
On Sunday, October 14, 2018 at 7:12:34 AM UTC-4, alex wrote:
> Il 13/10/2018 22:42, fmassei@gmail.com ha scritto:
> > Quando si programma in team le convenzioni sono tanto importanti quanto
> > le regole del linguaggio, beh, quasi.
> > 
> 
> Quindi meglio tenere separati i dati (a, b, c, d...) dalle incognite (x, 
> y, z...)?
>

No, i "dati" li metti come parametri se son parametri, come costanti se
son costanti. Io mi riferivo solo alle variabili locali.


Ciao!

[toc] | [prev] | [next] | [standalone]


#22297

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-14 15:48 +0200
Message-ID<ppvhmv$40c$1@gioia.aioe.org>
In reply to#22296
Il 14/10/2018 13:16, fmassei@gmail.com ha scritto:
> On Sunday, October 14, 2018 at 7:12:34 AM UTC-4, alex wrote:
>> Il 13/10/2018 22:42, fmassei@gmail.com ha scritto:
>>> Quando si programma in team le convenzioni sono tanto importanti quanto
>>> le regole del linguaggio, beh, quasi.
>>>
>>
>> Quindi meglio tenere separati i dati (a, b, c, d...) dalle incognite (x,
>> y, z...)?
>>
> 
> No, i "dati" li metti come parametri se son parametri, come costanti se
> son costanti. Io mi riferivo solo alle variabili locali.
> 
> 
> Ciao!
> 

Come ordineresti variabili, costanti, variabili statiche, ecc.?
Ad esempio:

class Test {
	const PIPPO = 123;
	static private $pluto = null;
	public $giggio = null;

	function test(){
		static $simona = null;
		$sara = null;
	}
}

Come vedi io di solito seguo il l'ordine
COSTANTI
VARIABILI STATICHE
VARIABILI

Oppure è meglio raggrupparle per visibiliità (public, protected, private)?

[toc] | [prev] | [next] | [standalone]


#22298

Fromfmassei@gmail.com
Date2018-10-14 12:13 -0700
Message-ID<88c3a75e-aea2-466a-a8dc-24a5473c74e3@googlegroups.com>
In reply to#22297
On Sunday, October 14, 2018 at 9:52:34 AM UTC-4, alex wrote:
> <snip>
> Come vedi io di solito seguo il l'ordine
> COSTANTI
> VARIABILI STATICHE
> VARIABILI
> 
> Oppure è meglio raggrupparle per visibiliità (public, protected, private)?
>

A me pure piace così, costanti, variabili, funzioni.
Per public/protected/private io personalmente non ci faccio molto caso a
patto che le funzioni stiano insieme per visibilità, perché se la classe
è lunga, e non hai un IDE di qualche tipo, comunque devi scorrerne gran
parte per leggerla. La più accreditata che ho visto, comunque, è mettere
prima gli overload, poi le funzioni private, e le public in fondo.


Ciao!

[toc] | [prev] | [next] | [standalone]


#22299

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-14 22:24 +0200
Message-ID<pq08v8$1afe$1@gioia.aioe.org>
In reply to#22298
Il 14/10/2018 21:13, fmassei@gmail.com ha scritto:
> On Sunday, October 14, 2018 at 9:52:34 AM UTC-4, alex wrote:
>> <snip>
>> Come vedi io di solito seguo il l'ordine
>> COSTANTI
>> VARIABILI STATICHE
>> VARIABILI
>>
>> Oppure è meglio raggrupparle per visibiliità (public, protected, private)?
>>
> 
> A me pure piace così, costanti, variabili, funzioni.
> Per public/protected/private io personalmente non ci faccio molto caso a
> patto che le funzioni stiano insieme per visibilità, perché se la classe
> è lunga, e non hai un IDE di qualche tipo, comunque devi scorrerne gran
> parte per leggerla. La più accreditata che ho visto, comunque, è mettere
> prima gli overload,

Cioè le funzioni ereditate?

> poi le funzioni private, e le public in fondo.

Io metto:

getInstance() (se la classe è singleton)
costruttore
metodo principale della classe
eventuali altri metodi: i cosiddetti tools (metodi di supporto)

Anche se l'ideale sarebbe avere micro-classi (con non più di tre metodi):

getInstance() (se la classe è singleton)
costruttore
metodo principale della classe

e ogni tools in altrettante singole classi.

[toc] | [prev] | [next] | [standalone]


#22300

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-15 00:20 +0200
Message-ID<i0f7sdh01alq22seikfc3fusnta964gneh@L.Serni>
In reply to#22299
On Sun, 14 Oct 2018 22:24:45 +0200, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Anche se l'ideale sarebbe avere micro-classi (con non più di tre metodi):

>getInstance() (se la classe è singleton)
>costruttore
>metodo principale della classe

Dipende da cosa stai facendo. Ho un oggetto Documento che deve implementare
read(), write(), validate() e submit(); cosa me ne farei io di dividerlo in
quattro o più classi? Tenendo conto che read() contiene appunto soltanto il
codice specifico di quel tipo di documento (il resto è nella classe padre),
e così le altre funzioni?

Se mai è getInstance() di cui si può fare a meno; sospetto tu la possa - in
quasi tutti i casi - estrarre in un trait.

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22302

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-15 18:26 +0200
Message-ID<pq2f4a$pq9$1@gioia.aioe.org>
In reply to#22300
Il 15/10/2018 00:20, Leonardo Serni ha scritto:
> On Sun, 14 Oct 2018 22:24:45 +0200, alex
> <1j9448a02@lnx159sneakemail.com.invalid> wrote:
> 
>> Anche se l'ideale sarebbe avere micro-classi (con non più di tre metodi):
> 
>> getInstance() (se la classe è singleton)
>> costruttore
>> metodo principale della classe
> 
> Dipende da cosa stai facendo. Ho un oggetto Documento che deve implementare
> read(), write(), validate() e submit(); 

- se i metodi sono molto corposi
- se quindi alcuni di loro è meglio che vengano spezzettati in metodi 
più piccoli e più leggibili
- se comincio ad avere una classe con quasi 10 metodi...

...mi è già venuto il panico :D

> cosa me ne farei io di dividerlo in
> quattro o più classi? Tenendo conto che read() contiene appunto soltanto il
> codice specifico di quel tipo di documento (il resto è nella classe padre),
> e così le altre funzioni?
> 
> Se mai è getInstance() di cui si può fare a meno; sospetto tu la possa - in
> quasi tutti i casi - estrarre in un trait.

Estrarre in un trait?

[toc] | [prev] | [next] | [standalone]


#22310

FromFlavix <imeil@a.a>
Date2018-10-17 17:45 +0200
Message-ID<pq7loj$19vc$1@gioia.aioe.org>
In reply to#22302
Il 15/10/2018 18:26, alex ha scritto:
> 
> - se i metodi sono molto corposi
> - se quindi alcuni di loro è meglio che vengano spezzettati in metodi 
> più piccoli e più leggibili
> - se comincio ad avere una classe con quasi 10 metodi...
 >
> ...mi è già venuto il panico :D

Io non lo trovo così sbagliato il tuo ragionamento :D

>> cosa me ne farei io di dividerlo in
>> quattro o più classi? Tenendo conto che read() contiene appunto 
>> soltanto il
>> codice specifico di quel tipo di documento (il resto è nella classe 
>> padre),
>> e così le altre funzioni?
>>
>> Se mai è getInstance() di cui si può fare a meno; sospetto tu la possa 
>> - in
>> quasi tutti i casi - estrarre in un trait.
> 
> Estrarre in un trait?

Forse voleva dire "estrarre da un trait" (ma non ne sono sicuro)

[toc] | [prev] | [next] | [standalone]


#22312

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-18 22:45 +0200
Message-ID<0iohsdddvklmfah54tvnp37885ieno9lmi@L.Serni>
In reply to#22302
On Mon, 15 Oct 2018 18:26:51 +0200, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>> Dipende da cosa stai facendo. Ho un oggetto Documento che deve implementare
>> read(), write(), validate() e submit(); 

>- se i metodi sono molto corposi
>- se quindi alcuni di loro è meglio che vengano spezzettati in metodi 
>più piccoli e più leggibili
>- se comincio ad avere una classe con quasi 10 metodi...

>...mi è già venuto il panico :D

Apro una parentesi noiosa.

Posso elencare una quantità di azioni che nessun essere umano può fare, o è
mai stato in grado di fare. Sopportare fiamme a 1500 °C, sollevare masse di
tonnellate, respirare sott'acqua, volare, entrare in orbita, riprodurre una
immagine in modo visualmente perfetto, ricordare un miliardo di volumi dopo
dieci anni di tempo e ripeterli al contrario, sommare mille numeri di mille
cifre in un millesimo di secondo.

Tutte queste cose però diventano possibili e molte addirittura facilissime,
con l'equipaggiamento giusto e un minimo di tempo per imparare a usarlo.

Ora, tu mi vieni a dire che ti viene il panico a coordinare dieci metodi in
una classe. Ti credo senz'altro, e ti dico infatti la stessa cosa che direi
a un tizio che mi dicesse che non è in grado di sollevare un macigno di due
tonnellate: "amico, tu sbagli candeggio".

Chiusa parentesi.

In un progetto a cui sto lavorando la media è 23.7 metodi per classe - se si
contano le classi un minimo complesse, con costruttori:

	$ for f in $( grep -lr "function __construct" \
	 leonardo/htdocs/{base,local} --include="*.php" ); do \
	 grep -n "^[a-z ]*function" $f | wc -l; done | wc -l
	99
	$ ( for f in $( grep -lr "function __construct" \
         leonardo/htdocs/{base,local} --include="*.php" ); do \
	 grep -n "^[a-z ]*function" $f | wc -l; done | sort -n \
	| tr "\n" "+" ; echo "0" ) | bc
	2346

I file di cui ricordo a memoria cosa c'è dentro sono SETTE. In tre casi, non
escludo di ricordarmi giusto; ma non ci conterei molto. Negli altri quattro,
è pressoché sicuro che mi ricordi male.

Calcola che ci ho lavorato l'ultima volta oggi pomeriggio :-)

Come si fa? Con lo strumento. Eclipse, PHPStorm, Netbeans, VisualCode, forse
SubLime.

>> cosa me ne farei io di dividerlo in
>> quattro o più classi? Tenendo conto che read() contiene appunto soltanto il
>> codice specifico di quel tipo di documento (il resto è nella classe padre),
>> e così le altre funzioni?

>> Se mai è getInstance() di cui si può fare a meno; sospetto tu la possa - in
>> quasi tutti i casi - estrarre in un trait.

>Estrarre in un trait?

Una cosa del genere - buttata lì:

trait SimpleSingleton
{
    private function __construct() { }

    public static function getInstance() {
        static $instance;
        if (null === $instance) {
            $instance = new self();
        }
        return $instance;
    }
}

e nella classe potresti avere:

class Qualsiasi
{
    use \Traits\SimpleSingleton;

    ...
}

Potrebbe volerci un PHP recentino.

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22313

Fromfmassei@gmail.com
Date2018-10-18 15:45 -0700
Message-ID<bf1f3542-e4fd-492a-8762-f6308a413d7a@googlegroups.com>
In reply to#22312
On Thursday, October 18, 2018 at 4:45:06 PM UTC-4, Leonardo Serni wrote:
> On Mon, 15 Oct 2018 18:26:51 +0200, alex
> >...mi è già venuto il panico :D
> 
> Apro una parentesi noiosa.
> 
> <snip>
> I file di cui ricordo a memoria cosa c'è dentro sono SETTE.
> <snip>

Hai preso un fattoide famoso, l'hai messo in un altro contesto, e l'hai
interpreato a cacchio, per cui faccio una parentesi noiosa io :)

Quel famoso "sette", è il numero massimo di varibili indipendenti di cui
un uomo può tener traccia in una funzione. Hai presente una funzione
matematica in una variabile (una curva) o in due (una superfice)? Beh,
viene fuori che quando sali di dimensioni la mente umana si perde
miseramente, fino a raggiungere l'impossibile a quel punto. Ovviamente
nessuno visualizza una funzione in cinque dimensioni (in quattro, a quanto
pare, con un po' d'allenamento, sì), ma si possono gestire le variabili
a mente, con la pratica.
Una funzione in un qualsiasi linguaggio di programmazione, piaccia o no,
è sempre una funzione matematica in un certo spazio (nei linguaggi tipo
PHP, visto che i hanno side-effects, nello spazio degli stati). La regola
di buon senso quindi vuole che avere una funzione con più di quattro,
massimo cinque, parametri è una ricetta per il disastro.

Prendi una classe con un solo metodo che fa quello che serve, quattro
membri privati, mettici costruttore, getters/setters, overloads e operatori,
e hai una classe semplicissima con una ventina di funzioni. Nessuno direbbe
mai che è troppo complessa.
Prendi cinquanta funzioni che operano sullo stesso concetto (e.g. funzioni
su immagini, tipo GD), e le wrappi statiche in una classe. Nessuno direbbe
mai che la classe è troppo complessa, visto che è solo un wrapper.

Sinceramente, secondo me, quando ti viene il prurito di spezzare qualcosa
che nello UML di progetto è in un oggetto solo, converrebbe pensarci
due/tre volte prima.


Ciao!

[toc] | [prev] | [next] | [standalone]


#22315

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-20 16:16 +0200
Message-ID<agilsddi924k8givv3tkmbp5nvq3eac0f2@L.Serni>
In reply to#22313
On Thu, 18 Oct 2018 15:45:43 -0700 (PDT), fmassei@gmail.com wrote:

>> Apro una parentesi noiosa.

>> <snip>
>> I file di cui ricordo a memoria cosa c'è dentro sono SETTE.
>> <snip>

>Hai preso un fattoide famoso, l'hai messo in un altro contesto

Coincidenza. Sono realmente sette perché erano i file che avevo esaminato
negli ultimi due giorni. Altri giorni potrebbero essere dieci, o uno.

> e l'hai interpreato a cacchio

Uh, no. Non l'ho interpretato proprio... "sette" era una coincidenza. Non
ho mai fatto il conto del numero di parametri di cui tenere traccia.

Come regola, le mie funzioni hanno al massimo tre parametri. Magari uno o
due (o tutti e tre) sono oggetti complessi, questo sì.

>Sinceramente, secondo me, quando ti viene il prurito di spezzare qualcosa
>che nello UML di progetto è in un oggetto solo, converrebbe pensarci
>due/tre volte prima.

Questa è pure la mia opinione :-)

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22317

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-21 11:46 +0200
Message-ID<pqhhu3$q85$1@gioia.aioe.org>
In reply to#22315
Il 20/10/18 16:16, Leonardo Serni ha scritto:
>> Sinceramente, secondo me, quando ti viene il prurito di spezzare qualcosa
>> che nello UML di progetto è in un oggetto solo, converrebbe pensarci
>> due/tre volte prima.
> Questa è pure la mia opinione

https://ibb.co/cKVUgL
vedere le parte iniziale (post di un certo Alessandro Pellizzari)

[toc] | [prev] | [next] | [standalone]


#22319

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-21 13:12 +0200
Message-ID<uumosd553q54og9oscbcihh3dcsfbm6lcd@L.Serni>
In reply to#22317
On Sun, 21 Oct 2018 11:46:44 +0200, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Il 20/10/18 16:16, Leonardo Serni ha scritto:
>>> Sinceramente, secondo me, quando ti viene il prurito di spezzare qualcosa
>>> che nello UML di progetto è in un oggetto solo, converrebbe pensarci
>>> due/tre volte prima.
>> Questa è pure la mia opinione

>https://ibb.co/cKVUgL
>vedere le parte iniziale (post di un certo Alessandro Pellizzari)

Stiamo dicendo tutti la stessa cosa: una classe non dovrebbe essere così
grossa, da superare la capacità del programmatore di orientarcisi.

Ora, per alcuni questa dimensione critica è tre metodi, o dieci.

Per altri è trenta.

Per altri è cento o trecento.

La "capacità" è costruita da una base di capacità personali, più metodo,
più strumenti. Un astronomo miope, ai comandi del telescopio Keck, vedrà
sempre più lontano di un astronomo con trenta decimi a occhio nudo.

Del resto è il motivo per cui è NATA la programmazione a oggetti e prima
ancora la notazione ungherese, o per cui si parla di "pattern".

Io sono pigro, sedentario, e mi stanco facilmente: mi rifiuto, seduto al
volante della mia Panda, di andar piano come quel fermone di Usain Bolt!
Se non riesce a tenere i sessanta all'ora per tre orette, stia a casa, e
lasci correre quelli che sanno.

(Sì sì, lo so - il guru del jogging, Nonsokì, raccomanda 10 km/h come la
velocità ideale per ossa e giunture... io raccomando la verde super, poi
vedete se non mi rammentate!)

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22321

FromFlavix <imeil@a.a>
Date2018-10-21 14:26 +0200
Message-ID<pqhrir$18ue$1@gioia.aioe.org>
In reply to#22319
Il 21/10/2018 13:12, Leonardo Serni ha scritto:
> On Sun, 21 Oct 2018 11:46:44 +0200, alex
> <1j9448a02@lnx159sneakemail.com.invalid> wrote:
> 
>> Il 20/10/18 16:16, Leonardo Serni ha scritto:
>>>> Sinceramente, secondo me, quando ti viene il prurito di spezzare qualcosa
>>>> che nello UML di progetto è in un oggetto solo, converrebbe pensarci
>>>> due/tre volte prima.
>>> Questa è pure la mia opinione
> 
>> https://ibb.co/cKVUgL
>> vedere le parte iniziale (post di un certo Alessandro Pellizzari)
> 
> Stiamo dicendo tutti la stessa cosa: una classe non dovrebbe essere così
> grossa, da superare la capacità del programmatore di orientarcisi.
> 
> Ora, per alcuni questa dimensione critica è tre metodi, o dieci.
> 
> Per altri è trenta.
> 
> Per altri è cento o trecento.

E se dei 300 metodi ne verranno usati solo 3, è cosa buona caricare in 
memoria queste mega classi?
Usare una struttura più modulare non avrebbe anche un miglior impatto 
sulle prestazioni?

[toc] | [prev] | [next] | [standalone]


#22322

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-21 15:07 +0200
Message-ID<7jtosd5u419c68anc27ksgjks51kdleh5i@L.Serni>
In reply to#22321
On Sun, 21 Oct 2018 14:26:47 +0200, Flavix <imeil@a.a> wrote:

>E se dei 300 metodi ne verranno usati solo 3, è cosa buona caricare in 
>memoria queste mega classi?

Se ne verranno usati solo tre, è autoevidente che la classe può funzionare
anche solo con quei tre. A quel punto avrebbe senso estrarli e fare:

	class PiccolaClasse {
		...3 metodi...
	}	

	class GrossaClasse extends PiccolaClasse {
		...297 metodi...
	}

e magari pure mettere classi intermedie senza invocare ogni volta l'intero
Leviatano. Per esempio (me lo sono tolto di testa ora e potrebbe contenere
errori):

	class FileSuDatabase
		protected $filedata;
		init(DatabaseConnection $conn)
		scrivi(nomefile)
		leggi(nomefile)
		stato(nomefile)
		elenca(pattern)
		elimina(nomefile)

	class Immagine {
		trait FileSuDisco
		resize()
		recolor()
		palette()
		rotate()
		floodfill()
		rectangle()
		ellipse()
		...
	}

	class ImmagineSuDatabase extends Immagine {
		trait FileSuDatabase
		public function construct(DatabaseConnection $conn) {
			if (!$conn->isOpen()) {
				throw new \Exception('need live conn');
			}
			$this->init($conn);
			parent::__construct();
		}
		// dovrebbe funzionare già così.
	}

	class FatturaSuDatabase extends Fattura }
		trait FileSuDatabase
		// Stesso costruttore. Chissà se posso fare un override di un
		// costruttore definito in un trait? Bisogna che controlli.
	}

A quel punto se mi serve una fattura con persistenza su disco, mi importo solo
lo stretto indispensabile; non creerò certo mai "ImmagineSalvaOvunque" che può
lavorare su Dropbox, Google Drive, NFS, FTP, SFTP, Samba, disco e database (ed
anzi, per supportare dei database diversi mi converrebbe cambiare anche questa
impostazione un pochino).
		
>Usare una struttura più modulare non avrebbe anche un miglior impatto 
>sulle prestazioni?

Sì, però per capire esattamente quanto, e se convenga, andrebbe visto caso per
caso.

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22323

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-21 15:11 +0200
Message-ID<pqhu7d$1dec$1@gioia.aioe.org>
In reply to#22322
Il 21/10/2018 15:07, Leonardo Serni ha scritto:
> A quel punto se mi serve una fattura con persistenza su disco, mi importo solo
> lo stretto indispensabile; non creerò certo mai "ImmagineSalvaOvunque" che può
> lavorare su Dropbox, Google Drive, NFS, FTP, SFTP, Samba, disco e database (ed
> anzi, per supportare dei database diversi mi converrebbe cambiare anche questa
> impostazione un pochino).

Quindi non sono completamente pazzo quando dico certe cose :D

[toc] | [prev] | [next] | [standalone]


#22314

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-10-19 22:35 +0200
Message-ID<pqdff0$nk5$1@gioia.aioe.org>
In reply to#22312
Il 18/10/2018 22:45, Leonardo Serni ha scritto:
> Apro una parentesi noiosa.
> 
> Posso elencare una quantità di azioni che nessun essere umano può fare, o è
> mai stato in grado di fare. Sopportare fiamme a 1500 °C, sollevare masse di
> tonnellate, respirare sott'acqua, volare, entrare in orbita, riprodurre una
> immagine in modo visualmente perfetto, ricordare un miliardo di volumi dopo
> dieci anni di tempo e ripeterli al contrario, sommare mille numeri di mille
> cifre in un millesimo di secondo.
> 
> Tutte queste cose però diventano possibili e molte addirittura facilissime,
> con l'equipaggiamento giusto e un minimo di tempo per imparare a usarlo.

Quindi è sbagliato ad esempio mettere tutte le funzioni di formattazione 
in una classe (tool) a parte, che mi permette di concentrarmi solo su 
quell'aspetto?

> I file di cui ricordo a memoria cosa c'è dentro sono SETTE.

Fin qui ti seguo, poi insomma...

> In tre casi, non
> escludo di ricordarmi giusto; ma non ci conterei molto.

ricorarmi giusto (o sbagliato)????
???? :D

> Negli altri quattro,
> è pressoché sicuro che mi ricordi male.

???? :D
E gli altri cinque chi sono? E i ricordi come sono a colori o in bianco 
e nero? :D
Neanch'io ci conterei molto, anzi preferisco non fidarmi :D

>> Estrarre in un trait?
> 
> Una cosa del genere - buttata lì:
> 
> trait SimpleSingleton
> {
>      private function __construct() { }
> 
>      public static function getInstance() {
>          static $instance;
>          if (null === $instance) {
>              $instance = new self();
>          }
>          return $instance;
>      }
> }
> 
> e nella classe potresti avere:
> 
> class Qualsiasi
> {
>      use \Traits\SimpleSingleton;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

E questo si chiama "estrarre il codice in una trait" o "estrarre il 
codice da una trait"?

[toc] | [prev] | [next] | [standalone]


#22316

FromLeonardo Serni <lserni@gmail.com>
Date2018-10-20 22:36 +0200
Message-ID<764nsd58civ51b6p53dd5ldnltoip76kk6@L.Serni>
In reply to#22314
On Fri, 19 Oct 2018 22:35:43 +0200, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>> Tutte queste cose però diventano possibili e molte addirittura facilissime,
>> con l'equipaggiamento giusto e un minimo di tempo per imparare a usarlo.

>Quindi è sbagliato ad esempio mettere tutte le funzioni di formattazione 
>in una classe (tool) a parte, che mi permette di concentrarmi solo su 
>quell'aspetto?

In generale credo non ci sia niente di sbagliato... e niente di giusto;
bisogna capire come vanno le cose nell'economia di quel progetto.

>>> Estrarre in un trait?

>> class Qualsiasi
>> {
>>      use \Traits\SimpleSingleton;
>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> E questo si chiama "estrarre il codice in una trait"

Io uso 'trait' al maschile, comunque sì. Prendi un certo tipo di codice
che si riferisce a un "comportamento" della classe, lo tiri fuori dalle
classi di quel tipo e lo metti in un trait.

Poi le varie classi reimportano quel trait. Uno "use", e hai fatto.

Questo, per il codice per cui fare così ha senso, beninteso. Almeno per
l'esempio che ho usato, mi pare che possa aver senso... se hai però dei
singleton di tipo molto complesso, *non* è detto che continui ad essere
una buona idea. Idem, penso, dove il trait serve a una classe sola.

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | it.comp.www.php


csiph-web