qui parle d'une construction dite "block" dans le code Objective-C.
Et au vue de ce tutoriel, je me pose la question à quoi sert cette construction de code ?
exemple :
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int (^add)(int, int) = ^(int num1, int num2) { return num1 + num2; };
NSLog(@"%d", add(5,2));
[pool drain]; return 0; }
En quoi ça simplifie le code et est-ce fort utilisé en réel dans les codes des programmes ?
Dans d'autres langages, ça s'appelle des closures ou des fonctions anonymes. Je te laisse regarder ce qu'est des closures, les articles du web diront moins de conneries que moi.
Sinon, il est clair que l'exemple que tu donnes n'apporte pas grand chose. Une simple fonction remplira le même rôle très bien.
Tu peux utiliser dans le block des variables qui sont définie en dehors du blocks. A l'intérieur du block ces variables sont alors définie en const et leur valeur capturée au point de création du block. Ceci est la première grande différence avec un appel de fonction classique, cette dernière n'a pas accès aux variables locals de l'appelant.
Ensuite, il est possible de copier un block. Ainsi à partir d'un extrait de code unique, tu pourras le faire tourner avec différents noms dans différentes conditions.
Apple utilise énormément les blocks pour remplacer les fonctions callback. Il devient beaucoup plus simple à écrire le callback, et d'un point de vue de lisibilité du code, le callback est écrit là où il est transmit à la fonction qui demande le callback.
Regarde les exemples d'Apple pour utiliser GCD.
-- Frédéric Testuz
David Remacle <listes@clampin.com> wrote:
Salut,
J'ai regardé le tutoriel
http://www.youtube.com/watch?v=1wjgcQGSx3U
qui parle d'une construction dite "block" dans le code Objective-C.
Et au vue de ce tutoriel, je me pose la question à quoi sert cette
construction de code ?
exemple :
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int (^add)(int, int) = ^(int num1, int num2) {
return num1 + num2;
};
NSLog(@"%d", add(5,2));
[pool drain];
return 0;
}
En quoi ça simplifie le code et est-ce fort utilisé en réel dans les
codes des programmes ?
Dans d'autres langages, ça s'appelle des closures ou des fonctions
anonymes. Je te laisse regarder ce qu'est des closures, les articles du
web diront moins de conneries que moi.
Sinon, il est clair que l'exemple que tu donnes n'apporte pas grand
chose. Une simple fonction remplira le même rôle très bien.
Tu peux utiliser dans le block des variables qui sont définie en dehors
du blocks. A l'intérieur du block ces variables sont alors définie en
const et leur valeur capturée au point de création du block. Ceci est la
première grande différence avec un appel de fonction classique, cette
dernière n'a pas accès aux variables locals de l'appelant.
Ensuite, il est possible de copier un block. Ainsi à partir d'un extrait
de code unique, tu pourras le faire tourner avec différents noms dans
différentes conditions.
Apple utilise énormément les blocks pour remplacer les fonctions
callback. Il devient beaucoup plus simple à écrire le callback, et d'un
point de vue de lisibilité du code, le callback est écrit là où il est
transmit à la fonction qui demande le callback.
qui parle d'une construction dite "block" dans le code Objective-C.
Et au vue de ce tutoriel, je me pose la question à quoi sert cette construction de code ?
exemple :
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int (^add)(int, int) = ^(int num1, int num2) { return num1 + num2; };
NSLog(@"%d", add(5,2));
[pool drain]; return 0; }
En quoi ça simplifie le code et est-ce fort utilisé en réel dans les codes des programmes ?
Dans d'autres langages, ça s'appelle des closures ou des fonctions anonymes. Je te laisse regarder ce qu'est des closures, les articles du web diront moins de conneries que moi.
Sinon, il est clair que l'exemple que tu donnes n'apporte pas grand chose. Une simple fonction remplira le même rôle très bien.
Tu peux utiliser dans le block des variables qui sont définie en dehors du blocks. A l'intérieur du block ces variables sont alors définie en const et leur valeur capturée au point de création du block. Ceci est la première grande différence avec un appel de fonction classique, cette dernière n'a pas accès aux variables locals de l'appelant.
Ensuite, il est possible de copier un block. Ainsi à partir d'un extrait de code unique, tu pourras le faire tourner avec différents noms dans différentes conditions.
Apple utilise énormément les blocks pour remplacer les fonctions callback. Il devient beaucoup plus simple à écrire le callback, et d'un point de vue de lisibilité du code, le callback est écrit là où il est transmit à la fonction qui demande le callback.