For alle som har programmert for en lang periode, har du sannsynligvis brukt en rekke forskjellige programmeringsspråk. Gitt programvarelandskapet i dag, er det også sannsynlig at du har jobbet med både sterkt skrevet språk og svakt skrevet språk.
Det vil si at du har jobbet i programmeringsspråk som krever at du spesifiserer datatypen til variablene dine, hvilke funksjoner du vil returnere og så videre, og du har jobbet med programmeringsspråk som krever ikke at du eksplisitt angir denne informasjonen.
Hvis du vet nøyaktig hva jeg snakker om, så er denne serien artikler trolig ikke for deg; Men hvis du bare går inn i programmering, eller du bare begynner å bruke et nytt språk som er dynamisk skrevet (eller svakt skrevet), så er det en rekke ting verdt å merke seg som det gjelder å jobbe med datatyper.
I denne serien skal vi se på nybegynnere på dynamiske språk, hvordan variabler er definert, hvordan datatyper er avledet og er forskjellige fra deres statiske motparter, og hvordan du kan unngå noen av de store fallgruvene som kommer med å jobbe med disse språkene.
Før vi faktisk ser på fallgruvene av typen tvang, og det er mest sannsynlig at du opplever sine fallgruver, er det viktig å forstå hvilke datatyper som er, og hvordan de varierer fra sterkt skrevet språk og dynamisk typede språk.
Generelt sett er du mest sannsynlig å finne sterkt skrevet språk i familien av programmeringsspråk som er samlet. Det inkluderer språk som C og C++.
Men der er unntakene.
Det er noen språk som er kompilert til noen form for bytecode eller noen form for mellomspråket og blir deretter behandlet av en tolk. Java er et slikt språk. Disse språkene er sterkt skrevet. De er også kompilert. Men de er ikke nødvendigvis kompilert i binære kjørbare men bytecode som tolkes av et tredjepartsprogramvare.
Jeg vet at det høres litt forvirrende, så kanskje noen kode vil bidra til å avklare dette. I sterkt skrevet språk, erklærer du alltid hvilken type data en variabel skal representere.
For eksempel:
streng eksempel = "Den raske brune ræven hopper over den dovne hunden."; int nummer = 42; dobbel kontanter = 99,99; boolean eksisterer = true;
Selv om koden skal være enkel nok til å være selvforklarende, merk at den viser variabler som holder strenger, numeriske typer og boolske verdier.
I sterkt skrevet språk må du også angi hvilken type informasjon en funksjon vil returnere. Ta følgende eksempler:
offentlig streng getGreeting () return "Hei verden!"; offentlige boolean isAlive () return true; offentlig tomrom gjør noe () for (int i = 0; i < 10; i++ ) // Perform something
Merk at i siste eksempel har den endelige funksjonen en returtype av tomrom
. Dette betyr at funksjonen ikke kommer tilbake hva som helst. Når vi begynner å se på dynamiske språk, ser vi hvordan dette skiller seg ut.
Selvfølgelig er disse ekstremt enkle, men det er greit som de skal gjøre et poeng: De sterkt skrevet språk har variabler og funksjoner som har datatypen eksplisitt sett.
Når det kommer til dynamisk skrivte språk, er det en rekke bekvemmeligheter som kommer med å kunne definere variabler og skape funksjoner.
I de tidligere eksemplene, variabelen eksempel
kan bare holde en string
. Det betyr at det ikke kan holde et flytende punktnummer eller en boolsk verdi - den må hold en streng. På dynamisk tastede språk er det ikke tilfelle.
I stedet kan variabler referere til en streng på et tidspunkt i løpet av programmets levetid, et helt tall på et annet punkt og en boolsk verdi på et annet punkt. Selvfølgelig kan dette bli forvirrende hvis noen typer kodingsstandarder ikke er vedtatt, men det er utenfor rammen av dette punktet.
Poenget er at variabler definert i dynamisk skrevne språk kan referere til forskjellige typer data gjennom et programs utførelse.
For eksempel:
var eksempel; eksempel = "Den raske brune ræven hopper over den dovne hunden."; eksempel = 42; eksempel = 99,99; eksempel = sant;
Vær oppmerksom på at disse variablene ikke har en datatype - de er bare deklarert som typen var og settes etter behov. Noen språk definerer variabler annerledes enn hva du ser over, men poenget er ikke å vise hvordan ett språk gjør det over det andre. Det er å vise hvordan variabler bare ikke refererer til en bestemt type data.
Funksjoner fungerer på lignende måte. Det er, i stedet for å definere returtype av dataene, definerer du bare funksjonen og får den til å returnere en verdi.
funksjon getGreeting () return "Hei verden!"; funksjon erAlive () return true; funksjon doSomething () for (var i = 0; i < 10; i++ ) // Perform something
Igjen vil forskjellige språk kreve at funksjoner defineres på forskjellige måter (for eksempel bruker noen språk ikke funksjon
søkeord, men i stedet bruk def
søkeord), men kjernen er at du ikke eksplisitt må angi hvilken type data som skal returneres fra funksjonen.
Dette kan være et veldig kraftig verktøy; Det kan imidlertid også gjøre det vanskelig å lese koden, vanskelig å forstå hva funksjonen vil returnere og / eller vanskelig å vite hvordan du konfigurerer ekstern kode for å ringe funksjonene (for eksempel i tilfelle sammenligninger, conditionals og så på).
Dette er grunnen til at kodingsstandarder og klare navngivningskonvensjoner er viktige. Igjen, det er et emne som er utenfor omfanget av denne serien.
Nå som vi har tatt en oversikt over hvordan sterkt maskinskrevne språk og dynamisk typede språk administrerer variabler, funksjoner og datatyper generelt, kan vi gjøre oppmerksom på hvordan type tvang fungerer innenfor større sammenheng med applikasjoner som er skrevet dynamisk skrevet språk.
Spesielt ser vi på hvordan vi kan bruke ytelsen til vår fordel, og vi kan se på hvordan vi kan ende opp med å introdusere feil ved ikke å være eksplisitt tydelig i vår kode. Så starter i neste artikkel, skal vi gjøre akkurat det.
I mellomtiden legger du til alle kommentarer, spørsmål og generell tilbakemelding til feedet under!