Automatikus típuskonverzió

Korábban már láttuk, hogy a PowerShell megpróbálja automatikusan megváltoztatni az objektumok típusát, ha szükséges, a minél kényelmesebb, egyszerűbb parancsbevitel érdekében:

[1] PS I:\>1+2.0+"3"

6

[2] PS I:\>(1+2.0+"3").GetType().FullName

System.Double

Az [1]-es promptban látszik, hogy össze tudok adni egy egész számot, egy lebegőpontos számot egy „szöveg” formátumú számmal anélkül, hogy nekem kellene típuskonverziót végezni. A PowerShell ezt helyettem elvégzi. Megnézi, hogy a művelet tagjait vajon át lehet-e alakítani olyan típusra, amellyel egyrészt a művelet elvégezhető, másrészt nem történik adatvesztés. Erre a célra ebben az esetben a System.Double típus alkalmas, így a PowerShell minden tagot erre konvertál, illetve a végeredményt is ilyen formában adja meg.

Ez nem csak a matematikai műveletekre igaz, hanem az összehasonlításokra is:

[12] PS I:\>15 -eq 15d

True

[13] PS I:\>15.0 -eq 15d

True

[14] PS I:\>15 -eq "15"

True

[15] PS I:\>(15).GetType().FullName

System.Int32

[16] PS I:\>(15d).GetType().FullName

System.Decimal

[17] PS I:\>(15.0).GetType().FullName

System.Double

[18] PS I:\>("15").GetType().FullName

System.String

Azaz az egyenlőségvizsgálat (-eq) nem alkalmas arra, hogy a nem egyforma típusú objektumokat kiszűrhessük segítségével, hiszen a PowerShell típuskonverziót végezhet. Részletesebben az összehasonlítási lehetőségekkel az 1.4.3 Összehasonlító operátorok fejezetben foglalkozom.

Az automatikus típuskonverziónál fontos észben tartani, hogy a kifejezések szigorúan balról jobbra értékelődnek ki, így nem mindegy, hogy milyen sorrendben adjuk meg a műveleteink paramétereit:

[20] PS C:\> 1+"2"

3

[21] PS C:\> "2"+1

21

A [20]-as sorban először egy int típusú számmal találkozik a parancselemző, ehhez próbálja hozzáigazítani a szöveges formátumban megadott „2”-t és így végzi el a műveletet, amelynek eredménye 3 lett.

A [21]-es sorban a szöveges „2”-höz igazítja az 1-et, amit szintén szöveggé alakít, és a két szöveg összeadásának, azaz összeillesztésének eredményét adja meg, ami „21” lett. Láthatjuk, hogy ennek eredménye tényleg sztring típusú:

[22] PS C:\> ("2"+1).gettype().fullname

System.String



Word To HTML Converter