WEBVTT Kind: captions; Language: fi

1
00:00:01.070 --> 00:00:04.800
Oikein hyvää huomenta kaikille
ja tervetuloa seuraamaan luentoa.

2
00:00:04.800 --> 00:00:08.380
Numero 10 ohjelmat yksi kurssilla.

3
00:00:08.380 --> 00:00:10.280
Kevät kaksikymmentäneljä edelleen menossa.

4
00:00:10.280 --> 00:00:13.400
Otetaan pari muistutusta
tähän luennon alkuun.

5
00:00:13.400 --> 00:00:18.230
Arkityön suunnitelma tulee
hyväksyttää ohjaajalla tällä viikolla.

6
00:00:18.230 --> 00:00:22.340
Ja se tarkoittaa silloin sitä niin,
että se merkintä siellä tiimissä

7
00:00:22.340 --> 00:00:26.170
pitää olla olla tän
viikonloppuun mennessä.

8
00:00:26.170 --> 00:00:32.770
Ja ja ja jos nyt tosissaan sitten menette
ja kun menette sinne ohjauksiin niin

9
00:00:32.770 --> 00:00:37.140
huomioikaa se että siellä on ruuhkaa
siellä on varmasti muitakin opiskelijoita

10
00:00:37.140 --> 00:00:41.220
aika paljonkin ja meillä on nyt pikkuisen
ekstraa miehitystä varattu tuohon torstaille

11
00:00:41.220 --> 00:00:45.410
ja perjantaille ohjauksiin niin etäohjauksen
kuin lähiö ohjauksiin, mutta että

12
00:00:45.410 --> 00:00:49.510
hyvä hyvä on siihen varautua siinä
etäohjauksessa on tietysti se etu niin että

13
00:00:49.510 --> 00:00:52.070
sinne voi sen ikään kuin vuoronumeron.

14
00:00:52.070 --> 00:00:55.640
Tai tämmöisen niinku tiketin ottaa ja
sitten odotella sitä omaa vuoroaan rauhassa

15
00:00:55.640 --> 00:00:59.560
omalla koneella lähiohjauksessa gorilla
tietysti joutuu siellä paikan päällä

16
00:00:59.560 --> 00:01:02.930
sitten istuskelemaan niin
pitkään, että saa sen.

17
00:01:02.930 --> 00:01:07.630
Suunnitelmansa hyväksyttyä, jos nyt jostakin
ylitsepääsemmättömästä syystä, sitä suunnitelmaa

18
00:01:07.630 --> 00:01:12.770
ei juuri tällä viikolla pääse pääse hyväksyttämään
niin niin niin ei se elämä siihen nyt

19
00:01:12.770 --> 00:01:17.260
kuitenkaan lopu, että sitten ensi
viikolla asian asian voi hoitaa.

20
00:01:17.260 --> 00:01:20.370
Mutta tällä viikolla nyt joka tapauksessa
periaatteessa deadline kuitenkin

21
00:01:20.370 --> 00:01:22.950
on sitten toinen muistutus
tuosta dubbaus näytteestä.

22
00:01:22.950 --> 00:01:24.870
Sehän on osa kurssin suoritusta.

23
00:01:24.870 --> 00:01:29.250
Myöskin eilen katsottiin deckerin
käyttöä ja ja sitä tuossa debug

24
00:01:29.250 --> 00:01:33.750
näytteessä on myöskin
tarkoitus sitten osoittaa ja.

25
00:01:33.750 --> 00:01:40.230
Siellä on tosissaan luennon 9 kohdalla se
linkki sinne debugmateriaalin missä käydään tota

26
00:01:40.230 --> 00:01:45.990
samaa asiaa läpi mitä eilen ihan konkreettisesti
näytin siinä dubbaus näyttäessään on semmoinen

27
00:01:45.990 --> 00:01:50.700
pieni tehtävä joka pitää debugerille
avulla sitten suorittaa ja.

28
00:01:50.700 --> 00:01:53.680
Ja siinä tällä keväällä on.

29
00:01:53.680 --> 00:01:56.540
On se suoritustapa sitten
sellainen niin että sitten tehdään

30
00:01:56.540 --> 00:01:59.240
semmoinen pieni videoklippi halutessaan.

31
00:01:59.240 --> 00:02:04.720
Voi myöskin demokraat näytteen antaa
ohjauksessa ohjaajalle ja voi olla nopeampi.

32
00:02:04.720 --> 00:02:09.150
Sitten jossakin tapauksessa näyttää ohjaajalle,
että osa sitä debuggeria käyttää niin

33
00:02:09.150 --> 00:02:15.300
kumpi kumpi tapa vaan tänä keväänä on ihan OK,
mutta että jos nyt näistä joistakin jommasta

34
00:02:15.300 --> 00:02:19.460
kummasta näistä kysymyksiä heidän niin voiton
että chattiin laittaa taikka laittaa sitten

35
00:02:19.460 --> 00:02:21.920
tuonne meidän opettajien
sähköpostilistalle.

36
00:02:21.920 --> 00:02:27.270
Viesti ja.

37
00:02:27.270 --> 00:02:30.050
Otetaan vielä muutama
esimerkki noista taulukoista.

38
00:02:30.050 --> 00:02:32.630
Eli kuten eilen mainitsin, niin
tavallisesti taulukon alkiot

39
00:02:32.630 --> 00:02:35.650
liittyy jollakin tavalla
loogisesti toisiinsa.

40
00:02:35.650 --> 00:02:39.340
Eli tää tarkoittaa sitä niin, että.

41
00:02:39.340 --> 00:02:45.110
Että se ajatus näiden taulukoiden
käyttämisessä olisi sellainen, että ne asiat

42
00:02:45.110 --> 00:02:49.350
arvot, joita sinne taulukkoon tallennetaan
niin eivät ole vähän niinku sitä

43
00:02:49.350 --> 00:02:52.810
sun tätä vaan että niillä
on joku yhteys toisiinsa.

44
00:02:52.810 --> 00:02:59.010
Eli eilen nähtiin sellainen esimerkki
vai nähtiinkö ei ehkä nähty, mutta

45
00:02:59.010 --> 00:03:02.610
joka tapauksessa niinku yks yks esimerkki
voisi olla sellainen, että meillä

46
00:03:02.610 --> 00:03:05.930
on vaikkapa viikon
päivien keskilämpötilat.

47
00:03:05.930 --> 00:03:08.080
Eli tuossa nyt jos ajatellaan.

48
00:03:08.080 --> 00:03:10.250
Mitenkähän ne tällä
viikolla nyt on mennyt?

49
00:03:10.250 --> 00:03:13.510
Leikitään nyt, että tällä viikolla
ne voisi olla jotain tuollaista.

50
00:03:13.510 --> 00:03:17.400
Eli siinä on nyt 123456,
vielä yksi kappale.

51
00:03:17.400 --> 00:03:22.900
Lämpötiloja sunnuntaita kohti kylmenee,
eli nää nyt selkeästi liittyy toisiinsa.

52
00:03:22.900 --> 00:03:27.960
Tuonne pitää tietysti laittaa
taulukon tyyppiä taulukon

53
00:03:27.960 --> 00:03:30.440
tyyppistä muistuttava hakasuljemerkintä.

54
00:03:30.440 --> 00:03:33.240
Eli nyt siinä on meillä kysymyksessä 7.

55
00:03:33.240 --> 00:03:39.090
Kappaletta pitkä double taulukko ja
näistä nyt jokainen ilmentää lämpötilaa.

56
00:03:39.090 --> 00:03:40.990
Kunakin viikonpäivänä.

57
00:03:40.990 --> 00:03:44.770
No sitten tavallaan se vähän niinku
toinen ääripää voisi olla sellainen

58
00:03:44.770 --> 00:03:48.040
niin että meillä voisi
olla vaikka henkilön tiedot.

59
00:03:48.040 --> 00:03:49.840
Eli.

60
00:03:49.840 --> 00:03:55.910
Erilaisia tietoja henkilöstä sanotaan nyt
vaikkapa niin, että tässä olisi vaikkapa.

61
00:03:55.910 --> 00:04:01.030
Vaikkapa henkilö jonkunlaisen on vuosina
ja osavuosina leikitään nyt tätä tuo

62
00:04:01.030 --> 00:04:06.050
voisi kuvastaa sitä ja sitten voisi olla
vaikka vaikka pituus ja sitten esimerkiksi

63
00:04:06.050 --> 00:04:12.570
paino ja sitten vaikka
joku pankkitilin saldo eli.

64
00:04:12.570 --> 00:04:15.020
Joo tavallaan nää liittyy toisiinsa.

65
00:04:15.020 --> 00:04:19.240
Ne liittyy siihen henkilöön.

66
00:04:19.240 --> 00:04:24.270
Jaaha mulla rupesi naapuri
tekemään remppaa juuri sopivasti.

67
00:04:24.270 --> 00:04:26.190
Koitetaan.

68
00:04:26.190 --> 00:04:28.710
Jospa se nyt ei hirveästi
hirveästi tuossa häiritsisi.

69
00:04:28.710 --> 00:04:31.930
Eli kyllä nämä liittyy
toisiinsa, mutta sinänsä nää arvot

70
00:04:31.930 --> 00:04:34.690
ovat vähän niinku eri kategoriasta kaikki.

71
00:04:34.690 --> 00:04:40.240
Eli tossa on ikä tuossa on pituus ja
sitten jotakin muuta eli tää on vähän

72
00:04:40.240 --> 00:04:44.710
niinku tietyssä mielessä pikkuisen
väärä tapa käyttää taulukkoa koska nää

73
00:04:44.710 --> 00:04:49.230
ei sinänsä nää arvot liity
konkreettisesti toisiinsa.

74
00:04:49.230 --> 00:04:52.730
Eli jos me haluttaisiin nyt vaikkapa.

75
00:04:52.730 --> 00:04:56.200
Henkilön tiedot tallentaa tämmöiseen
johonkin tietorakenteeseen, niin

76
00:04:56.200 --> 00:05:00.570
siihen on sitten muunlaisia
tietorakennemalleja olemassa.

77
00:05:00.570 --> 00:05:05.380
Se sharpin erityisesti semmoinen tota.

78
00:05:05.380 --> 00:05:11.870
No joo pari tulee mieleen elikkä ensinnäkin
oliot eli olijoilla voi tehdä erikseen

79
00:05:11.870 --> 00:05:16.420
kenttiä ja ikäkentän ja
pituuskentän ja niin edelleen.

80
00:05:16.420 --> 00:05:21.890
Nythän nämä ovat vähän niinku lukuja jotka
jotka vaan on lähetetty tälleen yksi taulukkoon

81
00:05:21.890 --> 00:05:26.240
toinen mahdollisuus mikä modernissa
se on mahdollista on tämmöinen monikko.

82
00:05:26.240 --> 00:05:32.290
Eli eli tämmöisten.
Tällä tällä tavalla.

83
00:05:32.290 --> 00:05:38.070
Tavalla tietojen tallentaminen
ei ole suositeltavaa.

84
00:05:38.070 --> 00:05:41.720
Aa tähän tarkoitukseen.

85
00:05:41.720 --> 00:05:46.060
Paremmin sopivat luokat
tietueet tai monikot.

86
00:05:46.060 --> 00:05:48.500
Näitä ei tällä kurssilla
juurikaan käsitellä.

87
00:05:48.500 --> 00:05:54.100
Me seuraavalla luennolla pikkuisen käsitellään
noita luokkia ja luokista tehtyjä olijoita,

88
00:05:54.100 --> 00:05:58.300
mutta tavallaan tämmöisen vähän niinku
monimutkaisempien tietorakenteiden tekeminen jätetään

89
00:05:58.300 --> 00:06:05.140
ohjelmointi 2 kurssille ja nyt oikeastaan tällä
kurssilla käsitellään vaan vaan tätä tilannetta

90
00:06:05.140 --> 00:06:11.660
missä meillä on on on tavallaan vähän niinku yksi
ja samaa jutskaa eli jutskaa liittyvät liittyvät

91
00:06:11.660 --> 00:06:14.410
lukuarvot tai merkkijonot tai vastaavat.

92
00:06:14.410 --> 00:06:19.100
Arvot yksi taulukossa ja niitä sitten
automaattisesti käsitellään, jotta

93
00:06:19.100 --> 00:06:22.950
voidaan esimerkiksi lukea nyt sitten
vaikka tai laskea keskiarvo tai jotain

94
00:06:22.950 --> 00:06:27.810
muuta tämmöisiä tunnuslukuja jonkun
keskiarvon laskeminen vaikkapa henkilön

95
00:06:27.810 --> 00:06:30.780
tiedoston tässä ei olisi mitään mieltä.

96
00:06:30.780 --> 00:06:35.970
Eli eli keskiarvo näistä 4 asiasta ei
varsinaisesti oikein tarkoita mitään, mutta

97
00:06:35.970 --> 00:06:41.570
joo, elikkä siinä nytten tavallaan semmoinen
perus peruskäyttötilanne nyt tuolle taulukolle

98
00:06:41.570 --> 00:06:44.950
olisi kuitenkin tuo, että
ne alkiot liittyy toisiinsa.

99
00:06:44.950 --> 00:06:49.440
No otetaan sitten muutama muu asia
vielä taulukoihin liittyen, elikkä

100
00:06:49.440 --> 00:06:53.390
nyt meillä taulukon alkioilla
on aina oltava jokin.

101
00:06:53.390 --> 00:06:57.690
Kiinteä tyyppi, kuten kaikilla muillakin
muuttujilla tehdään nyt vaikkapa stringtaulukko

102
00:06:57.690 --> 00:07:03.750
tähän ja lähdetään lähdetään siihen
siihen nyt laittamaan henkilöiden nimiä.

103
00:07:03.750 --> 00:07:08.970
Elikkä siellä on taas antti jussi ja jonne
ja sitten vaikka joku kolmas nimi vielä.

104
00:07:08.970 --> 00:07:12.510
Mutta nyt jos mä yritän laittaa
tänne jonkun muun tyyppisen alkion kun

105
00:07:12.510 --> 00:07:15.860
mitä mitä tää tyyppi täällä
edustaa niin se ei onnistu.

106
00:07:15.860 --> 00:07:21.450
Tästä tulee käännösvirhe käynyt converter
expression blaa into string eli tää on.

107
00:07:21.450 --> 00:07:24.490
Tää on sama käännösvirhe
joka aina muulloinkin.

108
00:07:24.490 --> 00:07:28.180
Tulee, jos me yritetään muuttua
niin sisällöksi sijoittaa jotakin

109
00:07:28.180 --> 00:07:31.920
sellaista arvoa joka
siihen tyyppiin ei sovi.

110
00:07:31.920 --> 00:07:37.450
Ihan vastaavasti jos mulla olisi.
Olisi vaikka inkluvut.

111
00:07:37.450 --> 00:07:42.460
Int luvut ja sitten
sinne 1 2, 3 ja sitten.

112
00:07:42.460 --> 00:07:46.000
Joku string tyyppinen asia
ja yritetään sinne laittaa.

113
00:07:46.000 --> 00:07:52.350
Ihan sama juttu eli kannat convert
blaa blaa eli tämä ei ole mahdollista.

114
00:07:52.350 --> 00:07:58.210
No siinä siinä nyt pari esimerkkiä tästä
vahvasta ja staattisesta tyyppityksestä.

115
00:07:58.210 --> 00:08:03.930
Jossakin muissa ohjelmointikieli joku
tän tyyppinen tai tän tapainen taulukon

116
00:08:03.930 --> 00:08:08.620
luominen kuitenkin voi olla mahdollista
ja siellä ehkä taustalla sitten tämmöisessä

117
00:08:08.620 --> 00:08:12.850
tilanteessa saattaa tapahtua merkkijonoksi
muuttaminen siellä taustalla pellin

118
00:08:12.850 --> 00:08:15.410
alla ikään kuin ohjelmoijien näkemättä.

119
00:08:15.410 --> 00:08:19.670
Eli mä itse pidän tätä siinä mielessä aika
turvallisena tilanteena ohjelmoijalle, että

120
00:08:19.670 --> 00:08:23.230
sinne ei ikään kuin vahingossa voi
mennä vaikkapa tuosta nelosesta.

121
00:08:23.230 --> 00:08:29.440
Muutettua merkkijonoa, jolloinka sitten taas
voidaan ajatella, että eihän se ole se alkuperäinen

122
00:08:29.440 --> 00:08:33.890
nelonen vaan se on merkkijonon
nelonen ja ne ovat 2 2 eri asiaa.

123
00:08:33.890 --> 00:08:38.630
Tässä nyt varmaan sitten saataisiin
väittelyn kahvihuoneessa herkästi aikaiseksi,

124
00:08:38.630 --> 00:08:43.010
mutta näin tää nyt se ESR
pissa kuitenkin toimii.

125
00:08:43.010 --> 00:08:45.870
No sitten otetaan taulukon.

126
00:08:45.870 --> 00:08:50.600
Sisällä tapahtuva alkioiden
vaihto otetaan tuosta nytten.

127
00:08:50.600 --> 00:08:54.740
Vähän vähän kopiota tuosta äsken
tekemästäni luvut taulukosta.

