Menu

Vis indlæg

Her kan du se alle indlæg fra den valgte bruger. Bemærk, at du kun kan se indlæg i de kategorier, du i øjeblikket har adgang til.

Vis indlæg Menu

Indlæg - Efgiz

#1
Introduktion til Python
Python er et fantastisk programmeringssprog, der er let at lære og anvende, hvilket gør det til et populært valg blandt både begyndere og erfarne programmører. En af de grundlæggende aspekter ved Python er, hvordan det håndterer datatyper, især heltal (integers) og flydende tal (floats). I denne artikel vil vi udforske, hvad disse datatyper er, hvordan de fungerer i Python, samt hvordan de kan anvendes i forskellige kontekster.

Hvad er Heltal?
Heltal er, som navnet antyder, tal uden decimaler. De kan være positive eller negative og omfatter 0. Heltal er en af de mest grundlæggende datatyper, og de spiller en vigtig rolle i programmering.

Definition og anvendelse
Heltal bruges til at repræsentere hele enheder. Du kunne for eksempel bruge dem til at tælle antallet af varer i en butik, bestemme antal personer eller endda til loop-kontroller i loops.

Heltalstyper i Python
I Python er heltal repræsenteret ved datatype
int. Python understøtter endda arbitrært store heltal, hvilket betyder, at du ikke nødvendigvis vil løbe ind i et overflow, som du kunne i andre programmeringssprog. Du kan nemt oprette heltal med følgende syntaks:
1x = 10  # Et heltal
2y = -3  # Et negativt heltal
3

Hvad er Flydende Tal?
Flydende tal, også kendt som
floats, er tal, der kan indeholde decimaler. De bruges til at repræsentere præcise målinger eller værdier, hvor hele tal ikke er tilstrækkelige.

Definition og anvendelse
Flydende tal anvendes ofte i matematiske beregninger, hvor præcision er nødvendigt. For eksempel, når du arbejder med finansielle data eller videnskabelige målinger, er flydende tal væsentlige for at sikre korrekthed.

Flydende Tals repræsentation i Python
I Python er flydende tal repræsenteret ved datatype
float. Du kan oprette flydende tal ved at inkludere decimaler i din tildeling:
1a = 10.5  # Et flydende tal
2b = -3.14  # Et negativt flydende tal
3

Flydende tal kan også repræsenteres i videnskabelig notation, f.eks.
1.6e3, som betyder 1.6×1031.6×103 eller 1600.

Typer af Tabel Data
Når vi sammenligner heltal og flydende tal, er det vigtigt at bemærke deres forskelle og anvendelser.
Heltal vs. Flydende Tal

Forskelle mellem Heltal og Flydende Tal

Heltal er altid uden decimaler, mens flydende tal kan indeholde decimaler.
Heltal er perfekt til tælling, mens flydende tal er nødvendige for præcise beregninger.
Python håndterer heltal uden begrænsninger på størrelse, mens flydende tal har en grænse for præcision, afhængig af datamaskinens arkitektur.

Matematiske Operationer
Både heltal og flydende tal anvendes ofte i matematiske operationer.

Aritmetiske operationer med Heltal
Du kan udføre de grundlæggende aritmetiske operationer med heltal i Python:
1x = 10
2y = 3
3
4sum = x + y       # Addition
5difference = x - y  # Subtraktion
6product = x * y   # Multiplikation
7quotient = x // y  # Heltalsdivision
8

Aritmetiske operationer med Flydende Tal
Flydende tal kan også bruges til matematiske operationer, men vær opmærksom på, at division resulterer i flydende værdier:
1a = 10.0
2b = 3.0
3
4sum = a + b         # Addition
5difference = a - b  # Subtraktion
6product = a * b     # Multiplikation
7quotient = a / b    # Division
8

Typekonvertering
Det er ikke ualmindeligt at skulle konvertere mellem heltal og flydende tal i Python.

Fra Heltal til Flydende Tal
Du kan konvertere et heltal til et flydende tal ved hjælp af
float() funktionen:
1x = 5
2y = float(x)  # y er nu 5.0
3

Fra Flydende Tal til Heltal
På samme måde kan du konvertere et flydende tal til et heltal ved hjælp af
int() funktionen:
1a = 5.7
2b = int(a)  # b er nu 5
3

