WEBVTT Kind: captions; Language: fi

1
00:00:01.030 --> 00:00:02.770
Oikein hyvää huomenta kaikille.

2
00:00:02.770 --> 00:00:04.570
Tervetuloa seuraamaan luentoa.

3
00:00:04.570 --> 00:00:07.240
Numero 7 on ollut yksi kurssilla
keväällä kaksikymmentäneljä.

4
00:00:07.240 --> 00:00:11.160
En tän päivän aiheita on testaaminen
ja merkkijonot ja lähdetään

5
00:00:11.160 --> 00:00:14.600
liikkeelle tuosta testaaminen aiheesta.

6
00:00:14.600 --> 00:00:19.210
Eli kun me tuotetaan ohjelmistoja, niin
meidän täytyy jotenkin jollakin tavalla

7
00:00:19.210 --> 00:00:22.560
varmistaa siitä, että me ollaan tekemässä
oikeata asiaa, että se meidän tekemä

8
00:00:22.560 --> 00:00:28.670
ohjelma toimii ja nyt testaaminen on
sitten sen tutkimista niin että ohjelma

9
00:00:28.670 --> 00:00:30.960
käyttäytyy sillä odotetulla tavalla.

10
00:00:30.960 --> 00:00:36.000
Meillähän on jonkunlainen vaatimusmäärittely
tai joku speksi annettu asiakkaan toimesta

11
00:00:36.000 --> 00:00:40.640
tai jonkun muun henkilön toimesta sille niin
että kuinka se meidän ohjelman pitää toimia

12
00:00:40.640 --> 00:00:43.680
ja jollakin tavalla meidän
ohjelmoijana täytyy siitä varmistua.

13
00:00:43.680 --> 00:00:46.920
No on olemassa tietysti
erikseen tämmöisiä testaus.

14
00:00:46.920 --> 00:00:51.430
Ammattilaisia ja testaajia, mutta noin
periaatteessa ohjelmoijan täytyy kuitenkin

15
00:00:51.430 --> 00:00:55.780
olla olla suurin piirtein varma siitä,
että se ohjelma toimii sillä tavalla,

16
00:00:55.780 --> 00:01:00.380
kun sen odotetaan toimivan,
tekee sen mitä se halutaan.

17
00:01:00.380 --> 00:01:03.500
Testaamisen tarkoituksena on
löytää virheitä ohjelmistosta,

18
00:01:03.500 --> 00:01:06.890
jotta ne voidaan paljastaa ja korjata.

19
00:01:06.890 --> 00:01:09.410
Se on testauksen tavoite.

20
00:01:09.410 --> 00:01:13.570
Testauksen tavoite ei ole tuottaa
täysin virheetöntä ohjelmaa.

21
00:01:13.570 --> 00:01:16.070
Se ei valitettavasti ole mahdollista.

22
00:01:16.070 --> 00:01:21.050
Testauksesta huolimatta ohjelmistossa
aina on olemassa virheitä ja

23
00:01:21.050 --> 00:01:26.590
täysin oikeaksi todistaminen
on vaikeaa tai mahdotonta.

24
00:01:26.590 --> 00:01:29.810
No lähdetään ottamaan
esimerkkejä siitä, että miten.

25
00:01:29.810 --> 00:01:33.250
Miten me voitaisiin testausta
sitten käytännössä suorittaa?

26
00:01:33.250 --> 00:01:38.220
No jos ohjelman pitäisi sulkeutua painamalla
ruksia, niin jos me sitten klikataan

27
00:01:38.220 --> 00:01:41.180
sitä ruksia sieltä meidän ohjelmasta, niin
se ei sulkeudukaan niin selkeästi ollaan

28
00:01:41.180 --> 00:01:45.880
löydetty bugi tai virhe eli eli tää on niinku
yksi tapa teistä tota niin että kokeillaan

29
00:01:45.880 --> 00:01:50.890
sitä ohjelman toimintaa vaikkapa sitten
hiirellä tai näppäimistöllä tai millä hyvänsä

30
00:01:50.890 --> 00:01:53.100
ja todetaan niin että ei toimi.

31
00:01:53.100 --> 00:01:57.730
No toinen esimerkki voisi olla sellainen,
että me yritetään laskea postikuluja.

32
00:01:57.730 --> 00:02:04.540
Yksi meillä on tuotteet ja ja
niissä on sitten postikulut 3 93 92 eri

33
00:02:04.540 --> 00:02:08.680
tuotteessa ja näistä sitten
pitäisi laskea postikulut yksi.

34
00:02:08.680 --> 00:02:12.840
No jos se meidän ohjelma on
koodattu väärin, niin me saatetaan

35
00:02:12.840 --> 00:02:15.860
saada, että yhteenlasketut
postikulut ovat 3.

36
00:02:15.860 --> 00:02:19.200
9, 0, 4. 9 0 tai
jotain vastaavaa.

37
00:02:19.200 --> 00:02:21.160
Eli tässä nyt varmaan.

38
00:02:21.160 --> 00:02:25.420
Selvää on se niin, että nuo luvut
eivät ole sitten siellä ohjelman sisällä

39
00:02:25.420 --> 00:02:31.530
esitetty oikealla tavalla,
jotenka se yhteenlasku ei toimi.

40
00:02:31.530 --> 00:02:36.430
No ohjelman testaamisella on
monia eri tapoja ja yksi tapa.

41
00:02:36.430 --> 00:02:43.350
Tai no joo elikkä siis se se miten me
ollaan interaktiossa ohjelmiston kanssa, niin

42
00:02:43.350 --> 00:02:48.290
sillä on tietysti merkitystä siihen, että
miten se testaus sitten menee eli eli tota

43
00:02:48.290 --> 00:02:53.280
me voidaan sille ohjelmistolle
antaa syötteitä eli painaa sitä.

44
00:02:53.280 --> 00:02:56.120
Viruksia sieltä on oikeastaan
yläreunasta kokeilla.

45
00:02:56.120 --> 00:03:01.800
Meneekö ohjelma kiinni taikka antaa niitä
eri tuotteiden postikuluja ja kokeilla sitä

46
00:03:01.800 --> 00:03:06.920
kautta ikään kuin syötteiden kautta,
että mitä sieltä mitä sieltä tulee.

47
00:03:06.920 --> 00:03:11.750
Kolmas tapa voisi olla sellainen niin,
että annetaan sille joukko syötteitä.

48
00:03:11.750 --> 00:03:20.440
Esimerkiksi vaikka luvut 

49
00:03:20.440 --> 00:03:28.010
nolla 1000 ja sitten annetaan vastaavasti myöskin ne tulokset.
Elikkä jos postikulut 

50
00:03:28.010 --> 00:03:28.010
on vaikka nolla ja yks niin sitten
annetaan tälle yhteenlasketulla

51
00:03:28.010 --> 00:03:29.810
summalle vastine ykkönen
annetaan postikulut yksi ja 2.

52
00:03:29.810 --> 00:03:34.430
Ja odotetaan, että sitten tämä yhteenlaskettu
postikulu olisi 3 ja niin edelleen.

53
00:03:34.430 --> 00:03:42.820
Eli voidaan antaa tällaisia syöte.
Vaste pareja.

54
00:03:42.820 --> 00:03:47.970
Testausta tapahtuu monella tasolla, eli eli
meillä on ihan tietotekniikalla oma oma tällainen

55
00:03:47.970 --> 00:03:53.210
testauskurssin jossa käydään hyvin syvällisestikin
läpi eri tapoja testata ja ja ikään kuin

56
00:03:53.210 --> 00:03:57.580
niitä eri ohjelmistokehityksen
vaiheissa ilmeneviä eri testaustapoja.

57
00:03:57.580 --> 00:04:00.380
Mutta tällä kurssilla me
emme mene niin syvällisesti.

58
00:04:00.380 --> 00:04:05.660
Asiaan vaan vaan käsitellään niin
sanotusti yksikkötestausta eli käytännössä

59
00:04:05.660 --> 00:04:07.830
yksi aliohjelman
testaamista ja kerrallaan.

60
00:04:07.830 --> 00:04:10.590
Nythän me ollaan ollaan tehty aliohjelmia.

61
00:04:10.590 --> 00:04:15.950
Muutamia erilaisia ja aikaisemmilla viime
viikon luennolla tutustuttiin he funktioihin,

62
00:04:15.950 --> 00:04:22.390
joille voidaan antaa syötteitä ja
sitten niiltä voidaan odottaa tulosta.

63
00:04:22.390 --> 00:04:28.420
Ja erityisesti tällaisten funktioiden
testaamiseen keskitytään tällä kurssilla.

64
00:04:28.420 --> 00:04:32.160
No tähän nyt heti huomautusta tätä
ja vähän jo tuossa sivusinkin äsken.

65
00:04:32.160 --> 00:04:38.040
Eli on ääretön määrä tapoja käyttää käyttää
ohjelmistoa eli me emme voi valitettavasti

66
00:04:38.040 --> 00:04:42.390
koskaan tulla täysin varmaksi siitä,
että kaikilla mahdollisilla universumissa

67
00:04:42.390 --> 00:04:45.750
käytettävissä olevilla syötteillä.

68
00:04:45.750 --> 00:04:50.830
Joku ei triviaaliohjelmisto toimii täydellisesti
eli kaikkien mahdollisten syötteiden

69
00:04:50.830 --> 00:04:55.270
tutkiminen ei käytännöllisesti katse ole
mahdollista on aina mahdollista löytää

70
00:04:55.270 --> 00:04:59.670
joku pikseli siellä näytössä, jota emme
ole ehkä testaajana huomannut että klikata

71
00:04:59.670 --> 00:05:03.140
ja juuri siitä pikselistä klikkaamalla
sitten joku ohjelmisto ei välttämättä

72
00:05:03.140 --> 00:05:06.820
toimikaan elikkä käytännössä.

73
00:05:06.820 --> 00:05:11.530
Täydelliseksi osoittaminen ei ole mahdollista,
mutta mutta tämmöinen yksikötestaus

74
00:05:11.530 --> 00:05:14.750
mitä nyt tässä tullaan harrastamaan,
niin helpottaa huomattavasti sen ohjelman

75
00:05:14.750 --> 00:05:18.610
testaamista ja lähdetään
nyt liikkeelle siitä.

76
00:05:18.610 --> 00:05:22.510
Eli testataan sitä pienintä mahdollista
ohjelman palasta, joka testattavissa on.

77
00:05:22.510 --> 00:05:25.680
Ja tosiaan meidän tapauksessa
se nyt on tämmöinen funktio.

78
00:05:25.680 --> 00:05:28.520
Tässä ei siis testata ohjelman
toimintaa kokonaisuutena.

79
00:05:28.520 --> 00:05:31.070
Eli jos meillä on ohjelma,
jonne syötetään tietoja, luetaan

80
00:05:31.070 --> 00:05:33.880
tietoja, muutetaan
tietoja ja niin edelleen.

81
00:05:33.880 --> 00:05:37.700
Niin me ei tässä nyt sitten tulla tekemään
sellaista testausta, vaan me testataan

82
00:05:37.700 --> 00:05:44.520
esimerkiksi, että palauttaako summa funktio
oikean summan ja ja kolmion ala funktio

83
00:05:44.520 --> 00:05:48.180
palauttaa kun se oikean
kolmion ala niinku kuuluukin.

84
00:05:48.180 --> 00:05:51.030
Ja tosiaan tällä yksiköllä tällä
kurssilla yksiköllä viitataan

85
00:05:51.030 --> 00:05:53.170
aliohjelman jossain kirjallisuudessa.

86
00:05:53.170 --> 00:05:55.570
Sitten yksiköllä saatetaan viitata
vähän laajempaakin kokonaisuuteen, kuten

87
00:05:55.570 --> 00:06:00.320
esimerkiksi luokkaan tai
tai olioon tai niin edelleen.

88
00:06:00.320 --> 00:06:04.360
Esimerkki yksikkö testauksesta.

89
00:06:04.360 --> 00:06:07.390
Olkoon meillä funktio summa
joka ottaa 2 lukua parametrina

90
00:06:07.390 --> 00:06:10.180
ja palauttaa näiden lukujen summan.

91
00:06:10.180 --> 00:06:14.750
No tätä aliohjelma voidaan kutsua kutsua nyt
valituilla argumenteilla esimerkiksi summa

92
00:06:14.750 --> 00:06:19.880
1 3 ja sieltä tietysti odotetaan sitten,
että summan pitäisi olla 4 jos tää saatu tulos

93
00:06:19.880 --> 00:06:26.020
tai me jos tää funktiota palautunut tulos
ja sitten se tulos jota me odotetaan sieltä

94
00:06:26.020 --> 00:06:30.550
tulevaksi täsmäävät niin testin on silloin
läpäisty, eikö vaan elikkä elikkä me odotetaan

95
00:06:30.550 --> 00:06:34.480
nelosta jos me saadaan nelonen sieltä ihan
oikeasti niin siellä on testi on mennyt läpi

96
00:06:34.480 --> 00:06:36.660
ja me ollaan tyytyväisiä siihen.

97
00:06:36.660 --> 00:06:40.600
Funktion toiminta on sitten
tommoisella syötteellä.

98
00:06:40.600 --> 00:06:45.900
Jos saatu tulos ei täsmää odotettuun
tulokseen, niin testitulos on hylätty.

99
00:06:45.900 --> 00:06:49.060
Ja tää vertailu voidaan nyt kirjoittaa
esimerkiksi mayn pääohjelmaan,

100
00:06:49.060 --> 00:06:51.840
mutta oikeastaan ennen
kuin mennään tekemään tuota.

101
00:06:51.840 --> 00:06:57.040
Ehkä menin tässä vähän vähän jo asioiden
pikkuisen edelle elikkä elikkä nyt mä oon

102
00:06:57.040 --> 00:07:02.540
kirjoittanut tähän summa funktion eli
mulla on siinä 2 barometrin funktio nimeltä

103
00:07:02.540 --> 00:07:06.740
summa, joka palauttaa näiden 2
parametrin saadun luvun summan.

104
00:07:06.740 --> 00:07:11.880
Eli ihan yksinkertainen toteutus sille
return plus ja oikeastaan niin kun mennään

105
00:07:11.880 --> 00:07:16.370
tuohon mitä tuossa slaidilla
lukee niin tehdään ikään kuin.

106
00:07:16.370 --> 00:07:20.150
Vielä yksinkertaisempi tapa tutkia
niin, että mitä tää meidän ohjelma

107
00:07:20.150 --> 00:07:23.510
tekee eli sovitaan niin että
mä kutsun tätä funktiota.

108
00:07:23.510 --> 00:07:26.530
Summa nyt näillä argumenteilla
yksi ja 3 eli tietysti

109
00:07:26.530 --> 00:07:28.870
sieltä nyt pitäisi tulla se luku 4 ulos.

110
00:07:28.870 --> 00:07:32.530
No mikä on se kaikista yksinkertaisin
tapa, jolla mä voin todeta että mitä

