Konwersja typu

Konwersja typu, zmiana typu (zmiennej w odwołaniu, wyrażenia), rzutowanie typu, przekształcenie typu – konstrukcja programistyczna umożliwiająca traktowanie danej pewnego, konkretnego typu, jak daną innego typu[1], lub taką zmianę tej danej albo jej reprezentacji w pamięci operacyjnej, aby wartość tej danej, odpowiadała według przyjętych kryteriów odwzorowania, danej innego, wybranego typu[2]. Pojęcie konwersji odnosi się także do sytuacji wyboru, rzutowania danych, które nie posiadają przypisanego typu, na wybrany, konkretny typ, celem interpretacji tych danych.

Zastosowanie konwersji typu

W językach programowania wartości, dane (reprezentowane np. przez literał, wyrażenie, a w szczególności zmienną, parametry itd.), mogą mieć przypisane różne atrybuty, w szczególności w większości języków programowania, typ danych. Fizyczną reprezentacją danych jest jednak ciąg bitów, a atrybuty przypisane danej, decydują między innymi o tym:

  • jak długi ciąg bitów stanowi określoną daną,
  • w jaki sposób jest interpretowany ciąg bitów określonej długości, stanowiący rozpatrywaną daną; ten sam ciąg bitów może być interpretowany zarówno jako liczba, łańcuch znaków, wartość logiczna itd.[a]

W programowaniu często istnieje konieczność wykonania wspólnej operacji na danych różnych typów i różnych innych atrybutów danej. Pojawia się również konieczność traktowania danej pewnego typu jak danej innego typu, oraz jak wyżej wspomniano nadanie interpretacji danym, które nie mają przypisanego typu. Realizacja wymienionych zagadnień wymaga stosowania konwersji typu.

Rodzaje konwersji

Konwersje typu mogą być rozróżniane według rozmaitych kryteriów podziału.

  • Podział ze względu na sposób specyfikacji:
    • jawne,
    • ukryte (automatyczne).
  • Podział według konstrukcji programistycznej:
  • Podział według sposobu realizacji:
    • konwersje bez zmiany sposobu reprezentacji danej w pamięci i rozmiaru danej – tylko zmiana interpretacji,
    • konwersje ze zmianą atrybutu rozmiaru danej, bez zmiany sposobu interpretacji danej,
    • konwersje ze zmianą sposobu reprezentacji bez zmiany interpretacji danej,
    • konwersje ze zmianą sposobu interpretacji danej.
  • Podział ze względu na utratę (części) informacji:
    • konwersje bez utraty informacji,
    • konwersje z częściową utratą informacji.

Języki programowania

W językach programowania są stosowane różne rozwiązania:

  • konwersje mogą być zbędne, interpretacja danej następuje w określonym kontekście według narzuconego klucza – języki operujące tylko prostymi, beztypowymi[b] danymi, np. tylko słowem, bajtem itp.: PL/M[3], BCPL[1], Bliss[1], Forth[4], ewentualne konwersje w tych językach ograniczają się do rozszerzania mniejszych danych do rozmiaru większych danych, np. danej bajtowej do dwu bajtowej (słowowej do dwusłowowej[4]),
  • konwersje mogą być niedopuszczalne,
  • konwersje mogą być dopuszczalne w określonym zakresie – wymagane jest jawne specyfikowanie konwersji,
  • konwersje mogą być dopuszczalne w określonym zakresie oraz pewne konwersje mogą być wykonywane automatycznie – większość uniwersalnych języków programowania, np. C[5], C++[6], Pascal[7][8] itd.
  • konwersje wykonywanie automatycznie, użycie danej określonego typu dopuszczalne w każdym kontekście, np. PL/1[c][9], Snobol[10].

Konstrukcje programistyczne

Konstrukcje programistyczne dotyczące wykonania konwersji typu, są elementami występującymi w kodzie źródłowym, w konkretnym języku programowania. To jakie konstrukcje są dopuszczalne wynika z przyjętych przez autorów język bądź implementacji danego języka, rozwiązań w zakresie składni i jego realizacji.

Konwersje niejawne

Konwersje niejawne są generowane przez translator. Programista kodując określony algorytm nie musi zajmować się zapisem takich konwersji; wystarczy, że jest świadomy sposobu ich wykonania przez środowisko programistyczne oraz efektów i skutków jakie wykonanie danej konwersji przyniesie. W kodzie źródłowym konwersja taka nie ma jakiegokolwiek odzwierciedlenia w tekście kodu.

