Newsgroup: it.lavoro.informatica
Titolo: java typedef



Ho un programma (non reale,e' un esempio) che usa un vector<T>







c++ ----

	using v_t=std::vector<int>;

	using t_t=v_t::value_type; //t_t e' un int

	t_t f(v_t&) { ...}

---



Quello che si vuole e' scrivere l'equivalente in java tenendo conto che 

se un giorno volessi cambiare il parametro di v_t in c++ e' facile,basta 

mettere la nuova definizione (ad esempio using v_t=std::vector<long>)

ed f cosi come e' scritta andrebbe ancora bene.



--- java

	class v_t extends Vector<int> { };



//java non ha i typedef - occorre usare l'ereditarieta

// non solo, occorrerebbe anche ridefinire i costruttori se Vector non 

avesse un costruttore di default



	int f(v_t v) {  ...  }



Cosi funziona ma se un giorno volessi cambiare il parametro di Vector mi 

tocca modificare f

Se in un programma semplice e' facile farlo in un programma complesso 

composto da molte classi cercare le sostituzioni potrebbe rilevarsi un 

incubo.

Ed allora ecco un'altra soluzione



	class t_t extends Integer { };

	class v_t extends Vector<t_t> { .... };

	t_t f(v_t) {  .... }



Peccato che non funzioni in quanto Integer e' final

OK,3 tentativo:



	class t_t {

		//tutti i metodi pubblici di Integer

		private Integer m_v;

	};



Certo che non e' che sia il massimo

Un modo piu elegante non esiste ?








 Un modo piu elegante non esiste ?



si esiste.






 



Ok,spiega




 Ok,spiega



l'educazione? manco per favore. 


Il 17/03/19 11:51, rootkit ha scritto:


Come non detto

Almeno fino a prova contraria non esiste un modo piu elegante




 Almeno fino a prova contraria non esiste un modo piu elegante



No, no, ti sbagli. Non esiste PER TE un modo piu` elegante. Ma dove cazzo credi di stare? In un tribunale in cui si dimostri, definitivamente, se qualcosa si possa o non si possa fare in Java? :D LOL... coglione.



public interface SomeService<T> {

    void doSomethingWithItems(List<T> items);

    T getSomeThing();

}



public class ServiceForStrings implements SomeService<Integer> {

    @Override

    public void doSomethingWithItems(List<Integer> items) {

        ...

    }



    @Override

    public Integer getSomeThing() {

        ...

    }

}




 Peccato che non funzioni in quanto Integer e' final



grazie mi hai appena spiagato perche' final e' molto piu' importante di quanto pensassi: perche' evita che coglioni come facciamo fuggire tutto il resto del team.


 public class ServiceForStrings



Ovviamente era "forIntegers"...


 grazie mi hai appena spiagato perche' final e' molto piu' importante di quanto pensassi: perche' evita che coglioni come facciamo fuggire tutto il resto del team.



...perche`, l'estensione di Vector? :D




 grazie mi hai appena spiagato perche' final e' molto piu' importante di quanto pensassi: perche' evita che coglioni come facciamo fuggire tutto il resto del team.



P.S.: il motivo per cui puo` spudoratamente creare codice di merda come quello e` proprio perche` non lavora in team. Se lo facesse, prenderebbe sonore bastonate sulle orecchie nelle code review.


Azz, in effetti proporrò a Brian Goetz di rompere la retrocompatibilità e dichiarare final anche Vector. Tanto chi vuoi sia tanto scemo da estenderla?


è un esempio di quello che fai e dei problemi che risolvi facendo guadagnare milioni ai tuoi clienti?


 elegante



ahahah, mi fai compassione ma non abbastanza. studia, asino.


 



E questo sarebbe un modo elegante ?

Forse le e'  ma e' anche alquanto verboso


Il 17/03/19 15:39, rootkit ha scritto:


E perche mai ?

A me di java non frega piu di tanto

Chiedo

Se non vuoi rispondere non farlo,mica te l'ha consigliato il dottore.




 



No, io lavoro prevalentemente in  c++ non in java




 farlo,mica te l'ha consigliato il dottore.



manfatti coso mica ti sto rispondendo.

se non te ne frega più di tanto allora non chiedere, mica te l'ha 

consigliato il dottore.


 Forse le e'  ma e' anche alquanto verboso



Verboso un par de palle. E` un'interfaccia implementata da una classe. Che cazzo ci trovi di verboso lo sai solo tu.


 A me di java non frega piu di tanto



Oh, si` che te ne frega, invece. Altrimenti non avresti infognato questo ng di merdate come Java vs C++ per settimane, arrampicandoti sugli specchi per difendere punti indifendibili.

Renditi conto che di Java parli solo tu, qui dentro, eh? :)

La verita` e` che hai trovato l'ennesima cagatella del C++ che ti causa erezione, e stai mascherando da genuina curiosita` un "e adesso, grandoni, fatemi vedere come la fate questa bellezza in Java!" . Ti conosciamo mascherina. Peccato che ti stai sparando ancora una volta nelle palle.


 No, io lavoro prevalentemente in  c++ non in java



Lascia perdere Java, allora, che prendi bastonate sulle orecchie. 




     class v_t extends Vector<int> { };



Magari Integer, visto che 'int' non e' una classe.

Beh, certo che pensare di utilizzare i cazzi del C++ in Java, 

esattamente come viceversa, non si va molto lontano.

Ad esempio, ti sei accorto che Integer e' final, allora, se proprio ti 

dovesse servire, usa Number, da cui discendono tutte le classi numeriche 

e ovviamente non e' final. Per cui:

class v_t<T extends Number) extends Vector<T>

