Re: Passaggio di parametri
Von: Andrea Francia (andrea.francia@remove-from-here.ohoihihoihoih.to-here.gmx.it) [Profil]
Datum: 05.07.2008 00:25
Message-ID: <g4m80s$d18$1@aioe.org>
Newsgroup: it.comp.java
Datum: 05.07.2008 00:25
Message-ID: <g4m80s$d18$1@aioe.org>
Newsgroup: it.comp.java
Luigi_newsgroup wrote: > Salve a tutti, > ho da poco iniziato a studiare il linguaggio java e ho un problema > (probabilmente è una banalità, ma non riesco a uscirne). > Vorrei sapere come fare per avere in un metodo un parametro di output. > In pratica, per esercizio, sto cercando di creare una classe Stack, e vorrei > implementare il metodo Pop in modo che, oltre all'elemento estratto, ritorni > il numero di elementi rimasti: > > ElementiRimasti = MioStack.Pop(ElementoEstratto). Di solito si usa la convenzione che solo gli identificatori delle classi hanno la maiuscola, quindi sarebbe meglio che scrivessi : elmentiRimasti = mioStack.pop(elementoEstratto). Poi non c'e' necessita di mettere "mio" davanti a stack. La variabile 'stack' si differenza proprio dalla classe Stack grazie al fatto della convenzione che vuole che solo i nomi delle classi (e di poche altre cose) siano con la maiuscola. elementiRimasti = stack.pop(elementoEstratto) Poi dato che la quasi totalità delle librerie e le parole chiave del linguaggio sono prese dall'inglese americano, per evitare di avere un codice mezzo inglese e mezzo italiano dovresti scrivere: leftElements = stack.pop(extractedElement) Poi c'e il problema che uno leggendo il nome della variable "leftElements" potrebbe pensare che la variabile contenga gli altri elementi rimasti invece che il suo numero. Allora per eliminare l'ambiguità dovresti scrivere: leftElementCount = stack.pop(extractedElement) > Ho spulciato un po di materiale (di carta e in pdf), ma non si soffermano > sul passaggio dei parametri, però in tutti gli esempi non usano mai > parametri di output. Java gli argomenti li puoi passare solo per valore. Qualcuno magari ti ha detto che i tipi primitivi sono passati per valore e gli oggetti per riferimento. Ti ha detto una cosa non correttissima ma che rende l'idea. In Java gli argomenti sono sempre passati per valore, quando credi di passare un oggetto in realtà stai passando il riferimento all'oggetto, e il riferimento lo stai passando per valore. Questo implica che se hai: extractedElement = null; stack.pop(extractedElement); qualunque cosa faccia il metodo pop() dopo la sua chiamata extractedElement punterà sempre a null. Il modo più semplice per supplire a questa "limitazione" (voluta dai progettisti del linguaggio) è quello usare una semantica simile a questa: extractedElement = stack.pop(); leftElementCount = stack.size(); In altri casi potresti voler risolvere in modi differenti. Cmq per illustrarteli uso sempre questo esempio, essendo conscio del fatto che in questo caso il modo migliore è quello appena mostrato. 1) Definendo una classe composita per contenere il risultato. class PopResult { public Object extracted; public int count; } PopResult popResult = stack.pop(); extractedElement = popResult.extracted; leftElementCount = popResult.count; 2) Passando il riferimento ad un oggetto holder: class Holder<T> { T target = null; } Holder<Object> extractedElementHolder = new Holder(); leftElementCount = stack.pop(extractedElementHolder); Object extractedElement = extractedElementHolder.target; -- Andrea Francia http://andreafrancia.blogspot.com/2008/06/relazioni-molti-molti-con-jpa.html[ Auf dieses Posting antworten ]
Antworten
- Luigi_newsgroup (05.07.2008 01:10)
- Andrea Francia (05.07.2008 01:26)
- me (06.07.2008 16:36)
