neun
26-02-2010, 12:27
Ho trovato una interessante guida gratuita per cominciare ad usare Xcode (Apple). sono circa 100 pagine per ora e parlano dell'objective-c. Io sono alle primissime armi ma mi sembra che sia tutto piuttosto semplice (per ora). Ho avuto un problema verso questo punto :
La nostra prima funzione
Se continuassimo ad aggiungere codice nel corpo della funzione main(),
finiremmo per trovarci con quel codice non strutturato e difficile da correggere,
cosa che vogliamo evitare. Ora scriveremo un altro programma un po' più
strutturato.
Oltre alla funzione obbligatoria main(), creeremo una funzione circleArea() [3].
//[3]
main()
{
float pictureWidth, pictureHeight, pictureSurfaceArea;
pictureWidth = 8.0;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
}
circleArea() // [3.9]
{
}
È stato facile, ma la nostra funzione personalizzata che inizia all'istruzione [3.9]
non fa ancora niente. Notate che la specifica della funzione è al di fuori del
corpo della funzione main(). In altre parole le due funzioni non sono annidate.
La nostra nuova funzione circleArea() dev'essere invocata dalla funzione main().
Vediamo come possiamo farlo [4].
//[4]
main()
{
float pictureWidth, pictureHeight, pictureSurfaceArea,
circleRadius, circleSurfaceArea; // [4.4]
pictureWidth = 8.0;
pictureHeight = 4.5;
circleRadius = 5.0; // [4.7]
pictureSurfaceArea = pictureWidth * pictureHeight;
// Here we call our function!
circleSurfaceArea = circleArea(circleRadius); // [4.11]
}
Nota: il resto del codice non è visualizzato (vedi [3]).
Passare degli argomenti
Abbiamo aggiunto un paio di nomi di variabili del tipo float [4.4] e abbiamo
inizializzato la variabile circleRadius, ovvero gli abbiamo dato un valore [4.7]. La
riga di maggior interesse è [4.11], dove la funzione circleArea() viene invocata.
Come puoi vedere, il nome della variabile circleRadius è stato messo fra le due parentesi. Esso è un argomento della funzione circleArea(). Il valore della
variabile circleRadius sta per essere passato alla funzione circleArea().
Quando la funzione circleArea() ha fatto il suo lavoro di eseguire il calcolo vero
e proprio, deve restituire il risultato. Modifichiamo la funzione circleArea() di
[3] per ottenere ciò che vogliamo [5].
//[5]
circleArea(float theRadius) //
[5.1]
{
float theArea; //
[5.3]
theArea = 3.1416 * theRadius * theRadius; // pi times r square //
[5.4]
return theArea; //
[5.5]
}
Nella [5.1] abbiamo definito che per la funzione circleArea() un valore di tipo
float è richiesto come input. Quando viene ricevuto, questo valore è
immagazzinato nella variabile nominata theRadius. Usiamo una seconda
variabile, theArea, per immagazzinare il risultato del calcolo [5.4], pertanto la
dobbiamo dichiarare [5.3], allo stesso modo in cui dichiarammo le variabili nella
funzione main() [4.4].
Avrai notato che la dichiarazione della variabile theRadius è stata collocata fra le
parentesi [5.1].
La linea [5.5] restituisce il risultato alla parte del programma da cui la funzione è
stata invocata. Come conseguenza, nella linea [4.11], la variabile
circleSurfaceArea è inizializzata con quel valore.
La funzione nell'esempio [5] è completa, eccetto per una cosa. Non abbiamo
specificato il tipo di dati che la funzione restituirà. Il compilatore richiede che lo facciamo, per cui non abbiamo altra scelta che obbedire e indicare che è di tipo float [6.1].
//[6]
float circleArea(float theRadius) //
[6.1]
{
float theArea;
theArea = 3.1416 * theRadius * theRadius;
return theArea;
}
A cosa serve "invocare"?
Perchè viene invocato proprio cirleRadious?
Cosa vuol dire "il valore della variabile circleRadious sta per essere passato alla funzione circleArea?
Perchè al [5] viene invocato theRadious? Da dov'è uscito? Non era circleRadiuos?
Grazie, Marco :)
La nostra prima funzione
Se continuassimo ad aggiungere codice nel corpo della funzione main(),
finiremmo per trovarci con quel codice non strutturato e difficile da correggere,
cosa che vogliamo evitare. Ora scriveremo un altro programma un po' più
strutturato.
Oltre alla funzione obbligatoria main(), creeremo una funzione circleArea() [3].
//[3]
main()
{
float pictureWidth, pictureHeight, pictureSurfaceArea;
pictureWidth = 8.0;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
}
circleArea() // [3.9]
{
}
È stato facile, ma la nostra funzione personalizzata che inizia all'istruzione [3.9]
non fa ancora niente. Notate che la specifica della funzione è al di fuori del
corpo della funzione main(). In altre parole le due funzioni non sono annidate.
La nostra nuova funzione circleArea() dev'essere invocata dalla funzione main().
Vediamo come possiamo farlo [4].
//[4]
main()
{
float pictureWidth, pictureHeight, pictureSurfaceArea,
circleRadius, circleSurfaceArea; // [4.4]
pictureWidth = 8.0;
pictureHeight = 4.5;
circleRadius = 5.0; // [4.7]
pictureSurfaceArea = pictureWidth * pictureHeight;
// Here we call our function!
circleSurfaceArea = circleArea(circleRadius); // [4.11]
}
Nota: il resto del codice non è visualizzato (vedi [3]).
Passare degli argomenti
Abbiamo aggiunto un paio di nomi di variabili del tipo float [4.4] e abbiamo
inizializzato la variabile circleRadius, ovvero gli abbiamo dato un valore [4.7]. La
riga di maggior interesse è [4.11], dove la funzione circleArea() viene invocata.
Come puoi vedere, il nome della variabile circleRadius è stato messo fra le due parentesi. Esso è un argomento della funzione circleArea(). Il valore della
variabile circleRadius sta per essere passato alla funzione circleArea().
Quando la funzione circleArea() ha fatto il suo lavoro di eseguire il calcolo vero
e proprio, deve restituire il risultato. Modifichiamo la funzione circleArea() di
[3] per ottenere ciò che vogliamo [5].
//[5]
circleArea(float theRadius) //
[5.1]
{
float theArea; //
[5.3]
theArea = 3.1416 * theRadius * theRadius; // pi times r square //
[5.4]
return theArea; //
[5.5]
}
Nella [5.1] abbiamo definito che per la funzione circleArea() un valore di tipo
float è richiesto come input. Quando viene ricevuto, questo valore è
immagazzinato nella variabile nominata theRadius. Usiamo una seconda
variabile, theArea, per immagazzinare il risultato del calcolo [5.4], pertanto la
dobbiamo dichiarare [5.3], allo stesso modo in cui dichiarammo le variabili nella
funzione main() [4.4].
Avrai notato che la dichiarazione della variabile theRadius è stata collocata fra le
parentesi [5.1].
La linea [5.5] restituisce il risultato alla parte del programma da cui la funzione è
stata invocata. Come conseguenza, nella linea [4.11], la variabile
circleSurfaceArea è inizializzata con quel valore.
La funzione nell'esempio [5] è completa, eccetto per una cosa. Non abbiamo
specificato il tipo di dati che la funzione restituirà. Il compilatore richiede che lo facciamo, per cui non abbiamo altra scelta che obbedire e indicare che è di tipo float [6.1].
//[6]
float circleArea(float theRadius) //
[6.1]
{
float theArea;
theArea = 3.1416 * theRadius * theRadius;
return theArea;
}
A cosa serve "invocare"?
Perchè viene invocato proprio cirleRadious?
Cosa vuol dire "il valore della variabile circleRadious sta per essere passato alla funzione circleArea?
Perchè al [5] viene invocato theRadious? Da dov'è uscito? Non era circleRadiuos?
Grazie, Marco :)