128
00:08:54.740 --> 00:09:00.160
Eli siinä mulla nyt on on 3
kappaletta pitkä taulukko ja nyt ajatus

129
00:09:00.160 --> 00:09:03.500
voisi olla vaikkapa
sellainen että vaihdetaan.

130
00:09:03.500 --> 00:09:07.440
Vaihdetaan ensimmäinen ja viimeinen.

131
00:09:07.440 --> 00:09:11.350
Alkio jopaiseen eli tehdään
tämmöinen niin sanottu swap operaatio.

132
00:09:11.350 --> 00:09:13.340
Laitetaan sinne nyt vielä pari
kappaletta lisää, niin tulee

133
00:09:13.340 --> 00:09:15.560
vähän mielenkiintoisempi
tästä esimerkistä.

134
00:09:15.560 --> 00:09:18.820
Eli leikitään nyt että tää voisi olla joku
tosi pitkäkin taulukko, jolloinka ei ole

135
00:09:18.820 --> 00:09:24.490
niinku ihan hirveän selvää se että
mikä se missä kohtaa se viimeinen on.

136
00:09:24.490 --> 00:09:34.120
No ensimmäinen alkio sijaitsee
paikassa nolla, eli tämän ensimmäisen.

137
00:09:34.120 --> 00:09:36.280
Joo pahoittelut.

138
00:09:36.280 --> 00:09:39.840
En tiedä kuuluuko tuo ääni
sinne striimiin asti, mutta mulla

139
00:09:39.840 --> 00:09:43.730
mulle se ainakin kuuluu aika selkeästi.
Joo.

140
00:09:43.730 --> 00:09:48.410
Jotakin porausta siellä tapahtuu, mutta OK
elikkä se luvut taulukon aivan ensimmäinen.

141
00:09:48.410 --> 00:09:50.930
Alkio sijaitsee paikassa nolla.

142
00:09:50.930 --> 00:09:55.390
No nyt jos mä haluan laittaa
siihen paikkaan nolla jonkin luvun

143
00:09:55.390 --> 00:09:58.490
niin se tapahtuu ihan
sijoittamalla siihen lukuun.

144
00:09:58.490 --> 00:10:01.450
Heitetään nyt sinne vaikkapa
miinus ykkönen ja katsotaan

145
00:10:01.450 --> 00:10:03.370
että miltä tuo tilanne näyttää.

146
00:10:03.370 --> 00:10:07.870
Itse asiassa mä voisin laittaa tuohon kohtaan
nyt keskeytyskohdan, joka tarkoittaa sitä että

147
00:10:07.870 --> 00:10:12.310
mun ohjelma pysähtyy tähän riville
kolmekymmentäkolme ja tätä riviä kolmekymmentäkolme ei

148
00:10:12.310 --> 00:10:15.140
ole vielä suoritettu, eli katsotaan
nyt ihan muistin virkistämiseksi.

149
00:10:15.140 --> 00:10:17.380
Ja mitä tuo tuolla?

150
00:10:17.380 --> 00:10:22.300
Ohjelman tilassa käytännössä
tarkoittaa, jospa tuo devokerin

151
00:10:22.300 --> 00:10:24.680
lähtisi siitä nyt käyntiin noin.

152
00:10:24.680 --> 00:10:27.760
Eli meillä on siellä nytten
keskusalueella täällä threads

153
00:10:27.760 --> 00:10:29.880
and variables paneelissa näkyvillä.

154
00:10:29.880 --> 00:10:35.460
Tää luvut taulukko ja siellä tietysti nyt
sitten nää luvut 1 2 3 ja niin edelleen, mutta

155
00:10:35.460 --> 00:10:40.460
nyt suoritetaan toi rivi kolmekymmentäkolme
klikkaamalla tuosta step lintu.

156
00:10:40.460 --> 00:10:44.740
Ja nyt niin kun nähdään niin toi
ensimmäinen alkio siellä vaihtui

157
00:10:44.740 --> 00:10:48.380
keltaiseksi väriksi eli
tarkoittaa sitä että se on.

158
00:10:48.380 --> 00:10:52.660
Asia, joka juuri siinä äsken muuttui
eli siellä on nytten toi miinus ykkönen.

159
00:10:52.660 --> 00:10:56.360
No niin, mutta sitä mä en nyt oikeasti
halunnut tässä tehdä, vaan mä halusin, halusin

160
00:10:56.360 --> 00:11:01.820
vaihtaa sen vihoviimeisen ja
niin ensimmäisiä vihoviimeisen.

161
00:11:01.820 --> 00:11:03.720
Alkioiden paikat keskenään.

162
00:11:03.720 --> 00:11:11.580
No sen aivan vihoviimeisen
paikan mä saan sanomalla luvut.

163
00:11:11.580 --> 00:11:14.040
Tai hetkinen otetaan vielä
vielä pykälä taaksepäin.

164
00:11:14.040 --> 00:11:19.710
Joo.
Elikkä se vihoviimeinen.

165
00:11:19.710 --> 00:11:22.050
No niin sori nyt mulla
menee taas ajatukset.

166
00:11:22.050 --> 00:11:28.240
Varmaan tuosta porauksessa meni
meni sekaisin eli luvut taulukon.

167
00:11:28.240 --> 00:11:31.360
Pituus.
Saadaan.

168
00:11:31.360 --> 00:11:35.160
Pyytämällä.
Luvut.

169
00:11:35.160 --> 00:11:36.960
Lent eli.

170
00:11:36.960 --> 00:11:39.040
Tämä antaa meille sen
luvut taulukon pituuden.

171
00:11:39.040 --> 00:11:44.320
Olipa se sitten kuinka pitkä
vaan OK no nyt tässä tapauksessa

172
00:11:44.320 --> 00:11:52.310
mulla on 12345678
kappaletta pitkä taulukko.

173
00:11:52.310 --> 00:11:57.020
Ja muutetaan tuo tuo nyt
eri eri luvuksi, niin ei ole

174
00:11:57.020 --> 00:12:00.700
juuri se vihoviimeinen indeksi siinä.

175
00:12:00.700 --> 00:12:05.340
Eli se tarkoittaa silloin sitä niin, että
tää vihoviimeinen alkio sijaitsee paikassa.

176
00:12:05.340 --> 00:12:07.940
7.

177
00:12:07.940 --> 00:12:15.460
Vihoviimeinen alkio sijaitsee
paikassa eli indeksissä 7.

178
00:12:15.460 --> 00:12:19.320
Ja tähän päästään tietysti sanomalla luvut.
Lent.

179
00:12:19.320 --> 00:12:23.300
-1 eikö vaan eli kun se
luvut lenkit on 8 niin silloin

180
00:12:23.300 --> 00:12:25.720
se vihoviimeisen indeksin luku on.

181
00:12:25.720 --> 00:12:29.220
On 7 eli eli siitä
pituudesta vähennetty ykkönen.

182
00:12:29.220 --> 00:12:34.100
No tää tarkoittaa silloin sitä, että me
päästään käsiksi siihen luvut taulukon

183
00:12:34.100 --> 00:12:38.560
viimeiseen alkioon sanomalla
luvut hakasuluissa luvut.

184
00:12:38.560 --> 00:12:40.660
Lenkit -1.

185
00:12:40.660 --> 00:12:44.520
Että saattaa näyttää hieman oudolta,
mutta näin se näin se tapahtuu.

186
00:12:44.520 --> 00:12:48.630
Täällä on cesarpissa tullut
tässä uudessa versiossa tämmöinen.

187
00:12:48.630 --> 00:12:54.870
Entä expression tapa tehdä tää sama asia, mutta
ei katsota sitä nytten, mutta mä haluan nytten

188
00:12:54.870 --> 00:12:59.620
muuttaa sen vaikkapa arvon -1 että tehdään tää
taas siellä debugerissä katsomalla rivi riviltä

189
00:12:59.620 --> 00:13:05.160
että miten tää tapahtuu eli siitä
f vitosella peli käyntiin ja.

190
00:13:05.160 --> 00:13:09.540
Debugkeri auki eli nyt ollaan rivillä
kolmekymmentäkahdeksan tai luvut taulukko on juuri

191
00:13:09.540 --> 00:13:15.360
sellainen niin kun mä äsken tein sen seiska
paikassa olevan alkion arvo on vielä luku 9,

192
00:13:15.360 --> 00:13:21.250
mutta nytten step lintu ainakin että
klikkaamalla niin se vihoviimeinen.

193
00:13:21.250 --> 00:13:23.200
Alkio sieltä muuttuu miinus ykköseksi.

194
00:13:23.200 --> 00:13:26.650
No niin hyvä elikkä päästiin käsiksi
siihen, että mihin miten sitä viimeistä

195
00:13:26.650 --> 00:13:30.050
alkiota käsitellään ja se
mitä mä nyt halusin tehdä.

196
00:13:30.050 --> 00:13:34.870
Tässä on vaihtaa sen
ensimmäisen ja viimeisen paikat.

197
00:13:34.870 --> 00:13:39.120
Tota noin niin sisällöt
keskenään eli otetaan sieltä.

198
00:13:39.120 --> 00:13:41.700
Vihoviimeistä.

199
00:13:41.700 --> 00:13:48.120
Alkio vihoviimeistä alkiosta sisältö ja
viskataan se sinne aivan ekaan alkioon.

200
00:13:48.120 --> 00:13:55.010
Katsotaan mitä käy.
Laitetaan siihen breakpoint.

201
00:13:55.010 --> 00:13:58.450
Ja nähdään niin, että siellä
ekassa paikassa on vielä ykkönen.

202
00:13:58.450 --> 00:14:02.510
Viimeisessä paikassa on luku 9 ja
nyt steppi lintu niin sinne ekaan

203
00:14:02.510 --> 00:14:06.330
tulee ysi, mutta viimeinen
jää myöskin ysikasi.

204
00:14:06.330 --> 00:14:09.730
Eli nyt se ykkönen mikä siellä
aivan ensimmäisessä paikassa oli niin

205
00:14:09.730 --> 00:14:12.870
tavallaan hävisi pois eikä
sitä enää ole olemassa.

206
00:14:12.870 --> 00:14:17.310
Eli jos mä haluan vaihtaa näiden lukujen
paikat keskenään niin mä en voi suoraan

207
00:14:17.310 --> 00:14:22.490
sitä näin tehdä vaan mun
täytyy ensin ottaa talteen se.

208
00:14:22.490 --> 00:14:26.790
Mitä siellä aivan ekassa oli ikään
kuin tämmöiseen tilapäiseen muuttujaan.

209
00:14:26.790 --> 00:14:29.490
Laitanpa vielä kertaalleen
siitä toi peli käyntiin eli nyt

210
00:14:29.490 --> 00:14:33.190
mulla on siellä se
aivan aivan ensimmäisen.

211
00:14:33.190 --> 00:14:38.970
Öö alkion arvo tallessa tämmöisessä
tilapäisissä muuttujassa,

212
00:14:38.970 --> 00:14:44.090
jotta kun mä teen tämän
rivin 40 noin stepintulla.

213
00:14:44.090 --> 00:14:47.110
Niin nyt tän seurauksena se.

214
00:14:47.110 --> 00:14:52.900
Ysi minkä takia nää kaikki
meni keltaiseksi hetkinen.

215
00:14:52.900 --> 00:15:03.720
Outoa.
Miksi nämä kaikki menivät keltaiseksi?

216
00:15:03.720 --> 00:15:09.060
No nyt en osaa siihen vastata, mutta joka
tapauksessa niin nytten viho ensimmäisiä vihoviimeisen

217
00:15:09.060 --> 00:15:15.040
alkion sisällöt on ysi ja nyt tän jälkeen mä
olisin valmis täältä talteen nimisestä muuttujasta

218
00:15:15.040 --> 00:15:19.930
pullaauttamaan sen ykkösen
sinne vihoviimeisen.

219
00:15:19.930 --> 00:15:22.240
Taulukon paikkaan.

220
00:15:22.240 --> 00:15:29.260
Eli tällä tavalla tän alkioiden
vaihtaminen, niin on hieman.

221
00:15:29.260 --> 00:15:31.880
Pidempi prosessi kun
vaan yksi rivinen juttu.

222
00:15:31.880 --> 00:15:37.210
Mutta nyt mä voin sieltä talteen
muuttujasta sen sinne pamauttaa.

223
00:15:37.210 --> 00:15:41.930
Otetaan tuohon nytten kun siellä sappi sitä
nyt niin kovasti tuolla tuolla ehdottelee

224
00:15:41.930 --> 00:15:45.150
niin katsotaan miltä se näyttää
eli sen voi tosissaan tehdä.

225
00:15:45.150 --> 00:15:49.610
Myöskin näin tässä uudessa CSR pissa
tämä ei ole varsinaisesti semmoinen

226
00:15:49.610 --> 00:15:53.250
mitä tarvitsee mitenkään muistaa,
mutta näköjään se tuolla tavalla

227
00:15:53.250 --> 00:16:01.430
uudessa cesar aika näppärästi onnistuu.

228
00:16:01.430 --> 00:16:04.560
Laitetaan se tuohon muistiin hyvä.

229
00:16:04.560 --> 00:16:09.220
Eli siinä on nytten yksi esimerkki siitä,
että miten ensimmäistä alkiota käsitellään,

230
00:16:09.220 --> 00:16:14.190
miten vihoviimeistä alkiota käsitellään
ja jos niitä taulukon sisältämiä arvoja

231
00:16:14.190 --> 00:16:18.890
halutaan keskenään muuttaa ja vaihtaa
ja ja näin operoida niillä, niin sitten

232
00:16:18.890 --> 00:16:22.550
tarvitsee ottaa huomioon se, että se
vanha arvo sieltä totta kai häviää ihan

233
00:16:22.550 --> 00:16:26.680
niinku mistä tahansa muuttujastakin.

234
00:16:26.680 --> 00:16:31.750
Seuraava esimerkki leikitään nyt,
että me vielä käsitellään noita yllä

235
00:16:31.750 --> 00:16:35.540
tehtyjä lukuja ja halutaan
tehdä tämmöinen funktio.

236
00:16:35.540 --> 00:16:38.700
Tai no oikeastaan aliohjelma,
joka tulostaa asioita,

237
00:16:38.700 --> 00:16:42.270
mutta se tulostaa vain sellaiset arvot.

238
00:16:42.270 --> 00:16:46.270
Jotka ovat täsmälleen ykkönen eli
tää mun funktion kutsuminen voisi

239
00:16:46.270 --> 00:16:49.850
tapahtua seuraavasti,
annetaan sinne argumentteina.

240
00:16:49.850 --> 00:16:53.410
Ensinnäkin siis tulostaa jos
voisi olla nyt tän funktion nimi.

241
00:16:53.410 --> 00:16:55.250
Laitan siihen vaikka tulosten jos yksin.

242
00:16:55.250 --> 00:16:58.790
Ehkä se on vielä parempi noin.

243
00:16:58.790 --> 00:17:05.150
Ja ja tän tehtävä olisi seuraava, elikkä
tulostaa ne luvut jotka täsmää juurikin tähän

244
00:17:05.150 --> 00:17:09.240
jälkimmäiseen argumentin arvoon eli tämmöistä
funktiota ei tietenkään ole vielä olemassa

245
00:17:09.240 --> 00:17:15.390
ja se pitää nyt tehdä, mutta ajatus
nyt olisi se se, että että tota.

246
00:17:15.390 --> 00:17:20.110
Tästä taulukosta tulostetaan ne, jotka
täsmää tähän jälkimmäiseen argumenttiin.

247
00:17:20.110 --> 00:17:24.560
Hyvä, lähdetään sitä
funktiota toteuttamaan.

248
00:17:24.560 --> 00:17:27.310
Ja tosiaan vastaus
tuohonzetti kysymykseen.

249
00:17:27.310 --> 00:17:32.260
Siis tämä hattu ykkönen tarkoittaa
siis juurikin sitä sitä samaa

250
00:17:32.260 --> 00:17:34.160
kuin mitä tässä kirjoitin
tälleen pitkästi.

251
00:17:34.160 --> 00:17:39.860
Eli se vihoviimeinen alkio sieltä luvut taulukosta
niin voidaan voidaan niinku ilmaista lyhyesti

252
00:17:39.860 --> 00:17:44.520
tällä tavalla tässä uudessa sarvissa
niinku sanoin niin tää on tämmöinen.

253
00:17:44.520 --> 00:17:47.820
Onkohan tää nimeltään are
expression viralliselta nimeltään se

254
00:17:47.820 --> 00:17:49.910
hesarissa ja näitä ei
tällä kurssilla käsitellä.

255
00:17:49.910 --> 00:17:54.640
Mutta kuten kuten viime luennolla
sanoin, niin niin tähän cesar tupaa

256
00:17:54.640 --> 00:17:57.890
vuosittain tulemaan kaikkia
uusia pikku ominaisuuksia.

257
00:17:57.890 --> 00:18:00.350
Niitä on tietysti mahdotonta
tässä käydä läpi, mutta että

258
00:18:00.350 --> 00:18:05.540
tää on tää on yksi sellainen mitä mitä.
Mä oon varmaan olisi.

259
00:18:05.540 --> 00:18:08.180
Olisi kiva ainakin itse
käyttää omassa kodissa niin