111
00:07:32.530 --> 00:07:37.850
sieltä pihalle tulee, niin varmaan tää
tulostuslause on se kaikista yksinkertaisin

112
00:07:37.850 --> 00:07:45.060
tapa eli tehdään tästä nyt tämmöinen.
Tämmöinen tuota.

113
00:07:45.060 --> 00:07:49.080
Jossain mielessä ehkä se kaikki sitä
yksinkertaisin mahdollinen testausmenetelmä.

114
00:07:49.080 --> 00:07:52.270
Elikkä tulostusestaus mä nyt laitan
sen tämmöisen regionin sisään,

115
00:07:52.270 --> 00:07:55.260
niin se vähän helpottaa
lukemista myöhemmin.

116
00:07:55.260 --> 00:08:00.700
Eli kun tulostetaan funktion tulosarvioilla
yksi ja 3 ja näin me saadaan tänne

117
00:08:00.700 --> 00:08:05.200
konsoli ikkunaan tää tulos OK jos me ei
oltaisi vielä tyytyväisiä vaan haluttaisiin

118
00:08:05.200 --> 00:08:09.060
testata vähän useammalla erilaisella
syötteellä, me voitaisi laittaa sinne vaikka

119
00:08:09.060 --> 00:08:12.660
nolla ja miinus ykkönen ja katsoa että OK.
Kuulostaako se?

120
00:08:12.660 --> 00:08:17.300
Odotetun tuloksen tuommoisessa tilanteessa
ja nythän me voidaan niinku silmämääräisesti

121
00:08:17.300 --> 00:08:22.440
todeta, että kyllä näyttäisi siltä, että
nolla ja -1 syötteellä niin sieltä se miinus

122
00:08:22.440 --> 00:08:27.500
ykkönen pullahtaa pihalle ja ollaan
tyytyväisiä ja sitten tilanteesta riippuen me

123
00:08:27.500 --> 00:08:32.280
voidaan niinku ohjelmoida joko pyyhkiä nää
rivit pois tai siirtää nää jonnekin muualle

124
00:08:32.280 --> 00:08:36.320
tai laittaa vaikka kommentteihin jolloinka
ne ei häiritse sitä meidän ohjelman todellista

125
00:08:36.320 --> 00:08:39.140
toimintaa.
Mitä me siinä ollaan oikeasti tekemässä.

126
00:08:39.140 --> 00:08:43.520
Eli totta kai me voidaan näin kokeilla
tätä tällä tavalla tulostamalla.

127
00:08:43.520 --> 00:08:45.890
Ja todeta niin että OK homma toimii.

128
00:08:45.890 --> 00:08:51.590
No tää toimii ja tää menetelmä toimii
jossain tilanteissa ja on käyttökelpoinen.

129
00:08:51.590 --> 00:08:55.330
Kyllä tietysti edelleenkin monissa
tilanteissa, mutta on tietysti hirvittävä

130
00:08:55.330 --> 00:09:01.930
alkeellinen toimintamalli ja
ja tavallaan riippuvainen siitä.

131
00:09:01.930 --> 00:09:05.650
Ehkä voisiko sanoa näin, että ohjelma
ja sen hetkisestä mielentilasta, että

132
00:09:05.650 --> 00:09:10.470
että minkälaisia testitapauksia se
nyt sitten sattuu muistamaan tämmöisiin

133
00:09:10.470 --> 00:09:14.970
tulostuslauseen siinä kirjoittaa ja
ja ja siinä mielessä aika riskialtista

134
00:09:14.970 --> 00:09:18.990
touhua edelleenkin
mainitsen vaan sen, että.

135
00:09:18.990 --> 00:09:23.390
Tää tätä edelleen käytetään ja esimerkiksi
webikokouksessa hyvin hyvin tuota

136
00:09:23.390 --> 00:09:27.490
paljon käytetty tapa tämmöinen tulostusestaus,
mutta mä nyt laitan sen tommoiseen

137
00:09:27.490 --> 00:09:31.790
pienennettiin alueeseen tuolle ja teen
sen mitä mulla tuossa slaidilla lukija

138
00:09:31.790 --> 00:09:34.590
aikaisemmin eli kirjoitetaan tämä.

139
00:09:34.590 --> 00:09:40.390
Vertailu eli sen odotetun arvon ja sitten sen
todellisen palautetun arvon vertailu tänne meinaan

140
00:09:40.390 --> 00:09:45.420
eli tehdään tää nyt seuraavaksi eli
nytten jälleen kerran mä odotan sieltä.

141
00:09:45.420 --> 00:09:49.160
Nyt en Kirjoita sitä konsoleita.
Jotenkin se sieltä.

142
00:09:49.160 --> 00:09:52.690
Selkärangasta tuppaa tulemaan vaan
siis mä haluan kutsua nyt että laitetaan

143
00:09:52.690 --> 00:09:57.440
sinne vaikka luvut 2 ja 5 eli nytten
mä syötän tälle mun funktiolle luvut 2

144
00:09:57.440 --> 00:10:01.120
ja 5 ja nyt tietysti tää on
niin yksinkertainen funktio.

145
00:10:01.120 --> 00:10:03.240
Tää nyt on vähän.

146
00:10:03.240 --> 00:10:06.760
Vähän vähän tuota mieletöntä niinku edes
miettiä että mitä sieltä tulee, koska

147
00:10:06.760 --> 00:10:11.790
seiskan sieltä tietysti tulee ja nytten
mä ajattelen nyt niin että nää pitäisi

148
00:10:11.790 --> 00:10:15.800
olla samat asiat, eikö vaan
elikkä nyt että se luvulla 7.

149
00:10:15.800 --> 00:10:19.620
Ja sitten sen mitä tää summa funktio täältä
palauttaa, niin sittenhän pitäisi olla täsmälleen

150
00:10:19.620 --> 00:10:24.560
samat asiat ja nythän mä voin
tämmöisen vertailun tähän kirjoittaa.

151
00:10:24.560 --> 00:10:29.390
Ja jos nää on totta, niin tämä.
Maalattu alue.

152
00:10:29.390 --> 00:10:33.860
Tässähän on arvoltaan silloin
tru eli jos ne on totta

153
00:10:33.860 --> 00:10:36.550
niin tää maalatun alueen arvo on tru.

154
00:10:36.550 --> 00:10:40.870
No mitä mä sillä arvolla true nyt voin
tehdä OK mä voin ottaa sen joko sinne

155
00:10:40.870 --> 00:10:46.070
tulostukseen mukaan eli mä
voin tulostaa nytten tämän.

156
00:10:46.070 --> 00:10:49.000
Vertailun arvon.

157
00:10:49.000 --> 00:10:51.580
Taikka vaihtoehtoisesti mä
voin ottaa sen muuttujan ylös.

158
00:10:51.580 --> 00:10:56.170
Mä nyt ensin tulostan sen tässä ja
katsotaan mitä sieltä tulee eli jos näitten.

159
00:10:56.170 --> 00:10:59.110
Ja tuloksen ja.

160
00:10:59.110 --> 00:11:04.610
Odotetun arvon arvot ovat samat, niin tulos
on tietysti silloin niinku tässä nyt on.

161
00:11:04.610 --> 00:11:07.410
No tehdään siihen toinen vertailu.

162
00:11:07.410 --> 00:11:13.810
Eli verrataan nyt vaikkapa lukua -1
siihen, että me syötetään funktiolle

163
00:11:13.810 --> 00:11:17.490
summa luvut -1 ja -1 niin kun
näet nyt niin tässä selkeästi.

164
00:11:17.490 --> 00:11:23.330
Nyt tää tota noin niin vertailu ei
pitäisikään pitää paikkaansa enää ja.

165
00:11:23.330 --> 00:11:27.110
Mä annan nyt, että tälle nimen
vertailu kakkonen eli mä tallennan

166
00:11:27.110 --> 00:11:30.790
tämän totuusarvoisen lausekkeen tuloksen.

167
00:11:30.790 --> 00:11:32.980
Nyt tämmöisen muuttujan
nimeltä vertailu 2.

168
00:11:32.980 --> 00:11:37.370
Ihan nyt vaan että nähdään niin, että tämmöinenkin
on mahdollista, että mä voin tän tuloksen

169
00:11:37.370 --> 00:11:42.030
ottaa talteen muuttujaan ja tulostetaan
sitten sen muuttujan sisältämä arvo.

170
00:11:42.030 --> 00:11:46.930
Tietysti tässä tilanteessahan se ei ole,
ei ole totta, mutta näin mä voin tehdä.

171
00:11:46.930 --> 00:11:51.810
Eli nyt mä näen niin että että tota
tämä ei ole totta tämä vertailu,

172
00:11:51.810 --> 00:11:55.490
koska summa luvuista
-1 ja -1 on tietysti -2.

173
00:11:55.490 --> 00:12:00.030
Ja nythän tässä niinku sitten pitäisi päättää
niin että tai tai tulla siihen tulokseen,

174
00:12:00.030 --> 00:12:04.770
että missäs nyt oikeastaan on vika
ja nyt me havaitaan ja vaihtoehdot.

175
00:12:04.770 --> 00:12:08.290
Nyt on siinä se, että joko tässä
meidän summa funktion toteutuksessa

176
00:12:08.290 --> 00:12:13.710
on vika eli tää summa funktio laskee
väärin tän summan taikka vaihtoehtoisesti

177
00:12:13.710 --> 00:12:17.530
tää meidän odotettu tulos on väärin.

178
00:12:17.530 --> 00:12:23.750
Ja nyt tietysti tässä voidaan niin kun todeta
niin että tai tai käydä katsomassa, että

179
00:12:23.750 --> 00:12:27.400
miten tää meidän summa funktio toimii ja
todetaan niin että kyllähän tää nyt ihan oikein

180
00:12:27.400 --> 00:12:32.830
tässä toimii ja ja niinpä tää meidän
odotettu luku on nyt täällä väärin ja silloin

181
00:12:32.830 --> 00:12:37.100
meidän täytyy sitten tätä
odotettua lukua korjata.

182
00:12:37.100 --> 00:12:41.290
Jotta saadaan tää vertailu
menemään menemään oikein ja silloin

183
00:12:41.290 --> 00:12:43.980
näistä molemmista niin
sanotuista testitapauksista.

184
00:12:43.980 --> 00:12:46.630
Nytten tulee sitten se.

185
00:12:46.630 --> 00:12:50.750
Totuus arvo sieltä oikein eli true
nyt nää meidän molemmat testitapaukset

186
00:12:50.750 --> 00:12:55.160
meni tässä läpi ja nyt me nimeään tämän.
Täällä taas regionin.

187
00:12:55.160 --> 00:13:01.650
Mä tykkään näistä regionin, koska näillä
saa kätevästi näitä koodialueita piiloon.

188
00:13:01.650 --> 00:13:06.020
Hyvä.
No sitten vilkaistaan tuonne.

189
00:13:06.020 --> 00:13:07.940
Sliden puolelle vielä.

190
00:13:07.940 --> 00:13:11.580
Eli tässä tavassa on kuitenkin se huono
puoli mitä tuossa äsken tehtiin, että

191
00:13:11.580 --> 00:13:14.680
me joudutaan aina olla tätä
ohjelmakäyntiin saadaksemme testattua.

192
00:13:14.680 --> 00:13:20.780
Yksi ainoan aliohjelman ja me tullaan kohta
menemään näihin automaattisiin testityökaluihin,

193
00:13:20.780 --> 00:13:25.010
mut mä otan vielä toisen huonon puolen
eli nytten toinen huono puoli kummassakin

194
00:13:25.010 --> 00:13:29.600
näissä menetelmissä on se, että nyt mä
tulen ikään kuin sotkeneeksi tätä meininkiä

195
00:13:29.600 --> 00:13:34.500
ja tänne meininki oikeasti kirjoitan
semmoinen todellinen tietokoneohjelma, se miten

196
00:13:34.500 --> 00:13:36.920
se käy käyttäjän interaktio.

197
00:13:36.920 --> 00:13:39.660
On sen ohjelman kanssa
mitä ikinä sitten tekeekään.

198
00:13:39.660 --> 00:13:43.600
Lukeeko se jotain tietoa jostain
tiedostosta tietokannasta?

199
00:13:43.600 --> 00:13:45.660
Ottaako se yhteyttä nettiin tai jotain?

200
00:13:45.660 --> 00:13:48.400
Eli enhän mä niinku ihan
oikeasti siinä mun todellisessa

201
00:13:48.400 --> 00:13:50.600
ohjelmassa tietenkään
halua tulostaa mitään.

202
00:13:50.600 --> 00:13:56.100
True true jutskia tänne vaan vaan vaan nää
on niinku ikään kuin semmoisia adblock testejä

203
00:13:56.100 --> 00:14:01.300
joita se ohjelmoija tekee siinä tilanteessa
saavuttaakseen varmuuden siitä että se ohjelmat

204
00:14:01.300 --> 00:14:05.940
toimii halutulla tavalla, jotka se sitten
todennäköisesti tulee tästä niinku poistamaan

205
00:14:05.940 --> 00:14:09.510
tai laitan kommentteihin
tai vastaavaa eli nää.

206
00:14:09.510 --> 00:14:12.750
Testitapaukset ei niinku pidemmän
päälle meitä palvelee hyödyllisesti

207
00:14:12.750 --> 00:14:15.660
vaan auttavat vaan siinä hetkessä.

208
00:14:15.660 --> 00:14:20.200
Ja sen takia on on järkevämpää sitten
ikään kuin pyrkiä tekemään sellaisia

209
00:14:20.200 --> 00:14:25.040
automaattisia testejä, joita sitten
voidaan hyödyntää sen ohjelman kasvaessa

210
00:14:25.040 --> 00:14:27.680
ja ohjelman edetessä yhä
uudestaan ja uudestaan.

211
00:14:27.680 --> 00:14:32.320
Sen sijaan, että me kirjoitetaan
niitä tuonne tilapäisesti.

212
00:14:32.320 --> 00:14:34.780
Ja nyt näitä automaattisia
testityökaluja voidaan tosiaan

213
00:14:34.780 --> 00:14:39.350
hyödyntää siten, että
se tekee näiden testien.

214
00:14:39.350 --> 00:14:43.230
Että, että me voidaan kirjoittaa niitä
testejä ja ajaa sieltä niin hyödyntää

215
00:14:43.230 --> 00:14:48.580
niitä testejä automaattisesti
useassa kohtaa niinku mainittiin.

216
00:14:48.580 --> 00:14:50.400
Ja.

217
00:14:50.400 --> 00:14:54.670
Ja ja jos esimerkiksi jos
ohjelmassamme olisi interaktiota.

218
00:14:54.670 --> 00:15:00.110
Ei ne testattavaa asiaa, niin joutuisimme
tekemään interaktiot ennen testejä.

219
00:15:00.110 --> 00:15:05.720
Ja niinku tavallaan tuo nyt vielä vielä
niinku alleviivaa sitä, että tämmöisen meinin.

