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.