260
00:18:08.180 --> 00:18:10.030
se on paljon lyhyempi kuin tämmöinen.

261
00:18:10.030 --> 00:18:15.170
Mutta mutta joo ei ole, ei tarvitse
tuota hattu ykköstä sinänsä muistaa.

262
00:18:15.170 --> 00:18:19.110
Joo OK eli.

263
00:18:19.110 --> 00:18:23.030
Public static sillä lähdetään
liikkeelle ja tän aliohjelman

264
00:18:23.030 --> 00:18:25.510
tarkoitus on nyt vain tulostaa asioita.

265
00:18:25.510 --> 00:18:28.710
Tän ei tarvitse nyt palauttaa
mitään, jotenka mä laitan siihen

266
00:18:28.710 --> 00:18:31.680
paluuarvon tyypiksi tyhjän eli voidin.

267
00:18:31.680 --> 00:18:35.870
No nimi opastetaan tuohon
paikalleen sitten sulut ja aaltosut

268
00:18:35.870 --> 00:18:38.820
niinku kaikkiin aliohjelmiin aina tulee.

269
00:18:38.820 --> 00:18:42.490
No nyt katsotaan näitä argumentteja
vielä kerran eli tää luvut.

270
00:18:42.490 --> 00:18:47.050
Muuttujan nimi on täällä nyt asia, joka
viittaa intti taulukkoon eli silloin tämän

271
00:18:47.050 --> 00:18:51.250
parametrin tyyppikin täytyy olla inttitaulukko
ja ne on nyt jotain lukuja, joista mä

272
00:18:51.250 --> 00:18:55.940
haluan tulostaa osan, jotenka mä
voin antaa sille nimeksi luvut.

273
00:18:55.940 --> 00:18:58.010
Ja.

274
00:18:58.010 --> 00:19:01.800
Seuraava argumentti täällä
on ykkönen ja sen tehtävä

275
00:19:01.800 --> 00:19:08.250
tai tarkoitus on merkitä sitä asiaa.
Aa joka.

276
00:19:08.250 --> 00:19:10.210
Itse asiassa nyt mä annoin
tälleen huonon nimen.

277
00:19:10.210 --> 00:19:12.730
Joo anteeksi otetaan, se
otetaan kohta takaisin.

278
00:19:12.730 --> 00:19:18.070
Elikkä tää jälkimmäinen
argumentti tarkoittaa sitä.

279
00:19:18.070 --> 00:19:24.470
Joka me halutaan tulostaa eli se on joku arvo, jonka
tässä mätessa me tulostetaan tästä luvuntaulusta

280
00:19:24.470 --> 00:19:29.470
arvo ja nythän siis tän funktion pointti olisi
tulostaa mikä tahansa sellainen arvo, joka

281
00:19:29.470 --> 00:19:32.610
me täällä argumenttina annetaan
myös jokin muu kuin ykkönen.

282
00:19:32.610 --> 00:19:35.000
Eli nyt mä menin itsekin
tässä sekaisin eli nimenomaan

283
00:19:35.000 --> 00:19:38.300
se tulosta jos oli tässä hyvä nimi.

284
00:19:38.300 --> 00:19:42.060
Eli tulostetaan luvut taulukosta
se arvo jos täsmää tuohon

285
00:19:42.060 --> 00:19:45.640
tuohon arvoon kaikki sellaiset arvot.

286
00:19:45.640 --> 00:19:49.120
Tietysti hyvin synteettinen esimerkki
ja ja ja ehkä voi olla vaikea

287
00:19:49.120 --> 00:19:53.120
keksiä nyt juuri tällaiselle
funktiolle todellista käyttötarkoitusta,

288
00:19:53.120 --> 00:19:56.810
mutta nyt tässä onkin onkin tarkoitus.

289
00:19:56.810 --> 00:20:00.420
Demonstroida sitä, että miten
tämmöistä taulukkoa voidaan

290
00:20:00.420 --> 00:20:03.660
ikään kuin automaattisesti käsitellä.
Hyvä.

291
00:20:03.660 --> 00:20:08.260
Elikkä nyt me ei vielä tiedetä sitä, että
kuinka monta alkiota tässä on luvut taulukossa

292
00:20:08.260 --> 00:20:12.620
on siinä voi olla kuinka monta
alkiota vaan eli me tarvitaan.

293
00:20:12.620 --> 00:20:19.030
Tarvitaan tietää ton taulukon taulukon.
No niin elikkä.

294
00:20:19.030 --> 00:20:23.670
Kuten viime luennolla käytiin
läpi taulukkoa täällä forsell

295
00:20:23.670 --> 00:20:27.590
mukana niin tehdään se
nytten vastaavasti tällä.

296
00:20:27.590 --> 00:20:29.450
Tällä.

297
00:20:29.450 --> 00:20:32.480
Tässä esimerkissä ja oikeastaan ennen
kuin edes kirjoittanut tuota forsell

298
00:20:32.480 --> 00:20:36.850
mukaa siihen, niin kirjoitan se
idea mitä tässä ollaan tekemässä eli

299
00:20:36.850 --> 00:20:43.060
käydään läpi jokainen
alkio taulukosta luvut.

300
00:20:43.060 --> 00:20:48.800
Jos alkio.
Alkion arvo on täsmälleen.

301
00:20:48.800 --> 00:20:53.770
Arvo parametrin.
Arvo.

302
00:20:53.770 --> 00:20:56.580
Tulostetaan se.
Hyvä.

303
00:20:56.580 --> 00:20:58.900
Elikkä tuossa olisi nyt ihan
sanallisesti kirjoitettuna se,

304
00:20:58.900 --> 00:21:02.510
että mitä tässä oikeastaan halutaan tehdä.

305
00:21:02.510 --> 00:21:05.750
Ja nyt voidaan sitten alkaa
käymään tätä taulukkoa läpi

306
00:21:05.750 --> 00:21:08.050
ja tehdään se nyt tällä kertaa tosissaan.
Tuolla forsell mukana.

307
00:21:08.050 --> 00:21:11.200
Tän voi tehdä ihan millä silmukka
rakenteilla vaan, mutta mä

308
00:21:11.200 --> 00:21:14.330
teen sen nyt mallin
vuoksi tällä foorumilla.

309
00:21:14.330 --> 00:21:17.100
Homma lähtee liikkeelle
sieltä aivan alusta.

310
00:21:17.100 --> 00:21:19.850
Me halutaan tietysti joka ikinen
alkio käydä läpi, joten tää

311
00:21:19.850 --> 00:21:25.360
meidän silmukka muuttujien
arvo lähtee nolla.

312
00:21:25.360 --> 00:21:27.460
Toisto ehtona meillä toimii.

313
00:21:27.460 --> 00:21:29.500
I on pienempää kuin luvut pistelee.

314
00:21:29.500 --> 00:21:33.280
Tää tarkoittaa nyt käytännössä
sitä, että me käydään koko taulukko

315
00:21:33.280 --> 00:21:38.650
läpi aina siihen asti
kun sitä taulukkoa on ja.

316
00:21:38.650 --> 00:21:43.650
Silmukan päättymisen tai silmukan
kierroksen päättämistätoimenpiteenä

317
00:21:43.650 --> 00:21:47.230
meillä on plus plus, mikä tarkoittaa
sitä, että tätä muuttujan arvoa

318
00:21:47.230 --> 00:21:51.280
kasvatetaan näin joka
kiekan kiekan jälkeen yksi.

319
00:21:51.280 --> 00:21:55.250
Hyvä eli tää on rakenne millä
me saadaan käytännössä käytyä

320
00:21:55.250 --> 00:21:57.350
joka ikinen alkio siitä
meidän taulukosta läpi.

321
00:21:57.350 --> 00:21:59.670
Muitakin tapoja on.

322
00:21:59.670 --> 00:22:05.320
Voidaan katsoa niitä kohta, mutta tää
for silmukka nyt on ehkä kaikkein yleisin

323
00:22:05.320 --> 00:22:09.910
mitä mitä ohjelmoinnissa näkee, mutta
niinku sanottu muitakin tapoja on olemassa,

324
00:22:09.910 --> 00:22:14.190
mutta nyt tuo toinen kohta tuosta mun
kommentista eli jos alkion arvo on täsmälleen

325
00:22:14.190 --> 00:22:16.550
arvopäivämetrin mukainen
niin tulostetaan se.

326
00:22:16.550 --> 00:22:19.930
No miten me ensinnäkin
tarkistetaan että onko alkion

327
00:22:19.930 --> 00:22:22.630
arvo täsmälleen arvobarometrin arvo?

328
00:22:22.630 --> 00:22:26.210
No se voidaan katsoa seuraavasti.
Jos.

329
00:22:26.210 --> 00:22:31.320
Siellä luvut taulukossa paikassa eli mihin
se nuoli ikään kuin tällä hetkellä osoittaa

330
00:22:31.320 --> 00:22:36.040
sinne meidän taulukossa on täsmälleen
tuo arvo, niin silloin tehdään jotakin.

331
00:22:36.040 --> 00:22:44.800
Laitetaan se mitä tehdään niin
tänne aalto sulkeiden sisään.

332
00:22:44.800 --> 00:22:48.620
No kolmannellakin vielä tuossa mun
kommentissa lukee että tulostetaan se.

333
00:22:48.620 --> 00:22:51.340
Eli tulostetaan luvut i.

334
00:22:51.340 --> 00:22:56.340
Vain siinä tilanteessa, että se
matcha tuohon meidän parametri arvoon.

335
00:22:56.340 --> 00:23:00.360
Eli nyt me ollaan täysin agnotisia sille,
että kuinka pitkä tää meidän luvut taulukko

336
00:23:00.360 --> 00:23:05.100
on, minkälaisia lukuja siellä on ja me ollaan
myöskin agnotisia silleen, että mitä tuo

337
00:23:05.100 --> 00:23:08.250
arvo muuttuja sisältää jo siellä voi olla
ykkönen, siellä voi olla kakkonen, siellä voi

338
00:23:08.250 --> 00:23:13.160
olla nolla, siellä voi olla miinus ykkönen
mitä tahansa, mutta jos se arvo on täsmälleen

339
00:23:13.160 --> 00:23:17.240
sama kuin siellä, luvut paikassa oleva arvo,
meidän tulostetaan se ja niinku nyt huomataan

340
00:23:17.240 --> 00:23:23.540
niin sieltä ei sitten tulostuu nyt vain niitä
ykkösiä totta kai, mutta mutta joka tapauksessa

341
00:23:23.540 --> 00:23:26.930
niin siinä on meillä ehdollinen tulostus,
meillä nyt sattuu olemaan vaan yks ykkönen siellä

342
00:23:26.930 --> 00:23:28.730
taulukossa.

343
00:23:28.730 --> 00:23:31.930
Jotenka me voidaan tietysti kokeilla
laittaa sinne pari ykköstä lisääkin.

344
00:23:31.930 --> 00:23:34.470
Laitetaan vaikka.

345
00:23:34.470 --> 00:23:41.380
1 1 2 1 miinus 1 2 3 jotain
tuollaista ihan sama, mutta nyt

346
00:23:41.380 --> 00:23:43.190
siellä on joka tapauksessa
useampi ykkönen.

347
00:23:43.190 --> 00:23:45.870
Laitetaan siitä ohjelma
käyntiin ja nyt me nähdään niin

348
00:23:45.870 --> 00:23:48.630
että sieltä 4 kappaletta ykkösiä tulostui.

349
00:23:48.630 --> 00:23:56.760
Katsotaan päteekö tämä 1 2 3 4
näyttää noita ykkösiä olevan.

350
00:23:56.760 --> 00:24:00.550
Ja nää vaihdettiin vitosia ykkösen paikkaa tuossa
aikaisemmin se yks ykkönen meni tuonne viimeiseen

351
00:24:00.550 --> 00:24:07.160
alkuun, mutta joka tapauksessa oikea
määrä niitä ykkösiä sieltä tuli.

352
00:24:07.160 --> 00:24:09.110
Nyt tää yksi suuruusvertailu.

353
00:24:09.110 --> 00:24:12.820
Tietysti meillä on tässä ja ja
tuota tarkistaa nyt vain sen,

354
00:24:12.820 --> 00:24:16.060
että onko se täsmälleen
tuo haluttu haluttu arvo.

355
00:24:16.060 --> 00:24:19.600
Meillä voisi tässä olla tietysti
mikä tahansa totuusarvoinen lauseke

356
00:24:19.600 --> 00:24:24.260
pienempi kuin suurempi kuin suurempaa
tai yksi suurta kuin tai jotain

357
00:24:24.260 --> 00:24:34.230
muuta vastaavaa, joka
tuottaa true tai false arvon.

358
00:24:34.230 --> 00:24:38.530
Mutta tässä nyt esimerkkitilanteessa
missä missä tulostetaan vain

359
00:24:38.530 --> 00:24:42.940
vain alkio, joka täsmää
tuohon arvon muuttujaan.

360
00:24:42.940 --> 00:24:45.060
Hyvä.

361
00:24:45.060 --> 00:24:49.470
No lupasin tuossa niin että katsotaan
muitakin silmukka rakenteita täällä.

362
00:24:49.470 --> 00:24:55.520
Nyt itse asiassa jo raideri ehdottelee niin,
että for loop band converter for each club ja

363
00:24:55.520 --> 00:25:00.980
jotkut ovat sitä mieltä, että tällaisissa
tilanteissa jossa me varmasti käydään kaikki alkiot

364
00:25:00.980 --> 00:25:05.200
läpi siitä taulukosta, niin
tämmöinen for each loop olisi parempi.

365
00:25:05.200 --> 00:25:07.840
Katsotaan miltä se näyttää.

366
00:25:07.840 --> 00:25:12.500
Eli klikataan tuolta convert for each ja.

367
00:25:12.500 --> 00:25:17.730
Tilanne näyttää silloin täältä.
Sen verran muutin tätä.

368
00:25:17.730 --> 00:25:25.350
Mä laitan tuohon intin eli sana for each
alkaa aloittaa for rich rakenteen selkeen tulee

369
00:25:25.350 --> 00:25:29.990
sulut ja aalto solut niinku ihan missä tahansa
silmukka rakenteessa, mutta tää sulkujen

370
00:25:29.990 --> 00:25:34.060
sisältämä asia täällä kaarisuljeiden sisällä
on hieman erilainen kuin siinä äskeisessä

371
00:25:34.060 --> 00:25:40.050
for silmukan eli ei ole mitään plus
plussaa ei ole mitään tai ylipäätään on vaan

372
00:25:40.050 --> 00:25:45.270
taulukon Nimi tai sen tietorakenteiden nimi
jota me tässä ollaan läpi käymässä sitten

373
00:25:45.270 --> 00:25:47.820
tämmöinen mystinen instana ja tee.

374
00:25:47.820 --> 00:25:52.750
No tää voidaan lukea siten,
että jokaiselle alkiolle tee.

375
00:25:52.750 --> 00:25:57.700
Luvut taulukossa tee seuraava asia
eli tää on aika simppeli juttu siinä

376
00:25:57.700 --> 00:26:02.270
mielessä, että tää on asia mikä tehdään
tehdään sitten kaikille niille alkioilla

377
00:26:02.270 --> 00:26:06.000
ja nyt tää on nimi
joka me annetaan sille.

378
00:26:06.000 --> 00:26:08.740
Sille arvolle, joka meillä
kullakin käsittely kerralla.

379
00:26:08.740 --> 00:26:12.760
Siinä vuorossa on tän teen nimi
voisi olla tietysti mitä tahansa.

380
00:26:12.760 --> 00:26:15.840
Se voisi olla vaikkapa luku.

381
00:26:15.840 --> 00:26:19.850
Eli nyt mä nimesin sen tuossa
uudestaan nimeksi luku, mutta silleen.

382
00:26:19.850 --> 00:26:26.080
Tää on vähän simppelimpi rakenne joka
niinku sanottu on suositeltavaa tilanteissa

383
00:26:26.080 --> 00:26:30.600
jossa me käydään kaikki alkiot läpi
eikä myöskään muuteta niitä alkioita

384
00:26:30.600 --> 00:26:33.860
on myöskin silmukan sisällä mahdollista
muuttaa asioita, mutta tää forgen

385
00:26:33.860 --> 00:26:35.970
sisällä niitä muutoksia ei voida tehdä.

386
00:26:35.970 --> 00:26:39.800
Nythän meitä tässä tehdä mitään muutoksia,
vaan me ainoastaan tutkitaan, että

387
00:26:39.800 --> 00:26:43.770
onko luku sama kuin arvo ja
mahdollisesti tulostetaan se.

388
00:26:43.770 --> 00:26:47.130
Eli siinä mielessä
erittäin hyvä vaihtoehto.

389
00:26:47.130 --> 00:26:55.870
On tämä for its tähän tapaukseen ja
tätäpä se sen takia nyt tuohon noin.

390
00:26:55.870 --> 00:26:57.980
Hyvä.
Eli tehtiin.

391
00:26:57.980 --> 00:27:03.390
Tuo tuntuu siitä loppuun.
Ota siitä tutun pois.

392
00:27:03.390 --> 00:27:06.780
Ja
ja. Aa.

393
00:27:06.780 --> 00:27:10.780
Mennään seuraavaan esimerkkiin
eli negatiivisten summa käsitellään