Przykładem konwersji niejawnych-automatycznych, są konwersje – w językach C[5][6], C++[6], Python[11] i innych – typów arytmetycznych dokonywane automatycznie i niejawnie w wyrażeniach. Jeżeli w wyrażeniu występują wartości o różnych typach arytmetycznych, stosuje się zasadę, że operandy typów o mniejszych rozmiarach są przekształcane do typów o większych rozmiarach. Pozwala to na używanie w jednym wyrażeniu danych typów, np. char, int, long, single, double itd.[d].

Konwersje wymuszone

Konwersja danej może zostać wymuszona przez programistę, przy zastosowaniu istniejącego w języku lub implementacji mechanizmu automatycznej konwersji. Przykładem wymuszenia konwersji w języku JavaScript[12] jest umieszczenie w kodzie zapisu: „"+3. Użycie łańcucha pustego w operacji konkatenacji nie zmienia wartości łańcucha wynikowego, ale ponieważ dana reprezentowana przez literał liczbowy 3 reprezentuje całkowity typ danych, następuje wymuszone przekształcenie tej liczby na łańcuch.

Operatory konwersji

Operator umożliwia jawny zapis konwersji w kodzie źródłowym zgodnie z zasadami składni danego języka. Operatory konwersji dostępne są między innymi w takich językach jak:

  • język C[5][6], C++[6]; (typ_docelowy)wyrażenie, lub typ_docelowy(wyrażenie), np. (int)znaki, lub int(znaki),
  • PHP[13]; (typ_docelowy)wyrażenie,
  • JavaScript[12]; typ_docelowy(wyrażenie),

Podprogramy

Największe możliwości w zakresie konwersji dają podprogramy, w których można definiować różne odwzorowania, nawet dla dwóch wybranych, tych samych typów. W językach istnieją podprogramy wbudowane dla podstawowych konwersji. Także biblioteki programistyczne oferują podprogramy standardowe w tym zakresie. Największą zaletą tej metody jest możliwość definiowania własnych odwzorowań przez programistę.

Podprogramy wbudowane dostępne są m.in. w:

Referencja

Mechanizm ten oparty jest na wskazaniach tego samego obszaru pamięci przez różne zmienne wskaźnikowe, oparte na różnych typach bazowych.

 Osobny artykuł: Referencja (informatyka).

Inne, odrębne konstrukcje

W niektórych językach operacja konwersji jest odrębną kategorią jednostek składniowych, nie zaliczaną ani do operatorów, ani podprogramów, ani innych typowych konstrukcji. Tak jest np. w Turbo/Borland Pascalu[8], mimo że sam literalny zapis konwersji w kodzie źródłowym może mieć postać identyczną jak operator konwersji znany z języka C, tj.

 typ(zmienna)
 typ(wyrażenie)

np.

integer(znak)

Inne, analogiczne konstrukcje

Znaczącą analogię do konwersji typu, jako zmiany interpretacji danej bez zmiany jej reprezentacji, można dostrzec w odniesieniu do nakładania zmiennych. Mamy tu do czynienia z interpretacją danej zawartej w pewnym obszarze przynależnym do wielu zmiennych nałożonych na ten obszar pamięci, według różnych typów przypisanych do poszczególnych zmiennych.

Przykład w języku Turbo Pascal[8]:

var znak:char;
    kod:byte absolute znak;
 Osobny artykuł: Zmienna nakładana.

Inną, podobną analogię można dostrzec w odniesieniu do pól unii i pól pojedynczego wariantu w rekordzie z wariantami.

 Osobny artykuł: Unia (programowanie).
 Osobny artykuł: Rekord z wariantami.

Porównanie konstrukcji

Poniżej pokazany jest trywialny przykład konwersji danej znakowej na daną liczbową w języku Pascal, dla środowiska Turbo Pascal.

Porównanie różnych konstrukcji w Turbo Pascalu[e]
forma konwersji przykład
jawna konwersja typu
var znak:char;
    liczba:byte;
begin
  znak:='1';
  liczba:=byte(znak);
  { wypisanie liczby 49 }
  writeln(liczba)
end.
podprogram standardowy Ord
var znak:char;
    liczba:byte;
begin
  znak:='1';
  liczba:=Ord(znak);
  { wypisanie liczby 49 }
  writeln(liczba)
