Variabler, värden och typer

Relevanta dokument
Variabler, värden och typer

Variabler, värden och typer

Mer Java 2015

Labb 1: Vad, hur, och varför?

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Objektorienterad Programmering (TDDC77)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Klassdeklaration. Metoddeklaration. Parameteröverföring

Parameteröverföring. Exempel. Exempel. Metodkropp

Övning2. Variabler. Data typer

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78 / 729A85 Objektorienterad programmering och Java

F4. programmeringsteknik och Matlab

Programmering A. Johan Eliasson

OOP Objekt-orienterad programmering

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

SMD 134 Objektorienterad programmering

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

OOP Objekt-orienterad programmering

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Enkla datatyper minne

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Classes och Interfaces, Objects och References, Initialization

Tentamen OOP

Omprov 11/11. på förmiddagen.

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

TDDD78 Viktiga begrepp, del 2

OOP Objekt-orienterad programmering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektorienterad programmering Föreläsning 4

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Föreläsning 3: Booleans, if, switch

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 1 & 2 INTRODUKTION

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Programmering för språkteknologer I, VT2012. Rum

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Introduktion till Java

JAVAUTVECKLING LEKTION 3

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

TDDC77 Objektorienterad Programmering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

LÖSNINGSFÖRSLAG TENTAMEN

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

TENTAMEN OOP

Anteckningar 1: Grundläggande saker

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Typkonvertering. Java versus C

Imperativ programmering. Föreläsning 2

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Undervisning. Examination

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Programmeringsteknik I

Tentamen , Introduktion till Java, dtaa98, dtea53

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Data, typ, selektion, iteration

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Föreläsning 3-4 Innehåll

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Undervisning. Examination

Chapter 3: Using Classes and Objects

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Sammansatta datatyper Generics: Parametrisk polymorfism

Repetition av OOP- och Javabegrepp

TDDC77 Objektorienterad Programmering

Repetition av OOP- och Javabegrepp

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Transkript:

Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! jonas.kvarnstrom@liu.se 2016

Fråga kommentera avbryt!

Intro till variabler (1) Vad är en variabel? I begynnelsen fanns minnet som var fullt av heltal och minnesadressen (ett "index" för varje byte) STA 49152 // Lagra en byte på adress 49152 // Håll själv reda på att inget annat ska lagras där! LDA 49152 // Läs in en byte från adress 49152 // Håll själv reda på hur denna byte ska tolkas // (Heltal? Bokstav? Index i lista av färger? ) JMP 8282 // Hoppa till nästa instruktion på adress 8282 3 00000 64 kbyte minne 49152 (På denna sida: 6502-assembly) 65535

Intro till variabler (2) 4 00000 Sedan uppfanns etiketten (label) colornum: // Översätts till en adress, kanske 37000,.byte 03 // när man vet var det finns plats STA colornum LDA colornum JMP colornum // Lagra på namngiven minnesadress // Oops En första nivå av abstraktion! 37000 64 kbyte minne 65535

Intro till variabler (3) Abstrahera språket mer en variabel: En lagringsplats (en eller flera bytes) Ett symboliskt namn på lagringsplatsen längd = 10 höjd = 5 Bara "vettiga" operationer är möjliga längd höjd 10000 10003 10 10004 10007 5 5 Minne Minnesadressen kan bli osynlig! Men den finns ändå där

Intro till variabler (4) 6 Kan stödja fler datatyper: Strängar Listor längd höjd 10000 10003 10 10004 10007 5 längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] Minne hälsning 40000-40024 "hello" färger 50000-50020 [red, green]

Intro till variabler (5) 7 Vi kan skriva över gamla värden längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] längd höjd 10000 10003 10 47 10004 10007 5 längd = 47 # Samma variabel, # samma lagringsplats, # samma minnesadress (som vi oftast inte vet / bryr oss om!), # nytt värde hälsning 40000-40024 Minne "hello" färger 50000-50020 [red, green]

