Firma dei metodi

di Anonimizzato10204 il
18 risposte
La firma dei metodi in obj-c mi sembra piuttosto strana e pure il modo di richiamarli. Me la potete spiegare magari facendomi capire gli eventuali pregi.

18 Risposte

  • Cominciamo con qualche esempio semplice:
    
    +(double)MyFunc1;
    -(double)MyFunc2;
    
    La prima cosa che si nota sono i segni + e -, il '+' indica un metodo di classe (statico), il '-' un metodo di istanza (quelli soliti). Le due funzioni restituiscono un double e non vogliono parametri, non serve il().

    se invece c' è un parametro:
    
    -(double) MyFunc:(double)a;
    
    Per richiamarle si scrive:
    
    double a = [MyClass MyFunc1];
    double b = [myIstance MyFunc2];
    double c = [myIstance MyFunc:100];
    
    Fin qui non ci dovrebbero essere problemi, dimmi se è tutto chiaro.
  • Le parentesi attorno ai tipi hanno uno scopo?
  • Niente di particolare ci vanno e basta, probabilmente sono indispensabili perchè la sintassi quando si hanno più parametri si complica:
    
    -(double) DistanceFrom: (double)a And (double)y;
    
    che si richiama in questo modo:
    
    double d = [myInstance distanceFrom:2 And:3];
    
  • Questa non l"ho capita.
  • Serve per rendere descrittivi i parametri nel punto di chiamata. Esiste qualcosa di simile in C#
  • Mi puoi fare un esempio con tre o quattro parametri ?
  • Ecco qua:
    
    -(void) SetBounds_Left:(int)a Top:(int)b Right:(int)c Bottom:(int)d;
    
    Che viene richiamata in questo modo:
    
    [shape SetBounds_Left:100 Top:100 Right:200 Bottom:200];
    
  • E a,b,c,d a cosa servono?
  • Vengono usati nell' implementazione:
    
    -(void) SetBounds_Left:(int)a Top:(int)b Right:(int)c Bottom:(int)d
    {
       if ( a < b)....
    }
    
    Sono i parametri di chiamata della funzione,invece 'Left', 'Top' , ecc sono solo descrittivi e vengono usati nel punto di chiamata.
  • Le descrizioni sono obbligatorie o opzionali?
  • Non so se ho capito quello che hai chiesto, ma provo a darti una risposta anche io.

    Le descrizioni sono opzionali ma consigliate. In pratica il metodo di prima può essere scritto come
    
    -(void) SetBounds_Left:(int)a :(int)b :(int)c :(int)d
    
    In cui i "due punti" indicano la presenza di un parametro.
    L'invocazione di tale metodo sarà
    
    [myInstance SetBounds_Left: 2 : 5 : 6 : 8];
    
    Ovviamente l'utilizzo di questo metodo sarà più "scomodo" perché non avendo etichette non hai degli aiuti riguardo i parametri dai inserire, mentre nella versione scritta da barba59 il nome del metodo è autoesplicativo.
  • Ciao Della,
    In effetti le descrizioni nel punto di chiamata sono molto utili. Tra l' altro Xcode ti aiuta moltissimo in fase di inserimento per cui ti basta premere tab e non devi scrivere niente. Sapevo che erano state introdotte anche in C# ma non le avevo mai usate, credo che comincerò ad usarle pure li.
  • E si può usare l'overload sui parametri. Come funziona?
  • In obj-C non esiste l'overloading. Devi per forza creare due metodi con nomi diversi. Però si gioca sul fatto che i nomi dei metodi sono quelli composti da tutte le etichette per creare un finto overloading. Ad esempio
    
    - (id) initWithInt: (int) anInt andInt: (int) anotherInt;
    - (id) initWithInt: (int) anInt andDouble: (double) aDouble;
    
Devi accedere o registrarti per scrivere nel forum
18 risposte