394
00:27:10.780 --> 00:27:13.720
jälleen tuota meidän luvut taulukkoa.

395
00:27:13.720 --> 00:27:16.180
Siellä nyt ei kovin monta
ole negatiivista lukua.

396
00:27:16.180 --> 00:27:19.620
No ehkä me tehdään uusi, tehdään uusi.
Tehdään.

397
00:27:19.620 --> 00:27:25.840
Tällä kertaa tehdään tällä kertaa doble.
Ja laitetaan sinne.

398
00:27:25.840 --> 00:27:28.860
Muutama negatiivinen luku.

399
00:27:28.860 --> 00:27:37.380
Semmoiset että mä osaan niitä jopa laskee.

400
00:27:37.380 --> 00:27:40.350
3 puoli no niin laita laitetaan
vaikka noin elikkä siinä.

401
00:27:40.350 --> 00:27:43.990
Meillä on muutama luku ja nyt jos
tästä äkkiseltään silmällä katsotaan

402
00:27:43.990 --> 00:27:49.500
niin negatiivisten summa näyttäisi olevan.
-6 ja puoli.

403
00:27:49.500 --> 00:27:54.260
Eli tehtävänä olisi laskea negatiivisten
lukujen summa määritellään siihen meille

404
00:27:54.260 --> 00:28:00.150
apuun muuttuja summa ja funktio,
jolle annetaan nimi summa.

405
00:28:00.150 --> 00:28:04.630
Itse asiassa negatiivisten summa.

406
00:28:04.630 --> 00:28:09.010
Ja luvut kakkonen menee sinne
argumenttina eli tällaista funktiota

407
00:28:09.010 --> 00:28:16.550
nyt lähdetään lähdetään tässä toteuttamaan.
Ja ja ja.

408
00:28:16.550 --> 00:28:20.110
Meillä on periaatteessa tässä nytten
ja ja onkin tiedot, jonka perusteella

409
00:28:20.110 --> 00:28:24.970
me pystytään tämmöisen funktion esittelyni nyt kirjoittamaan.
Siinä on nimi.

410
00:28:24.970 --> 00:28:27.650
Meillä on siinä argumentti,
jonka tyyppi me tiedetään.

411
00:28:27.650 --> 00:28:31.990
Meillä on täällä paluu arvolle
valmis tieto eli se pitää olla

412
00:28:31.990 --> 00:28:35.030
double luku niinku tietysti
loogista onkin että.

413
00:28:35.030 --> 00:28:38.690
Lukujen desimaalilukujen
summa niin niin se täytyy olla

414
00:28:38.690 --> 00:28:42.070
desimaaliluku hyvä eli public static.

415
00:28:42.070 --> 00:28:49.080
Paluuarvon tyyppisissä double, koska se täytyy
olla desimaaliluku ja sitten parametri katsotaan

416
00:28:49.080 --> 00:28:54.500
argumenttia eli meillä on täällä luvut kakkonen
joka on desimaalilukujen desimaalilukuista koostuva

417
00:28:54.500 --> 00:28:58.870
taulukko eli double häkää häkä
ja sitten annetaan sille nimi.

418
00:28:58.870 --> 00:29:01.840
Se voisi nyt olla vaikka luvut
ja jälleen kerran alleviivaan

419
00:29:01.840 --> 00:29:06.990
sitä että tää voi olla luvut tää voi olla.

420
00:29:06.990 --> 00:29:11.480
Vaikka mikä tahansa muu nimi,
mutta se voi olla sama Nimi tai eri

421
00:29:11.480 --> 00:29:14.320
nimi kuin mitä tuolla
pääohjelmassa on määritelty.

422
00:29:14.320 --> 00:29:19.220
Tämä maalattu alue tässä eli tämmöinen
aliohjelma, niin se on oma hiekkalaatikko

423
00:29:19.220 --> 00:29:25.530
niin sanottu oma näkyvyysalue
ohjelmointi termejä käyttäen, joka ei.

424
00:29:25.530 --> 00:29:28.490
Mitenkään ole konfliktissa tämän.

425
00:29:28.490 --> 00:29:31.970
Pääohjelmassa määritellyn
näkyvyysalueen kanssa näiden

426
00:29:31.970 --> 00:29:35.180
muuttujien nimet saa olla samoja.

427
00:29:35.180 --> 00:29:38.640
Hyvä, mutta nyt lähdetään laskemaan
sitä sitä varsinaista summaa

428
00:29:38.640 --> 00:29:45.150
ja ja ja tota mä palautan
sieltä nytten ihan aluksi.

429
00:29:45.150 --> 00:29:47.350
Nolla, jota saadaan tää kääntymään.

430
00:29:47.350 --> 00:29:50.250
Eli nyt meillä on siinä kääntyvä ohjelma.

431
00:29:50.250 --> 00:29:54.950
No mitä me tarvitaan, jotta me voidaan
negatiivisten lukujen summa ylipäätään laskea,

432
00:29:54.950 --> 00:29:59.970
niin ehkä itse ajattelen niin, että voisi
olla järkevää alustaa joku pieni apumuutta,

433
00:29:59.970 --> 00:30:05.250
johon me sitä summaa lähdetään sitten
sitten hiljalleen laskemaan ja tän summan

434
00:30:05.250 --> 00:30:10.290
sisältämä arvohan on se millä me loppujen
lopuksi tästä nytten palautetaan sitten

435
00:30:10.290 --> 00:30:12.310
tuloksena ulos sinne pyytäjälle.

436
00:30:12.310 --> 00:30:16.380
Hyvä elikkä siihen lähdetään
sitä summaa nyt hahmottelemaan.

437
00:30:16.380 --> 00:30:20.180
Ja voitaisiin nyt sitten ihan esimerkin
vuoksi käyttää jälleen kerran sitä

438
00:30:20.180 --> 00:30:23.980
for each silmukkaa, mitä tuossa
aikaisemminkin käytettiin.

439
00:30:23.980 --> 00:30:27.190
Ja kuten mainitsin joni for its
silmukka on hyvä tilanteisiin,

440
00:30:27.190 --> 00:30:29.960
jossa me varmasti käydään
joka ikinen alkio läpi.

441
00:30:29.960 --> 00:30:33.230
Käydäänkö me tämmöisessä tilanteessa,
että me halutaan negatiivisten

442
00:30:33.230 --> 00:30:37.340
summa laskea niin joka ikinen alkio
läpi kyllä käydään eli joka ikisen

443
00:30:37.340 --> 00:30:41.130
alkion kohdalla me meidän
tarkoitus on tutkia.

444
00:30:41.130 --> 00:30:47.150
Onko alkion arvo negatiivinen?
Jos on.

445
00:30:47.150 --> 00:30:50.600
Lisää arvo summaan.
Eikö vaan?

446
00:30:50.600 --> 00:30:54.990
Eli nää 2 asiaa tarvitsee täällä
for each taulu for its mukaan

447
00:30:54.990 --> 00:30:58.560
sisällä tehdään eli
jokaikinen kyllä käydään läpi.

448
00:30:58.560 --> 00:31:01.250
No mitä tänne for it sulkujen
sisälle nyt tuli tänne kari

449
00:31:01.250 --> 00:31:04.410
sulkeiden sisälle niin
sinnehän tuli nytten.

450
00:31:04.410 --> 00:31:07.390
2 asiaa eli sinne tulee.

451
00:31:07.390 --> 00:31:12.410
Käsiteltävän alkion tyyppi
ja nimi ja sitten se sanaa in.

452
00:31:12.410 --> 00:31:16.270
Ja tietorakenne, jota käydään läpi.
Eli vielä kertaalleen.

453
00:31:16.270 --> 00:31:19.100
Tää luvut on siis se tietorakenne
mitä me halutaan käydä läpi.

454
00:31:19.100 --> 00:31:25.020
Sitten tuo imf sana ja sitten se
alki on tyyppi ja ja sille nimi.

455
00:31:25.020 --> 00:31:29.550
Eli tää luku nyt viittaa aina siihen
vuorollaan käsiteltävään alkioon.

456
00:31:29.550 --> 00:31:32.130
Eli tää on siinä mielessä nyt
erilainen verrattuna for silmukkaan,

457
00:31:32.130 --> 00:31:35.530
jota aikaisemmin tehtiin, että
me ei nyt tarvita sitä nuolta sitä

458
00:31:35.530 --> 00:31:37.870
nuolta, joka osoittaa
aina sinne lokeroon.

459
00:31:37.870 --> 00:31:42.230
Vaan tää luku on vähän niinku
se lokero aina kukin vuorollaan

460
00:31:42.230 --> 00:31:46.340
ja siinä mielessä viittaus on on.

461
00:31:46.340 --> 00:31:51.160
Ei ei siinä mielessä epäsuoraa kuin
mitä forss silmukan tapauksessa oli.

462
00:31:51.160 --> 00:31:54.680
Hyvä, mutta nyt mennään
toteuttamaan tämä itse silmukan runko

463
00:31:54.680 --> 00:31:57.000
osa tutkitaan, onko
alkion arvo negatiivinen.

464
00:31:57.000 --> 00:32:02.140
Me osataan tehdä ifflause, joka
kysyy, että onko luku negatiivinen

465
00:32:02.140 --> 00:32:04.300
eli onko luku pienempää kuin nolla hyvä.

466
00:32:04.300 --> 00:32:08.720
No sitten se toinen kohta eli jos jos
luku on negatiivinen, toisin sanoen

467
00:32:08.720 --> 00:32:13.720
tuo luku on pienempää kuin nolla on
arvossa tosi niin silloin lisätään

468
00:32:13.720 --> 00:32:16.340
arvo osumaan miten lisätään arvo osumaan.

469
00:32:16.340 --> 00:32:18.560
No nyt meillä on se summa
muuttuja johon me halutaan

470
00:32:18.560 --> 00:32:21.780
lisätä asioita eli muutetaan summa.

471
00:32:21.780 --> 00:32:25.330
Muuttujan sisältämää arvoa
esimerkiksi näin plus on,

472
00:32:25.330 --> 00:32:28.530
jolloin me lisätään siihen jotakin.
No mitä me lisätään?

473
00:32:28.530 --> 00:32:30.850
No me lisätään nyt sitten
luku, eli meillä on se luku

474
00:32:30.850 --> 00:32:34.610
muuttujan sisältämä arvo tuossa käpälässä.

475
00:32:34.610 --> 00:32:42.020
Ja ja ja me voidaan, voidaan
se luku siihen sitten lisätä.

476
00:32:42.020 --> 00:32:43.820
Hyvä.

477
00:32:43.820 --> 00:32:46.780
No nyt meillä on summamuuttuja palautus tuolla
jo jo valmiina eli periaatteessa tää homman

478
00:32:46.780 --> 00:32:50.830
pitäisi olla valmiina tässä ja
katsotaan että saadaanko sieltä se summa.

479
00:32:50.830 --> 00:32:54.360
Pääohjelmassa tulostettua ja huomaat
nyt niin, että me täällä täällä

480
00:32:54.360 --> 00:32:56.370
funktiossa itsessä
tulosteta yhtään mitään.

481
00:32:56.370 --> 00:33:01.270
Me vaan lasketaan sen negatiivisten summa ja
palautetaan se arvo sinne joka siitä pyysi tai

482
00:33:01.270 --> 00:33:05.690
siellä ei tulosteta yhtään mitään ja se on
hyvin tyypillinen tapa toimia, että tommoisessa

483
00:33:05.690 --> 00:33:09.430
funktiossa ei tulosteta mitään vaan
se pääohjelma tai käyttöliittymä.

484
00:33:09.430 --> 00:33:13.370
Siellä tulostaa
sen -6. Vitosen.

485
00:33:13.370 --> 00:33:19.110
No ihan jotta nyt tulisi tulisi
niin kun tämä tota näitten silmukka

486
00:33:19.110 --> 00:33:22.160
rakenteiden vähän niinku
tää erilaisuus esille.

487
00:33:22.160 --> 00:33:25.070
Niillä voi siis tehdä monesti
hyvin samoja asioita, mutta

488
00:33:25.070 --> 00:33:27.090
mutta kuitenkin ne ovat vähän erinäköisiä.

489
00:33:27.090 --> 00:33:30.790
Niin mä nyt teen negatiivisten
summa kakkosen, jossa mä toteutan

490
00:33:30.790 --> 00:33:33.050
tän silmukan käyttäjän for silmukkaa.

491
00:33:33.050 --> 00:33:38.210
Mä teen sen nyt ajan voittamiseksi
ihan nopeasti, tähän vaan kirjoitan eli.

492
00:33:38.210 --> 00:33:43.890
Forssell mukaisessa tarvitaan
tää indeksi muuttuja toistoehto.

493
00:33:43.890 --> 00:33:48.410
Ja silmukan kierroksen päätteeksi
tehtävät toimenpiteet eli tässä nyt luodaan

494
00:33:48.410 --> 00:33:51.830
se pikku nuoli joka käy
sitten läpi sitä taulukkoa.

495
00:33:51.830 --> 00:33:55.190
No sen sijaan, että me voitaisiin kysyä
suoraan, että onko luku pienempää kuin nolla,

496
00:33:55.190 --> 00:33:59.490
niin nyt meidän pitää viitata
siihen taulukon inenteen alkioon.

497
00:33:59.490 --> 00:34:05.250
Eli epäsuorasti käydä pyytämässä sieltä
taulukosta se yksi alkio kerrallaan.

498
00:34:05.250 --> 00:34:11.930
No jos taulukon tai luvut taulukon
iines alkio on negatiivinen, niin silloin

499
00:34:11.930 --> 00:34:15.190
me lisätään se siihen summamuuttuja
eli otetaan sieltä luvut.

500
00:34:15.190 --> 00:34:19.160
Joulukuusta on jälleen kerran se
ihmisalkioita, mitä se sitten sisältääkin.

501
00:34:19.160 --> 00:34:23.450
Se laatikko niin se pumpataan
lisäksi tuonne summaan.

502
00:34:23.450 --> 00:34:27.850
Ja nyt meillä on negatiivisten
summa kakkonen tässä ja mä testaan

503
00:34:27.850 --> 00:34:32.990
että antaako se saman summan sieltä
kun mitä toi äsken tehty negatiivisten

504
00:34:32.990 --> 00:34:35.170
summa ykkönen ja kyllähän sieltä -6.

505
00:34:35.170 --> 00:34:40.510
5 tulee ihan samaan tapaan jotenka nää
ovat sinänsä täysin ekvivalentti, siis

506
00:34:40.510 --> 00:34:46.310
ihan samoja saman asian tekeviä
funktioita, mutta hieman eri silmukkarakenne

507
00:34:46.310 --> 00:34:50.910
vaan tässä kysymyksessä ja on tosiaan
tilanteesta riippuvainen, että kumpi näistä

508
00:34:50.910 --> 00:34:54.410
on nyt jotenkin parempi
tai oikeampi for eds.

509
00:34:54.410 --> 00:34:57.780
Vaiko fore ja mitäs tuolla
muuten ehdotusta tulee?

510
00:34:57.780 --> 00:35:04.400
Loop converterttu link you expression
OK täällä on taas nyt näitä.

511
00:35:04.400 --> 00:35:09.890
Joo elikkä siinä nyt on yksi
rivillä sitten tehty koko homma.

512
00:35:09.890 --> 00:35:11.990
Me emme nyt tällä kurssilla.

513
00:35:11.990 --> 00:35:14.070
Opettelen näitä linkku
expressioneita niin jotenkin

514
00:35:14.070 --> 00:35:16.530
ihania kun ne välillä voisivatkin olla.

515
00:35:16.530 --> 00:35:21.540
Mutta että silleen tämä
tämä tapa tehdä tää asia on.

516
00:35:21.540 --> 00:35:23.840
Lähestulkoon univers.

517
00:35:23.840 --> 00:35:26.470
Tää oli missä tahansa
ohjelmointikielessä ja sen takia

518
00:35:26.470 --> 00:35:30.980
nyt nyt tuota kuitenkin käytetään.
Tässä näitä silmukoita.

519
00:35:30.980 --> 00:35:35.200
Jos sulla on aikaa ja haluat opetella noita
linkkejä expressioneita käyttämään niin

520
00:35:35.200 --> 00:35:39.220
kyllä ne ovat tosi käteviä ja voivat monessa
kohtaa tehdä koodista hyvin kompakteja

521
00:35:39.220 --> 00:35:44.450
ja siistiä, mutta käytetään nyt
kuitenkin tässä näitä silmukoita.

522
00:35:44.450 --> 00:35:47.730
Ja sivuhuomiona on nyt tässä
siis vaan se niin, että kyllä

523
00:35:47.730 --> 00:35:51.050
ohjelmoinnissa on tosi tosi monesti.

524
00:35:51.050 --> 00:35:54.940
Monta erilaista tapaa olevia
jotenkin yksi ainoata oikeata ja ja

525
00:35:54.940 --> 00:35:59.490
parasta tai hienointa tai
siisteintä tai cooleilta.

526
00:35:59.490 --> 00:36:05.050
Eri ohjelmoida tykkää tehdä asioita eri
tavoilla ja ja mä nyt näytän tässä 2 eri tapaa.

