Ohjelmointikieli – määritelmä, esimerkit ja miten ne toimivat

Tutustu ohjelmointikieliin: määritelmä, käytännön esimerkit (Python, Java, C++) sekä selkeät selitykset, miten ne toimivat ja miksi ne ovat oleellisia ohjelmoinnissa.

Tekijä: Leandro Alegsa

Ohjelmointikieli on eräänlainen kirjoitettu kieli, joka kertoo tietokoneille, mitä tehdä. Esimerkkejä ovat: Python, Ruby, Java, JavaScript, C, C++ ja C#. Ohjelmointikieliä käytetään kaikkien tietokoneohjelmien ja tietokoneohjelmistojen kirjoittamiseen. Ohjelmointikieli on kuin joukko ohjeita, joita tietokone noudattaa tehdäkseen jotakin.

Ohjelmoija kirjoittaa tekstiä ohjelmointikielen lähdekoodiin ohjelmien tekemistä varten. Yleensä ohjelmointikielessä käytetään oikeita sanoja joillekin komennoille (esim. "if... then... else...", "and", "or"), jotta kieli olisi ihmisen helpompi ymmärtää. Kuten missä tahansa tavallisessa kielessä, monissa ohjelmointikielissä käytetään välimerkkejä. Monet ohjelmat käännetään, mikä tarkoittaa sitä, että tietokone muuttaa tai kääntää lähdekoodin toiselle kielelle (kuten assembly-kielelle tai konekielelle), jota tietokone voi lukea mutta jota ihmisen on paljon vaikeampi lukea.

Tietokoneohjelmat on kirjoitettava erittäin huolellisesti. Jos ohjelmoija tekee virheitä tai ohjelma yrittää tehdä jotain, mitä ohjelmoija ei ole suunnitellut, ohjelma saattaa lakata toimimasta, jolloin sitä kutsutaan "kaatumiseksi". Kun ohjelmassa on ongelma, joka johtuu siitä, miten koodi on kirjoitettu, sitä kutsutaan "bugiksi". Hyvin pieni virhe voi aiheuttaa hyvin suuren ongelman.

Miten ohjelmointikielet toimivat

Ohjelmointikielen ohjelmat koostuvat tekstistä, joka on kirjoitettu kielen sääntöjen (syntaksin) ja merkityksen (semantiikan) mukaisesti. Lähdekoodi käy yleensä läpi seuraavat vaiheet ennen kuin tietokone suorittaa sen:

  • Lexing ja parsing: Koodin sanat ja merkit pilkotaan tokeneiksi ja muodostetaan puu (AST), joka kuvaa ohjelman rakennetta.
  • Kääntäminen tai tulkkaus: Joissakin kielissä koodi käännetään suoraan konekoodiksi (esim. C), toisissa se tulkataan riviltä riville (esim. perinteinen Python-tulkki) tai käännetään välikoodiksi/bytecodeksi, jota suorittaa virtuaalikone (esim. Java).
  • Suoritus: Lopuksi konekoodi tai tulkattu käskyketju suoritetaan prosessorilla. Monilla moderneilla alustoilla on myös JIT-käännös (Just-In-Time), joka optimoi suoritusta ajon aikana.

Kielet ja ohjelmointiparadigmat

