[oop] controlestructuur

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior/Lead Python developer

Functie Samen met je team, bestaande uit een senior, 2 mediors en één junior ontwikkelaar ga je op een Agile-gebaseerde aanpak werken aan hun software. Je hebt oog voor kwaliteit, risico’s en klantbelang. Communicatie met je collega’s en waar nodig ook met klanten speelt een belangrijke rol in het bereiken van een succesvol resultaat. Als persoon ben je slim, krijg je dingen voor elkaar en ga je resultaatgericht te werk. Binnen het development team is er veel zelfstandigheid, los van de stand-up (10:00 uur) en zo nu en dan pair-programming sessies. Technieken die zij gebruiken zijn o.a. Python, Django, MySQL,

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

C#.NET-developer - JUNIOR

Functie omschrijving Voor een leuke opdrachtgever in omgeving Brielle zijn wij op zoek naar een junior developer. Werk jij graag met de volgende tools & technieken? C#, .NET, ASP.NET, MVC en SQL? Kijk dan snel of dit iets voor jou is! Als programmeur bij een productiebedrijf zal je voornamelijk nieuwe software schrijven maar ook bestaande software verbeteren. Verder werk je veel samen in back end projecten met leuke collega's. Bedrijfsprofiel Met een team van ruim 130 personen staan ze elke dag weer klaar om IT en Business te combineren door het ontwikkelen van producten op maat. Er zijn 3 teams,

Bekijk vacature »

Node.js developer looking for a challenging consul

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en staan

Bekijk vacature »

SAP HANA Cloud Application Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12662 Introductie HANA Cloud Application Developer at a High Tech company. The company is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. This role is situated in the Big Data Analytics (BDA) Domain. The teams have mixture of young talent and senior specialists and have a

Bekijk vacature »

Back-End Web Developer

Als Back-End Web Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als Back-End Web Developer bij Coolblue? Als Back-End Web Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Als backend developer weet je de weg in PHP, kan je in Typescript een microservice op zetten of ben je bereid om dit te leren. Ook Web Backend Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen PHP

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

.NET Developer gezocht!

Functie omschrijving Wij zijn op zoek naar een .NET Developer! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans en kijk snel of jouw vaardigheden aansluiten bij onderstaand profiel! Je kunt een uitdagende rol gaan vervullen als .NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving Bergen. Dit bedrijf is zeer vooruitstrevend en verricht betekenisvol werk. Binnen dit bedrijf wordt gewerkt aan de productie en ontwikkeling van medische middelen. Als .NET Developer ga jij je bezig houden met het volgende: Je wordt betrokken bij alle fasen van software

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

Bekijk vacature »

Full stack ontwikkelaar Laravel, Vue.js

Functie Als ontwikkelaar binnen deze organisatie hou jij je voornamelijk met lopende projecten voor de verschillende klanten. Zo bouw je de ene dag aan prijsschifting systemen en de andere dag onderzoek je crawlers en stel je ze zo in dat de data goed binnen komt binnen het systeem. Daarnaast bouw je mee aan dashboards en ben je dus constant bezig met het verbeteren van het platform. Er is een vaste werkwijze, zo werken ze met Trello kaarten en onderverdelen ze deze aan het begin van iedere week onder de developers. Dit wordt door de lead developer gedaan, maar in samenspraak

Bekijk vacature »

Front-end Developer - React - Data Driven

Bedrijfsomschrijving Onze klant is een snelgroeiende organisatie die een data-driven inspectieapp op de markt hebben gebracht die nu al een aantal jaar door verschillende organisaties wereldwijd gebruikt wordt. Er zijn zo'n 6 mensen werkzaam bij dit bedrijf en ze zijn nu vooral op zoek naar een sterke front-end developer die wil gaan werken aan nieuwbouw applicaties en de uitbouw van de huidige applicaties. De reden dat ze zoeken is omdat er veel werk op komst is en ze hier de juiste capaciteit voor willen hebben. Er heerst hier een hele prettige sfeer waarin respect en eerlijke communicatie belangrijk is. Ook

Bekijk vacature »