Variabler: Sammanfattning Så: En variabel används för att lagra ett värde, och består av: En lagringsplats i minnet, där ett värde kan placeras Ett symboliskt namn på lagringsplatsen, som används i koden Python längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] Programkod längd höjd hälsning färger Minne vid körning 10 5 "Hello" [red, green] 8 Variabel = en "låda" för ett värde: Värdet kan bytas ut (längd = 22), men det är fortfarande samma variabel

Värdetyper Varje värde har en typ heltal, decimaltal, Vissa språk håller inte reda på den 10 Assembler: Ingen typkontroll // Lagra 32-bitars heltal (L = Long) MOVE.L #10, längd // Läs som om det vore 32-bitars flyttal FMOVE.S längd, FP1 Värdetyp "sparas" inte, kontrolleras aldrig Inget fel signaleras Resultat: "Skumma värden" Exempel: Lagra decimaltal 3.5 4 bytes, hex 40 60 00 00 Läs som heltal, 4 bytes, hex 40 60 00 00 heltal 1080033280

Värdetyper Men de flesta, även Python, håller reda på värdets typ Även om man sällan skriver typnamnet) 11 Programkod Minne vid körning print(längd) print(10) heltalsutskrift Symboliskt namn (används i koden) längd Lagringsplats för ett värde int 00 00 00 0A 10 Heltal print(färger) print([red,green]) listutskrift räknare hälsning int 22 48 65 6C 575169900 str 22 48 65 6C 6C 6F 00 "Hello" Heltal Sträng färger + 2 fel vid körning! färger list [red, green] Lista

Variabeltyper 12 I många språk har även variabeln en typ Gäller Java, C, C++, Pascal, Ada, Men inte Python Programkod Minne vid körning Symboliskt namn (används i koden) Lagringsplats för ett värde Heltal längd 10 Heltal Heltal höjd 5 Heltal Sträng hälsning "Hello" Sträng Lista färger [red, green] Lista

Variabeltyper latent typing manifest typing 13 Java: Manifest typsystem (variabeltyp anges explicit i koden) Python: Latent typsystem (bara värdet har en typ) int längd = 10; längd är en heltalsvariabel som alltid innehåller ett heltal längd = 10 längd är en vad-som-helst-variabel som just nu innehåller ett heltal Varför variabeltyper? Varför ange dem explicit?

När vet man värdetypen? Latent typsystem: Python def send(x): # Kommer x att vara heltal här? Flyttal? Sträng, lista,? # Ingen aning förrän programmet körs får kontrolleras dynamiskt 14 Manifest typsystem: Java public void send(int x) { // Här är x ett heltal, och det vet vi vid kompilering statiskt } Kompilatorn vet mer (kan optimera mer effektivare) Vi vet mer (typerna är dokumentation)

Konsekvenser: Typkontroll 15 Python: Dynamisk typkontroll def dosomething(x): y = x + 10 Går det att addera? Kolla värdetyp vid körning Om inte numeriskt: Signalera fel >>> langd=10 >>> halsning="hello" >>> halsning+langd Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects Java: Statisk typkontroll void dosomething(int x) { int y = x + 10; } Går det att addera? Kolla variabeltyp vid kompilering Om inte numeriskt: Signalera fel Tidigare upptäckt av problem effektivare programmering Mindre typkontroll vid körning effektivare körning dynamic type checking static type checking

Konsekvenser: Val av operation 16 Python: Dynamisk typkontroll def dosomething(x): y = x + 10; Måste kolla vid körning: x heltal? Addera 10 direkt Java: Statisk typkontroll void dosomething(int x) { int y = x + 10; } x är heltal! Addera direkt x flyttal? Konvertera 10 till 10.0, addera x annat? Signalera fel!

Konsekvenser: Minnesutrymme 17 Python: Dynamisk typkontroll def dosomething(x): y = x + 10; Hur kolla typen hos b:s värde? Måste lagra typen med värdet Java: Statisk typkontroll void dosomething(int x) { int y = x + 10; } Hur kolla typen hos b:s värde? Variabelns typ är int, värdet måste ju ha samma typ x heltal 10 int x 10 delvis därför kan ett heltal ta 24 bytes Ett heltal tar 4 bytes (int), 8 bytes (long)

