1
00:00:00,200 --> 00:00:03,290
Bonjour. Dans cette séquence,
nous allons parler du return.

2
00:00:04,460 --> 00:00:09,110
Comment peut-on retourner
une valeur d'un block ou d'une

3
00:00:09,310 --> 00:00:12,630
méthode? Quelles sont les
valeurs de retour par défaut?

4
00:00:13,630 --> 00:00:16,290
Il y a 4 cas à étudier.

5
00:00:16,490 --> 00:00:21,140
Une méthode qui utilise le
chapeau pour faire un return,

6
00:00:21,340 --> 00:00:22,820
une méthode qui n'utilise
pas le chapeau pour faire un

7
00:00:23,020 --> 00:00:25,850
return, un block qui
utilise le chapeau pour faire un

8
00:00:26,050 --> 00:00:29,680
return et un block qui n'utilise
pas le chapeau pour faire un return.

9
00:00:30,000 --> 00:00:33,590
Dans une méthode, si on
utilise le chapeau pour retourner

10
00:00:33,790 --> 00:00:38,540
une valeur, ici ce return

11
00:00:39,230 --> 00:00:44,110
va retourner une valeur en
particulier et va quitter

12
00:00:44,310 --> 00:00:45,070
la méthode.

13
00:00:46,410 --> 00:00:51,290
Si je ne mets pas le chapeau, par
défaut la méthode à la fin retourne self.

14
00:00:53,670 --> 00:00:56,200
Cette partie-là est optionnelle
et en général on ne la mettra pas.

15
00:00:57,010 --> 00:01:01,580
La valeur de retour d'un block est
la valeur de sa dernière expression.

16
00:01:02,320 --> 00:01:05,900
Dans le cadre de ce block
là, entre ici et ici, j'ai un

17
00:01:06,100 --> 00:01:08,540
block qui prend comme
paramètre une valeur x.

18
00:01:09,210 --> 00:01:14,060
J'ajoute 33 à x.

19
00:01:14,260 --> 00:01:17,250
Le résultat de cette
expression x plus 33 n'est pas

20
00:01:17,450 --> 00:01:21,490
utilisé, donc est effacé et
à l'instruction suivante, je

21
00:01:21,690 --> 00:01:25,490
fais x plus 2, donc j'ajoute 2
à ma valeur x, et comme c'est

22
00:01:25,690 --> 00:01:29,200
la dernière expression
du bloc, sa valeur c'est

23
00:01:31,000 --> 00:01:33,880
celle qui représentera la
valeur de retour du block.

24
00:01:35,190 --> 00:01:39,580
Mon block value: 5, ça ça
veut dire j'exécute mon block

25
00:01:40,000 --> 00:01:42,230
avec x prenant la valeur 5.

26
00:01:42,610 --> 00:01:44,450
Donc je calcule 33 plus 5.

27
00:01:45,210 --> 00:01:47,570
Le résultat de ce calcul
est effacé, il ne sert à rien.

28
00:01:48,060 --> 00:01:52,030
5 plus 2 me donne la
valeur 7 qui est utilisée comme

29
00:01:52,230 --> 00:01:53,230
valeur de retour du block.

30
00:01:53,650 --> 00:01:57,280
Et donc l'ensemble de cette
expression a pour valeur 7.

31
00:01:59,700 --> 00:02:02,380
Si j'utilise le
chapeau dans un block,

32
00:02:05,880 --> 00:02:09,340
le comportement est
complètement différent d'une méthode.

33
00:02:10,350 --> 00:02:13,290
Ici, disons qu'on ne va pas
s'attendre à ce que le block

34
00:02:13,490 --> 00:02:17,000
se coupe, mais c'est la
méthode qui va se couper.

35
00:02:17,870 --> 00:02:21,490
Si je regarde l'exemple de
la méthode factorielle dans la

36
00:02:21,690 --> 00:02:26,220
 classe Intenger, le return qui est

37
00:02:26,420 --> 00:02:30,830
ici et celui qui est là, ces 2
return coupent l'exécution de la méthode.

38
00:02:32,750 --> 00:02:36,800
Donc si self, si le receveur
est égal à 0 lors de l'exécution

39
00:02:37,000 --> 00:02:41,550
de la méthode factorielle,
le block est exécuté et 1 est

40
00:02:41,750 --> 00:02:44,420
retourné immédiatement
et la méthode se coupe.

41
00:02:44,620 --> 00:02:46,010
Donc, la méthode retourne 1.

42
00:02:47,110 --> 00:02:49,560
Donc le return ne sert pas à
couper le bloc mais à couper

43
00:02:49,760 --> 00:02:51,250
la méthode qui englobe le block.

44
00:02:52,720 --> 00:02:55,680
Dans le deuxième exemple,
si self est plus grand que 0,

45
00:02:56,660 --> 00:03:01,240
alors on calcule avec un
appel récursif et on retourne le

46
00:03:01,440 --> 00:03:02,460
résultat de cet appel immédiatement.

47
00:03:02,670 --> 00:03:06,880
Donc la méthode ne continue pas à
s'exécuter si self est plus grand que 0.

48
00:03:08,060 --> 00:03:11,000
Dans les autres cas, si
on arrive à la troisième

49
00:03:11,200 --> 00:03:13,550
instruction, on lève une
erreur ça veut dire que le

50
00:03:14,040 --> 00:03:16,590
receveur est un nombre négatif.

51
00:03:16,790 --> 00:03:21,300
Ce que vous devez retenir,
c'est que le chapeau permet de

52
00:03:21,890 --> 00:03:24,860
quitter la méthode, que le
chapeau se trouve dans la

53
00:03:25,060 --> 00:03:27,840
méthode ou dans un block
qui se trouve dans la méthode,

54
00:03:28,050 --> 00:03:30,650
le chapeau quitte
systématiquement la méthode et retourne

55
00:03:31,050 --> 00:03:33,050
une valeur
spécifiée après le chapeau.

56
00:03:34,370 --> 00:03:37,010
Par défaut, une
méthode retourne self.

57
00:03:38,220 --> 00:03:40,770
Mettre return self à la fin
d'une méthode ne sert à rien

58
00:03:41,000 --> 00:03:43,460
puisque c'est la valeur qui est
retournée par défaut systématiquement.

59
00:03:45,800 --> 00:03:50,090
Et un block retourne la
valeur de sa dernière expression.

