Coding - Initiation au code pour les vrais débutants
--- Apprenez les bases de l'algorithmie. Mettez-les en pratique pour créer votre première application de bureau, puis des applications mobiles natives pour Windows Phone ---
À destination de vrais débutants qui n’ont jamais tapé une ligne de code, ces cours vous permettront de comprendre les bases d’algorithmie et découvrir en pratique ce qu’est le code avec des exemples simples et amusants.
Le but n’est pas de faire de vous des développeurs mais de vous donner un niveau qui vous permette de suivre des formations pour développeurs débutants.
Les concepts enseignés sont valables pour tous les langages mais en pratique nous utiliserons le langage C# avec l’environnement de développement Visual Studio 2013.
Cet atelier a été conçu dans le cadre d'une initiative menée conjointement par Girls in Tech Paris et Microsoft France.
Le programme et les explications ici : http://gitparis.com/2013/12/02/cours-de-coding-les-inscriptions-sont-ouvertes-voila-le-programme/
Les slides correspondent aux 3 premiers ateliers (7 cours de 3 heures).
24. using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SayMyName
{
// Une classe : on verra plus tard ce que c'est
class Program
{
// Une méthode (une fonctionnalité)
static void Main(string[] args)
{
ENTREZ VOTRE CODE ICI
}
}
}
25.
26. Ex:
- Afficher du texte à l’écran suivi d’un retour chariot :
« Writeline »
- Lire un texte tapé au clavier « ReadLine »
Ex : classe « Console » pour toutes les fonctionnalités de la
fenêtre d’exécution de l’application console:
Console.WriteLine, Console.ReadLine
28. // Lit une chaine de caractères terminée par
retour chariot (return)
string name = Console.ReadLine();
// A vous ! Affichez “Nice to meet you xxx”
Console.WriteLine("Nice to meet you ");
Console.WriteLine(name);
// ou
Console.WriteLine("Nice to meet you " + name);
// ou
// …
29. // On veut afficher l'âge de la personne en le déduisant à partir
de son année de naissance
Console.WriteLine("When were you born ?");
// A vous : Récupérez l’année de naissance saisie dans une
variable
string year = Console.ReadLine();
// On va faire une soustraction : 2013 – year
// pour cela, on a besoin d'avoir une valeur entière et non une
chaine de caractères (texte)
int yearNum = int.Parse(year);
// Essayez de saisir une valeur non numérique…quel est le
résultat ? On verra tout { l’heure comment résoudre ce problème
//int age = 2013 - yearNum;
// Mieux :
int age = DateTime.Now.Year - yearNum;
// A vous : Affichez l’age de la personne
Console.WriteLine("You are " + age.ToString());
30. // Afficher un message différent selon que l'on soit jeune
ou vieux
// (à vous de décider l'âge à partir duquel on est vieux !)
if(age < 40)
{
// A vous : petit message pour les jeunes
mentionnant le nom de la personne
Console.WriteLine("You are young, lucky " + name);
}
else
{
// A vous : petit message pour les
vieux, mentionnant le nom de la personne
Console.WriteLine("You are experienced, " + name);
}
31.
32. using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Who are you ?");
string name = Console.ReadLine();
Console.WriteLine("Nice to meet you " + name);
Console.WriteLine("Entrez votre année de naissance:");
string annee = Console.ReadLine();
int anneeInt = int.Parse(annee);
int age = DateTime.Now.Year - anneeInt;
Console.WriteLine("You are " + age);
if (age < 40)
{
// A vous : petit message pour les plus jeunes mentionnant le nom de la personne
Console.WriteLine("You are young, lucky " + name);
}
else
{
// A vous : petit message pour les plus agés, mentionnant le nom de la personne
Console.WriteLine("You are experienced, " + name);
}
Console.ReadKey();
}
}
}
33. // Créons un petit jeu. Le principe :
// L’app choisit au hasard un nombre entre 1 et 20 et vous le fait deviner
// A vous : développer c’est aussi savoir trouver l’information. Trouvez
le nom de la classe qui permet de manipuler des nombres aléatoires
// Question Bonus : quelle est la méthode permettant d’en générer un ?
int randomed = new Random().Next(20) + 1;
// A VOUS : Demander { l’utilisateur de saisir un nombre et stockez-le
dans une variable
Console.WriteLine("Pick a number :");
string picked = Console.ReadLine();
// Vérifier la validité de la saisie avec TryParse
int pickedNum;
int.TryParse(picked, out pickedNum);
// Quelle est la signature de TryParse ?
// Le code retour nous permet de savoir si va conversion a réussi ou non
(type booléeen peut prendre 2 valeurs : true/false)
bool isNumeric = int.TryParse(picked, out pickedNum);
34. // Puis on encadre ça avec une boucle pour réitérer la saisie
jusqu'à ce qu'elle soit valide
bool isNumeric = int.TryParse(picked, out pickedNum);
while(isNumeric == false)
{
// A VOUS : Trouvez le code à écrire ici
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
isNumeric = int.TryParse(picked, out pickedNum);
}
// A votre avis, pourquoi n’a-t-on pas besoin de notre variable isNumeric ici ?
while(int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
35. // A vous : Tant qu’on n’a pas trouvé on recommence
// Trouvez la condition qui permet de refaire un essai de devinette
while(pickedNum != randomed)
{
// A Vous : On aide l’utilisateur : on lui indique si c’est plus ou moins
if(pickedNum > randomed)
{
Console.WriteLine("It's less");
}
else
{
Console.WriteLine("It's more");
}
// A VOUS : Qu’y a-t-il de remarquable dans le paragraphe suivant ?
// Replace it by a function
picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
}
// On sort de la bouclez quand les 2 nombres sont identiques, donc on a gagné !
Console.WriteLine("Yes ! You found my number :" + randomed);
36. static void Main(string[] args)
{
int pickedNum;
int randomed = new Random().Next(20) + 1;
Console.WriteLine("Pick a number :");
string picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
while (pickedNum != randomed)
{
if (pickedNum > randomed)
{
Console.WriteLine("It's less");
}
else
{
Console.WriteLine("It's more");
}
Console.WriteLine("Pick a number :");
picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
}
Console.WriteLine("Yes ! You found my number :" + randomed);
Console.ReadKey();
}
37. /// <summary>
/// Cette fonction renvoie un nombre saisi par l'utilisateur
/// </summary>
/// <returns></returns>
static int PickANumber()
{
string picked;
int pickedNum;
picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
return pickedNum;
}
38. pickedNum = PickANumber();
// Tant qu’on n’a pas trouvé on recommence
while(pickedNum != randomed)
{
// On aide l’utilisateur : on lui indique si c’est plus ou moins
if(pickedNum > randomed)
{
Console.WriteLine("It's less");
}
else
{
Console.WriteLine("It's more");
}
pickedNum = PickANumber();
// Replace it by a function
//picked = Console.ReadLine();
//while (int.TryParse(picked, out pickedNum) == false)
//{
// Console.WriteLine("Hey that's not a number, try again :");
// picked = Console.ReadLine();
//}
}
Console.WriteLine("Yes ! You found my number :" + randomed);
39. static void Main(string[] args)
{
int pickedNum;
int randomed = new Random().Next(20) + 1;
pickedNum = PickANumber();
while (pickedNum != randomed)
{
if (pickedNum > randomed)
{
Console.WriteLine("It's less");
}
else
{
Console.WriteLine("It's more");
}
pickedNum = PickANumber();
}
Console.WriteLine("Yes ! You found my number :" + randomed);
Console.ReadKey();
}
static int PickANumber()
{
string picked;
int pickedNum;
Console.WriteLine("Pick a number :");
picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
return pickedNum;
}
40.
41. // On crée des méthodes pour plusieurs raisons :
// - réutilisation
// - clarification (groupement fonctionnel et lisibilité du code)
// Normalement, quand on lit du code, on doit pouvoir comprendre ce qu'il fait
// -> importance du nommage
// -> architecture et découpage
static void Main(string[] args)
{
NouvellePartie();
Console.ReadKey();
}
static void NouvellePartie()
{
int pickedNum;
int randomed = new Random().Next(20) + 1;
pickedNum = PickANumber();
while (pickedNum != randomed)
{
// Essaie encore
pickedNum = TryAgain(pickedNum, randomed);
}
// C'est Gagné
YouWin(randomed);
}
42. static void NouvellePartie()
{
int pickedNum;
int randomed = new Random().Next(20) + 1;
pickedNum = PickANumber();
while (pickedNum != randomed)
{
// Essaie encore
pickedNum = TryAgain(pickedNum, randomed);
}
// C'est Gagné
YouWin(randomed);
}
43.
44. class Program
{
public static int Randomed { get; set; }
public static int PickedNum { get; set; }
static void Main(string[] args)
{
NouvellePartie();
Console.ReadKey();
}
static void NouvellePartie()
{
Randomed = new Random().Next(20) + 1;
PickANumber();
while (PickedNum != Randomed)
{
// Essaie encore
TryAgain();
}
// C'est Gagné
YouWin();
}
static void YouWin()
{
Console.WriteLine("Yes ! You found my number :" + Randomed);
}
static void TryAgain()
{
if (PickedNum > Randomed)
{
Console.WriteLine("It's less");
}
else
{
Console.WriteLine("It's more");
}
PickANumber();
}
static void PickANumber()
{
string picked;
int pickedNum;
Console.WriteLine("Pick a number :");
picked = Console.ReadLine();
while (int.TryParse(picked, out pickedNum) == false)
{
Console.WriteLine("Hey that's not a number, try again :");
picked = Console.ReadLine();
}
PickedNum = pickedNum;
}
}
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59. /// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
int Randomed;
int PickedNum;
int NbEssais;
public MainWindow()
{
InitializeComponent();
}
}
60. public partial class MainWindow : Window
{
int Randomed;
int PickedNum;
int NbEssais;
public MainWindow()
{
InitializeComponent();
}
void NouvellePartie()
{
}
void PickANumber()
{
}
private void YouWin()
{
}
private void TryAgain()
{
}
private void btNouvellePartie_Click(object sender, RoutedEventArgs e)
{
}
private void btValider_Click(object sender, RoutedEventArgs e)
{
}
}
78. <!--TitlePanel contains the name of the application and page title--
>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="GIT Coding" …/>
<TextBlock Text="A toi de jouer !" …/>
</StackPanel>
108. public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
// Sample code to localize the ApplicationBar
//BuildLocalizedApplicationBar();
}
private void Canvas_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
}
private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
}
private void Canvas_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
}
…
109. public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
// Sample code to localize the ApplicationBar
//BuildLocalizedApplicationBar();
}
private void Canvas_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
// On commence à dessiner
}
private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
// On dessine un trait entre notre précédente position et la nouvelle
}
private void Canvas_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
// On arrête de dessiner
}
…
111. void Dessine(Point oldPoint, Point newPoint)
{
Line line = new Line();
line.Stroke = new SolidColorBrush(Colors.Black);
line.X1 = newPoint.X;
line.Y1 = newPoint.Y;
line.X2 = oldPoint.X;
line.Y2 = oldPoint.Y;
paint.Children.Add(line);
}
A chaque changement de position, on tire un trait entre la position précédente et
l’actuelle.
On utilise une couleur noire pour l’instant
Les traits sont ajoutés dans le Canvas (tout comme on a mis des contrôles
TextBox, TextBlock, … dans une Grid dans d’autres exemples)
-> Reste à récupérer la position de la souris a fil des déplacements