Vær opmærksom på, at konvertering fra flydende tal til heltal vil fjerne decimaldelen, så vær forsigtig med dine data.

Fejlhåndtering og Edge Cases
Når du arbejder med tal, er det vigtigt at overveje potentielle fejlsituationer.

Problemer med Flydende Tal
Når vi arbejder med flydende tal, kan vi opleve unøjagtigheder på grund af, hvordan disse tal gemmes i hukommelsen. For eksempel kan 0.1 + 0.2 ikke nødvendigvis give 0.3 med det samme:
1result = 0.1 + 0.2
2print(result)  # Uventet output: 0.30000000000000004
3

Håndtering af uventede inddata
Når din kode modtager brugerinput, er det vigtigt at validere dette input for at sikre, at det er i det rigtige format. Du kan bruge
try og
except til at håndtere potentielle fejl:
1try:
2    user_input = float(input("Indtast et flydende tal: "))
3except ValueError:
4    print("Det er ikke et gyldigt tal!")
5

Konklusion
Heltal og flydende tal er fundamentale datatyper i Python, som begge har deres egne unikke anvendelser og betingelser. At forstå forskellene mellem dem og hvordan man arbejder med dem, kan hjælpe dig med at skrive mere effektiv og præcise programmer. Fra grundlæggende matematiske operationer til fejlhåndtering, Python tilbyder kraftfulde værktøjer til at håndtere disse datatyper.

Ofte Stillede Spørgsmål
  • Hvad er forskellen mellem enkelt flydende tal og dobbelt flydende tal?
    Dobbelt flydende tal har dobbelt så stor præcision som enkelt flydende tal, hvilket gør dem mere præcise, men også mere hukommelseskrævende.
  • Hvordan kan jeg genkende fejlen ved at konvertere typer?
    Hvis du forsøger at konvertere en ikke-numerisk værdi til et tal, vil Python kaste en

    ValueError.
  • Er der nogen grænser for heltal i Python?
    Nej, Python's heltal kan være så store som din computers hukommelse tillader, uden risiko for overflow.
  • Hvorfor kan jeg ikke stole på flydende tal for monetære beregninger?
    Flydende tal kan føre til unøjagtigheder ved håndtering af decimaler, så det anbefales at bruge biblioteker som

    decimal til monetære beregninger.
  • Hvad er en god praksis ved håndtering af tal i Python?
    Det er vigtigt at validere og rense inddata samt håndtere potentielle undtagelser for at forudse og rette fejl i din kode.
#2
Flutter / Flutter: Null Sikkerhed
Jul 30, 2024, 02:21 PM
Introduktion til Flutter
Flutter er et fantastisk UI-softwareudviklingskit, der gør det muligt for udviklere at bygge smukke, kompilering-sene applikationer til mobile, web og desktop fra en enkelt kodebase. Men der er et aspekt, der ofte overses, når vi snakker om Flutter, nemlig null sikkerhed. I denne artikel dykker vi ned i, hvad null sikkerhed er, hvordan det fungerer, og hvorfor det er så vigtigt i Flutter og Dart.

Hvad er Null Sikkerhed?
Null sikkerhed handler om at forhindre null-reference fejl, som er en af de mest almindelige fejl i softwareudvikling. Disse fejl opstår, når du forsøger at tilgå en egenskab på et objekt, der faktisk ikke eksisterer (dvs. er null). Dette kan føre til crashes eller uventet adfærd i dine applikationer.

Betydningen af Null Sikkerhed
Null sikkerhed er vigtigt, fordi det fremmer robustheden i din kode. Det giver udviklere mulighed for at håndtere situationer, hvor data muligvis ikke er tilgængelige, på en struktureret måde. Ved at have en nul-sikkerhedsstrategi kan du reducere mængden af potentielle fejl og skabe en mere pålidelig brugeroplevelse.

Hvordan fungerer Null Sikkerhed?
Null sikkerhed fungerer ved at indføre stricte regler for, hvordan objekter kan initialiseres og bruges. I Dart, som er det programmeringssprog, der bruges til at udvikle Flutter-applikationer, kan du angive, om et variabel skal tillade null-værdier eller ej.

Null Sikkerhed i Dart
Dart introducerede null sikkerhed i version 2.12. Med denne funktion kan du specificere, om en variabel kan være null eller ej, hvilket hjælper med at forhindre null-reference problemer.

