Ignore:
Timestamp:
08/01/08 05:26:10 (16 years ago)
Author:
nanardon
Message:
  • introduce references
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/perl/presentation.tex

    r155 r156  
    657657\end{frame} 
    658658 
     659\section{Variables bis} 
     660 
     661\subsection{Références} 
     662 
     663\begin{frame}[fragile] 
     664\frametitle{Référence: Concept} 
     665C'est une valeur scalaire\ldots 
     666 
     667\pause 
     668\vfill 
     669qui fait référence à un scalaire, un tableau ou un hash. 
     670 
     671\pause 
     672\vfill 
     673\begin{itemize} 
     674\item elle contient l'adresse mémoire de l'élément pointé 
     675\pause 
     676\item plusieurs références peuvent pointer la même variable 
     677\pause 
     678\item on peut faire des tableaux de références\ldots 
     679\end{itemize} 
     680\pause 
     681\vfill 
     682\textbf{Ce n'est pas un pointeur au sens C du terme}: \verb.$ref++;. ne donnera rien de bien !!!! 
     683\end{frame} 
     684 
     685\begin{frame}[fragile] 
     686\frametitle{Créer des références} 
     687\pause 
     688Référence de tableaux: 
     689\pause 
     690\vfill 
     691\begin{verbatim} 
     692my @tableau = (1, 2, 3); 
     693\end{verbatim} 
     694\pause 
     695Récupérer une référence vers: 
     696\begin{verbatim} 
     697my $tabref = \@tableau; 
     698\end{verbatim} 
     699\pause 
     700Créer une référence vers un nouveau tableau: 
     701\begin{verbatim} 
     702my $tabref = [ @tableau ]; 
     703\end{verbatim} 
     704\vfill 
     705\vfill 
     706\pause 
     707Référence de hash: 
     708\pause 
     709\vfill 
     710\begin{verbatim} 
     711my %hash = (a => 1); 
     712\end{verbatim} 
     713\pause 
     714Récupérer une référence vers: 
     715\begin{verbatim} 
     716my $hashref = \%hash; 
     717\end{verbatim} 
     718\pause 
     719Créer une référence vers un nouveau tableau: 
     720\begin{verbatim} 
     721my $hashref = { %hash } ; 
     722\end{verbatim} 
     723\end{frame} 
     724 
     725\begin{frame}[fragile] 
     726\frametitle{Utiliser les références} 
     727Pour accéder au contenu la variable référencée on utilise \verb+->+. 
     728\vfill 
     729Pour acceder à la variable elle même: \verb+$$+, \verb+@$+ et \verb+%$+ pour 
     730respectivement les scalaires, tableaux et les hash. 
     731 
     732\pause 
     733On créer un réference: 
     734\begin{verbatim} 
     735my $tabref = [ 1, 2, 3 ]; 
     736my $hashref = { a => 1 }; 
     737\end{verbatim} 
     738\pause 
     739On accède au tableau via la référence: 
     740\begin{verbatim} 
     741$tabref->[0]; 
     742$hashref->{a}; 
     743\end{verbatim} 
     744\pause 
     745Après tout est presque pareil: 
     746\begin{verbatim} 
     747scalar(@$tabref); 
     748keys %$hashref; 
     749\end{verbatim} 
     750 
     751\end{frame} 
     752 
     753\begin{frame}[fragile] 
     754\frametitle{Pourquoi les références ?} 
     755Perl aplati les listes, remember ? 
     756 
     757\pause 
     758\begin{verbatim} 
     759my @tab1 = (1,2); my @tab2 = (3,4); 
     760my @tab = (@tab1, @tab2); 
     761\end{verbatim} 
     762\verb+@tab+ contient 4 éléments... 
     763\pause 
     764\begin{verbatim} 
     765my @tab1 = (1,2); my @tab2 = (3,4); 
     766my @tab = (\@tab1, \@tab2); 
     767\end{verbatim} 
     768\verb+@tab+ contient 2 éléments qui réferencent des tableaux. 
     769\pause 
     770 
     771On accède aux valeurs: 
     772\begin{verbatim} 
     773$tab[0]->[0]; 
     774\end{verbatim} 
     775\pause 
     776Ou même plus simplement: 
     777\begin{verbatim} 
     778$tab[0][0]; 
     779\end{verbatim} 
     780\ldots qui revient à faire un tableau à 2 dimensions. 
     781 
     782\end{frame} 
     783 
     784\begin{frame}[fragile] 
     785\frametitle{Références: copain de la mémoire} 
     786\begin{small} 
     787\begin{verbatim} 
     788# très gros tableau 
     789my @tab = (); 
     790 
     791fonc(@tab); 
     792 
     793sub fonc { 
     794    my @tab = @_; # Créer un copie complète 
     795} 
     796\end{verbatim} 
     797\pause 
     798\begin{verbatim} 
     799# très gros tableau 
     800my @tab = (); 
     801 
     802fonc(\@tab); 
     803 
     804sub fonc { 
     805    my ($tab) = @_; # Ne copie que la référence 
     806} 
     807\end{verbatim} 
     808\end{small} 
     809\end{frame} 
     810 
     811\section{Cookbook} 
     812 
    659813\section*{Fin} 
    660814 
Note: See TracChangeset for help on using the changeset viewer.