Visual Studion kääntäjävaihtoehdot, osa 2: Vaihtoehtojen tiukat

Tämä on toinen sarjassa, jossa määritetään kääntäjävaihtoehtoja Visual Studio VB.NET -projekteille, versiot 2005-2010. Pääset ensimmäiseen kappaleeseen täältä. Kääntäjä-asetukset ovat projektitason asetuksia, jotka määrittävät kuinka kääntäjä toimii, kun se koottaa koodisi. Voit tarkastella ja asettaa kääntäjävaihtoehtoja projektiominaisuuslehden Käännä-välilehdellä, kuten kuvassa A näkyy. Tässä toisessa osassa käsittelen vaihtoehtoa tiukkaa.

Kuvio A

Mitä se tarkoittaa

Option Strict on yksi kytkin, päälle tai pois. Se määrittelee, vaatiiko VB.NET tyyppi-ilmoituksia, ja asettaa tietyt rajoitukset implisiittisille muuntamisille. Visual Studiossa 2005 ja 2008 se on melko yksinkertainen; vuoden 2010 kanssa se muuttuu hieman monimutkaisemmaksi. Tässä on yhteenveto siitä, kuinka kääntäjä toimii, kun Vaihtoehtojen tiukka -asetuksena on Käytössä:

  1. Edellyttää tyyppi-ilmoitusten ilmoittamista kaikille muuttujille, vakioille, rutiiniparametreille ja funktion palautusarvoille, soveltamisalasta riippumatta, paitsi jos : Vuonna 2010 Option Infer -asetuksena on On, jolloin tyyppiehdotukset vaaditaan vain rutiiniparametreille, toiminnon palautusarvoille ja muuttujat paikallisen laajuuden ulkopuolella.
  2. Estää myöhäisen sidonnan .
  3. Vuonna 2010 estää implisiittisiä muuntamisia Objektiin .

Keskustelemme vaihtoehdosta Infer tässä kevyesti pitääksemme asiat selkeinä, mutta käsittelemme sitä yksityiskohtaisemmin osassa 3.

Tyyppi-ilmoitukset

VB: ssä tyyppilmoitus on yksinkertaisesti As-lause, jolla määrität tietotyypin. Visual Basic on heikosti kirjoitettu kieli, joten ellet sano VS: lle toisin, se antaa sinun koodittaa mielellään ilmoittamatta tyyppejä, kuten olen tehnyt täällä:

 Dim MysteryVariable = 22205-7509 

Millaisia ​​tietoja salaperäinen muuttuja sisältää? Onko se numero, merkkijono vai jotain muuta? Se ei ole selvää, ja asettamalla Optio Tiukka -asetukseksi Pois käytöstä sanot, että sillä ei ole merkitystä. Jos kääntäjä päättää, että se on numero, se on minusta hyvä. Ja jos se päättää, että se on merkkijono, niin sekin sopii minulle. Ja päättäkää, se tekee parhaan arvauksensa, ja tallentaa sen tällä tavalla. Tätä kutsutaan implisiittiseksi kirjoittamiseksi tai tyypin päättelyksi ; kääntäjä päättelee tiedoista, mikä on tyyppi. Näin VB.NET käyttäytyy, kun Optio Tiukka -asetus on Ei käytössä.

Asettaaksesi vaihtoehdon Rajoitettu Päälle pakottaa ilmoittamaan muuttujatyypit ennen niiden käyttöä, kuten:

 Dim PostalCode nimellä merkkijono = "22205-7509" 

Nyt kääntäjä ei saa päättää, mikä se on. Olen sanonut sen. Se on merkkijono.

Kuten edellä mainittiin, VS 2010 antaa sinun lieventää tätä rajoitusta huomattavasti ottamalla käyttöön Optio-ohjeen. Vaihtoehtojen tiukka = Päällä versioissa VS 2005 ja 2008 vastaa tarkalleen vaihtoehtoa Tiukka = Päällä + Vaihtoehto Infer = Pois vuonna 2010. Kun Vaihtoehto Infer = Päällä, kääntäjä käyttäytyy ikään kuin Optio Tiukka = Pois kaikille rutiineissa oleville muuttujille ja vakioille. Vuonna 2012, kun Vaihtoehto-asetukseksi on asetettu Ei, "Dim MysteryVariable = 22205-7509" on täysin laillinen missä tahansa rutiinissa.

Toinen tapa kuvata tätä rajoitusta (ja tapaa, jolla se selitetään MSDN: ssä) on sanoa, että se rajoittaa muunnokset laajentuneisiin konversioihin . Tämä tarkoittaa yksinkertaisesti, että kääntäjä antaa sinun kiinnittää pienen muuttujan suureen muuttujaan, mutta ei päinvastoin, toivottavasti ilmeisistä syistä. Seuraava (laajeneva muuntaminen) on sallittu:

 Himmennä SmallNumber kokonaislukuna = 1 

Himmennä BigNumber niin kauan = 2

BigNumber = SmallNumber