527
00:36:05.050 --> 00:36:09.630
Kolmas olisi se linkki expression
ja varmaan vielä muitakin olisi.

528
00:36:09.630 --> 00:36:13.790
Eli eli tota siihen kannattaa sillä
tavalla asennoitua tähän ohjelmointiin,

529
00:36:13.790 --> 00:36:18.710
että on tosi monta eri tapaa tehdä eikä
oikein helposti kukaan pysty sanomaan

530
00:36:18.710 --> 00:36:20.670
että mikä niistä on
jotenkin oikea tai paras.

531
00:36:20.670 --> 00:36:23.900
Tehdään vielä yksi esimerkki
kuitenkin tähän ennen kuin siirrytään

532
00:36:23.900 --> 00:36:28.150
seuraavaan asiaan, eli
otetaan vielä yksi taulukko.

533
00:36:28.150 --> 00:36:32.870
Ja lasketaan niiden merkkijonojen määrä,
josta löytyy kirjaina eli tehdään tehdään

534
00:36:32.870 --> 00:36:37.200
merkkijonot taulukko joka sisältää
taas nyt sitten vaikkapa nimiä.

535
00:36:37.200 --> 00:36:42.240
Ja laitetaan sinne.
Antti jussi ja.

536
00:36:42.240 --> 00:36:45.920
Jonne.
Vesa.

537
00:36:45.920 --> 00:36:51.660
Tuomo eli tuommoiset nimet ja nyt tarkoitus
olisi siis laskea niiden merkkijonojen

538
00:36:51.660 --> 00:36:56.740
määrä, josta löytyy kirjain AN me nähdään
niin, että tuossa ekassa on ja kolmannessa

539
00:36:56.740 --> 00:37:01.260
merkkijonossa on myöskin nää
eli tästä vastaus pitäisi olla 2.

540
00:37:01.260 --> 00:37:06.790
Jos me tehdään nyt toinen jo
valmiiksi tuohon nimet kakkonen.

541
00:37:06.790 --> 00:37:09.580
Ja laitetaankin sinne vain.

542
00:37:09.580 --> 00:37:15.690
Jonne ja tuomo niin siinähän
yhtään kirjainta ei ole.

543
00:37:15.690 --> 00:37:19.320
OK lähdetään hahmottelemaan
tuommoista funktiota.

544
00:37:19.320 --> 00:37:23.770
Mä laitan tuosta nyt noita äsken
tehtyjä funktioita hieman pienemmäksi.

545
00:37:23.770 --> 00:37:27.870
Niin me saadaan tähän tilaan
eli eli tota mä tein jo valmiiksi

546
00:37:27.870 --> 00:37:32.010
tähän tätä funktion
esittelyn ajan voittamiseksi.

547
00:37:32.010 --> 00:37:37.570
Eli löytyykö kirjain voisi olla hyvä
nimi tälle funktiolle ja mulla on siellä

548
00:37:37.570 --> 00:37:41.750
nyt sitten parametrina toi merkkijono
taulukko jo valmiina paluuarvon me

549
00:37:41.750 --> 00:37:46.330
odotamme sieltä nyt tosissaan
kokonaislukua, koska haluamme sieltä tietää,

550
00:37:46.330 --> 00:37:50.800
että kuinka monesta se kirjain löytyi.

551
00:37:50.800 --> 00:37:54.940
Ja nyt mulla on tossa muutama konteksti
on valmiiksi kirjoitettuna eli tuossa jonot

552
00:37:54.940 --> 00:37:59.360
ykkösestä pitäisi paluu arvona saada
luku kakkonen ja jonot kakkosesta.

553
00:37:59.360 --> 00:38:02.560
Sitten paluu arvona luku nolla.

554
00:38:02.560 --> 00:38:06.180
No jos meillä on ihan tyhjä taulukko
niin tietysti sieltäkin pitäisi joku

555
00:38:06.180 --> 00:38:10.170
arvo saada ja tässä tapauksessa tietysti
nolla on on luonteva niin mä kopioin

556
00:38:10.170 --> 00:38:14.730
nyt nämä testit nämä
com testitestit tuohon.

557
00:38:14.730 --> 00:38:18.990
Dokumentaatioalueelle niin on
nekin sitten valmiina siinä.

558
00:38:18.990 --> 00:38:23.970
Tuon regionin voi nyt
sieltä ottaa pois. Ja.

559
00:38:23.970 --> 00:38:27.500
Ota sieltä nytten tota noin niin.

560
00:38:27.500 --> 00:38:30.120
Vähän tota dokumentaatiota
nyt ehkä nokkelimmat.

561
00:38:30.120 --> 00:38:34.220
Tässä huomaa niin, että että nythän.

562
00:38:34.220 --> 00:38:38.490
Onko tää ehkä vähän jopa huono nimi
tälle funktiolle, kun nytten tämä

563
00:38:38.490 --> 00:38:42.260
funktion nimi antaa ehkä vinkkiä
sillä tavalla, että me voitaisiin etsiä

564
00:38:42.260 --> 00:38:45.700
ikään kuin mitä tahansa
kirjain ja tästä meidän.

565
00:38:45.700 --> 00:38:49.870
Taulukosta tai minkä
tahansa kirjaimen sisältäviä.

566
00:38:49.870 --> 00:38:54.890
Merkkijonoja niin siinä mielessä ehkä voisi
olla luontevampaa, että tämän funktion nimi

567
00:38:54.890 --> 00:39:01.190
olisikin, että löytyykö kirjain ja sitten
voitaisiin ikään kuin yleistää tätä funktiota

568
00:39:01.190 --> 00:39:05.230
myöhemmin siten, että me voitaisiin etsiä
mitä tahansa kirjaimia, mutta tehdään nyt

569
00:39:05.230 --> 00:39:08.510
yksinkertaisuuden vuoksi
tästä vain sellainen, että.

570
00:39:08.510 --> 00:39:15.220
Käydään läpi jokainen merkkijono.
Jos.

571
00:39:15.220 --> 00:39:18.590
Jono sisältää kirjaimena.

572
00:39:18.590 --> 00:39:23.430
Niin lisätään laskuria yksi eli me tarvitaan
jonkinlainen laskuri jolla me kasvatetaan

573
00:39:23.430 --> 00:39:27.730
ja sitten se laskurin arvo pitää
tästä aikanaan palauttaa ulos.

574
00:39:27.730 --> 00:39:33.770
No niin siellä vähän taas toi
parista meinaa peittää oleellista.

575
00:39:33.770 --> 00:39:39.730
OK elikkä elikkä elikkä
joku laskuri tarvitaan.

576
00:39:39.730 --> 00:39:42.530
Joka lähtee arvosta nolla.

577
00:39:42.530 --> 00:39:45.430
Ja sen sisältämä arvo
tästä sitten palautetaan.

578
00:39:45.430 --> 00:39:47.770
Eli nyt meillä on tässä
koko ajan kääntyvää koodia

579
00:39:47.770 --> 00:39:50.600
ja ja tuota lähdetään käymään nyt läpi.

580
00:39:50.600 --> 00:39:54.550
Jokainen merkkijono itsessään niinku
tehdään sitä niin ehkä me voitaisiin

581
00:39:54.550 --> 00:39:59.250
tehdä kuten TD tyyliin kuuluu
että generoimaan nuo testit ja.

582
00:39:59.250 --> 00:40:06.600
Ja ja ja katsotaan että se testaus
ympäristö siellä taustalla kuitenkin toimii.

583
00:40:06.600 --> 00:40:10.300
Ja sieltä tietysti pitäisi tulla nytten
faileja niin kun niin kun tuleekin.

584
00:40:10.300 --> 00:40:14.480
Eli eli tuota homma OK tähän asti nyt
lähdetään sitten toteuttamaan tämän eli

585
00:40:14.480 --> 00:40:18.780
käydään läpi jokainen merkkijono ja ehkä
me nyt tehdään se sillä for each silmukalla

586
00:40:18.780 --> 00:40:23.840
taas, koska meillä varmasti on tässä
tavoite käydä ihan ihan kaikki jonot läpi

587
00:40:23.840 --> 00:40:27.020
eli halutaan jonot
taulukkoa siinä käydä läpi.

588
00:40:27.020 --> 00:40:32.960
No mitä tää vaan variable nyt pitäisi sisältää
niin se pitäisi sisältää nytten sen yksittäisen

589
00:40:32.960 --> 00:40:36.900
alkion tyypin ja sille alkiolle
annettu meidän mielivaltaisesti.

590
00:40:36.900 --> 00:40:38.930
Keksimä nimi ja hyvä nimi.

591
00:40:38.930 --> 00:40:43.500
Nyt tässä voisi olla vaikkapa jono.
Hyvä.

592
00:40:43.500 --> 00:40:45.670
Elikkä nyt seuraava osa tästä kommentista.

593
00:40:45.670 --> 00:40:48.390
Jos jono sisältää kirjaimena,
niin lisätään laskuria.

594
00:40:48.390 --> 00:40:53.950
Yksi hyvä tota on melkein ikään kuin
englanniksi voidaan tuosta niinku lukea toi lause

595
00:40:53.950 --> 00:40:59.730
niin melkein jo suoraan se koodi
itsessään eli jos jono sisältää.

596
00:40:59.730 --> 00:41:04.060
Kirjaimena eli if jono.
Contains tämmöinen.

597
00:41:04.060 --> 00:41:06.470
Aika kiva pikku metodi löytyy.

598
00:41:06.470 --> 00:41:08.900
Löytyy tommoiselta string
olioita kuin contains ja

599
00:41:08.900 --> 00:41:12.050
me voidaan kysyä että että sisältääkö.

600
00:41:12.050 --> 00:41:14.450
Sisältääkö se sitä annettua merkkiä?

601
00:41:14.450 --> 00:41:17.980
Eli jos me katsotaan tuon
contains metodin dokumentaatiota.

602
00:41:17.980 --> 00:41:22.470
No tässä on useampikin versio useampi
ylikuormitus tästä dokumentaatio anteeksi

603
00:41:22.470 --> 00:41:26.050
metodista, mutta katsotaan nyt tätä
ensimmäistä eli records of you indicate the

604
00:41:26.050 --> 00:41:32.450
specific access with string ja nythän
tosissaan niin niitä voi olla siellä useita,

605
00:41:32.450 --> 00:41:38.210
mutta mikäli se yhdenkin sisältää, niin
tämä contents palauttaa silloin tru arvon

606
00:41:38.210 --> 00:41:42.590
ja kun tää contents palauttaa tru arvon.

607
00:41:42.590 --> 00:41:47.390
Niin silloin siinä tilanteessa
lisätään laskuria yksi eli täällä if

608
00:41:47.390 --> 00:41:53.130
lauseen runko osassa muutetaan
laskuria yksi ylöspäin.

609
00:41:53.130 --> 00:41:54.930
Ollaanko tyytyväisiä?

610
00:41:54.930 --> 00:42:00.320
No, ehkä me voitaisiin nyt ajaa testit
ja katsoa, että menee meneekö testit läpi.

611
00:42:00.320 --> 00:42:04.030
No sieltä nyt kuitenkin tuli filia,
eli me odotettiin siitä ensimmäisestä

612
00:42:04.030 --> 00:42:07.200
testistä kakkosta, mutta
saatiin todellisuudessa ykkönen.

613
00:42:07.200 --> 00:42:11.220
Ja jos me katsotaan mikä se meidän
eka testi oli, niin siellähän oli antti

614
00:42:11.220 --> 00:42:15.340
jussissa iso ja vessassa
löytyy pikku eli nyt selkeästi.

615
00:42:15.340 --> 00:42:19.520
Se iso ja pieni kirjain.
Ei tässä ihan täysin.

616
00:42:19.520 --> 00:42:24.110
Täysin nyt toimi eli tota me
meidän tarvitsee pohtia se tilanne,

617
00:42:24.110 --> 00:42:29.070
että onko kyseessä joko joko pikku tai.

618
00:42:29.070 --> 00:42:32.890
Iso eli tehdään nyt tästä
tällainen yhdistetty ehto,

619
00:42:32.890 --> 00:42:37.370
missä kumpi tahansa voi olla totta.
Eli joko tän.

620
00:42:37.370 --> 00:42:42.390
Ihme kaksois stolpemerkinnän
vasen puoli voi olla totta tai

621
00:42:42.390 --> 00:42:45.290
oikea puoli voi olla
totta mikäli kumpi tahansa.

622
00:42:45.290 --> 00:42:52.040
Näistä pätee niin silloin tää if ehto
on totta ja me suoritetaan tää runko osa.

623
00:42:52.040 --> 00:42:56.460
Eli tää on niin kutsuttu looginen tai
operaattori, joka takaa meille sen,

624
00:42:56.460 --> 00:43:01.080
että jos kumpi tahansa näistä puolista
on tosi arvossa, niin silloin ikään

625
00:43:01.080 --> 00:43:06.540
kuin koko tää Hokki hossakka
on on on silloin totta.

626
00:43:06.540 --> 00:43:18.000
Näitä loogisia.
Loogisia.

627
00:43:18.000 --> 00:43:23.400
Naapuri ei nyt tykännyt tästä loogisesta tai sitä
selkeästi ollenkaan, mutta mutta joka tapauksessa

628
00:43:23.400 --> 00:43:29.760
niin näitä on lueteltu siellä monisteessa näitä
on muutamia erilaisia, mutta tää tai operaattori

629
00:43:29.760 --> 00:43:34.800
ja sitten toinen tärkeä on ja mikä on vähän
niinku vastakohta tulee äskeiselle eli molempien

630
00:43:34.800 --> 00:43:40.630
täytyy olla totta niin ne on niitä mitä tavallisimmin
vastaan ohjelmoinnissa tulee, mutta mennään

631
00:43:40.630 --> 00:43:44.850
nyt tällä taidolla eli eli eli siinä.

632
00:43:44.850 --> 00:43:50.490
Pikku tai iso hyväksytään ja mikäs
nyt tuli virheenä sieltä katsotaan.

633
00:43:50.490 --> 00:43:57.760
OK.
Hetkinen hetkinen.

634
00:43:57.760 --> 00:44:00.520
Tuliko mulla kuitenkin
ajatusvirheeli rivi?

635
00:44:00.520 --> 00:44:08.860
Numerossa satakuusitoista.
Joo.

636
00:44:08.860 --> 00:44:11.710
Jonot 2 piti olla tuossa tietysti.

637
00:44:11.710 --> 00:44:17.400
Tuossa kutsussa arvona ja tuolla jonot 3 no niin
mulla oli näköjään testialueella virhe elikkä

638
00:44:17.400 --> 00:44:21.960
tässä tässä nyt vaikka mun testi feilas niin
tulikin hyvä esimerkki siitä, että virhe ei ollut

639
00:44:21.960 --> 00:44:26.090
täällä mun oikeassa täällä koodissa
vaan virhe olikin täällä testeissä.

640
00:44:26.090 --> 00:44:30.890
Eli kun tehdään testausta niin tietysti
se virhe voi olla jommassa kummassa

641
00:44:30.890 --> 00:44:34.990
joko testikodissa taikka sitten
siellä varsinaisessa ohjelmakodissa ja

642
00:44:34.990 --> 00:44:36.870
nyt tällä kertaa se oli siellä testeissä.

643
00:44:36.870 --> 00:44:42.620
No niin hyvä mutta nyt saadaan sieltä
suksia ja homma menee menee läpi.

644
00:44:42.620 --> 00:44:47.680
No tästä tietysti sitten seuraava pykälä
olisi niin että että tota me emme kiinteästi

645
00:44:47.680 --> 00:44:53.100
kirjoittaa sitä ennen tätä kirjoitusmerkkiä
vaan voisimme antaa sen parametrin

646
00:44:53.100 --> 00:45:09.210
arvona, mutta jätetään se
kuitenkin kotitehtäväksi.

647
00:45:09.210 --> 00:45:14.310
Siirrytään seuraavaan asiaan ja aletaan
käsittelemään tyyppijärjestelmää ja nyt

648
00:45:14.310 --> 00:45:19.150
mä sanon tähän heti alkuun, että
kyseessä on jokseenkin tekninen asia.

649
00:45:19.150 --> 00:45:22.290
Kuitenkin sellainen, jota
me emme voi oikein välttää.

650
00:45:22.290 --> 00:45:27.200
Puhuttiinpa me sitten sharp pyyntöni
javasta tai mistä tahansa ohjelmointikielestä

651
00:45:27.200 --> 00:45:32.030
ehkä poislukien muutamia sellaisia kieliä,
jotka operoi pelkästään niin sanotussa

652
00:45:32.030 --> 00:45:37.150
pinossa, mutta tää koskee tää asia mitä
tässä käsitellään, niin koskee kuitenkin

653
00:45:37.150 --> 00:45:40.510
hyvin hyvin monia
moderneja ohjelmointikieliä.

654
00:45:40.510 --> 00:45:43.880
Erityisesti näitä kaikkein suosituimpia.

655
00:45:43.880 --> 00:45:48.140
Me lähinnä tästä tyyppijärjestelmästä
raapaistaan nyt pintaa tässä,

656
00:45:48.140 --> 00:45:50.840
mutta otetaan niitä kaikista
oleellisimpia asioita.