220
00:15:05.720 --> 00:15:10.360
Mayn pääohjelman testien kirjoittaminen
ei ole oikeasti kovin fiksua, mutta

221
00:15:10.360 --> 00:15:13.970
tää on täysin mahdollista ja ja niin
kun nyt mainitsin jo tuossa noin, niin

222
00:15:13.970 --> 00:15:19.730
ehkä siellä webbi koodauksessa
aika aika tavanomaistakin.

223
00:15:19.730 --> 00:15:22.850
Ja niin mennään tuohon kontekstiin,
niin mä voisin niinku vielä.

224
00:15:22.850 --> 00:15:38.230
Vielä tota noin niin.
Hetkinen katsotaanpa nytten joo.

225
00:15:38.230 --> 00:15:41.830
No joo, ehkä mä voisin ennen
tuota kommenteista asiaa niin niin

226
00:15:41.830 --> 00:15:46.530
näyttää nytten vielä yksi
esimerkin eli eli tuota.

227
00:15:46.530 --> 00:15:48.520
Nythän mä tässä.

228
00:15:48.520 --> 00:15:53.500
Toteutin tän homman niin, että mulla
oli tehtynä tää summa funktio tänne.

229
00:15:53.500 --> 00:15:57.960
Ja sen jälkeen aloin kirjoittaa
näitä testejä ikään kuin.

230
00:15:57.960 --> 00:16:06.030
Varmistaakseni sen että että tuo mun jo
kirjoittamani funktio toimii halutulla tavalla.

231
00:16:06.030 --> 00:16:11.950
No tällaisen funktion toimintaa ja ikään
kuin toiminnan todentamista voi lähestyä myös

232
00:16:11.950 --> 00:16:17.000
hieman toisesta perspektiivistä niin sanotusta
testilähtöisestä kehityksen testilähetyksen

233
00:16:17.000 --> 00:16:25.290
testillä kehityksen näkökulmasta ja otetaan
esimerkki testilähtöisestä kehityksestä

234
00:16:25.290 --> 00:16:29.150
ja ja testauksen merkityksestä
funktion toteuttamisessa.

235
00:16:29.150 --> 00:16:34.590
Eli ajatellaan niin, että mun pitäisi
toteuttaa tällainen kolmion ala niminen funktio.

236
00:16:34.590 --> 00:16:36.700
Mehän tehtiin tää tuossa
aikaisemmalla luennolla.

237
00:16:36.700 --> 00:16:40.630
Joo, mutta tehdään se nyt uudestaan
hieman eri eri järjestyksessä.

238
00:16:40.630 --> 00:16:44.380
Eli ajatellaan niin, että mulla
olisi tavoitteena tehdä kolmion ala.

239
00:16:44.380 --> 00:16:51.140
Ja mä haluaisin niin kun pohtia, että
miten se miten se oikeastaan pitäisi tehdä.

240
00:16:51.140 --> 00:16:57.390
Ja tässä tässä meitä auttaa tämmöinen
niin sanottu testilähtöinen kehitys.

241
00:16:57.390 --> 00:17:02.630
Joo, nyt mä tiedän, että mä haluan tehdä
kolmion alan nimisen funktion no 2 asiaa.

242
00:17:02.630 --> 00:17:06.720
Mitä kolmion tarvitaan on kantaja korkeus.

243
00:17:06.720 --> 00:17:09.310
Ja leikitään nyt niin, että mulla olisi.

244
00:17:09.310 --> 00:17:16.290
Kolmio jonka kanta on vaikka
5 ja mä nyt yritän miettiä.

245
00:17:16.290 --> 00:17:19.590
Miettiä semmoiset luvut että menee
järkevästi eli leikitään niin että

246
00:17:19.590 --> 00:17:23.130
mulla on kolmio jonka
kanta on 5 ja korkeus on 8.

247
00:17:23.130 --> 00:17:28.070
Näähän on ne informaation palaset joita
se kolmion ala funktio tulee tarvitsemaan

248
00:17:28.070 --> 00:17:31.840
pystyäkseen laskemaan kolmion alan kolmion
alahan lasketaan kanta kertaa korkeus

249
00:17:31.840 --> 00:17:36.690
syöttöä 2 eli kanta kertaa korkeus
tarvitaan, tarvitaan siihen.

250
00:17:36.690 --> 00:17:40.050
No mikä on se tieto jota
tää tulee palauttamaan?

251
00:17:40.050 --> 00:17:44.940
Niin sehän on sitten tosiaankin
se kannan kannan ja korkeuden.

252
00:17:44.940 --> 00:17:49.180
Tulo jaettuna 2 eli se tulee olemaan
desimaaliluku, mutta mä tiedän

253
00:17:49.180 --> 00:17:54.640
myöskin sen että se sen pitäisi
olla hetkinen 5 kertaa 8 40 jaettuna

254
00:17:54.640 --> 00:17:59.200
2 eli se pitäisi olla tasan 20, eikö vaan?

255
00:17:59.200 --> 00:18:05.550
Eli tässä on ne se syöte ja sitten toisaalta
tulos jota mä odotan sieltä tulevaksi.

256
00:18:05.550 --> 00:18:12.450
Eli eli luvun 20 pitäisi täsmätä siihen mitä
tää kolmion ala tulee tuottamaan ja otetaan tää

257
00:18:12.450 --> 00:18:18.490
tulos nytten talteen vaikkapa nyt sitten
bowl muuttujaan ja laitetaan sinne.

258
00:18:18.490 --> 00:18:20.790
Onko?

259
00:18:20.790 --> 00:18:25.490
Kolmionällä leikitään nyt, että se
olisi ton niminen muuttuja siinä.

260
00:18:25.490 --> 00:18:29.130
Eli tässä mulla on on syöte ja
sitten mulla on tulossa ehkä voinut

261
00:18:29.130 --> 00:18:32.170
kirjoittaa toisin päin ja
laitetaan sitä nyt vaikka.

262
00:18:32.170 --> 00:18:35.330
Vaikka itse asiassa niinku tälleen,
niin se on ehkä vähän loogisempaa.

263
00:18:35.330 --> 00:18:39.290
Eli nytten me tällaisella
syötteellä odotamme tulosta,

264
00:18:39.290 --> 00:18:42.560
jonka pitäisi täsmätä luvun 20 kanssa.

265
00:18:42.560 --> 00:18:45.610
Eli nyt mulla on valmiina
siinä testitapaus.

266
00:18:45.610 --> 00:18:47.610
Jonka.

267
00:18:47.610 --> 00:18:51.050
Kautta mun pitäisi niinku
pystyä pystyä pystyä tavallaan

268
00:18:51.050 --> 00:18:54.380
todentamaan, että onko tää totta.

269
00:18:54.380 --> 00:18:58.460
Ja se toimii meillä myöskin esimerkkinä
tämän funktion käyttämisestä.

270
00:18:58.460 --> 00:19:02.790
Eli meillä on tässä tässä nyt sitten
esimerkki miten sitä funktiota kutsutaan.

271
00:19:02.790 --> 00:19:06.140
Sinne pitää antaa kanta sinne pitää antaa
korkeus ja sen pitäisi palauttaa myöskin

272
00:19:06.140 --> 00:19:10.040
sitten luku joka voidaan verrata
tuommoiseen desimaaliluku.

273
00:19:10.040 --> 00:19:14.540
Ja nytten tän avulla me pystytään alkaa
toteuttamaan tai tää antaa meille vinkkejä

274
00:19:14.540 --> 00:19:17.800
siitä, että miten me voidaan
alkaa toteuttamaan tätä funktiota.

275
00:19:17.800 --> 00:19:19.560
No kaikki funktiot täällä konsolia.

276
00:19:19.560 --> 00:19:22.020
Lähtee aina noilla public
statiineilla liikkeelle.

277
00:19:22.020 --> 00:19:23.930
Tässä meidän kurssilla.

278
00:19:23.930 --> 00:19:28.730
Ja nyt me pystytään sitten tässä
katsomaan niin, että että mitä tää?

279
00:19:28.730 --> 00:19:31.090
Olikohan tää hyvä esimerkki?

280
00:19:31.090 --> 00:19:41.070
Rupesin nyt ihan miettimään itsekin tätä.

281
00:19:41.070 --> 00:19:48.500
Joo.
Tuota pahoittelut.

282
00:19:48.500 --> 00:19:52.040
Mä mä ehkä teen nyt
kuitenkin kuitenkin niin, että

283
00:19:52.040 --> 00:19:55.480
mä jätän jätän tuon hieman myöhemmäksi.
Joo, pahoittelut.

284
00:19:55.480 --> 00:19:58.300
Mulla meni ehkä vähän
ajatukset tässä tässä sekaisin.

285
00:19:58.300 --> 00:20:05.670
Tää saattaa sekoittaa turhaan niin jätetäänpä
tämä tämä laitos tuohon näiden jätetään.

286
00:20:05.670 --> 00:20:08.610
Tämä hieman myöhäisemmäksi.

287
00:20:08.610 --> 00:20:10.970
Joo mä ehkä ehkä menin
pikkuisen liian nopeasti.

288
00:20:10.970 --> 00:20:16.930
Tässä tehdään kuitenkin kuitenkin tuo
slaidilla oleva esimerkki tuossa ensin.

289
00:20:16.930 --> 00:20:19.850
Eli
tota. Aa.

290
00:20:19.850 --> 00:20:23.110
Käytetään tätä kompens työkalua
tämän funktion toteuttamisen.

291
00:20:23.110 --> 00:20:25.170
Totta kai se tuolla tavalla onnistuu.

292
00:20:25.170 --> 00:20:27.340
Mitä mä tuossa nyt olin tekemässä,
mutta tää on ehkä kuitenkin

293
00:20:27.340 --> 00:20:31.940
hieman helpompi hahmottaa eli eli tota.

294
00:20:31.940 --> 00:20:36.900
Sen sijaan, että me kirjoitettaisiin niitä
testitapauksia tuonne meininkiin, niin käytetäänkin

295
00:20:36.900 --> 00:20:41.140
tällaista työkalua, jonka avulla ne testitapaukset
voidaan kirjoittaa sinne dokumentaatio

296
00:20:41.140 --> 00:20:45.630
kommenttien sekaan ja tässä
meitä auttaa tosissaan.

297
00:20:45.630 --> 00:20:47.970
Tuommoinen kommentti työkalu
eli nytten edelleenkin

298
00:20:47.970 --> 00:20:54.500
ollaan tätä kolmiolla
jutskaa tekemässä. Ja.

299
00:20:54.500 --> 00:20:56.300
Mä oon niinku menen.

300
00:20:56.300 --> 00:20:59.260
Menen vähän vähän nopeammin tässä eteenpäin
kun tuli vähän tuhlattua aikaa tuohon.

301
00:20:59.260 --> 00:21:03.500
Elikkä tiedetään niin että halutaan
tehdä kolmion niminen funktio.

302
00:21:03.500 --> 00:21:09.820
Ja me tiedetään niin, että sinne pitää antaa
2 informaation palasta kanta ja korkeus.

303
00:21:09.820 --> 00:21:13.420
Ja tosissaan niin niin niin se
pitäisi palauttaa sitten se kolmion.

304
00:21:13.420 --> 00:21:17.240
Älä älä niin kun desimaalilukuun.

305
00:21:17.240 --> 00:21:21.960
Ja ennen kun mä toteutan tätä asiaa.
Niin niin.

306
00:21:21.960 --> 00:21:24.540
Tämmöisen testilähtöiseen kehitykseen.

307
00:21:24.540 --> 00:21:32.440
Elikkä sellaiseen ohjelmiston kehittämiseen, jossa
funktion toteuttamisesta ajatellaan testaamisen

308
00:21:32.440 --> 00:21:40.380
kautta tai avulla, niin siihen kuuluu sellainen
ajatus niin että tuotetaan tämä funktio syntaxtisesti

309
00:21:40.380 --> 00:21:43.540
oikeaksi, vaikka se ei vielä
tee sitä mitä me halutaan.

310
00:21:43.540 --> 00:21:47.000
Totta kai me nyt voitaisiin tehdä se toteutus
tähän, kun se on hyvin yksinkertainen,

311
00:21:47.000 --> 00:21:51.260
mutta esimerkin vuoksi mä en nyt tee niin,
että mä saatan tämän sellaiseen tilaan,

312
00:21:51.260 --> 00:21:54.200
että me pystytään tämä ohjelma kääntämään.
Nyt mulla ei error.

313
00:21:54.200 --> 00:21:59.450
Ja siellä ole, mutta se ei vielä
tee sitä mitä me halutaan sen takia,

314
00:21:59.450 --> 00:22:03.650
että me voidaan kirjoittaa
tänne dokumentaatio.

315
00:22:03.650 --> 00:22:08.620
Valmiiksi.
Ja.

316
00:22:08.620 --> 00:22:14.630
Dokumentaation lisäksi kirjoittaa myöskin
testitapauksia, eli otetaanpa vielä andu siitä, niin

317
00:22:14.630 --> 00:22:19.350
me nähdään, että kun mä oon asentanut tänne tän
contest työkalun niin mä voin kirjoittaa COMT

318
00:22:19.350 --> 00:22:24.520
ja painaa tabulaattoria niin mulle
tulee tällainen testialue tänne.

319
00:22:24.520 --> 00:22:27.180
Mikä tän pointti on
tän testialueen pointti?

320
00:22:27.180 --> 00:22:31.460
Tän testialueen pointti on se, että
mä tulen sinne kirjoittamaan tämän

321
00:22:31.460 --> 00:22:34.880
testin, jota mä olin kirjoittamassa
nyt äsken tänne meinin.

322
00:22:34.880 --> 00:22:39.000
Eli sen sijaan, että kirjoitan tuonne
maniin, niin kirjoitetaan se tänne.

323
00:22:39.000 --> 00:22:44.050
Eli jos me kutsumme kolmion alaa.

324
00:22:44.050 --> 00:22:51.960
Kannalla 5 ja korkeudella 8 niin tämmöisen syötteen
pitäisi palauttaa luku 20 ja nyt tähän tulee

325
00:22:51.960 --> 00:22:56.130
3 1 suuruusmerkkiä ja tämä on nyt tätä
niin sanottua kontekstin syntaksia.

326
00:22:56.130 --> 00:22:59.610
Eli tää on täsmälleen sama asia kuin 2
on yksi kuin merkkejä tuolla seinissä,

327
00:22:59.610 --> 00:23:06.430
mutta että tämä pieni eroavaisuus nyt
tässä kirjoitustyyli on suhteessa tuohon

328
00:23:06.430 --> 00:23:08.930
kun kun kirjoitetaan tätä
koodia tuonne muualle.

329
00:23:08.930 --> 00:23:13.770
Eli tää on tää on tosissaan tätä kontekstin
syntaksia, mutta vertailu on täsmälleen sama tai

330
00:23:13.770 --> 00:23:17.740
vertailun osalta täsmälleen sama ajatus
eli vasemmalla puolella meillä on tässä.