Seuraava (kaventava muuntaminen) ei ole:

 Himmennä SmallNumber kokonaislukuna = 1 

Himmennä BigNumber niin kauan = 2

SmallNumber = BigNumber

Ilman tätä rajoitusta jokainen muuttuja alkaa objektina, jolloin potentiaalisesti jokaisesta tehtävästä tulee kapeneva muuntaminen, jossa tietojen häviäminen voi tapahtua helposti.

Tämä rajoitus vastaa varoituskokoonpanoa, jonka nimi on "implisiittinen muuntaminen" (katso kuva A). Kun Vaihtoehtojen tiukka -asetuksena on Päällä, "implisiittinen muuntaminen" -asetuksena on Virhe.

Myöhäinen sitominen

Myöhäinen sitominen tarkoittaa ominaisuuden tai menetelmän käyttöä muuttujalla, jonka tyyppi on Objekti. Toisin sanoen, kun oletetaan, että tiedät mitä muuttuja on, kun et todellakaan voi taata olevansa oikeassa. Tässä on esimerkki myöhässä sidotusta puhelusta (MysteryVariablessa):

 Dim MysteryVariable As Object = "22205-7509" 

Dim MysteryVariablePituus kokonaislukuna

MysteryVariableLength = MysteryVariableLength

MysteryVariable on objekti, mikä tarkoittaa, että se ei sisällä tietoa "22205-7509", se vain pitää osoittimen tietoihin. Siten datan tyyppi (merkkijono, kokonaisluku tai mikä tahansa) on tuntematon kokoamishetkellä. Siksi kääntäjälle ei ole mitään keinoa tietää, onko MysteryVariablella jopa Pituus-ominaisuus. Joten kun Vaihtoehtojen tiukka -asetuksena on Käytössä, kääntäjä ei anna sinun koodata sitä tällä tavalla. Se haluaa tietää, onko MysteryVariablella sellainen ominaisuus, ennen kuin se antaa sinun kirjoittaa kyseinen rivi. Vaihtoehto Tiukka = Päällä tarkoittaa, että myöhäinen sidonta ei ole sallittua.

Tämä rajoitus vastaa varoituskokoonpanoa, jonka nimi on "Myöhäinen sitominen; puhelu voi epäonnistua suorituksen aikana" (katso kuva A). Kun Vaihtoehtojen tiukka -asetuksena on Käytössä, "Myöhäinen sidonta; puhelu voi epäonnistua suorituksen aikana" asetetaan Virhe-arvoon.

Implisiittiset tulokset objektiin

Epäsuora muuntaminen objektiin tapahtuu aina, kun kääntäjä ei voi kertoa, onko muuttuja muu kuin objekti. Tämä rajoitus (osana Optio-tiukkaa) koskee vain VS 2010: tä, mutta pääasiassa asioiden käsittelemiseen, kun Optio-aloitus on pois päältä, koska silloin sinulla voi olla muuttujia ilman, että tyyppilmoitusta muutetaan implisiittisesti Objektiin.

Tämä rajoitus vastaa varoituskokoonpanoa, jonka nimi on "implisiittinen tyyppi; esine oletetaan". Kun Option Strict -asetuksena on On, "implisiittinen tyyppi; objekti oletetaan" -asetuksena on Error.

Viimeinen kohta: Vaihtoehtoinen tiukka = Päällä tarkoittaa muuttujan ilmoituksia, joten jos vaihtoehdon tiukka on Käytössä, niin on vaihtoehto Suoritettu.

Miksi se on tärkeää

Suurin vaara tyyppiilmoituksen ohittamisessa on arvaamaton käyttäytyminen . Kun muuttujilla ei ole nimenomaista tyyppiä, ajonaika on johdettava niiden tyypistä, mikä tarkoittaa, että niiden tyyppi määritetään niiden sisältämien arvojen perusteella. Arvoilla, kuten "22205-7509", joudutaan tekemään kääntäjän versio koulutetusta arvauksesta. Se voi edustaa postinumeroa tai yhtälöä tai ehkä jopa aluetta, mutta joka tapauksessa et voi tietää etukäteen, kuinka kääntäjä hallitsee tätä. Se päättää mieltään, kun se saa tiedot. Ja jos se päättää, että arvo on merkkijono, se laskee arvon sellaisenaan ja palauttaa arvon "22205-7509". Jos se päättää, että se on yhtälö, se vähentää 7, 509 22, 205: stä ja palauttaa 14 696. On vaikea kuvitella ohjelmaa, joka haluaisi sellaista ennakoimattomuutta - ellei ohjelman koko päämäärä ole odottamattomien tulosten tuottaminen!

Tällaiset ongelmat voivat helposti piiloutua pienten hienousten taakse. Kahdessa seuraavassa rivissä kääntäjä heittää ensimmäisen merkkijonona ja toisen kokonaislukuna, kaikki riippuen siitä, käytetäänkö lainausmerkkejä:

 Dim PostalCode1 = "22205-7509" 

© Copyright 2020 | mobilegn.com