657
00:45:50.840 --> 00:45:57.400
Kuitenkin tyyppijärjestelmä koostuu
siis sellaisista tyypeistä, jotka voidaan

658
00:45:57.400 --> 00:46:01.300
luokitella arvopohjaisiin
tyyppeihin ja viitettä tyyppeihin.

659
00:46:01.300 --> 00:46:08.680
Tää on niinku se 2 kategoriaa, joihin nää mikä
tahansa niistä muuttujista joita käytetään niin

660
00:46:08.680 --> 00:46:14.600
kuulu eli käytettiinpä sitten intia
boolia tai fysiikka olet tai mitä tahansa.

661
00:46:14.600 --> 00:46:18.340
Eri tyyppiä sille meidän muuttaja niin se
kuuluu jompaankumpaan näistä kategorioista

662
00:46:18.340 --> 00:46:22.790
joko arvopohjaiseen taikka
viitepohjaiseen tyyppiin.

663
00:46:22.790 --> 00:46:29.510
No se minkä takia nää jaotellaan tällä tavalla
liittyy muistin hallintaan eli nää arvopohjaiset

664
00:46:29.510 --> 00:46:34.880
tyypit ja viinipohjaiset tyypit
ovat hieman eri kuin lokeroissa.

665
00:46:34.880 --> 00:46:38.710
Siellä tietokoneen sisäisessä
muistissa ja sen takia

666
00:46:38.710 --> 00:46:41.480
niitä täytyy tällä tavalla luokitella.

667
00:46:41.480 --> 00:46:47.180
Ne eri lokerot siellä tietokoneen
sisäisessä muistissa ja se

668
00:46:47.180 --> 00:46:49.750
tapa millä sharp sitten
sitä muistia hallitsee.

669
00:46:49.750 --> 00:46:54.430
Niitä kutsutaan nimellä pinoja kekoon
ja puhutaan näistä nyt lyhyesti.

670
00:46:54.430 --> 00:46:57.030
Eli kuten sanoin, niin muuttujalla
on joka jokaisella muuttujalla on siis

671
00:46:57.030 --> 00:47:00.340
oma tyyppi ja näitä tyyppejä
nyt voi olla tosiaan into.

672
00:47:00.340 --> 00:47:06.790
Apple paljo plaa plaa fyysikko physics object
taikka me voidaan tehdä niitä ihan itse uusia,

673
00:47:06.790 --> 00:47:13.290
mutta tyyppi on joko arvo puhelinta
viitteenä ei voi olla molempia yksi aikaa.

674
00:47:13.290 --> 00:47:18.420
Ja.
Arvopohjaisia muuttujia ovat.

675
00:47:18.420 --> 00:47:23.360
Esimerkiksi nämä sarpin mukana tulevat.

676
00:47:23.360 --> 00:47:28.500
Tyypit kuten interpol dope double acar.

677
00:47:28.500 --> 00:47:34.280
Eli eli ne ovat sellaisia muuttujia, jotka
ikään kuin sisältävät sen arvon itsensä.

678
00:47:34.280 --> 00:47:39.250
Se on tää arvopohjaisen
muuttujan se semmoinen perusteesi.

679
00:47:39.250 --> 00:47:45.030
Vastaavasti 5 viitepohjaisia muuttujia ovat
string kaikki taulukot, esimerkiksi inttitaulukot,

680
00:47:45.030 --> 00:47:49.710
string taulukot, double taulukot tai
fyysiset objektit, taulukot sekä kaikki klass

681
00:47:49.710 --> 00:47:53.920
tyyppiset oliot kuten
esimerkiksi fysiikka objekti.

682
00:47:53.920 --> 00:47:59.520
Taikka game object tai vaikkapa se meidän
peli, joka me tehdään siinä ohjelma.

683
00:47:59.520 --> 00:48:04.810
CS tiedostossa kun me tehdään vaikka fysiikka
peli sekin on tämmöinen clash tyyppinen

684
00:48:04.810 --> 00:48:09.720
olio tähän on tullut aika paljon viime
vuosina se ei sarjoissa semmoista extra

685
00:48:09.720 --> 00:48:14.230
juttua lisää joilla vähän
niinku voidaan tehdä taas.

686
00:48:14.230 --> 00:48:17.410
Tai, joka tuo vähän
monimutkaisuutta lisää tähän juttuun.

687
00:48:17.410 --> 00:48:21.070
Me ei käsitellä näitä monimutkaisia
juttuja tällä kurssilla.

688
00:48:21.070 --> 00:48:27.920
Oleellista on ymmärtää, että on
niinku 2 kategoriaa näille muuttujille.

689
00:48:27.920 --> 00:48:29.740
Ja.

690
00:48:29.740 --> 00:48:34.800
Tosissaan niinku jo tuossa mainitsinkin
niin tää syy minkä takia näitä kategorioita

691
00:48:34.800 --> 00:48:41.320
on 2 niin se liittyy siihen että että kuinka
näitä ohjelman sisältämiä tietoja hallitaan

692
00:48:41.320 --> 00:48:47.080
siellä tietokoneen ohjelman ajon aikana
keskusmuisti ja nyt pitää ymmärtää se asia niin

693
00:48:47.080 --> 00:48:51.920
että me tehdään tällä kurssilla pieniä
ohjelmia, mutta oikeasti ohjelmat voivat olla

694
00:48:51.920 --> 00:48:57.680
tosi massiivisia ja erityisesti massiivisella
tarkoitan sitä että ne käsittelevät suurta

695
00:48:57.680 --> 00:49:00.590
määrää dataa ei pelkästään jotain 3.

696
00:49:00.590 --> 00:49:05.820
Etunimeä tai muutamaa hassua
lukua tai viikonpäivien.

697
00:49:05.820 --> 00:49:13.350
Lämpötiloja vaan se voi sisältää 7
miljardia jotakin datapisteitä jostakin.

698
00:49:13.350 --> 00:49:16.290
Tiekartasta tai tai.

699
00:49:16.290 --> 00:49:24.140
Kaikkien suomalaisten jotakin yksityiskohtaisia
terveystietoja tai vastaavaa eli eli oikeasti

700
00:49:24.140 --> 00:49:30.530
isoilla tietokoneohjelmilla käsitellään paljon
tietoa ja sen takia näille tavallaan, että kun

701
00:49:30.530 --> 00:49:35.170
käsitellään paljon tietoa tai sitten versus
käsitellään vähän tietoa tai yksinkertaista tietoa,

702
00:49:35.170 --> 00:49:41.790
niin tämmöisille eri eri suuruusluokan tieto
kategorioille täytyy olla hieman erilaisia tiedon

703
00:49:41.790 --> 00:49:47.200
hallintajärjestelmiä ja sen
takia tässä dotnet ympäristössä.

704
00:49:47.200 --> 00:49:51.040
Siellä ohjelmassa määriteltyjä
muuttujia voidaan sijoittaa joko

705
00:49:51.040 --> 00:49:54.050
2 tämmöiseen mustikat
egoaan tai muistioon.

706
00:49:54.050 --> 00:49:59.790
Ne pinot kategorioiden
nimet ovat pinoja keko. Ja.

707
00:49:59.790 --> 00:50:01.680
Vastaanpa nyt tässä välissä
tuohon chattikysymykseen.

708
00:50:01.680 --> 00:50:07.880
Eli kyllä itse asiassa hyvä pointti eli se
olisi voitu tehdä tehdä tosissaan sanomalla.

709
00:50:07.880 --> 00:50:14.250
Tulo jono tulover siihen.
Tota noin niin.

710
00:50:14.250 --> 00:50:17.570
Joo kyllä juurikin on, eli jonot
towersin tarvitseman tuohon perään

711
00:50:17.570 --> 00:50:22.910
vielä sulta, mutta kyllä
olisi voitu tehdä noin.

712
00:50:22.910 --> 00:50:26.410
Käsitellään nyt tosissaan
tätä pinoa ja kekoa tässä ihan

713
00:50:26.410 --> 00:50:28.550
ihan niinku mahdollisimman lyhyesti.

714
00:50:28.550 --> 00:50:33.090
Yritän nyt nostaa ne peruspointti tästä,
eli ne ovat tosissaan dotnet alustan

715
00:50:33.090 --> 00:50:38.130
ja ckielen muistion hallintaan liittyviä
tietorakenteita, mutta vastaavat tietorakenteet

716
00:50:38.130 --> 00:50:41.390
ovat on käytössä melkeinpä missä tahansa.

717
00:50:41.390 --> 00:50:45.570
Olio ohjelmointikielessä
vaikuttaa siihen, kuinka ohjelma

718
00:50:45.570 --> 00:50:48.860
tallentaa ja käsittelee tietoa.

719
00:50:48.860 --> 00:50:53.260
Mä yritän lyhyesti poimia tästä
pitkältä slaidista oleelliset asiat eli

720
00:50:53.260 --> 00:50:57.820
pino on alue muistissa, jota käytetään
paikallisten muuttujien tallentamiseen

721
00:50:57.820 --> 00:51:00.660
sekä aliohjelma että
metodi kutsujen hallintaan.

722
00:51:00.660 --> 00:51:05.950
Eli kun me määritellään vaikkapa mainissa
paikallisia muuttujia tai negatiivisten

723
00:51:05.950 --> 00:51:10.880
lukujen summa nimisessä funktiossa
paikallisia muuttujia niitä pino on se paikka

724
00:51:10.880 --> 00:51:12.920
mihin ne paikalliset
muuttujat tallennetaan.

725
00:51:12.920 --> 00:51:16.780
Meikä eilenkin käsiteltiin
debuggeria ja siellä nähtiin

726
00:51:16.780 --> 00:51:19.600
aina siinä fredman variables alueella.

727
00:51:19.600 --> 00:51:23.470
Niitä paikallisia muuttujia ja ne
paikalliset muuttujat on tallessa

728
00:51:23.470 --> 00:51:27.080
semmoisessa tieto rakenteessa kuin pino.

729
00:51:27.080 --> 00:51:31.770
Sinne pinoon tallentuu myöskin myöskin
sen aliohjelman paikallisten muutti lisäksi

730
00:51:31.770 --> 00:51:38.800
sen paluuarvon osoitin eli eli tieto siitä
että missä siellä muistissa se paluu arvo

731
00:51:38.800 --> 00:51:43.670
sijaitsee ja nää tiedot poistuu ne ikään
kuin delegoidaan siellä tietokoneen muistista

732
00:51:43.670 --> 00:51:46.120
sen aliohjelman suorituksen
päättymisen jälkeen.

733
00:51:46.120 --> 00:51:51.140
Toisin sanoen ei ole enää mahdollista sen.

734
00:51:51.140 --> 00:51:56.680
Tota noin niin vaikkapa tän negatiivisten
summa funktion suorituksen jälkeen enää

735
00:51:56.680 --> 00:52:00.960
päästä mitenkään käsiksi tähän
lukuun tai tähän luvut muuttujaan.

736
00:52:00.960 --> 00:52:03.020
Niitä ei ikään kuin enää ole olemassa.

737
00:52:03.020 --> 00:52:09.170
Ne ne tavallaan häviää sieltä tietokoneen
keskusmuisti OK nyt joku joka on lukenut

738
00:52:09.170 --> 00:52:13.410
tietoturva asioita ja ja tietää tietokoneen
sielunelämästä ehkä vähän enemmän

739
00:52:13.410 --> 00:52:19.540
kuin minä niin tietää sen, että kyllä siihen
tavallaan siihen tiettyyn muistialueeseen

740
00:52:19.540 --> 00:52:22.180
saattaa tavalla tai toisella olla.

741
00:52:22.180 --> 00:52:28.020
Jollain hyvin, hyvin matalalla assemblertasolla
vielä pääsy, mutta noin niinku periaatteessa

742
00:52:28.020 --> 00:52:34.140
täältä meidän tekemästä ohjelmasta ei ole enää
mahdollista päästä sinne aliohjelman suorituksen

743
00:52:34.140 --> 00:52:40.510
aikaisiin paikallisten muuttujien tila tietoon
sen pinon käsittely on nopeaa, koska sen

744
00:52:40.510 --> 00:52:42.470
hallinta on yksinkertaista
ja ennustettavaa.

745
00:52:42.470 --> 00:52:44.280
Se koko on rajattu.

746
00:52:44.280 --> 00:52:47.250
Tää se miten toi viimeinen budjetti
saattaa käytännössä teille joskus

747
00:52:47.250 --> 00:52:51.620
elämässä näkyä on se, että jos te
teette tosi tosi tosi paljon aliohjelma

748
00:52:51.620 --> 00:52:53.930
kutsuja esimerkiksi rekursiivisesti.

749
00:52:53.930 --> 00:52:57.770
Aliohjelmakutsuja eli aliohjelma
kutsuu itse itseään, niin meille saattaa

750
00:52:57.770 --> 00:53:03.210
tulla semmoinen virheilmoitus kun
virheilmoitus kun stack overflow exception

751
00:53:03.210 --> 00:53:06.450
ja joku saattaa stack overflow olla
joskus kuullutkin niin se tarkoittaa

752
00:53:06.450 --> 00:53:08.480
sitä, että meillä se
pino ikään kuin täyttyy.

753
00:53:08.480 --> 00:53:16.720
Sille on siis rajallinen määrä sitä mahdollista
varattua tilaa siellä keskusmuistissa.

754
00:53:16.720 --> 00:53:20.560
No sitten vähän niinku vastakohta tulee
äskeiselle on tämmöinen hiipi keko ja se on

755
00:53:20.560 --> 00:53:26.620
muistin alue, jota käytetään sellaisten
muuttujien varaatilaan varaamiseen ja semmoiseen

756
00:53:26.620 --> 00:53:31.220
tilaan käyttö muuttujien käyttöön
joita varataan dynaamisesti.

757
00:53:31.220 --> 00:53:35.480
Eli meillä ei itse asiassa
vielä ole käsitelty sellaisia.

758
00:53:35.480 --> 00:53:39.320
Dynaamisesti allokoituja ja tota.

759
00:53:39.320 --> 00:53:43.240
Tietorakenteita, mutta taulukko
on yksi esimerkki tällaisesta,

760
00:53:43.240 --> 00:53:47.370
joka sinne kekoon kuitenkin tallentuu.

761
00:53:47.370 --> 00:53:53.310
Kun ohjelmassa luodaan uusi olio nyy
avainsanalla esimerkiksi new int taulukko tai

762
00:53:53.310 --> 00:53:58.410
new double taulukko tai new physics object tai
jotain muuta vastaavaa, niin se tallennetaan

763
00:53:58.410 --> 00:54:03.990
kekoon se varsinainen tieto itsessään eli
kaikki ne fysiikkaolian tiedot kuten paino,

764
00:54:03.990 --> 00:54:09.280
leveys, korkeus tai kuva joka sillä on ja
tallennetaan sinne kekoon muistialueen puolelle

765
00:54:09.280 --> 00:54:12.900
sen sijaan että ne olisi siellä pinossa.

766
00:54:12.900 --> 00:54:16.600
Kekoon mahdollistaa muistin dynaamisen
aallokon ja vapauttamisen, mikä tarkoittaa,

767
00:54:16.600 --> 00:54:21.560
että ohjelma voi pyytää ja vapauttaa
muistia tarpeen mukaan ja erityisesti

768
00:54:21.560 --> 00:54:26.870
se muistin vapauttaminen on oleellista,
jotta se meidän isohko ohjelma, joita

769
00:54:26.870 --> 00:54:28.670
nyt tällä kurssilla ei juuri tehdä.

770
00:54:28.670 --> 00:54:31.780
Mutta jos meillä olisi iso ohjelma,
sisältäisi paljon tietoa, niin

771
00:54:31.780 --> 00:54:36.200
tarvittaessa sitä muistia voidaan
vapauttaa muille ohjelmille käytettäväksi

772
00:54:36.200 --> 00:54:39.690
taikka sitten sille ohjelmalle itselleen.

773
00:54:39.690 --> 00:54:43.110
Kekoon muistin hallinta on
hitaampaa kuin pino muistin, koska

774
00:54:43.110 --> 00:54:45.850
se vaatii muistin
allokointi ja vapautusta.

775
00:54:45.850 --> 00:54:52.110
Eli tällä new avainsanalla niitä muistialueita
varattaessa niin se vaatii aina pikkuisen

776
00:54:52.110 --> 00:54:57.050
aikaa sieltä prosessorilta ja sieltä
keskusmuistilla jotta voidaan tehdä ne tarvittavat

777
00:54:57.050 --> 00:55:02.010
toimenpiteet ja rkielen tapauksessa myöskin
semmoisia ikään kuin turvatoimenpiteitä joilla

778
00:55:02.010 --> 00:55:06.510
varmistetaan se, että siihen muistialueeseen
ei pääse sitten myöskään kukaan muu käsiksi

779
00:55:06.510 --> 00:55:11.200
kuin se ohjelma on osa itse,
joka siihen pitää päästä.

780
00:55:11.200 --> 00:55:15.000
Tähän liittyy myös tämmöinen käsite kuka
arch collection eli roskien kerääminen,

781
00:55:15.000 --> 00:55:20.870
jota tarvitaan tilanteessa kun meidän
muistialue sirpaloituu ja tarvitsee

