Voor iedereen die al geruime tijd aan het programmeren is, heb je meer dan waarschijnlijk een aantal verschillende programmeertalen gebruikt. Gezien het softwarelandschap van vandaag, is het ook waarschijnlijk dat je hebt gewerkt met zowel sterk getypte talen als zwak getypte talen.
Dat wil zeggen, je hebt gewerkt in programmeertalen waarvoor je het gegevenstype van je variabelen moet opgeven, wat je functies zullen teruggeven, enzovoort, en je hebt gewerkt in programmeertalen die niet vereisen dat u die informatie expliciet hebt ingesteld.
Als je precies weet waar ik het over heb, dan is deze serieartikelen waarschijnlijk niet voor jou; Als u echter pas begint met programmeren of als u net begint met het gebruik van een nieuwe taal die dynamisch is getypt (of zwak is getypt), zijn er een aantal dingen die de moeite van het kijken waard zijn, omdat deze betrekking heeft op het werken met gegevenstypen..
In deze serie gaan we de blik van een beginner op dynamische talen richten, hoe variabelen worden gedefinieerd, hoe hun gegevenstypen worden afgeleid en verschillen van hun statische tegenhangers, en hoe een aantal van de belangrijkste valkuilen te voorkomen die bij het werken met deze talen.
Voordat we daadwerkelijk naar de valkuilen van type dwang kijken en we zijn de meeste kans om hun valkuilen te ervaren, is het belangrijk om te begrijpen welke gegevenstypen zijn en hoe deze variëren van sterk getypte talen en dynamisch getypte talen.
Over het algemeen zult u waarschijnlijk sterk getypeerde talen vinden in de familie van programmeertalen die worden gecompileerd. Dat omvat talen als C en C++.
Echter, daar zijn uitzonderingen.
Er zijn een aantal talen die zijn gecompileerd naar een of andere vorm van bytecode of een soort van tussenliggende taal en vervolgens worden verwerkt door een tolk. Java is zo'n taal. Deze talen zijn sterk getypt. Ze zijn ook samengesteld. Maar ze zijn niet noodzakelijkerwijs gecompileerd in binaire uitvoerbare bestanden, maar bytecode die wordt geïnterpreteerd door een stukje software van een derde partij.
Ik weet dat het een beetje verwarrend klinkt, dus misschien kan een code helpen om dit te verduidelijken. In sterk getypte talen geeft u altijd het type gegevens aan dat een variabele gaat vertegenwoordigen.
Bijvoorbeeld:
string example = "De snelle bruine vos springt over de luie hond."; int getal = 42; dubbele contanten = 99,99; boolean exists = true;
Hoewel de code eenvoudig genoeg moet zijn om voor zichzelf te spreken, moet u opmerken dat deze variabelen bevat die tekenreeksen, numerieke typen en booleaanse waarden bevatten.
In sterk getypte talen moet u ook aangeven welk type informatie een functie zal retourneren. Neem de volgende voorbeelden:
public string getGreeting () terug "Hallo wereld!"; public boolean isAlive () return true; public void doSomething () for (int i = 0; i < 10; i++ ) // Perform something
Merk op dat in het bovenstaande voorbeeld de laatste functie een retourneringstype heeft leegte
. Dit betekent dat de functie niet terugkeert iets. Wanneer we naar dynamische talen gaan kijken, zien we hoe dit verschilt.
Uiteraard zijn deze extreem eenvoudig, maar dat is prima, want ze moeten een punt maken: dat sterk getypeerde talen variabelen en functies hebben waarvan het gegevenstype expliciet is ingesteld.
Als het gaat om dynamisch getypeerde talen, zijn er een aantal luxe die komen met het kunnen definiëren van variabelen en het maken van functies.
In de vorige voorbeelden, de variabele voorbeeld
kan alleen een draad
. Dat betekent dat het geen zwevendekommagetal of een Booleaanse waarde kan bevatten moet houd een string vast. In dynamisch getypte talen is dat niet het geval.
Variabelen kunnen in plaats daarvan verwijzen naar een tekenreeks op één punt tijdens de levensduur van het programma, een geheel getal op een ander punt en een booleaanse waarde op een ander punt. Dit kan natuurlijk verwarrend zijn als een of ander type coderingsnorm niet wordt aangenomen, maar dat valt buiten het bestek van dit punt.
Het punt is dat variabelen gedefinieerd in dynamisch getypte talen kunnen verwijzen naar verschillende soorten gegevens door de uitvoering van een programma.
Bijvoorbeeld:
var voorbeeld; example = "De snelle bruine vos springt over de luie hond."; voorbeeld = 42; voorbeeld = 99,99; voorbeeld = waar;
Merk op dat deze variabelen geen gegevenstype hebben - ze worden gewoon gedeclareerd als type var en vervolgens ingesteld zoals nodig. Sommige talen definiëren variabelen anders dan wat u hierboven ziet, maar het gaat er niet om te laten zien hoe de ene taal het doet boven de andere. Het is om te laten zien hoe variabelen eenvoudigweg niet verwijzen naar een specifiek type gegevens.
Functies werken op dezelfde manier. Dat wil zeggen, in plaats van het definiëren van het retourneringstype van de gegevens, definieert u eenvoudig de functie en laat u deze een waarde retourneren.
functie getGreeting () terug "Hallo wereld!"; function isAlive () return true; function doSomething () for (var i = 0; i < 10; i++ ) // Perform something
Nogmaals, voor verschillende talen moeten functies op verschillende manieren worden gedefinieerd (sommige talen gebruiken bijvoorbeeld niet de functie
sleutelwoord maar gebruik in plaats daarvan het def
sleutelwoord), maar de essentie is dat u niet expliciet het type gegevens hoeft te vermelden dat uit de functie zal worden geretourneerd.
Dit kan een echt krachtig hulpmiddel zijn; het kan het echter ook moeilijk maken om de code te lezen, moeilijk te begrijpen wat de functie zal teruggeven, en / of moeilijk om te weten hoe externe code moet worden ingesteld om de functies te bellen (zoals in het geval van vergelijkingen, conditionals, en zo op).
Dit is de reden waarom coderingsnormen en duidelijke naamgevingsconventies belangrijk zijn. Nogmaals, dat is een onderwerp dat buiten het bereik van deze serie valt.
Nu we in het kort hebben bekeken hoe sterk getypeerde talen en dynamisch getypeerde talen variabelen, functies en gegevenstypes in het algemeen beheren, kunnen we onze aandacht richten op hoe type dwang werkt binnen de bredere context van toepassingen die dynamisch zijn geschreven getypte talen.
We kijken in het bijzonder naar hoe we de prestaties in ons voordeel kunnen gebruiken, en we kunnen kijken naar hoe we uiteindelijk bugs kunnen introduceren door niet expliciet duidelijk te zijn in onze code. Dus vanaf het volgende artikel gaan we precies dat doen.
Voeg in de tussentijd alle opmerkingen, vragen en algemene feedback toe aan de onderstaande feed!