390 likes | 511 Views
Luku 8 – Edistyneitä aiheita. Sisältö ❸. C#-kielen tehokas käyttö Asynkroninen ohjelmointi LINQ-kyselykieli Visual Studio 2013 ja Blend 2013 Versionhallinta pilvestä XAML-vinkkejä Marginaalit ja sopimukset Sovellusten lokalisointi Tehtäviä Kysymyksiä ja vastauksia.
E N D
Sisältö❸ • C#-kielen tehokas käyttö • Asynkroninen ohjelmointi • LINQ-kyselykieli • Visual Studio 2013 ja Blend 2013 • Versionhallinta pilvestä • XAML-vinkkejä • Marginaalit ja sopimukset • Sovellusten lokalisointi • Tehtäviä • Kysymyksiä ja vastauksia
C#-kielen tehokas käyttö • Ohjelmointikielenä C#-kieli on tehokas ja monipuolinen • Paljon nykyaikaisia ominaisuuksia • Esimerkiksi geneerisettietotyypit, tuki asynkroniselle ohjelmoinnille ja rinnakkaisuudelle, integroitu kyselykieli, jne. • Seuraavassa tutustutaan muutamiin C#-kielen hyödyllisiin ominaisuuksiin
Asynkroninen ohjelmointi • Asynkronisuus tarkoittaa ohjelmoinnissa sitä, että kaksi tai useampaa toimintoa suoritetaan rinnakkain eli yhtä aikaa • Eikä peräkkäin kuten ohjelmoinnissa perinteisesti • Asynkronisen ohjelmoinnin avulla ratkaistaan ongelma, jossa sovellus näyttää pysähtyvän paikalleen tehdessään jotain • Esimerkiksi silloin, kun sovellus ollaan lataamassa kookasta tiedostoa verkosta
C# ja asynkronisuus • C#-ohjelmointkieli tekee asynkronisesta ohjelmoinnista helppoa uusien async- ja await-avainsanojen avulla • Apuna käytetään runsaasti Task-luokkaa, joka on osa Windows 8:n luokkakirjastoja
Koodiesimerkki private async void StartButton_Click( object sender, RoutedEventArgs e) { try { Task<int> intTask = ExampleMethodAsync(); ResultsTextBox.Text+= "Tehdäänjotainsamalla " + "kun metodiasuoritetaan"; intintResult = awaitintTask; ResultsTextBox.Text+= String.Format( "Length: {0}\n\n", intResult); } catch (Exception) { //... } }
LINQ-kyselykieli • Lyhenne sanoista Language IntegratedQuery • Äännetään ”link” tai ”lin-quu” • LINQ on C#-ohjemointikieleen integroitu kyselykieli, jonka avulla helpotetaan tietojen hakemista ja etsimistä erilaisista tietolähteistä • Syntaksi muistuttaa SQL-kieltä • Jos tunnet jo SQL-kieltä, on LINQ helppo oppia
Esimerkki LINQ-kyselystä int[] luvut = {5,3,9,7,1,6,10,4,2}; var lajiteltuna = from l in luvut where l > 5 orderby l select l; foreach (int luku in lajiteltuna) { // näytä luku ruudulla... }
LINQ-kielen tukema tietolähteet • Edellisessä esimerkissä näytettiin LINQ-kysely, joka hakee lukuja taulukosta (engl. array) • Taulukkojen tai sovelluksen sisäisten olioiden lisäksi LINQ osaa hakea tietoja esimerkiksi SQL-tietokannoista • Muita tuettuja tietolähteitä ovat esimerkiksi XML-tiedostot ja webistä löytyvät tietolähteet
Toinen esimerkki NorthwindEntitiesentities = newNorthwindEntities(); varsuomalaisetAsiakkaat = from c in entities.Customers where c.Country == "Finland" orderbyc.CompanyName select c; foreach (var asiakas in suomalaisetAsiakkaat) { int tilausmäärä = asiakas.Orders.Count; // muuta käsittelyä... }
Visual Studio 2013 ja Blend • Visual Studio ja Blend ovat työvälinepari, joita kumpaakin tarvitset Windows 8 -sovellusten kehittämiseen • Välineet on suunniteltu niin, että niiden yhteiskäyttö on vaivatonta • Kun olet avannut Windows 8 -sovelluksen Visual Studioon, voit helposti siirtyä muokkaamaan mitä tahansa XAML-tiedostoa Blendiin • Helpoiten tämä onnistuu Visual Studion Solution Explorer -ikkunan kautta, jonka pikavalikosta voit valita komennon ”Open in Blend”.
Versionhallinnan käsite • Versionhallinta on olennainen osa mitä tahansa ohjelmistoprojektia • Versionhallinnan avulla useamman kehittäjän yhtäaikaiset muutokset pysyvät järjestyksessä • Tarvittaessa jo kertaalleen muutettu tai poistettu ohjelmakoodi saadaan palautettua takaisin • Versionhallintajärjestelmien perusteiden hallinta on hyvä taito kaikille ohjelmistokehittäjille
Microsoftin ratkaisu • Visual Studio toimii hyvin yhteen valmistajan oman versionhallintapalvelun kanssa • Palvelun nimi on Team Foundation Service, lyhyesti TFS • Palvelu on pilvipalvelu, jota käytetään suoraan Visual Studiosta tai web-selaimella
TFS:n käyttö Visual Studiosta • Rekisteröityessäsi TFS-pilvipalveluun voit valita palvelulle haluamasi nimen • Tästä nimestä muodostuu sinulle varatun palvelun internet-osoite, jonka Visual Studio haluaa tietää • Yhdistäminen tehdään Visual Studion Team Explorer -ikkunan kautta • Kun yhdistäminen on kerran tehty, voit käyttää versionhallintaan jatkossakin ilman eri määrityksiä
CodePlex-palvelu • CodePlex on kaikille avoin web-palvelu, jossa voidaan kehittää avoimen lähdekoodin ratkaisuja yhteisöllisesti • CodePlex-palveluun kuuluu TFS-pohjainen versionhallinnan kevytversio • CodePlex-palvelulla on kymmeniä tuhansia aktiivisia käyttäjiä, ja sieltä löydätkin monia mielenkiintoisia projekteja
XAML-vinkkejä • Windows 8 -sovellusten käyttöliittymien kuvaamiseen käytetään XAML-kieltä • Kielen ominaisuuksien hyvä hallinta auttaa kehittämään parempia sovelluksia nopeammin • Seuraavassa esitetään kolme vinkkiä parempaan XAML-ohjelmointiin
Komponenttien marginaalit • Monien käyttöliittymäkomponenttien sijainti ja koko määritellään Margin-nimisellä ominaisuudella • Margin-ominaisuuden arvot ovat suhteellisia, ja riippuvat siitä minkä toisen komponentin sisällä toinen komponentti on
Esimerkki • XAML-koodissa marginaalit voidaan määritellä esimerkiksi näin:<RectangleMargin="7,7,40,20" /> • Margin-ominaisuuden muodostaa neljä lukua, jotka edustavat komponentin kunkin reunan etäisyyttä äiti-elementin reunoista • Lukujen järjestys on vasen, ylä, oikea, ala
Sopimukset (engl. contracts) • Windows 8 -sovellukset voivat käyttää niin sanottuja sopimuksia kytkeytyäkseen osaksi käyttöjärjestelmän toimintoja • Sopimusten avulla käyttöjärjestelmä ja sovelluksesi (tai muut sovellukset) voivat vaihtaa tietoja keskenään • Näin tiettyjä perustoimintoja ei tarvitse toteuttaa jokaisessa sovelluksessa erikseen
Haku-sopimus • Yksi esimerkki tällaisesta kytkeytymisestä on Windows-käyttöjärjestelmän hakutoiminto • Haku-sopimuksen avulla sovelluksesi sisältämät tiedot tulevat mukaan hakutuloksiin, kun käyttäjä hakee tietoja käyttöjärjestelmän omalla hakutoiminnolla • Sisältö voi olla tekstiä, kuvia, videoita, jne.
Sovellusten lokalisointi • Kun kehitettävä Windows 8 -sovellus tai peli on sellainen, että sitä voitaisiin käyttää myös Suomen rajojen ulkopuolella, on pohdittava, pitäisikö sovelluksen käyttöliittymä kääntää eri kielille • Windows 8 -sovellukset voidaan pienellä vaivalla kääntää useille kielille
Kääntämisen kaksi osa-aluetta • Kääntämiseen liittyy kaksi eri asiaa, joista käytetään nimityksiä lokalisaatio ja globalisaatio (engl. localization, globalization) • Lokalisaatio • Sovelluksen kääntämistä ja sovittamista kohdekulttuuriin (esimerkiksi värimaailma ja ikonit, pelien sanaleikit, ja niin edelleen) • Globalisaatio • Suomen-tai englanninkielinen sovellus ohjelmoidaan tukemaan erilaisia päivämäärä-, valuutta- ja lukujen desimaalierottimia ilman, että käyttöliittymän tekstejä käännetään
Ohjelmallinen selvittäminen • Ohjelmakoodissa voit selvittää käyttäjän valitseman kielen sekä käyttöjärjestelmän kielen • Kirjastoluokat • Windows.Globalization.Language • System.Globalization.CultureInfo
Esimerkki string näppäimistö = Windows. Globalization.Language. CurrentInputMethodLanguageTag; string käyttöjärjestelmä = System. Globalization.CultureInfo. CurrentCulture.Name;
Käyttöliittymän kääntäminen • Käyttöliittymän kääntämiseen eri kielille kannattaa käyttää niin sanottuja resurssitiedostoja (engl. resourcefiles) • Ajatuksena on, että vaikkapa TextBlock- ja Button-komponenttien näyttämää tekstiä ei kirjoiteta suoraan xaml-koodiin, vaan tekstit syötetään kullekin kielelle tarkoitettuun resurssitiedostoon • Resurssitiedostot tunnistaa Visual Studion Solution Explorer -ikkunassa .resw-tiedostopäätteestä
Resurssitiedostojen tallennuspaikka • Resurssitiedostot tallennetaan Strings-nimiseen alikansioon projektissa • Kansio on luotava tarvittaessa itse • Tämän kansion alle perustetaan edelleen alikansioita kutakin kielikoodia varten • Kielikoodit ovat muotoa ”xx-XX” • Esimerkiksi suomenkielisellä sovelluksella alikansion nimi on ”fi-FI”
Resurssitiedostojen muokkaus • Resurssitiedostoja muokataan Visual Studiossa Excelin kaltaisessa taulukossa, jossa vasemmalla on niin sanottu avain (engl. key) ja oikealla arvo (value) • Leikepöydän kautta tiedot voidaan tarvittaessa viedä Exceliin, jolloin tiedoston voi lähettää vaikkapa käännöstoimistoon käännettäväksi • Avain muodostuu kahdesta osasta, ensin halutusta yksilöivästä nimestä (esimerkiksi komponentin nimi) ja tämän jälkeen pisteellä erotetusta ominaisuuden nimestä, joka halutaan lokalisoida • Esimerkiksi ”Nappi.Content”
Lokalisoitu XAML-määritys • Jotta lokalisointi resurssitiedostojen kautta saataisiin toimimaan, määritellään kullekin käyttöliittymäkomponentille niin sanottu Uid-attribuutti • Huomaa, että XAML-koodiin voidaan jättää alkuperäinen määritys kuten vaikkapa painikkeen (engl. button) ruudulla näyttämä teksti • Kun sovellusta ajetaan, käyttöjärjestelmä hakee resurssitiedostosta käyttäjän kielen mukaisen tekstin, ja korvaa XAML-koodissa olleen arvon automaattisesti
Esimerkki Uid-arvo <Button x:Uid="OmaNappi" Content="Painike" /> Lokalisoitava ominaisuus Name-ominaisuudesta saadaan selville mitä komponenttia arvo koskee (Uid-arvo) sekä mikä ominaisuus tulisi lokalisoida.Muoto on ”komponentti.ominaisuus”.
Tehtäviä • Keksi esimerkkejä tilanteista, joissa asynkronisuudesta on apua Windows 8 -sovelluksissa. • Blend sopii Windows 8 -sovellusten graafisten ominaisuuksien kehittämiseen, mutta se ei kuitenkaan ole kuvankäsittelyväline. Selvitä, mitä yleisiä tiedostomuotoja Blend tukee grafiikan tuomiseksi muista sovelluksista, esimerkiksi Photoshopista. • Perusta ystäviesi, koulukavereittesi tai kollegoittesi kanssa avoimen lähdekoodin projekti CodePlexiin, ja jakaa sen kautta lähdekoodia koko maailmalle. Mitä havaintoja teit?
Kysymyksiä ja vastauksia 1 LINQ-kyselykieli vaikuttaa mielenkiintoiselta. Mihin kaikkeen sitä voi käyttää? • Lyhyesti sanottuna LINQ-kyselykieli ja siihen liittyvät kirjastot ovat hyvin monipuolisia ja soveltuvat moneen käyttötarkoitukseen. • Kun aiemmista esimerkeistä kävi ilmi, voit käyttää LINQ-kieltä hakeaksesi, suodattaaksesi (engl. filter) ja lajitellaksesi tietoa monesta eri lähteestä. • Tällaisia lähteitä ovat esimerkiksi sovelluksesi sisäiset oliot (kuten taulukot ja listat), sql-tietokannat, xml-tiedostot ja niin edelleen.
Kysymyksiä ja vastauksia 2 Yritän käyttää C#-kielen await-avainsanaa, mutta kääntäjä ilmoittaa virheestä siinä metodissa, jossa await-avainsana on? • Mitä todennäköisimmin virhe johtuu siitä, että olet unohtanut async-avainsanan itse metodin määrittelystä. • Jos olet määritellyt metodin esimerkiksi ”privatevoidButton_Click”, sinun pitää lisätä async-avainsana private-sanan jälkeen: ”privateasyncvoidButton_Click”.