331
00:23:17.740 --> 00:23:20.380
Syöte eli aliohjelman kutsu.

332
00:23:20.380 --> 00:23:24.960
Ja sille annettavat argumentit
ja sitten oikealla puolella on

333
00:23:24.960 --> 00:23:28.700
on se tulos jota me tästä
funktiosta odotetaan.

334
00:23:28.700 --> 00:23:32.720
Ja ja tässä meillä on
nyt yksi testitapaus.

335
00:23:32.720 --> 00:23:38.440
Joka me voidaan nyt laittaa käyntiin tossa
slaidilla me ollaan nyt oli tuon toisen funktion

336
00:23:38.440 --> 00:23:43.980
testitapaus, mutta täsmälleen sama
idea ja ei mennä vielä merkkijonoihin.

337
00:23:43.980 --> 00:23:49.520
Ja nyt kun me ollaan tää testitapaus
kirjoitettu tänne, niin me voidaan tän aiemmin

338
00:23:49.520 --> 00:23:54.510
ohjelmointiympäristön avulla
katsoo, että pitääkö tää paikkansa.

339
00:23:54.510 --> 00:24:02.960
Ja se tapahtuu täältä kohdasta test
ja kohdasta com test generate test.

340
00:24:02.960 --> 00:24:06.110
Ja kun nää testit on generoitu.

341
00:24:06.110 --> 00:24:12.850
Niin teknisesti ottaen tänne
syntyy tämmöinen uusi testiprojekti.

342
00:24:12.850 --> 00:24:19.210
Eli eli toi kommentit työkalu luo
tällaisen testaaminen test nimisen projektin

343
00:24:19.210 --> 00:24:27.400
ja ja ja sitten tota noin
niin luo sinne tämmöistä.

344
00:24:27.400 --> 00:24:32.240
N unit testaus frameworkin
tuottamaa koodia tai tai siinä

345
00:24:32.240 --> 00:24:35.200
käy hän juu nyt framework
käytettävää koodia.

346
00:24:35.200 --> 00:24:38.740
Tätä ei tarvitse itse lukea,
mutta tää on sen contest työkalun

347
00:24:38.740 --> 00:24:43.770
automaattisesti tuottamaan koodia OK.
Se on siellä taustalla.

348
00:24:43.770 --> 00:24:45.910
Me emme ole siitä nyt.

349
00:24:45.910 --> 00:24:49.950
Niin kiinnostuneita tässä kohtaa,
mutta ne testit sinne luotiin ja nyt me

350
00:24:49.950 --> 00:24:54.190
halutaan sitten ajaa ne testit eli
run ol texts from solution eli tehtiin

351
00:24:54.190 --> 00:24:57.770
ensin geneettisesti ja sen
jälkeen ajetaan nää testit.

352
00:24:57.770 --> 00:25:01.430
Eli mitä tarkoittaa testin ajaminen,
niin se tarkoittaa nyt samaa

353
00:25:01.430 --> 00:25:04.850
asiaa kuin että me oltaisi laitettu
tää mayn pääohjelmakäyntiin ja

354
00:25:04.850 --> 00:25:07.790
katsottu että tulostaakseni
oikeat tulokset.

355
00:25:07.790 --> 00:25:13.390
Mutta nyt me käytetään tätä testiä,
jotta me saadaan se tulos tänne.

356
00:25:13.390 --> 00:25:18.750
Ohjelmointiympäristö hyvä ja sieltä tuli
nyt niin sanotusti punaista eli filia

357
00:25:18.750 --> 00:25:24.830
ja teksti lukee että one or more test
saderos one test failed ja siellä on

358
00:25:24.830 --> 00:25:28.370
meillä on rivillä
neljäkymmentäkolme virheellinen.

359
00:25:28.370 --> 00:25:31.830
Läpi meneematon testi katsotaan mikä
siellä rivillä neljäkymmentäkolme on.

360
00:25:31.830 --> 00:25:36.770
Elikkä tuo testi ei
mene nyt läpi. Ja.

361
00:25:36.770 --> 00:25:42.050
Ja ja jos me tosta klikataan
tuosta failed method bla

362
00:25:42.050 --> 00:25:45.620
bla blaa niin me voidaan nähdä että.

363
00:25:45.620 --> 00:25:51.210
Me odotettiin arvoa 20,
mutta todellisuudessa saatiin

364
00:25:51.210 --> 00:25:55.090
kolmion funktiota kutsumalla arvon nolla.

365
00:25:55.090 --> 00:25:58.580
Eli odotettiin arvoa
20, mutta saatiin nolla.

366
00:25:58.580 --> 00:26:00.960
Ja nyt silloin meidän on niinku helppo.

367
00:26:00.960 --> 00:26:04.360
Helppo nyt todeta niin
että tossa se vika oli.

368
00:26:04.360 --> 00:26:08.800
Ja päättää niin, että että mitä mitä
tälle asialle nyt sitten tehdään?

369
00:26:08.800 --> 00:26:12.460
No tässä tilanteessa me nyt tietysti
todetaan niin, että tässä meidän funktion

370
00:26:12.460 --> 00:26:14.830
toteutuksessa on se vika ja
sitä pitää lähteä korjaamaan.

371
00:26:14.830 --> 00:26:22.040
Niin tehdään se
nytten valmiiksi. Ja.

372
00:26:22.040 --> 00:26:27.620
Oikeastaan tota.
Itse mulla ei tänään tänään ei aivot toimi.

373
00:26:27.620 --> 00:26:29.600
Kyllä näköjään ollenkaan.

374
00:26:29.600 --> 00:26:33.620
Mä teen vielä vielä tähän pienen
muutoksen eli eli mä teen sen näin.

375
00:26:33.620 --> 00:26:36.020
Mun oli se tuossa
alunperin pitänyt tehdä jo.

376
00:26:36.020 --> 00:26:42.120
Pahoittelut tästä tästä sekoilusta eli tota
näin mun olisi pitänyt tehdä että mä määrittelen

377
00:26:42.120 --> 00:26:50.660
nää parametrit aluksi indeksi annan sinne 5
ja 8 syötteenä ja luvun 20 sitten tuloksena

378
00:26:50.660 --> 00:26:57.220
ja ja ja nyt tehdään uudestaan
sama juttu eli generate best ja.

379
00:26:57.220 --> 00:27:00.160
Randall test from solution.

380
00:27:00.160 --> 00:27:06.070
Ja sen jälkeen täältä raiderin nyt sitten
näyttää näiden testien antamat tulokset

381
00:27:06.070 --> 00:27:10.440
ja sieltä tulee nyt vihreät ja saksassa
ja tässä kohtaa ohjelmoija voi tietysti

382
00:27:10.440 --> 00:27:16.780
taputtaa itseään olkapäälle hieman ehkä
virheellisestikin, koska tää meidän ohjelmahan

383
00:27:16.780 --> 00:27:21.890
ei ole oikeasti tee
sitä mitä pitää. Ja.

384
00:27:21.890 --> 00:27:24.660
Raider antaa siitä itse asiassa
pikku vinkin ja sanoi että possible

385
00:27:24.660 --> 00:27:28.350
close fraktion ja kirjoitetaan
tänne toinen testi.

386
00:27:28.350 --> 00:27:31.240
Eli yksi testi ei vielä riitä mihinkään.

387
00:27:31.240 --> 00:27:36.580
Kirjoitetaan sinne toinen testi,
jos me laitettaisiin sinne vaikka.

388
00:27:36.580 --> 00:27:41.140
4 kanta 4.
Korkeusviisi 4.

389
00:27:41.140 --> 00:27:47.320
Hetkinen, eikö nyt meni kuitenkin
ääri laitetaan vaikka 7 kertaa 3 noin.

390
00:27:47.320 --> 00:27:56.400
Elikkä kanta 7 korkeus 3 kaksikymmentäyksi.
Jaettuna 2 on paljon 20.

391
00:27:56.400 --> 00:28:02.260
5 noin elikkä tuommoinen luku
sieltä pitäisi saada pihalle.

392
00:28:02.260 --> 00:28:04.250
Ja huomaat, että miten
käännösvirheitä tässä ei tule.

393
00:28:04.250 --> 00:28:06.530
Elikkä tää ohjelma ihan hienosti kääntyy.

394
00:28:06.530 --> 00:28:10.710
Jos mä painan bild solution
niin bild finish successfully.

395
00:28:10.710 --> 00:28:15.200
Mutta tehdään uudestaan
tää testien generointi.

396
00:28:15.200 --> 00:28:17.150
Ja.

397
00:28:17.150 --> 00:28:20.570
Testit meni OK tai siis se testit
generoituivat ja sitten ajetaan

398
00:28:20.570 --> 00:28:23.970
ne testit eli käynnistetään
tää meidän testien.

399
00:28:23.970 --> 00:28:26.110
Suorittaminen.

400
00:28:26.110 --> 00:28:32.190
Ja nyt saatiin se fili eli one or more the
failed ja siellä rivillä neljäkymmentäneljä

401
00:28:32.190 --> 00:28:37.160
tuli error ja katsotaan mitä sieltä
tulee elikkä odotettiin lukua 10.

402
00:28:37.160 --> 00:28:41.870
5 mutta funktio todellisesti kun me
sitä kutsuimme niin palaute meille

403
00:28:41.870 --> 00:28:46.180
luvun 10 elikkä nyt
nähdään niin että että tota.

404
00:28:46.180 --> 00:28:48.820
Että testi ei mene nyt läpi
ja nyt meidän pitää taas kerran

405
00:28:48.820 --> 00:28:51.060
tutkia niin, että kummassa on vika.

406
00:28:51.060 --> 00:28:55.300
Onko meidän kolmion ala
toteutuksessa vika vai tässä

407
00:28:55.300 --> 00:28:57.760
tässä tota meidän odottamamme arvossa?

408
00:28:57.760 --> 00:28:59.780
Eli onko ohjelmoija nyt tehnyt virheen?

409
00:28:59.780 --> 00:29:04.280
Tällä on yksi kuin merkin tällä
puolella vai vai tällä puolella?

410
00:29:04.280 --> 00:29:07.810
Ja kun me tutkimme tätä meidän funktion
toteutusta, niin tietysti todetaan niin,

411
00:29:07.810 --> 00:29:14.960
että että tässä jakolaskussa on se vika on
elikkä jos me jäämme inttiluvun inttiluvulla,

412
00:29:14.960 --> 00:29:17.670
niin meidän tulos on myöskin inttiluku ja.

413
00:29:17.670 --> 00:29:23.790
Niinpä silloin meidän desimaaliosa siitä
desimaaliluku tulee katoamaan tässä jakolaskussa,

414
00:29:23.790 --> 00:29:30.400
mikä on tietysti tosi kurjaa ja ja
väärin ja ja sen takia meidän täytyy joko.

415
00:29:30.400 --> 00:29:34.860
Tehdä jompikumpi toinen toinen
asioista joko kirjoittaa tänne luku 2.

416
00:29:34.860 --> 00:29:41.980
Nolla elikkä muutetaan toinen näistä
jakolasku operandeista desimaaliluku.

417
00:29:41.980 --> 00:29:43.900
Jolloinka ne testit tulee menemään läpi.

418
00:29:43.900 --> 00:29:48.710
Koitetaan nyt uudestaan ajaa ne.
Rannal tests.

419
00:29:48.710 --> 00:29:52.480
Taikka vaihtoehtoisesti
muuttaa nää parametrit.

420
00:29:52.480 --> 00:30:00.050
Parametrien muuttaminen duplex saattaisi
tässä tässä kohtaa olla olla parempi idea.

421
00:30:00.050 --> 00:30:03.780
Koska tota.
Tota tota.

422
00:30:03.780 --> 00:30:05.800
Nyt jos me.

423
00:30:05.800 --> 00:30:09.220
Haluttaisiin tehdä funktiosta
sellainen, että sitä voitaisiin

424
00:30:09.220 --> 00:30:11.680
kutsua myöskin desimaalilukujen avulla.

425
00:30:11.680 --> 00:30:14.760
Niin nythän tämä tämä ei
olisi enää mahdollista.

426
00:30:14.760 --> 00:30:20.940
Jos mä nyt laitan generate test.
Niin sieltä tulee.

427
00:30:20.940 --> 00:30:27.300
Hetkinen hetkinen sieltä pitäisi
tulla kaiketi käännösvirhe.

428
00:30:27.300 --> 00:30:30.240
Rauno altes.

429
00:30:30.240 --> 00:30:34.960
Niin tulee tota noin niin cannot
convert from doubletointi elikkä nytten

430
00:30:34.960 --> 00:30:38.590
kääntäjä ilmoittaa niin että
tämä ei käy koska eihän luku 7.

431
00:30:38.590 --> 00:30:47.020
5 ole inttiluku eli suositeltavampi tapa
tässä joka tapauksessa olisi muuttaa nää.

432
00:30:47.020 --> 00:30:51.320
Parametrit double tyyppisiä
ja ajetaan nyt vielä kerran ne.

433
00:30:51.320 --> 00:30:56.680
Testit sieltä.

434
00:30:56.680 --> 00:31:00.020
Ja nyt meidän testit ei
edelleenkään mene läpi, koska tuo

435
00:31:00.020 --> 00:31:06.330
testitapaus joka tapauksessa on väärin.

436
00:31:06.330 --> 00:31:10.080
Ja niinpä, ehkä mä nyt tuossa.

437
00:31:10.080 --> 00:31:14.740
Laske nopeasti että 7,5 kertaa
3,5 on kaksikymmentäkuusi.

438
00:31:14.740 --> 00:31:18.970
Kaksikymmentäviisi ja kun se jaetaan
2 niin sieltä tulee tuollainen luku.

439
00:31:18.970 --> 00:31:20.910
Eli laitetaan sinne 13.

440
00:31:20.910 --> 00:31:25.130
1 2 5 niin saadaan tuokin
tuokin keissi menemään läpi.

441
00:31:25.130 --> 00:31:29.880
Puhutaan testikeista kun näitä
rivejä tän tänne kirjoitetaan.

442
00:31:29.880 --> 00:31:34.870
Eli nyt meillä on 3 testikeissa ja tänne.
Kirjoitettu tähän.

443
00:31:34.870 --> 00:31:39.980
Aa tähän funktion
dokumentaatio kommentteihin.

444
00:31:39.980 --> 00:31:46.490
Eli niinku tästä nyt varmaan
varmaan on niinku ilmeistä niin tota.

445
00:31:46.490 --> 00:31:50.930
Näitä testitapauksia on tänne
aika helppo nyt lähteä laajentamaan

446
00:31:50.930 --> 00:31:56.870
ja nää testitapaukset myöskin pysyvät
täällä dokumentaation yhteydessä

447
00:31:56.870 --> 00:31:58.930
sitä mukaa kun tää mun ohjelma suurenee.

448
00:31:58.930 --> 00:32:02.440
Elikkä nytten jos mä
kirjoittaisin tänne uuden funktion.