Darts typsystem
Darts typsystem er statisk og stærkt, hvilket betyder, at typer kontrolleres på kompileringstidspunktet. Dette er en vigtig egenskab, der gør det muligt at kende datatype prior til programmering.

Implicit og eksplicit null
I Dart kan du angive, om en variabel kan indeholde en null-værdi gennem hendes type:

Ikke-nullable typer: Hvis en variabel angives uden en null-værdi, vil kompilatoren give en fejl, hvis du forsøger at tildele null.

1String name = "John"; // Kan ikke være null


Nullable typer: For at tillade null-værdier skal du bruge '?'.

1String? name = null; // Kan være nullNull sikkerhed i Flutter-applikationer
Når du udvikler i Flutter, giver null sikkerhed dig mulighed for at skrive mere pålidelig og vedligeholdelig kode. Du kan undgå mange almindelige fejl og sikre, at din applikation ikke crasher, fordi den prøver at få adgang til null-værdier.

Fordele ved Null Sikkerhed
Der er flere fordele ved at implementere null sikkerhed i dine Flutter-projekter.

Forbedret stabilitet
Med null sikkerhed vil du opleve færre nedbrud, da de fleste null-reference fejl forhindres i kompileringstiden. Dette betyder en mere stabil applikation, hvilket er afgørende for en god brugeroplevelse.

Mindsket risiko for runtime-fejl
Når du specificerer, hvilke variable der må være null, eliminerer du en god del usikkerheder i din kode. Dette reducerer risikoen for runtime-fejl betydeligt, som ellers kan være svære at finde og fejlfinde.

Implementering af Null Sikkerhed
At implementere null sikkerhed kræver en bevidst indsats, men det er værd det!

Brug af nullable typer
Start med at definere dine variable korrekt. Hvis du ved, at en variabel skal kunne være null, så brug
? i dens typeangivelse.
1int? age; // Alder kan være null
2

Brug af assert
assert-udtryk kan bruges til at kontrollere, at en værdi ikke er null, før du bruger den. Dette fungerer som en sikkerhedskopiering og kan være en nyttig måde at vælge, hvordan din kode skal reagere.
1void printAge(int? age) {
2    assert(age != null, "Alder kan ikke være null");
3    print("Din alder er $age");
4}
5

Best Practices for Null Sikkerhed
For at få mest muligt ud af null sikkerhed er der et par bedste praksis, du kan følge.

Skriv klare og konsistente koder
Det er en god idé at have en standard, så alle udviklere i dit team bruger null sikkerhed på samme måde. Dette øger læsbarheden og vedligeholdeligheden af koden.

Test og validering
Sørg for at teste din kode grundigt. Selvom null sikkerhed hjælper, kan det ikke fange alle potentielle problemer. Unit tests og integrationstests er vigtige for at sikre, at din kode fungerer som forventet.

Konklusion
Null sikkerhed er en kraftfuld funktion i Dart og Flutter, der hjælper udviklere med at skrive mere pålidelig og sikker kode. Ved at indføre stricte regler for håndtering af null-værdier kan du minimere risikoen for fejl og give brugerne en bedre oplevelse. Det er et uundgåeligt værktøj for enhver Flutter-udvikler, og hvis du først implementerer det, vil du mærke forskellen i din kode!

Ofte Stillede Spørgsmål
  • Hvad er null sikkerhed i Dart?
    Null sikkerhed i Dart er en funktion, der forhindrer null-reference fejl ved at angive, hvilke variable der kan være null.
  • Hvordan kan jeg definere en nullable type i Dart?
    Du kan definere en nullable type ved at tilføje '?' efter datatypen, fx

    String? name.
  • Hvilke fordele tilbyder null sikkerhed?
    Fordele inkluderer forbedret stabilitet og reducerede runtime-fejl.
  • Hvad er en

    assert erklæring?


    assert er en måde at teste en betingelse på, som skal være sand. Hvis betingelsen er falsk, vil den kaste en fejl.
  • Skal jeg stadig teste mine valideringer med null sikkerhed?
    Ja, selv med null sikkerhed, skal du stadig teste din kode for at sikre, at alt fungerer korrekt.
