Mobiele apps programmeren met Xamarin – De anatomie van een C#-programma – Ingebouwde functies

print

Inhoud

Wat vooraf ging

C#Bytes in het geheugenWaardenSuffix
BooleanAfhankelijk van het gebruikte platformTrue of False.
Byte1 byte0 tot 255 (unsigned)
Char2 bytes0 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.807L 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
Double8 bytes-1,79769313486231570E+308 tot
-4,94065645841246544E-324 voor negatieve waarden
4,94065645841246544E-324 tot 1,79769313486231570E+308 voor positieve waarden
D of d
Decimal16 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
StringAfhankelijk van het gebruikte platform 0 tot ongeveer 2 miljard tekens.
Object4 bytesKan elke willekeurige waarde bevatten
UInt16 (ushort)2 bytes0 tot 65.535
UInt32 (uint)4 bytes0 tot 4.294.967.295U of u
UInt64 (ulong)8 bytes0 tot 18.446.744.073.709.551.615UL 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/FunctieResultaatUitleg
Math.E2,71828182845905Het getal e, een belangrijke wiskundige constante, is het grondtal van de natuurlijke logaritme
Math.PI3,14159265358979Het getal Pi
Math.Abs(-5)5De absolute waarde
Math.Min(5, 6)5Het kleinste van de 2 getallen
Math.Max(5, 6)6Het grootste van de 2 getallen
Math.Round(10.5)10Afronden (voor .5 naar het dichtstbijzijnde even getal)
Math.Round(10.5, MidpointRounding.AwayFromZero)11Afronden (voor .5 weg van nul (zoals wij het gewoon zijn))
Math.Round(10.5, MidpointRounding.ToEven)10Afronden (voor .5 naar het dichtstbijzijnde even getal)
Math.Round(-10.5)-10Afronden (voor .5 standaard naar het dichtstbijzijnde even getal)
Math.Round(-10.5, MidpointRounding.AwayFromZero)-11Afronden (voor .5 weg van nul)
Math.Round(12.3456, 2)12,35Afronden op 2 cijfers na de komma
Math.Ceiling(10.4)11Het kleinste geheel getal dat groter of gelijk is aan het argument
Math.Ceiling(-10.6)-10Het kleinste geheel getal dat groter of gelijk is aan het argument
Math.Floor(10.4)10Het grootste geheel getal dat kleiner of gelijk is aan het argument
Math.Floor(-10.6)-11Het grootste geheel getal dat kleiner of gelijk is aan het argument
Math.Pow(2, 3)8Machtsverheffing, hier 2 tot de 3de macht
Math.Log(8, 2)3Logaritme
Math.Log10(100)210-delig logaritme
Math.Sign(45)1Het teken van het getal (1 voor positief, -1 voor negatief)
Math.Sign(-45)-1Het teken van het getal (1 voor positief, -1 voor negatief)
Math.Sqrt(16)4De 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/FunctieResultaatUitleg
DateTime.NowHuidige datum en tijd
Datum.AddDays(5)
Datum.Add(TimeSpan.FromDays(5))
6/09/2017Voeg een aantal dagen (hier 5) toe
Datum.AddHours(5)
Datum.Add(TimeSpan.FromHours(5))
1/09/2017 5:00:00Voeg een aantal uur (hier 5) toe
Datum.AddMinutes(15)
Datum.Add(TimeSpan.FromMinutes(15))
1/09/2017 0:15:00Voeg een aantal minuten (hier 15) toe
Datum.AddSeconds(50)
Datum.Add(TimeSpan.FromSeconds(50))
1/09/2017 0:00:50Voeg een aantal seconden (hier 50) toe
Datum.AddMonths(1)1/10/2017Voeg een aantal maanden (hier 1) toe
Datum.AddYears(1)1/09/2018Voeg een aantal jaren (hier 1) toe
DateTime.Compare(Datum, "01/09/2017")0Vergelijkt twee datums en geeft als uitkomst 0 indien de beide datums gelijk zijn
DateTime.Compare(Datum, "02/09/2017")-1Vergelijkt twee datums en geeft als uitkomst -1 indien de eerste datum vroeger valt
DateTime.Compare(Datum, "31/08/2017")1Vergelijkt twee datums en geeft als uitkomst 1 indien de eerste datum later valt
Datum.Day1De dag van de datum
Datum.DayOfWeek5De dag van de week (hier vrijdag of de 5de dag van de week)
Datum.DayOfYear244De dag van het jaar
Datum.Year2017Het jaartal
Datum.Month9De maand van het jaar
Datum.HourUur
Datum.MinuteMinuten
Datum.SecondSeconden

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/FunctieResultaatUitleg
Naam.Length15De lengte (aantal tekens) van de string "Geert Linthoudt"
Naam.ToLower()geert linthoudtHoofdletters worden omgezet in kleine letters
Naam.ToUpper()GEERT LINTHOUDTKleine letters worden omgezet in hoofdletters
Naam.Trim("t")Geert LinthoudHet 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 LinthoudtDe 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)LinthoudtSelecteer alles vanaf teken 6 (beginnen tellen bij 0)
Naam.Substring(6, 4)LintSelecteer 4 tekens vanaf het 6de teken
Naam.IndexOf("t")4De positie van de tekens (hier enkel “t”) geteld vanaf de eerste positie (startend bij 0)
Naam.LastIndexOf("t")14De laatste positie van de tekenreeks (hier “t”)
Naam.LastIndexOfAny("pr")3De laatste positie van 1 van de tekens uit de tekenreeks (hier “pr”)
Naam.Remove(6)GeertVerwijder alle tekens vanaf positie 6 (beginnen tellen bij 0)
Naam.Remove(6, 4)Geert houdtVerwijder vanaf positie 6 4 tekens
Naam.Replace("e", "a")Gaart LinthoudtVervang het oude teken “e” door het nieuwe teken “a”
Naam.Insert(15, "je")Geert LinthoudtjeVoeg na positie 15 de 2de string in (hier “je”)
Naam.Contains("hout")FalseBevat de naam de tekst “hout”?
Naam.Contains("houd")TrueBevat de naam de tekst “houd”?
Naam.EndsWith("dt")TrueEindigt de naam op “dt”?
Naam.EndsWith("DT")FalseEindigt de naam op “DT”?
Naam.ToUpper.EndsWith("DT")TrueCombinaties van meerdere functies zijn mogelijk
Naam.StartsWith("Li")FalseStart de naam met “Li”?
Naam.Substring(6).StartsWith("Li")TrueCombinaties van meerdere functies zijn mogelijk
string.IsNullOrEmpty(Naam)FalseBevat de string die als parameter wordt meegegeven de null-waarde of is hij leeg?
string.IsNullOrWhiteSpace(Naam)FalseBevat 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/FunctieResultaatUitleg
Getal.ToString("C")
Format(Getal, "C")
€ 9,95Zet een getal om naar het valutateken van uw computersysteem
Getal.ToString("C1")
Format(Getal, "C1")
€ 10,0Zet 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,9500Het 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/2017Korte datumnotatie
Datum.ToString("D")
Format(Datum, "D")
vrijdag 1 september 2017Lange datumnotatie
Datum.ToString("G")
Format(Datum, "G")
1/09/2017 0:00Korte datum, korte tijdnotatie
Datum.ToString("F")
Format(Datum, "F")
vrijdag 1 september 2017 0:00:00Lange datum, lange tijdnotatie
Datum.ToString("t")
Format(Datum, "t")
0:00Korte tijdnotatie
Datum.ToString("T")
Format(Datum, "T")
0:00:00Lange tijdnotatie
Datum.ToString("y")
Format(Datum, "y")
september 2017Maand en jaartal
Datum.ToString("ddd MM yyyy")
Format(Datum, "ddd MM yyyy")
vr 09 2017Eigen 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 2017De 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:002 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

Eén reactie

  1. Willy Masfrancx

    CultureInfo nlBEFormaat = new CultureInfo(“nl-BE”);
    moet blijkbaar CultureInfo nlBEFormaat = new CultureInfo(name: “nl-BE”); zijn

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.