ancora piu' generico:

class v_t<T extends Object) extends Vector<T>

ancora piu' generico:

class v_t<T extends Object) implements Collection<T>


 class v_t<T extends Object) implements Collection<T>



Sei serio? :D





A parte il refuso, corrige:

  class v_t<T extends Object> implements Collection<T>

Certo che son serio. L'intento e' di fargli fare un altro benchmark! :-)


> No, io lavoro prevalentemente in  c++ non in java



quindi era una domanda per imparare Java.

sei OT, è it.lavoro.informatica qui.


 Certo che son serio. L'intento e' di fargli fare un altro benchmark! :-)



Ma allora sei masochista! :)




 



Una parte di java,semmai

Non e' che non ne so proprio niente




 class v_t<T extends Object) implements Collection<T>





Object non mi piace,e' troppo generico

Number potrebbe essere una idea


Il 18/03/19 03:40, Dr.UgoGagliardelli ha scritto:


Non e' per un benchmark

Ero capito per caso ad una post qui:

https://stackoverflow.com/questions/1195206/is-there-a-java-equivalent-or-methodology-for-the-typedef-keyword-in-c






Quindi volevo togliermi questa curiosita




 Non e' che non ne so proprio niente 



ma non abbastanza per criticare e questo è evidente.


 



Dipende su cosa

Su java ho fatto solo benchmarks in quanto qualcuno mi ha rotto le 

scatole che sia performante come (o piu) di c++.

Finora mi spiace ma non e' cosi

Naturalmente arriveranno i soliti a scrivere che non e' vero,che i 

benchmarks non sono corretti (ma non hanno mai detto dove),ecc..

Fino a prova contraria e' cosi


 scatole che sia performante come (o piu) di c++.



E difatti, in molti contesti, e` vero, come ti e` stato dimostrato postandoti i risultati di un benchmark sul multithreading che hai bellamente ignorato. 



Tranquillo, nessuno si aspetta onesta` intellettuale da te. 


 Ero capito per caso ad una post qui:



Lasciamo perdere l'italiano che, si sa, non e` il tuo forte. 



La verita` e` che "typedef", in C++, e` un'eredita` del C, ma (come molta roba ereditata per necessita` dal C, vedi i puntatori) sporca il linguaggio. 



Hanno assolutamente senso in C, dove e` l'unico modo di definire un tipo, ma non in C++, specialmente nel caso citato da te. Bisognerebbe invece usare le classi, dal momento che in C++ esistono, esattamente come si farebbe in Java.



C e C++ ti consentono di scrivere: 



typedef int customer_id_t;

typedef int order_number_t;

....

    customer_id_t cid = 123;

    order_number_t ono = cid;



Cosa fondamentalmente sbagliata. Un "customer id" ed un "order number" sono due concetti di dominio completamente diversi, non assegnabili.



Se invece hai una classe che rappresenta un customer id e una classe che rappresenta un order number (anche se semplici wrapper attorno a tipi primitivi), avrai una netta separazione tra i due.



Per esempio, se nel mio sistema gli id dei clienti sono interi, preferisco definire una mappa come: 



Map<CustomerId, Customer> customerMap;



invece che:  



Map<Integer, Customer> customerIdToCustomerMap;



anche se quel CustomerId e` solo un wrapper attorno ad un intero (se si usano annotazioni Lombok come @Data, per esempio, scrivere un wrapper del genere e` banale).



Ma no! Solo per far divertire te! :-)


 Number potrebbe essere una idea

