1/92
Övningskort för begrepp och terminologi i introduktionskursen i programmering (Scala och Java) vid Datavetenskap, LTH.
SARA
Akronym för de fyra grundläggande programmeringskoncept som bygger upp all mjukvara: Sekvens, Alternativ, Repetition och Abstraktion.
Kompilator
Ett datorprogram som läser källkod skriven i ett högnivåspråk, kontrollerar den för syntaktiska och semantiska fel samt översätter den till körbar maskinkod eller bytekod.
Kompileringsfel
Ett fel som upptäcks av kompilatorn vid analys av källkoden (t.ex. typfel eller syntaxfel) och som avbryter kompileringen så att ingen körbar kod genereras.
Exekveringsfel (körtidsfel)
Ett fel som inträffar medan programmet körs (t.ex. division med noll eller felaktig indexering), vilket ofta leder till att programmet avbryts med ett undantag och en stack trace.
Virtuell maskin (VM)
En mjukvaruimplementerad abstrakt dator (såsom Java Virtual Machine, JVM) som tolkar abstrakt bytekod och översätter den till den underliggande hårdvarans specifika maskinkod under körning.
Litteral
En notation i källkoden som representerar ett fast, direkt datavärde, exempelvis heltalet 42, flyttalet 42.0, tecknet 'a' eller strängen "hej".
Typinferens (typhärledning)
Kompilatorns förmåga att automatiskt avgöra och tilldela datatyper till variabler och uttryck baserat på deluttryckens typer, utan att programmeraren måste skriva ut typen explicit.
val
Nyckelord i Scala för att deklarera en oföränderlig variabel som endast kan tilldelas ett värde en enda gång vid initialiseringen.
var
Nyckelord i Scala för att deklarera en förändringsbar variabel vars refererade värde kan bytas ut i efterhand med hjälp av tilldelningssatser.
Stränginterpolering
En mekanism där variabler och uttryck kan bäddas in direkt i en stränglitteral med hjälp av ett inledande s-tecken och dollartecken, t.ex. s"Värdet är $x".
Procedur
En funktion som utför en sidoeffekt (såsom en utskrift på skärmen eller en tillståndsändring) men som inte returnerar något meningsfullt resultatvärde, och därmed har returtypen Unit.
Unit
En grundtyp i Scala som motsvarar frånvaron av ett meningsfullt returvärde; dess enda instans representeras av enhetsvärdet ().
De Morgans lagar
Logiska regler för hur booleska uttryck negeras: operatorerna && och || byter plats med varandra samtidigt som samtliga ingående deluttryck och relationer negeras.
Kommandotolk (shell)
Ett textbaserat program (t.ex. Bash eller Zsh) som tar emot kommandon från användaren i en terminal, tolkar dem och instruerar operativsystemet att utföra motsvarande processer.
Datastruktur
En organiserad struktur för samling och hantering av data som kan innehålla flera element, refereras till som en helhet och medge åtkomst till enskilda element.
Vektor (Vector)
En oföränderlig sekvenssamling i Scalas standardbibliotek som har allsidigt god prestanda och möjliggör snabb elementåtkomst över hela sekvensen.
Array
En primitiv, förändringsbar sekvenssamling med fix storlek där elementen lagras i följd i datorns minne, vilket ger mycket snabb indexering men kräver kopiering vid storleksändring.
Range
En sekvenssamling i Scala som representerar ett intervall av heltal (t.ex. skapad med to eller until) där talen inte genereras i minnet förrän de faktiskt efterfrågas.
Algoritm
En ändlig, stegvis och entydig instruktionssekvens som beskriver tillvägagångssättet för att lösa ett givet beräkningsproblem från indata till utdata.
Anropsstack (Call stack)
Datorns minnesutrymme för att hålla reda på aktiva funktionsanrop, där en aktiveringspost (stack frame) skapas vid varje anrop och tas bort när funktionen returnerar.
Stack trace
En fellista över anropsstacken vid ett körtidsfel som visar den exakta anropskedjan med klasser, metoder, källkodsfiler och radnummer där felet inträffade.
Äkta funktion (Pure function)
En funktion som alltid producerar samma resultat för samma argument, saknar observerbara sidoeffekter och är referentiellt transparent.
Högre ordningens funktion
En funktion som tar en eller flera funktioner som argument och/eller returnerar en funktion som sitt resultatvärde (t.ex. map, filter och reduceLeft).
Anonym funktion (Lambda)
Ett namnlöst funktionsvärde som definieras direkt som ett uttryck med syntaxen (parametrar) => uttryck och kan skickas som argument eller tilldelas en variabel.
Platshållarsyntax
En kortform för anonyma funktioner i Scala där ett understreck _ representerar en parameter som endast används en enda gång i funktionskroppen.
Predikat
En funktion som tar ett eller flera argument och returnerar ett sanningsvärde av typen Boolean (används ofta för villkor och filtrering).
Namnanrop (Call-by-name)
En anropsteknik deklarerad med => före parametertypen där evalueringen av argumentet fördröjs och sker på nytt varje gång parameternamnet refereras i kroppen.
Värdeanrop (Call-by-value)
Standardmetoden för funktionsanrop där argumentuttrycket evalueras en enda gång innan det överförs och binds till parametern vid funktionsanropet.
Stegad funktion (Curry-funktion)
En funktion uppdelad i flera parameterlistor som kan appliceras partiellt på en delmängd av listorna för att returnera en ny funktion som tar resterande parametrar.
Closure
Ett funktionsobjekt som kapslar in och behåller referenser till variabler från sin omgivande namnrymd utanför funktionens eget lokala block.
Rekursiv funktion
En funktion som anropar sig själv för att lösa mindre delproblem och som måste definiera en explicit returtyp samt ett basfall där rekursionen avbryts.
Singelobjekt (Singleton object)
Ett objekt i Scala deklarerat med nyckelordet object som existerar i exakt en instans och allokeras automatiskt i minnet vid första referens.
Attribut
En variabel (deklarerad med val eller var) som tillhör ett objekt eller en klass och definierar en del av dess interna tillstånd.
Metod
En funktion (deklarerad med def) som är medlem i en klass eller ett objekt och har direkt tillgång till objektets attribut och tillstånd.
Tillstånd (State)
Den samlade uppsättningen av aktuella värden hos alla attribut i ett objekt vid en given tidpunkt under programmets körning.
Inkapsling (Encapsulation)
Objektorienterad princip där ett objekts interna datarepresentation döljs för omvärlden med nyckelord som private, så att tillståndet endast manipuleras via ett väldefinierat gränssnitt.
Principen om enhetlig access
Språkprincip i Scala som innebär att avläsning av ett attribut (val/var) och anrop av en parameterlös metod (def) skrivs med identisk syntax, vilket tillåter ändring av implementationen utan påverkan på klientkoden.
Tupel
En oföränderlig datastruktur som grupperar ett bestämt antal element av potentiellt olika datatyper med hjälp av parenteser, t.ex. (Int, String).
Typalias
Ett deklarerat alternativt namn för en befintlig datatyp med nyckelordet type (t.ex. type Pt = (Int, Int)), vilket ökar kodens läsbarhet och abstraktionsgrad.
Fördröjd initialisering (lazy val)
En variabeldeklaration vars initialiseringsuttryck evalueras först när variabeln refereras för första gången, varefter värdet sparas för framtida referenser.
Extensionsmetod (extension)
En metod deklarerad med nyckelordet extension som gör det möjligt att i efterhand lägga till nya metoder på en befintlig typ så att de kan anropas med punktnotation.
Jar-fil
Ett komprimerat filarkivformat (Java Archive) som samlar kompilerade .class-filer, bibliotek och resursfiler i en enhetlig fil för enkel distribution.
Classpath
En parameter eller miljövariabel som definierar den lista av kataloger och jar-filer där kompilatorn och JVM söker efter kompilerade klasser under översättning och körning.
Klass (Class)
En mall eller ritning deklarerad med class som definierar attribut och metoder för att skapa flera oberoende instanser av samma typ.
Konstruktor
Den programkod i en klass som exekveras vid instansiering för att allokera minnesutrymme och initialisera objektets attributvärden.
Kompanjonsobjekt (Companion object)
Ett singelobjekt deklarerat i samma källkodsfil och med samma namn som en klass, vilket delar fullständiga privata åtkomsträttigheter med klassen.
Fabriksmetod (Factory method)
En metod (ofta apply i ett kompanjonsobjekt) som skapar och returnerar instanser av en klass utan att anroparen explicit behöver anropa klassens konstruktor direkt.
Case-klass (Case class)
En specialiserad klass i Scala deklarerad med case class som automatiskt tilldelas publika val-attribut, innehållslikhet, mönstermatchningsstöd, en copy-metod och en läsbar toString.
Referenslikhet vs. Innehållslikhet
Referenslikhet (eq) undersöker om två referenser pekar på exakt samma objekt i minnet, medan innehållslikhet (==/equals) kontrollerar om objekten innehåller samma data oavsett adress.
null
Ett litteralt värde i JVM som indikerar att en referensvariabel inte pekar på någon allokerad instans i minnet, vilket orsakar NullPointerException vid åtkomst.
Topptyp (Any)
Den yttersta bastypen i Scalas typsystem som alla andra typer direkt eller indirekt ärver ifrån, och som definierar metoder som toString, equals och hashCode.
Bottentyp (Nothing)
En typ längst ned i Scalas typhierarki som är subtyp till alla andra typer, saknar instanser och representerar beräkningar som inte avslutas normalt (t.ex. kastade undantag).
Mönstermatchning (Pattern matching)
En språkkonstruktion med match och case som undersöker ett värde mot en sekvens av mönster, dekonstruerar data och exekverar den första matchande grenen.
Gard (Guard)
Ett booleskt villkor som läggs till med if i en case-gren i ett match-uttryck och som måste utvärderas till true för att grenen ska väljas.
Förseglad typ (sealed)
En modifierare framför en trait eller klass som förbjuder subtypning utanför den egna källkodsfilen, vilket möjliggör för kompilatorn att varna vid ofullständiga mönstermatchningar.
Option
En förseglad datatyp i Scala för typsäker hantering av potentiellt saknade värden, representerad av antingen instansen Some[T] (värde finns) eller objektet None (värde saknas).
Undantag (Exception)
Ett objekt som representerar ett fel eller en avvikande händelse under exekveringen och som avbryter det normala kodflödet tills det fångas i ett try-catch-block.
Try
En funktionell samlingstyp i scala.util som kapslar in en beräkning som kan kasta undantag och resulterar i antingen Success[T] vid lyckad körning eller Failure[T] vid fel.
Sekvensalgoritm
En algoritm som manipulerar eller analyserar ordnade dataelement i en sekvens enligt de vanliga mönstren: Kopiering, Uppdatering, Transformering, Filtrering, Sökning, Sortering och Registrering (KUTFSSR).
Linjärsökning
En sökalgoritm med tidskomplexitet O(n) som sekventiellt granskar element från sekvensens början till dess att det eftersökta elementet påträffas eller samlingen tar slut.
Registrering
En algoritmisk metod för att räkna frekvenser eller kategorisera förekomster av dataelement genom att uppdatera räknare i en array eller nyckel-värde-tabell.
Enumeration (enum)
En datatyp i Scala 3 definierad med enum som består av en sluten mängd namngivna värden (case) med bestämd ordningsföljd och inbyggda metoder som values och ordinal.
Matris (Matrix)
En tvådimensionell datastruktur med rader och kolumner som i Scala ofta implementeras som en nästlad samling av samlingar, t.ex. Vector[Vector[T]] eller Array[Array[T]].
Typparameter
En platshållare för en abstrakt datatyp som deklareras inom hakparenteser [T] i generiska klasser eller metoder och binds till en konkret typ vid användning.
Typradering (Type erasure)
Den process i JVM där information om generiska typparametrar raderas under kompileringen, vilket innebär att typargument inte kan undersökas direkt vid körtid utan speciella hjälpmekanismer.
Mängd (Set)
En oordnad samling av unika element som inte kan innehålla dubbletter och som är optimerad för mycket snabba medlemskapskontroller.
Nyckel-värde-tabell (Map)
En samling bestående av unika nycklar som var och en är associerad med ett värde, vilket medger direkt och snabb uppslagning av värdet baserat på nyckeln.
Multimap
En specialiserad tabellstruktur där varje nyckel är associerad med en samling av värden (ofta ett Set) så att flera värden kan lagras under samma nyckel.
Serialisering och Deserialisering
Serialisering innebär att omvandla objekt i minnet till en lagringsbar sekvens av byte eller tecken; deserialisering innebär att återskapa objekten i datorns minne från denna sekvens.
Commit
En sparad och tidsstämplad ögonblicksbild av ändringar i ett Git-arkiv (repository) som förses med en unik SHA-hash och ett förklarande commit-meddelande.
Sammanfogningskonflikt (Merge conflict)
En situation i ett versionshanteringssystem där ändringar från två grenar överlappar på samma rader i en fil, vilket kräver att utvecklaren löser konflikten manuellt.
Arv (Inheritance)
En mekanism i objektorienterad programmering där en subtyp ärver attribut och metoder från en supertyp med nyckelordet extends, vilket etablerar en ”är-en”-relation.
Komposition
En designprincip där ett komplext objekt byggs upp genom att hålla referenser till andra objekt som attribut (en ”har-en”-relation), vilket ofta ger lösare koppling än arv.
Trait
En abstrakt typ i Scala deklarerad med trait som kan innehålla både abstrakta och konkreta medlemmar samt parametrar, och som kan mixas in i flera klasser.
Subtypspolymorfism
Principen att en variabel med en viss statisk supertyp vid körtid kan referera till instanser av godtyckliga subtyper och därmed uppträda i flera olika former.
Dynamisk bindning
Mekanismen vid metodanrop där den faktiska metodimplementation som körs avgörs dynamiskt vid körtid baserat på objektets körtidstyp, snarare än variabelns statiska typ.
Överskuggning (Override)
Att i en subklass ersätta en ärvd konkret medlems implementation med en ny implementation, vilket i Scala kräver det explicita nyckelordet override.
Inmixning (Mix-in)
Möjligheten i Scala att ärva från flera traits samtidigt genom att lista dem separerade med kommatecken efter extends, vilket tillför flera oberoende egenskaper till en klass.
Anonym klass
En namnlös klass som skapas och instansieras direkt med new följt av ett trait- eller klassnamn och ett kodblock som implementerar eventuella abstrakta medlemmar.
Algebraisk datatyp (ADT)
En datatyp sammansatt av produkt-typer (”och”-strukturer, t.ex. case-klasser med flera fält) och summa-typer (”eller”-strukturer, t.ex. förseglade traits eller enums med disjunkta fall).
Typgräns (Type bound)
Villkor för generiska typparametrar där en övre gräns [T
Kovarians
En subtypsrelation för generiska typer markerad med prefixet + (t.ex. [+A]) som innebär att om T <: U så gäller även F[T] <: F[U].
Kontravarians
En subtypsrelation för generiska typer markerad med prefixet - (t.ex. [-A]) som kastar om subtypsförhållandet så att om T <: U så gäller F[U] <: F[T].
Invarians
Den egenskap hos en generisk typkonstruktor utan variansprefix där F[T] och F[U] är orelaterade subtyper oavsett arvsrelationen mellan T och U (nödvändigt för förändringsbara strukturer).
Egentyp (Self type)
En typdeklaration i en trait (t.ex. self: SuperType =>) som garanterar att traiten endast kan mixas in i klasser som också implementerar SuperType, utan att traiten explicit ärver den.
Givet värde (given) och Kontextparameter (using)
En mekanism i Scala 3 där parametrar märkta med using automatiskt tilldelas passande värden deklarerade med given utifrån aktuell namnrymd baserat på deras typ.
Ad hoc-polymorfism (Typklass)
En polymorfismteknik där funktioner anpassas till olika typer utan subtypsarv genom att kompilatorn framkallar typspecifika implementationer (typklasser) via kontextparametrar.
Binärsökning
En sökalgoritm med tidskomplexitet O(log(n)) som kräver en sorterad samling och upprepat halverar sökområdet genom att jämföra sökelementet med elementet i mitten.
Insättningssortering (Insertion sort)
En sorteringsalgoritm med tidskomplexitet O(n2) som itererar genom elementen och stegvis placerar varje nytt element på rätt position i en växande sorterad delsekvens.
Faltning (Convolution)
En matematisk matrisoperation inom bildbehandling där en mindre faltningskärna multipliceras elementvis över en bilds intensitetsmatris och summeras för att skapa filtrerade bildeffekter.
Tråd (Thread)
En självständig exekveringssekvens (instans av Thread) som körs jämlöpande med andra trådar och delar datorns processortid och gemensamma minne.
Future
En asynkron abstraktion i scala.concurrent som representerar resultatet av en bakgrundsberäkning som exekveras i en trådpool och blir tillgänglig vid en senare tidpunkt.
Autoboxning (Autoboxing)
Den automatiska typkonvertering som kompilatorn utför i Java mellan en primitiv datatyp (såsom int) och dess motsvarande wrapper-klass (såsom Integer) vid behov.