{"id":6528,"date":"2026-04-16T09:45:31","date_gmt":"2026-04-16T08:45:31","guid":{"rendered":"https:\/\/gdksoftware.com\/knowledgebase\/stop-using-with-in-delphi"},"modified":"2026-04-16T09:59:07","modified_gmt":"2026-04-16T08:59:07","slug":"stop-using-with-in-delphi","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi","title":{"rendered":"Stop het gebruiken van WITH in Delphi"},"content":{"rendered":"<h2>Wat doet WITH?<\/h2>\n<p>Het <code class=\"\" data-line=\"\">with<\/code>-statement maakt al deel uit van Object Pascal sinds de begindagen van Pascal. Het was ontworpen om typen te besparen door je toe te staan de objectnaam weg te laten bij het benaderen van properties en methoden. In de praktijk introduceert <code class=\"\" data-line=\"\">with<\/code> subtiele bugs en maakt het code moeilijker te lezen en te onderhouden. Bij GDK Software raden we het gebruik ervan sterk af.<\/p>\n<p>Het <code class=\"\" data-line=\"\">with<\/code> -statement brengt de leden van een object of record tijdelijk in scope, zodat je ernaar kunt verwijzen zonder een qualifier:<\/p>\n<pre><code class=\"language-pascal\" data-line=\"\">with MyButton do\nbegin\n  Caption := &#039;Click me&#039;;\n  Enabled := True;\n  Width   := 120;\nend;<\/code><\/pre>\n<p>Op het eerste gezicht ziet dit er overzichtelijk uit. De problemen beginnen wanneer je codebase groeit.<\/p>\n<h2>Waarom je ermee moet stoppen<\/h2>\n<h3>1. Stille scope wijzigingen<\/h3>\n<p>Het grootste gevaar van <code class=\"\" data-line=\"\">with<\/code> is dat je code stilletjes van betekenis kan veranderen wanneer iemand een nieuwe property toevoegt aan een klasse, inclusief klassen in de RTL of een externe bibliotheek. Overweeg het volgende:<\/p>\n<pre><code class=\"language-pascal\" data-line=\"\">with MyRect do\nbegin\n  Left  := 10;\n  Top   := 10;\n  Width := GetWidth;  \/\/ Which Width? MyRect.Width or the enclosing form&#039;s Width?\nend;<\/code><\/pre>\n<p>Als een toekomstige versie van Delphi een <code class=\"\" data-line=\"\">Width<\/code>-property toevoegt aan <code class=\"\" data-line=\"\">TRect<\/code> (wat inderdaad is gebeurd), lost de compiler <code class=\"\" data-line=\"\">Width<\/code> stilzwijgend op naar <code class=\"\" data-line=\"\">TRect.Width<\/code> in plaats van de buitenste scope. Geen waarschuwing, geen fout, alleen onverwacht gedrag tijdens runtime.<\/p>\n<h3>2. Debugger ondersteuning werkt niet goed<\/h3>\n<p>De Delphi-debugger kan variabelen binnen een <code class=\"\" data-line=\"\">with<\/code>-blok niet betrouwbaar evalueren. Wanneer je over een identifier zweeft om de waarde te inspecteren, weet de debugger niet in welke scope hij moet zoeken. Dit maakt debuggen aanzienlijk moeilijker en kost je kostbare tijd.<\/p>\n<h3>3. Leesbaarheid lijdt eronder<\/h3>\n<p>Code wordt veel vaker gelezen dan geschreven. Wanneer een collega (of jijzelf in de toekomst) een <code class=\"\" data-line=\"\">with<\/code>-blok leest, moeten ze mentaal bijhouden bij welk object elke identifier hoort. Met geneste <code class=\"\" data-line=\"\">with<\/code>-statements wordt dit vrijwel onmogelijk:<\/p>\n<pre><code class=\"language-pascal\" data-line=\"\">with Order, Customer, Address do\nbegin\n  City := &#039;Amsterdam&#039;;  \/\/ Which object owns City?\nend;<\/code><\/pre>\n<h3>4. Het is een tijdbom voor onderhoud<\/h3>\n<p>Naarmate je applicatie evolueert, kunnen nieuwe properties worden toegevoegd aan elk van de betrokken types. Elke dergelijke wijziging is een potenti\u00eble stille bug binnen een <code class=\"\" data-line=\"\">with<\/code>-blok. De compiler waarschuwt je niet, en het probleem komt mogelijk pas aan het licht wanneer een klant onverwacht gedrag meldt.<\/p>\n<h2>Wat je in plaats daarvan kunt doen<\/h2>\n<p>Gebruik een lokale variabele om referenties beknopt te houden zonder de scope te verbergen:<\/p>\n<pre><code class=\"language-pascal\" data-line=\"\">var Btn := MyButton;\nBtn.Caption := &#039;Click me&#039;;\nBtn.Enabled := True;\nBtn.Width   := 120;<\/code><\/pre>\n<p>De code is even beknopt, elke identifier is ondubbelzinnig, en de debugger werkt perfect.<\/p>\n<p>Gebruik voor records een lokale pointer of inline variabele (beschikbaar sinds Delphi 10.3):<\/p>\n<pre><code class=\"language-pascal\" data-line=\"\">var Rectangle: TRect := GetBounds;\nRectangle.Left := 10;\nRectangle.Top  := 10;<\/code><\/pre>\n<h2>Conclusie<\/h2>\n<p>De <code class=\"\" data-line=\"\">with<\/code>-statement bespaart een paar toetsaanslagen, maar introduceert verborgen risico&#8217;s: stille scopewijzigingen, gebrekkige debuggerondersteuning en moeilijk leesbare code. Bij GDK Software gebruiken we <code class=\"\" data-line=\"\">with<\/code> nooit in productiecode. Vervang het door een duidelijk benoemde lokale variabele, en je toekomstige zelf en je collega&#8217;s zullen je dankbaar zijn.<\/p>\n<p>Voor meer Delphi best practices, lees ons artikel over <a href=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/delphi-tips-en-tricks\">Delphi Tips &amp; Tricks<\/a>.<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-6528","knowledge","type-knowledge","status-publish","hentry","knowledge-category-delphi"],"acf":{"author":5332,"type_hero":"compact","hero_image":2070,"hero_image_position":"","hero_title":"","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Stop het gebruiken van WITH in Delphi - GDK Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stop het gebruiken van WITH in Delphi\" \/>\n<meta property=\"og:description\" content=\"Wat doet WITH? Het with-statement maakt al deel uit van Object Pascal sinds de begindagen van Pascal. Het was ontworpen om typen te besparen door je toe te staan de objectnaam weg te laten bij het benaderen van properties en methoden. In de praktijk introduceert with subtiele bugs en maakt het code moeilijker te lezen [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-16T08:59:07+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/stop-using-with-in-delphi\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/stop-using-with-in-delphi\",\"name\":\"Stop het gebruiken van WITH in Delphi - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\"},\"datePublished\":\"2026-04-16T08:45:31+00:00\",\"dateModified\":\"2026-04-16T08:59:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/stop-using-with-in-delphi#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/stop-using-with-in-delphi\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/stop-using-with-in-delphi#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank-categorie\\\/delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Stop het gebruiken van WITH in Delphi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/nl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Stop het gebruiken van WITH in Delphi - GDK Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi","og_locale":"nl_NL","og_type":"article","og_title":"Stop het gebruiken van WITH in Delphi","og_description":"Wat doet WITH? Het with-statement maakt al deel uit van Object Pascal sinds de begindagen van Pascal. Het was ontworpen om typen te besparen door je toe te staan de objectnaam weg te laten bij het benaderen van properties en methoden. In de praktijk introduceert with subtiele bugs en maakt het code moeilijker te lezen [&hellip;]","og_url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi","og_site_name":"GDK Software","article_modified_time":"2026-04-16T08:59:07+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"3 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi","url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi","name":"Stop het gebruiken van WITH in Delphi - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/nl#website"},"datePublished":"2026-04-16T08:45:31+00:00","dateModified":"2026-04-16T08:59:07+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/stop-using-with-in-delphi#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/nl"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/nl\/kennisbank"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/nl\/kennisbank-categorie\/delphi"},{"@type":"ListItem","position":4,"name":"Stop het gebruiken van WITH in Delphi"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/nl#website","url":"https:\/\/gdksoftware.com\/nl","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/nl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge\/6528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/team\/5332"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/media?parent=6528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}