Ohjelmointikielet voidaan ryhmitellä eri paradigmojen mukaan. Yleisimmät:

  • Proceduraalinen: Ohjelma jaetaan proseduurien eli aliohjelmien sarjaksi (esim. C).
  • Olio-ohjelmointi (OOP): Tieto ja siihen liittyvät toiminnot paketoidaan olioiksi (esim. Java, C#).
  • Funktio-ohjelmointi: Korostaa puhtaita funktioita ja tilattomuutta (esim. Haskell, osittain Scala, myös funktionaalisia piirteitä Pythonissa).
  • Skriptauskielet: Nopeat kehityskielet, usein automaatioon ja web-kehitykseen (esim. JavaScript, Ruby, Python).
  • Deklaratiiviset kielet: Kuvaa mitä halutaan, ei miten se tehdään (esim. SQL, osa logiikkakielistä).

Käännös vs. tulkkaus — mikä ero?

Yksinkertaistettuna:

  • Käännettävät kielet (compiled): Lähdekoodi muunnetaan etukäteen konekieleksi tai välikoodiksi. Tämä voi antaa paremman suorituskyvyn (esim. C, C++).
  • Tulkitut kielet (interpreted): Koodi luetaan ja suoritetaan suoraan tulkin toimesta. Tämä helpottaa kehitystä ja testausta, mutta voi olla hitaampaa (esim. perinteinen Python, Ruby).
  • Sekalaiset mallit: Monissa moderneissa ympäristöissä yhdistellään: koodi käännetään bytecodeksi, jota ajetaan virtuaalikoneessa (esim. Java, .NET) tai käytetään JIT-optimointia.

Tavalliset virheet ja virheiden käsittely

Virheitä on useita tyyppejä:

  • Syntaksivirheet: Kielen sääntöjen rikkomisia; kääntäjä tai tulkki ilmoittaa virheen ennen suoritusta.
  • Ajonaikaiset virheet: Ohjelma kaatuu tai heittää poikkeuksen suorituksen aikana (esim. nollalla jako, tiedoston puuttuminen).
  • Loogiset virheet: Ohjelma toimii mutta ei tee haluttua asiaa; usein vaikein löytää.

Hyviä käytäntöjä virheiden hallintaan ovat poikkeusten käsittely (try/catch), yksikkötestit, testiautomaatio, koodikatselmukset ja tehokas virhelogitus. Debuggaustyökalut (steppaaminen, breakpointit) helpottavat ongelmien paikantamista.

Miksi valita tietty ohjelmointikieli?

Kielivalintaan vaikuttavat muun muassa:

  • Tarkoitus: web-kehitys, mobiili, järjestelmätaso, data-analyysi, koneoppiminen jne.
  • Suorituskykyvaatimukset ja resurssit.
  • Kirjasto- ja työkaluekosysteemi: onko saatavilla valmiita kirjastoja tarvittaviin tehtäviin?
  • Yhteisön tuki ja oppimismateriaalit.
  • Tiimin osaaminen ja olemassa oleva koodikanta.

Opiskeluvinkkejä ja hyviä käytäntöjä

  • Aloita perusasioista: syntaksi, muuttujat, kontrollirakenteet (if, loopit) ja funktiot.
  • Harjoittele pienillä projekteilla ja paranna vähitellen. Kirjoita koodia itse eikä pelkästään lue sitä.
  • Hyödynnä REPL/interactive-työkaluja (esim. Python REPL) nopeaan kokeiluun.
  • Opettele versionhallinta (esim. Git) heti alusta alkaen.
  • Kirjoita testejä ja opettele debuggaamaan systemaattisesti.

Pieni esimerkki (Python)

# Esimerkkiohjelma: tarkistaa luvun parillisuuden def on_parillinen(n):     if n % 2 == 0:         return True     else:         return False  print(on_parillinen(4))  # Tulostaa: True 

Yhteenvetona: ohjelmointikielet ovat työkaluja, joilla ilmaistaan laskennallisia ohjeita. Niiden valinta ja käyttö riippuu tavoitteista, ympäristöstä ja vaatimuksista. Hyvin suunniteltu koodi, testaus ja oikeat työkalut vähentävät virheitä ja helpottavat ylläpitoa.


 

Ohjelmointikielten tyypit

Ohjelmointikieliä on monenlaisia. Useimmat ohjelmointikielet eivät noudata vain yhtä tyyppiä, joten on vaikea määrittää tyyppiä kullekin kielelle. Kunkin tyypin esimerkit on annettu kussakin jäljempänä olevassa jaksossa, koska ne ovat parhaita tunnettuja esimerkkejä kyseisestä tyypistä.

Korkean tason ja matalan tason välinen suhde

[icon]

Tämä kohta tarvitsee lisätietoja. (Elokuu 2018)

Korkean tason ohjelmointikielet edellyttävät vähemmän tietoa laitteistosta kuin matalan tason ohjelmointikielet. Tämä johtuu siitä, että korkean tason ohjelmointikielet abstrahoivat laitteiston, jossa ohjelma suoritetaan. Monet korkean tason ohjelmointikielet vaativat tulkin, jotta lähdekoodi voidaan ajaa laitteistossa reaaliajassa. Toisaalta matalan tason ohjelmointikielet muuttavat yleensä koko lähdekoodin konekoodiksi ennen ajoa, koska lähdekoodi on niin lähellä laitteistoa, että se on helppo tehdä. Korkean tason kielet vaativat kääntäjän, mutta matalan tason kielet eivät.

Deklaratiivinen vs. imperatiivinen ohjelmointi

Deklaratiiviset ohjelmointikielet kuvaavat "ongelman", mutta ne eivät yleensä kerro, miten ongelma pitäisi ratkaista. Ongelman kuvauksessa käytetään logiikkaa, ja ongelman "ratkaiseminen" näyttää usein loogisten aksioomien järjestelmän automaattiselta todistamiselta. Esimerkkejä tällaisista ohjelmointikielistä ovat Prolog, XSLT, LISP ja SQL.

Imperatiiviset ohjelmointikielet kuvaavat tilamuutosten järjestelmää. Alussa ohjelma on tietyssä tilassa, ja tietokoneelle annetaan vaiheet, joita sen on noudatettava suorittaakseen jonkin toiminnon. Vaiheiden noudattaminen saa ohjelman "vaihtamaan tilaa".

Yleisesti ottaen deklaratiiviset ohjelmointikielet ovat turvallisempia ja lyhyempiä. Imperatiiviset ohjelmointikielet ovat yleisempiä, koska niitä on helpompi käyttää.

Toiminnallinen vs. menettelyllinen

Toiminnallisessa ohjelmoinnissa ohjelmointia tarkastellaan kuten matematiikan funktioita. Ohjelma vastaanottaa syötteen ja joitakin tietoja ja käyttää näitä tietoja tuotoksen luomiseen. Sillä ei ole välitilaa, eikä se myöskään muuta asioita, jotka eivät liity laskentaan.

Proseduraaliset ohjelmat määrittelevät tai kuvaavat vaiheiden tai tilamuutosten sarjoja.

Pinoihin perustuva

Pinoihin perustuvat kielet tarkastelevat osaa ohjelman muistista kuin korttipinoa. On hyvin vähän asioita, joita voidaan tehdä pinolla. Tietoelementti voidaan laittaa pinon yläosaan. Tätä toimintoa kutsutaan yleensä nimellä "push". Tietoelementti voidaan poistaa pinon yläosasta. Tätä kutsutaan nimellä "pop". Voit tarkastella pinon yläosassa olevaa elementtiä poistamatta sitä. Tätä kutsutaan nimellä "peek".

Jos ohjelma on kirjoitettu muotoon "push 5; push 3; add; pop;", se laittaa 5 pinon yläosaan, laittaa 3 5:n päälle, laskee kaksi ylintä arvoa yhteen (3 + 5 = 8), korvaa 3 ja 5 arvoilla 8 ja tulostaa ylimmän (8). Esimerkkejä pinopohjaisista ohjelmointikielistä ovat Postscript ja Forth.

Oliosuuntautunut

Oliosuuntautuneissa ohjelmointikielissä data ja dataa muuttavat funktiot sijoitetaan yhdeksi kokonaisuudeksi. Tätä yksikköä kutsutaan "objektiksi". Objektit voivat olla vuorovaikutuksessa keskenään ja muuttaa toisen objektin tietoja. Tätä kutsutaan yleensä kapseloinniksi tai tiedon piilottamiseksi. Useimmat nykyaikaiset ohjelmointikielet ovat oliosuuntautuneita tai ainakin mahdollistavat tämän ohjelmointityylin. Esimerkkejä tästä ovat Java, Python, Ruby, C++, C# ja muut C-kielet.

Virtaussuuntautunut

Virtaussuuntautuneessa ohjelmoinnissa ohjelmointi nähdään eri komponenttien yhdistämisenä. Nämä komponentit lähettävät viestejä edestakaisin. Yksittäinen komponentti voi olla osa eri "ohjelmia" ilman, että sitä tarvitsee muuttaa sisäisesti.

Tieteellinen tietojenkäsittely

Joitakin edellä mainituista kielistä voidaan käyttää tieteelliseen laskentaan. Esimerkiksi C++:aa ja Pythonia käytetään myös tällä tavoin. Toisaalta on olemassa joitakin kieliä, joiden päätarkoitus on tieteellinen laskenta. Seuraavassa on joitakin esimerkkejä:

Asiakirjan luominen

LaTeX ja SATySFi ovat ohjelmointikieliä, jotka auttavat asiakirjojen luomisessa.



 

Säännöt

Jokaisella ohjelmointikielellä on säännöt siitä, mitä sillä voi ja mitä sillä ei voi tehdä. Näitä ovat mm:

  • Oikeat numerot (numerotyypit ja se, kuinka suuria tai pieniä numerot voivat olla).
  • Sanat (varatut sanat, isojen ja pienten kirjainten herkkyys)
  • Ohjelmointikielen käyttömahdollisuuksien rajoitukset

Useimmilla kielillä on viralliset standardit, jotka määrittelevät lähdekoodin kirjoittamista koskevat säännöt. Joillakin ohjelmointikielillä on kaksi tai useampia standardeja. Näin voi käydä, kun uusi standardi korvaa vanhan. Esimerkiksi Perl 5 -standardi korvasi Perl 4:n vuonna 1993. Näin voi tapahtua, koska kaksi ihmistä teki kaksi standardia samaan aikaan. Esimerkiksi APL:lle on olemassa useita standardeja.



 

Oliokeskeinen ohjelmointi

Oliokeskeinen ohjelmointi (Object-Oriented Programming, joskus lyhennettynä OOP) on ohjelmoinnin muoto, jossa kaikki ohjelman osat ovat objekteja. Objektit ovat rakenteeltaan samanlaisia muistinpalasia, joita voidaan käyttää uudelleen ja uudelleen. Pankkitili, bittikartta tai videopelin sankari voivat kaikki olla ohjelmassa olevia objekteja. Objektit koostuvat ominaisuuksista (tiedonpalasista, joita objekti tallentaa) ja metodeista, jotka ovat asioita, joita objekti voi tehdä. Koira-objektilla voi olla ominaisuuksia, kuten height ja hairColor. Sen metodeja voivat olla esimerkiksi bark() ja wagagTail().

Kaikki objektit luodaan malleista, joita kutsutaan luokiksi. Voit ajatella luokan olevan muotti, josta objektit valmistetaan. Luokka määrittelee kaikki ominaisuudet ja metodit, joita sen objekteilla on. Luokasta luotuja objekteja kutsutaan luokan instansseiksi. Luokka voi laajentaa toista luokkaa, mikä tarkoittaa, että se ottaa kaikki luokan ominaisuudet ja metodit, mutta voi lisätä omia ominaisuuksiaan.

Tässä on esimerkki siitä, miltä luokka voi näyttää ohjelmointikielessä:

class Dog extends Mammal{ //Nämä ovat ominaisuuksia: String breed = "Collie" String type = "Herding Dog" //These are methods void wagTail(){ //Do some wagging } void bark(){ //Do the barking here } }

Huomaa, että Dog-luokka laajentaa Mammal-luokkaa, joten kaikilla koirilla on nisäkkään ominaisuudet, kuten hairLength, ja metodit, kuten eat() tai sleep().

Oliosuuntautunutta ohjelmointia käytetään monissa nykyisin suosituimmissa ohjelmointikielissä, kuten Javassa, C#:ssa, Objective-C:ssä, C++:ssa, Pythonissa, Rubyssä, Javascriptissä ja ActionScriptissä.



 

Esimerkkejä

Esimerkki Visual Basicista

Tässä on yksinkertainen ohjelma, joka on kirjoitettu Visual Basicilla (Microsoftin kehittämä kieli):

Dim Input Input = InputBox("Kuinka vanha olet?? - Koodi") If Not IsNumeric(Input) Then MsgBox & Input & "Tuo ei ole numero!" ElseIf Input < 0 Then MsgBox "Et voi olla alle nollan vuoden ikäinen!" ElseIf Input > 100 Then MsgBox "Tuo on vanha!" Else MsgBox "Olet " & Input & " vuotias." End If

Tämä ohjelma kysyy käyttäjän ikää ja vastaa sen perusteella, mitä käyttäjä on kirjoittanut. Jos käyttäjä on kirjoittanut jotain, joka ei ole numero, ohjelma ilmoittaa sen. Jos käyttäjä on kirjoittanut luvun, joka on pienempi kuin nolla, ohjelma ilmoittaa sen. Jos käyttäjä sanoo olevansa vanhempi kuin 100 vuotta, ohjelma sanoo: "Se on vanha!". Jos käyttäjä on kirjoittanut oikean iän, ohjelma vastaa käyttäjälle, kuinka vanha hän on.

Esimerkki Pythonista

Tässä on ohjelma, joka tekee saman asian kuin yllä oleva ohjelma, mutta Pythonilla:

try: age = int(raw_input("Kuinka vanha olet? ")) except ValueError: print ("Tuo ei ole luku!") else: if age < 0: print ("Et voi olla alle nolla vuotta vanha!") elif age > 100: print ("Tuo on vanha!") else: print("Olet %s vuotta vanha." % age)

Esimerkki C#-ohjelmasta

Sama kuin yllä oleva ohjelma, mutta C#-kielellä:

using System; public class Hello { public static void Main() { Console. WriteLine("Mikä on ikäsi?"); int ikä; if (! int. TryParse(Console. ReadLine(), out age)) Console. WriteLine("Se ei ole luku!"); else if (ikä < 0) Console. WriteLine("Et voi olla alle nollan vuoden ikäinen!"); else if (ikä > 100) Console. WriteLine("Se on vanha!"); else Console. WriteLine("Olet {0} vuotta vanha.", ikä); } }

Esimerkki Haskellista

Sama juttu taas, mutta Haskellilla:

import Text.Read main = do putStrLn "Mikä on ikäsi?" input <- fmap readMaybe getLine putStrLn $ case input of Just age | age < 0 -> "Et voi olla alle nolla vuotta vanha!" | age > 100 -> "Se on vanha!" | muuten -> "Olet " ++ näytä ikä ++ " vuotta vanha." Ei mitään -> "Se ei ole numero!"



 

Aiheeseen liittyvät sivut

 

Kysymyksiä ja vastauksia

K: Mikä on ohjelmointikieli?


A: Ohjelmointikieli on eräänlainen kirjoitettu kieli, joka kertoo tietokoneille, mitä tehdä. Se on kuin joukko ohjeita, joita tietokone noudattaa tehdäkseen jotakin, ja se käyttää yleensä oikeita sanoja joissakin komennoissa, jotta ihmisten on helpompi ymmärtää.

K: Mitä esimerkkejä ohjelmointikielistä on?


V: Esimerkkejä ohjelmointikielistä ovat Python, Ruby, Java, JavaScript, C, C++ ja C#.

K: Miten ohjelmat kirjoitetaan ohjelmointikielillä?


V: Ohjelmat kirjoitetaan kirjoittamalla tekstiä ohjelmointikielen lähdekoodiin. Yleensä käytetään myös välimerkkejä.

K: Mitä tapahtuu sen jälkeen, kun ohjelmat on kirjoitettu ohjelmointikielellä?


V: Kun ohjelmat on kirjoitettu ohjelmointikielellä, ne on käännettävä, mikä tarkoittaa sitä, että tietokone muuttaa tai kääntää lähdekoodin toiselle kielelle (kuten assembler- tai konekielelle), jota tietokoneet voivat lukea mutta jota ihmisten on paljon vaikeampi lukea.

K: Mitä voi tapahtua, jos ohjelmia kirjoitettaessa tehdään virheitä?


V: Jos ohjelmia kirjoitettaessa tehdään virheitä tai jos ohjelma yrittää tehdä jotain, mitä sitä ei ole suunniteltu tekemään, se voi lakata toimimasta, mitä kutsutaan "kaatumiseksi". Kun tämä tapahtuu sen vuoksi, miten koodi on kirjoitettu, sitä kutsutaan "bugiksi". Pienetkin virheet voivat aiheuttaa suuria ongelmia.

K: Miksi tietokoneohjelmat on kirjoitettava huolellisesti?


V: Tietokoneohjelmat on kirjoitettava huolellisesti, koska pienetkin virheet voivat aiheuttaa suuria ongelmia ja johtaa kaatumiseen tai virheisiin.


Etsiä
AlegsaOnline.com - 2020 / 2025 - License CC3