Advertisement
Guest User

Untitled

a guest
Jun 25th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.80 KB | None | 0 0
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset="UTF-8" />
  6. <style>
  7. /* code gets the browser-default font
  8. * kbd gets a slightly less common monospace font
  9. * samp gets the hard pixelly fonts
  10. */
  11. kbd { font-family: "Droid Sans Mono", "Luxi Mono", "Inconsolata", monospace }
  12. samp { font-family: "Terminus", "Courier", "Lucida Console", monospace }
  13. /* WHATWG HTML frowns on the use of <u> because it looks like a link,
  14. * so we make it not look like one.
  15. */
  16. u { text-decoration: none }
  17. .nested {
  18. margin-left: 3em;
  19. }
  20. // footnote things:
  21. aside, u { opacity: 0.7 }
  22. a[id^="fn-"]:target { background: #ff0 }
  23. </style>
  24. <link rel="stylesheet" href="//design.perl6.org/perl.css">
  25.  
  26.  
  27. </head>
  28. <body class="pod" id="___top">
  29.  
  30.  
  31. <nav class="indexgroup">
  32. <ol class="indexList indexList1">
  33. <li class="indexItem indexItem1"><a href="#Cette_pr%C3%A9sentation_">Cette présentation </a></li>
  34. <li class="indexItem indexItem1"><a href="#Si_Perl_6_install%C3%A9%2C_utiliser_le_REPL">Si Perl 6 installé, utiliser le REPL</a></li>
  35. <li class="indexItem indexItem1"><a href="#Exp%C3%A9rimenter_avec_Perl_6_sans_l%27installer">Expérimenter avec Perl 6 sans l&#39;installer</a></li>
  36. <li class="indexItem indexItem1"><a href="#Pr%C3%A9sentation_suivante_%3A_les_roles">Présentation suivante : les roles</a></li>
  37. <li class="indexItem indexItem1"><a href="#Distinction_entre_r%C3%B4le_et_classe">Distinction entre rôle et classe</a></li>
  38. <li class="indexItem indexItem1"><a href="#Programmation_Orient%C3%A9e_Objet_en_Perl6">Programmation Orientée Objet en Perl6</a></li>
  39. <li class="indexItem indexItem1"><a href="#Attributs_d%C2%B4objet_et_accesseur_class_A_%7B_has_int_%24%21val_%3D_42%3B_has_.%24b_is_rw%3B_%7D_">Attributs d´objet et accesseur class A { has int $!val = 42; has .$b is rw; } </a></li>
  40. <li class="indexItem indexItem1"><a href="#m%C3%A9thodes">méthodes</a></li>
  41. <li class="indexItem indexItem1"><a href="#Syntaxe_pour_une_classe_par_fichier">Syntaxe pour une classe par fichier</a></li>
  42. <li class="indexItem indexItem1"><a href="#invocant_et_pseudo-classe">invocant et pseudo-classe</a></li>
  43. <li class="indexItem indexItem1"><a href="#instanciation_de_classes">instanciation de classes</a></li>
  44. <li class="indexItem indexItem1"><a href="#Attributs_et_m%C3%A9thodes_de_classe">Attributs et méthodes de classe</a></li>
  45. <li class="indexItem indexItem1"><a href="#Types_et_valeurs_de_d%C3%A9faut_des_attributs">Types et valeurs de défaut des attributs</a></li>
  46. <li class="indexItem indexItem1"><a href="#Accesseur_d%27attribut_rw_ou_m%C3%A9thode_lvalue_%3F">Accesseur d&#39;attribut rw ou méthode lvalue ?</a></li>
  47. <li class="indexItem indexItem1"><a href="#Containers_">Containers </a></li>
  48. <li class="indexItem indexItem1"><a href="#Retour_sur_le_container_Proxy">Retour sur le container Proxy</a></li>
  49. <li class="indexItem indexItem1"><a href="#types">types</a></li>
  50. <li class="indexItem indexItem1"><a href="#Boxing">Boxing</a></li>
  51. <li class="indexItem indexItem1"><a href="#exemple_de_boxing_">exemple de boxing </a></li>
  52. <li class="indexItem indexItem1"><a href="#type_valeur_et_type_r%C3%A9f%C3%A9rence_%281%29">type valeur et type référence (1)</a></li>
  53. <li class="indexItem indexItem1"><a href="#type_valeur_et_type_r%C3%A9f%C3%A9rence_%282%29">type valeur et type référence (2)</a></li>
  54. <li class="indexItem indexItem1"><a href="#passer_par_r%C3%A9ference">passer par réference</a></li>
  55. <li class="indexItem indexItem1"><a href="#%C3%A9galit%C3%A9_et_identit%C3%A9">égalité et identité</a></li>
  56. <li class="indexItem indexItem1"><a href="#op%C3%A9rateurs_sont_des_exemples_de_multi_subs">opérateurs sont des exemples de multi subs</a></li>
  57. <li class="indexItem indexItem1"><a href="#pseudo_sigil_backslash">pseudo sigil backslash</a></li>
  58. <li class="indexItem indexItem1"><a href="#Un_exemple_de_multisub">Un exemple de multisub</a></li>
  59. <li class="indexItem indexItem1"><a href="#Quelques_exemples">Quelques exemples</a></li>
  60. <li class="indexItem indexItem1"><a href="#liage_dynamique_%28binding%29_et_affectation">liage dynamique (binding) et affectation</a></li>
  61. <li class="indexItem indexItem1"><a href="#Immutabilit%C3%A9_et_conteneur">Immutabilité et conteneur</a></li>
  62. <li class="indexItem indexItem1"><a href="#Immutabilit%C3%A9_%3A_listes%2C_tableaux_%281%29">Immutabilité : listes, tableaux (1)</a></li>
  63. <li class="indexItem indexItem1"><a href="#Immutabilit%C3%A9_%3A_listes%2C_tableaux_%282%29">Immutabilité : listes, tableaux (2)</a></li>
  64. <li class="indexItem indexItem1"><a href="#Identit%C3%A9_de_conteneur">Identité de conteneur</a></li>
  65. <li class="indexItem indexItem1"><a href="#d%C3%A9claration_de_type">déclaration de type</a></li>
  66. <li class="indexItem indexItem1"><a href="#Mu%2C_Any%2C_Junction%2C_Cool%2C_Failure%2C">Mu, Any, Junction, Cool, Failure,</a></li>
  67. <li class="indexItem indexItem1"><a href="#Junction">Junction</a></li>
  68. <li class="indexItem indexItem1"><a href="#.perl%2C_.gist%2C_.Str">.perl, .gist, .Str</a></li>
  69. <li class="indexItem indexItem1"><a href="#.perl%2C_.gist%2C_.Str_sur_classes_et_instances">.perl, .gist, .Str sur classes et instances</a></li>
  70. <li class="indexItem indexItem1"><a href="#.perl%2C_.gist%2C_.Str_sur_un_match">.perl, .gist, .Str sur un match</a></li>
  71. <li class="indexItem indexItem1"><a href="#M%C3%A9tamod%C3%A8le">Métamodèle</a></li>
  72. <li class="indexItem indexItem1"><a href="#M%C3%A9tamod%C3%A8le">Métamodèle</a></li>
  73. <li class="indexItem indexItem1"><a href="#Quelques_concepts_cl%C3%A9">Quelques concepts clé</a></li>
  74. </ol>
  75. </nav>
  76. <h1 id="Cette_présentation_"><a class="u" href="#___top" title="go to top of document">Cette présentation </a></h1>
  77. <p>Stéphane cognominal Payrard -- Journées Perl 2016 -- Samedi 25 Juin 2016</p>
  78. <p>Ce talk</p>
  79. <ul><li><p>Objet et sa place dans les types Perl</p>
  80. </li>
  81. <li><p>Multiméthodes</p>
  82. </li>
  83. <li><p>Métamodèle OO</p>
  84. </li>
  85. </ul>
  86. <h1 id="Si_Perl_6_installé,_utiliser_le_REPL"><a class="u" href="#___top" title="go to top of document">Si Perl 6 installé, utiliser le REPL</a></h1>
  87. <ul><li><p>Pas de perte de la portée lexicale</p>
  88. </li>
  89. <li><p>Chaque ligne fait un EVAL</p>
  90. </li>
  91. <li><p>... dans une portee emboitée</p>
  92. </li>
  93. </ul>
  94. <pre>$ perl6-m # avec le backend MoarVM
  95. To exit type &#39; exit&#39; or &#39;^D&#39;
  96. > say &#39;Salut les mongueurs&#39;
  97. Salut les mongueurs
  98. > &#39;Salut les mongueurs&#39;
  99. Salut les mongueurs
  100. > my $a = &#39;salut&#39;
  101. salut
  102. > $a
  103. salut
  104. > class A {}
  105. (A)
  106. > class A {}
  107. Redeclaration of symbol A
  108.  
  109. > $a
  110. > $a
  111. Variable &#39;$a&#39; is not declared</pre>
  112. <h1 id="Expérimenter_avec_Perl_6_sans_l'installer"><a class="u" href="#___top" title="go to top of document">Expérimenter avec Perl 6 sans l&#39;installer</a></h1>
  113. <p>Utiliser le bot p6eval </p>
  114. <ul><li><p>grâce à IRC</p>
  115. </li>
  116. <li><p>aller sur irc.freenode.net</p>
  117. </li>
  118. <li><p>/join #perl6</p>
  119. </li>
  120. <li><p>m: say "hello world" # en public</p>
  121. </li>
  122. <li><p>/msg camelia m: say "hello world" # en privé</p>
  123. </li>
  124. <li><p>sur irc.perl.org #perlfr le bot s&#39;appelle p6eval</p>
  125. </li>
  126. <li><p>affichage explicite contrairement au REPL</p>
  127. </li>
  128. </ul>
  129. <pre>si pas d&#39;IRC, hotspot "iPhone de stephane" "larrywall"</pre>
  130. <h1 id="Présentation_suivante_:_les_roles"><a class="u" href="#___top" title="go to top of document">Présentation suivante : les roles</a></h1>
  131. <ul><li><p>roles comme interface matérialisé par les sigils</p>
  132. </li>
  133. <li><p>roles paramétriques, un peu comme generics de Java</p>
  134. </li>
  135. </ul>
  136. <h1 id="Distinction_entre_rôle_et_classe"><a class="u" href="#___top" title="go to top of document">Distinction entre rôle et classe</a></h1>
  137. <ul><li><p>Une classe permet d&#39;instancier des objets</p>
  138. </li>
  139. <li><p>On peut composer des classes à partir de roles</p>
  140. </li>
  141. <li><p>Classes mutables, roles, pas</p>
  142. </li>
  143. <li><p>Mais on peut mixer des roles dans un classe/objet</p>
  144. </li>
  145. <li><p>statiquement : trait dynamiquement : mixin </p>
  146. </li>
  147. </ul>
  148. <pre>class A {}; class A is B {}</pre>
  149. <p>implémenté en terme de :</p>
  150. <pre>multi sub trait_mod:<is>(Mu:U $child, Mu:U $parent) { ... }</pre>
  151. <h1 id="Programmation_Orientée_Objet_en_Perl6"><a class="u" href="#___top" title="go to top of document">Programmation Orientée Objet en Perl6</a></h1>
  152. <ul><li><p>OO à base de classes versus prototpypes</p>
  153. </li>
  154. <li><p>Perl 6 à base de classes</p>
  155. </li>
  156. <li><p>Mais métamodèle permet d&#39;implémenter OO à base de prototypes</p>
  157. </li>
  158. <li><p>Multiméthodes</p>
  159. </li>
  160. <li><p>Rôles (prochaine présentation)</p>
  161. </li>
  162. <li><p>Tous les types de Perl 6 ne sont pas objets</p>
  163. </li>
  164. <li><p>process multifils et intérêt de l&#39;immutabilité</p>
  165. </li>
  166. </ul>
  167. <h1 id="Attributs_d´objet_et_accesseur_class_A_{_has_int_$!val_=_42;_has_.$b_is_rw;_}_"><a class="u" href="#___top" title="go to top of document">Attributs d´objet et accesseur class A { has int $!val = 42; has .$b is rw; } </a></h1>
  168. <pre>twigil ! pour attribut privé non accessible classes dérivées
  169. twigil . pour attribut public
  170. is rw pour attribut en lecture écriture
  171.  
  172. my A $a = ...
  173. say $a.b # accesseur en lecture <=> appel de méthode
  174. $a.b = 666 # acesseur en écriture</pre>
  175. <h1 id="méthodes"><a class="u" href="#___top" title="go to top of document">méthodes</a></h1>
  176. <pre>class Salut {
  177. has $.qui is required;
  178. method salut { say "salut $!qui" }
  179. }
  180.  
  181. $_ = Salut.new(:qui<dude>); # .new utilise argument nommés
  182. $_.salut;
  183. .salut; # invocant implicite</pre>
  184. <h1 id="Syntaxe_pour_une_classe_par_fichier"><a class="u" href="#___top" title="go to top of document">Syntaxe pour une classe par fichier</a></h1>
  185. <pre>unit class Salut;
  186. has $.qui
  187. method salut() { say "salut $!qui" }my</pre>
  188. <h1 id="invocant_et_pseudo-classe"><a class="u" href="#___top" title="go to top of document">invocant et pseudo-classe</a></h1>
  189. <ul><li><p>invocant par défaut est self</p>
  190. </li>
  191. <li><p>pamètre invocant généralement omis de la sigature</p>
  192. </li>
  193. <li><p>si explictite, le : separe l&#39;invocant des autres parametres</p>
  194. </li>
  195. <li><p>::?CLASS permet de capturer la classe</p>
  196. </li>
  197. <li><p>utile pour classe anonyme</p>
  198. </li>
  199. <li><p>ou pour éviter d&#39;utiliser le nom</p>
  200. </li>
  201. </ul>
  202. <pre>class A {
  203. method bar { self.doit }
  204. method doit($self:) { ... }
  205. method foo(::?CLASS $self) {
  206. my ::?CLASS $a
  207. }
  208. }</pre>
  209. <h1 id="instanciation_de_classes"><a class="u" href="#___top" title="go to top of document">instanciation de classes</a></h1>
  210. <pre>class Salut {
  211. has $.qui
  212. method salut($quoi) { say "$quoi $!qui" }
  213. }
  214.  
  215. $_ = Salut.new(:qui<dude>);
  216. .salut: bonjour;
  217. .salut(´bonjour´)
  218. salut $_: </pre>
  219. <h1 id="Attributs_et_méthodes_de_classe"><a class="u" href="#___top" title="go to top of document">Attributs et méthodes de classe</a></h1>
  220. <p>Une classe est un module donc déclarateur de scope classique.</p>
  221. <ul><li><p>my : privé</p>
  222. </li>
  223. <li><p>our : public</p>
  224. </li>
  225. </ul>
  226. <pre>method oh_so_static(::?CLASS:U:) { }
  227. method oh_so_static(A:U:) { }</pre>
  228. <p>Explication de signature</p>
  229. <ul><li><p>A nom de classe</p>
  230. </li>
  231. <li><p>A:U valeur indéfinie seulement, donc classe pas instance</p>
  232. </li>
  233. <li><p>A:U: le paramètre est invocant</p>
  234. </li>
  235. </ul>
  236. <h1 id="Types_et_valeurs_de_défaut_des_attributs"><a class="u" href="#___top" title="go to top of document">Types et valeurs de défaut des attributs</a></h1>
  237. <ul><li><p>les attributs ont un sigil ! même si déclaré avec .</p>
  238. </li>
  239. <li><p>le type implicite d&#39;un attribut est Mu </p>
  240. </li>
  241. <li><p>pour accepter les Junctions, dérivé de Mu</p>
  242. </li>
  243. <li><p>mais initialisé par défaut à Any</p>
  244. </li>
  245. </ul>
  246. <pre>> class A { has $.a; has $!b }; A.^attributes
  247. (Mu $!a Mu $!b)
  248. > say A.new( :a(1|2)).a.WHAT
  249. (Junction)
  250. > A.new.a.WHAT</pre>
  251. <pre>(Any)</pre>
  252. <h1 id="Accesseur_d'attribut_rw_ou_méthode_lvalue_?"><a class="u" href="#___top" title="go to top of document">Accesseur d&#39;attribut rw ou méthode lvalue ?</a></h1>
  253. <p>Même interface pour l&#39;utilisateur</p>
  254. <ul><li><p>l&#39;utilisateur d&#39;une classe n&#39;a pas à connaître ses attributs</p>
  255. </li>
  256. <li><p>détail d&#39;implémentation qui peut changer</p>
  257. </li>
  258. <li><p>même si attribut publique</p>
  259. </li>
  260. <li><p>la méthode .b remplace l&#39;accesseur autogénéré</p>
  261. </li>
  262. <li><p>.quelquechose : point comme pseudosigil pour désigner une méthode</p>
  263. </li>
  264. </ul>
  265. <pre>method b is rw {
  266. return Proxy.new(
  267. FETCH => method () { say &#39;fetch&#39;; $!b },
  268. STORE => method ($new) { say &#39;store&#39; $!b },
  269. );
  270. }</pre>
  271. <h1 id="Containers_"><a class="u" href="#___top" title="go to top of document">Containers </a></h1>
  272. <ul><li><p>un Proxy est une forme de container</p>
  273. </li>
  274. <li><p>Scalar est le container par défaut</p>
  275. </li>
  276. <li><p>.VAR donne le container d&#39;une valeur</p>
  277. </li>
  278. <li><p>.WHAT donne le type d&#39;une valeur</p>
  279. </li>
  280. <li><p>.VAR et .WHAT sont des macros</p>
  281. </li>
  282. </ul>
  283. <pre>> my $a; say $a.VAR.WHAT
  284. (Scalar)
  285. my $a; say $a.VAR # bogue. Décontenairisation parasite
  286. Any</pre>
  287. <h1 id="Retour_sur_le_container_Proxy"><a class="u" href="#___top" title="go to top of document">Retour sur le container Proxy</a></h1>
  288. <p>#perl6++ timotimo++ pour l&#39;exemple</p>
  289. <pre>my $foo := Proxy.new(
  290. FETCH => -> | { "yo" },
  291. STORE => -> | { });
  292. say $foo.VAR.WHAT;
  293. say $foo
  294.  
  295. (Proxy)
  296. ␤yo␤</pre>
  297. <h1 id="types"><a class="u" href="#___top" title="go to top of document">types</a></h1>
  298. <pre>int, num, int8... types natifs dont la valeur tient dans un registre
  299. types natifs
  300. objets</pre>
  301. <ul><li><p>les types natifs n&#39;ont pas d&#39;annotation de type,</p>
  302. </li>
  303. <li><p>les objets, si</p>
  304. </li>
  305. <li><p>mais autoboxing: 1.WHAT</p>
  306. </li>
  307. </ul>
  308. <h1 id="Boxing"><a class="u" href="#___top" title="go to top of document">Boxing</a></h1>
  309. <ul><li><p>On peut traiter les types natifs comme des objets</p>
  310. </li>
  311. <li><p>Boxing</p>
  312. </li>
  313. <li><p>On ne peut "interroger un natif" que par un boxing</p>
  314. </li>
  315. <li><p>Transparent pour le programmeur</p>
  316. </li>
  317. <li><p>Boxing d&#39;un int donne un Int</p>
  318. </li>
  319. <li><p>Boxing se cumule avec les containers</p>
  320. </li>
  321. </ul>
  322. <h1 id="exemple_de_boxing_"><a class="u" href="#___top" title="go to top of document">exemple de boxing </a></h1>
  323. <pre>> my int $i = 42
  324. 42
  325. > say $i
  326. 42
  327. > $i.say # boxing pour utiliser la méthode .say
  328. 42
  329. > $i.WHAT
  330. (Int)
  331. > $i.REPR
  332. P6opaque # classes Perl6 implémentées en terme de P6Opaque
  333. > </pre>
  334. <h1 id="type_valeur_et_type_référence_(1)"><a class="u" href="#___top" title="go to top of document">type valeur et type référence (1)</a></h1>
  335. <p>Un objet est un type référence. Il peut etre modifié si passé en argument et si mutable</p>
  336. <pre>class A { has $.a is rw };
  337. sub foo(A $val) { $val.a = 42 }
  338. my $a = A.new; # A.new(a => Any )
  339. a($a);
  340. say $a; # A.new(a => 42 )</pre>
  341. <p>17:10 timotimo m: my int $foo = 10; sub do-it(int $bar is rw) { say $bar.VAR.WHAT }; do-it($foo) 17:10 camelia rakudo-moar 7b2710: OUTPU<samp>(IntLexRef)␤</samp></p>
  342. <h1 id="type_valeur_et_type_référence_(2)"><a class="u" href="#___top" title="go to top of document">type valeur et type référence (2)</a></h1>
  343. <pre>sub foo(int $val) { $val = 42 };
  344. Cannot assign to readonly variable $val</pre>
  345. <ul><li><p>$val est passé par référence et peut etre modifié</p>
  346. </li>
  347. </ul>
  348. <h1 id="passer_par_réference"><a class="u" href="#___top" title="go to top of document">passer par réference</a></h1>
  349. <pre>sub foo(int $val is rw) { $val = 42 }; my int $i = 0; foo($i) ; say $i
  350.  
  351. foo(666)
  352. Expected a modifiable native int argument for &#39;$val&#39;</pre>
  353. <h1 id="égalité_et_identité"><a class="u" href="#___top" title="go to top of document">égalité et identité</a></h1>
  354. <p>Opérateurs binaires (arité 2)</p>
  355. <ul><li><p>=:= vrai identité</p>
  356. </li>
  357. <li><p>eqv équivalence </p>
  358. </li>
  359. <li><p>=== identité de valeur</p>
  360. </li>
  361. <li><p>== conversion des args à Num avant comparaison</p>
  362. </li>
  363. <li><p>eq conversion des args à Str avant comparaison</p>
  364. </li>
  365. </ul>
  366. <h1 id="opérateurs_sont_des_exemples_de_multi_subs"><a class="u" href="#___top" title="go to top of document">opérateurs sont des exemples de multi subs</a></h1>
  367. <ul><li><p>noms longs avec des paires adverbiales</p>
  368. </li>
  369. </ul>
  370. <pre>multi sub infix:<eq>(\a, \b) { a.Stringy eq b.Stringy }
  371. multi sub infix:<eq>(str $a, str $b) returns Bool:D { ... }
  372. ...
  373. multi sub infix:<==>(\a, \b) { a.Numeric == b.Numeric }</pre>
  374. <h1 id="pseudo_sigil_backslash"><a class="u" href="#___top" title="go to top of document">pseudo sigil backslash</a></h1>
  375. <pre>multi sub infix:<eq>(\a, \b) { a.Stringy eq b.Stringy }</pre>
  376. <ul><li><p>pseudo sigil \ => pas de containers</p>
  377. </li>
  378. </ul>
  379. <pre>> my \a = 1;
  380. 1
  381. > say \a;
  382. \(1)
  383. > \a = 2; </pre>
  384. <pre>\(1)
  385. Cannot modify an immutable Capture
  386. in block <unit> at <unknown file> line 1</pre>
  387. <h1 id="Un_exemple_de_multisub"><a class="u" href="#___top" title="go to top of document">Un exemple de multisub</a></h1>
  388. <pre>multi quicksort( [ ] ) { () }
  389. multi quicksort( [$x ] ) { ($x) }
  390. multi quicksort( [$pivot, *@xs ] ) {
  391. quicksort(@xs.grep: * before $pivot),
  392. $pivot,
  393. quicksort(@xs.grep: * !before $pivot),
  394. }</pre>
  395. <h1 id="Quelques_exemples"><a class="u" href="#___top" title="go to top of document">Quelques exemples</a></h1>
  396. <pre>> &#39;ab&#39; === &#39;a&#39; ~ &#39;b&#39;
  397. True
  398. > &#39;ab&#39; eq &#39;a&#39; ~ &#39;b&#39;
  399. True
  400. > &#39;ab&#39; =:= &#39;a&#39; ~ &#39;b&#39;
  401. False
  402. > &#39;ab&#39; =:= &#39;ab&#39;
  403. True
  404. > </pre>
  405. <h1 id="liage_dynamique_(binding)_et_affectation"><a class="u" href="#___top" title="go to top of document">liage dynamique (binding) et affectation</a></h1>
  406. <ul><li><p>Liage : lie un nom </p>
  407. </li>
  408. <li><p>Associe un nom à une valeur ou alias une variable.</p>
  409. </li>
  410. <li><p>Similaire à un typeglob Perl 5</p>
  411. </li>
  412. <li><p>nqp::bind</p>
  413. </li>
  414. <li><p>Affectation</p>
  415. </li>
  416. <li><p>multisub</p>
  417. </li>
  418. </ul>
  419. <pre>> my @a := 1, 2, 3; say @a.WHAT
  420. (List)
  421. > my @a := 1, 2, 3; my @b := @a; my $c := @a; say @a =:= @b =:= $c
  422. True
  423. > @a.VAR =:= @b.VAR =:= $c.VAR
  424. True
  425. > my @a = 1, 2, 3; say @a.WHAT
  426. (Array)
  427.  
  428. for 1..20 { print $_, Int.new($_) =:= Int.new($_) ?? &#39;&#39; !! &#39;!&#39;, &#39; &#39; }
  429. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15! 16! 17! 18! 19! 20! </pre>
  430. <h1 id="Immutabilité_et_conteneur"><a class="u" href="#___top" title="go to top of document">Immutabilité et conteneur</a></h1>
  431. <p>Une valeur immutable est une valeur qu&#39;on ne peux pas modifier en place; càd sans changer son identité</p>
  432. <h1 id="Immutabilité_:_listes,_tableaux_(1)"><a class="u" href="#___top" title="go to top of document">Immutabilité : listes, tableaux (1)</a></h1>
  433. <p>Une liste est immutable. Un tableau ne l&#39;est pas. Liage d&#39;une lise à un Positional.</p>
  434. <pre>> my @a := 1, 2, 3 ; @a[0] = 4
  435. Cannot modify an immutable Int
  436. in block <unit> at <unknown file> line 1
  437.  
  438. > @a.push: 4
  439. Cannot call &#39;push&#39; on an immutable &#39;List&#39;
  440. in block <unit> at <unknown file> line 1
  441.  
  442. > @a.WHAT
  443. (List)
  444. > @a.push: 4
  445. Cannot call &#39;push&#39; on an immutable &#39;List&#39;
  446. in block <unit> at <unknown file> line 1</pre>
  447. <p>Assignement d&#39;une liste à un Positional</p>
  448. <pre>> my @a = 1, 2, 3 ; @a[0] = 42; @a
  449. [42 2 3]</pre>
  450. <h1 id="Immutabilité_:_listes,_tableaux_(2)"><a class="u" href="#___top" title="go to top of document">Immutabilité : listes, tableaux (2)</a></h1>
  451. <p>Mais les conteneurs d&#39;une liste sont mutables</p>
  452. <pre>> my $a = 0; my @a = ($a, 1, 2 )
  453. [0 1 2]
  454. > my $a = 0; my @a := ($a, 1, 2 )
  455. (0 1 2)
  456. > @a[0] = 42
  457. 42
  458. > @a
  459. (42 1 2)</pre>
  460. <h1 id="Identité_de_conteneur"><a class="u" href="#___top" title="go to top of document">Identité de conteneur</a></h1>
  461. <pre>VAR($a) =:= VAR($b)</pre>
  462. <h1 id="déclaration_de_type"><a class="u" href="#___top" title="go to top of document">déclaration de type</a></h1>
  463. <pre>my int $value</pre>
  464. <pre>int : commence par une minuscule -> non objet
  465. Int : majustcule -> objet
  466.  
  467. nqp
  468. > my int $a := 1 ; use nqp; say(nqp::isint($a))
  469.  
  470. 1
  471. rakudo
  472. > my int $a := 1 ; use nqp; say(nqp::isint(nqp::decont($a)))
  473. 1</pre>
  474. <h1 id="Mu,_Any,_Junction,_Cool,_Failure,"><a class="u" href="#___top" title="go to top of document">Mu, Any, Junction, Cool, Failure,</a></h1>
  475. <ul><li><p>Mu : classe racine</p>
  476. </li>
  477. <li><p>Junction : valeur quantique, parallélisme potentiel</p>
  478. </li>
  479. <li><p>Any is Mu : racine de non Junction</p>
  480. </li>
  481. <li><p>Cool is Any :</p>
  482. </li>
  483. </ul>
  484. <h1 id="Junction"><a class="u" href="#___top" title="go to top of document">Junction</a></h1>
  485. <pre>> 1|2|3 == 3
  486. False
  487. False
  488. True
  489. > ?(1|2|3 == 3)
  490. True
  491. > say ((1|2|3) == 3).WHAT
  492. (Junction)</pre>
  493. <p>> </p>
  494. <h1 id=".perl,_.gist,_.Str"><a class="u" href="#___top" title="go to top of document">.perl, .gist, .Str</a></h1>
  495. <ul><li><p>.Str convertit une valeur en chaîne</p>
  496. </li>
  497. <li><p>.gist même chose à usage humain</p>
  498. </li>
  499. <li><p>.perl code pour recréer la valeur</p>
  500. </li>
  501. </ul>
  502. <pre>> class A {}; my $a = A.new;
  503. A.new
  504. > use MONKEY-SEE-NO-EVAL; EVAL( $a.perl ) eqv $a</pre>
  505. <pre>True</pre>
  506. <h1 id=".perl,_.gist,_.Str_sur_classes_et_instances"><a class="u" href="#___top" title="go to top of document">.perl, .gist, .Str sur classes et instances</a></h1>
  507. <pre>> class A { has $.a }; my $a = A.new
  508. A.new(a => Any)
  509. > A.Str
  510. Use of uninitialized value of type A in string context
  511. Any of .^name, .perl, .gist, or .say can stringify undefined things, if needed.
  512. > $a.Str
  513. A<86630344>
  514. > A.gist, $a.gist
  515. ((A) A.new(a => Any))
  516. > A.perl, $a.perl
  517. (A A.new(a => Any))</pre>
  518. <h1 id=".perl,_.gist,_.Str_sur_un_match"><a class="u" href="#___top" title="go to top of document">.perl, .gist, .Str sur un match</a></h1>
  519. <pre>> &#39;ab&#39; ~~ /(a) $<b>=b /
  520. 「ab」
  521. 0 => 「a」
  522. b => 「b」
  523. > $/.Str
  524. ab
  525. > $/.gist
  526. 「ab」
  527. 0 => 「a」
  528. b => 「b」
  529. > $/.perl # ci-dessous, j&#39;ai raccourci la sortie
  530. Match.new(ast => Any, list => (Match.new(ast => Any, list => (), hash => Map.new(())...))</pre>
  531. <h1 id="Métamodèle"><a class="u" href="#___top" title="go to top of document">Métamodèle</a></h1>
  532. <ul><li><p>soubassement du système de classes de Perl 6</p>
  533. </li>
  534. <li><p>+ ou - autohébergé</p>
  535. </li>
  536. <li><p>macro .HOW pour accéder la métaclasse</p>
  537. </li>
  538. </ul>
  539. <pre>> Mu.HOW
  540. Perl6::Metamodel::ClassHOW.new
  541. > Mu.HOW.name(Mu)
  542. Mu
  543. > Mu.HOW.^name
  544. Mu
  545. > Mu.HOW.HOW.^name
  546. NQPClassHOW</pre>
  547. <h1 id="Métamodèle"><a class="u" href="#___top" title="go to top of document">Métamodèle</a></h1>
  548. <pre>> 42.^parents()
  549. ()
  550. > 42.^parents(:all)
  551. ((Cool) (Any) (Mu))
  552. > Mu.^methods
  553. (self sink ACCEPTS WHERE WHICH split take return-rw return WHY set_why Bool ... )
  554. > Mu.^can(&#39;Str&#39;)
  555. (Str)
  556. > Mu.^can(&#39;Foobar&#39;)
  557. ()
  558. > 1.^can(&#39;Str&#39;)
  559. (Str Str!b
  560. > 1.^can(&#39;Str&#39;)[0].WHAT
  561. (Method)
  562. > 1.^can(&#39;Str&#39;)[0].signature
  563. (Mu $: | is raw)</pre>
  564. <h1 id="Quelques_concepts_clé"><a class="u" href="#___top" title="go to top of document">Quelques concepts clé</a></h1>
  565. <ul><li><p>objet, classe, instance</p>
  566. </li>
  567. <li><p>concret, défini, vrai</p>
  568. </li>
  569. <li><p>mutable, container</p>
  570. </li>
  571. <li><p>sigil, twigil</p>
  572. </li>
  573. <li><p>role, itération</p>
  574. </li>
  575. <li><p>trait, attribut,</p>
  576. </li>
  577. <li><p>identité, égalité</p>
  578. </li>
  579. </ul>
  580.  
  581.  
  582.  
  583. </body>
  584. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement