r/italy Sep 04 '18

/r/italy Caffè Italia * 04/09/2018

Buongiorno cavaliere, il solito?

17 Upvotes

777 comments sorted by

View all comments

3

u/Rejuvenation93 Sep 04 '18

A lavoro sto cominciando a lavorare con C#, ma sono in costante ansia perché certe cose proprio non riesco a farle (non ho mai programmato in C# prima d'ora). Qualche veterano che abbia qualche tip da impartire?

3

u/[deleted] Sep 04 '18

Scrivi tanti commenti anche per le cose più stupide;

Mantieni un ordine visivo per le parentesi;

Crea (a parte) e richiama le funzioni ricorrenti;

Se il programma lo devi mostrare a qualcun altro triplica il numero di commenti;

Cerca sempre di usare funzioni che occupino meno tempo ad essere eseguite (ci sono mille modi per ottenere uno stesso risultato, ma bisognerebbe cercare di non far perdere troppo tempo al processore).

5

u/srandtimenull Sep 04 '18

Riguardo i commenti, voglio dissentire in parte.

Cerca di creare codice che abbia il meno possibile bisogno di commenti. E non fare commenti inutili, che se la funzione si chiama getInt() è abbastanza chiaro.

Il codice deve essere "autocommentante". Dove non è possibile, ovviamente, commenta. Non è il caso di C#, ma quando la gente non commenta bit-tricks in C mi sale un nervoso che spaccherei il monitor.

1

u/[deleted] Sep 04 '18

[deleted]

1

u/srandtimenull Sep 04 '18

Generalmente mi trovo davanti a due tipi di codice: quelli senza un commento nemmeno a pagarlo oro, e quelli così (esempio reale con nomi generici, visto ieri):

//check if my_vector is a valid vector of Struct
bool checkStructVectorValidity(vector<Struct> my_vector) {
    //iterate through every element of my_vector
    for(Struct &s: my_vector) {
        //check if member a is negative or member b is positive, in these cases, fail and return false
        if(s.a() < 0 || s.b() > 0) {
            return false;
        }
    }
    //if everything is ok, return true
    return true;
}

1

u/mfabbri77 Europe Sep 04 '18

Che odio.

3

u/srandtimenull Sep 04 '18

Soprattutto quando, su un progetto parallelo sviluppato da altri, trovo cose allucinanti non commentate tipo:

int my_flag = !(~bitmask & (1ULL << (my_id -1))) ? ~bitmask : bitmask;

Devo ancora capire il perché della negazione logica assieme a quella bitwise (togliendole entrambe è uguale), e perché una bitmask viene associata a qualcosa che è chiamato "flag", quando poi è utilizzata come una bitmask.

Io questo pezzo di codice non lo tocco neanche se mi minacciano di tagliarmi le palle.

1

u/SteelRazor47 Emilia Romagna Sep 04 '18

Ewwww, codice bitwise. Ma chi me lo fa fare?

1

u/srandtimenull Sep 04 '18

Quando le performance (di tempo e di memoria) sono critiche, ci sta.

1

u/SteelRazor47 Emilia Romagna Sep 04 '18

Comunque per il tuo esempio, spesso chi sta scrivendo il codice non si rende conto che esiste un modo più semplice e finisce per complicare inutilmente. Dopo un po' di brain-fuck(le operazioni bitwise non sono affatto intuitive se non sai che significano: "estrai questo", "aggiungi questo" ecc), ho capito anche io che la negazione logica e bitwise si cancellano a vicenda, ma magari se non sei proprio un espertone e ti mettono li a fare roba bitwise non ci arrivi subito.
Il fatto di chiamare una bitmask flag però :/

1

u/srandtimenull Sep 05 '18

Peccato che quel pezzo di codice sia stato scritto da un guru del C di fama mondiale (non posso divulgare il nome, ahimè).

Solo che 'sto stronzo o è allergico ai commenti, o prima di venderci il codice li ha tolti e ha oscurato un po' di roba.

→ More replies (0)