Fullstack JavaScript developer (ReactJS, NodeJS, T

Functie Het team bestaat momenteel uit ruim 15 collega’s, waarvan ruim de helft in het ontwikkelteam werkzaam is. Er zijn gave plannen om het platform ook te gaan toepassen op bijv. vliegvelden, maar ook internationale groei zit in het verschiet en daarom zijn ze op zoek naar versterking. Als Fullstack JavaScript developer werk je nauw samen met 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creeren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld

Bekijk vacature »

PHP Laravel Ontwikkelaar

Functie omschrijving Weet jij alles over Laravel en krijg je energie van het developen van software hiermee? Laat het weten want wij zoeken een PHP/Laravel developer in regio 's-Hertogenbosch voor klein bedrijf welke softwareoplossingen maakt voor hun klanten. Jouw taken hierbij: Softwareapplicaties ontwikkelen en verder optimaliseren in veel diverse projecten op basis van Agile/Scrum. Documentatie schrijven over applicaties. Uitleg geven over software en applicaties Klantcontact hebben over bestaande applicaties. Techstack: PHP, Laravel, HTML, CSS, Javascript. Bedrijfsprofiel Deze organisatie zit in de regio van 's-Hertogenbosch en is een klein bedrijf. Er werken circa 15 medewerkers, verdeeld in meerdere teams, zoals back-end

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

05/05/2014 17:37:08
Quote Anchor link
Ola,

Ik heb een vraagje... ik heb een class waarin ik de naam van een constante kan ophalen. Nu had ik in 1e instantie een method waarbij telkens 2 controles plaatsvinden, en daar heb ik nu een method van gemaakt met een extra overkoepelende controle. Dit laatste heb ik gedaan om, indien de method meer dan 1x wordt aangeroepen, geen dubbele controles te hoeven uitvoeren. Ik ben benieuwd welke versie jullie beter vinden en waarom. Hieronder even 2 voorbeeldjes van hoe het ongeveer werkt.

Voorbeeld 1:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Language {

    const DUTCH = 1;

    static private $languages_values;

    static public function getConstName($value) {
        if (!isset(self::$languages_values)) { // controle 1
            $ref_class              = new \ReflectionClass(self::class);
            self::$languages_values = array_flip($ref_class->getConstants());
        }

        if (!isset(self::$languages_values[$value])) { // controle 2
            thow new \Exception('de value bestaat niet!');
        }

        return self::$languages_values[$value];
    }

}

?>

In de opzet hierboven wordt telkens als je getConstName() aanroept eerst gecontroleerd of de property languages_values wel is geset, en daarna wordt gecontroleerd of de value in die array voorkomt.

Nu heb ik er dit van gemaakt:

Voorbeeld 2:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Language {

    const DUTCH = 1;

    static private $languages_values;

    static public function getConstName($value) {
        if (!isset(self::$languages_values[$value])) { // extra controle
            if (!isset(self::$languages_values)) {
                $ref_class              = new \ReflectionClass(self::class);
                self::$languages_values = array_flip($ref_class->getConstants());
            }

            if (!isset(self::$languages_values[$value])) {
                thow new \Exception('de value bestaat niet!');
            }
        }

        return self::$languages_values[$value];
    }

}

?>

Ik heb er dus een extra if-statement omheen gezet, die direct al kijkt of de value bestaat. Wat vinden jullie van deze aanpak?
Gewijzigd op 05/05/2014 17:44:23 door Ozzie PHP
 
PHP hulp

PHP hulp

26/05/2026 14:20:41
 
Dos Moonen

Dos Moonen

05/05/2014 18:10:46
Quote Anchor link
Dit ziet er netter en begrijpelijker uit naar mijn idee:

http://3v4l.org/Bl4TO
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

namespace Ozzie;

use Exception;
use ReflectionClass;

class Language {

    const DUTCH = 1;

    private static $languages_values;

    public static function getConstName($value) {
        if (isset(self::$languages_values[$value])) {
            return self::$languages_values[$value];
        }


        throw new Exception('de value bestaat niet!');
    }


    public static function init() {
        static $initialized = false;

        if ( ! $initialized) {
            $ref_class              = new ReflectionClass(self::class);
            self::$languages_values = array_flip($ref_class->getConstants());

            $initialized = true;
        }
    }

}


// ja, dit zet je in het zelfde bestand
Language::init();

// nee, dit dan weer niet niet
echo Language::getConstName(1), Language::getConstName(42);

// phphulp only:
?>
Gewijzigd op 05/05/2014 18:31:51 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

05/05/2014 19:17:54
Quote Anchor link
Dos, dan moet je dus telkens voordat je getConstNamn uitovert een init() uitvoeren?

Ik snap de init functie niet helemaal. Eerst zet je $initialized op false, en vervolgens controleer je of ie niet false is?
 
Dos Moonen

Dos Moonen

05/05/2014 19:24:00
Quote Anchor link
"Dos, dan moet je dus telkens voordat je getConstNamn uitovert een init() uitvoeren?"
Nee, maar een keer. En dan doe je in het bestand waar je de Language classe defineerd. Op die manier is Language::init() altijd uitgevoerd op het moment dat je Language::getConstName() wilt gebruiken.

"Eerst zet je $initialized op false, en vervolgens controleer je of ie niet false is?"
Ik zet initialized op false en kijk dan of ie niet true is.

http://www.phphulp.nl/php/forum/topic/name-id-description/94779/#680318 mocht je static $initialized niet snappen.
Gewijzigd op 05/05/2014 19:26:47 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

05/05/2014 19:27:32
Quote Anchor link
Ik snap die static... maar je zet 'm nu toch iedere keer op false?

Toevoeging op 05/05/2014 19:28:19:

>> En dan doe je in het bestand waar je de Language classe defineerd.

Wat bedoel je hiermee? Ik definieer niks, want ik gebruik een autoloader :-s
 
Dos Moonen

Dos Moonen

05/05/2014 19:36:02
Quote Anchor link
...

Ik heb het niet over het gebruik van \define()...

Ik heb het over
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?

class foo {
  // dit is een class definition
}

// zet dit in het zelfde bestand, op die manier is het altijd uitgevoegd wanneer foo beschikbaar is
foo::init();

?>


"Ik snap die static... maar je zet 'm nu toch iedere keer op false?"
Als dat zo was zou deze code 42 keer '1' moeten printen: http://3v4l.org/13gHJ
Gewijzigd op 05/05/2014 19:37:21 door Dos Moonen
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 19:37:43
Quote Anchor link
Maar we zijn weer lekker bezig.

Je gaat eerst constanten met een waarde definiëren, en daarna ga je de naam van de constante opvragen aan de hand van die waarde.

Jij bent zo van de real-time voorbeelden:
Ik heb een motor met een bepaald soort klep, ik ga eerst de motor uit elkaar halen om de naam van die zuigerklep te achterhalen.

In jouw voorbeeld met Language, moet je elke keer als je een taal wilt toevoegen je class aanpassen.
Als dat OOP is, ben ik Attila de Hun.
 
Ozzie PHP

Ozzie PHP

05/05/2014 19:46:20
Quote Anchor link
@Dos:

>> // zet dit in het zelfde bestand, op die manier is het altijd uitgevoegd wanneer foo beschikbaar is

Ah, op die fiets! Dat is inderdaad een goede truc!!! :)