E' l'idea introdotta coi generics, java 1.2 o 1.3 chi si ricorda, 

comunque una ventina di anni fa.


Il 19/03/19 02:14, 4ndre4 ha scritto:


Non e' che i typedef  (o gli using in c++ moderno) siano sbagliati

Dipende dal contesto in cui li vuoi usare

Possono essere utili o no,dipende.

Nel caso descritto da te e' corretto quello che hai proposto.

PS:

Anni fa proprio su questo avevo proposto al comitato  i new using per 

avere tipi differenti

Un bel using len_t=new int;

L'idea viene da Ada.

In generale applicabile e qualunque oggetto ed evita di farsi una classe 

wrapper

Oggi e' possibile fare questo giochetto solo per i tipi integral di base 

(si usa l'enum class)






Il 19/03/19 06:28, Dr.UgoGagliardelli ha scritto:


Va bene, ma avevo dimenticato una cosa

L'esempio era fatto su Integer ma in generale per qualunque classe final





E' corretto perche' un linguaggio OO *deve*. Poi che in C++ tra classe e 

'typedef struct' non ci sia una gran differenza e che il cast funzioni 

praticamente su qualsiasi cosa, e' un altro paio di maniche.

In Java non e' mai possibile senza una gerarchia che lo permetta, ed e' 

un gran bel vantaggio. Tra l'altro il linguaggio Java ti mette a 

disposizione gli operatori che ti permettono di non cadere nell'equivoco.




 Possono essere utili o no,dipende.



Come al solito non capisci un cazzo di quel che gli altri scrivono. 


 class Coglioni extends v_t<Coglione> {...}



Coglioni coglioni = new Coglioni();

coglioni.add(enoquick);







Ma anche no. In Java qualsiasi classe final di sicuro estende o 

implementa un supertipo non final: Integer estende Number, String 

implementa CharSequence tutte le classi estendono obligatoriamente 

Object che quindi puo' essere utilizzato come wildcard di qualsiasi 

altra cosa, nel senso che un cast a Object funziona sempre senza per 

questo perdere l'origine. Ad esempio:



Object o = "";

o.getClass() => java.lang.String

(o instanceof String) => true

String.class.isInstance(o) => true

o.getClass().isAssignableFrom(String.class) => true

String s = o.getClass().getSuperclass().equals(String.class)

	?(String)o:null;

String s = (String)o;

String s = String.class.cast(o);



Gran parte di sta roba in C++ me la sogno.



A rigor di logica sarebbe:

coglioni.addAll(enoquick);

perche' e' di piu'! :-D


 Gran parte di sta roba in C++ me la sogno.



Continua a sognare allora in quanto e' proprio solo un  tuo sogno.

Non si fa cosi ma ci sono altri modi per sapere proprieta  di una classe

Alcuni a runtime (dynamic cast o con RTTI),altri a  compile time 

(
https://en.cppreference.com/w/cpp/header/type_traits
)

Mentre java e' solo a runtime






Il 19/03/19 09:05, 4ndre4 ha scritto:


vedo che sei ritornato a fare lo stronzo

Non ne puoi fare a meno




 



Come ho gia scritto c++ ne ha ben piu di uno come cast, sta al 

programmatore saperli usarli nel contesto in cui si trova.


 vedo che sei ritornato a fare lo stronzo



Vedo che sei rimasto lo stesso coglione.


 IL fatto che con strutture di basso livello in java non ci si puo andare



Che cazzo vuol dire? :D


Il 19/03/19 12:42, 4ndre4 ha scritto:



 



Interfacciati con qualunque dispositivo hw direttamente oppure con un 

api posix (sempre direttamente)

Quindi niente JNI

Poi fammi sapere




Il 19/03/19 09:01, 4ndre4 ha scritto:


Ma certo, continua cosi

Quando non si sa piu come controbattere ecco che si ritorna a fare il 

solito stronzo.

Poi cosa ci sia di male ad avere un modo per un sinonimo di un tipo lo 

sai solo tu.


 

Neanche da te se e' per quello.






 Neanche da te se e' per quello.



Da me hai SOLO onesta` intellettuale. Non ci provare.


 Interfacciati con qualunque dispositivo hw direttamente



Java non e` nato per questo, imbecille. Lo vedi che avevo ragione io? Lo vedi che torni sulla stessa ossessione anti-Java ogni volta che ne hai l'occasione? Hai iniziato il thread mascherandolo da genuina curiosita`, ma in realta` puntavi all'ennesima invettiva contro Java. Sei un coglione :)


 sai solo tu.