#3
Asp .Net / ASP.NET Valideringskontrol
Jul 30, 2024, 02:14 PM
Introduktion til Asp[dot]net
Asp[dot]net er en populær ramme til webudvikling, der giver udviklere mulighed for at bygge dynamiske webapplikationer. En af nøgleværdierne i Asp[dot]net er evnen til at udføre data validering, hvilket hjælper med at sikre, at de data, der indtastes af brugerne, er gyldige og sikre. Denne artikel vil dykke ned i valideringskontroller i Asp[dot]net og forklare deres betydning i webapplikationer.

Hvad er Valideringskontrol?
Valideringskontrol er en teknik til at sikre, at de data, der indtastes i en webapplikation, opfylder bestemte krav eller regler. Dette er ikke kun for at sikre, at dataene er korrekte, men også for at forbedre brugeroplevelsen og øge sikkerheden i applikationen.

Formålet med Validering
Formålet med validering er at beskytte både brugeren og systemet. Når en bruger indtaster oplysninger i et formularfelt, skal systemet sikre, at disse oplysninger er gyldige og sikre at behandle. Dette hjælper med at forhindre fejl og beskytter mod potentielle sikkerhedstrusler såsom SQL-injektion eller Cross-Site Scripting (XSS).

Typer af Validering
Der findes to hovedtyper af validering: server-side og client-side. Begge metoder har deres egne fordele og ulemper, og ofte bruges de i kombination for at sikre maksimalt beskyttelsesniveau.

Asp[dot]net Valideringskontroller
Asp[dot]net leveres med en række indbyggede valideringskontroller, som vi kan bruge til at validere brugerinddata effektivt.

Server-side Validering
Server-side validering udføres på serveren, efter at formularen er sendt. Dette sikrer, at dataene er blevet valideret, inden de behandles.

Eksempler på Server-side Validering
Server-side valideringskontroller kan inkludere:

RequiredFieldValidator: Sikrer, at et felt ikke er tomt.
RangeValidator: Kontrollerer, om en værdi ligger inden for et specifikt interval.
RegularExpressionValidator: Validerer input baseret på et regulært udtryk for at sikre, at det opfylder et bestemt mønster.

Her er et eksempel:
1<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
2<asp:RegularExpressionValidator ID="revEmail" runat="server"
3    ControlToValidate="txtEmail"
4    ErrorMessage="Ugyldig email"
5    ValidationExpression="^\S+@\S+\.\S+$"></asp:RegularExpressionValidator>
6

Client-side Validering
Client-side validering udføres i browseren, før dataene sendes til serveren. Dette gør det muligt for brugeren at se fejlmeddelelser hurtigt, hvilket forbedrer brugeroplevelsen.

Eksempler på Client-side Validering
Eksempler på client-side validering inkluderer:

Brug af ClientValidationFunction til at udføre brugerdefineret validering.

Implementering af HTML5-atributter som

required, pattern, og min/max direkte i formfelterne.

1<input type="email" required />
2

Implementering af Valideringskontrol
At implementere valideringskontrol i Asp[dot]net er ret enkelt. Her finder du trinene til at bruge valideringskontroller i dine webapplikationer.

Brug af Valideringskontroller i Asp[dot]net

Opret formularen: Start med at oprette din formular med de nødvendige felter.
Tilføj valideringskontroller: Indsæt de relevante valideringskontroller til hvert felt.
Definer, hvordan valideringen skal håndteres: Beslut om du ønsker server-side, client-side eller begge dele.

Custom Valideringskontroller
I nogle tilfælde har du måske brug for at skabe dine egne valideringskontroller. Dette kan gøres ved at arve fra
BaseValidator-klassen.
Her er et eksempel på en brugerdefineret valideringskontrol:
1public class CustomValidator : BaseValidator
2{
3    protected override bool EvaluateIsValid()
4    {
5        // Implementer din valideringslogik her
6        return true; // eller false
7    }
8}
9

Fordele ved Valideringskontrol
At bruge valideringskontroller i Asp[dot]net har mange fordele.

Forbedret Brugeroplevelse
Validering reducerer fejl under indtastning, hvilket giver brugerne en glidende oplevelse. Hurtige feedback-mekanismer, som fx at vise fejlmeddelelser med det samme, hjælper brugerne til at rette deres indtastninger hurtigt.
Sikkerhedsfunktioner

Valideringskontrol bidrager også til at forbedre sikkerheden ved at sikre, at inddata er under kontrol, før de når serveren. Dette mindsker risikoen for, at skadelig kode trænger ind.

