Inhoud
Wat vooraf ging
- U hebt weet van een aantal programmeerprincipes.
- U hebt reeds kennis gemaakt met functies in de starterscursussen.
- U hebt enige kennis van XAML.
- U hebt reeds inzicht in statements, datatypes, variabelen, berekeningen en conversies.
- Ik herneem ook nog even de tabel met datatypes want we gaan deze nodig hebben.
C# | Bytes in het geheugen | Waarden | Suffix |
---|---|---|---|
Boolean | Afhankelijk van het gebruikte platform | True of False. | |
Byte | 1 byte | 0 tot 255 (unsigned) | |
Char | 2 bytes | 0 tot 65535 (unsigned) | |
Int16 (short) | 2 bytes | -32.768 tot 32.767 | |
Int32 (int) | 4 bytes | -2.147.483.648 tot 2.147.483.647 | |
Int64 (long) | 8 bytes | -9.223.372.036,854.775,808 tot 9.223.372.036.854.775.807 | L of l |
Single (float) | 4 bytes | -3,4028235E+38 tot -1,401298E-45 voor negatieve waarden 1,401298E-45 tot 3,4028235E+38 voor positieve waarden | F of f |
Double | 8 bytes | -1,79769313486231570E+308 tot -4,94065645841246544E-324 voor negatieve waarden 4,94065645841246544E-324 tot 1,79769313486231570E+308 voor positieve waarden | D of d |
Decimal | 16 bytes | 0 tot +/-79.228.162.514.264.337.593.543.950.335 zonder decimaal teken. 0 tot +/-7,9228162514264337593543950335 met 28 cijfers na het decimaal teken. | M of m |
String | Afhankelijk van het gebruikte platform | 0 tot ongeveer 2 miljard tekens. | |
Object | 4 bytes | Kan elke willekeurige waarde bevatten | |
UInt16 (ushort) | 2 bytes | 0 tot 65.535 | |
UInt32 (uint) | 4 bytes | 0 tot 4.294.967.295 | U of u |
UInt64 (ulong) | 8 bytes | 0 tot 18.446.744.073.709.551.615 | UL of ul |
Voor we eigen functies gaan programmeren gaan we eerst kennismaking met een aantal belangrijke functies die reeds beschikbaar zijn in .NET.
Wiskundige functies
Wiskundige functies zijn verzameld in de Math class.
Onderstaande tabel geeft een overzicht van de belangrijkste methoden/functies uit de Math class.
Methode/Functie | Resultaat | Uitleg |
---|---|---|
Math.E | 2,71828182845905 | Het getal e, een belangrijke wiskundige constante, is het grondtal van de natuurlijke logaritme |
Math.PI | 3,14159265358979 | Het getal Pi |
Math.Abs(-5) | 5 | De absolute waarde |
Math.Min(5, 6) | 5 | Het kleinste van de 2 getallen |
Math.Max(5, 6) | 6 | Het grootste van de 2 getallen |
Math.Round(10.5) | 10 | Afronden (voor .5 naar het dichtstbijzijnde even getal) |
Math.Round(10.5, MidpointRounding.AwayFromZero) | 11 | Afronden (voor .5 weg van nul (zoals wij het gewoon zijn)) |
Math.Round(10.5, MidpointRounding.ToEven) | 10 | Afronden (voor .5 naar het dichtstbijzijnde even getal) |
Math.Round(-10.5) | -10 | Afronden (voor .5 standaard naar het dichtstbijzijnde even getal) |
Math.Round(-10.5, MidpointRounding.AwayFromZero) | -11 | Afronden (voor .5 weg van nul) |
Math.Round(12.3456, 2) | 12,35 | Afronden op 2 cijfers na de komma |
Math.Ceiling(10.4) | 11 | Het kleinste geheel getal dat groter of gelijk is aan het argument |
Math.Ceiling(-10.6) | -10 | Het kleinste geheel getal dat groter of gelijk is aan het argument |
Math.Floor(10.4) | 10 | Het grootste geheel getal dat kleiner of gelijk is aan het argument |
Math.Floor(-10.6) | -11 | Het grootste geheel getal dat kleiner of gelijk is aan het argument |
Math.Pow(2, 3) | 8 | Machtsverheffing, hier 2 tot de 3de macht |
Math.Log(8, 2) | 3 | Logaritme |
Math.Log10(100) | 2 | 10-delig logaritme |
Math.Sign(45) | 1 | Het teken van het getal (1 voor positief, -1 voor negatief) |
Math.Sign(-45) | -1 | Het teken van het getal (1 voor positief, -1 voor negatief) |
Math.Sqrt(16) | 4 | De vierkantswortel van een getal |
Math.Sqrt(-16) | NaN (Niet-een-getal) |
En dan heb je nog een reeks functies cosinus, sinus, tangens, cosinushyperbolicus,… Kortom, voor elk wat wils.
Probeer het eens uit in onderstaande console.
Datum- en tijdfuncties
.NET komt gebruikt de DateTime structuur om te werken met datum en tijd.
Om een datum in te stellen moet u een variabele maken van het type DateTime en deze een nieuwe datum en/of tijd toekennen. Onderstaande code stelt een variabele in op 1 september 2017. Zoals u ziet geeft u eerst het jaar, dan de maand en tenslotte de dag mee als parameters.
DateTime Datum = new DateTime(2017, 9, 1); //1 september 2017
Onderstaande tabel geeft een paar voorbeelden van de belangrijkste methoden/functies. De voorbeelden zijn gebaseerd op de datum 1/09/2017.
Methode/Functie | Resultaat | Uitleg |
---|---|---|
DateTime.Now | Huidige datum en tijd | |
Datum.AddDays(5) Datum.Add(TimeSpan.FromDays(5)) | 6/09/2017 | Voeg een aantal dagen (hier 5) toe |
Datum.AddHours(5) Datum.Add(TimeSpan.FromHours(5)) | 1/09/2017 5:00:00 | Voeg een aantal uur (hier 5) toe |
Datum.AddMinutes(15) Datum.Add(TimeSpan.FromMinutes(15)) | 1/09/2017 0:15:00 | Voeg een aantal minuten (hier 15) toe |
Datum.AddSeconds(50) Datum.Add(TimeSpan.FromSeconds(50)) | 1/09/2017 0:00:50 | Voeg een aantal seconden (hier 50) toe |
Datum.AddMonths(1) | 1/10/2017 | Voeg een aantal maanden (hier 1) toe |
Datum.AddYears(1) | 1/09/2018 | Voeg een aantal jaren (hier 1) toe |
DateTime.Compare(Datum, "01/09/2017") | 0 | Vergelijkt twee datums en geeft als uitkomst 0 indien de beide datums gelijk zijn |
DateTime.Compare(Datum, "02/09/2017") | -1 | Vergelijkt twee datums en geeft als uitkomst -1 indien de eerste datum vroeger valt |
DateTime.Compare(Datum, "31/08/2017") | 1 | Vergelijkt twee datums en geeft als uitkomst 1 indien de eerste datum later valt |
Datum.Day | 1 | De dag van de datum |
Datum.DayOfWeek | 5 | De dag van de week (hier vrijdag of de 5de dag van de week) |
Datum.DayOfYear | 244 | De dag van het jaar |
Datum.Year | 2017 | Het jaartal |
Datum.Month | 9 | De maand van het jaar |
Datum.Hour | Uur | |
Datum.Minute | Minuten | |
Datum.Second | Seconden |
Test het uit in onderstaande console.
Merk op hoe de datum wordt weergegeven.
Datum.ToString("dd/MM/yyyy hh:mm");
Wijzig de datum eens onderstaande code en bekijk wat dit geeft.
Datum.ToString("dd dddd MMMM yyyy");
Kunt u zelf achterhalen wat de notaties betekenen? Nee, neem dan eens een kijkje in de officiële documentatie over datum- en tijdnotaties.
De gewenste culturele info
Wellicht wordt bovenstaande datum in het Engels weergegeven, maar hoe krijgt u die in het Nederlands?
Wat we nodig hebben is een variabele bv. nlBEFormaat van het type CultureInfo dat we dan de gewenste cultuur toekennen. De code voor België wordt dan:
CultureInfo nlBEFormaat = new CultureInfo("nl-BE");
De huidige cultuur opvragen doet u via (maar verschiet niet moest die toch opnieuw Engels geven):
CultureInfo nlBEFormaat = CultureInfo.CurrentCulture;
Vergeet niet dat CultureInfo tot de namespace Globalization behoort en dat u deze eerst moet toevoegen voor gebruik.
using System.Globalization;
Tenslotte voegen we de cultuur, via de variabele, toe aan de uitvoer als 2de parameter.
Datum.ToString("dd dddd MMMM yyyy", nlBEFormaat)
In Xamarin
- Start een nieuw Xamarin-project op en geef het een passende naam (ik kies voor de inspirerende naam App2).
- Eens het programma opgestart is gaat u naar het bestand MainPage.xaml.
- Merk het Label op. We gaan dit label gebruiken als uitvoer. Het label moet dus aanspreekbaar zijn vanuit de achterliggende programmeercode en dient dus een naam te krijgen. Volgende code kent de naam lblUitvoer toe aan het label.
x:Name="lblUitvoer"
- Merk de x: voor de Name op! Die staat er omdat het attribuut Name uit de namespace “xmlns:x=”http://schemas.microsoft.com/winfx/2009/xaml” komt die een x als prefix heeft.
- De aangepaste XAML ziet er als volgt uit.
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:App2" x:Class="App2.MainPage"> <Label x:Name="lblUitvoer" Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" /> </ContentPage>
- Vervolgens klikt u op MainPage.xaml.cs, dit is de code-behind.
- De volledige programmeercode in MainPage.xaml.cs wordt dan ongeveer:
using System; using Xamarin.Forms; using System.Globalization; namespace App2 { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); CultureInfo nlBEFormaat = new CultureInfo("nl-BE"); //CultureInfo nlBEFormaat = CultureInfo.CurrentCulture; DateTime Datum = new DateTime(2017, 9, 1); string Resultaat = ""; int iDatum = Datum.Year; Datum = Datum.AddDays(5); Resultaat += iDatum + Environment.NewLine; Resultaat += Datum.ToString("dd dddd MMMM yyyy", nlBEFormaat); lblUitvoer.Text = Resultaat; } } }
Stringfuncties
Maak een variabele aan van het type String en geef deze een startwaarde.
string Naam = "Geert Linthoudt";
We gebruiken nu deze variabele om een aantal, want ook hier zijn er veel te veel om ze allemaal te behandelen, interessante functies te bespreken. Wilt u een volledig overzicht? Ga dan ook hier naar de officiële documentatie.
Methode/Functie | Resultaat | Uitleg |
---|---|---|
Naam.Length | 15 | De lengte (aantal tekens) van de string "Geert Linthoudt" |
Naam.ToLower() | geert linthoudt | Hoofdletters worden omgezet in kleine letters |
Naam.ToUpper() | GEERT LINTHOUDT | Kleine letters worden omgezet in hoofdletters |
Naam.Trim("t") | Geert Linthoud | Het teken dat als argument wordt meegegeven wordt vooraan en achteraan weggenomen. Dit is vooral handig om spaties weg te nemen. In dit geval wordt de “t” achteraan weggenomen. |
Naam.PadLeft(20, '-') | -----Geert Linthoudt | De tekst wordt links aangevuld met een teken (hier het karakter -) tot de totale lengte 20 is. |
Naam.PadRight(20, '-') | Geert Linthoudt----- | De tekst wordt links aangevuld met een teken (hier het karakter -) tot de totale lengte 20 is. |
Naam.Substring(6) | Linthoudt | Selecteer alles vanaf teken 6 (beginnen tellen bij 0) |
Naam.Substring(6, 4) | Lint | Selecteer 4 tekens vanaf het 6de teken |
Naam.IndexOf("t") | 4 | De positie van de tekens (hier enkel “t”) geteld vanaf de eerste positie (startend bij 0) |
Naam.LastIndexOf("t") | 14 | De laatste positie van de tekenreeks (hier “t”) |
Naam.LastIndexOfAny("pr") | 3 | De laatste positie van 1 van de tekens uit de tekenreeks (hier “pr”) |
Naam.Remove(6) | Geert | Verwijder alle tekens vanaf positie 6 (beginnen tellen bij 0) |
Naam.Remove(6, 4) | Geert houdt | Verwijder vanaf positie 6 4 tekens |
Naam.Replace("e", "a") | Gaart Linthoudt | Vervang het oude teken “e” door het nieuwe teken “a” |
Naam.Insert(15, "je") | Geert Linthoudtje | Voeg na positie 15 de 2de string in (hier “je”) |
Naam.Contains("hout") | False | Bevat de naam de tekst “hout”? |
Naam.Contains("houd") | True | Bevat de naam de tekst “houd”? |
Naam.EndsWith("dt") | True | Eindigt de naam op “dt”? |
Naam.EndsWith("DT") | False | Eindigt de naam op “DT”? |
Naam.ToUpper.EndsWith("DT") | True | Combinaties van meerdere functies zijn mogelijk |
Naam.StartsWith("Li") | False | Start de naam met “Li”? |
Naam.Substring(6).StartsWith("Li") | True | Combinaties van meerdere functies zijn mogelijk |
string.IsNullOrEmpty(Naam) | False | Bevat de string die als parameter wordt meegegeven de null-waarde of is hij leeg? |
string.IsNullOrWhiteSpace(Naam) | False | Bevat de string die als parameter wordt meegegeven de null-waarde of een spatie? |
Test dit hier even uit.
Opmaakfuncties
Maak twee variabelen aan en geef deze een startwaarde.
decimal Getal = 9.95m;
DateTime Datum = new DateTime(2017, 9, 1); //1 september 2017
Let op de speciale manier voor de aanmaak van de decimale variabele! Omdat 9.95 gezien wordt als het type double is een conversie naar het type decimal nodig via de suffix m.
We gebruiken nu deze variabele om een aantal interessante opmaakmogelijkheden te bespreken. Voor de volledige uitleg verwijs ik weer naar de officiële documentatie.
Methode/Functie | Resultaat | Uitleg |
---|---|---|
Getal.ToString("C") Format(Getal, "C") | € 9,95 | Zet een getal om naar het valutateken van uw computersysteem |
Getal.ToString("C1") Format(Getal, "C1") | € 10,0 | Zet een getal om naar het valutateken van uw computersysteem met 1 cijfer na de komma en de nodige ronding |
Getal.ToString("F4") Format(Getal, "F4") | 9,9500 | Het getal wordt weergegeven als een kommagetal met 4 cijfers na de komma |
Getal.ToString("P") Format(Getal, "P") | 995,00% | Omzetting naar een percentage (vermenigvuldigd met 100) |
Getal.ToString("P0") Format(Getal, "P0") | 995% | Omzetting naar een percentage (vermenigvuldigd met 100) zonder cijfers na de komma) |
Datum.ToString("d") Format(Datum, "d") | 1/09/2017 | Korte datumnotatie |
Datum.ToString("D") Format(Datum, "D") | vrijdag 1 september 2017 | Lange datumnotatie |
Datum.ToString("G") Format(Datum, "G") | 1/09/2017 0:00 | Korte datum, korte tijdnotatie |
Datum.ToString("F") Format(Datum, "F") | vrijdag 1 september 2017 0:00:00 | Lange datum, lange tijdnotatie |
Datum.ToString("t") Format(Datum, "t") | 0:00 | Korte tijdnotatie |
Datum.ToString("T") Format(Datum, "T") | 0:00:00 | Lange tijdnotatie |
Datum.ToString("y") Format(Datum, "y") | september 2017 | Maand en jaartal |
Datum.ToString("ddd MM yyyy") Format(Datum, "ddd MM yyyy") | vr 09 2017 | Eigen nota met een korte dagnotatie, 2 cijfers voor de maand en 4 cijfers voor het jaartal |
Datum.ToString("dddd M yyyy") Format(Datum, "dddd M yyyy") | vrijdag 9 2017 | De dag voluit, 1 cijfer voor de maand (tenzij er 2 nodig zijn) en 4 cijfers voor het jaartal |
Datum.ToString("dd-MM-yyyy HH:mm:ss") Format(Datum, "dd-MM-yyyy HH:mm:ss") | 01-09-2017 00:00:00 | 2 cijfers voor de dag en de maand (voorafgaande 0 indien nodig), een streepje tussen de dag-maand-jaar en toevoeging van uren, minuten en seconden |
Ook dit kunt u uittesten door aan de variabele Resultaat de gewenste bewerking toe te kennen.
Behandelde Basiscompetenties uit de module ICT Programmeren – Specifieke ontwikkelomgeving: eenvoudige functionaliteiten
- IC BC236 – kan eenvoudige wijzigingen aan een programma aanbrengen
- IC BC241 – kan een programma in een specifieke ontwikkelomgeving maken
CultureInfo nlBEFormaat = new CultureInfo(“nl-BE”);
moet blijkbaar CultureInfo nlBEFormaat = new CultureInfo(name: “nl-BE”); zijn