782
00:55:20.870 --> 00:55:24.430
järjestellä sitä muistia
uudestaan, jotta sitten.

783
00:55:24.430 --> 00:55:28.880
Uudelle tiedolle voidaan allokoida taas,
sillä nykyää avainsanalla lisää muistia.

784
00:55:28.880 --> 00:55:32.980
Katsotaan se on konkreettinen
esimerkki tuosta kohta.

785
00:55:32.980 --> 00:55:35.920
Mä otan tähän tämmöisen niinku väljän
vähän semmoisen käsien heiluttelun

786
00:55:35.920 --> 00:55:40.100
määritelmän eli pino on tietorakenne,
jonka vastuulla on pitää yllä tietoa

787
00:55:40.100 --> 00:55:42.780
siitä ikään kuin tän
hetkisestä tilanteesta.

788
00:55:42.780 --> 00:55:48.260
Mitä funktiota on kutsuttu, mistä sitä
funktiota on kutsuttu, millä parametrien

789
00:55:48.260 --> 00:55:52.520
arvoilla sitä funktiota on kutsuttu ja mitkä
on niitä tässä aliohjelmassa käytettävissä

790
00:55:52.520 --> 00:55:57.500
olevia muuttujia, eli tavallaan ne tiedot.
Jota tarvitaan.

791
00:55:57.500 --> 00:56:00.790
Vaikkapa tässä negatiivisten
summa funktion tapauksessa

792
00:56:00.790 --> 00:56:03.860
juuri juuri tän funktion suorittamiseen.

793
00:56:03.860 --> 00:56:06.920
Me tarvitaan juuri tän funktion
suorittamiseen tietoa siitä,

794
00:56:06.920 --> 00:56:09.800
että mitä tää luvut taulukko sisältää.

795
00:56:09.800 --> 00:56:12.460
Me tarvitaan tietoa, että
paljonko se meidän summa on.

796
00:56:12.460 --> 00:56:14.330
Me tarvitaan tietoa, että paljonko tää on.

797
00:56:14.330 --> 00:56:18.560
Lukuarvo on juuri tällä hetkellä ja sitten
aikanaan me tarvitaan myöskin tietoa siitä, että

798
00:56:18.560 --> 00:56:24.080
minkälainen arvo me tästä pihalle palautetaan
ja ehkäpä kaikkein tärkeimpänä loppujen lopuksi

799
00:56:24.080 --> 00:56:28.020
tietoa siitä, että minne me oikein
palataan sitten kun tää funktion.

800
00:56:28.020 --> 00:56:31.990
Suoritus päättyy ja se on tässä tapauksessa
tää rivi viisikymmentäkaksi eli kaikki

801
00:56:31.990 --> 00:56:36.290
nää tiedot on tallessa siellä
niin sanotussa pino muistissa.

802
00:56:36.290 --> 00:56:40.930
Eli ikään kuin se tän hetkinen
lokaaliympäristö on siellä pinossa tallessa.

803
00:56:40.930 --> 00:56:45.450
No sitten vastaavasti keko on tietorakenne,
jonka vastuulla on se vähän niinku vähän niinku

804
00:56:45.450 --> 00:56:52.010
ikään kuin massana säilyttää sitä dataa enemmän
ja sinne voi ohjelman aikana sitten syntyä

805
00:56:52.010 --> 00:56:57.870
syntyä sitä tietoa ja sitä
käytetään käytetään tota noin niin.

806
00:56:57.870 --> 00:57:09.280
Tarvittaessa sitten sitä sitä niitten
kekoon viittaavien tietorakenteiden kautta.

807
00:57:09.280 --> 00:57:13.140
Pinoja kekoon rakenteiden
merkitys käytännön ohjelmoinnissa.

808
00:57:13.140 --> 00:57:17.180
Arvopohjaiset muutti muuttujan
arvot, tallennetaan pinoon ja

809
00:57:17.180 --> 00:57:20.110
viitepohjaisten muuttujien
arvot tallennetaan.

810
00:57:20.110 --> 00:57:25.670
Kekoon ja viitearvo on tallennetaan pinoon
eli tää on hyvin oleellinen ero näiden välillä

811
00:57:25.670 --> 00:57:29.870
arvopohjaista muuttujia olivat siis
intro, double ball ja niin edelleen.

812
00:57:29.870 --> 00:57:35.890
Ja niinpä tämä inttiarvo tallennetaan suoraan
sinne arvoon siihen muuttujaan ikään kuin itseensä

813
00:57:35.890 --> 00:57:41.930
sinne pinoon, kun taas viitepohjaisten muuttujien
kuten fysio objekti tapauksessa ne varsinaiset

814
00:57:41.930 --> 00:57:46.260
arvot kuten leveyskorkeuskuvaa
massa ja niin edelleen.

815
00:57:46.260 --> 00:57:50.730
Ne tallennetaan sinne kekoon muistin puolelle
ja sinne pinoon tallennetaan vain viite.

816
00:57:50.730 --> 00:57:55.840
Jonkun pointteri tai osoite, että
hei tuolta jostain kaukaa toisesta

817
00:57:55.840 --> 00:58:00.800
paikasta se varsinainen
data on oikeastaan löytyy.

818
00:58:00.800 --> 00:58:06.430
Mä en nyt noita muita pointteja
tuossa käyn läpi eli siinä vähän niinku

819
00:58:06.430 --> 00:58:10.990
tän saman asian eli suoraan se
oman datansa jos me kirjoitamme inta

820
00:58:10.990 --> 00:58:15.390
on 3 niin sen AN arvo
todellakin on se luku 3.

821
00:58:15.390 --> 00:58:18.950
No sen sijaan viitepohjainen
tyyppi, kuten tuossa äsken jo sanoin,

822
00:58:18.950 --> 00:58:24.100
niin sisältää epäsuorasti
sen omaan dataansa.

823
00:58:24.100 --> 00:58:26.860
Ja ja tuosta vielä sanon sen,
että jos meillä olisi vaikka

824
00:58:26.860 --> 00:58:29.770
fysiikka oli joã, niin silloin se.

825
00:58:29.770 --> 00:58:34.390
A on oikeastaan vain
osoite sinne datan äärelle.

826
00:58:34.390 --> 00:58:39.660
Tästä seuraa se että 2
muuttujaa viitepohjaisten.

827
00:58:39.660 --> 00:58:43.800
Muuttujien tapauksessa voi itse
asiassa viitata samaan dataan ja

828
00:58:43.800 --> 00:58:48.640
tästä seuraa myöskin se, että aamun
muuttujan kautta data on tehdyt

829
00:58:48.640 --> 00:58:50.840
muutokset heijastuvat
myös muuttujan tästä.

830
00:58:50.840 --> 00:58:54.010
Katsomme kohta esimerkin.

831
00:58:54.010 --> 00:58:56.950
Muun muassa taulukot ovat
viiteohjaisia tyyppejä.

832
00:58:56.950 --> 00:59:02.560
Esimerkiksi jos kirjoitamme int a
whit 5, niin tässä AN arvo, eli se mitä

833
00:59:02.560 --> 00:59:07.320
se AN niin yksittäiset alkiot
todella ovat, niin se on.

834
00:59:07.320 --> 00:59:09.850
P.
Anteeksi anteeksi se on.

835
00:59:09.850 --> 00:59:14.130
Arvo on todellisuudessa viite siihen
sisältöön, jossa se 5 mittainen taulukko

836
00:59:14.130 --> 00:59:18.690
todella sijaitsee eli se 5 mittainen taulukko
sijaitsee siellä ekonomistin puolella,

837
00:59:18.690 --> 00:59:26.820
kun se AN arvo se osoite
sijaitseekin siellä pinossa.

838
00:59:26.820 --> 00:59:30.720
Otetaan esimerkki, arvopohjainen
muuttujan tapauksesta.

839
00:59:30.720 --> 00:59:34.840
Eli kuten tuossa äsken jo mainitsin,
niin jos meillä on into AN 3 ja sitten me

840
00:59:34.840 --> 00:59:41.260
tehdään näitä int on niin me kopioimme
sen AN sisältämän arvon tuohon muuttujalle

841
00:59:41.260 --> 00:59:44.940
ja mitä tapahtuu kun me
sanotaan on plus yks.

842
00:59:44.940 --> 00:59:49.460
Niin AN arvo säilyy eli tää että
me muutetaan tuon muuttujan arvo.

843
00:59:49.460 --> 00:59:55.760
Ei mitenkään muuta sitä muuttujaa
tota noin niin sisältö sisältävää arvoa.

844
00:59:55.760 --> 01:00:01.760
Tässä siis toi kakkosrivi toi int on a
ei ole mikään kytkentä näiden muuttuvien

845
01:00:01.760 --> 01:00:04.880
välillä, vaan se on
yksinkertainen arvon kopiointi.

846
01:00:04.880 --> 01:00:09.340
Me voitaisiin ihan katsoa tää tuossa
ihan raiderissa konkreettisesti,

847
01:00:09.340 --> 01:00:12.300
jotta ikään kuin uskotte
että näin todella on.

848
01:00:12.300 --> 01:00:14.430
Tää nyt tietysti on varmaan
tällä kurssilla tullut jo

849
01:00:14.430 --> 01:00:17.670
selväksi, mutta se saattaa nyt tässä.

850
01:00:17.670 --> 01:00:21.670
Tässä kun näistä asioista puhuttiin niin
vielä vielä vaatia uskon vahvistusta.

851
01:00:21.670 --> 01:00:25.570
Elikkä laitetaan tuohon nytten
breakpoint jotta nähdään.

852
01:00:25.570 --> 01:00:29.390
Nähdään siellä taustalla
mitä mitä tapahtuu.

853
01:00:29.390 --> 01:00:33.090
Eli meillä on nytten arvossa 3
ja tää debugger itsensä näyttää

854
01:00:33.090 --> 01:00:36.090
vähän jopa hassusti,
että ben arvo on nolla.

855
01:00:36.090 --> 01:00:40.950
Vielähän se sitä BN arvoa emme ole
tässä alustaneet, mutta jos mä nyt

856
01:00:40.950 --> 01:00:45.090
klikkaan tuossa step into niin
se bkin muuttuu kolmoseksi.

857
01:00:45.090 --> 01:00:49.760
Toisin sanoen se kolmosarvo sinne
kopioidaan muuttujan sisällöksi, mutta

858
01:00:49.760 --> 01:00:54.890
nyt se oleellinen asia eli vielä kerran
step intoa klikkaamalla muuttuu neloseksi,

859
01:00:54.890 --> 01:00:57.190
mutta eihän se aamu
muuttunut yhtään mihinkään.

860
01:00:57.190 --> 01:01:00.880
Niinpä nää ja b
osoittavat ihan oikeasti eri.

861
01:01:00.880 --> 01:01:05.750
Erja ne ovat niinku eri asioita keskenään.

862
01:01:05.750 --> 01:01:11.970
No sitten mennään seuraavaan eli
viiteenpohjaisen arvon sijoitukseen eli tehdään

863
01:01:11.970 --> 01:01:18.920
taulukko ykkönen johon heitetään arvot 1
2 3 sen jälkeen tehdään taulukko kakkonen,

864
01:01:18.920 --> 01:01:23.210
johon me sijoitetaan taulukko ykkönen
mitä me oikeastaan tulemme sijoittaaneeksi

865
01:01:23.210 --> 01:01:27.900
kun me sanomme taulukko 2 on taulukko yks.

866
01:01:27.900 --> 01:01:31.110
Ja tää on onkin aika
mielenkiintoinen juttu.

867
01:01:31.110 --> 01:01:35.190
Koska äkkiseltään voisi tietysti kuvitella
niin, että no totta kai se taulukko kakkonen

868
01:01:35.190 --> 01:01:39.290
sisältää samat arvot, mut jos
me muutetaan taulukko ykköstä.

869
01:01:39.290 --> 01:01:42.180
Taitaa olla koko kakkosta
niin mitä se tarkoittaa noille?

870
01:01:42.180 --> 01:01:44.900
Toisille arvoille katsotaanpa
tästäkin ihan konkreettinen

871
01:01:44.900 --> 01:01:52.970
esimerkki eli taulukko ykkönen.
Sisältäisi nyt 1 2 3.

872
01:01:52.970 --> 01:01:57.590
Taulukko kakkonen sijoitetaan
siihen taulukko ykkönen.

873
01:01:57.590 --> 01:01:58.980
Ja katsotaan miltä itse asiassa tää.

874
01:01:58.980 --> 01:02:01.190
Voitko tää tilanne ottaa
nyt tuonne debugeriin?

875
01:02:01.190 --> 01:02:06.870
Mulla muuten tuo näppäin oikotietä on
breakpointin asettamiseksi on 9 se voi

876
01:02:06.870 --> 01:02:10.070
sulla olla jokin muu, mutta jos nyt
ihmettelit että miten se tuonne ilmaantuu

877
01:02:10.070 --> 01:02:15.760
niin mä klikkaan tällä
näppäimistöllä tota 9 painiketta.

878
01:02:15.760 --> 01:02:18.760
Ja katsotaan miltä tuo näyttää raiderissa.

879
01:02:18.760 --> 01:02:21.550
Eli nytten jos me katsotaan ihan täältä.

880
01:02:21.550 --> 01:02:25.250
Trezen väriä plus paneelista niin
täällä nyt näyttää ihan kiltisti siltä,

881
01:02:25.250 --> 01:02:31.030
että niissä on samat arvot myy no
problem, mutta tehdään nyt se viimeinen

882
01:02:31.030 --> 01:02:35.580
juttu eli käydääntelemassa
taulukko kakkosta.

883
01:02:35.580 --> 01:02:38.260
Laitetaan vaikkapa paikkaan yksi luku 4.

884
01:02:38.260 --> 01:02:43.250
Toisin sanoen se sisältö
pitäisi olla sen jälkeen 1

885
01:02:43.250 --> 01:02:46.940
4, 3 ja nyt meillä on paketointi tuolla.

886
01:02:46.940 --> 01:02:50.870
Rivillä 2 tai itse asiassa laitetaan se brake
pointti tuohon riville kaksikymmentäneljä

887
01:02:50.870 --> 01:02:56.300
niin se on seuraavaksi
suoritusvuoron tuleva lause.

888
01:02:56.300 --> 01:02:58.100
Eli edelleen.

889
01:02:58.100 --> 01:03:00.260
Meillä on siellä luvut 1 2 3
kummassakin taulukossa, mutta nyt se

890
01:03:00.260 --> 01:03:04.500
stepintu ja hoplaa nähdään niin,
että kummankin taulukon sisältö

891
01:03:04.500 --> 01:03:07.920
muuttui ja tää on nytten
aika erikoinen juttu.

892
01:03:07.920 --> 01:03:13.220
Varmaan äkkiseltään, mutta oleellista
on ymmärtää mitä tuossa tapahtuu.

893
01:03:13.220 --> 01:03:15.700
Eli tässä me emme sijoita.

894
01:03:15.700 --> 01:03:19.940
Taulukko ykkösen sisältämiä kaikkia
lukuja erikseen uuteen taulukkoon.

895
01:03:19.940 --> 01:03:22.900
2 vaan me sijoitamme taulukko yks.

896
01:03:22.900 --> 01:03:30.980
Pinossa olevan viitteen
taulukko 2 liitteeksi.

897
01:03:30.980 --> 01:03:34.800
Ja mä nyt oon koittanut piirrellä tähän
vähän tämmöisiä kuvia, joka ehkä toivottavasti

898
01:03:34.800 --> 01:03:37.640
pikkuisen havainnollisti
vielä lisää tätä asiaa.

899
01:03:37.640 --> 01:03:41.340
Eli kun me teemme inta on kolmosen,
niin me sinne pinoon eli stackin

900
01:03:41.340 --> 01:03:44.600
ja englannin kielellä
niin sen arvon laitamme.

901
01:03:44.600 --> 01:03:49.260
Vastaavasti jos me teemme uuden
muuttujan b, niin sitten se ikään kuin

902
01:03:49.260 --> 01:03:52.800
varaa täältä sitä kiistä
uuden tällaisen pinon lokeron.

903
01:03:52.800 --> 01:03:58.150
Ja pahoittelut nyt, että itsessä nyt jos
joku teknisesti ymmärtää asiaa enemmän,

904
01:03:58.150 --> 01:04:01.640
niin tavallaan tää on ehkä
aavistuksen verran huonon.

905
01:04:01.640 --> 01:04:04.850
Kuvaa tästä sitäkistä,
kun kyseessä on tämmöinen.

906
01:04:04.850 --> 01:04:07.190
Ihan konkreettisestikin semmoinen.

907
01:04:07.190 --> 01:04:12.000
Pinot joka ikään kuin kasvaa
ylöspäin, mutta olkoon nyt elikkä nyt,

908
01:04:12.000 --> 01:04:16.460
jos me sanotaan on yksi
kuin eli sijoitamme BN.

909
01:04:16.460 --> 01:04:20.380
Sisältämä sijoitumme
muuttujaan BN sen arvon mikä

910
01:04:20.380 --> 01:04:24.290
ssa on me kopioimme sen kolmosen sinne.

911
01:04:24.290 --> 01:04:31.130
B muuttujan sisällöksi ja sen
jälkeen molemmissa on kolmonen ja nyt.