* EDIT: kan dit ook bij een abstract class?

>> Als dat zo was zou deze code 42 keer '1' moeten printen

Oké... dan snap ik dus niet hoe die static werkt blijkbaar. Waarom verandert die niet van waarde? :-s

@Atilla de Hun:

>> In jouw voorbeeld met Language, moet je elke keer als je een taal wilt toevoegen je class aanpassen.

Kun je uitleggen wat je hiermee bedoelt? Hoezo moet ik m'n class aanpassen?
Gewijzigd op 05/05/2014 19:48:08 door Ozzie PHP
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 19:55:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

class Language {

const DUTCH = 1;
const WARTAAL = 0;

}

?>

Nu willen we English erbij, dan gaat jouw methode niet werken, want die gooit een Exception.
Gewijzigd op 05/05/2014 19:56:05 door Ger van Steenderen
 
Ozzie PHP

Ozzie PHP

05/05/2014 19:58:01
Quote Anchor link
Correct. Dan zal je die moeten toevoegen. Maar dat moet je toch altijd? Of wil jij iedere language kunnen setten ofzo? Dus dat je dit kunt doen? $language->set('DUTCH', 1) Bedoel je dat? Leg anders even uit hoe het volgens jou wél zou moeten. Daar ben ik wel benieuwd naar.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 20:05:04
Quote Anchor link
Ik denk dat je het begrip constante verkeerd interpreteert.

Gegevens die dynamisch (kunnen) zijn sla je niet in de class zelf op, maar in een gegevensbestand.
 
Ozzie PHP

Ozzie PHP

05/05/2014 20:15:16
Quote Anchor link
Maar ik wil dus "value objecten" (noem je dat zo?) gebruiken, waardoor ik dus zoiets kan doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$user
= new User();
$user->setName('Ger');
$user->setGender(gender::MALE);
$user->setLanguage(language::DUTCH);
?>

Dat kan toch niet anders? Dan heb je toch constanten nodig?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 20:38:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<input type="select" name="language">
<option value="1">Nederlands</option>
<option value="0">Wartaal</option>
</select>