Best Practices for Valideringskontrol
Selv om valideringskontroller er meget nyttige, er der nogle bedste praksis, du skal følge for at sikre deres effektivitet.

Hold Koden Ren og Tydelig
Sørg for at din valideringslogik er let at forstå. En kompleks valideringsregel kan føre til forvirring, både for dig og for fremtidige udviklere, der skal arbejde på din kode.

Test Valideringsreglerne
Test altid dine valideringsregler for at sikre, at de fungerer som forudset. Brug unit tests og enhedstest for at fange eventuelle fejl i valideringslogikken.

Konklusion
Valideringskontrol i Asp[dot]net er en grundlæggende funktion, der ikke kun sikrer dataintegritet, men også forbedrer brugeroplevelsen. Ved at implementere effektive valideringskontroller kan udviklere skabe sikre og brugervenlige webapplikationer. Uanset om du vælger server-side, client-side eller en kombination, er det vigtigt at følge bedste praksis for at maksimere fordelene ved validering.

Ofte Stillede Spørgsmål
  • Hvad er forskellen mellem server-side og client-side validering?
    Server-side validering udføres efter data er sendt til serveren, mens client-side validering udføres i browseren før dataene sendes.
  • Hvordan tilføjer jeg en valideringskontrol i Asp[dot]net?
    Du kan tilføje en valideringskontrol ved at bruge Asp[dot]net's indbyggede kontroller som

    RequiredFieldValidator eller

    RegularExpressionValidator i din formular.
  • Kan jeg oprette brugerdefinerede valideringskontroller?
    Ja, du kan oprette brugerdefinerede valideringskontroller ved at arve fra

    BaseValidator-klassen.
  • Hvilke fordele har valideringskontrol for sikkerhed?
    Valideringskontrol hjælper med at forhindre indtastning af skadelig kode, hvilket reducerer risikoen for sikkerhedsangreb som SQL-injektion.
  • Hvorfor er testning af valideringsregler vigtigt?
    Testning af dine valideringsregler sikrer, at de fungerer korrekt og hjælper med at fange fejl tidligt, hvilket giver en bedre overordnet oplevelse for brugerne.
#4
Introduktion til TypeScript
TypeScript er et skræddersyet superset af JavaScript, der tilføjer statiske typer og forbedrer udviklerens oplevelse. Med sine funktioner som funktion overbelastning tiltrækker TypeScript mange udviklere, der ønsker at skabe mere robuste og vedligeholdelsesvenlige applikationer. Men hvad betyder det egentlig at overbelaste en funktion? Lad os dykke ned i det!

Hvad er Funktion Overbelastning?
Funktion overbelastning giver en udvikler mulighed for at have flere funktioner med samme navn, men som håndterer varierende inputparametre. Det gør det muligt at definere, hvordan en funktion skal opføre sig afhængigt af de givne argumenter. På denne måde får vi fleksibilitet i vores funktioner uden at skulle ændre på navnene hele tiden.

Betydningen af Funktion Overbelastning
Overbelastning bruges ofte for at gøre koden mere intuitiv; i stedet for at skulle huske forskellige funktionsnavne, kan udviklere blot huske én funktion og dens mulige anvendelser. Det sparer tid og gør det lettere at vedligeholde koden. Men hvordan fungerer det egentlig?

Hvordan fungerer det?
I TypeScript kan du definere flere signaturer for en funktion, og TypeScript vil så beslutte, hvilken funktion der skal kaldes baseret på den angivne parameter. Denne metode gør det muligt at give forskellige implementeringer afhængigt af input, hvilket er nyttigt ved håndtering af forskellige datatyper.

Funktion Overbelastning i TypeScript
Lad os nu se nærmere på, hvordan vi kan implementere funktion overbelastning i TypeScript.

Sådan defineres en overbelastet funktion
For at definere en overbelastet funktion skal du først angive flere underskrifter (signaturer) for funktionen, og derefter implementere den med en enkelt funktion. Her er et eksempel:
1function printValue(value: string): void;
2function printValue(value: number): void;
3function printValue(value: any): void {
4    console.log(value);
5}
6

Her har vi en
printValue-funktion, der kan tage både en string og et nummer som argument.