449
00:32:02.440 --> 00:32:05.190
Public static jotain.

450
00:32:05.190 --> 00:32:10.010
Niin se ei ikään kuin nämä nämä
kolmion testitapaus eivät sotkisi

451
00:32:10.010 --> 00:32:13.410
tämän mun ohjelman koodia
ja käytännön tilanteessa.

452
00:32:13.410 --> 00:32:16.770
Mä varmaan itse ainakin toimisin niin,
että mä laittaisin myöskin tän dokumentaatio

453
00:32:16.770 --> 00:32:20.250
kommentin tänne tänne hieman piiloon
tällä tavalla pieneksi, niin silloin

454
00:32:20.250 --> 00:32:23.920
se ei ei ole tuossa viemässä näyttöalaa.

455
00:32:23.920 --> 00:32:29.320
Eli tästä on niinku useita hyötyjä
näiden testien kirjoittamisesta

456
00:32:29.320 --> 00:32:33.630
tänne tänne muualle kuin tänne me einiin.

457
00:32:33.630 --> 00:32:38.450
Se, että se ei sotke muutakoodia, se
pysyy täällä tallessa ohjelman kehityksen

458
00:32:38.450 --> 00:32:44.050
aikana ja vielä ehkä tärkeimpänä se, että
ne testit on aika helposti ajettavissa

459
00:32:44.050 --> 00:32:51.590
täällä ohjelmointiympäristöön
kytketyllä työkaluilla.

460
00:32:51.590 --> 00:32:53.390
Hyvä.

461
00:32:53.390 --> 00:32:57.190
Tulisiko tästä testausvaiheesta
kysyttävää ja pahoittelut pienestä.

462
00:32:57.190 --> 00:33:00.960
Pienestä se koulusta tosiaan
ei ollut tarkoitus nyt tässä.

463
00:33:00.960 --> 00:33:06.740
Tässä sekoittaa teitä, mutta mä nyt vielä
kuitenkin mainitsen tästä näin, että että tavallaan

464
00:33:06.740 --> 00:33:13.000
samaa asia olisi, että mä tulos ostaisin nämä
testitapaukset, jotka mä oon täällä nyt kirjoittanut,

465
00:33:13.000 --> 00:33:18.190
niin täällä meinin puolella elikkä totta kai
mä voisin ottaa nää 3 kutsua laittaa ne tänne me

466
00:33:18.190 --> 00:33:24.030
einiin ja tutkia totuusarvo
niitten niitten syötteiden.

467
00:33:24.030 --> 00:33:27.790
Ja odotettujen arvojen välistä vertailua.

468
00:33:27.790 --> 00:33:32.600
Totta kai mä voisin ne täällä ne arvot
tulostaa, mutta itse en näe sitä järkevänä,

469
00:33:32.600 --> 00:33:39.860
koska se tosiaan aivan aivan niinku
turhaan sotkea tätä meidän mania.

470
00:33:39.860 --> 00:33:41.660
Hyvä.

471
00:33:41.660 --> 00:33:44.950
Chatissa ei näytä siitä
kysymyksiä olevan, jotenka mennään.

472
00:33:44.950 --> 00:33:46.750
Testaamisesta eteenpäin.

473
00:33:46.750 --> 00:33:50.770
Ehkä ehkä vielä mainitsen tuosta sen,
että nyt näitä testitapauksia on siis

474
00:33:50.770 --> 00:33:54.110
kirjoitettuna opettajan
toimesta siellä demotehtävissä.

475
00:33:54.110 --> 00:33:57.460
Ne eivät aina siellä
välttämättä näy teille suoraan.

476
00:33:57.460 --> 00:34:01.990
Ne saattaa olla piilotettu siellä koodissa
tai osa saattaakin olla näkyvillä, mutta joka

477
00:34:01.990 --> 00:34:06.700
tapauksessa niin monissa tehtävissä on näitä
testitapauksia ja näiden avulla sitten me teemme

478
00:34:06.700 --> 00:34:11.540
sitä automaattista arviointia
siellä teidän teidän vastauksille.

479
00:34:11.540 --> 00:34:13.760
Eli nyt jos siellä teidän.

480
00:34:13.760 --> 00:34:15.800
Teidän tuota kirjoittaa itse
kirjoittamassanne koodissa

481
00:34:15.800 --> 00:34:17.840
olisi vaikka väärin tehty toteutus.

482
00:34:17.840 --> 00:34:22.030
Nyt esimerkiksi tälle kolmion alalle,
niin silloin me ihan käytännössä ajetaan.

483
00:34:22.030 --> 00:34:26.880
Ajetaan siellä timin puolella näitä testejä
ja sitten me saadaan niitä failed ja silloin

484
00:34:26.880 --> 00:34:31.970
me voidaan niitä pisteitä antaa
ja vastaavasti sitten jos kaikki.

485
00:34:31.970 --> 00:34:33.770
Meidän itse kirjoitamme.

486
00:34:33.770 --> 00:34:37.390
Testit menee läpi niin silloin me nähdään
niin, että se teidän toteutus on todennäköisesti

487
00:34:37.390 --> 00:34:42.580
tehty oikein ja ja ja mutta, mutta
toisaalta te voitte myöskin itse kirjoittaa

488
00:34:42.580 --> 00:34:46.630
näitä testejä ja se on tosi tosi
kannustettavaa ja suositeltavaa, että siihen

489
00:34:46.630 --> 00:34:50.150
niihin omiin itse tekemään ne funktioihin.

490
00:34:50.150 --> 00:34:53.720
Itse tekemiin ne funktioihin ainakin
kirjoitatte näitä testejä ja tällä kurssilla

491
00:34:53.720 --> 00:34:56.450
nyt helpointa on kirjoittaa
ne tällä com test tyylillä.

492
00:34:56.450 --> 00:35:02.890
En nyt välttämättä suosittele käyttämään tätä
nuuttia, vaikka toki sekin mahdollista on,

493
00:35:02.890 --> 00:35:08.810
että kirjoitatte näitä asser ta RIKL komentoja
tänne erilliseen testiprojektiin, mutta tämä

494
00:35:08.810 --> 00:35:12.790
ei kuulu sinänsä tän kurssin asian,
vaikka toki se se mahdollista on.

495
00:35:12.790 --> 00:35:16.490
Mutta mutta ilman muuta tää kontekstin
käyttö on niin niin yksinkertaista

496
00:35:16.490 --> 00:35:23.200
ja helppoa, että että siihen
kannustan tällä kurssilla kyllä.

497
00:35:23.200 --> 00:35:27.670
Ja ja tän avulla niin kun nähdään
tässä näin niin sen ohjelman.

498
00:35:27.670 --> 00:35:32.210
Toiminnan osoittaminen on on niinku
luotettavampaa kuin vain se, että me ikään kuin

499
00:35:32.210 --> 00:35:36.350
hub hasardi kirjoitetaan jotakin
ja toivotaan, että homma toimii.

500
00:35:36.350 --> 00:35:38.870
No selvää on.
Toisaalta myöskin se, että nää 3 testiä.

501
00:35:38.870 --> 00:35:43.410
Eihän eivät ole missään tapauksessa kattavat
nyt ja ja sillä tavalla niinku kaiken pätevät

502
00:35:43.410 --> 00:35:48.270
elikkä ilman muuta meidän varmaan nyt pitäisi
sitten tehdä jotakin semmoisessa tilanteessa,

503
00:35:48.270 --> 00:35:52.980
että molemmat näistä ovat
nollia ja tietysti nytten.

504
00:35:52.980 --> 00:35:56.300
Tässä tässä tapauksessa
varmaan tuloskin on nolla.

505
00:35:56.300 --> 00:36:00.610
No tietysti vähän kyseenalaista on se,
että jos me annetaan tälleen luku miinus

506
00:36:00.610 --> 00:36:04.340
ykkönen, niin kysymys kuuluu, että
onko olemassa kolmiota, jonka kanta on

507
00:36:04.340 --> 00:36:09.280
-1 ei varmaan ole, mutta
periaatteessa me voidaan.

508
00:36:09.280 --> 00:36:13.070
Voidaan tehdä nyt tässä
tämmöinen laskutoimitus.

509
00:36:13.070 --> 00:36:17.450
Tai tai tää funktio sallii tällaisen
syötteen, että kanta on -1 ja korkeus

510
00:36:17.450 --> 00:36:21.430
on on ykkönen ja kyllä sieltä
se miinus ykkönen ulos pullahtaa.

511
00:36:21.430 --> 00:36:26.010
Me voidaan nää testit testit
vielä generoida ja sitten

512
00:36:26.010 --> 00:36:33.040
ajaa myöskin ne testit eli tästä jaha.
Mikäs siellä nyt meni?

513
00:36:33.040 --> 00:36:37.150
Ei kun totta kai
sieltä tulee -0. 5.

514
00:36:37.150 --> 00:36:39.270
No niin hyvä.

515
00:36:39.270 --> 00:36:42.400
Ihan hyvä että tuli tämäkin
tässä todettua, että virhehan

516
00:36:42.400 --> 00:36:44.460
sieltä tuli eli tämmöisiä virheitä.

517
00:36:44.460 --> 00:36:49.490
Äkkiä ohjelmoija voi tehdä jotain automaattinen
testi jos ympäristö silloin niistä huomauttaa,

518
00:36:49.490 --> 00:36:55.910
mutta joka tapauksessa niin nyt tämä
tällainenkin testi ehkä antaa ikään kuin sille

519
00:36:55.910 --> 00:37:00.710
ohjelmoijille semmoisia ajattelumalleja, että
hei, mitenkäs oikeastaan se meidän kolmiolla

520
00:37:00.710 --> 00:37:03.070
funktion pitäisi siinä tilanteessa toimia?

521
00:37:03.070 --> 00:37:08.310
Toisin sanoen kannustaa meitä pohtimaan
niitä reunatapauksia siinä meidän ohjelmassa

522
00:37:08.310 --> 00:37:11.270
mitä pitäisi tapahtua jollain
hyvin erikoisella syötteellä.

523
00:37:11.270 --> 00:37:17.640
Mitä pitäisi tapahtua semmoisella, joka ei
olekaan semmoinen tavanomainen syöte vaan ehkä joku

524
00:37:17.640 --> 00:37:23.400
voi olla ilkeämielinen käyttäjä, joka antaa
antaa jonkun hyvin semmoisen oudon syöttäjä pyrkii

525
00:37:23.400 --> 00:37:26.660
mahdollisesti rikkomaan sitä meidän
ohjelmaa niistäkin tilanteista.

526
00:37:26.660 --> 00:37:30.610
Meidän ohjelman pitäisi
pitäisi pystyä suoriutumaan.

527
00:37:30.610 --> 00:37:35.570
No tässä me nyt emme nyt lähde tekemään
mitään monimutkaista tilanteessa, jossa

528
00:37:35.570 --> 00:37:39.790
se kanta onkin negatiivinen, mutta ehkä
niinku herättäjänä vaan teille, että

529
00:37:39.790 --> 00:37:45.590
että tämmöisiäkin tilanteita
se testaus pyrkii sitten.

530
00:37:45.590 --> 00:37:50.420
Kannustaa pohtimaan.

531
00:37:50.420 --> 00:37:54.120
Mennään seuraavaan asiaan eli
merkkijonoihin merkkijono me ollaankin

532
00:37:54.120 --> 00:37:57.680
tässä jo useampaankin otteeseen
oikeastaan jo käytetty, mutta mennään

533
00:37:57.680 --> 00:38:00.900
nyt sitten käytännössä
myöskin siihen, että.

534
00:38:00.900 --> 00:38:06.490
Että mikä mikä niitten toimintalogiikka
ja tarkempi toiminta tuolla ohjelmassa on.

535
00:38:06.490 --> 00:38:10.390
Merkkinä tarvitaan useaan eri
tarkoitukseen ohjelmoinnissa.

536
00:38:10.390 --> 00:38:17.430
Ensinnäkin tapa, jolla me
näytetään käyttäjälle jotakin.

537
00:38:17.430 --> 00:38:19.230
Tulostettavaa tekstiä.

538
00:38:19.230 --> 00:38:22.370
Oikeata tekstiä siellä meidän ohjelmassa
se on se ilmeisin tapa käyttää merkkijonoja.

539
00:38:22.370 --> 00:38:27.390
Me ollaan ensimmäisestä luennosta asti
tulostettu hello worldia ja ja tällä tavalla

540
00:38:27.390 --> 00:38:32.340
sitten tulostettu käyttäjälle merkkijono
eli se konsoli friitalan tulostaa tulostaa

541
00:38:32.340 --> 00:38:35.880
tämmöiseen string tyyppiseen
merkkijonon ja ja se on.

542
00:38:35.880 --> 00:38:38.090
Tietysti varsin ilmeinen tapa.

543
00:38:38.090 --> 00:38:41.670
Käyttää merkkijonoja ja toinen
tapa mitä me ollaan myöskin käytetty

544
00:38:41.670 --> 00:38:43.800
on olla vuorovaikutuksessa
käyttäjän kanssa.

545
00:38:43.800 --> 00:38:50.050
Me ollaan luettu konsoleihin redline
metodia käyttämällä niin käyttäjältä syötettä

546
00:38:50.050 --> 00:38:53.940
näppäimistön avulla eli tapa olla
vuorovaikutuksessa käyttäjän kanssa.

547
00:38:53.940 --> 00:38:56.990
Se on toinen hyvin yleinen
tapa hyödyntää merkkijonon.

548
00:38:56.990 --> 00:38:59.570
Jos me mennään vaikka jonkin
pankkisovelluksen, niin me voidaan

549
00:38:59.570 --> 00:39:04.620
syöttää sinne pankkisiirron
pankkisiirrolla.

550
00:39:04.620 --> 00:39:06.460
Niin kohde.

551
00:39:06.460 --> 00:39:10.400
Pankkitilinumero ja sekin on
merkkijono, jonka se ohjelma täytyy.

552
00:39:10.400 --> 00:39:14.660
Täytyy sitten sieltä lukea
eli joku muoto FI jotain taikka

553
00:39:14.660 --> 00:39:18.780
vai vastaavasti sitten syöttää summa.

554
00:39:18.780 --> 00:39:24.060
Joka on toivottavasti joku
joku järkevä järkevä tuota luku.

555
00:39:24.060 --> 00:39:26.770
Taikka verkkokaupan.

556
00:39:26.770 --> 00:39:29.320
Tilauslomakkeella otetaan oma
nimi osoite ja niin edelleen.

557
00:39:29.320 --> 00:39:34.580
Eli tää on tavallaan ja käytännössä niin tapa
olla vuorovaikutuksessa sen käyttäjän kanssa

558
00:39:34.580 --> 00:39:40.300
ja ja yleensä se tapahtuu tosiaan
näppäimistöä hyväksikäyttämällä.

559
00:39:40.300 --> 00:39:43.880
Totta kai niitä merkkijonoja
sitten niitä pankkitilin numeroita

