WEBVTT Kind: captions; Language: fi 1 00:00:01.070 --> 00:00:04.800 Oikein hyvää huomenta kaikille ja tervetuloa seuraamaan luentoa. 2 00:00:04.800 --> 00:00:08.380 Numero 10 ohjelmat yksi kurssilla. 3 00:00:08.380 --> 00:00:10.280 Kevät kaksikymmentäneljä edelleen menossa. 4 00:00:10.280 --> 00:00:13.400 Otetaan pari muistutusta tähän luennon alkuun. 5 00:00:13.400 --> 00:00:18.230 Arkityön suunnitelma tulee hyväksyttää ohjaajalla tällä viikolla. 6 00:00:18.230 --> 00:00:22.340 Ja se tarkoittaa silloin sitä niin, että se merkintä siellä tiimissä 7 00:00:22.340 --> 00:00:26.170 pitää olla olla tän viikonloppuun mennessä. 8 00:00:26.170 --> 00:00:32.770 Ja ja ja jos nyt tosissaan sitten menette ja kun menette sinne ohjauksiin niin 9 00:00:32.770 --> 00:00:37.140 huomioikaa se että siellä on ruuhkaa siellä on varmasti muitakin opiskelijoita 10 00:00:37.140 --> 00:00:41.220 aika paljonkin ja meillä on nyt pikkuisen ekstraa miehitystä varattu tuohon torstaille 11 00:00:41.220 --> 00:00:45.410 ja perjantaille ohjauksiin niin etäohjauksen kuin lähiö ohjauksiin, mutta että 12 00:00:45.410 --> 00:00:49.510 hyvä hyvä on siihen varautua siinä etäohjauksessa on tietysti se etu niin että 13 00:00:49.510 --> 00:00:52.070 sinne voi sen ikään kuin vuoronumeron. 14 00:00:52.070 --> 00:00:55.640 Tai tämmöisen niinku tiketin ottaa ja sitten odotella sitä omaa vuoroaan rauhassa 15 00:00:55.640 --> 00:00:59.560 omalla koneella lähiohjauksessa gorilla tietysti joutuu siellä paikan päällä 16 00:00:59.560 --> 00:01:02.930 sitten istuskelemaan niin pitkään, että saa sen. 17 00:01:02.930 --> 00:01:07.630 Suunnitelmansa hyväksyttyä, jos nyt jostakin ylitsepääsemmättömästä syystä, sitä suunnitelmaa 18 00:01:07.630 --> 00:01:12.770 ei juuri tällä viikolla pääse pääse hyväksyttämään niin niin niin ei se elämä siihen nyt 19 00:01:12.770 --> 00:01:17.260 kuitenkaan lopu, että sitten ensi viikolla asian asian voi hoitaa. 20 00:01:17.260 --> 00:01:20.370 Mutta tällä viikolla nyt joka tapauksessa periaatteessa deadline kuitenkin 21 00:01:20.370 --> 00:01:22.950 on sitten toinen muistutus tuosta dubbaus näytteestä. 22 00:01:22.950 --> 00:01:24.870 Sehän on osa kurssin suoritusta. 23 00:01:24.870 --> 00:01:29.250 Myöskin eilen katsottiin deckerin käyttöä ja ja sitä tuossa debug 24 00:01:29.250 --> 00:01:33.750 näytteessä on myöskin tarkoitus sitten osoittaa ja. 25 00:01:33.750 --> 00:01:40.230 Siellä on tosissaan luennon 9 kohdalla se linkki sinne debugmateriaalin missä käydään tota 26 00:01:40.230 --> 00:01:45.990 samaa asiaa läpi mitä eilen ihan konkreettisesti näytin siinä dubbaus näyttäessään on semmoinen 27 00:01:45.990 --> 00:01:50.700 pieni tehtävä joka pitää debugerille avulla sitten suorittaa ja. 28 00:01:50.700 --> 00:01:53.680 Ja siinä tällä keväällä on. 29 00:01:53.680 --> 00:01:56.540 On se suoritustapa sitten sellainen niin että sitten tehdään 30 00:01:56.540 --> 00:01:59.240 semmoinen pieni videoklippi halutessaan. 31 00:01:59.240 --> 00:02:04.720 Voi myöskin demokraat näytteen antaa ohjauksessa ohjaajalle ja voi olla nopeampi. 32 00:02:04.720 --> 00:02:09.150 Sitten jossakin tapauksessa näyttää ohjaajalle, että osa sitä debuggeria käyttää niin 33 00:02:09.150 --> 00:02:15.300 kumpi kumpi tapa vaan tänä keväänä on ihan OK, mutta että jos nyt näistä joistakin jommasta 34 00:02:15.300 --> 00:02:19.460 kummasta näistä kysymyksiä heidän niin voiton että chattiin laittaa taikka laittaa sitten 35 00:02:19.460 --> 00:02:21.920 tuonne meidän opettajien sähköpostilistalle. 36 00:02:21.920 --> 00:02:27.270 Viesti ja. 37 00:02:27.270 --> 00:02:30.050 Otetaan vielä muutama esimerkki noista taulukoista. 38 00:02:30.050 --> 00:02:32.630 Eli kuten eilen mainitsin, niin tavallisesti taulukon alkiot 39 00:02:32.630 --> 00:02:35.650 liittyy jollakin tavalla loogisesti toisiinsa. 40 00:02:35.650 --> 00:02:39.340 Eli tää tarkoittaa sitä niin, että. 41 00:02:39.340 --> 00:02:45.110 Että se ajatus näiden taulukoiden käyttämisessä olisi sellainen, että ne asiat 42 00:02:45.110 --> 00:02:49.350 arvot, joita sinne taulukkoon tallennetaan niin eivät ole vähän niinku sitä 43 00:02:49.350 --> 00:02:52.810 sun tätä vaan että niillä on joku yhteys toisiinsa. 44 00:02:52.810 --> 00:02:59.010 Eli eilen nähtiin sellainen esimerkki vai nähtiinkö ei ehkä nähty, mutta 45 00:02:59.010 --> 00:03:02.610 joka tapauksessa niinku yks yks esimerkki voisi olla sellainen, että meillä 46 00:03:02.610 --> 00:03:05.930 on vaikkapa viikon päivien keskilämpötilat. 47 00:03:05.930 --> 00:03:08.080 Eli tuossa nyt jos ajatellaan. 48 00:03:08.080 --> 00:03:10.250 Mitenkähän ne tällä viikolla nyt on mennyt? 49 00:03:10.250 --> 00:03:13.510 Leikitään nyt, että tällä viikolla ne voisi olla jotain tuollaista. 50 00:03:13.510 --> 00:03:17.400 Eli siinä on nyt 123456, vielä yksi kappale. 51 00:03:17.400 --> 00:03:22.900 Lämpötiloja sunnuntaita kohti kylmenee, eli nää nyt selkeästi liittyy toisiinsa. 52 00:03:22.900 --> 00:03:27.960 Tuonne pitää tietysti laittaa taulukon tyyppiä taulukon 53 00:03:27.960 --> 00:03:30.440 tyyppistä muistuttava hakasuljemerkintä. 54 00:03:30.440 --> 00:03:33.240 Eli nyt siinä on meillä kysymyksessä 7. 55 00:03:33.240 --> 00:03:39.090 Kappaletta pitkä double taulukko ja näistä nyt jokainen ilmentää lämpötilaa. 56 00:03:39.090 --> 00:03:40.990 Kunakin viikonpäivänä. 57 00:03:40.990 --> 00:03:44.770 No sitten tavallaan se vähän niinku toinen ääripää voisi olla sellainen 58 00:03:44.770 --> 00:03:48.040 niin että meillä voisi olla vaikka henkilön tiedot. 59 00:03:48.040 --> 00:03:49.840 Eli. 60 00:03:49.840 --> 00:03:55.910 Erilaisia tietoja henkilöstä sanotaan nyt vaikkapa niin, että tässä olisi vaikkapa. 61 00:03:55.910 --> 00:04:01.030 Vaikkapa henkilö jonkunlaisen on vuosina ja osavuosina leikitään nyt tätä tuo 62 00:04:01.030 --> 00:04:06.050 voisi kuvastaa sitä ja sitten voisi olla vaikka vaikka pituus ja sitten esimerkiksi 63 00:04:06.050 --> 00:04:12.570 paino ja sitten vaikka joku pankkitilin saldo eli. 64 00:04:12.570 --> 00:04:15.020 Joo tavallaan nää liittyy toisiinsa. 65 00:04:15.020 --> 00:04:19.240 Ne liittyy siihen henkilöön. 66 00:04:19.240 --> 00:04:24.270 Jaaha mulla rupesi naapuri tekemään remppaa juuri sopivasti. 67 00:04:24.270 --> 00:04:26.190 Koitetaan. 68 00:04:26.190 --> 00:04:28.710 Jospa se nyt ei hirveästi hirveästi tuossa häiritsisi. 69 00:04:28.710 --> 00:04:31.930 Eli kyllä nämä liittyy toisiinsa, mutta sinänsä nää arvot 70 00:04:31.930 --> 00:04:34.690 ovat vähän niinku eri kategoriasta kaikki. 71 00:04:34.690 --> 00:04:40.240 Eli tossa on ikä tuossa on pituus ja sitten jotakin muuta eli tää on vähän 72 00:04:40.240 --> 00:04:44.710 niinku tietyssä mielessä pikkuisen väärä tapa käyttää taulukkoa koska nää 73 00:04:44.710 --> 00:04:49.230 ei sinänsä nää arvot liity konkreettisesti toisiinsa. 74 00:04:49.230 --> 00:04:52.730 Eli jos me haluttaisiin nyt vaikkapa. 75 00:04:52.730 --> 00:04:56.200 Henkilön tiedot tallentaa tämmöiseen johonkin tietorakenteeseen, niin 76 00:04:56.200 --> 00:05:00.570 siihen on sitten muunlaisia tietorakennemalleja olemassa. 77 00:05:00.570 --> 00:05:05.380 Se sharpin erityisesti semmoinen tota. 78 00:05:05.380 --> 00:05:11.870 No joo pari tulee mieleen elikkä ensinnäkin oliot eli olijoilla voi tehdä erikseen 79 00:05:11.870 --> 00:05:16.420 kenttiä ja ikäkentän ja pituuskentän ja niin edelleen. 80 00:05:16.420 --> 00:05:21.890 Nythän nämä ovat vähän niinku lukuja jotka jotka vaan on lähetetty tälleen yksi taulukkoon 81 00:05:21.890 --> 00:05:26.240 toinen mahdollisuus mikä modernissa se on mahdollista on tämmöinen monikko. 82 00:05:26.240 --> 00:05:32.290 Eli eli tämmöisten. Tällä tällä tavalla. 83 00:05:32.290 --> 00:05:38.070 Tavalla tietojen tallentaminen ei ole suositeltavaa. 84 00:05:38.070 --> 00:05:41.720 Aa tähän tarkoitukseen. 85 00:05:41.720 --> 00:05:46.060 Paremmin sopivat luokat tietueet tai monikot. 86 00:05:46.060 --> 00:05:48.500 Näitä ei tällä kurssilla juurikaan käsitellä. 87 00:05:48.500 --> 00:05:54.100 Me seuraavalla luennolla pikkuisen käsitellään noita luokkia ja luokista tehtyjä olijoita, 88 00:05:54.100 --> 00:05:58.300 mutta tavallaan tämmöisen vähän niinku monimutkaisempien tietorakenteiden tekeminen jätetään 89 00:05:58.300 --> 00:06:05.140 ohjelmointi 2 kurssille ja nyt oikeastaan tällä kurssilla käsitellään vaan vaan tätä tilannetta 90 00:06:05.140 --> 00:06:11.660 missä meillä on on on tavallaan vähän niinku yksi ja samaa jutskaa eli jutskaa liittyvät liittyvät 91 00:06:11.660 --> 00:06:14.410 lukuarvot tai merkkijonot tai vastaavat. 92 00:06:14.410 --> 00:06:19.100 Arvot yksi taulukossa ja niitä sitten automaattisesti käsitellään, jotta 93 00:06:19.100 --> 00:06:22.950 voidaan esimerkiksi lukea nyt sitten vaikka tai laskea keskiarvo tai jotain 94 00:06:22.950 --> 00:06:27.810 muuta tämmöisiä tunnuslukuja jonkun keskiarvon laskeminen vaikkapa henkilön 95 00:06:27.810 --> 00:06:30.780 tiedoston tässä ei olisi mitään mieltä. 96 00:06:30.780 --> 00:06:35.970 Eli eli keskiarvo näistä 4 asiasta ei varsinaisesti oikein tarkoita mitään, mutta 97 00:06:35.970 --> 00:06:41.570 joo, elikkä siinä nytten tavallaan semmoinen perus peruskäyttötilanne nyt tuolle taulukolle 98 00:06:41.570 --> 00:06:44.950 olisi kuitenkin tuo, että ne alkiot liittyy toisiinsa. 99 00:06:44.950 --> 00:06:49.440 No otetaan sitten muutama muu asia vielä taulukoihin liittyen, elikkä 100 00:06:49.440 --> 00:06:53.390 nyt meillä taulukon alkioilla on aina oltava jokin. 101 00:06:53.390 --> 00:06:57.690 Kiinteä tyyppi, kuten kaikilla muillakin muuttujilla tehdään nyt vaikkapa stringtaulukko 102 00:06:57.690 --> 00:07:03.750 tähän ja lähdetään lähdetään siihen siihen nyt laittamaan henkilöiden nimiä. 103 00:07:03.750 --> 00:07:08.970 Elikkä siellä on taas antti jussi ja jonne ja sitten vaikka joku kolmas nimi vielä. 104 00:07:08.970 --> 00:07:12.510 Mutta nyt jos mä yritän laittaa tänne jonkun muun tyyppisen alkion kun 105 00:07:12.510 --> 00:07:15.860 mitä mitä tää tyyppi täällä edustaa niin se ei onnistu. 106 00:07:15.860 --> 00:07:21.450 Tästä tulee käännösvirhe käynyt converter expression blaa into string eli tää on. 107 00:07:21.450 --> 00:07:24.490 Tää on sama käännösvirhe joka aina muulloinkin. 108 00:07:24.490 --> 00:07:28.180 Tulee, jos me yritetään muuttua niin sisällöksi sijoittaa jotakin 109 00:07:28.180 --> 00:07:31.920 sellaista arvoa joka siihen tyyppiin ei sovi. 110 00:07:31.920 --> 00:07:37.450 Ihan vastaavasti jos mulla olisi. Olisi vaikka inkluvut. 111 00:07:37.450 --> 00:07:42.460 Int luvut ja sitten sinne 1 2, 3 ja sitten. 112 00:07:42.460 --> 00:07:46.000 Joku string tyyppinen asia ja yritetään sinne laittaa. 113 00:07:46.000 --> 00:07:52.350 Ihan sama juttu eli kannat convert blaa blaa eli tämä ei ole mahdollista. 114 00:07:52.350 --> 00:07:58.210 No siinä siinä nyt pari esimerkkiä tästä vahvasta ja staattisesta tyyppityksestä. 115 00:07:58.210 --> 00:08:03.930 Jossakin muissa ohjelmointikieli joku tän tyyppinen tai tän tapainen taulukon 116 00:08:03.930 --> 00:08:08.620 luominen kuitenkin voi olla mahdollista ja siellä ehkä taustalla sitten tämmöisessä 117 00:08:08.620 --> 00:08:12.850 tilanteessa saattaa tapahtua merkkijonoksi muuttaminen siellä taustalla pellin 118 00:08:12.850 --> 00:08:15.410 alla ikään kuin ohjelmoijien näkemättä. 119 00:08:15.410 --> 00:08:19.670 Eli mä itse pidän tätä siinä mielessä aika turvallisena tilanteena ohjelmoijalle, että 120 00:08:19.670 --> 00:08:23.230 sinne ei ikään kuin vahingossa voi mennä vaikkapa tuosta nelosesta. 121 00:08:23.230 --> 00:08:29.440 Muutettua merkkijonoa, jolloinka sitten taas voidaan ajatella, että eihän se ole se alkuperäinen 122 00:08:29.440 --> 00:08:33.890 nelonen vaan se on merkkijonon nelonen ja ne ovat 2 2 eri asiaa. 123 00:08:33.890 --> 00:08:38.630 Tässä nyt varmaan sitten saataisiin väittelyn kahvihuoneessa herkästi aikaiseksi, 124 00:08:38.630 --> 00:08:43.010 mutta näin tää nyt se ESR pissa kuitenkin toimii. 125 00:08:43.010 --> 00:08:45.870 No sitten otetaan taulukon. 126 00:08:45.870 --> 00:08:50.600 Sisällä tapahtuva alkioiden vaihto otetaan tuosta nytten. 127 00:08:50.600 --> 00:08:54.740 Vähän vähän kopiota tuosta äsken tekemästäni luvut taulukosta. 128 00:08:54.740 --> 00:09:00.160 Eli siinä mulla nyt on on 3 kappaletta pitkä taulukko ja nyt ajatus 129 00:09:00.160 --> 00:09:03.500 voisi olla vaikkapa sellainen että vaihdetaan. 130 00:09:03.500 --> 00:09:07.440 Vaihdetaan ensimmäinen ja viimeinen. 131 00:09:07.440 --> 00:09:11.350 Alkio jopaiseen eli tehdään tämmöinen niin sanottu swap operaatio. 132 00:09:11.350 --> 00:09:13.340 Laitetaan sinne nyt vielä pari kappaletta lisää, niin tulee 133 00:09:13.340 --> 00:09:15.560 vähän mielenkiintoisempi tästä esimerkistä. 134 00:09:15.560 --> 00:09:18.820 Eli leikitään nyt että tää voisi olla joku tosi pitkäkin taulukko, jolloinka ei ole 135 00:09:18.820 --> 00:09:24.490 niinku ihan hirveän selvää se että mikä se missä kohtaa se viimeinen on. 136 00:09:24.490 --> 00:09:34.120 No ensimmäinen alkio sijaitsee paikassa nolla, eli tämän ensimmäisen. 137 00:09:34.120 --> 00:09:36.280 Joo pahoittelut. 138 00:09:36.280 --> 00:09:39.840 En tiedä kuuluuko tuo ääni sinne striimiin asti, mutta mulla 139 00:09:39.840 --> 00:09:43.730 mulle se ainakin kuuluu aika selkeästi. Joo. 140 00:09:43.730 --> 00:09:48.410 Jotakin porausta siellä tapahtuu, mutta OK elikkä se luvut taulukon aivan ensimmäinen. 141 00:09:48.410 --> 00:09:50.930 Alkio sijaitsee paikassa nolla. 142 00:09:50.930 --> 00:09:55.390 No nyt jos mä haluan laittaa siihen paikkaan nolla jonkin luvun 143 00:09:55.390 --> 00:09:58.490 niin se tapahtuu ihan sijoittamalla siihen lukuun. 144 00:09:58.490 --> 00:10:01.450 Heitetään nyt sinne vaikkapa miinus ykkönen ja katsotaan 145 00:10:01.450 --> 00:10:03.370 että miltä tuo tilanne näyttää. 146 00:10:03.370 --> 00:10:07.870 Itse asiassa mä voisin laittaa tuohon kohtaan nyt keskeytyskohdan, joka tarkoittaa sitä että 147 00:10:07.870 --> 00:10:12.310 mun ohjelma pysähtyy tähän riville kolmekymmentäkolme ja tätä riviä kolmekymmentäkolme ei 148 00:10:12.310 --> 00:10:15.140 ole vielä suoritettu, eli katsotaan nyt ihan muistin virkistämiseksi. 149 00:10:15.140 --> 00:10:17.380 Ja mitä tuo tuolla? 150 00:10:17.380 --> 00:10:22.300 Ohjelman tilassa käytännössä tarkoittaa, jospa tuo devokerin 151 00:10:22.300 --> 00:10:24.680 lähtisi siitä nyt käyntiin noin. 152 00:10:24.680 --> 00:10:27.760 Eli meillä on siellä nytten keskusalueella täällä threads 153 00:10:27.760 --> 00:10:29.880 and variables paneelissa näkyvillä. 154 00:10:29.880 --> 00:10:35.460 Tää luvut taulukko ja siellä tietysti nyt sitten nää luvut 1 2 3 ja niin edelleen, mutta 155 00:10:35.460 --> 00:10:40.460 nyt suoritetaan toi rivi kolmekymmentäkolme klikkaamalla tuosta step lintu. 156 00:10:40.460 --> 00:10:44.740 Ja nyt niin kun nähdään niin toi ensimmäinen alkio siellä vaihtui 157 00:10:44.740 --> 00:10:48.380 keltaiseksi väriksi eli tarkoittaa sitä että se on. 158 00:10:48.380 --> 00:10:52.660 Asia, joka juuri siinä äsken muuttui eli siellä on nytten toi miinus ykkönen. 159 00:10:52.660 --> 00:10:56.360 No niin, mutta sitä mä en nyt oikeasti halunnut tässä tehdä, vaan mä halusin, halusin 160 00:10:56.360 --> 00:11:01.820 vaihtaa sen vihoviimeisen ja niin ensimmäisiä vihoviimeisen. 161 00:11:01.820 --> 00:11:03.720 Alkioiden paikat keskenään. 162 00:11:03.720 --> 00:11:11.580 No sen aivan vihoviimeisen paikan mä saan sanomalla luvut. 163 00:11:11.580 --> 00:11:14.040 Tai hetkinen otetaan vielä vielä pykälä taaksepäin. 164 00:11:14.040 --> 00:11:19.710 Joo. Elikkä se vihoviimeinen. 165 00:11:19.710 --> 00:11:22.050 No niin sori nyt mulla menee taas ajatukset. 166 00:11:22.050 --> 00:11:28.240 Varmaan tuosta porauksessa meni meni sekaisin eli luvut taulukon. 167 00:11:28.240 --> 00:11:31.360 Pituus. Saadaan. 168 00:11:31.360 --> 00:11:35.160 Pyytämällä. Luvut. 169 00:11:35.160 --> 00:11:36.960 Lent eli. 170 00:11:36.960 --> 00:11:39.040 Tämä antaa meille sen luvut taulukon pituuden. 171 00:11:39.040 --> 00:11:44.320 Olipa se sitten kuinka pitkä vaan OK no nyt tässä tapauksessa 172 00:11:44.320 --> 00:11:52.310 mulla on 12345678 kappaletta pitkä taulukko. 173 00:11:52.310 --> 00:11:57.020 Ja muutetaan tuo tuo nyt eri eri luvuksi, niin ei ole 174 00:11:57.020 --> 00:12:00.700 juuri se vihoviimeinen indeksi siinä. 175 00:12:00.700 --> 00:12:05.340 Eli se tarkoittaa silloin sitä niin, että tää vihoviimeinen alkio sijaitsee paikassa. 176 00:12:05.340 --> 00:12:07.940 7. 177 00:12:07.940 --> 00:12:15.460 Vihoviimeinen alkio sijaitsee paikassa eli indeksissä 7. 178 00:12:15.460 --> 00:12:19.320 Ja tähän päästään tietysti sanomalla luvut. Lent. 179 00:12:19.320 --> 00:12:23.300 -1 eikö vaan eli kun se luvut lenkit on 8 niin silloin 180 00:12:23.300 --> 00:12:25.720 se vihoviimeisen indeksin luku on. 181 00:12:25.720 --> 00:12:29.220 On 7 eli eli siitä pituudesta vähennetty ykkönen. 182 00:12:29.220 --> 00:12:34.100 No tää tarkoittaa silloin sitä, että me päästään käsiksi siihen luvut taulukon 183 00:12:34.100 --> 00:12:38.560 viimeiseen alkioon sanomalla luvut hakasuluissa luvut. 184 00:12:38.560 --> 00:12:40.660 Lenkit -1. 185 00:12:40.660 --> 00:12:44.520 Että saattaa näyttää hieman oudolta, mutta näin se näin se tapahtuu. 186 00:12:44.520 --> 00:12:48.630 Täällä on cesarpissa tullut tässä uudessa versiossa tämmöinen. 187 00:12:48.630 --> 00:12:54.870 Entä expression tapa tehdä tää sama asia, mutta ei katsota sitä nytten, mutta mä haluan nytten 188 00:12:54.870 --> 00:12:59.620 muuttaa sen vaikkapa arvon -1 että tehdään tää taas siellä debugerissä katsomalla rivi riviltä 189 00:12:59.620 --> 00:13:05.160 että miten tää tapahtuu eli siitä f vitosella peli käyntiin ja. 190 00:13:05.160 --> 00:13:09.540 Debugkeri auki eli nyt ollaan rivillä kolmekymmentäkahdeksan tai luvut taulukko on juuri 191 00:13:09.540 --> 00:13:15.360 sellainen niin kun mä äsken tein sen seiska paikassa olevan alkion arvo on vielä luku 9, 192 00:13:15.360 --> 00:13:21.250 mutta nytten step lintu ainakin että klikkaamalla niin se vihoviimeinen. 193 00:13:21.250 --> 00:13:23.200 Alkio sieltä muuttuu miinus ykköseksi. 194 00:13:23.200 --> 00:13:26.650 No niin hyvä elikkä päästiin käsiksi siihen, että mihin miten sitä viimeistä 195 00:13:26.650 --> 00:13:30.050 alkiota käsitellään ja se mitä mä nyt halusin tehdä. 196 00:13:30.050 --> 00:13:34.870 Tässä on vaihtaa sen ensimmäisen ja viimeisen paikat. 197 00:13:34.870 --> 00:13:39.120 Tota noin niin sisällöt keskenään eli otetaan sieltä. 198 00:13:39.120 --> 00:13:41.700 Vihoviimeistä. 199 00:13:41.700 --> 00:13:48.120 Alkio vihoviimeistä alkiosta sisältö ja viskataan se sinne aivan ekaan alkioon. 200 00:13:48.120 --> 00:13:55.010 Katsotaan mitä käy. Laitetaan siihen breakpoint. 201 00:13:55.010 --> 00:13:58.450 Ja nähdään niin, että siellä ekassa paikassa on vielä ykkönen. 202 00:13:58.450 --> 00:14:02.510 Viimeisessä paikassa on luku 9 ja nyt steppi lintu niin sinne ekaan 203 00:14:02.510 --> 00:14:06.330 tulee ysi, mutta viimeinen jää myöskin ysikasi. 204 00:14:06.330 --> 00:14:09.730 Eli nyt se ykkönen mikä siellä aivan ensimmäisessä paikassa oli niin 205 00:14:09.730 --> 00:14:12.870 tavallaan hävisi pois eikä sitä enää ole olemassa. 206 00:14:12.870 --> 00:14:17.310 Eli jos mä haluan vaihtaa näiden lukujen paikat keskenään niin mä en voi suoraan 207 00:14:17.310 --> 00:14:22.490 sitä näin tehdä vaan mun täytyy ensin ottaa talteen se. 208 00:14:22.490 --> 00:14:26.790 Mitä siellä aivan ekassa oli ikään kuin tämmöiseen tilapäiseen muuttujaan. 209 00:14:26.790 --> 00:14:29.490 Laitanpa vielä kertaalleen siitä toi peli käyntiin eli nyt 210 00:14:29.490 --> 00:14:33.190 mulla on siellä se aivan aivan ensimmäisen. 211 00:14:33.190 --> 00:14:38.970 Öö alkion arvo tallessa tämmöisessä tilapäisissä muuttujassa, 212 00:14:38.970 --> 00:14:44.090 jotta kun mä teen tämän rivin 40 noin stepintulla. 213 00:14:44.090 --> 00:14:47.110 Niin nyt tän seurauksena se. 214 00:14:47.110 --> 00:14:52.900 Ysi minkä takia nää kaikki meni keltaiseksi hetkinen. 215 00:14:52.900 --> 00:15:03.720 Outoa. Miksi nämä kaikki menivät keltaiseksi? 216 00:15:03.720 --> 00:15:09.060 No nyt en osaa siihen vastata, mutta joka tapauksessa niin nytten viho ensimmäisiä vihoviimeisen 217 00:15:09.060 --> 00:15:15.040 alkion sisällöt on ysi ja nyt tän jälkeen mä olisin valmis täältä talteen nimisestä muuttujasta 218 00:15:15.040 --> 00:15:19.930 pullaauttamaan sen ykkösen sinne vihoviimeisen. 219 00:15:19.930 --> 00:15:22.240 Taulukon paikkaan. 220 00:15:22.240 --> 00:15:29.260 Eli tällä tavalla tän alkioiden vaihtaminen, niin on hieman. 221 00:15:29.260 --> 00:15:31.880 Pidempi prosessi kun vaan yksi rivinen juttu. 222 00:15:31.880 --> 00:15:37.210 Mutta nyt mä voin sieltä talteen muuttujasta sen sinne pamauttaa. 223 00:15:37.210 --> 00:15:41.930 Otetaan tuohon nytten kun siellä sappi sitä nyt niin kovasti tuolla tuolla ehdottelee 224 00:15:41.930 --> 00:15:45.150 niin katsotaan miltä se näyttää eli sen voi tosissaan tehdä. 225 00:15:45.150 --> 00:15:49.610 Myöskin näin tässä uudessa CSR pissa tämä ei ole varsinaisesti semmoinen 226 00:15:49.610 --> 00:15:53.250 mitä tarvitsee mitenkään muistaa, mutta näköjään se tuolla tavalla 227 00:15:53.250 --> 00:16:01.430 uudessa cesar aika näppärästi onnistuu. 228 00:16:01.430 --> 00:16:04.560 Laitetaan se tuohon muistiin hyvä. 229 00:16:04.560 --> 00:16:09.220 Eli siinä on nytten yksi esimerkki siitä, että miten ensimmäistä alkiota käsitellään, 230 00:16:09.220 --> 00:16:14.190 miten vihoviimeistä alkiota käsitellään ja jos niitä taulukon sisältämiä arvoja 231 00:16:14.190 --> 00:16:18.890 halutaan keskenään muuttaa ja vaihtaa ja ja näin operoida niillä, niin sitten 232 00:16:18.890 --> 00:16:22.550 tarvitsee ottaa huomioon se, että se vanha arvo sieltä totta kai häviää ihan 233 00:16:22.550 --> 00:16:26.680 niinku mistä tahansa muuttujastakin. 234 00:16:26.680 --> 00:16:31.750 Seuraava esimerkki leikitään nyt, että me vielä käsitellään noita yllä 235 00:16:31.750 --> 00:16:35.540 tehtyjä lukuja ja halutaan tehdä tämmöinen funktio. 236 00:16:35.540 --> 00:16:38.700 Tai no oikeastaan aliohjelma, joka tulostaa asioita, 237 00:16:38.700 --> 00:16:42.270 mutta se tulostaa vain sellaiset arvot. 238 00:16:42.270 --> 00:16:46.270 Jotka ovat täsmälleen ykkönen eli tää mun funktion kutsuminen voisi 239 00:16:46.270 --> 00:16:49.850 tapahtua seuraavasti, annetaan sinne argumentteina. 240 00:16:49.850 --> 00:16:53.410 Ensinnäkin siis tulostaa jos voisi olla nyt tän funktion nimi. 241 00:16:53.410 --> 00:16:55.250 Laitan siihen vaikka tulosten jos yksin. 242 00:16:55.250 --> 00:16:58.790 Ehkä se on vielä parempi noin. 243 00:16:58.790 --> 00:17:05.150 Ja ja tän tehtävä olisi seuraava, elikkä tulostaa ne luvut jotka täsmää juurikin tähän 244 00:17:05.150 --> 00:17:09.240 jälkimmäiseen argumentin arvoon eli tämmöistä funktiota ei tietenkään ole vielä olemassa 245 00:17:09.240 --> 00:17:15.390 ja se pitää nyt tehdä, mutta ajatus nyt olisi se se, että että tota. 246 00:17:15.390 --> 00:17:20.110 Tästä taulukosta tulostetaan ne, jotka täsmää tähän jälkimmäiseen argumenttiin. 247 00:17:20.110 --> 00:17:24.560 Hyvä, lähdetään sitä funktiota toteuttamaan. 248 00:17:24.560 --> 00:17:27.310 Ja tosiaan vastaus tuohonzetti kysymykseen. 249 00:17:27.310 --> 00:17:32.260 Siis tämä hattu ykkönen tarkoittaa siis juurikin sitä sitä samaa 250 00:17:32.260 --> 00:17:34.160 kuin mitä tässä kirjoitin tälleen pitkästi. 251 00:17:34.160 --> 00:17:39.860 Eli se vihoviimeinen alkio sieltä luvut taulukosta niin voidaan voidaan niinku ilmaista lyhyesti 252 00:17:39.860 --> 00:17:44.520 tällä tavalla tässä uudessa sarvissa niinku sanoin niin tää on tämmöinen. 253 00:17:44.520 --> 00:17:47.820 Onkohan tää nimeltään are expression viralliselta nimeltään se 254 00:17:47.820 --> 00:17:49.910 hesarissa ja näitä ei tällä kurssilla käsitellä. 255 00:17:49.910 --> 00:17:54.640 Mutta kuten kuten viime luennolla sanoin, niin niin tähän cesar tupaa 256 00:17:54.640 --> 00:17:57.890 vuosittain tulemaan kaikkia uusia pikku ominaisuuksia. 257 00:17:57.890 --> 00:18:00.350 Niitä on tietysti mahdotonta tässä käydä läpi, mutta että 258 00:18:00.350 --> 00:18:05.540 tää on tää on yksi sellainen mitä mitä. Mä oon varmaan olisi. 259 00:18:05.540 --> 00:18:08.180 Olisi kiva ainakin itse käyttää omassa kodissa niin 260 00:18:08.180 --> 00:18:10.030 se on paljon lyhyempi kuin tämmöinen. 261 00:18:10.030 --> 00:18:15.170 Mutta mutta joo ei ole, ei tarvitse tuota hattu ykköstä sinänsä muistaa. 262 00:18:15.170 --> 00:18:19.110 Joo OK eli. 263 00:18:19.110 --> 00:18:23.030 Public static sillä lähdetään liikkeelle ja tän aliohjelman 264 00:18:23.030 --> 00:18:25.510 tarkoitus on nyt vain tulostaa asioita. 265 00:18:25.510 --> 00:18:28.710 Tän ei tarvitse nyt palauttaa mitään, jotenka mä laitan siihen 266 00:18:28.710 --> 00:18:31.680 paluuarvon tyypiksi tyhjän eli voidin. 267 00:18:31.680 --> 00:18:35.870 No nimi opastetaan tuohon paikalleen sitten sulut ja aaltosut 268 00:18:35.870 --> 00:18:38.820 niinku kaikkiin aliohjelmiin aina tulee. 269 00:18:38.820 --> 00:18:42.490 No nyt katsotaan näitä argumentteja vielä kerran eli tää luvut. 270 00:18:42.490 --> 00:18:47.050 Muuttujan nimi on täällä nyt asia, joka viittaa intti taulukkoon eli silloin tämän 271 00:18:47.050 --> 00:18:51.250 parametrin tyyppikin täytyy olla inttitaulukko ja ne on nyt jotain lukuja, joista mä 272 00:18:51.250 --> 00:18:55.940 haluan tulostaa osan, jotenka mä voin antaa sille nimeksi luvut. 273 00:18:55.940 --> 00:18:58.010 Ja. 274 00:18:58.010 --> 00:19:01.800 Seuraava argumentti täällä on ykkönen ja sen tehtävä 275 00:19:01.800 --> 00:19:08.250 tai tarkoitus on merkitä sitä asiaa. Aa joka. 276 00:19:08.250 --> 00:19:10.210 Itse asiassa nyt mä annoin tälleen huonon nimen. 277 00:19:10.210 --> 00:19:12.730 Joo anteeksi otetaan, se otetaan kohta takaisin. 278 00:19:12.730 --> 00:19:18.070 Elikkä tää jälkimmäinen argumentti tarkoittaa sitä. 279 00:19:18.070 --> 00:19:24.470 Joka me halutaan tulostaa eli se on joku arvo, jonka tässä mätessa me tulostetaan tästä luvuntaulusta 280 00:19:24.470 --> 00:19:29.470 arvo ja nythän siis tän funktion pointti olisi tulostaa mikä tahansa sellainen arvo, joka 281 00:19:29.470 --> 00:19:32.610 me täällä argumenttina annetaan myös jokin muu kuin ykkönen. 282 00:19:32.610 --> 00:19:35.000 Eli nyt mä menin itsekin tässä sekaisin eli nimenomaan 283 00:19:35.000 --> 00:19:38.300 se tulosta jos oli tässä hyvä nimi. 284 00:19:38.300 --> 00:19:42.060 Eli tulostetaan luvut taulukosta se arvo jos täsmää tuohon 285 00:19:42.060 --> 00:19:45.640 tuohon arvoon kaikki sellaiset arvot. 286 00:19:45.640 --> 00:19:49.120 Tietysti hyvin synteettinen esimerkki ja ja ja ehkä voi olla vaikea 287 00:19:49.120 --> 00:19:53.120 keksiä nyt juuri tällaiselle funktiolle todellista käyttötarkoitusta, 288 00:19:53.120 --> 00:19:56.810 mutta nyt tässä onkin onkin tarkoitus. 289 00:19:56.810 --> 00:20:00.420 Demonstroida sitä, että miten tämmöistä taulukkoa voidaan 290 00:20:00.420 --> 00:20:03.660 ikään kuin automaattisesti käsitellä. Hyvä. 291 00:20:03.660 --> 00:20:08.260 Elikkä nyt me ei vielä tiedetä sitä, että kuinka monta alkiota tässä on luvut taulukossa 292 00:20:08.260 --> 00:20:12.620 on siinä voi olla kuinka monta alkiota vaan eli me tarvitaan. 293 00:20:12.620 --> 00:20:19.030 Tarvitaan tietää ton taulukon taulukon. No niin elikkä. 294 00:20:19.030 --> 00:20:23.670 Kuten viime luennolla käytiin läpi taulukkoa täällä forsell 295 00:20:23.670 --> 00:20:27.590 mukana niin tehdään se nytten vastaavasti tällä. 296 00:20:27.590 --> 00:20:29.450 Tällä. 297 00:20:29.450 --> 00:20:32.480 Tässä esimerkissä ja oikeastaan ennen kuin edes kirjoittanut tuota forsell 298 00:20:32.480 --> 00:20:36.850 mukaa siihen, niin kirjoitan se idea mitä tässä ollaan tekemässä eli 299 00:20:36.850 --> 00:20:43.060 käydään läpi jokainen alkio taulukosta luvut. 300 00:20:43.060 --> 00:20:48.800 Jos alkio. Alkion arvo on täsmälleen. 301 00:20:48.800 --> 00:20:53.770 Arvo parametrin. Arvo. 302 00:20:53.770 --> 00:20:56.580 Tulostetaan se. Hyvä. 303 00:20:56.580 --> 00:20:58.900 Elikkä tuossa olisi nyt ihan sanallisesti kirjoitettuna se, 304 00:20:58.900 --> 00:21:02.510 että mitä tässä oikeastaan halutaan tehdä. 305 00:21:02.510 --> 00:21:05.750 Ja nyt voidaan sitten alkaa käymään tätä taulukkoa läpi 306 00:21:05.750 --> 00:21:08.050 ja tehdään se nyt tällä kertaa tosissaan. Tuolla forsell mukana. 307 00:21:08.050 --> 00:21:11.200 Tän voi tehdä ihan millä silmukka rakenteilla vaan, mutta mä 308 00:21:11.200 --> 00:21:14.330 teen sen nyt mallin vuoksi tällä foorumilla. 309 00:21:14.330 --> 00:21:17.100 Homma lähtee liikkeelle sieltä aivan alusta. 310 00:21:17.100 --> 00:21:19.850 Me halutaan tietysti joka ikinen alkio käydä läpi, joten tää 311 00:21:19.850 --> 00:21:25.360 meidän silmukka muuttujien arvo lähtee nolla. 312 00:21:25.360 --> 00:21:27.460 Toisto ehtona meillä toimii. 313 00:21:27.460 --> 00:21:29.500 I on pienempää kuin luvut pistelee. 314 00:21:29.500 --> 00:21:33.280 Tää tarkoittaa nyt käytännössä sitä, että me käydään koko taulukko 315 00:21:33.280 --> 00:21:38.650 läpi aina siihen asti kun sitä taulukkoa on ja. 316 00:21:38.650 --> 00:21:43.650 Silmukan päättymisen tai silmukan kierroksen päättämistätoimenpiteenä 317 00:21:43.650 --> 00:21:47.230 meillä on plus plus, mikä tarkoittaa sitä, että tätä muuttujan arvoa 318 00:21:47.230 --> 00:21:51.280 kasvatetaan näin joka kiekan kiekan jälkeen yksi. 319 00:21:51.280 --> 00:21:55.250 Hyvä eli tää on rakenne millä me saadaan käytännössä käytyä 320 00:21:55.250 --> 00:21:57.350 joka ikinen alkio siitä meidän taulukosta läpi. 321 00:21:57.350 --> 00:21:59.670 Muitakin tapoja on. 322 00:21:59.670 --> 00:22:05.320 Voidaan katsoa niitä kohta, mutta tää for silmukka nyt on ehkä kaikkein yleisin 323 00:22:05.320 --> 00:22:09.910 mitä mitä ohjelmoinnissa näkee, mutta niinku sanottu muitakin tapoja on olemassa, 324 00:22:09.910 --> 00:22:14.190 mutta nyt tuo toinen kohta tuosta mun kommentista eli jos alkion arvo on täsmälleen 325 00:22:14.190 --> 00:22:16.550 arvopäivämetrin mukainen niin tulostetaan se. 326 00:22:16.550 --> 00:22:19.930 No miten me ensinnäkin tarkistetaan että onko alkion 327 00:22:19.930 --> 00:22:22.630 arvo täsmälleen arvobarometrin arvo? 328 00:22:22.630 --> 00:22:26.210 No se voidaan katsoa seuraavasti. Jos. 329 00:22:26.210 --> 00:22:31.320 Siellä luvut taulukossa paikassa eli mihin se nuoli ikään kuin tällä hetkellä osoittaa 330 00:22:31.320 --> 00:22:36.040 sinne meidän taulukossa on täsmälleen tuo arvo, niin silloin tehdään jotakin. 331 00:22:36.040 --> 00:22:44.800 Laitetaan se mitä tehdään niin tänne aalto sulkeiden sisään. 332 00:22:44.800 --> 00:22:48.620 No kolmannellakin vielä tuossa mun kommentissa lukee että tulostetaan se. 333 00:22:48.620 --> 00:22:51.340 Eli tulostetaan luvut i. 334 00:22:51.340 --> 00:22:56.340 Vain siinä tilanteessa, että se matcha tuohon meidän parametri arvoon. 335 00:22:56.340 --> 00:23:00.360 Eli nyt me ollaan täysin agnotisia sille, että kuinka pitkä tää meidän luvut taulukko 336 00:23:00.360 --> 00:23:05.100 on, minkälaisia lukuja siellä on ja me ollaan myöskin agnotisia silleen, että mitä tuo 337 00:23:05.100 --> 00:23:08.250 arvo muuttuja sisältää jo siellä voi olla ykkönen, siellä voi olla kakkonen, siellä voi 338 00:23:08.250 --> 00:23:13.160 olla nolla, siellä voi olla miinus ykkönen mitä tahansa, mutta jos se arvo on täsmälleen 339 00:23:13.160 --> 00:23:17.240 sama kuin siellä, luvut paikassa oleva arvo, meidän tulostetaan se ja niinku nyt huomataan 340 00:23:17.240 --> 00:23:23.540 niin sieltä ei sitten tulostuu nyt vain niitä ykkösiä totta kai, mutta mutta joka tapauksessa 341 00:23:23.540 --> 00:23:26.930 niin siinä on meillä ehdollinen tulostus, meillä nyt sattuu olemaan vaan yks ykkönen siellä 342 00:23:26.930 --> 00:23:28.730 taulukossa. 343 00:23:28.730 --> 00:23:31.930 Jotenka me voidaan tietysti kokeilla laittaa sinne pari ykköstä lisääkin. 344 00:23:31.930 --> 00:23:34.470 Laitetaan vaikka. 345 00:23:34.470 --> 00:23:41.380 1 1 2 1 miinus 1 2 3 jotain tuollaista ihan sama, mutta nyt 346 00:23:41.380 --> 00:23:43.190 siellä on joka tapauksessa useampi ykkönen. 347 00:23:43.190 --> 00:23:45.870 Laitetaan siitä ohjelma käyntiin ja nyt me nähdään niin 348 00:23:45.870 --> 00:23:48.630 että sieltä 4 kappaletta ykkösiä tulostui. 349 00:23:48.630 --> 00:23:56.760 Katsotaan päteekö tämä 1 2 3 4 näyttää noita ykkösiä olevan. 350 00:23:56.760 --> 00:24:00.550 Ja nää vaihdettiin vitosia ykkösen paikkaa tuossa aikaisemmin se yks ykkönen meni tuonne viimeiseen 351 00:24:00.550 --> 00:24:07.160 alkuun, mutta joka tapauksessa oikea määrä niitä ykkösiä sieltä tuli. 352 00:24:07.160 --> 00:24:09.110 Nyt tää yksi suuruusvertailu. 353 00:24:09.110 --> 00:24:12.820 Tietysti meillä on tässä ja ja tuota tarkistaa nyt vain sen, 354 00:24:12.820 --> 00:24:16.060 että onko se täsmälleen tuo haluttu haluttu arvo. 355 00:24:16.060 --> 00:24:19.600 Meillä voisi tässä olla tietysti mikä tahansa totuusarvoinen lauseke 356 00:24:19.600 --> 00:24:24.260 pienempi kuin suurempi kuin suurempaa tai yksi suurta kuin tai jotain 357 00:24:24.260 --> 00:24:34.230 muuta vastaavaa, joka tuottaa true tai false arvon. 358 00:24:34.230 --> 00:24:38.530 Mutta tässä nyt esimerkkitilanteessa missä missä tulostetaan vain 359 00:24:38.530 --> 00:24:42.940 vain alkio, joka täsmää tuohon arvon muuttujaan. 360 00:24:42.940 --> 00:24:45.060 Hyvä. 361 00:24:45.060 --> 00:24:49.470 No lupasin tuossa niin että katsotaan muitakin silmukka rakenteita täällä. 362 00:24:49.470 --> 00:24:55.520 Nyt itse asiassa jo raideri ehdottelee niin, että for loop band converter for each club ja 363 00:24:55.520 --> 00:25:00.980 jotkut ovat sitä mieltä, että tällaisissa tilanteissa jossa me varmasti käydään kaikki alkiot 364 00:25:00.980 --> 00:25:05.200 läpi siitä taulukosta, niin tämmöinen for each loop olisi parempi. 365 00:25:05.200 --> 00:25:07.840 Katsotaan miltä se näyttää. 366 00:25:07.840 --> 00:25:12.500 Eli klikataan tuolta convert for each ja. 367 00:25:12.500 --> 00:25:17.730 Tilanne näyttää silloin täältä. Sen verran muutin tätä. 368 00:25:17.730 --> 00:25:25.350 Mä laitan tuohon intin eli sana for each alkaa aloittaa for rich rakenteen selkeen tulee 369 00:25:25.350 --> 00:25:29.990 sulut ja aalto solut niinku ihan missä tahansa silmukka rakenteessa, mutta tää sulkujen 370 00:25:29.990 --> 00:25:34.060 sisältämä asia täällä kaarisuljeiden sisällä on hieman erilainen kuin siinä äskeisessä 371 00:25:34.060 --> 00:25:40.050 for silmukan eli ei ole mitään plus plussaa ei ole mitään tai ylipäätään on vaan 372 00:25:40.050 --> 00:25:45.270 taulukon Nimi tai sen tietorakenteiden nimi jota me tässä ollaan läpi käymässä sitten 373 00:25:45.270 --> 00:25:47.820 tämmöinen mystinen instana ja tee. 374 00:25:47.820 --> 00:25:52.750 No tää voidaan lukea siten, että jokaiselle alkiolle tee. 375 00:25:52.750 --> 00:25:57.700 Luvut taulukossa tee seuraava asia eli tää on aika simppeli juttu siinä 376 00:25:57.700 --> 00:26:02.270 mielessä, että tää on asia mikä tehdään tehdään sitten kaikille niille alkioilla 377 00:26:02.270 --> 00:26:06.000 ja nyt tää on nimi joka me annetaan sille. 378 00:26:06.000 --> 00:26:08.740 Sille arvolle, joka meillä kullakin käsittely kerralla. 379 00:26:08.740 --> 00:26:12.760 Siinä vuorossa on tän teen nimi voisi olla tietysti mitä tahansa. 380 00:26:12.760 --> 00:26:15.840 Se voisi olla vaikkapa luku. 381 00:26:15.840 --> 00:26:19.850 Eli nyt mä nimesin sen tuossa uudestaan nimeksi luku, mutta silleen. 382 00:26:19.850 --> 00:26:26.080 Tää on vähän simppelimpi rakenne joka niinku sanottu on suositeltavaa tilanteissa 383 00:26:26.080 --> 00:26:30.600 jossa me käydään kaikki alkiot läpi eikä myöskään muuteta niitä alkioita 384 00:26:30.600 --> 00:26:33.860 on myöskin silmukan sisällä mahdollista muuttaa asioita, mutta tää forgen 385 00:26:33.860 --> 00:26:35.970 sisällä niitä muutoksia ei voida tehdä. 386 00:26:35.970 --> 00:26:39.800 Nythän meitä tässä tehdä mitään muutoksia, vaan me ainoastaan tutkitaan, että 387 00:26:39.800 --> 00:26:43.770 onko luku sama kuin arvo ja mahdollisesti tulostetaan se. 388 00:26:43.770 --> 00:26:47.130 Eli siinä mielessä erittäin hyvä vaihtoehto. 389 00:26:47.130 --> 00:26:55.870 On tämä for its tähän tapaukseen ja tätäpä se sen takia nyt tuohon noin. 390 00:26:55.870 --> 00:26:57.980 Hyvä. Eli tehtiin. 391 00:26:57.980 --> 00:27:03.390 Tuo tuntuu siitä loppuun. Ota siitä tutun pois. 392 00:27:03.390 --> 00:27:06.780 Ja ja. Aa. 393 00:27:06.780 --> 00:27:10.780 Mennään seuraavaan esimerkkiin eli negatiivisten summa käsitellään 394 00:27:10.780 --> 00:27:13.720 jälleen tuota meidän luvut taulukkoa. 395 00:27:13.720 --> 00:27:16.180 Siellä nyt ei kovin monta ole negatiivista lukua. 396 00:27:16.180 --> 00:27:19.620 No ehkä me tehdään uusi, tehdään uusi. Tehdään. 397 00:27:19.620 --> 00:27:25.840 Tällä kertaa tehdään tällä kertaa doble. Ja laitetaan sinne. 398 00:27:25.840 --> 00:27:28.860 Muutama negatiivinen luku. 399 00:27:28.860 --> 00:27:37.380 Semmoiset että mä osaan niitä jopa laskee. 400 00:27:37.380 --> 00:27:40.350 3 puoli no niin laita laitetaan vaikka noin elikkä siinä. 401 00:27:40.350 --> 00:27:43.990 Meillä on muutama luku ja nyt jos tästä äkkiseltään silmällä katsotaan 402 00:27:43.990 --> 00:27:49.500 niin negatiivisten summa näyttäisi olevan. -6 ja puoli. 403 00:27:49.500 --> 00:27:54.260 Eli tehtävänä olisi laskea negatiivisten lukujen summa määritellään siihen meille 404 00:27:54.260 --> 00:28:00.150 apuun muuttuja summa ja funktio, jolle annetaan nimi summa. 405 00:28:00.150 --> 00:28:04.630 Itse asiassa negatiivisten summa. 406 00:28:04.630 --> 00:28:09.010 Ja luvut kakkonen menee sinne argumenttina eli tällaista funktiota 407 00:28:09.010 --> 00:28:16.550 nyt lähdetään lähdetään tässä toteuttamaan. Ja ja ja. 408 00:28:16.550 --> 00:28:20.110 Meillä on periaatteessa tässä nytten ja ja onkin tiedot, jonka perusteella 409 00:28:20.110 --> 00:28:24.970 me pystytään tämmöisen funktion esittelyni nyt kirjoittamaan. Siinä on nimi. 410 00:28:24.970 --> 00:28:27.650 Meillä on siinä argumentti, jonka tyyppi me tiedetään. 411 00:28:27.650 --> 00:28:31.990 Meillä on täällä paluu arvolle valmis tieto eli se pitää olla 412 00:28:31.990 --> 00:28:35.030 double luku niinku tietysti loogista onkin että. 413 00:28:35.030 --> 00:28:38.690 Lukujen desimaalilukujen summa niin niin se täytyy olla 414 00:28:38.690 --> 00:28:42.070 desimaaliluku hyvä eli public static. 415 00:28:42.070 --> 00:28:49.080 Paluuarvon tyyppisissä double, koska se täytyy olla desimaaliluku ja sitten parametri katsotaan 416 00:28:49.080 --> 00:28:54.500 argumenttia eli meillä on täällä luvut kakkonen joka on desimaalilukujen desimaalilukuista koostuva 417 00:28:54.500 --> 00:28:58.870 taulukko eli double häkää häkä ja sitten annetaan sille nimi. 418 00:28:58.870 --> 00:29:01.840 Se voisi nyt olla vaikka luvut ja jälleen kerran alleviivaan 419 00:29:01.840 --> 00:29:06.990 sitä että tää voi olla luvut tää voi olla. 420 00:29:06.990 --> 00:29:11.480 Vaikka mikä tahansa muu nimi, mutta se voi olla sama Nimi tai eri 421 00:29:11.480 --> 00:29:14.320 nimi kuin mitä tuolla pääohjelmassa on määritelty. 422 00:29:14.320 --> 00:29:19.220 Tämä maalattu alue tässä eli tämmöinen aliohjelma, niin se on oma hiekkalaatikko 423 00:29:19.220 --> 00:29:25.530 niin sanottu oma näkyvyysalue ohjelmointi termejä käyttäen, joka ei. 424 00:29:25.530 --> 00:29:28.490 Mitenkään ole konfliktissa tämän. 425 00:29:28.490 --> 00:29:31.970 Pääohjelmassa määritellyn näkyvyysalueen kanssa näiden 426 00:29:31.970 --> 00:29:35.180 muuttujien nimet saa olla samoja. 427 00:29:35.180 --> 00:29:38.640 Hyvä, mutta nyt lähdetään laskemaan sitä sitä varsinaista summaa 428 00:29:38.640 --> 00:29:45.150 ja ja ja tota mä palautan sieltä nytten ihan aluksi. 429 00:29:45.150 --> 00:29:47.350 Nolla, jota saadaan tää kääntymään. 430 00:29:47.350 --> 00:29:50.250 Eli nyt meillä on siinä kääntyvä ohjelma. 431 00:29:50.250 --> 00:29:54.950 No mitä me tarvitaan, jotta me voidaan negatiivisten lukujen summa ylipäätään laskea, 432 00:29:54.950 --> 00:29:59.970 niin ehkä itse ajattelen niin, että voisi olla järkevää alustaa joku pieni apumuutta, 433 00:29:59.970 --> 00:30:05.250 johon me sitä summaa lähdetään sitten sitten hiljalleen laskemaan ja tän summan 434 00:30:05.250 --> 00:30:10.290 sisältämä arvohan on se millä me loppujen lopuksi tästä nytten palautetaan sitten 435 00:30:10.290 --> 00:30:12.310 tuloksena ulos sinne pyytäjälle. 436 00:30:12.310 --> 00:30:16.380 Hyvä elikkä siihen lähdetään sitä summaa nyt hahmottelemaan. 437 00:30:16.380 --> 00:30:20.180 Ja voitaisiin nyt sitten ihan esimerkin vuoksi käyttää jälleen kerran sitä 438 00:30:20.180 --> 00:30:23.980 for each silmukkaa, mitä tuossa aikaisemminkin käytettiin. 439 00:30:23.980 --> 00:30:27.190 Ja kuten mainitsin joni for its silmukka on hyvä tilanteisiin, 440 00:30:27.190 --> 00:30:29.960 jossa me varmasti käydään joka ikinen alkio läpi. 441 00:30:29.960 --> 00:30:33.230 Käydäänkö me tämmöisessä tilanteessa, että me halutaan negatiivisten 442 00:30:33.230 --> 00:30:37.340 summa laskea niin joka ikinen alkio läpi kyllä käydään eli joka ikisen 443 00:30:37.340 --> 00:30:41.130 alkion kohdalla me meidän tarkoitus on tutkia. 444 00:30:41.130 --> 00:30:47.150 Onko alkion arvo negatiivinen? Jos on. 445 00:30:47.150 --> 00:30:50.600 Lisää arvo summaan. Eikö vaan? 446 00:30:50.600 --> 00:30:54.990 Eli nää 2 asiaa tarvitsee täällä for each taulu for its mukaan 447 00:30:54.990 --> 00:30:58.560 sisällä tehdään eli jokaikinen kyllä käydään läpi. 448 00:30:58.560 --> 00:31:01.250 No mitä tänne for it sulkujen sisälle nyt tuli tänne kari 449 00:31:01.250 --> 00:31:04.410 sulkeiden sisälle niin sinnehän tuli nytten. 450 00:31:04.410 --> 00:31:07.390 2 asiaa eli sinne tulee. 451 00:31:07.390 --> 00:31:12.410 Käsiteltävän alkion tyyppi ja nimi ja sitten se sanaa in. 452 00:31:12.410 --> 00:31:16.270 Ja tietorakenne, jota käydään läpi. Eli vielä kertaalleen. 453 00:31:16.270 --> 00:31:19.100 Tää luvut on siis se tietorakenne mitä me halutaan käydä läpi. 454 00:31:19.100 --> 00:31:25.020 Sitten tuo imf sana ja sitten se alki on tyyppi ja ja sille nimi. 455 00:31:25.020 --> 00:31:29.550 Eli tää luku nyt viittaa aina siihen vuorollaan käsiteltävään alkioon. 456 00:31:29.550 --> 00:31:32.130 Eli tää on siinä mielessä nyt erilainen verrattuna for silmukkaan, 457 00:31:32.130 --> 00:31:35.530 jota aikaisemmin tehtiin, että me ei nyt tarvita sitä nuolta sitä 458 00:31:35.530 --> 00:31:37.870 nuolta, joka osoittaa aina sinne lokeroon. 459 00:31:37.870 --> 00:31:42.230 Vaan tää luku on vähän niinku se lokero aina kukin vuorollaan 460 00:31:42.230 --> 00:31:46.340 ja siinä mielessä viittaus on on. 461 00:31:46.340 --> 00:31:51.160 Ei ei siinä mielessä epäsuoraa kuin mitä forss silmukan tapauksessa oli. 462 00:31:51.160 --> 00:31:54.680 Hyvä, mutta nyt mennään toteuttamaan tämä itse silmukan runko 463 00:31:54.680 --> 00:31:57.000 osa tutkitaan, onko alkion arvo negatiivinen. 464 00:31:57.000 --> 00:32:02.140 Me osataan tehdä ifflause, joka kysyy, että onko luku negatiivinen 465 00:32:02.140 --> 00:32:04.300 eli onko luku pienempää kuin nolla hyvä. 466 00:32:04.300 --> 00:32:08.720 No sitten se toinen kohta eli jos jos luku on negatiivinen, toisin sanoen 467 00:32:08.720 --> 00:32:13.720 tuo luku on pienempää kuin nolla on arvossa tosi niin silloin lisätään 468 00:32:13.720 --> 00:32:16.340 arvo osumaan miten lisätään arvo osumaan. 469 00:32:16.340 --> 00:32:18.560 No nyt meillä on se summa muuttuja johon me halutaan 470 00:32:18.560 --> 00:32:21.780 lisätä asioita eli muutetaan summa. 471 00:32:21.780 --> 00:32:25.330 Muuttujan sisältämää arvoa esimerkiksi näin plus on, 472 00:32:25.330 --> 00:32:28.530 jolloin me lisätään siihen jotakin. No mitä me lisätään? 473 00:32:28.530 --> 00:32:30.850 No me lisätään nyt sitten luku, eli meillä on se luku 474 00:32:30.850 --> 00:32:34.610 muuttujan sisältämä arvo tuossa käpälässä. 475 00:32:34.610 --> 00:32:42.020 Ja ja ja me voidaan, voidaan se luku siihen sitten lisätä. 476 00:32:42.020 --> 00:32:43.820 Hyvä. 477 00:32:43.820 --> 00:32:46.780 No nyt meillä on summamuuttuja palautus tuolla jo jo valmiina eli periaatteessa tää homman 478 00:32:46.780 --> 00:32:50.830 pitäisi olla valmiina tässä ja katsotaan että saadaanko sieltä se summa. 479 00:32:50.830 --> 00:32:54.360 Pääohjelmassa tulostettua ja huomaat nyt niin, että me täällä täällä 480 00:32:54.360 --> 00:32:56.370 funktiossa itsessä tulosteta yhtään mitään. 481 00:32:56.370 --> 00:33:01.270 Me vaan lasketaan sen negatiivisten summa ja palautetaan se arvo sinne joka siitä pyysi tai 482 00:33:01.270 --> 00:33:05.690 siellä ei tulosteta yhtään mitään ja se on hyvin tyypillinen tapa toimia, että tommoisessa 483 00:33:05.690 --> 00:33:09.430 funktiossa ei tulosteta mitään vaan se pääohjelma tai käyttöliittymä. 484 00:33:09.430 --> 00:33:13.370 Siellä tulostaa sen -6. Vitosen. 485 00:33:13.370 --> 00:33:19.110 No ihan jotta nyt tulisi tulisi niin kun tämä tota näitten silmukka 486 00:33:19.110 --> 00:33:22.160 rakenteiden vähän niinku tää erilaisuus esille. 487 00:33:22.160 --> 00:33:25.070 Niillä voi siis tehdä monesti hyvin samoja asioita, mutta 488 00:33:25.070 --> 00:33:27.090 mutta kuitenkin ne ovat vähän erinäköisiä. 489 00:33:27.090 --> 00:33:30.790 Niin mä nyt teen negatiivisten summa kakkosen, jossa mä toteutan 490 00:33:30.790 --> 00:33:33.050 tän silmukan käyttäjän for silmukkaa. 491 00:33:33.050 --> 00:33:38.210 Mä teen sen nyt ajan voittamiseksi ihan nopeasti, tähän vaan kirjoitan eli. 492 00:33:38.210 --> 00:33:43.890 Forssell mukaisessa tarvitaan tää indeksi muuttuja toistoehto. 493 00:33:43.890 --> 00:33:48.410 Ja silmukan kierroksen päätteeksi tehtävät toimenpiteet eli tässä nyt luodaan 494 00:33:48.410 --> 00:33:51.830 se pikku nuoli joka käy sitten läpi sitä taulukkoa. 495 00:33:51.830 --> 00:33:55.190 No sen sijaan, että me voitaisiin kysyä suoraan, että onko luku pienempää kuin nolla, 496 00:33:55.190 --> 00:33:59.490 niin nyt meidän pitää viitata siihen taulukon inenteen alkioon. 497 00:33:59.490 --> 00:34:05.250 Eli epäsuorasti käydä pyytämässä sieltä taulukosta se yksi alkio kerrallaan. 498 00:34:05.250 --> 00:34:11.930 No jos taulukon tai luvut taulukon iines alkio on negatiivinen, niin silloin 499 00:34:11.930 --> 00:34:15.190 me lisätään se siihen summamuuttuja eli otetaan sieltä luvut. 500 00:34:15.190 --> 00:34:19.160 Joulukuusta on jälleen kerran se ihmisalkioita, mitä se sitten sisältääkin. 501 00:34:19.160 --> 00:34:23.450 Se laatikko niin se pumpataan lisäksi tuonne summaan. 502 00:34:23.450 --> 00:34:27.850 Ja nyt meillä on negatiivisten summa kakkonen tässä ja mä testaan 503 00:34:27.850 --> 00:34:32.990 että antaako se saman summan sieltä kun mitä toi äsken tehty negatiivisten 504 00:34:32.990 --> 00:34:35.170 summa ykkönen ja kyllähän sieltä -6. 505 00:34:35.170 --> 00:34:40.510 5 tulee ihan samaan tapaan jotenka nää ovat sinänsä täysin ekvivalentti, siis 506 00:34:40.510 --> 00:34:46.310 ihan samoja saman asian tekeviä funktioita, mutta hieman eri silmukkarakenne 507 00:34:46.310 --> 00:34:50.910 vaan tässä kysymyksessä ja on tosiaan tilanteesta riippuvainen, että kumpi näistä 508 00:34:50.910 --> 00:34:54.410 on nyt jotenkin parempi tai oikeampi for eds. 509 00:34:54.410 --> 00:34:57.780 Vaiko fore ja mitäs tuolla muuten ehdotusta tulee? 510 00:34:57.780 --> 00:35:04.400 Loop converterttu link you expression OK täällä on taas nyt näitä. 511 00:35:04.400 --> 00:35:09.890 Joo elikkä siinä nyt on yksi rivillä sitten tehty koko homma. 512 00:35:09.890 --> 00:35:11.990 Me emme nyt tällä kurssilla. 513 00:35:11.990 --> 00:35:14.070 Opettelen näitä linkku expressioneita niin jotenkin 514 00:35:14.070 --> 00:35:16.530 ihania kun ne välillä voisivatkin olla. 515 00:35:16.530 --> 00:35:21.540 Mutta että silleen tämä tämä tapa tehdä tää asia on. 516 00:35:21.540 --> 00:35:23.840 Lähestulkoon univers. 517 00:35:23.840 --> 00:35:26.470 Tää oli missä tahansa ohjelmointikielessä ja sen takia 518 00:35:26.470 --> 00:35:30.980 nyt nyt tuota kuitenkin käytetään. Tässä näitä silmukoita. 519 00:35:30.980 --> 00:35:35.200 Jos sulla on aikaa ja haluat opetella noita linkkejä expressioneita käyttämään niin 520 00:35:35.200 --> 00:35:39.220 kyllä ne ovat tosi käteviä ja voivat monessa kohtaa tehdä koodista hyvin kompakteja 521 00:35:39.220 --> 00:35:44.450 ja siistiä, mutta käytetään nyt kuitenkin tässä näitä silmukoita. 522 00:35:44.450 --> 00:35:47.730 Ja sivuhuomiona on nyt tässä siis vaan se niin, että kyllä 523 00:35:47.730 --> 00:35:51.050 ohjelmoinnissa on tosi tosi monesti. 524 00:35:51.050 --> 00:35:54.940 Monta erilaista tapaa olevia jotenkin yksi ainoata oikeata ja ja 525 00:35:54.940 --> 00:35:59.490 parasta tai hienointa tai siisteintä tai cooleilta. 526 00:35:59.490 --> 00:36:05.050 Eri ohjelmoida tykkää tehdä asioita eri tavoilla ja ja mä nyt näytän tässä 2 eri tapaa. 527 00:36:05.050 --> 00:36:09.630 Kolmas olisi se linkki expression ja varmaan vielä muitakin olisi. 528 00:36:09.630 --> 00:36:13.790 Eli eli tota siihen kannattaa sillä tavalla asennoitua tähän ohjelmointiin, 529 00:36:13.790 --> 00:36:18.710 että on tosi monta eri tapaa tehdä eikä oikein helposti kukaan pysty sanomaan 530 00:36:18.710 --> 00:36:20.670 että mikä niistä on jotenkin oikea tai paras. 531 00:36:20.670 --> 00:36:23.900 Tehdään vielä yksi esimerkki kuitenkin tähän ennen kuin siirrytään 532 00:36:23.900 --> 00:36:28.150 seuraavaan asiaan, eli otetaan vielä yksi taulukko. 533 00:36:28.150 --> 00:36:32.870 Ja lasketaan niiden merkkijonojen määrä, josta löytyy kirjaina eli tehdään tehdään 534 00:36:32.870 --> 00:36:37.200 merkkijonot taulukko joka sisältää taas nyt sitten vaikkapa nimiä. 535 00:36:37.200 --> 00:36:42.240 Ja laitetaan sinne. Antti jussi ja. 536 00:36:42.240 --> 00:36:45.920 Jonne. Vesa. 537 00:36:45.920 --> 00:36:51.660 Tuomo eli tuommoiset nimet ja nyt tarkoitus olisi siis laskea niiden merkkijonojen 538 00:36:51.660 --> 00:36:56.740 määrä, josta löytyy kirjain AN me nähdään niin, että tuossa ekassa on ja kolmannessa 539 00:36:56.740 --> 00:37:01.260 merkkijonossa on myöskin nää eli tästä vastaus pitäisi olla 2. 540 00:37:01.260 --> 00:37:06.790 Jos me tehdään nyt toinen jo valmiiksi tuohon nimet kakkonen. 541 00:37:06.790 --> 00:37:09.580 Ja laitetaankin sinne vain. 542 00:37:09.580 --> 00:37:15.690 Jonne ja tuomo niin siinähän yhtään kirjainta ei ole. 543 00:37:15.690 --> 00:37:19.320 OK lähdetään hahmottelemaan tuommoista funktiota. 544 00:37:19.320 --> 00:37:23.770 Mä laitan tuosta nyt noita äsken tehtyjä funktioita hieman pienemmäksi. 545 00:37:23.770 --> 00:37:27.870 Niin me saadaan tähän tilaan eli eli tota mä tein jo valmiiksi 546 00:37:27.870 --> 00:37:32.010 tähän tätä funktion esittelyn ajan voittamiseksi. 547 00:37:32.010 --> 00:37:37.570 Eli löytyykö kirjain voisi olla hyvä nimi tälle funktiolle ja mulla on siellä 548 00:37:37.570 --> 00:37:41.750 nyt sitten parametrina toi merkkijono taulukko jo valmiina paluuarvon me 549 00:37:41.750 --> 00:37:46.330 odotamme sieltä nyt tosissaan kokonaislukua, koska haluamme sieltä tietää, 550 00:37:46.330 --> 00:37:50.800 että kuinka monesta se kirjain löytyi. 551 00:37:50.800 --> 00:37:54.940 Ja nyt mulla on tossa muutama konteksti on valmiiksi kirjoitettuna eli tuossa jonot 552 00:37:54.940 --> 00:37:59.360 ykkösestä pitäisi paluu arvona saada luku kakkonen ja jonot kakkosesta. 553 00:37:59.360 --> 00:38:02.560 Sitten paluu arvona luku nolla. 554 00:38:02.560 --> 00:38:06.180 No jos meillä on ihan tyhjä taulukko niin tietysti sieltäkin pitäisi joku 555 00:38:06.180 --> 00:38:10.170 arvo saada ja tässä tapauksessa tietysti nolla on on luonteva niin mä kopioin 556 00:38:10.170 --> 00:38:14.730 nyt nämä testit nämä com testitestit tuohon. 557 00:38:14.730 --> 00:38:18.990 Dokumentaatioalueelle niin on nekin sitten valmiina siinä. 558 00:38:18.990 --> 00:38:23.970 Tuon regionin voi nyt sieltä ottaa pois. Ja. 559 00:38:23.970 --> 00:38:27.500 Ota sieltä nytten tota noin niin. 560 00:38:27.500 --> 00:38:30.120 Vähän tota dokumentaatiota nyt ehkä nokkelimmat. 561 00:38:30.120 --> 00:38:34.220 Tässä huomaa niin, että että nythän. 562 00:38:34.220 --> 00:38:38.490 Onko tää ehkä vähän jopa huono nimi tälle funktiolle, kun nytten tämä 563 00:38:38.490 --> 00:38:42.260 funktion nimi antaa ehkä vinkkiä sillä tavalla, että me voitaisiin etsiä 564 00:38:42.260 --> 00:38:45.700 ikään kuin mitä tahansa kirjain ja tästä meidän. 565 00:38:45.700 --> 00:38:49.870 Taulukosta tai minkä tahansa kirjaimen sisältäviä. 566 00:38:49.870 --> 00:38:54.890 Merkkijonoja niin siinä mielessä ehkä voisi olla luontevampaa, että tämän funktion nimi 567 00:38:54.890 --> 00:39:01.190 olisikin, että löytyykö kirjain ja sitten voitaisiin ikään kuin yleistää tätä funktiota 568 00:39:01.190 --> 00:39:05.230 myöhemmin siten, että me voitaisiin etsiä mitä tahansa kirjaimia, mutta tehdään nyt 569 00:39:05.230 --> 00:39:08.510 yksinkertaisuuden vuoksi tästä vain sellainen, että. 570 00:39:08.510 --> 00:39:15.220 Käydään läpi jokainen merkkijono. Jos. 571 00:39:15.220 --> 00:39:18.590 Jono sisältää kirjaimena. 572 00:39:18.590 --> 00:39:23.430 Niin lisätään laskuria yksi eli me tarvitaan jonkinlainen laskuri jolla me kasvatetaan 573 00:39:23.430 --> 00:39:27.730 ja sitten se laskurin arvo pitää tästä aikanaan palauttaa ulos. 574 00:39:27.730 --> 00:39:33.770 No niin siellä vähän taas toi parista meinaa peittää oleellista. 575 00:39:33.770 --> 00:39:39.730 OK elikkä elikkä elikkä joku laskuri tarvitaan. 576 00:39:39.730 --> 00:39:42.530 Joka lähtee arvosta nolla. 577 00:39:42.530 --> 00:39:45.430 Ja sen sisältämä arvo tästä sitten palautetaan. 578 00:39:45.430 --> 00:39:47.770 Eli nyt meillä on tässä koko ajan kääntyvää koodia 579 00:39:47.770 --> 00:39:50.600 ja ja tuota lähdetään käymään nyt läpi. 580 00:39:50.600 --> 00:39:54.550 Jokainen merkkijono itsessään niinku tehdään sitä niin ehkä me voitaisiin 581 00:39:54.550 --> 00:39:59.250 tehdä kuten TD tyyliin kuuluu että generoimaan nuo testit ja. 582 00:39:59.250 --> 00:40:06.600 Ja ja ja katsotaan että se testaus ympäristö siellä taustalla kuitenkin toimii. 583 00:40:06.600 --> 00:40:10.300 Ja sieltä tietysti pitäisi tulla nytten faileja niin kun niin kun tuleekin. 584 00:40:10.300 --> 00:40:14.480 Eli eli tuota homma OK tähän asti nyt lähdetään sitten toteuttamaan tämän eli 585 00:40:14.480 --> 00:40:18.780 käydään läpi jokainen merkkijono ja ehkä me nyt tehdään se sillä for each silmukalla 586 00:40:18.780 --> 00:40:23.840 taas, koska meillä varmasti on tässä tavoite käydä ihan ihan kaikki jonot läpi 587 00:40:23.840 --> 00:40:27.020 eli halutaan jonot taulukkoa siinä käydä läpi. 588 00:40:27.020 --> 00:40:32.960 No mitä tää vaan variable nyt pitäisi sisältää niin se pitäisi sisältää nytten sen yksittäisen 589 00:40:32.960 --> 00:40:36.900 alkion tyypin ja sille alkiolle annettu meidän mielivaltaisesti. 590 00:40:36.900 --> 00:40:38.930 Keksimä nimi ja hyvä nimi. 591 00:40:38.930 --> 00:40:43.500 Nyt tässä voisi olla vaikkapa jono. Hyvä. 592 00:40:43.500 --> 00:40:45.670 Elikkä nyt seuraava osa tästä kommentista. 593 00:40:45.670 --> 00:40:48.390 Jos jono sisältää kirjaimena, niin lisätään laskuria. 594 00:40:48.390 --> 00:40:53.950 Yksi hyvä tota on melkein ikään kuin englanniksi voidaan tuosta niinku lukea toi lause 595 00:40:53.950 --> 00:40:59.730 niin melkein jo suoraan se koodi itsessään eli jos jono sisältää. 596 00:40:59.730 --> 00:41:04.060 Kirjaimena eli if jono. Contains tämmöinen. 597 00:41:04.060 --> 00:41:06.470 Aika kiva pikku metodi löytyy. 598 00:41:06.470 --> 00:41:08.900 Löytyy tommoiselta string olioita kuin contains ja 599 00:41:08.900 --> 00:41:12.050 me voidaan kysyä että että sisältääkö. 600 00:41:12.050 --> 00:41:14.450 Sisältääkö se sitä annettua merkkiä? 601 00:41:14.450 --> 00:41:17.980 Eli jos me katsotaan tuon contains metodin dokumentaatiota. 602 00:41:17.980 --> 00:41:22.470 No tässä on useampikin versio useampi ylikuormitus tästä dokumentaatio anteeksi 603 00:41:22.470 --> 00:41:26.050 metodista, mutta katsotaan nyt tätä ensimmäistä eli records of you indicate the 604 00:41:26.050 --> 00:41:32.450 specific access with string ja nythän tosissaan niin niitä voi olla siellä useita, 605 00:41:32.450 --> 00:41:38.210 mutta mikäli se yhdenkin sisältää, niin tämä contents palauttaa silloin tru arvon 606 00:41:38.210 --> 00:41:42.590 ja kun tää contents palauttaa tru arvon. 607 00:41:42.590 --> 00:41:47.390 Niin silloin siinä tilanteessa lisätään laskuria yksi eli täällä if 608 00:41:47.390 --> 00:41:53.130 lauseen runko osassa muutetaan laskuria yksi ylöspäin. 609 00:41:53.130 --> 00:41:54.930 Ollaanko tyytyväisiä? 610 00:41:54.930 --> 00:42:00.320 No, ehkä me voitaisiin nyt ajaa testit ja katsoa, että menee meneekö testit läpi. 611 00:42:00.320 --> 00:42:04.030 No sieltä nyt kuitenkin tuli filia, eli me odotettiin siitä ensimmäisestä 612 00:42:04.030 --> 00:42:07.200 testistä kakkosta, mutta saatiin todellisuudessa ykkönen. 613 00:42:07.200 --> 00:42:11.220 Ja jos me katsotaan mikä se meidän eka testi oli, niin siellähän oli antti 614 00:42:11.220 --> 00:42:15.340 jussissa iso ja vessassa löytyy pikku eli nyt selkeästi. 615 00:42:15.340 --> 00:42:19.520 Se iso ja pieni kirjain. Ei tässä ihan täysin. 616 00:42:19.520 --> 00:42:24.110 Täysin nyt toimi eli tota me meidän tarvitsee pohtia se tilanne, 617 00:42:24.110 --> 00:42:29.070 että onko kyseessä joko joko pikku tai. 618 00:42:29.070 --> 00:42:32.890 Iso eli tehdään nyt tästä tällainen yhdistetty ehto, 619 00:42:32.890 --> 00:42:37.370 missä kumpi tahansa voi olla totta. Eli joko tän. 620 00:42:37.370 --> 00:42:42.390 Ihme kaksois stolpemerkinnän vasen puoli voi olla totta tai 621 00:42:42.390 --> 00:42:45.290 oikea puoli voi olla totta mikäli kumpi tahansa. 622 00:42:45.290 --> 00:42:52.040 Näistä pätee niin silloin tää if ehto on totta ja me suoritetaan tää runko osa. 623 00:42:52.040 --> 00:42:56.460 Eli tää on niin kutsuttu looginen tai operaattori, joka takaa meille sen, 624 00:42:56.460 --> 00:43:01.080 että jos kumpi tahansa näistä puolista on tosi arvossa, niin silloin ikään 625 00:43:01.080 --> 00:43:06.540 kuin koko tää Hokki hossakka on on on silloin totta. 626 00:43:06.540 --> 00:43:18.000 Näitä loogisia. Loogisia. 627 00:43:18.000 --> 00:43:23.400 Naapuri ei nyt tykännyt tästä loogisesta tai sitä selkeästi ollenkaan, mutta mutta joka tapauksessa 628 00:43:23.400 --> 00:43:29.760 niin näitä on lueteltu siellä monisteessa näitä on muutamia erilaisia, mutta tää tai operaattori 629 00:43:29.760 --> 00:43:34.800 ja sitten toinen tärkeä on ja mikä on vähän niinku vastakohta tulee äskeiselle eli molempien 630 00:43:34.800 --> 00:43:40.630 täytyy olla totta niin ne on niitä mitä tavallisimmin vastaan ohjelmoinnissa tulee, mutta mennään 631 00:43:40.630 --> 00:43:44.850 nyt tällä taidolla eli eli eli siinä. 632 00:43:44.850 --> 00:43:50.490 Pikku tai iso hyväksytään ja mikäs nyt tuli virheenä sieltä katsotaan. 633 00:43:50.490 --> 00:43:57.760 OK. Hetkinen hetkinen. 634 00:43:57.760 --> 00:44:00.520 Tuliko mulla kuitenkin ajatusvirheeli rivi? 635 00:44:00.520 --> 00:44:08.860 Numerossa satakuusitoista. Joo. 636 00:44:08.860 --> 00:44:11.710 Jonot 2 piti olla tuossa tietysti. 637 00:44:11.710 --> 00:44:17.400 Tuossa kutsussa arvona ja tuolla jonot 3 no niin mulla oli näköjään testialueella virhe elikkä 638 00:44:17.400 --> 00:44:21.960 tässä tässä nyt vaikka mun testi feilas niin tulikin hyvä esimerkki siitä, että virhe ei ollut 639 00:44:21.960 --> 00:44:26.090 täällä mun oikeassa täällä koodissa vaan virhe olikin täällä testeissä. 640 00:44:26.090 --> 00:44:30.890 Eli kun tehdään testausta niin tietysti se virhe voi olla jommassa kummassa 641 00:44:30.890 --> 00:44:34.990 joko testikodissa taikka sitten siellä varsinaisessa ohjelmakodissa ja 642 00:44:34.990 --> 00:44:36.870 nyt tällä kertaa se oli siellä testeissä. 643 00:44:36.870 --> 00:44:42.620 No niin hyvä mutta nyt saadaan sieltä suksia ja homma menee menee läpi. 644 00:44:42.620 --> 00:44:47.680 No tästä tietysti sitten seuraava pykälä olisi niin että että tota me emme kiinteästi 645 00:44:47.680 --> 00:44:53.100 kirjoittaa sitä ennen tätä kirjoitusmerkkiä vaan voisimme antaa sen parametrin 646 00:44:53.100 --> 00:45:09.210 arvona, mutta jätetään se kuitenkin kotitehtäväksi. 647 00:45:09.210 --> 00:45:14.310 Siirrytään seuraavaan asiaan ja aletaan käsittelemään tyyppijärjestelmää ja nyt 648 00:45:14.310 --> 00:45:19.150 mä sanon tähän heti alkuun, että kyseessä on jokseenkin tekninen asia. 649 00:45:19.150 --> 00:45:22.290 Kuitenkin sellainen, jota me emme voi oikein välttää. 650 00:45:22.290 --> 00:45:27.200 Puhuttiinpa me sitten sharp pyyntöni javasta tai mistä tahansa ohjelmointikielestä 651 00:45:27.200 --> 00:45:32.030 ehkä poislukien muutamia sellaisia kieliä, jotka operoi pelkästään niin sanotussa 652 00:45:32.030 --> 00:45:37.150 pinossa, mutta tää koskee tää asia mitä tässä käsitellään, niin koskee kuitenkin 653 00:45:37.150 --> 00:45:40.510 hyvin hyvin monia moderneja ohjelmointikieliä. 654 00:45:40.510 --> 00:45:43.880 Erityisesti näitä kaikkein suosituimpia. 655 00:45:43.880 --> 00:45:48.140 Me lähinnä tästä tyyppijärjestelmästä raapaistaan nyt pintaa tässä, 656 00:45:48.140 --> 00:45:50.840 mutta otetaan niitä kaikista oleellisimpia asioita. 657 00:45:50.840 --> 00:45:57.400 Kuitenkin tyyppijärjestelmä koostuu siis sellaisista tyypeistä, jotka voidaan 658 00:45:57.400 --> 00:46:01.300 luokitella arvopohjaisiin tyyppeihin ja viitettä tyyppeihin. 659 00:46:01.300 --> 00:46:08.680 Tää on niinku se 2 kategoriaa, joihin nää mikä tahansa niistä muuttujista joita käytetään niin 660 00:46:08.680 --> 00:46:14.600 kuulu eli käytettiinpä sitten intia boolia tai fysiikka olet tai mitä tahansa. 661 00:46:14.600 --> 00:46:18.340 Eri tyyppiä sille meidän muuttaja niin se kuuluu jompaankumpaan näistä kategorioista 662 00:46:18.340 --> 00:46:22.790 joko arvopohjaiseen taikka viitepohjaiseen tyyppiin. 663 00:46:22.790 --> 00:46:29.510 No se minkä takia nää jaotellaan tällä tavalla liittyy muistin hallintaan eli nää arvopohjaiset 664 00:46:29.510 --> 00:46:34.880 tyypit ja viinipohjaiset tyypit ovat hieman eri kuin lokeroissa. 665 00:46:34.880 --> 00:46:38.710 Siellä tietokoneen sisäisessä muistissa ja sen takia 666 00:46:38.710 --> 00:46:41.480 niitä täytyy tällä tavalla luokitella. 667 00:46:41.480 --> 00:46:47.180 Ne eri lokerot siellä tietokoneen sisäisessä muistissa ja se 668 00:46:47.180 --> 00:46:49.750 tapa millä sharp sitten sitä muistia hallitsee. 669 00:46:49.750 --> 00:46:54.430 Niitä kutsutaan nimellä pinoja kekoon ja puhutaan näistä nyt lyhyesti. 670 00:46:54.430 --> 00:46:57.030 Eli kuten sanoin, niin muuttujalla on joka jokaisella muuttujalla on siis 671 00:46:57.030 --> 00:47:00.340 oma tyyppi ja näitä tyyppejä nyt voi olla tosiaan into. 672 00:47:00.340 --> 00:47:06.790 Apple paljo plaa plaa fyysikko physics object taikka me voidaan tehdä niitä ihan itse uusia, 673 00:47:06.790 --> 00:47:13.290 mutta tyyppi on joko arvo puhelinta viitteenä ei voi olla molempia yksi aikaa. 674 00:47:13.290 --> 00:47:18.420 Ja. Arvopohjaisia muuttujia ovat. 675 00:47:18.420 --> 00:47:23.360 Esimerkiksi nämä sarpin mukana tulevat. 676 00:47:23.360 --> 00:47:28.500 Tyypit kuten interpol dope double acar. 677 00:47:28.500 --> 00:47:34.280 Eli eli ne ovat sellaisia muuttujia, jotka ikään kuin sisältävät sen arvon itsensä. 678 00:47:34.280 --> 00:47:39.250 Se on tää arvopohjaisen muuttujan se semmoinen perusteesi. 679 00:47:39.250 --> 00:47:45.030 Vastaavasti 5 viitepohjaisia muuttujia ovat string kaikki taulukot, esimerkiksi inttitaulukot, 680 00:47:45.030 --> 00:47:49.710 string taulukot, double taulukot tai fyysiset objektit, taulukot sekä kaikki klass 681 00:47:49.710 --> 00:47:53.920 tyyppiset oliot kuten esimerkiksi fysiikka objekti. 682 00:47:53.920 --> 00:47:59.520 Taikka game object tai vaikkapa se meidän peli, joka me tehdään siinä ohjelma. 683 00:47:59.520 --> 00:48:04.810 CS tiedostossa kun me tehdään vaikka fysiikka peli sekin on tämmöinen clash tyyppinen 684 00:48:04.810 --> 00:48:09.720 olio tähän on tullut aika paljon viime vuosina se ei sarjoissa semmoista extra 685 00:48:09.720 --> 00:48:14.230 juttua lisää joilla vähän niinku voidaan tehdä taas. 686 00:48:14.230 --> 00:48:17.410 Tai, joka tuo vähän monimutkaisuutta lisää tähän juttuun. 687 00:48:17.410 --> 00:48:21.070 Me ei käsitellä näitä monimutkaisia juttuja tällä kurssilla. 688 00:48:21.070 --> 00:48:27.920 Oleellista on ymmärtää, että on niinku 2 kategoriaa näille muuttujille. 689 00:48:27.920 --> 00:48:29.740 Ja. 690 00:48:29.740 --> 00:48:34.800 Tosissaan niinku jo tuossa mainitsinkin niin tää syy minkä takia näitä kategorioita 691 00:48:34.800 --> 00:48:41.320 on 2 niin se liittyy siihen että että kuinka näitä ohjelman sisältämiä tietoja hallitaan 692 00:48:41.320 --> 00:48:47.080 siellä tietokoneen ohjelman ajon aikana keskusmuisti ja nyt pitää ymmärtää se asia niin 693 00:48:47.080 --> 00:48:51.920 että me tehdään tällä kurssilla pieniä ohjelmia, mutta oikeasti ohjelmat voivat olla 694 00:48:51.920 --> 00:48:57.680 tosi massiivisia ja erityisesti massiivisella tarkoitan sitä että ne käsittelevät suurta 695 00:48:57.680 --> 00:49:00.590 määrää dataa ei pelkästään jotain 3. 696 00:49:00.590 --> 00:49:05.820 Etunimeä tai muutamaa hassua lukua tai viikonpäivien. 697 00:49:05.820 --> 00:49:13.350 Lämpötiloja vaan se voi sisältää 7 miljardia jotakin datapisteitä jostakin. 698 00:49:13.350 --> 00:49:16.290 Tiekartasta tai tai. 699 00:49:16.290 --> 00:49:24.140 Kaikkien suomalaisten jotakin yksityiskohtaisia terveystietoja tai vastaavaa eli eli oikeasti 700 00:49:24.140 --> 00:49:30.530 isoilla tietokoneohjelmilla käsitellään paljon tietoa ja sen takia näille tavallaan, että kun 701 00:49:30.530 --> 00:49:35.170 käsitellään paljon tietoa tai sitten versus käsitellään vähän tietoa tai yksinkertaista tietoa, 702 00:49:35.170 --> 00:49:41.790 niin tämmöisille eri eri suuruusluokan tieto kategorioille täytyy olla hieman erilaisia tiedon 703 00:49:41.790 --> 00:49:47.200 hallintajärjestelmiä ja sen takia tässä dotnet ympäristössä. 704 00:49:47.200 --> 00:49:51.040 Siellä ohjelmassa määriteltyjä muuttujia voidaan sijoittaa joko 705 00:49:51.040 --> 00:49:54.050 2 tämmöiseen mustikat egoaan tai muistioon. 706 00:49:54.050 --> 00:49:59.790 Ne pinot kategorioiden nimet ovat pinoja keko. Ja. 707 00:49:59.790 --> 00:50:01.680 Vastaanpa nyt tässä välissä tuohon chattikysymykseen. 708 00:50:01.680 --> 00:50:07.880 Eli kyllä itse asiassa hyvä pointti eli se olisi voitu tehdä tehdä tosissaan sanomalla. 709 00:50:07.880 --> 00:50:14.250 Tulo jono tulover siihen. Tota noin niin. 710 00:50:14.250 --> 00:50:17.570 Joo kyllä juurikin on, eli jonot towersin tarvitseman tuohon perään 711 00:50:17.570 --> 00:50:22.910 vielä sulta, mutta kyllä olisi voitu tehdä noin. 712 00:50:22.910 --> 00:50:26.410 Käsitellään nyt tosissaan tätä pinoa ja kekoa tässä ihan 713 00:50:26.410 --> 00:50:28.550 ihan niinku mahdollisimman lyhyesti. 714 00:50:28.550 --> 00:50:33.090 Yritän nyt nostaa ne peruspointti tästä, eli ne ovat tosissaan dotnet alustan 715 00:50:33.090 --> 00:50:38.130 ja ckielen muistion hallintaan liittyviä tietorakenteita, mutta vastaavat tietorakenteet 716 00:50:38.130 --> 00:50:41.390 ovat on käytössä melkeinpä missä tahansa. 717 00:50:41.390 --> 00:50:45.570 Olio ohjelmointikielessä vaikuttaa siihen, kuinka ohjelma 718 00:50:45.570 --> 00:50:48.860 tallentaa ja käsittelee tietoa. 719 00:50:48.860 --> 00:50:53.260 Mä yritän lyhyesti poimia tästä pitkältä slaidista oleelliset asiat eli 720 00:50:53.260 --> 00:50:57.820 pino on alue muistissa, jota käytetään paikallisten muuttujien tallentamiseen 721 00:50:57.820 --> 00:51:00.660 sekä aliohjelma että metodi kutsujen hallintaan. 722 00:51:00.660 --> 00:51:05.950 Eli kun me määritellään vaikkapa mainissa paikallisia muuttujia tai negatiivisten 723 00:51:05.950 --> 00:51:10.880 lukujen summa nimisessä funktiossa paikallisia muuttujia niitä pino on se paikka 724 00:51:10.880 --> 00:51:12.920 mihin ne paikalliset muuttujat tallennetaan. 725 00:51:12.920 --> 00:51:16.780 Meikä eilenkin käsiteltiin debuggeria ja siellä nähtiin 726 00:51:16.780 --> 00:51:19.600 aina siinä fredman variables alueella. 727 00:51:19.600 --> 00:51:23.470 Niitä paikallisia muuttujia ja ne paikalliset muuttujat on tallessa 728 00:51:23.470 --> 00:51:27.080 semmoisessa tieto rakenteessa kuin pino. 729 00:51:27.080 --> 00:51:31.770 Sinne pinoon tallentuu myöskin myöskin sen aliohjelman paikallisten muutti lisäksi 730 00:51:31.770 --> 00:51:38.800 sen paluuarvon osoitin eli eli tieto siitä että missä siellä muistissa se paluu arvo 731 00:51:38.800 --> 00:51:43.670 sijaitsee ja nää tiedot poistuu ne ikään kuin delegoidaan siellä tietokoneen muistista 732 00:51:43.670 --> 00:51:46.120 sen aliohjelman suorituksen päättymisen jälkeen. 733 00:51:46.120 --> 00:51:51.140 Toisin sanoen ei ole enää mahdollista sen. 734 00:51:51.140 --> 00:51:56.680 Tota noin niin vaikkapa tän negatiivisten summa funktion suorituksen jälkeen enää 735 00:51:56.680 --> 00:52:00.960 päästä mitenkään käsiksi tähän lukuun tai tähän luvut muuttujaan. 736 00:52:00.960 --> 00:52:03.020 Niitä ei ikään kuin enää ole olemassa. 737 00:52:03.020 --> 00:52:09.170 Ne ne tavallaan häviää sieltä tietokoneen keskusmuisti OK nyt joku joka on lukenut 738 00:52:09.170 --> 00:52:13.410 tietoturva asioita ja ja tietää tietokoneen sielunelämästä ehkä vähän enemmän 739 00:52:13.410 --> 00:52:19.540 kuin minä niin tietää sen, että kyllä siihen tavallaan siihen tiettyyn muistialueeseen 740 00:52:19.540 --> 00:52:22.180 saattaa tavalla tai toisella olla. 741 00:52:22.180 --> 00:52:28.020 Jollain hyvin, hyvin matalalla assemblertasolla vielä pääsy, mutta noin niinku periaatteessa 742 00:52:28.020 --> 00:52:34.140 täältä meidän tekemästä ohjelmasta ei ole enää mahdollista päästä sinne aliohjelman suorituksen 743 00:52:34.140 --> 00:52:40.510 aikaisiin paikallisten muuttujien tila tietoon sen pinon käsittely on nopeaa, koska sen 744 00:52:40.510 --> 00:52:42.470 hallinta on yksinkertaista ja ennustettavaa. 745 00:52:42.470 --> 00:52:44.280 Se koko on rajattu. 746 00:52:44.280 --> 00:52:47.250 Tää se miten toi viimeinen budjetti saattaa käytännössä teille joskus 747 00:52:47.250 --> 00:52:51.620 elämässä näkyä on se, että jos te teette tosi tosi tosi paljon aliohjelma 748 00:52:51.620 --> 00:52:53.930 kutsuja esimerkiksi rekursiivisesti. 749 00:52:53.930 --> 00:52:57.770 Aliohjelmakutsuja eli aliohjelma kutsuu itse itseään, niin meille saattaa 750 00:52:57.770 --> 00:53:03.210 tulla semmoinen virheilmoitus kun virheilmoitus kun stack overflow exception 751 00:53:03.210 --> 00:53:06.450 ja joku saattaa stack overflow olla joskus kuullutkin niin se tarkoittaa 752 00:53:06.450 --> 00:53:08.480 sitä, että meillä se pino ikään kuin täyttyy. 753 00:53:08.480 --> 00:53:16.720 Sille on siis rajallinen määrä sitä mahdollista varattua tilaa siellä keskusmuistissa. 754 00:53:16.720 --> 00:53:20.560 No sitten vähän niinku vastakohta tulee äskeiselle on tämmöinen hiipi keko ja se on 755 00:53:20.560 --> 00:53:26.620 muistin alue, jota käytetään sellaisten muuttujien varaatilaan varaamiseen ja semmoiseen 756 00:53:26.620 --> 00:53:31.220 tilaan käyttö muuttujien käyttöön joita varataan dynaamisesti. 757 00:53:31.220 --> 00:53:35.480 Eli meillä ei itse asiassa vielä ole käsitelty sellaisia. 758 00:53:35.480 --> 00:53:39.320 Dynaamisesti allokoituja ja tota. 759 00:53:39.320 --> 00:53:43.240 Tietorakenteita, mutta taulukko on yksi esimerkki tällaisesta, 760 00:53:43.240 --> 00:53:47.370 joka sinne kekoon kuitenkin tallentuu. 761 00:53:47.370 --> 00:53:53.310 Kun ohjelmassa luodaan uusi olio nyy avainsanalla esimerkiksi new int taulukko tai 762 00:53:53.310 --> 00:53:58.410 new double taulukko tai new physics object tai jotain muuta vastaavaa, niin se tallennetaan 763 00:53:58.410 --> 00:54:03.990 kekoon se varsinainen tieto itsessään eli kaikki ne fysiikkaolian tiedot kuten paino, 764 00:54:03.990 --> 00:54:09.280 leveys, korkeus tai kuva joka sillä on ja tallennetaan sinne kekoon muistialueen puolelle 765 00:54:09.280 --> 00:54:12.900 sen sijaan että ne olisi siellä pinossa. 766 00:54:12.900 --> 00:54:16.600 Kekoon mahdollistaa muistin dynaamisen aallokon ja vapauttamisen, mikä tarkoittaa, 767 00:54:16.600 --> 00:54:21.560 että ohjelma voi pyytää ja vapauttaa muistia tarpeen mukaan ja erityisesti 768 00:54:21.560 --> 00:54:26.870 se muistin vapauttaminen on oleellista, jotta se meidän isohko ohjelma, joita 769 00:54:26.870 --> 00:54:28.670 nyt tällä kurssilla ei juuri tehdä. 770 00:54:28.670 --> 00:54:31.780 Mutta jos meillä olisi iso ohjelma, sisältäisi paljon tietoa, niin 771 00:54:31.780 --> 00:54:36.200 tarvittaessa sitä muistia voidaan vapauttaa muille ohjelmille käytettäväksi 772 00:54:36.200 --> 00:54:39.690 taikka sitten sille ohjelmalle itselleen. 773 00:54:39.690 --> 00:54:43.110 Kekoon muistin hallinta on hitaampaa kuin pino muistin, koska 774 00:54:43.110 --> 00:54:45.850 se vaatii muistin allokointi ja vapautusta. 775 00:54:45.850 --> 00:54:52.110 Eli tällä new avainsanalla niitä muistialueita varattaessa niin se vaatii aina pikkuisen 776 00:54:52.110 --> 00:54:57.050 aikaa sieltä prosessorilta ja sieltä keskusmuistilla jotta voidaan tehdä ne tarvittavat 777 00:54:57.050 --> 00:55:02.010 toimenpiteet ja rkielen tapauksessa myöskin semmoisia ikään kuin turvatoimenpiteitä joilla 778 00:55:02.010 --> 00:55:06.510 varmistetaan se, että siihen muistialueeseen ei pääse sitten myöskään kukaan muu käsiksi 779 00:55:06.510 --> 00:55:11.200 kuin se ohjelma on osa itse, joka siihen pitää päästä. 780 00:55:11.200 --> 00:55:15.000 Tähän liittyy myös tämmöinen käsite kuka arch collection eli roskien kerääminen, 781 00:55:15.000 --> 00:55:20.870 jota tarvitaan tilanteessa kun meidän muistialue sirpaloituu ja tarvitsee 782 00:55:20.870 --> 00:55:24.430 järjestellä sitä muistia uudestaan, jotta sitten. 783 00:55:24.430 --> 00:55:28.880 Uudelle tiedolle voidaan allokoida taas, sillä nykyää avainsanalla lisää muistia. 784 00:55:28.880 --> 00:55:32.980 Katsotaan se on konkreettinen esimerkki tuosta kohta. 785 00:55:32.980 --> 00:55:35.920 Mä otan tähän tämmöisen niinku väljän vähän semmoisen käsien heiluttelun 786 00:55:35.920 --> 00:55:40.100 määritelmän eli pino on tietorakenne, jonka vastuulla on pitää yllä tietoa 787 00:55:40.100 --> 00:55:42.780 siitä ikään kuin tän hetkisestä tilanteesta. 788 00:55:42.780 --> 00:55:48.260 Mitä funktiota on kutsuttu, mistä sitä funktiota on kutsuttu, millä parametrien 789 00:55:48.260 --> 00:55:52.520 arvoilla sitä funktiota on kutsuttu ja mitkä on niitä tässä aliohjelmassa käytettävissä 790 00:55:52.520 --> 00:55:57.500 olevia muuttujia, eli tavallaan ne tiedot. Jota tarvitaan. 791 00:55:57.500 --> 00:56:00.790 Vaikkapa tässä negatiivisten summa funktion tapauksessa 792 00:56:00.790 --> 00:56:03.860 juuri juuri tän funktion suorittamiseen. 793 00:56:03.860 --> 00:56:06.920 Me tarvitaan juuri tän funktion suorittamiseen tietoa siitä, 794 00:56:06.920 --> 00:56:09.800 että mitä tää luvut taulukko sisältää. 795 00:56:09.800 --> 00:56:12.460 Me tarvitaan tietoa, että paljonko se meidän summa on. 796 00:56:12.460 --> 00:56:14.330 Me tarvitaan tietoa, että paljonko tää on. 797 00:56:14.330 --> 00:56:18.560 Lukuarvo on juuri tällä hetkellä ja sitten aikanaan me tarvitaan myöskin tietoa siitä, että 798 00:56:18.560 --> 00:56:24.080 minkälainen arvo me tästä pihalle palautetaan ja ehkäpä kaikkein tärkeimpänä loppujen lopuksi 799 00:56:24.080 --> 00:56:28.020 tietoa siitä, että minne me oikein palataan sitten kun tää funktion. 800 00:56:28.020 --> 00:56:31.990 Suoritus päättyy ja se on tässä tapauksessa tää rivi viisikymmentäkaksi eli kaikki 801 00:56:31.990 --> 00:56:36.290 nää tiedot on tallessa siellä niin sanotussa pino muistissa. 802 00:56:36.290 --> 00:56:40.930 Eli ikään kuin se tän hetkinen lokaaliympäristö on siellä pinossa tallessa. 803 00:56:40.930 --> 00:56:45.450 No sitten vastaavasti keko on tietorakenne, jonka vastuulla on se vähän niinku vähän niinku 804 00:56:45.450 --> 00:56:52.010 ikään kuin massana säilyttää sitä dataa enemmän ja sinne voi ohjelman aikana sitten syntyä 805 00:56:52.010 --> 00:56:57.870 syntyä sitä tietoa ja sitä käytetään käytetään tota noin niin. 806 00:56:57.870 --> 00:57:09.280 Tarvittaessa sitten sitä sitä niitten kekoon viittaavien tietorakenteiden kautta. 807 00:57:09.280 --> 00:57:13.140 Pinoja kekoon rakenteiden merkitys käytännön ohjelmoinnissa. 808 00:57:13.140 --> 00:57:17.180 Arvopohjaiset muutti muuttujan arvot, tallennetaan pinoon ja 809 00:57:17.180 --> 00:57:20.110 viitepohjaisten muuttujien arvot tallennetaan. 810 00:57:20.110 --> 00:57:25.670 Kekoon ja viitearvo on tallennetaan pinoon eli tää on hyvin oleellinen ero näiden välillä 811 00:57:25.670 --> 00:57:29.870 arvopohjaista muuttujia olivat siis intro, double ball ja niin edelleen. 812 00:57:29.870 --> 00:57:35.890 Ja niinpä tämä inttiarvo tallennetaan suoraan sinne arvoon siihen muuttujaan ikään kuin itseensä 813 00:57:35.890 --> 00:57:41.930 sinne pinoon, kun taas viitepohjaisten muuttujien kuten fysio objekti tapauksessa ne varsinaiset 814 00:57:41.930 --> 00:57:46.260 arvot kuten leveyskorkeuskuvaa massa ja niin edelleen. 815 00:57:46.260 --> 00:57:50.730 Ne tallennetaan sinne kekoon muistin puolelle ja sinne pinoon tallennetaan vain viite. 816 00:57:50.730 --> 00:57:55.840 Jonkun pointteri tai osoite, että hei tuolta jostain kaukaa toisesta 817 00:57:55.840 --> 00:58:00.800 paikasta se varsinainen data on oikeastaan löytyy. 818 00:58:00.800 --> 00:58:06.430 Mä en nyt noita muita pointteja tuossa käyn läpi eli siinä vähän niinku 819 00:58:06.430 --> 00:58:10.990 tän saman asian eli suoraan se oman datansa jos me kirjoitamme inta 820 00:58:10.990 --> 00:58:15.390 on 3 niin sen AN arvo todellakin on se luku 3. 821 00:58:15.390 --> 00:58:18.950 No sen sijaan viitepohjainen tyyppi, kuten tuossa äsken jo sanoin, 822 00:58:18.950 --> 00:58:24.100 niin sisältää epäsuorasti sen omaan dataansa. 823 00:58:24.100 --> 00:58:26.860 Ja ja tuosta vielä sanon sen, että jos meillä olisi vaikka 824 00:58:26.860 --> 00:58:29.770 fysiikka oli joã, niin silloin se. 825 00:58:29.770 --> 00:58:34.390 A on oikeastaan vain osoite sinne datan äärelle. 826 00:58:34.390 --> 00:58:39.660 Tästä seuraa se että 2 muuttujaa viitepohjaisten. 827 00:58:39.660 --> 00:58:43.800 Muuttujien tapauksessa voi itse asiassa viitata samaan dataan ja 828 00:58:43.800 --> 00:58:48.640 tästä seuraa myöskin se, että aamun muuttujan kautta data on tehdyt 829 00:58:48.640 --> 00:58:50.840 muutokset heijastuvat myös muuttujan tästä. 830 00:58:50.840 --> 00:58:54.010 Katsomme kohta esimerkin. 831 00:58:54.010 --> 00:58:56.950 Muun muassa taulukot ovat viiteohjaisia tyyppejä. 832 00:58:56.950 --> 00:59:02.560 Esimerkiksi jos kirjoitamme int a whit 5, niin tässä AN arvo, eli se mitä 833 00:59:02.560 --> 00:59:07.320 se AN niin yksittäiset alkiot todella ovat, niin se on. 834 00:59:07.320 --> 00:59:09.850 P. Anteeksi anteeksi se on. 835 00:59:09.850 --> 00:59:14.130 Arvo on todellisuudessa viite siihen sisältöön, jossa se 5 mittainen taulukko 836 00:59:14.130 --> 00:59:18.690 todella sijaitsee eli se 5 mittainen taulukko sijaitsee siellä ekonomistin puolella, 837 00:59:18.690 --> 00:59:26.820 kun se AN arvo se osoite sijaitseekin siellä pinossa. 838 00:59:26.820 --> 00:59:30.720 Otetaan esimerkki, arvopohjainen muuttujan tapauksesta. 839 00:59:30.720 --> 00:59:34.840 Eli kuten tuossa äsken jo mainitsin, niin jos meillä on into AN 3 ja sitten me 840 00:59:34.840 --> 00:59:41.260 tehdään näitä int on niin me kopioimme sen AN sisältämän arvon tuohon muuttujalle 841 00:59:41.260 --> 00:59:44.940 ja mitä tapahtuu kun me sanotaan on plus yks. 842 00:59:44.940 --> 00:59:49.460 Niin AN arvo säilyy eli tää että me muutetaan tuon muuttujan arvo. 843 00:59:49.460 --> 00:59:55.760 Ei mitenkään muuta sitä muuttujaa tota noin niin sisältö sisältävää arvoa. 844 00:59:55.760 --> 01:00:01.760 Tässä siis toi kakkosrivi toi int on a ei ole mikään kytkentä näiden muuttuvien 845 01:00:01.760 --> 01:00:04.880 välillä, vaan se on yksinkertainen arvon kopiointi. 846 01:00:04.880 --> 01:00:09.340 Me voitaisiin ihan katsoa tää tuossa ihan raiderissa konkreettisesti, 847 01:00:09.340 --> 01:00:12.300 jotta ikään kuin uskotte että näin todella on. 848 01:00:12.300 --> 01:00:14.430 Tää nyt tietysti on varmaan tällä kurssilla tullut jo 849 01:00:14.430 --> 01:00:17.670 selväksi, mutta se saattaa nyt tässä. 850 01:00:17.670 --> 01:00:21.670 Tässä kun näistä asioista puhuttiin niin vielä vielä vaatia uskon vahvistusta. 851 01:00:21.670 --> 01:00:25.570 Elikkä laitetaan tuohon nytten breakpoint jotta nähdään. 852 01:00:25.570 --> 01:00:29.390 Nähdään siellä taustalla mitä mitä tapahtuu. 853 01:00:29.390 --> 01:00:33.090 Eli meillä on nytten arvossa 3 ja tää debugger itsensä näyttää 854 01:00:33.090 --> 01:00:36.090 vähän jopa hassusti, että ben arvo on nolla. 855 01:00:36.090 --> 01:00:40.950 Vielähän se sitä BN arvoa emme ole tässä alustaneet, mutta jos mä nyt 856 01:00:40.950 --> 01:00:45.090 klikkaan tuossa step into niin se bkin muuttuu kolmoseksi. 857 01:00:45.090 --> 01:00:49.760 Toisin sanoen se kolmosarvo sinne kopioidaan muuttujan sisällöksi, mutta 858 01:00:49.760 --> 01:00:54.890 nyt se oleellinen asia eli vielä kerran step intoa klikkaamalla muuttuu neloseksi, 859 01:00:54.890 --> 01:00:57.190 mutta eihän se aamu muuttunut yhtään mihinkään. 860 01:00:57.190 --> 01:01:00.880 Niinpä nää ja b osoittavat ihan oikeasti eri. 861 01:01:00.880 --> 01:01:05.750 Erja ne ovat niinku eri asioita keskenään. 862 01:01:05.750 --> 01:01:11.970 No sitten mennään seuraavaan eli viiteenpohjaisen arvon sijoitukseen eli tehdään 863 01:01:11.970 --> 01:01:18.920 taulukko ykkönen johon heitetään arvot 1 2 3 sen jälkeen tehdään taulukko kakkonen, 864 01:01:18.920 --> 01:01:23.210 johon me sijoitetaan taulukko ykkönen mitä me oikeastaan tulemme sijoittaaneeksi 865 01:01:23.210 --> 01:01:27.900 kun me sanomme taulukko 2 on taulukko yks. 866 01:01:27.900 --> 01:01:31.110 Ja tää on onkin aika mielenkiintoinen juttu. 867 01:01:31.110 --> 01:01:35.190 Koska äkkiseltään voisi tietysti kuvitella niin, että no totta kai se taulukko kakkonen 868 01:01:35.190 --> 01:01:39.290 sisältää samat arvot, mut jos me muutetaan taulukko ykköstä. 869 01:01:39.290 --> 01:01:42.180 Taitaa olla koko kakkosta niin mitä se tarkoittaa noille? 870 01:01:42.180 --> 01:01:44.900 Toisille arvoille katsotaanpa tästäkin ihan konkreettinen 871 01:01:44.900 --> 01:01:52.970 esimerkki eli taulukko ykkönen. Sisältäisi nyt 1 2 3. 872 01:01:52.970 --> 01:01:57.590 Taulukko kakkonen sijoitetaan siihen taulukko ykkönen. 873 01:01:57.590 --> 01:01:58.980 Ja katsotaan miltä itse asiassa tää. 874 01:01:58.980 --> 01:02:01.190 Voitko tää tilanne ottaa nyt tuonne debugeriin? 875 01:02:01.190 --> 01:02:06.870 Mulla muuten tuo näppäin oikotietä on breakpointin asettamiseksi on 9 se voi 876 01:02:06.870 --> 01:02:10.070 sulla olla jokin muu, mutta jos nyt ihmettelit että miten se tuonne ilmaantuu 877 01:02:10.070 --> 01:02:15.760 niin mä klikkaan tällä näppäimistöllä tota 9 painiketta. 878 01:02:15.760 --> 01:02:18.760 Ja katsotaan miltä tuo näyttää raiderissa. 879 01:02:18.760 --> 01:02:21.550 Eli nytten jos me katsotaan ihan täältä. 880 01:02:21.550 --> 01:02:25.250 Trezen väriä plus paneelista niin täällä nyt näyttää ihan kiltisti siltä, 881 01:02:25.250 --> 01:02:31.030 että niissä on samat arvot myy no problem, mutta tehdään nyt se viimeinen 882 01:02:31.030 --> 01:02:35.580 juttu eli käydääntelemassa taulukko kakkosta. 883 01:02:35.580 --> 01:02:38.260 Laitetaan vaikkapa paikkaan yksi luku 4. 884 01:02:38.260 --> 01:02:43.250 Toisin sanoen se sisältö pitäisi olla sen jälkeen 1 885 01:02:43.250 --> 01:02:46.940 4, 3 ja nyt meillä on paketointi tuolla. 886 01:02:46.940 --> 01:02:50.870 Rivillä 2 tai itse asiassa laitetaan se brake pointti tuohon riville kaksikymmentäneljä 887 01:02:50.870 --> 01:02:56.300 niin se on seuraavaksi suoritusvuoron tuleva lause. 888 01:02:56.300 --> 01:02:58.100 Eli edelleen. 889 01:02:58.100 --> 01:03:00.260 Meillä on siellä luvut 1 2 3 kummassakin taulukossa, mutta nyt se 890 01:03:00.260 --> 01:03:04.500 stepintu ja hoplaa nähdään niin, että kummankin taulukon sisältö 891 01:03:04.500 --> 01:03:07.920 muuttui ja tää on nytten aika erikoinen juttu. 892 01:03:07.920 --> 01:03:13.220 Varmaan äkkiseltään, mutta oleellista on ymmärtää mitä tuossa tapahtuu. 893 01:03:13.220 --> 01:03:15.700 Eli tässä me emme sijoita. 894 01:03:15.700 --> 01:03:19.940 Taulukko ykkösen sisältämiä kaikkia lukuja erikseen uuteen taulukkoon. 895 01:03:19.940 --> 01:03:22.900 2 vaan me sijoitamme taulukko yks. 896 01:03:22.900 --> 01:03:30.980 Pinossa olevan viitteen taulukko 2 liitteeksi. 897 01:03:30.980 --> 01:03:34.800 Ja mä nyt oon koittanut piirrellä tähän vähän tämmöisiä kuvia, joka ehkä toivottavasti 898 01:03:34.800 --> 01:03:37.640 pikkuisen havainnollisti vielä lisää tätä asiaa. 899 01:03:37.640 --> 01:03:41.340 Eli kun me teemme inta on kolmosen, niin me sinne pinoon eli stackin 900 01:03:41.340 --> 01:03:44.600 ja englannin kielellä niin sen arvon laitamme. 901 01:03:44.600 --> 01:03:49.260 Vastaavasti jos me teemme uuden muuttujan b, niin sitten se ikään kuin 902 01:03:49.260 --> 01:03:52.800 varaa täältä sitä kiistä uuden tällaisen pinon lokeron. 903 01:03:52.800 --> 01:03:58.150 Ja pahoittelut nyt, että itsessä nyt jos joku teknisesti ymmärtää asiaa enemmän, 904 01:03:58.150 --> 01:04:01.640 niin tavallaan tää on ehkä aavistuksen verran huonon. 905 01:04:01.640 --> 01:04:04.850 Kuvaa tästä sitäkistä, kun kyseessä on tämmöinen. 906 01:04:04.850 --> 01:04:07.190 Ihan konkreettisestikin semmoinen. 907 01:04:07.190 --> 01:04:12.000 Pinot joka ikään kuin kasvaa ylöspäin, mutta olkoon nyt elikkä nyt, 908 01:04:12.000 --> 01:04:16.460 jos me sanotaan on yksi kuin eli sijoitamme BN. 909 01:04:16.460 --> 01:04:20.380 Sisältämä sijoitumme muuttujaan BN sen arvon mikä 910 01:04:20.380 --> 01:04:24.290 ssa on me kopioimme sen kolmosen sinne. 911 01:04:24.290 --> 01:04:31.130 B muuttujan sisällöksi ja sen jälkeen molemmissa on kolmonen ja nyt. 912 01:04:31.130 --> 01:04:34.790 Seuraava asia elikkä tehdään sitten muuttuja. 913 01:04:34.790 --> 01:04:38.470 Tee, johon sijoitetaan luvut 1 2 3 eli on nytten 914 01:04:38.470 --> 01:04:41.690 taulukko ja niinpä se on olio muuttuja. 915 01:04:41.690 --> 01:04:44.660 Ja tää varaakin sitten sieltä keon puolelta eli hiipumista. 916 01:04:44.660 --> 01:04:49.470 Nytten pienen palasen sitä muistia johon sitten tungetaan ne varsinaiset sisällöt. 917 01:04:49.470 --> 01:04:54.790 Tässä tapauksessa luvut 1 2 3 tää saa jonkun osoitteen ja nyt tässä sitä osoitetta 918 01:04:54.790 --> 01:04:58.970 merkataan tommoisella merkinnällä dollarin yksi se voi tietysti olla. 919 01:04:58.970 --> 01:05:02.330 Oikeasti jokin vähän pitempi luku. 920 01:05:02.330 --> 01:05:08.240 Se tämmöinen muistiosoite näissä kuusikymmentäneljä bittisissä. 921 01:05:08.240 --> 01:05:13.520 Tota noin niin käyttöjärjestelmissä on kuusikymmentäneljä bittiä, pitkä osoite 922 01:05:13.520 --> 01:05:18.740 eli kuusikymmentäneljä ykköstä niin on ykkösen kurdi kuudenkymmenenneljän ykkösen 923 01:05:18.740 --> 01:05:23.170 nolla muodostama jono joka voi olla jokin luku. 924 01:05:23.170 --> 01:05:25.450 Aika iso luku. 925 01:05:25.450 --> 01:05:32.380 Ja tämä iso luku sitten tulee sen muuttujan tee arvoksi täällä sitäkin puolella. 926 01:05:32.380 --> 01:05:36.280 Eli tuolta näyttää se stack nyt tämmöisten koodiriviä jälkeen. 927 01:05:36.280 --> 01:05:40.210 Hyvä ja nyt lähdetään sitten tekemään jotain vähän muutosta. 928 01:05:40.210 --> 01:05:45.710 Eli tehdään 2 muuttuja jolle annetaan arvot 3 2 1 ja nyt kun me sanotaan new 929 01:05:45.710 --> 01:05:50.860 int niin se varaa taas tuolta heepin puolelta sitten uuden muistio lohkareen joka 930 01:05:50.860 --> 01:05:55.960 saa jonkin muistiosoitteen ja sitten se muistiosoitteen arvo tässä tapauksessa 931 01:05:55.960 --> 01:05:59.940 dollari kakkonen nyt on nyt tämmöinen kuvitteellinen. 932 01:05:59.940 --> 01:06:03.110 Dollari kakkonen, mutta joka tapauksessa se osoite 933 01:06:03.110 --> 01:06:06.970 osoite tulee sinne kakkosen arvoksi. 934 01:06:06.970 --> 01:06:10.890 No nyt se viite pohjaisten muuttujien kanssa. 935 01:06:10.890 --> 01:06:16.690 Operointi saa nyt tässä sen huippukohdan elikkä kakkoseen sijoitetaan teen 936 01:06:16.690 --> 01:06:21.490 sisältämä arvo niin mitä me itse asiassa sinne sijoitamme. 937 01:06:21.490 --> 01:06:28.300 Me kopioimme tuolta sitä kiistä sen dollarin ykkösen dollari kakkoseen. 938 01:06:28.300 --> 01:06:33.020 Tai siis kakkoseen ja siellä olik dollari kakkonen, mutta tämän operaation 939 01:06:33.020 --> 01:06:37.580 jälkeen siellä on tietysti dollari ykkönen ja nyt kun se dollari ykkönen osoittaa 940 01:06:37.580 --> 01:06:43.160 tuonne hiipiessä tuonne yläpuolella olevaan lokeroon, niin kyllä sekä ykkönen 941 01:06:43.160 --> 01:06:46.920 että kakkonen osoittivat sen jälkeen tonne. 942 01:06:46.920 --> 01:06:53.350 Lokero missä on nuo 1 2 3 no ennen kun mennään kaapistailemaan tuota seuraavaa keltaisella 943 01:06:53.350 --> 01:06:57.170 olevaa juttua niin mietitään hetki että mitä tapahtuu tälle. 944 01:06:57.170 --> 01:07:01.530 Eli nythän tätä muistialuetta ei enää kukaan ikään kuin omista. 945 01:07:01.530 --> 01:07:09.070 Siihen ei kukaan enää osoita ja mikään muuttuja ei enää viittaa siihen muistialueeseen 946 01:07:09.070 --> 01:07:13.210 ja silloin tämä muistialue muuttuu niin sanotusti roskaksi. 947 01:07:13.210 --> 01:07:16.710 Sille annetaan semmoinen erityinen merkintä jota mä nyt en tähän kuvaan 948 01:07:16.710 --> 01:07:19.710 ole laittanut, mutta sinne tulee semmoinen pieni. 949 01:07:19.710 --> 01:07:24.970 Pieni viputanen näin, että tämä on nyt roskaa ja sen pienen vivun ansiosta 950 01:07:24.970 --> 01:07:30.550 me voidaan sitten myöhemmin tai CR ajonaikainen ympäristö voi sen myöhemmin 951 01:07:30.550 --> 01:07:34.170 käydä käydä ikään kuin vapauttamassa sen muistin. 952 01:07:34.170 --> 01:07:36.180 Katsotaan sitä kohta. 953 01:07:36.180 --> 01:07:42.300 Mutta OK nyt jos me sanotaan että kakkosen paikassa oleva nolla kakkosen nolla paikassa 954 01:07:42.300 --> 01:07:50.500 oleva arvo muutetaan neloseksi niin me otetaan sieltä kakkosen dollari yks. 955 01:07:50.500 --> 01:07:54.110 Osoitteesta eli tuota nuolta pitkin kuljetaan. 956 01:07:54.110 --> 01:07:57.710 Tänne sisältöön tänne lokeroon otetaan paikka nolla. 957 01:07:57.710 --> 01:08:02.830 Eli aivan tää ensimmäinen alkio ja käydään pumppaamassa sinne luku 4 ja kyllä 958 01:08:02.830 --> 01:08:08.690 se nelonen muuttuu sinne sen muisti lokeron sisältö on sen jälkeen 4 2 3 ja tarkasteltiinpa 959 01:08:08.690 --> 01:08:14.130 me kumpaan nuolta pitkin tahansa sitten sitä tilannetta joko teen kautta tai 960 01:08:14.130 --> 01:08:19.170 kakkosen kautta niin kummastakin perspektiivistä katsottuna se tilanne näyttää 961 01:08:19.170 --> 01:08:21.340 samalta eli 4 2 kolmoselta. 962 01:08:21.340 --> 01:08:24.650 No sitten jos me tehdään muutos eli t. 963 01:08:24.650 --> 01:08:28.910 Taulukon kakkospaikka muuttaa vitoseksi, niin sen jälkeen. 964 01:08:28.910 --> 01:08:31.670 Tai tässä tilanteessahan me mennään tätä nuolta pitkin 965 01:08:31.670 --> 01:08:35.270 tänne paikassa 2 on siellä luku 3. 966 01:08:35.270 --> 01:08:42.800 Muutetaan se vitoseksi jolloinka dollari yks osoitteen päässä on sisältynyt 4 2 5 eli tavallaan 967 01:08:42.800 --> 01:08:48.760 me kumpaa tahansa muuttujaa käsitellessämme tulemme muuttaneet saman. 968 01:08:48.760 --> 01:08:56.860 Tota noin niin sisällön arvoa täällä heepin puolella. 969 01:08:56.860 --> 01:08:59.260 No muisti, johon ei siis ohjelmassa enää viitata. 970 01:08:59.260 --> 01:09:04.180 Merkitään automaattisesti roskaksi ja tuossa edellisessä esimerkissä se viitteen dollari 2 vaatima 971 01:09:04.180 --> 01:09:11.680 alue muuttuikin nyt roskaksi ja CSR järjestää automaattisesti muisti ja tarvittaessa sillä tavoin, 972 01:09:11.680 --> 01:09:16.060 että uusia muuttujia voidaan taas allokoida kekoon muistiin. 973 01:09:16.060 --> 01:09:21.910 Ja tää on älyttömän iso juttu c sharp verrattuna vaikkapa kieleen, 974 01:09:21.910 --> 01:09:25.220 jossa tämmöistä automaattista muistien hallintaa ei ole. 975 01:09:25.220 --> 01:09:30.900 Eli tämmöinen dollari kakkonen siellä c sharky anteeksi kielessä täytyy itse käydä 976 01:09:30.900 --> 01:09:36.800 vapauttamassa, mutta carpi osaa tätä vapauttamista tehdä tehdä itse. 977 01:09:36.800 --> 01:09:42.850 Eli leikitään nyt, että meillä olisi luotuna sinne useita tämmöisiä muistia, 978 01:09:42.850 --> 01:09:48.300 muistia vaativia olijoita vaikkapa tämmöisiä inttitaulukoita ja mä oon nyt nimennyt 979 01:09:48.300 --> 01:09:53.710 tässä OBJXBJ 2 OBJ 3 OJ ykkönen on tuon mittainen. 980 01:09:53.710 --> 01:09:55.670 Muistipätkä siellä muistissa. 981 01:09:55.670 --> 01:10:01.200 Ob kakkonen on vähän pitempi ja OBJ kolmonen on sitten taas vähän lyhyempi. 982 01:10:01.200 --> 01:10:05.260 No sitten leikitään että siihen OBJ kakkoseen ei enää kukaan viittaaisikaan. 983 01:10:05.260 --> 01:10:09.720 Elikkä se muuttuu nyt tällaiseksi vapaaksi muistialueen sitä ei enää tarvita. 984 01:10:09.720 --> 01:10:12.830 Se on siis merkitty ikään kuin roskaksi. 985 01:10:12.830 --> 01:10:18.010 No sitten me luodaan vähän isompi objekti sinne OBJ nelonen ja se vaatii tosi paljon 986 01:10:18.010 --> 01:10:21.310 tilaa ja näyttää siltä että meidän muistio on pikkuhiljaa täyttymässä. 987 01:10:21.310 --> 01:10:25.290 Eli jos nyt leikitään että tää meidän muistipaikka loppuisi tähän näin niin sehän tarkoittaisi 988 01:10:25.290 --> 01:10:29.590 sitä että kovin paljon tavaraa sinne ei enää mahdu ja nytten. 989 01:10:29.590 --> 01:10:32.800 Jos kävisin niin, että me tarvittaisiin. 990 01:10:32.800 --> 01:10:37.520 Aika iso pätkä tää muistia vaikkapa tämmöinen pätkä ja sitten tuommoinen pätkä tuolta 991 01:10:37.520 --> 01:10:43.400 niin silloinhan ei olisi mahdollista sellaista tehdä ja tätä muistia silloin täytyy järjestellä 992 01:10:43.400 --> 01:10:48.120 uudestaan ja tää niin sanottu automaattinen roskien keruu voisin automaattisen järjestelyn 993 01:10:48.120 --> 01:10:57.080 tehdä eli käy konkreettisesti siirtämässä tän OBJ kolmosen 994 01:10:57.080 --> 01:11:03.640 sitten vähän tänne vasemmalle päin ja obj nelosen vähän tänne vasemmalle päin, jotta 995 01:11:03.640 --> 01:11:04.760 tätä muistipatkaa sitten voidaan täältä lopusta tasoittaa käyttöön. 996 01:11:04.760 --> 01:11:06.560 Eli tommoinen automaattinen roskia hallinta cesar löytyy ohjelmoin, ei tarvitse sitä. 997 01:11:06.560 --> 01:11:09.430 Aktiivisesti itse pohtia, eikä tehdä sitä varsinaisesti. 998 01:11:09.430 --> 01:11:11.670 Itse ellei erikseen halua. 999 01:11:11.670 --> 01:11:17.090 Tämä ei johdu niinkään siitä, että nykykoneessa olisi paljon muistia vaan siitä, että 1000 01:11:17.090 --> 01:11:22.310 se tota noin niin roskien keruu hoituu siellä sarvissa automaattisesti. 1001 01:11:22.310 --> 01:11:28.350 Jos meillä on jokin aika kriittinen järjestelmä, kuten vaikkapa ehkä 1002 01:11:28.350 --> 01:11:31.840 tämmöinen, hieman vähemmän aika kriittinen voi olla joku tietokonepeli, 1003 01:11:31.840 --> 01:11:35.750 jossa tapahtuu nopealla tempolla jotain asioita. 1004 01:11:35.750 --> 01:11:40.390 Vaikka joku taistelupeli niin niin tuota on tietysti 1005 01:11:40.390 --> 01:11:43.430 mahdollista, että se roskien keruu. 1006 01:11:43.430 --> 01:11:48.420 Toisin sanoen tämä hetki kun näitä muistialueita täällä järjestellään uudestaan, niin 1007 01:11:48.420 --> 01:11:53.640 vie vähän aikaa ja se saattaa sitten näkyä vähän nykimisena siinä pelissä. 1008 01:11:53.640 --> 01:11:59.000 Joku hieman oikeasti kriittisempi järjestelmä, kuten vaikkapa joku auton jarruttaminen tai 1009 01:11:59.000 --> 01:12:05.940 tai joku tehdas ympäristö, niin silloin se roskien keruun vaatima aika resurssi täytyy ihan 1010 01:12:05.940 --> 01:12:09.860 oikeasti ottaa huomioon tai saattaa tapahtua jotain katastrofaalista. 1011 01:12:09.860 --> 01:12:12.110 Eli tavallaan. 1012 01:12:12.110 --> 01:12:17.070 On on tilanteita, jossa se roskien keruu saattaa viedä niin paljon aikaa, että se on tilanne 1013 01:12:17.070 --> 01:12:20.490 mihin meillä ei ole yksinkertaisesti varaa ja silloin se pitää ottaa huomioon. 1014 01:12:20.490 --> 01:12:25.170 Ja tietysti tommoisissa ääritilanteissa, kuten vaikkapa jossain auton jarruttamisen 1015 01:12:25.170 --> 01:12:29.330 yhteydessä, niin sitten voi tulla se kysymys, että onko se automaattinen roskia hallinta 1016 01:12:29.330 --> 01:12:34.690 edes edes hyvä ominaisuus, mutta tällä kurssilla ei todellakaan todellakaan semmoisiin 1017 01:12:34.690 --> 01:12:37.780 tilanteisiin tulla tulla tulla tota pääsemään. 1018 01:12:37.780 --> 01:12:41.310 Mutta mutta noin niinku teoriassa se on hyvä mikä on. 1019 01:12:41.310 --> 01:12:44.130 Myöhemmin sitten hyvä ottaa huomioon. 1020 01:12:44.130 --> 01:12:47.870 No slaidit olisi siinä katsotaan oliko mulla tuolla. 1021 01:12:47.870 --> 01:12:54.500 Enemmän esimerkkejä noista. 1022 01:12:54.500 --> 01:12:59.940 Noista tota viitteistä vielä. 1023 01:12:59.940 --> 01:13:04.140 Aika on itse asiassa melkein käytetty. 1024 01:13:04.140 --> 01:13:07.300 Tyy vilkaistaanpa sinne demo tehtävien puolelle. 1025 01:13:07.300 --> 01:13:13.520 Mulla oli pari esimerkkiä tuossa, mutta mä taidan jättää ne ensi viikkoon eli demo vitosen 1026 01:13:13.520 --> 01:13:22.210 kohdalla joka on tän kerran demo niin nuo asiat taitaapi riittää elikkä tuossa. 1027 01:13:22.210 --> 01:13:28.790 Vitosessa tarvittavat asiat käsiteltiin kotoisessa tarvittavat asiat käsiteltiin ja seiskassa 1028 01:13:28.790 --> 01:13:34.170 tarvittavat asiat käsiteltiin elikkä kyllä ja käsissäkin tarvittavat asiat käsiteltiin, jotenka 1029 01:13:34.170 --> 01:13:41.520 en en ota enempää asiaa mitä ei tänään enää tarvita, jotenka päätellään. 1030 01:13:41.520 --> 01:13:47.450 Tämänkertainen luento tähän ei muuta kuin mukavaa viikon jatkoa kaikille. 1031 01:13:47.450 --> 01:13:51.030 Muistakaa tosissaan se harkkotyön aikataulutus ja käväisin käynnissä 1032 01:13:51.030 --> 01:13:53.090 ohjauksissa näyttämässä ohjelmoijalle. 1033 01:13:53.090 --> 01:13:57.100 Sitä suunnitelmaa ei muuta kuin mukavaa viikonloppua 1034 01:13:57.100 --> 01:13:59.350 kaikille ja ensi viikolla tavataan. Moi moi.