Ti e` stato gia` spiegato in un messaggio piu` su. Vattelo a studiare.






 



Alla grande




 



Aspetta che ora vado in bagno che mi sta venendo una erezione (battuta 

ovviamente)



A te fara questo effetto ma a me le erezioni me le fanno venire il 

gentil sesso non certo un linguaggio di programmazione.



Quindi la tua bella illazione (prove non ne hai quindi e' illazione) 

tientela per te

Le cause per diffamazione che dovrei metaforicamente fare contro di te 

stanno tendendo ad infinito


 



Altra illazione


 



Ma no,rispiega bene di nuovo che non e' proprio chiaro


Il 19/03/19 17:03, 4ndre4 ha scritto:


Avevo sbagliato:



  pow(stronzo,2)




 cosa,glielo devi dire



Questo vorrebbe solo significare che il C++ e' un linguaggio da duri? 

con buona pace dell OO programming? e buona pace della qualita' del 

software?




 Mentre java e' solo a runtime



Mi risulta che non sia vero. In che senso solo a runtime?

A meno di grossolani sfondoni, possibili in qualsiasi linguaggio, in 

genere in Java se passa la compilazione passa alche il runtime. 

Soprattutto se non vengono ignorati i warning del compilatore.




 Ma no,rispiega bene di nuovo che non e' proprio chiaro



Lo so che non ti e` chiaro, perche` non hai MAI lavorato su un sistema enterprise in vita tua.




 Altra illazione



Illazione? Sul primo punto e` evidente da questo thread. Sul secondo, vuoi che facciamo un sondaggio qui dentro per capire quanti ti ritengono un coglione? Non ti conviene.


 Tra l'altro OMP non e' neanche ufficialmente supportato da java

a

Spiega il concetto di "supportato da Java". Dai, genio. Va` come si spara nelle palle un'altra volta. Dlin! Dlin!




On Wednesday, 20 March 2019 02:00:16 UTC, enoquick  wrote:



[CUT sulla montagna di cazzate]



Renditi conto di una cosa: sei un uomo di mezz'eta` che si veste da Superman, sale su un balcone di un quarto piano e annuncia a tutti "Guardate! Ora volo!"

I passanti, sgomenti, ti urlano "Ma che fai? Guarda che ti schianti?"

E tu, che vai avanti per la tua strada (cit.), rispondi "Ma che dite?? Guardate come volo!"

Ti lanci, ti libri per mezzo millisecondo nell'aria, e poi precipiti e ti schianti sulla veranda del primo piano.

La gente ride e ti dice che sei un coglione. 

Ma tu niente, te ne freghi e vai avanti per la tua strada (cit.), risali al quarto piano e vieni fuori sul balcone, questa volta vestito da Batman. "Guardate! Volo!"

E i passanti, di nuovo: "a cojone! Guarda che ti schianti!"

E tu: "Perche` mi diffamate? Vedrete come volo!"

Ti lanci, ti libri per mezzo millisecondo nell'aria (peraltro non sapendo che Batman non vola) e poi precipiti e ti schianti sulla veranda del primo piano. 

La gente ride e ti dice che sei un coglione. 

Ma tu niente, te ne freghi e vai avanti per la tua strada (cit.), risali al quarto piano e vieni fuori sul balcone, questa volta vestito da Spiderman. "Guardate! Volo!"

E i passanti, di nuovo: "a cojone! Guarda che ti schianti n'antra vorta!"

E tu: "Ancora che mi diffamate? Solo insulti ricevo da voi!"



Ecco... continua tu.


Il 20/03/19 02:20, 4ndre4 ha scritto:



 



L'ho gia spiegato genio

Hai pure tagliato


 





Altra illazione

Il numero ... (tanto sai cosa e')


 



Mi risulta,ma posso sbagliare,che quello che hai scritto non sia risolto 

a compile time.




 



Illazione



Ben tre in un post

Vai avanti cosi che superi te stesso




 Cosi vediamo un po quanto non e' sicuro 



è una battuta? basta dire "undefined behavior" che _è insito nella natura stessa del linguaggio_. 



robe da matti - nel 2019 poi.



https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?contentId=88046465#content/view/88046682




https://www.sei.cmu.edu/news-events/news/article.cfm?assetid=495412



L'ho gia spiegato genio 



No, tu non spieghi niente. Tu spari solo cagate senza alcun supporto. 

Che cosa significa "supportato da Java"? Rispondi, genio.


 typedef è dannoso



mai sentito parlare di typedef-based type-checking? lo implementiamo negli automatic tools da una vita... Mah.


 decantata non sicurezza di c++



Non me ne frega un cazzo di farti esempietti, dovresti averlo capito. Vuoi un esempio? Fattelo dare da Stroustrup. E` lui che ha parlato di gambe che partono. 



Poi, illazioni? Sono certezze. Certezze che non riuscirai mai a smantellare, dal momento che ti guardi bene dal rivelare alcunche` su di te: nome e cognome, che lavoro fai, che tipo di software realizzi. Tipico di chi ha molto da perdere ;)


 Sono capaci tutti cosi