912
01:04:31.130 --> 01:04:34.790
Seuraava asia elikkä
tehdään sitten muuttuja.

913
01:04:34.790 --> 01:04:38.470
Tee, johon sijoitetaan
luvut 1 2 3 eli on nytten

914
01:04:38.470 --> 01:04:41.690
taulukko ja niinpä se on olio muuttuja.

915
01:04:41.690 --> 01:04:44.660
Ja tää varaakin sitten sieltä
keon puolelta eli hiipumista.

916
01:04:44.660 --> 01:04:49.470
Nytten pienen palasen sitä muistia johon
sitten tungetaan ne varsinaiset sisällöt.

917
01:04:49.470 --> 01:04:54.790
Tässä tapauksessa luvut 1 2 3 tää saa
jonkun osoitteen ja nyt tässä sitä osoitetta

918
01:04:54.790 --> 01:04:58.970
merkataan tommoisella merkinnällä
dollarin yksi se voi tietysti olla.

919
01:04:58.970 --> 01:05:02.330
Oikeasti jokin vähän pitempi luku.

920
01:05:02.330 --> 01:05:08.240
Se tämmöinen muistiosoite näissä
kuusikymmentäneljä bittisissä.

921
01:05:08.240 --> 01:05:13.520
Tota noin niin käyttöjärjestelmissä on
kuusikymmentäneljä bittiä, pitkä osoite

922
01:05:13.520 --> 01:05:18.740
eli kuusikymmentäneljä ykköstä niin on
ykkösen kurdi kuudenkymmenenneljän ykkösen

923
01:05:18.740 --> 01:05:23.170
nolla muodostama jono
joka voi olla jokin luku.

924
01:05:23.170 --> 01:05:25.450
Aika iso luku.

925
01:05:25.450 --> 01:05:32.380
Ja tämä iso luku sitten tulee sen muuttujan
tee arvoksi täällä sitäkin puolella.

926
01:05:32.380 --> 01:05:36.280
Eli tuolta näyttää se stack nyt
tämmöisten koodiriviä jälkeen.

927
01:05:36.280 --> 01:05:40.210
Hyvä ja nyt lähdetään sitten
tekemään jotain vähän muutosta.

928
01:05:40.210 --> 01:05:45.710
Eli tehdään 2 muuttuja jolle annetaan
arvot 3 2 1 ja nyt kun me sanotaan new

929
01:05:45.710 --> 01:05:50.860
int niin se varaa taas tuolta heepin
puolelta sitten uuden muistio lohkareen joka

930
01:05:50.860 --> 01:05:55.960
saa jonkin muistiosoitteen ja sitten se
muistiosoitteen arvo tässä tapauksessa

931
01:05:55.960 --> 01:05:59.940
dollari kakkonen nyt on nyt
tämmöinen kuvitteellinen.

932
01:05:59.940 --> 01:06:03.110
Dollari kakkonen, mutta
joka tapauksessa se osoite

933
01:06:03.110 --> 01:06:06.970
osoite tulee sinne kakkosen arvoksi.

934
01:06:06.970 --> 01:06:10.890
No nyt se viite pohjaisten
muuttujien kanssa.

935
01:06:10.890 --> 01:06:16.690
Operointi saa nyt tässä sen huippukohdan
elikkä kakkoseen sijoitetaan teen

936
01:06:16.690 --> 01:06:21.490
sisältämä arvo niin mitä me
itse asiassa sinne sijoitamme.

937
01:06:21.490 --> 01:06:28.300
Me kopioimme tuolta sitä kiistä sen
dollarin ykkösen dollari kakkoseen.

938
01:06:28.300 --> 01:06:33.020
Tai siis kakkoseen ja siellä olik
dollari kakkonen, mutta tämän operaation

939
01:06:33.020 --> 01:06:37.580
jälkeen siellä on tietysti dollari ykkönen
ja nyt kun se dollari ykkönen osoittaa

940
01:06:37.580 --> 01:06:43.160
tuonne hiipiessä tuonne yläpuolella
olevaan lokeroon, niin kyllä sekä ykkönen

941
01:06:43.160 --> 01:06:46.920
että kakkonen osoittivat
sen jälkeen tonne.

942
01:06:46.920 --> 01:06:53.350
Lokero missä on nuo 1 2 3 no ennen kun mennään
kaapistailemaan tuota seuraavaa keltaisella

943
01:06:53.350 --> 01:06:57.170
olevaa juttua niin mietitään
hetki että mitä tapahtuu tälle.

944
01:06:57.170 --> 01:07:01.530
Eli nythän tätä muistialuetta
ei enää kukaan ikään kuin omista.

945
01:07:01.530 --> 01:07:09.070
Siihen ei kukaan enää osoita ja mikään
muuttuja ei enää viittaa siihen muistialueeseen

946
01:07:09.070 --> 01:07:13.210
ja silloin tämä muistialue
muuttuu niin sanotusti roskaksi.

947
01:07:13.210 --> 01:07:16.710
Sille annetaan semmoinen erityinen
merkintä jota mä nyt en tähän kuvaan

948
01:07:16.710 --> 01:07:19.710
ole laittanut, mutta sinne
tulee semmoinen pieni.

949
01:07:19.710 --> 01:07:24.970
Pieni viputanen näin, että tämä on
nyt roskaa ja sen pienen vivun ansiosta

950
01:07:24.970 --> 01:07:30.550
me voidaan sitten myöhemmin tai CR
ajonaikainen ympäristö voi sen myöhemmin

951
01:07:30.550 --> 01:07:34.170
käydä käydä ikään kuin
vapauttamassa sen muistin.

952
01:07:34.170 --> 01:07:36.180
Katsotaan sitä kohta.

953
01:07:36.180 --> 01:07:42.300
Mutta OK nyt jos me sanotaan että kakkosen
paikassa oleva nolla kakkosen nolla paikassa

954
01:07:42.300 --> 01:07:50.500
oleva arvo muutetaan neloseksi niin me
otetaan sieltä kakkosen dollari yks.

955
01:07:50.500 --> 01:07:54.110
Osoitteesta eli tuota
nuolta pitkin kuljetaan.

956
01:07:54.110 --> 01:07:57.710
Tänne sisältöön tänne
lokeroon otetaan paikka nolla.

957
01:07:57.710 --> 01:08:02.830
Eli aivan tää ensimmäinen alkio ja
käydään pumppaamassa sinne luku 4 ja kyllä

958
01:08:02.830 --> 01:08:08.690
se nelonen muuttuu sinne sen muisti lokeron
sisältö on sen jälkeen 4 2 3 ja tarkasteltiinpa

959
01:08:08.690 --> 01:08:14.130
me kumpaan nuolta pitkin tahansa sitten
sitä tilannetta joko teen kautta tai

960
01:08:14.130 --> 01:08:19.170
kakkosen kautta niin kummastakin
perspektiivistä katsottuna se tilanne näyttää

961
01:08:19.170 --> 01:08:21.340
samalta eli 4 2 kolmoselta.

962
01:08:21.340 --> 01:08:24.650
No sitten jos me tehdään muutos eli t.

963
01:08:24.650 --> 01:08:28.910
Taulukon kakkospaikka muuttaa
vitoseksi, niin sen jälkeen.

964
01:08:28.910 --> 01:08:31.670
Tai tässä tilanteessahan me
mennään tätä nuolta pitkin

965
01:08:31.670 --> 01:08:35.270
tänne paikassa 2 on siellä luku 3.

966
01:08:35.270 --> 01:08:42.800
Muutetaan se vitoseksi jolloinka dollari yks
osoitteen päässä on sisältynyt 4 2 5 eli tavallaan

967
01:08:42.800 --> 01:08:48.760
me kumpaa tahansa muuttujaa
käsitellessämme tulemme muuttaneet saman.

968
01:08:48.760 --> 01:08:56.860
Tota noin niin sisällön
arvoa täällä heepin puolella.

969
01:08:56.860 --> 01:08:59.260
No muisti, johon ei siis
ohjelmassa enää viitata.

970
01:08:59.260 --> 01:09:04.180
Merkitään automaattisesti roskaksi ja tuossa
edellisessä esimerkissä se viitteen dollari 2 vaatima

971
01:09:04.180 --> 01:09:11.680
alue muuttuikin nyt roskaksi ja CSR järjestää
automaattisesti muisti ja tarvittaessa sillä tavoin,

972
01:09:11.680 --> 01:09:16.060
että uusia muuttujia voidaan
taas allokoida kekoon muistiin.

973
01:09:16.060 --> 01:09:21.910
Ja tää on älyttömän iso juttu c
sharp verrattuna vaikkapa kieleen,

974
01:09:21.910 --> 01:09:25.220
jossa tämmöistä automaattista
muistien hallintaa ei ole.

975
01:09:25.220 --> 01:09:30.900
Eli tämmöinen dollari kakkonen siellä c
sharky anteeksi kielessä täytyy itse käydä

976
01:09:30.900 --> 01:09:36.800
vapauttamassa, mutta carpi osaa
tätä vapauttamista tehdä tehdä itse.

977
01:09:36.800 --> 01:09:42.850
Eli leikitään nyt, että meillä olisi
luotuna sinne useita tämmöisiä muistia,

978
01:09:42.850 --> 01:09:48.300
muistia vaativia olijoita vaikkapa tämmöisiä
inttitaulukoita ja mä oon nyt nimennyt

979
01:09:48.300 --> 01:09:53.710
tässä OBJXBJ 2 OBJ 3 OJ
ykkönen on tuon mittainen.

980
01:09:53.710 --> 01:09:55.670
Muistipätkä siellä muistissa.

981
01:09:55.670 --> 01:10:01.200
Ob kakkonen on vähän pitempi ja OBJ
kolmonen on sitten taas vähän lyhyempi.

982
01:10:01.200 --> 01:10:05.260
No sitten leikitään että siihen OBJ
kakkoseen ei enää kukaan viittaaisikaan.

983
01:10:05.260 --> 01:10:09.720
Elikkä se muuttuu nyt tällaiseksi
vapaaksi muistialueen sitä ei enää tarvita.

984
01:10:09.720 --> 01:10:12.830
Se on siis merkitty ikään kuin roskaksi.

985
01:10:12.830 --> 01:10:18.010
No sitten me luodaan vähän isompi objekti
sinne OBJ nelonen ja se vaatii tosi paljon

986
01:10:18.010 --> 01:10:21.310
tilaa ja näyttää siltä että meidän
muistio on pikkuhiljaa täyttymässä.

987
01:10:21.310 --> 01:10:25.290
Eli jos nyt leikitään että tää meidän muistipaikka
loppuisi tähän näin niin sehän tarkoittaisi

988
01:10:25.290 --> 01:10:29.590
sitä että kovin paljon tavaraa
sinne ei enää mahdu ja nytten.

989
01:10:29.590 --> 01:10:32.800
Jos kävisin niin, että me tarvittaisiin.

990
01:10:32.800 --> 01:10:37.520
Aika iso pätkä tää muistia vaikkapa tämmöinen
pätkä ja sitten tuommoinen pätkä tuolta

991
01:10:37.520 --> 01:10:43.400
niin silloinhan ei olisi mahdollista sellaista
tehdä ja tätä muistia silloin täytyy järjestellä

992
01:10:43.400 --> 01:10:48.120
uudestaan ja tää niin sanottu automaattinen
roskien keruu voisin automaattisen järjestelyn

993
01:10:48.120 --> 01:10:57.080
tehdä eli käy konkreettisesti
siirtämässä tän OBJ kolmosen

994
01:10:57.080 --> 01:11:03.640
sitten vähän tänne vasemmalle päin ja obj
nelosen vähän tänne vasemmalle päin, jotta

995
01:11:03.640 --> 01:11:04.760
tätä muistipatkaa sitten voidaan
täältä lopusta tasoittaa käyttöön.

996
01:11:04.760 --> 01:11:06.560
Eli tommoinen automaattinen roskia hallinta
cesar löytyy ohjelmoin, ei tarvitse sitä.

997
01:11:06.560 --> 01:11:09.430
Aktiivisesti itse pohtia,
eikä tehdä sitä varsinaisesti.

998
01:11:09.430 --> 01:11:11.670
Itse ellei erikseen halua.

999
01:11:11.670 --> 01:11:17.090
Tämä ei johdu niinkään siitä, että nykykoneessa
olisi paljon muistia vaan siitä, että

1000
01:11:17.090 --> 01:11:22.310
se tota noin niin roskien keruu hoituu
siellä sarvissa automaattisesti.

1001
01:11:22.310 --> 01:11:28.350
Jos meillä on jokin aika kriittinen
järjestelmä, kuten vaikkapa ehkä

1002
01:11:28.350 --> 01:11:31.840
tämmöinen, hieman vähemmän aika
kriittinen voi olla joku tietokonepeli,

1003
01:11:31.840 --> 01:11:35.750
jossa tapahtuu nopealla
tempolla jotain asioita.

1004
01:11:35.750 --> 01:11:40.390
Vaikka joku taistelupeli
niin niin tuota on tietysti

1005
01:11:40.390 --> 01:11:43.430
mahdollista, että se roskien keruu.

1006
01:11:43.430 --> 01:11:48.420
Toisin sanoen tämä hetki kun näitä muistialueita
täällä järjestellään uudestaan, niin

1007
01:11:48.420 --> 01:11:53.640
vie vähän aikaa ja se saattaa sitten
näkyä vähän nykimisena siinä pelissä.

1008
01:11:53.640 --> 01:11:59.000
Joku hieman oikeasti kriittisempi järjestelmä,
kuten vaikkapa joku auton jarruttaminen tai

1009
01:11:59.000 --> 01:12:05.940
tai joku tehdas ympäristö, niin silloin se
roskien keruun vaatima aika resurssi täytyy ihan

1010
01:12:05.940 --> 01:12:09.860
oikeasti ottaa huomioon tai saattaa
tapahtua jotain katastrofaalista.

1011
01:12:09.860 --> 01:12:12.110
Eli tavallaan.

1012
01:12:12.110 --> 01:12:17.070
On on tilanteita, jossa se roskien keruu saattaa
viedä niin paljon aikaa, että se on tilanne

1013
01:12:17.070 --> 01:12:20.490
mihin meillä ei ole yksinkertaisesti
varaa ja silloin se pitää ottaa huomioon.

1014
01:12:20.490 --> 01:12:25.170
Ja tietysti tommoisissa ääritilanteissa,
kuten vaikkapa jossain auton jarruttamisen

1015
01:12:25.170 --> 01:12:29.330
yhteydessä, niin sitten voi tulla se kysymys,
että onko se automaattinen roskia hallinta

1016
01:12:29.330 --> 01:12:34.690
edes edes hyvä ominaisuus, mutta tällä
kurssilla ei todellakaan todellakaan semmoisiin

1017
01:12:34.690 --> 01:12:37.780
tilanteisiin tulla tulla
tulla tota pääsemään.

1018
01:12:37.780 --> 01:12:41.310
Mutta mutta noin niinku
teoriassa se on hyvä mikä on.

1019
01:12:41.310 --> 01:12:44.130
Myöhemmin sitten hyvä ottaa huomioon.

1020
01:12:44.130 --> 01:12:47.870
No slaidit olisi siinä
katsotaan oliko mulla tuolla.

1021
01:12:47.870 --> 01:12:54.500
Enemmän esimerkkejä noista.

1022
01:12:54.500 --> 01:12:59.940
Noista tota viitteistä vielä.

1023
01:12:59.940 --> 01:13:04.140
Aika on itse asiassa melkein käytetty.

1024
01:13:04.140 --> 01:13:07.300
Tyy vilkaistaanpa sinne
demo tehtävien puolelle.

1025
01:13:07.300 --> 01:13:13.520
Mulla oli pari esimerkkiä tuossa, mutta mä
taidan jättää ne ensi viikkoon eli demo vitosen

1026
01:13:13.520 --> 01:13:22.210
kohdalla joka on tän kerran demo niin
nuo asiat taitaapi riittää elikkä tuossa.

1027
01:13:22.210 --> 01:13:28.790
Vitosessa tarvittavat asiat käsiteltiin kotoisessa
tarvittavat asiat käsiteltiin ja seiskassa

1028
01:13:28.790 --> 01:13:34.170
tarvittavat asiat käsiteltiin elikkä kyllä ja
käsissäkin tarvittavat asiat käsiteltiin, jotenka

1029
01:13:34.170 --> 01:13:41.520
en en ota enempää asiaa mitä ei tänään
enää tarvita, jotenka päätellään.

1030
01:13:41.520 --> 01:13:47.450
Tämänkertainen luento tähän ei muuta
kuin mukavaa viikon jatkoa kaikille.

1031
01:13:47.450 --> 01:13:51.030
Muistakaa tosissaan se harkkotyön
aikataulutus ja käväisin käynnissä

1032
01:13:51.030 --> 01:13:53.090
ohjauksissa näyttämässä ohjelmoijalle.

1033
01:13:53.090 --> 01:13:57.100
Sitä suunnitelmaa ei muuta
kuin mukavaa viikonloppua

1034
01:13:57.100 --> 01:13:59.350
kaikille ja ensi viikolla tavataan.
Moi moi.