end.
podprogram standardowy Val
var znak:char;
    liczba:byte;
begin
  znak:='1';
  Val(znak, liczba);
  { wypisanie liczby 1 }
  writeln(liczba)
end.
referencja
var znak:char;
    liczba:^byte;
begin
  znak:='1';
  liczba:=Ptr(znak);
  { wypisanie liczby 49 }
  writeln(liczba^)
end.
nakładanie zmiennych
var znak:char;
    liczba:byte absolute znak;
begin
  znak:='1';
  { wypisanie liczby 49 }
  writeln(liczba)
end.
rekord z wariantami
var konwersja=record
      case integer of
        znak:char;
        liczba:byte;
    end;
begin
  with konwersja do
    begin
      znak:='1';
      { wypisanie liczby 49 }
      writeln(liczba)
    end
end.

Zobacz też

Uwagi

  1. Abstrahując od sensu merytorycznego takiej interpretacji.
  2. W językach tych nie istnieje pojęcie typu, co najwyżej rozmiar danej, a jej interpretacja zależy od kontekstu.
  3. W Snobolu przekształcenia takie wiążą się z przetwarzaniem łańcuchów, na które ukierunkowano ten język.
  4. W wielu językach pojęcie typu obejmuje nie tylko rodzaj zapisanej danej, ale jej wielkość, np. w języku C i pokrewnych, dane typu single i double są typu zmiennoprzecikonwego, lecz definicja języka traktuje te dane, jak dane osobnych typów; jedynie niejawna konwersja pozwala na swobodne, wspólne używanie danych tych typów łącznie i zamiennie w wyrażeniach.
  5. Przyjęto, że w danym systemie komputerowym obowiązuje tabela kodów znaków ASCII.

Przypisy

  1. a b c Michael Marcotty, Henry Ledgord: W kręgu języków programowania. Krystyna Jerzykiewicz (tum.). Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.).
  2. John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.).
  3. Jan Bielecki: PL/M język programowania mikroprocesorów. Warszawa: Wydawnictwa Komunikacji i Łączności, 1987, seria: Elektronizacja. (pol.).
  4. a b Jan Bielecki: Język FORTH. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Mikrokomputery. ISBN 83-204-0930-6. (pol.).
  5. a b c Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.).
  6. a b c d e Jan Bielecki, Od C do C++, programowanie obiektowe w języku C, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, ISBN 83-204-1332-X.
  7. Michał Iglewski, Jan Madey, Stanisław Matwin, Pascal. Język wzorcowy – Pascal 360., Wydawnictwa Naukowo-Techniczne, Warszawa 1984, wydanie trzecie – zmienione, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-0597-1.
  8. a b c Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., seria: Biblioteka Użytkownika Mikrokomputerów ISBN 83-85060-53-7, ISSN 0867-6011.
  9. a b Jan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, ISBN 83-01-06146-4.
  10. Paweł Gizbert-Studnicki, Jerzy Kaczmarczuk, Snobol4, Wydawnictwa Naukowo-Techniczne, Warszawa 1984, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-0546-7.
  11. a b Marcin Owsiany, Python scripting language a obliczenia i symulacje, czerwiec 2001 r.
  12. a b Wojciech Romowicz, HTML i JavaScript, HELION 1998 r., ISBN 83-7197-046-3.
  13. Mateusz (luinnar) Juściński, PHP Konwersja i rzutowanie typów.
  14. Ryszard K. Kott, Krzysztof Walczak, Programowanie w języku Fortran 77, Warszawa: Wydawnictwa Naukowo-Techniczne, 1991, ISBN 83-204-1362-1, OCLC 749999902.

Read other articles:

Massa udara adalah volume udara yang ditentukan oleh suhu dan kandungan uap air. Massa udara menyebar sepanjang ratusan atau ribuan kilometer dan beradaptasi dengan permukaan di bawahnya. Massa udara diklasifikasikan menurut garis lintang dan wilayah daratan atau lautan. Massa udara yang dingin disebut kutub atau artik, sedangkan massa udara yang lebih hangat disebut tropis.Massa udara Klasifikasi Klasifikasi Bergeron adalah bentuk klasifikasi massa udara yang paling diterima secara luas.[...

 

Stir fried water spinachTumis kangkung disajikan di Makassar, IndonesiaNama lainTumis kangkung, cah kangkungSajianUtamaTempat asalAsia Tenggara, Asia Timur, dan Asia SelatanDaerahIndonesia, Malaysia, Filipina, Singapura, Vietnam, China Selatan, Sri Lanka, Bangladesh, India Timur dan KambojaSuhu penyajianpanasBahan utamaKangkung  Media: Stir fried water spinach RESEP TUMIS KANGKUNG Kangkung tumis atau kadang disebut tumis kangkung atau cah kangkung adalah hidangan sayur tumis yang laz...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (يونيو 2018) جوشوا بواتسي معلومات شخصية الميلاد 14 مارس 1993 (30 سنة)  أكرا  الطول 1.85 متر  الجنسية المملكة المتحدة  الحياة العملية المهنة ملاكم[1]  نوع الرياضة ا

Sturm, Ruger & Company, Inc. ЛоготипТип Публічна компаніяФорма власності акціонерне товариствоГалузь оборонне виробництвоСпеціалізація Вогнепальна зброяЛістинг на біржі NYSE: RGRS&P 600 КомпонентЗасновано 1949; 74 років тому (1949)Засновник(и) Вільям Б. Ругер, Олександр Макк...

 

Поліна Кондаурова Загальна інформаціяГромадянство  РосіяНародження 4 червня 1988(1988-06-04) (35 років)Нікополь, Українська РСР, СРСРЗріст 176 смВага 48 кгСпортВид спорту художня гімнастикаКлуб школа ДерюгінихТренери Ірина Дерюгіна,Альбіна Дерюгіна Участь і здобутки Нагороди...

 

  Marasmiaceae Marasmius rotulaTaxonomíaReino: FungiSuperdivisión: DikaryaDivisión: BasidiomycotaSubdivisión: AgaricomycotinaClase: AgaricomycetesSubclase: AgaricomycetidaeOrden: AgaricalesFamilia: MarasmiaceaeRoze ex KühnerSinonimia Omphalotaceae Bresinsky 1985 [editar datos en Wikidata] Marasmiaceae es una familia de hongos basidiomicetos del orden Agaricales. Esta familia contiene 54 géneros y 1.590 especies. La familia Omphalotaceae, descrita por A. Bresinsky en 1985[...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (ديسمبر 2020) نور الشيطانThe Devil's Light (بالإنجليزية) معلومات عامةالصنف الفني فيلم رعب خارق للطبيعة — فلم شيطاني تاريخ الصدور 8 يناير 2020 27 أكتوبر 2022[1] (المجر) مدة العرض 93 د...

 

This article is part of a series on thePolitics of Switzerland Constitution Human rights Federal Council Members (by seniority) Alain Berset (President) Guy Parmelin Ignazio Cassis Viola Amherd (Vice President) Karin Keller-Sutter Albert Rösti Élisabeth Baume-Schneider Federal Chancellor Walter Thurnherr Federal administration Federal Assembly Council of States (members) National Council (members) Political parties Elections Voting Elections 1848 1851 1854 1857 1860 1863 1866 1869 1872 1875...

 

Australian rules footballer Australian rules footballer Bill HoskingPersonal informationFull name Bill HoskingDate of birth (1940-07-19)19 July 1940Original team(s) Ballarat, Lismore (Vic)Height 178 cm (5 ft 10 in)Weight 74 kg (163 lb)Playing career1Years Club Games (Goals)1962 Geelong 5 (2) 1 Playing statistics correct to the end of 1962. Sources: AFL Tables, AustralianFootball.com Bill Hosking (born 19 July 1940) is a former Australian rules footballer who play...

Peta provinsi di Kamboja Kamboja dibagi menjadi 25 provinsi (ខេត្ត = khet). Provinsi kemudian dibagi menjadi distrik (srok), kemudian dibagi menjadi beberapa kommunion (khum). Daftar provinsi di Kamboja Nama BahasaKamboja Ibu kota ISO Populasi(2019)[1] Banteay Meanchey បន្ទាយមានជ័យ Serei Saophoan KH-1 861.883 Battambang បាត់ដំបង Battambang KH-2 997.169 Kampong Cham កំពង់ចាម Kampong Cham KH-3 899.791 Kampong Chhnang ក...

 

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Fatih TV series – news · newspapers · books · scholar · JSTOR (November 2016) (Learn how and when to remove this template message) Turkish TV series or program FatihWritten byPınar UysalFunda ÇetinDirected byFatih AksoyStarringMehmet Akif AlakurtGam...

 

UK photo agency DemotixType of sitePictures, Videos, News, Journalism, Image SalesHeadquartersLondon, UKOwnerCorbis ImagesCommercialYesLaunchedJanuary 2009 (2009-01) Demotix was a photo agency[1] that enabled freelance photojournalists to license their photos to mainstream media organisations, charities, and stock image buyers.[2] Initially conceived as a free speech platform to allow local journalists to report their own stories to a global audience, the company was...

Extinct family of mammals PalaeonictisTemporal range: 56.2–50.5 Ma PreꞒ Ꞓ O S D C P T J K Pg N Late Paleocene - Early Eocene skull of Palaeonictis occidentalis Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammalia Clade: Pan-Carnivora Order: †Oxyaenodonta Family: †Oxyaenidae Subfamily: †Palaeonictinae Genus: †Palaeonictisde Blainville, 1842 Type species †Palaeonictis giganteade Blainville, 1842 Species †P. gigantea (de Blainville...

 

British TV series or programme Big Star's Little StarGenreGame showCreated byStefan Iriarte and Liz GaskellPresented byStephen MulhernVoices ofJonathan GouldCountry of originUnited KingdomOriginal languageEnglishNo. of series5No. of episodes33 (inc. 1 special)ProductionRunning time60 minutes (inc. adverts)Production company12 YardOriginal releaseNetworkITVRelease4 September 2013 (2013-09-04) –30 December 2018 (2018-12-30) Big Star's Little Star is a British game show tha...

 

1998 book by William S. Pollack Real Boys: Rescuing Our Sons from the Myths of Boyhood Cover of the first editionAuthorWilliam S. PollackCountryUnited StatesLanguageEnglishSubjectBoyhoodPublisherOwl BooksPublication date1998Media typePrint (Paperback)Pages480ISBN978-0805061833 Real Boys: Rescuing Our Sons from the Myths of Boyhood is a 1998 nonfiction book about boyhood and boy culture by clinical psychologist Dr William S. Pollack,[1] in which the author asserts that toxic conce...

17th-century Scottish Presbyterians This article is about the supporters of the 1638 Scottish National Covenant. For the 1949 petition for Scottish home rule, see Scottish Covenant. For the British tank, see Covenanter tank. An example of the flags flown by the Covenanters[1] Covenanters (Scottish Gaelic: Cùmhnantaich) were members of a 17th-century Scottish religious and political movement, who supported a Presbyterian Church of Scotland and the primacy of its leaders in religious a...

 

Non-fiction novel by Isabel Allende This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Paula novel – news · newspapers · books · scholar · JSTOR (March 2023) (Learn how and when to remove this template message) Paula First edition (Spanish)AuthorIsabel AllendeGenreMemoirPublisherSudamericana / Plaza & ...

 

People walking and biking on Franklin Avenue in 2016. The demographics of Minneapolis are tracked by the United States Census Bureau, with additional data gathered by the Minnesota State Demographic Center and the City of Minneapolis itself. Minneapolis is the largest city in the U.S. state of Minnesota and the county seat of Hennepin County. As of the 2020 United States Census, the city's population was estimated to be 429,606. The racial composition of the city is predominantly non-Hispanic...

Loggia del Mercato Nuovo The Loggia del Mercato Nuovo (Italian pronunciation: [ˈlɔddʒa del merˈkaːto ˈnwɔːvo]), popularly known as the Loggia del Porcellino (IPA: [ˈlɔddʒa del portʃelˈliːno]), is a building in Florence, Italy. It is so called to distinguish it from the Mercato vecchio (IPA: [merˈkaːto ˈvɛkkjo]; old market) that used to be located in the area of today's Piazza della Repubblica. History Statue of Michele di Lando, Loggia del Mercato Nuo...

 

Vitrail de l'église de Lalinde représentant saint Front, premier évêque. La liste des évêques de Périgueux, du diocèse éponyme, est établie ci-dessous. Celui-ci est un temps supprimé et son territoire rattaché au diocèse d'Angoulême (29 novembre 1801-1817). Antiquité Représentation de l'évêque Chronope sur un vitrail de la cathédrale Saint-Front. Œuvre de 1873 d'Édouard Didron. Saint Front ? Agnan ? Chronope Ier? vers 356 : Paterne vers 380 : Gavide ve...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!