560
00:39:43.880 --> 00:39:47.640
tai pankkisiirron summia tai osoitteita.

561
00:39:47.640 --> 00:39:51.940
Sitten pitää pystyä tulkitsemaan oikealla
tavalla ja se on sitten taas taas toinen asia

562
00:39:51.940 --> 00:39:57.540
että miten se onnistuu, mutta merkki on jo
käytetään, jos ei nyt ihan kaikissa ohjelmissa

563
00:39:57.540 --> 00:40:02.570
niin ainakin hyvin hyvin monissa
arkipäivän tietokoneohjelmissa.

564
00:40:02.570 --> 00:40:07.730
No 3 pää käyttää merkkijonoon on
tutkia logeja ja dubbaustietoja eli eli

565
00:40:07.730 --> 00:40:12.110
kaikenlaisista ohjelmista syntyy
hirveästi aina semmoista kirjaustietoa

566
00:40:12.110 --> 00:40:14.250
siitä, että mitä siellä
taustalla oikeastaan tapahtuu.

567
00:40:14.250 --> 00:40:18.620
Me ei olla vielä semmoisia juuri tai oikeastaan
tehty ollenkaan, mutta mutta käytännön

568
00:40:18.620 --> 00:40:23.230
ohjelmissa niin pitää pystyä kirjaamaan
sitä, että että mitä siellä ohjelmassa

569
00:40:23.230 --> 00:40:27.260
milläkin hetkellä tapahtui, jotta me
voidaan sitten jäljittää mahdollisia virheitä

570
00:40:27.260 --> 00:40:31.690
ja näitä kutsutaan sitteneiksi tai
debugtiedon ja ne tallennetaan hyvin usein

571
00:40:31.690 --> 00:40:33.530
merkkijonona toki muitakin tapoja.

572
00:40:33.530 --> 00:40:40.040
On, mutta yleensä usein merkkijonona
esimerkiksi tiimissä tallennetaan merkkijonona

573
00:40:40.040 --> 00:40:45.220
vaikkapa semmoinen tilanne, että käyttäjä
kirjautuu tiimiin, niin sitten sinne tietokantaan

574
00:40:45.220 --> 00:40:49.860
tallentuu merkkijonona,
että että minkälainen?

575
00:40:49.860 --> 00:40:51.660
Tapahtuma.

576
00:40:51.660 --> 00:40:54.190
Tämä oli itse asiassa nyt täytyy
täytyypä itse ottaa vähän takaisin.

577
00:40:54.190 --> 00:40:57.120
En ole täysin varma, että tallentuu
kun se puhtaana merkki on olla

578
00:40:57.120 --> 00:41:01.080
vai tapahtuuko siinä
jotakin käsittelyä välissä.

579
00:41:01.080 --> 00:41:05.580
Mutta mutta, ainakin jossakin vaiheessa
se tieto on puhdas niin sanotusti

580
00:41:05.580 --> 00:41:10.690
puhdas merkki on niinku se
esine tietokantaan tallennetaan.

581
00:41:10.690 --> 00:41:12.750
No tää neljäs kohta on ehkä tämmöinen.

582
00:41:12.750 --> 00:41:15.870
Vähän vähän sitten joka
voi aiheuttaa keskustelua.

583
00:41:15.870 --> 00:41:19.190
Eli merkkijonojen avulla voidaan
myöskin tallentaa ja manipuloida tietoa.

584
00:41:19.190 --> 00:41:24.090
Äsken mainitsin niin, että se käyttäjän
logitieto eli se kirjautumistieto voidaan

585
00:41:24.090 --> 00:41:28.710
tallentaa sinne timin tietokantaan
merkkijonona, josta en ole nyt täysin varma

586
00:41:28.710 --> 00:41:34.210
onko näin oikeasti mutta käy, mutta ylipäätään
tietoa voidaan tallentaa merkkijonona

587
00:41:34.210 --> 00:41:39.710
esimerkiksi jonkun sensorin tilaa vaikka
lämpömittarin antamaa mittaustietoa

588
00:41:39.710 --> 00:41:41.860
voidaan tallentaa merkkijonona.

589
00:41:41.860 --> 00:41:46.130
No vaikka lämpötilahan ei ole mikään merkki
on niin se voidaan merkkijonona tallentaa.

590
00:41:46.130 --> 00:41:51.650
Taikka jonkun asento sensorin tila taikka
muuta vastaavaa eli näitä tietoja voidaan

591
00:41:51.650 --> 00:41:56.490
voidaan tosissaan sinne johonkin
tietokantaan tallentaa merkkijonoja ja myöskin

592
00:41:56.490 --> 00:42:01.750
manipuloida näitä merkkijonoja eli muuttaa
muodosta toiseen merkkijonoja hyväksikäyttämällä

593
00:42:01.750 --> 00:42:04.750
vaikka se ei aina olekaan järkevää.

594
00:42:04.750 --> 00:42:09.330
Mutta nyt lähdetään sitten katsomaan ihan
käytännössä näiden merkkijonojen käyttämistä

595
00:42:09.330 --> 00:42:13.790
täällä koodissa ja tehdään
sitä varten ihan uusi projekti.

596
00:42:13.790 --> 00:42:15.590
Tehdään siitä konsolien meihin.

597
00:42:15.590 --> 00:42:21.510
Annetaan nimeksi merkkijonoja.

598
00:42:21.510 --> 00:42:28.630
Tai merkkijonot joo
merkkijonoja parempi no niin.

599
00:42:28.630 --> 00:42:32.170
Koodi tiedosto sieltä auki
ja projekti aktiiviseksi ja

600
00:42:32.170 --> 00:42:37.720
lähdetään sinne sitten laittamaan niitä.

601
00:42:37.720 --> 00:42:40.220
Eli lähdetään nyt aluksi
aluksi perusteista liikkeelle

602
00:42:40.220 --> 00:42:44.110
eli eli tuota me voidaan määritellä.

603
00:42:44.110 --> 00:42:48.350
Merkki on osa lomailla striimiä
antamalla sitten muuttujalle nimi täähän

604
00:42:48.350 --> 00:42:53.730
nyt on jo ennestään tuttua, mutta sitten
se sijoittaminen tapahtuu lainausmerkkien

605
00:42:53.730 --> 00:42:58.420
sisään eli eli muuttujan nimi on yksi
kuin merkkiperän ja sitten lainausmerkki

606
00:42:58.420 --> 00:43:02.990
elikkä tällä tavalla me voidaan.
Voidaan sijoittaa.

607
00:43:02.990 --> 00:43:07.780
Tuohon jono nimiselle muuttujalle
nytten kiinteä merkkijono arvo.

608
00:43:07.780 --> 00:43:10.550
Eli tää on niin sanottu merkkijono
liberaali eli tänne koodiin

609
00:43:10.550 --> 00:43:14.070
kiinteästi kirjoitettu
merkkijonon sisältö.

610
00:43:14.070 --> 00:43:17.950
Aikaisemmilla luennoilla on tehty myöskin
sitä, että me luetaan se merkkijono

611
00:43:17.950 --> 00:43:22.390
sieltä käyttäjältä tehdään se kohta
myöskin, mutta että tämä merkki on nyt me

612
00:43:22.390 --> 00:43:27.450
voidaan, voidaan tulostaa tulostaa
tonne ohjelman tulostusikkunan eli jos me

613
00:43:27.450 --> 00:43:31.300
laitetaan ohjelma käyntiin niin siellä
se niin merkkijono nytten näkyy tässä

614
00:43:31.300 --> 00:43:34.130
nyt ei sinänsä mitään
kovin kummallista ole.

615
00:43:34.130 --> 00:43:36.360
No luetaan seuraavaksi se.

616
00:43:36.360 --> 00:43:41.060
Merkkijonon sisältö käyttäjällä elikkä
tää readline metodi nyt palauttaa.

617
00:43:41.060 --> 00:43:46.020
Palauttaa sitten merkkijonon eli mitä ikinä
se käyttäjä sinne näppäimistölle syöttää

618
00:43:46.020 --> 00:43:50.660
niin se tallennetaan tuohon jonoon muuttujan
sisällöksi ja ennen kuin oikeastaan tulostetaan

619
00:43:50.660 --> 00:43:55.500
sitä jonoa niin niin
kokeillaan nyt että tää toimii.

620
00:43:55.500 --> 00:43:59.220
Eli nytten tuolla vilkkuva kursori
odottaa sitä käyttäjän syötettä jos me

621
00:43:59.220 --> 00:44:02.650
sinne jotakin kirjoitan painetaan enter
niin se syötäisi sinne jono muuttujan

622
00:44:02.650 --> 00:44:06.640
sisällöksi tallentuu ja ohjelman suoritus
päättyy siihen, mutta nytten katsotaan

623
00:44:06.640 --> 00:44:08.860
mitä tuo jono muuttuja nyt sisältää.

624
00:44:08.860 --> 00:44:11.940
Eli me saadaan tästä jono
muuttujasta nytten tietoa ja

625
00:44:11.940 --> 00:44:14.040
ensimmäinen mikä voisi olla kiinnostavaa.

626
00:44:14.040 --> 00:44:16.480
Tai no ensinnäkin niin
kun me laitetaan jonoja.

627
00:44:16.480 --> 00:44:20.220
Niin me nähdään tämmöinen aika pitkä
lista asioista mitä täällä jolla

628
00:44:20.220 --> 00:44:25.760
on ominaisuuksia mitä
sillä on toimintoja eli tää.

629
00:44:25.760 --> 00:44:28.970
On tapa päästä käsiksi tämän
muuttujan ominaisuuksiin

630
00:44:28.970 --> 00:44:31.170
ja myöskin muuttujan toimintoihin.

631
00:44:31.170 --> 00:44:33.930
Ja vaikka ensimmäinen asia mistä mä
voisin olla kiinnostunut, voisi olla

632
00:44:33.930 --> 00:44:39.230
tän jonon pituus eli jono pistelleet
kertoo sen, että kuinka monta merkkiä

633
00:44:39.230 --> 00:44:42.270
tää merkkijono sisältää
viemällä hiiren tohon päälle.

634
00:44:42.270 --> 00:44:48.850
Myöskin nähdään tää dokumentaatio boksissa
tää sama asia eli ketä nämä stream object

635
00:44:48.850 --> 00:44:52.730
ja minkä tyyppinen tää asia on niin
se on tietysti aika luontevasti.

636
00:44:52.730 --> 00:44:55.500
Itse tuossa myöskin
lukee eli kokonaisluku.

637
00:44:55.500 --> 00:45:00.330
Saadaan tietoa siitä, että kuinka monta merkkiä
tässä meidän kirjoittamassa tekstin pätkässä

638
00:45:00.330 --> 00:45:06.410
on ja tehdäänpä nytten siihen sitten muuttujalle
sijoitus, että otetaan se tuonne ylös ja

639
00:45:06.410 --> 00:45:12.080
kirjoitetaan nyt nyt sitten, että
annoit merkkijonon jonka pituus on.

640
00:45:12.080 --> 00:45:16.950
Ja tää kyseinen pituus muuttui
ja nyt sitten tulostellaan tuohon.

641
00:45:16.950 --> 00:45:20.840
Teksti on tekstin merkki on
perään ja nytten tämä keltainen

642
00:45:20.840 --> 00:45:23.230
hässäkkä täällä sanoo että possible.

643
00:45:23.230 --> 00:45:28.350
System null reference exception eli tää on
varoitus tuolta raiderissa joka ilmoittaa

644
00:45:28.350 --> 00:45:32.430
meille siitä niin että että on mahdollista
että tästä reagoinnista ei tulekaan

645
00:45:32.430 --> 00:45:36.210
yhtään mitään syötettä
ja siitä tulee tämmöinen.

646
00:45:36.210 --> 00:45:38.220
Olemattoman.

647
00:45:38.220 --> 00:45:42.720
Merkkijonon poikkeus ja periaatteessa me voitaisiin
tänne kirjoittaa tämmöinen check expression

648
00:45:42.720 --> 00:45:47.890
for nol, jolloinka siihen tulee
tämmöinen pieni iflause ympärille.

649
00:45:47.890 --> 00:45:51.090
Jolloinka sen ollessa nol niin tätä.

650
00:45:51.090 --> 00:45:55.810
Pituutta ei edes tarkisteta, mutta
ota nyt kontrolliza ja luotetaan nyt

651
00:45:55.810 --> 00:45:58.590
käyttäjään niin että sieltä
jotakin oikeasti syötettä tulee.

652
00:45:58.590 --> 00:46:03.210
Mutta tosissaan tuo iflaus ja
olisi olisi ihan hyvä tapa todeta

653
00:46:03.210 --> 00:46:06.790
että siellä ei mitään nollia sitten tule.
Mutta OK.

654
00:46:06.790 --> 00:46:12.370
Siinä on meidän syöte ja nytten tää
ohjelma sitten reagoi siihen niin että.

655
00:46:12.370 --> 00:46:16.290
Ottaa sen merkkijonon pituuden sieltä
ja tulostaa sen tuohon käyttäjälle

656
00:46:16.290 --> 00:46:21.460
hyvä eli sieltä saadaan ominaisuus
ominaisuuden lent arvona.

657
00:46:21.460 --> 00:46:26.100
Nyt sitten se luku 19 tietoomme.

658
00:46:26.100 --> 00:46:30.290
No nyt me voidaan lähteä tätä merkkijonoa
tässä manipuloimaan ja yksi asia

659
00:46:30.290 --> 00:46:35.680
mitä me voidaan sille tehdä
tälle jono muuttujalle niin on.

660
00:46:35.680 --> 00:46:42.280
Tehdä tuota toinen merkkijono, joka on se
alkuperäinen jono muutettuna suuraakkosin.

661
00:46:42.280 --> 00:46:49.590
Eli mä nyt valitsen sanani tässä
huolellisesti elikkä tää on jono isona.

662
00:46:49.590 --> 00:46:53.830
Niminen muutti, joka me nyt tässä
tässä nyt luodaan ja ja muutetaan se.

663
00:46:53.830 --> 00:46:58.810
Alkuperäinen jono merkki jonoksi tai
tarkemmin sanottuna tehdään uusi merkkijono,

664
00:46:58.810 --> 00:47:03.410
joka on se alkuperäinen muutettuna
suuraakkosin eli luetaan tää dokumentaatio

665
00:47:03.410 --> 00:47:05.610
kommentoi kommentti tästä huolellisesti.

666
00:47:05.610 --> 00:47:09.870
Eli richard copy of the
stream converter up case.

667
00:47:09.870 --> 00:47:17.760
Ja silloin se alkuperäinen
merkkijono jää koskemattomaksi.

668
00:47:17.760 --> 00:47:23.190
Eli jono jono.
Isona on.

669
00:47:23.190 --> 00:47:27.210
Jo noin isona noin eli siinä
tulostetaan sekä alkuperäinen jono että

670
00:47:27.210 --> 00:47:36.030
sitten tää iso merkkijono
kokeillaan miten tää toimii.