Brasklapp En brasklapp: Terminologin för typsystem är ofta otydlig och omtvistad Många termer brukar blandas ihop Statisk typning Statisk typkontroll Manifest typning Stark typning Det viktigaste är begreppen och dess konsekvenser 18 Även dynamisk typning (Python) har fördelar! Mindre att skriva Mer flexibilitet i vissa fall

Primitiva (grundläggande) typer i Java 20 Heltalstyper lika på alla plattformar! min max byte 8 bitar -128 127 short 16 bitar -32768 32767 int 32 bitar -2147483648 2147483647 Används sällan Vanligast! long 64 bitar -9223372036854775808L 9223372036854775807L "L" indikerar "långt heltal" Två flyttalstyper skiljer i precision och storlek float 32 bitar ±3.40282347E-45 ±3.40282347E+38 double64 bitar ±4.9406564584124654E-324 ±1.797769313486 E+308 Övrigt boolean false, true char tecken (värden 0..65535)

Stora tal 21 public class JavaTest { public static void main(string[ ] args) { int massor = 131072 * 131072; System.out.println( 128k * 128k är: + massor); } } Operationer på heltal kan ge overflow "översvämning"! Operander av typ int: [-2147483648, 2147483647] Multiplikation av 32-bitarstal: 0b100000000000000000 * 0b100000000000000000 = 0b10000000000000000000000000000000000 128k * 128k är: 0 32 bitar slutresultat