Dus jij gaat eerst je object aanspreken om die value's te presenteren, en daarna ga je nog eens een methode ontwikkelen om de bijbehorende inhoud weer te geven?

In principe ben je als je gegevens binnen een applicatie opslaat hard aan het coderen, en dat kan nooit je bedoeling zijn.
 
Ozzie PHP

Ozzie PHP

05/05/2014 20:43:03
Quote Anchor link
Maar Ger, is dat dat niet gewoon een andere manier van werken? Jij suggereert nu dat wat ik doe fout is. Ik zie echter het probleem (nog?) niet. Misschien kun je me dat dan uitleggen.

Ik vind dit:

$user->setGender(gender::FEMALE);

prettiger lezen en te begrijpen dan

$user->setGender(2);

Wat is daar dan precies verkeerd aan?
 
Wouter J

Wouter J

05/05/2014 20:43:55
Quote Anchor link
Wat jij nu hebt is geen value objecten, in value objecten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$user
= User::hire('Ger', Gender::parse('male'), new Language('Dutch'));
?>
 
Ozzie PHP

Ozzie PHP

05/05/2014 20:54:18
Quote Anchor link
Hoe noem je de constructie die ik nu gebruik dan?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 20:56:59
Quote Anchor link
Laten we de vraag eens andersom stellen.
Wat is voor jouw het voordeel om van een iemands geslacht een object te maken?

En met alle respect voor alle ISO normen men is (of denkt) man of vrouw.

Maar je gebruikt constanten in het algemeen om een bijv. een nummer een bepaalde betekenis te geven, en niet om zomaar een hoop gegevens te genereren die je ergens anders vandaan weer moet gaan ophalen.,
 
Ozzie PHP

Ozzie PHP

05/05/2014 21:06:02
Quote Anchor link
Nou, ISO normen implementeren waar mogelijk lijkt me niet verkeerd. Daarbij is het voordeel dat als je een geslacht opslaat als 2 het minder ruimte in beslag neemt dan wanneer je het opslaat als "female". Net zoals 'de' minder ruimte in beslag neemt dan 'germany'. Die korte values besparen dus ruimte. Dat is toch een goede reden?

Kijken we dan verder... dan vind ik het handiger om te zeggen setColor(color::red) of setLanguage(language::french), dan bijv. setColor(2) en setLanguage('fre') om maar wat te noemen.

Wat is daar dan verkeerd aan? Het is toch gewoon een werkwijze die je zelf prettig vindt?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/05/2014 21:11:25
Quote Anchor link
Als jij het prettig vind om als elke keer dat er een NIEUWE taal aan je website toegevoegd wordt je code aan te gaan passen ...........
 
Ozzie PHP

Ozzie PHP

05/05/2014 21:17:44
Quote Anchor link
Ja, maar gaat het je er nu om of het wel of niet "fijn" is, of doe ik ook daadwerkelijk iets verkeerd? Als die landen bijv. uit een configuratie-bestand zouden komen, is het dan wel oké?
 
Dos Moonen

Dos Moonen

05/05/2014 21:22:07
Quote Anchor link
"Maar ik wil dus "value objecten" (noem je dat zo?)"
Nee. En dat voorbeeld heeft absoluut geen value OBJECTEN.
Je hebt geen object dat het mannelijk geslacht of de Nederlandse taal voorsteld.

Je wilt alleen objecten kunnen hebben die een valide waarde vertegenwoordigen.
Je zult de waarde dus moeten valideren aan de hand van bijvoorbeeld
- hardcoded waardes (gebruik dan aub constanten, magic numbers are evil)
- geconfigureerde waardes
- magie (dit is gelukkig onmogelijk)

Op die manier kun je dan een public function setGender(Gender $gender) hebben en weten dat $gender altijd valide is.

Constanten zijn handig om magic numbers (http://en.wikipedia.org/wiki/Magic_number_%28programming%29) te voorkomen. Wat jij nu doet is magic numbers wegwerken door ze als constanten met een beschrijvende naam te defineren. Dit is een goed iets.
Maar via reflection de naam van de constante (die per conventie alleen uit hoofdletters bestaan) op te gaan zoeken i.p.v. een helper method schrijven die op basis van bijvoorbeeld een switch een tekst versie produceert is niet echt mooi.
De tekst versie van een waarde hoort naar mijn idee niet af te hangen van de variabele/constante naam die naar de waarde verwijst.

Ik weet niet of jouw constructie een naam heeft...
Gewijzigd op 05/05/2014 21:24:15 door Dos Moonen
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.