Sai che questo e` il perfetto riassunto del tuo modus operandi qui dentro, vero?


 



Liberissimo di ridere sulle tue disgrazie. D'altra parte, se ridi tu

perchè non dovremmo farlo noi?

Siccome ti comporti esattamente come ti hanno più volte descritto, è 

probabile che tu non abbia contezza dei tuoi atteggiamenti.

Cambia poco, ma quella che ti sei guadagnato non è una reputazione della

quale vantarsi.

Adesso continua pure a ridere.




 quale vantarsi.



Rendiamoci conto che lo spumeggiante ha avuto l'ardire di paragonarsi a Einstein.


Il 21/03/19 02:16, 4ndre4 ha scritto:


Tralascio di rispondere  a tutte le altre cazzate che hai scritto,il 

solito attacco alla persona invece che hai fatti.

https://www.openmp.org/resources/openmp-compilers-tools/






Ci leggi java ?




 



"undefined behavior"  qualunque compilatore decente gli intercetta

Basta abilitare i warnings che ovviamente qualunque programmatore c++ fa



Il 21/03/19 02:48, 4ndre4 ha scritto:


Ma davvero ?

Ma tu sai interpretare il senso delle frasi ?




Il 21/03/19 02:40, Madame Damentami ha scritto:


Non preoccuparti,non ho bisogno di persone del tuo stampo per continuare 

a ridere.




Il 21/03/19 02:28, 4ndre4 ha scritto:


dopo di te


 



Altro attacco alla persona




 



No, e' un linguaggio che permette di sporcasi le mani (aka accedere ed 

elaborare strutture a basso livello) quando si vuole.


 Ci leggi java ?



Le cazzate, come sempre, le stai scrivendo tu. Rispondi alla domanda: 

Che cosa significa "supportato da Java"?

Questi giochetti da quattro soldi falli con chi puoi raggirare, non con esperti della materia. OpenMP e` una libreria per C, C++, e Fortran. Non e` Java a non supportare OpenMP; e` OpenMP a non essere progettata per essere interfacciata direttamente da Java. Sono due concetti diversi che si mischiano nella tua mente da minus habens.




 Basta abilitare i warnings che ovviamente qualunque programmatore c++ fa



Certo, senno` gli partono le gambe (Stroustrup docet)


 Altro attacco alla persona



Nessun attacco. Si tratta di credibilita`. Dai qualche credenziale: come ti chiami? Dove lavori? Che software sviluppi? Basta fare il leoncino da tastiera.




 



Preoccuparmi? Io? E di cosa dovrei preoccuparmi?

Di un fanatico mentalmente instabile come te? No, proprio non hai

capito. Ma anche questa non è una novità.




 solito attacco alla persona invece che hai fatti.



Eh, allora sei recidivo! Vediamo se trovi l'errore.





-- 

The three most dangerous things in the world are a programmer with a 

soldering iron, a hardware type with a program patch and a user with an 

idea.


 Ma tu sai interpretare il senso delle frasi ?



Io, eh? :)




 elaborare strutture a basso livello) quando si vuole.



E tagliarsi via gambe.


Il 21/03/19 09:14, 4ndre4 ha scritto:


E' la stessa cosa




 



Ma non mi ci metto neanche a a discutere le sue cazzate


 



Mica detto

Se non abilita i warnings non significa per forza che scrivera codice 

che andra in crash o produrra risultati errati dovuti a qualche 

"undefined behavior"


Il 21/03/19 09:18, 4ndre4 ha scritto:


Ma devo pure rispondere ad un  pirla simile ?




Il 21/03/19 09:19, 4ndre4 ha scritto:


Si tu




Il 21/03/19 09:18, Madame Damentami ha scritto:


Ma vai a rompere i marroni a qualcun altro




 





Se si va a basso livello occorre accettarne i rischi

Che fai, non ci vai mai ?





Non hai capito un cazzo, come al solito. Ah, questo non è

un attacco alla persona (?!) come ti piacerebbe far credere

per piagnucolare. Sono fatti.










Il 21/03/19 09:52, Madame Damentami ha scritto:


Ma va a rompere i marroni a qualcun altro