Overflow 22 public class JavaTest { public static void main(string[ ] args) { int massor = 131072 * 131072; System.out.println( 128k * 128k är: + massor); // Skriver ut 0 } } Varför overflow i Java, men inte Python? Historiskt "Så var det ju i C och C++" Effektivitet! Java: 32-bitars multiplikation, klar. Python: 64-bitars multiplikation, testa storlek, allokera minne för resultat,

Använd större datatyp 23 public class JavaTest { public static void main(string[ ] args) { long massor = 131072 * 131072; System.out.println( 128k * 128k är: + massor); } } Beräkningar använder den största av operandernas typer 131072 är en int (inget "L") 0b100000000000000000 * 0b100000000000000000 = 0b10000000000000000000000000000000000 32 bitar slutresultat Kan verka korkat Sedan expanderas detta till 64 bitar men är mer förutsägbart: 128k * 128k är: 0 Resultat beror bara på operandernas typer

Använd större datatyp (2) 24 public class JavaTest { public static void main(string[ ] args) { long massor = 131072L * 131072; System.out.println( 128k * 128k är: + massor); } } Beräkningar använder den största av operandernas typer Största operanden är long Expandera den andra "131072" till long Utför 64-bitars multiplikation 128k * 128k is: 17179869184 (2 34 ) Expandering tappar aldrig information sker automatiskt!

Farliga" typkonverteringar 25 public class JavaTest { public static void main(string[ ] args) { int sqrtpi = Math.sqrt(Math.PI); System.out.println( Sqrt(π) är: + sqrtpi); } } Konstanter och funktioner i Math-klassen Kompileringsfel! Math.sqrt returnerar en double Att konvertera double till int kan tappa information "farligt" Måste uttryckligen be om konvertering!

Typkonvertering: Casting 26 public class JavaTest { public static void main(string[ ] args) { int sqrtpi = (int) Math.sqrt(Math.PI); System.out.println( Sqrt(π) är: + sqrtpi); } } Konvertera med en cast Beräkning, sedan trunkering (avhuggning) Beräknar värdet: 1,7724538509055160272981674833411 (int) trunkerar detta till: 1 Mer: int i = (int) 271828.1828; // OK i = 271828 (trunkerat) short s = (short) 271828; // OK s = 9684 (lägsta 16 bitarna) 0b1000010010111010100

Utan casting 27 public class JavaTest { public static void main(string[ ] args) { double sqrtpi = Math.sqrt(Math.PI); System.out.println( Sqrt(π) är: + sqrtpi); } } Byt variabeltyp Beräkningar Beräknar värdet: 1,7724538509055160272981674833411 Skriver ut det

Vad är sant / falskt? 28 Python: Automatisk konvertering Java: Bara boolean-värden Falska värden: False, None, 0, 0.0,, (), [], {}, Sanna värden: Allt annat Falska värden: Sanna värden: Allt annat: false true inte sanningsvärde! längd = 10; if längd: # Om inte 0, (), False, print längd int längd = 10; if (längd) // Fel! if (längd!= 0) { System.out.println(längd); } Ofta bekvämt Kan leda till misstag Mer att skriva Ibland tydligare Kan förhindra misstag

Villkor: Enbart boolean 29 Python: Operatorer accepterar alla värden, or / and returnerar ena operanden Python # a får värdet av s, # eller "default" om s är tom a = s or "default Java: Booleska operatorer kräver true/false, returnerar true/false Java // Kompileringsfel: String a = s default ; // Fungerar: String a = s; if (s.isempty()) a = default ;

Tecken och strängar Java skiljer på: 31 Enskilda tecken Primitiv datatyp char (16-bitars) Inom apostrofer char middleinitial = 'X'; char digit7 = '7'; Strängar Objekttyp String Inom citattecken String name = Jonas ; Jämförs med == if (middleinitial == Y') { } Jämförs med equals() if (name.equals( Java )) { }

Strängar 1: Exempel 32 Index börjar på 0 Python >>> s = "Spamalot" >>> s[1] 'p' >>> s[-2] 'o' >>> len(s) 8 >>> s[len(s)-1] 't' Java String s = "Spamalot ; s.charat(1) s.charat(s.length() 2) s.length() s.charat(s.length() 1)

Strängar 2: Exempel 33 Ta ut delsträngar Python >>> s = 'Spamalot' >>> s[1:] 'pamalot' >>> s[1:3] 'pa' >>> s[:5] 'Spama' >>> s[:-1] 'Spamalo' >>> s[:] 'Spamalot' Java String s = "Spamalot ; s.substring(1) s.substring(1,3) s.substring(0,5) s.substring(0, s.length() 1) s

Strängar 3: Exempel 34 Jämförelser Python >>> "Aardvark" < "Abbot" True >>> "Queen" > "King" True >>> "a" * 4 == "aaaa" True >>> "a" in "The Holy Grail" True >>> "vers" in "universitet" True >>> "a" == "b" False Java "Aardvark".compareTo("Abbot") < 0 "Queen".compareTo("King") > 0 ("a"+"a"+"a"+"a").equals("aaaa") "The Holy Grail".contains("a") "universitet".contains("vers") "a".equals("b")

Strängar 4: Exempel Konvertera text till numeriska värden: int val = Integer.parseInt("127"); double val = Double.parseDouble("218.52"); 35 Konkatenera strängar med + int height = 100; int width = 200; String description = "Height is " + height + " and width is " + width; Skriv ut strängar med System.out.println() System.out.println("Height is " + height + " and width is " + width);

Bakgrund Vissa typer ska bara ha några få fördefinierade värden Day: Monday, Tuesday,, Sunday 37 Suit: Clubs, Diamonds, Hearts, Spades

Emulering Kan emuleras på många sätt, t.ex. med heltalskonstanter int MONDAY = 0, TUESDAY = 1,, SUNDAY = 6; public void setdayofweek(int day) { } 38 Inte typsäkert! setdayofweek(42); int BOLD = 2; setfont("times", 14, BOLD); setfont("times", BOLD, 14); // Accepteras av kompilatorn // Men vi vill ha tidiga varningar! // Vilken betyder 14 punkter fetstil? // Vilken betyder 2 pt blinkande? Stödjer nonsensoperationer int blah = TUESDAY * SUNDAY + WEDNESDAY Efter kompilering finns bara heltalen kvar svårare att tolka Värdet är 4 betyder det torsdag eller fredag? Eller kanske grönt, spader eller giraff?

Uppräkningstyper Java har stöd för uppräkningstyper (enumerated types) Man räknar upp vilka värden som finns 39 public enum Day { MONDAY, TUESDAY,, SUNDAY } Sju enumkonstanter Inga nonsens-operationer tillgängliga Namngivningskonvention: ALL_CAPS för konstanter enum-konstant = enum constant

Uppräkningstyper: Typsäkerhet Distinkt typ (inte int) typsäkerhet public enum Day { MONDAY, TUESDAY,, SUNDAY } 40 public void setdayofweek(day day) { } setdayofweek(day.tuesday); System.out.println(Day.THURSDAY); Håller reda på namn: Skriver ut "THURSDAY", inte 4

Uppräkningstyper: Index Vi kan få ut index för ett värde public enum Day { MONDAY, TUESDAY,, SUNDAY } 41 public void setdayofweek(day day) { int index = day.ordinal(); } setdayofweek(day.tuesday); // index 1 (börjar på 0)

Uppräkningstyper 42 Vi kan få ut ett värde med givet namn och en lista på alla värden public enum Day { MONDAY, TUESDAY,, SUNDAY } Day d = Day.valueOf("TUESDAY"); for (Day d : Day.values()) { System.out.println("En av dagarna är " + d); }

Jämförelse Sämsta lösningen: Konstanter utan namn if (state == 4) { if (player.hitwall()) state = 1; else ; } Gammal lösning: Namngivna heltal final static int STATE_STANDING = 1; final static int STATE_RUNNING = 4; if (state == STATE_RUNNING) { if (player.hitwall()) state = STATE_STANDING; Bäst, vid fixerat antal värden: Uppräkningsbar typ enum State { RUNNING, STANDING } if (state == State.RUNNING) { if (player.hitwall()) state = State.STANDING; 43

Labb 1: Vad, hur, och varför? jonas.kvarnstrom@liu.se 2016

"En sak i taget": Öva grunder innan det blir mer komplicerat Önskemål från studenter: Prova på kontrollstrukturer Labb 1: Intro till grunder i Java helt utan objektorientering

1) Hör/läs 2) Utför handgreppen 3) Jobba självständigt Tutorial-form: Detaljerade instruktioner "Varsågod, lär dig simma!" eller träna muskelminnet först? Fria händer under projektet!

Resultatet består inte av kod! Uppgift: "Skriv ett program som skriver ut en multiplikationstabell" Mål: Skapa tabeller? Usch, så långa instruktioner. Det struntar jag i, jag kan det här <Hacka, skriv, testa, fixa> Testet verkar skriva ut rätt värden! Inte blev det snyggt, och jag vet inte riktigt hur det fungerar, men koden gör sitt jobb så jag är klar! Mål: Lära sig programmering? Oj, så mycket intressant information! Det här måste jag läsa och fundera över. Hur Javas loopar fungerar, jämfört med Python Hur operatorn "+" fungerar för strängar och tal i Java Varför det är bra att ge konstanter symboliska namn Resultatet består av kunskap!

Många har redan använt Eclipse Få en bred utbildning, även i verktyg Mobila applikationer: Android Studio Introduktion till gemensam utvecklingsmiljö: IntelliJ IDEA (open source-version finns) Bra kodanalys, har kraftigt minskat antal rutinproblem som ger komplettering Professionalism: Var beredd att använda arbetsgivarens verktyg! Vissa protesterar först, tackar i utvärderingen Andra miljöer får användas i projektet, men kodanalys krävs

Varningar för möjliga problem (600 inspektioner ) Fixa buggar, undvik kompletteringar, lär er direkt från varningarna!

Hittar till och med duplicerad (ineffektiv) kod

Smart kodkomplettering LÄS: http://jetbrains.dzone.com/articles/top-20-code-completions-in-intellij-idea

Stöd för refactoring Refactoring = omstrukturering av koden Ofta för att förbättra design, läsbarhet, Viktigt i större projekt Exempel: Döp om "Sök och ersätt"? Kan ersätta något orelaterat också!

Stöd för refactoring Gör en metod (funktion) för många olika saker? Hitta en meningsfull del, extrahera en underfunktion! IDEA tar hand om parametrar,

Annars förskjuts hela kursen och andra kurser! Ni får bättre hjälp om handledarna kan fokusera på en labb i taget Håll takten! Labb 1 bör vara klar denna vecka Deadlines finns på nätet Professionalism: Lär er vara klara till deadline

Labb 2: Intro till objekt i Java (efter föreläsning 3) Labb 3: Hierarkier av klasser (en hund är en sorts djur) Labb 4: Hur man blir av med problem (bland annat)