671
00:47:36.030 --> 00:47:40.440
Noin, eli kirjoitin vähän lyhyemmän jonon
siihen ja alkuperäinen jono näkyy tuossa

672
00:47:40.440 --> 00:47:45.090
se ei ole muuttunut millekään,
mutta muutettu jono näkyy siinä.

673
00:47:45.090 --> 00:47:48.490
Ja tää tarkoittaa sitä,
että tämä upper aliohjelma on

674
00:47:48.490 --> 00:47:53.010
niin sanotusti pure eli se ei muuta sitä.

675
00:47:53.010 --> 00:47:55.360
Oliota eli tätä jonoa jono oliota.

676
00:47:55.360 --> 00:47:59.890
Eli vaikka tää tuo appel on tämän
jono olion toiminto, eli mehän

677
00:47:59.890 --> 00:48:02.130
päästiin siihen käsiksi
kirjoittamalla tää.

678
00:48:02.130 --> 00:48:05.570
Eli se on toiminto joka teille jolle voidaan
tehdä niin se on kuitenkin tämmöinen niin sanottu

679
00:48:05.570 --> 00:48:11.490
pure puhdas metodi joka ei muuta sitä
alkuperäistä oliota vaan palauttaa uuden.

680
00:48:11.490 --> 00:48:15.900
Eli jos me katsotaan ne voidaan
periaatteessa mennä tän upper.

681
00:48:15.900 --> 00:48:21.520
Metodin toteutuksen sisään
painamalla 12 näppäimistöllä.

682
00:48:21.520 --> 00:48:26.840
Niin me nähdään niin että ahaa joo tää
on näköjään vähän ehkä vaikeasti luettava.

683
00:48:26.840 --> 00:48:28.840
Ehkä me ehkä me emme mene tänne.

684
00:48:28.840 --> 00:48:32.720
Tää voi olla turhan tekninen dokumentti tuonne
luettavaksi, mutta joka tapauksessa niin se toimii

685
00:48:32.720 --> 00:48:38.120
sillä tavalla niin, että että se luo luo uuden
strengin siellä ja ja sitten return lauseen avulla

686
00:48:38.120 --> 00:48:42.500
palauttaa sen siellä tuo upper
metodin funktion toteutuksessa.

687
00:48:42.500 --> 00:48:46.460
Ja se paluu arvo me otetaan tänne
sitten koppi siitä ja tallennetaan

688
00:48:46.460 --> 00:48:49.180
tähän jono isona nimiselle muuttujalle.

689
00:48:49.180 --> 00:48:55.640
No vastaavasti voitaisiin tehdä.
Jono pienenä.

690
00:48:55.640 --> 00:49:00.610
Ihan samalla samalla idealla
oli lower metodia käyttämällä

691
00:49:00.610 --> 00:49:02.540
ja samoin samoin tää tulover metodilla.

692
00:49:02.540 --> 00:49:04.360
Myöskin tämmöinen pure metodi.

693
00:49:04.360 --> 00:49:11.100
Elikkä se ei muuta sitä alkuperäistä
jonoa miksikään vaan palauttaa uuden.

694
00:49:11.100 --> 00:49:18.490
Uuden.
Olion, joka on sitten muutettu muutettu.

695
00:49:18.490 --> 00:49:24.710
Pieneksi noin.
No testataan nyt sekin.

696
00:49:24.710 --> 00:49:27.590
Tää testataan ehkä sitä
testataan sitä termiä.

697
00:49:27.590 --> 00:49:29.550
Ei pitäisi tässä yhteydessä käyttää.

698
00:49:29.550 --> 00:49:34.730
Tää on juuri sitä manuaalista kokeilemista
mistä tuossa luennolla aikaisemmin puhui eli

699
00:49:34.730 --> 00:49:38.270
ei varsinaista yksikkö testaamista vaan
yksinkertaisesti kokeilemista, että miten tää

700
00:49:38.270 --> 00:49:42.350
meidän ohjelma toimii, mutta joka tapauksessa
niin siellä nytten se tuo lower näyttää

701
00:49:42.350 --> 00:49:46.090
tekevän sitä mitä odotettiinkin
ainakin tuolla syötteellä.

702
00:49:46.090 --> 00:49:48.140
Hyvä.

703
00:49:48.140 --> 00:49:51.920
No ehkä tässä nyt voi voi sitten
kokeilla hieman erikoisia syötteitä,

704
00:49:51.920 --> 00:49:56.200
että mitä vaikkapa olisi
tämmöinen joku erikoismerkki.

705
00:49:56.200 --> 00:49:59.450
Suuraakkosin tai pieni aakkoseksi
muutettuna, niin nähdään

706
00:49:59.450 --> 00:50:03.640
niin, että täsmälleen samahan siitä tulee.
Eli.

707
00:50:03.640 --> 00:50:09.570
Vain noi aakkoset muutetaan pian aakkos
tai suuraakkosin tuommoisia erikoismerkkejä.

708
00:50:09.570 --> 00:50:12.820
Ainakaan näitä erikoismerkkejä
nyt ei muuta yhtään miksikään

709
00:50:12.820 --> 00:50:17.720
noilla tule appel tai
tule lower metodilla.

710
00:50:17.720 --> 00:50:21.120
No mihin tämmöisiä uppereita
tuloveroja voisi tarvita?

711
00:50:21.120 --> 00:50:24.430
Niin jos olette koskaan käynyt google
hakukoneessa, niin varmaan ootte nähnyt

712
00:50:24.430 --> 00:50:28.210
niin että hakusana suuraakkosin
kirjoitettuna antaa itse asiassa täsmälleen

713
00:50:28.210 --> 00:50:31.260
samat tulokset kuin piennar
aakkosilla kirjoitettuna.

714
00:50:31.260 --> 00:50:35.980
Eli siellä taustalla ne hakutermit
muutetaan varmaankin tällä tulover.

715
00:50:35.980 --> 00:50:39.420
En tiedä tarkasti, mutta
jommalla kummalla tavalla.

716
00:50:39.420 --> 00:50:43.800
Saman muotoiseksi kirjaimeksi elikkä
samaa saman kokoisiksi kirjaimiksi

717
00:50:43.800 --> 00:50:47.580
ja tehdään se haku sitten
käyttämällä niitä pian aakkosia.

718
00:50:47.580 --> 00:50:51.000
Eli sillä.
Siinä mielessä sitten.

719
00:50:51.000 --> 00:50:52.800
Kirjain koolla.

720
00:50:52.800 --> 00:50:55.400
Ei siinä hakutulosten tapauksessa ole
väliä ja korjatkaa jos oon väärässä.

721
00:50:55.400 --> 00:51:02.200
Mun käsittääkseni googlessa haku
aina ainakaan aikaisemmin niin tuolla.

722
00:51:02.200 --> 00:51:06.760
Haettavan termin kirjan
koolla joulun vähi.

723
00:51:06.760 --> 00:51:11.740
Mä teen tänne toisen string olion annetaan
siihen tämmöinen liberaali sisältö eli

724
00:51:11.740 --> 00:51:16.140
koodiin kiinteästi kirjoitettu
arvo laitetaan sinne nyt tommoinen.

725
00:51:16.140 --> 00:51:21.420
Merkkijono sisälle ja lähdetään
tutkimaan tätä tätä nyt tarkemmin.

726
00:51:21.420 --> 00:51:25.260
Eli mistä tää pekka puupää
oikeastaan koostuu, niin sehän koostuu

727
00:51:25.260 --> 00:51:28.170
useasta tällaisesta merkistä, eikö vaan?

728
00:51:28.170 --> 00:51:33.030
Ja jos me nyt palautellaan tää
pekka puupää tänne kommentteihin.

729
00:51:33.030 --> 00:51:38.000
Me voidaan paloitella se siten, että.

730
00:51:38.000 --> 00:51:40.900
Että, että ensimmäinen merkki on.

731
00:51:40.900 --> 00:51:45.780
Tämmöisessä niinku nollapaikassa ja toinen
merkki on ykköspaikassa ja niin edelleen.

732
00:51:45.780 --> 00:51:48.970
Ja miksi mä näin tein niin tää.

733
00:51:48.970 --> 00:51:55.000
Tätä paikkaa numeroa kutsutaan.
Indeksiksi.

734
00:51:55.000 --> 00:51:59.060
Ja jokainen näistä indeksistä
sisältää yksi merkin.

735
00:51:59.060 --> 00:52:03.870
Esimerkiksi.
Indeksissä.

736
00:52:03.870 --> 00:52:08.600
Indeksissä numero 2 on merkki.
K eikö vaan?

737
00:52:08.600 --> 00:52:12.720
Ja nyt mä ihan huolellisesti kirjoitan tän
k merkin tämmöisiin yksittäisiin hipsuihin.

738
00:52:12.720 --> 00:52:17.490
Eli toi merkki joka on tuossa
enterin vasemmalla puolella.

739
00:52:17.490 --> 00:52:19.390
No.

740
00:52:19.390 --> 00:52:22.540
Katsotaan mitä sieltä
löytyy, eli tulostetaan.

741
00:52:22.540 --> 00:52:27.060
Tulostetaan näytölle sieltä, pekka.

742
00:52:27.060 --> 00:52:33.900
Toinen jono nimisestä muuttujasta paikasta 2
oleva merkki eli tämmöisiä hakasulje notation

743
00:52:33.900 --> 00:52:38.260
avulla me päästään siihen indeksiin
käsiksi, joka sisältää jonkun asian.

744
00:52:38.260 --> 00:52:40.820
Tässä tapauksessa tietysti sen merkin k.

745
00:52:40.820 --> 00:52:48.550
Ja katsotaan mitä sieltä löytyy.

746
00:52:48.550 --> 00:52:53.130
Noin elikkä siellä oli nyt se pekka
puupään indeksissä 2 oleva merkki.

747
00:52:53.130 --> 00:53:02.320
Mitä muuta me sillä merkillä voidaan tehdä?
Me voidaan ottaa se.

748
00:53:02.320 --> 00:53:07.150
Kaar tyyppiseen muuttujaan talteen
eli otetaan sieltä toinen jono.

749
00:53:07.150 --> 00:53:09.260
Tuolla se oli toinen jono.

750
00:53:09.260 --> 00:53:16.960
Toinen jono paikassa 2 oleva merkki
talteen muuttujan jonka tyyppi on khar.

751
00:53:16.960 --> 00:53:22.390
Eli nyt jos mä maalaan tän alueen
tästä toinen jono hakasuluissa 2.

752
00:53:22.390 --> 00:53:26.510
OK toi ei itse asiassa toi raideri ei
näköjään näytäkään sitä ihan oikein.

753
00:53:26.510 --> 00:53:31.690
Tossa kohtaa se näyttää sen oikein elikkä
jos mä vien tähän kakkosen päälle tän.

754
00:53:31.690 --> 00:53:35.270
Kursori niin sieltä tulee toi sana
car esiin elikkä nyt että tämän

755
00:53:35.270 --> 00:53:38.810
maalatun alueen tyyppi on
nimenomaisesti khar eli.

756
00:53:38.810 --> 00:53:42.210
Se on yksittäinen merkki
jonka tyyppi on karja.

757
00:53:42.210 --> 00:53:50.570
Ja siinä se nyt on.

758
00:53:50.570 --> 00:53:59.200
Laitetaan tuohon pieni kommentti eli.

759
00:53:59.200 --> 00:54:02.370
Se on sen paikassa 2 olevan merkin
tyyppi, niinku tietysti minkä

760
00:54:02.370 --> 00:54:07.000
tahansa muunkin paikassa
olevan merkin tyyppi.

761
00:54:07.000 --> 00:54:11.780
No me voidaan myöskin etsiä merkkiä
merkin sijaintia tuossa jonossa.

762
00:54:11.780 --> 00:54:15.950
Eli nyt me havaitaan niin, että
vaikkapa löytyy sieltä jonosta.

763
00:54:15.950 --> 00:54:19.940
No mistä kohtaa se löytyy
niin se löytyy kohdasta 4.

764
00:54:19.940 --> 00:54:21.740
Eikö vaan?

765
00:54:21.740 --> 00:54:26.020
Me voidaan kysyä tältä
ohjelmalta, että mistä kohtaa?

766
00:54:26.020 --> 00:54:30.140
Tässä meidän ohjelmassa
löytyy merkki ja kysytään se

767
00:54:30.140 --> 00:54:32.700
tämmöistä index of metodia käyttämällä.

768
00:54:32.700 --> 00:54:38.370
Eli tää toinen jono oli jo sillä
on tällainen index of metodi.

769
00:54:38.370 --> 00:54:41.970
Joka palauttaa report zero
waste index of the first accuracy

770
00:54:41.970 --> 00:54:44.090
of the specified characteristics.

771
00:54:44.090 --> 00:54:47.270
String eli palauttaa niin
sanotun nollapohjaisen.

772
00:54:47.270 --> 00:54:50.780
Sijainnin ensimmäinen amerikan
ensimmäistä ilmentymistä tai

773
00:54:50.780 --> 00:54:53.990
sen merkin, jota me tuolla ollaan annettu.

774
00:54:53.990 --> 00:54:59.260
Ja nollapohjainen tarkoittaa tosissaan sitä
niin, että tää ensimmäinen paikka on nolla.

775
00:54:59.260 --> 00:55:03.030
Tää on tietysti tärkeä tärkeä nyt muistaa
ja huomata niin, että ohjelmoinnissa

776
00:55:03.030 --> 00:55:06.710
yleensä aina paikka laskuri
lähtee nolla liikkeelle.

777
00:55:06.710 --> 00:55:09.860
No nyt mennään ottaa se tietysti ihan
selvästi nähdään niin se on siellä

778
00:55:09.860 --> 00:55:13.480
nelospaikassa, mutta otetaan
se nyt tuonne talteen.

779
00:55:13.480 --> 00:55:17.250
Tää on tosiaan intti
luku ja tallennetaan se.

780
00:55:17.250 --> 00:55:28.550
Tuommoiseen int muuttujaan.

781
00:55:28.550 --> 00:55:31.200
Tutkitaan, missä indeksissä merkki?

782
00:55:31.200 --> 00:55:36.780
Ensimmäisen kerran esiintyy noin.
Ja tulostetaan nyt.

783
00:55:36.780 --> 00:55:42.270
Tulossa sitten sinne ruutuun.

784
00:55:42.270 --> 00:55:47.170
Jonossa toinen jono merkki aah.
Esiintyy.

785
00:55:47.170 --> 00:55:51.300
Ensimmäisen kerran paikassa.
Mikä se nyt on?

786
00:55:51.300 --> 00:55:56.330
Aikaa tuli vähän pitkä rivi, mutta
paikka oli semmoinen muuttujan nimi noin.

787
00:55:56.330 --> 00:56:05.840
Eli siellä paikassa se
esiintyy ensimmäisen kerran.

788
00:56:05.840 --> 00:56:11.110
Ja näyttäisi näyttäisi olevan
sitä mitä mitä odotettiinkin.