Eksempler på overskrevne funktioner
Lad os se på et konkret eksempel for at forstå konceptet bedre. Her er en funktion, der håndterer forskellige datatyper:
1function add(a: number, b: number): number;
2function add(a: string, b: string): string;
3function add(a: any, b: any): any {
4    return a + b;
5}
6
7console.log(add(5, 10)); // 15
8console.log(add("Hello, ", "World!")); // Hello, World!
9

I dette eksempel er
add-funktionen i stand til at tage enten to tal eller to strenge og returnere den rigtige værdi.

Typedefinitioner ved overbelastning
Når du overbelaster funktioner, er det vigtigt at have klare typedefinitioner. Dette hjælper med at undgå forvirring og gør din kode lettere at forstå:
1function concatenate(a: string, b: string): string;
2function concatenate(a: number, b: number): string;
3function concatenate(a: any, b: any): string {
4    return a.toString() + b.toString();
5}
6

Her er det klart, at
concatenate vil håndtere både vilkårlige datatyper og returnere en string.

Fordele ved Funktion Overbelastning
Der er flere fordele ved at bruge funktion overbelastning i TypeScript. Lad os tage et kig på dem.

Bedre kodeorganisering
Overbelastede funktioner giver mulighed for at organisere din kode bedre. I stedet for at definere flere funktioner til forskellige datatyper kan du have én enkelt funktion, der håndterer det hele.

Forbedret læsbarhed
Når funktionerne er overbelastede, bliver koden mere læsbar. Udviklere kan hurtigt forstå, hvilken funktion der skal bruges, uden at overveje forskellige navne.

Best Practices for Funktion Overbelastning
Selv om funktion overbelastning kan være nyttig, er der nogle bedste praksis, man bør følge for at maksimere effektiviteten.

Hold det simpelt
Undgå at overbelaste funktioner med for mange signaturer. Hold det simpelt, så det ikke bliver forvirrende at forstå, hvilken signatur man skal bruge.

Brug klare navne
Navngiv dine funktioner på en måde, der klart angiver, hvad de gør. Dette vil hjælpe andre udviklere (og dig selv) med at forstå koden bedre.

Typiske Fejl ved Funktion Overbelastning
Selv med alle de fordele, kan der opstå fejl ved brug af funktion overbelastning, som man skal være opmærksom på.

Undgå forvirring
Forvirrende signaturer kan føre til, at udviklere bruger den forkerte version af en funktion. Sørg for, at underskrifterne er klare og lette at skelne mellem.

Overbelastning uden definition
En almindelig fejl er at overbelaste funktioner uden at give nogen implementering. TypeScript kræver, at der altid er en funktion, der håndterer de angivne signaturer.

Konklusion
Funktion overbelastning i TypeScript er en kraftfuld funktion, der kan forbedre udviklerens effektivitet og kodekvalitet. Det gør det muligt at skrive mere modulær og læsbar kode, samtidig med at du bevarer fleksibiliteten til at håndtere forskellige datatyper. Hvis du anvender det korrekt, vil du opdage, hvor meget mere organiseret og forståelig din kode kan blive!

Ofte Stillede Spørgsmål
  • Hvad er funktion overbelastning?
    Funktion overbelastning er en metode til at definere flere funktioner med samme navn, der håndterer forskellige typer af input.
  • Hvordan definerer jeg en overbelastet funktion?
    Du definerer en overbelastet funktion ved at angive flere underskrifter og implementere dem med en enkelt funktion.
  • Hvilke fordele er der ved funktion overbelastning?
    Det giver bedre kodeorganisering, forbedret læsbarhed og gør det lettere at vedligeholde koden.
  • Hvad er nogle typiske fejl ved brug af overbelastning?
    Fejl inkluderer forvirrende signaturer og overbelastning uden implementation.
  • Er der nogen bedste praksis for funktion overbelastning?
    Ja, hold det simpelt, brug klare navne og sørg for, at signaturerne er lette at forstå.
#5
C# / C# Loops-Eksempler (Video Foredrag)
Dec 18, 2023, 03:25 PM
#6
#8
C# / Vi lærer C# datatyper (Video Foredrag)
Dec 18, 2023, 03:23 PM
#9
SQL / SQL: Unik brug (Video Foredrag)
Dec 18, 2023, 03:22 PM
#13
Delphi / Delphi: Enheder (Video Foredrag)
Dec 18, 2023, 03:19 PM
#14
Delphi / Delphi: Typer af (Video Foredrag)
Dec 18, 2023, 03:18 PM
#15