789
00:56:11.110 --> 00:56:14.450
No nyt tää oli tietysti vähän hölmö
esimerkki, koska me oltiin se pekka

790
00:56:14.450 --> 00:56:17.390
puupää annettu täällä niin
sanotusti liberaalinen.

791
00:56:17.390 --> 00:56:19.650
Eli totta kai me tiedetään
niin että se on siellä paikassa.

792
00:56:19.650 --> 00:56:22.350
4 mutta tehdäänpä nyt vähän
erilainen ohjelma ohjelman

793
00:56:22.350 --> 00:56:28.130
jatko tälle eli eli tota kysytään.

794
00:56:28.130 --> 00:56:30.220
Kysytään nyt käyttäjältä.

795
00:56:30.220 --> 00:56:32.920
Jotakin syötettä se sinne
kirjoittaa mitä kirjoittaa.

796
00:56:32.920 --> 00:56:37.440
Me emme tiedä sitä ja sitten pyydetään
sieltä myöskin etsittävä merkki

797
00:56:37.440 --> 00:56:41.520
eli laitetaan näin että
että annapas käyttäjäni.

798
00:56:41.520 --> 00:56:44.230
Merkki, jota haluat etsiä.

799
00:56:44.230 --> 00:56:49.910
Pyydetään sitä syötettä käyttäjältä.

800
00:56:49.910 --> 00:56:53.970
Merkkijonon luku metodilla eli
konsoli readlynilla tallennetaan

801
00:56:53.970 --> 00:56:59.850
tulos muuttujaan etsittävä
merkki merkkijonona.

802
00:56:59.850 --> 00:57:01.650
Konsoli.

803
00:57:01.650 --> 00:57:06.140
Redline metodilla ja nyt täytyy niinku tässä
huomata niin että tää readline palauttaa

804
00:57:06.140 --> 00:57:11.920
siis merkkijonon meidän täytyy ottaa se
tutkittava merkki talteen merkkijono tyyppiseen

805
00:57:11.920 --> 00:57:17.600
olioon merkkijonon tyyppiseen muuttujaan
ja sitten sen jälkeen ottaa ensimmäinen

806
00:57:17.600 --> 00:57:21.450
merkki siitä käyttäjän
antamasta syötteestä.

807
00:57:21.450 --> 00:57:25.910
Jotta me saadaan se khar
tyyppinen oli jo sieltä esiin.

808
00:57:25.910 --> 00:57:29.890
Me ei voida sieltä käyttäjältä pyytää
niinku yksi merkkiä tällä tavalla.

809
00:57:29.890 --> 00:57:33.070
Vielä yksi toinen tapa sitten siihen,
mutta katsotaan sitä vähän myöhemmin.

810
00:57:33.070 --> 00:57:37.840
Eli eli me voidaan sieltä ensimmäinen
sijainti ottaa nytten tuolla tavalla.

811
00:57:37.840 --> 00:57:41.680
Hyvä ja nyt tehdään samaten
kuin tuossa aikaisemminkin.

812
00:57:41.680 --> 00:57:44.360
Elikkä etsitään se paikka sieltä.

813
00:57:44.360 --> 00:57:48.640
Käyttäjän antamasta syötteestä.

814
00:57:48.640 --> 00:57:55.040
Eli paikka etsitään toisen jonon index of
metodilla ja mikä se meidän etsittävä merkki on,

815
00:57:55.040 --> 00:58:05.720
niin se on nytten meillä tallessa tuossa
etsittävä merkki nimissä muuttujassa.

816
00:58:05.720 --> 00:58:09.640
Etsitään jonosta.
Ensimmäinen.

817
00:58:09.640 --> 00:58:15.260
Esiintymä siitä merkistä.
Onko käyttäjä antoi?

818
00:58:15.260 --> 00:58:17.060
Noin.

819
00:58:17.060 --> 00:58:20.370
Tuli vähän nyt ehkä paljon
kirjoitettua tota tekstiä kerralla.

820
00:58:20.370 --> 00:58:24.590
Mutta laitetaan laitetaan
vielä se tulos sinne elikkä.

821
00:58:24.590 --> 00:58:28.200
Jonossa toinen jono merkki.
Jota etsitään.

822
00:58:28.200 --> 00:58:32.040
Se on tietysti nyt sitten
se etsittävä merkki.

823
00:58:32.040 --> 00:58:36.800
Esiintyy ensimmäisen kerran paikassa paikka
joo pahoittelut että tuli nyt vähän ehkä turhan

824
00:58:36.800 --> 00:58:41.710
pitkästi tota tekstiä tuohon, mutta
katsotaan mitä siitä nyt miltä se näyttää.

825
00:58:41.710 --> 00:58:46.590
No niin elikkä nyt me etninen muut.

826
00:58:46.590 --> 00:58:51.560
Antti jos joo elikkä tuo oli se tuo se
jono josta etsitään ja sitten etsittävä

827
00:58:51.560 --> 00:58:53.840
merkki voisi olla nyt
vaikkapa ei niin kun nähdään.

828
00:58:53.840 --> 00:58:56.920
Meillä on tässä näitä 2 kappaletta
mutta tää index of palauttaa

829
00:58:56.920 --> 00:58:59.780
sen paikan jossa se
ensimmäisen kerran esiintyy.

830
00:58:59.780 --> 00:59:03.490
Tässä tapauksessa se esiintyy paikassa
4 tota nyt ehkä vähän huono esimerkki

831
00:59:03.490 --> 00:59:07.790
kun tuo sekä ensimmäinen että toinen
kerta niin on tuo paikka nelonen siellä,

832
00:59:07.790 --> 00:59:13.850
mutta tota koitetaan
vaikka toista syötettä.

833
00:59:13.850 --> 00:59:18.890
Mä laitan sinne antti jussi
edelleen ja etsitään vaikka merkkiä.

834
00:59:18.890 --> 00:59:21.890
Ja nyt nähdään niin että
sitähän ei tuossa tietenkään ole.

835
00:59:21.890 --> 00:59:24.110
No mitä tapahtuu?

836
00:59:24.110 --> 00:59:28.270
OK sieltä tuli tämmöinen
tulos jonossa antti esiintyy.

837
00:59:28.270 --> 00:59:33.220
Merkki minkä takia se ei muuten näy
tuossa tässä on taas se sama ongelma joka

838
00:59:33.220 --> 00:59:37.440
oli aikaisemminkin ne tänään
aakkoset ei ei tulostu tänne konsoli.

839
00:59:37.440 --> 00:59:40.610
Integroituun konsoli ikkunan se on vähän nyt.
Harmi.

840
00:59:40.610 --> 00:59:42.610
Mutta joka tapauksessa
niin odota, ei sieltä löydy

841
00:59:42.610 --> 00:59:44.630
ja me saatiin sieltä tämmöinen tulos.

842
00:59:44.630 --> 00:59:48.170
No täähän on nyt vähän kyseenalaista
niin että onko mitään järkeä sanoa tässä

843
00:59:48.170 --> 00:59:52.950
ohjelmassa niin että jonossa
plaaplaa esiintyy merkki paikassa -1.

844
00:59:52.950 --> 00:59:56.250
Että eikö luontevampaa olisi sanoa
niin, että sitä merkkiä ei löydy ja

845
00:59:56.250 --> 01:00:02.290
korjataanpa tää tilanne juurikin
niin että tehdään tuosta.

846
01:00:02.290 --> 01:00:05.730
Käyttöliittymästä hieman
mielekkäämpi eli jos.

847
01:00:05.730 --> 01:00:08.110
Se löydetty paikka on -1.

848
01:00:08.110 --> 01:00:13.340
Toisin sanoen sitä ei löydy.
Miksi -1?

849
01:00:13.340 --> 01:00:18.560
No sen takia, että jos mä menen tuohon
index of sanan kohdalle, niin mä näen täältä

850
01:00:18.560 --> 01:00:24.160
dokumentaatio kommentista, että se positio
palautetaan sieltä se löytyy se etsittävä

851
01:00:24.160 --> 01:00:28.860
merkki, mutta jos ei löydy niin sieltä
palautetaan -1 eli tässä on tosi tärkeätä

852
01:00:28.860 --> 01:00:32.300
oppia lukemaan näitä dokumentaatiota.
Mitä siellä.

853
01:00:32.300 --> 01:00:35.280
Funktio oikeasti tekee.

854
01:00:35.280 --> 01:00:40.320
Ja vastaavasti tietysti itse kirjoittamaan
niitä omien omien funktioiden dokumentaatiota,

855
01:00:40.320 --> 01:00:42.980
joita itse muistetaan, että
mitä meidän omat funktiot tekee.

856
01:00:42.980 --> 01:00:45.610
Mutta tää on nyt sesarin sisäänrakennettu.

857
01:00:45.610 --> 01:00:48.770
Index of metodia sen
dokumentaatiota tässä nyt tutkitaan.

858
01:00:48.770 --> 01:00:51.380
Elikkä jos se paikka on -1,
niin se tarkoittaa käytännössä

859
01:00:51.380 --> 01:00:59.990
sitä, että merkkiä ei silloin löydy.
Merkkiä.

860
01:00:59.990 --> 01:01:02.210
Etsittävä.

861
01:01:02.210 --> 01:01:05.560
Tää on tosi ärsyttävää tämä nää
isot laatikot kun nää ei niin

862
01:01:05.560 --> 01:01:10.570
kun nyt se mun oikeasti
haluama juttu on tuolla.

863
01:01:10.570 --> 01:01:17.620
Boxin alla tää on todella ikävää tää.
Todella ikävää tää.

864
01:01:17.620 --> 01:01:22.780
Raiderin toiminta tuossa tältä osin
elikkä merkkejä etsittävä merkki ei löydy.

865
01:01:22.780 --> 01:01:24.580
Laitan siihen!

866
01:01:24.580 --> 01:01:31.850
Perään, mutta muussa tapauksessa mikäli se
merkki sieltä löytyy niin tulostetaan että.

867
01:01:31.850 --> 01:01:46.250
Merkki löytyykin ja sijaitsee.
Paikassa paikka noin.

868
01:01:46.250 --> 01:01:54.090
Ja nyt testataan toimintaa.

869
01:01:54.090 --> 01:01:57.520
Sinne annetaan se syöte ja etsitään
merkki ja pistetään nyt vaikkapa– Se on

870
01:01:57.520 --> 01:02:01.880
ihan yksi lailla merkki kuin
mikä tahansa muukin merkki ja.

871
01:02:01.880 --> 01:02:08.560
Se sieltä
löytyy. Ja.

872
01:02:08.560 --> 01:02:11.080
Ja tota auki tuo tulostus,
että se nyt vähän turha tuossa

873
01:02:11.080 --> 01:02:16.730
otetaanpa se se itse asiassa pois siitä.

874
01:02:16.730 --> 01:02:25.330
Noin jätetään vaan se
ehdollinen tulostus sinne hyvä.

875
01:02:25.330 --> 01:02:31.350
No niin elikkä nytten.
Katseltiin merkkijonoja tässä.

876
01:02:31.350 --> 01:02:36.210
Ja tutustuttiin merkkien on perustoimintaan,
eli miten merkki on alle sijoitetaan

877
01:02:36.210 --> 01:02:39.890
arvo ja ehkä mä voisin vielä
vielä tähän yksi jutun lisätä.

878
01:02:39.890 --> 01:02:45.950
Unohdin sen tuossa aikaisemmin tehdä,
että sen lisäksi että me voidaan siis.

879
01:02:45.950 --> 01:02:49.110
Sijoittaa merkkijonoon tällä tavalla.

880
01:02:49.110 --> 01:02:53.370
Suoraan tuo liberaali arvo niin
totta kai me voidaan myöskin yhdistää

881
01:02:53.370 --> 01:02:58.870
siihen asioita, eli me voidaan yhdistää
2 merkkijonoa toisiinsa tämmöisellä

882
01:02:58.870 --> 01:03:02.440
tavalla eli plus merkkiä käyttämällä.

883
01:03:02.440 --> 01:03:05.750
Ja ja ja silloin tästä
muodostuu uusi merkki jono, joka

884
01:03:05.750 --> 01:03:09.370
sitten sijoittuu tuohon jonoon muuttajalle.
Katsotaan nyt.

885
01:03:09.370 --> 01:03:15.940
Ohjelma käyntiin laittamalla, että sieltä
se yhdistetty merkkijono kyllä tulee noin.

886
01:03:15.940 --> 01:03:17.850
Hyvä eli se on.

887
01:03:17.850 --> 01:03:23.320
Se on myöskin tapa tapa tuota noin niin
luoda merkkijonoja tällaiseen sharpin.

888
01:03:23.320 --> 01:03:26.980
Totta kai mä olisin voinut tähän
myöskin tähän itse syöttämään.

889
01:03:26.980 --> 01:03:31.070
Jonoon myöskin laittaa jonkun.

890
01:03:31.070 --> 01:03:35.140
Lisäkkeen tänne perään, eli sen lisäksi,
että me luetaan käyttäjältä syöte, niin

891
01:03:35.140 --> 01:03:39.330
me voidaan tunkea sinne plus merkin
avulla jotakin jotakin ekstraa.

892
01:03:39.330 --> 01:03:43.990
Katsotaan nyt mitä siitä tapahtuu eli jos
mä nyt laitan tuohon vielä sen oman nimeni.

893
01:03:43.990 --> 01:03:49.490
Niin silloin se silloin se jono
sisältäisi sen hipin sinne sinne perään.

894
01:03:49.490 --> 01:03:55.850
Mutta OK eli eli tota tuolla
plus merkillä voidaan sitten.

895
01:03:55.850 --> 01:04:01.830
Merkkijonoja yhdistellään
laiteta siitä nyt kommentti vielä.

896
01:04:01.830 --> 01:04:09.220
Plus, operaattorilla.

897
01:04:09.220 --> 01:04:13.330
Käytännössä siellä taustalla tapahtuu
semmoinen asia niin että näistä 2 merkkijonosta

898
01:04:13.330 --> 01:04:19.210
luodaan yksi uusi stringit siellä
tietokoneen sisällä ja se uusi string oli jo

899
01:04:19.210 --> 01:04:23.800
sitten sijoitetaan tähän
jon jono muuttujan arvoksi.

900
01:04:23.800 --> 01:04:25.600
Hyvä.

901
01:04:25.600 --> 01:04:29.660
No joo semmoinen pikku lisäys siihen, mutta
nyt ollaan käyty tän tän päivän asiat läpi

902
01:04:29.660 --> 01:04:34.110
eli tota siellä chatissa ei näytä kysymyksiä
olevan jotenka päätellään oikeastaan tän

903
01:04:34.110 --> 01:04:38.640
päivän luento tähän vähän ollaan etuajassa,
mutta ei se mitään kiitoksia mukaan alusta

904
01:04:38.640 --> 01:04:43.360
ja ei muuta kun palataan huomenna asiaan uusin aihein.
Moikka.