Programmering – Språk



Programmering – Språk

0 0


ektorp


On Github petha / ektorp

Programmering

Significant Bit

Hej och välkomna! Vissa delar blir avancerade och jag förväntar mig inte att ni skall förstå allt. Jag kör igenom lite snabbt och sedan går vi runt och hjälper er igång.

Vilka är vi

Jag kommer från ett företag som heter Significant Bit och heter Peter. Jag har med min kollega och bror Johan.

Vad jobbar vi med

Vi är konsulter inom programmering. 1. Webbutveckling 2. Applikationer för iphone/android 3. Spel och interaktiva system.

Varför programmera

  • Man vill slippa göra tråkiga saker
  • och göra roliga saker istället
Datorer är ganska bra på att göra tråkiga repetitiva saker. Räkna på saker snabbt.

Vad är program

Långa listor med instruktioner och vissa instruktioner som kan göra hopp till andra instruktioner. Addera, subtrahera, multiplicera, jämföra saker, flytta saker mellan minne och register.

Språk

Vad har språk med program att göra? Vad är språk? Kan ni räkna upp några? Matematik? Svenska, engelska?

Programspråk

Känner ni till några programspråk? Vad är liknande, grammatik, regler, meningar.

Maskinkod på hålkort

Instruktioner som datorn direkt kan tolka. Programmet som det ser ut i minnet, och kan köras direkt av datorns CPU (hjärnan) Hål representerar bitar och ett hål är 0 och avsaknad av ett 1. Fungerar bara på den maskin som programmet är tänkt att köras på. Omständigt att flytta till andra typer av datorer. Omöjligt att förstå för en människa, datorer älskar sånt här!

Assembly

							
model small
.stack 100h
 
.data
msg     db      'Hello world!$'
 
.code
start:
        mov     ah, 09h   ; Display the message
        lea     dx, msg
        int     21h
        mov     ax, 4C00h  ; Terminate the executable
        int     21h
 
end start 
							
						
För att göra livet enklare och istället för att skriva maskinkod direkt. Namn på instruktioner- Lättare att läsa, fungerar bara på en viss typ av maskin, fortfarande rätt svårt, många instruktioner att lära sig utantill, spagettitrasselkod Assemblator översätter till maskinkod. flytta 09h till register ah. ladda effekt address till register dx. anropa interupt 21 flytta 4c00h till register ax anropa interupt 21

C

							
#include <stdio.h>
int main(int argc, char *argv[]) 
{
	printf("Hello Wordl!\n");
	return 0;
}
							
						
C ett av världens mest använda språk, För att få ett körbart program måste man först kompilera programmet, kan kompilera till olika datorer. Men måste kompileras om för varje dator. Mer läsbart än assembler, lättare att hitta fel, kompilatorn varnar för "dumma saker" Loopar och variabler

C#

							
// A Hello World! program in C#. 
using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");
        }
    }
}
							
						
C# är ett programspråk från Microsoft, kompileras också men istället till ett format som en virtuell maskin kan köra, ett slags program som kör program. Fördelen är att man inte behöver kompilera om programmet så länge den virtuella maskinen finns för datorn man vill köra programmet på. Objektorienterat, bra på att kapsla in beteende, kompilatorn kan varna för fel. Långsammare än C, men bättre möjlighet att sturkturera program Java är väldigt likt C# och körs också på en virtuellmaskin

Ruby

							
class Hello
  def say_hello
    puts "hello"
  end
end

program = Hello.new
program.say_hello
							
						
Ruby är ett interpreterat språk. Körs av en tolk och översätts inte till maskinkod, istället tolkar tolken programmet medans det körs. Lätt att ändra i program, kan köras på alla datorer där det finns en tolk som förstår språket. Metaprogrammering, alltså propgram som skriver program är lättare. Python, php

Varför olika språk

För att olika saker är viktiga

  • Prestanda
  • Portabelt
  • Uttrycksfullt
  • Struktur
  • Tycke och smak

Vi skall titta på Ruby

Vi programmerar mycket i Ruby, Bra för webbutveckling, Kraftfullt lite kod mycket verkstad. Riktigt språk, kan köras på många typer av datorer.

Centrala begrepp för programmering

För att lära sig programmera är det bra om man har ett hum om några begrepp.

Variabel

En namngiven plats i datorns minne, en slags förvaringslåda. Samma sak i matten (den där x) Variabler i Ruby skrivs med små bokstäver t.ex.

						
							omkrets = 3.145
						
					
omkrets är en variabel här, man kan plocka fram värdet som är sparat i variabeln och använda den och man kan spara nya värden i variabeln.

Värde

Ett värde är något man kan lagra i en variabel.

Till exempel ett tal med värdet 12 eller en text med värdet "hej"

Typ

Alla värden har en typ, typen beskriver hur värdet skall tolkas och vad man kan göra med det. Man kan säga att typen gör att innehållet får en betydelse. Några exempel på några (udda)typer:

  • Heltal/Integers: 102
  • Flyttal/Floats: 1.20
  • Strängar/Strings: "hejsan"
  • Boolesk/Boolean: true/false

En dator arbetar bara med binära tal, för att veta hur man skall behandla annan data, strängar t.ex. så representeras detta på olika sätt i datorn men alltid med bitar. Därför behövs olika typer för att beskriva detta.

Uttryck

Man kan sätta samman värden, variabler, operatorer och funktioner till uttryck. Till exempel kan man använda de fyra räknesätten på tal, och slå samman strängar och olika logiska operatorer för boolesk typer (och, eller, icke)

						ett_tal = 1*10+20-2/10
en_strng = "Hejsan" + " Du gamle indian"
boolesk = a || b && !c
					
Uttryck är en kombination värden, variabler, operatorer och funktioner och spottar tillbaka ett nytt värde. Uttryck kan vara allt från en enda variabel till ett sammansatt uttryck av många variabler, operatorer och funktioner.

Tilldelning

Innebär att man ger en variabel ett värde. I de flesta språk symboliseras tilldelning med = Nedan syns ett exempel på tilldelning, vi beräknar omkretsen av en cirkel med uttrycket på höger sida om tilldelningen. Alltså beräknas en cirkels omkrets från radien och tilldelas variabeln omkrets.

						
omkrets = 3.14 * 2 * radie
						
					
Tilldelning sparar värden från uttryck.

Funktion

En funktion en uppsättning instruktioner som körs efter varandra, man använder dem för att få byggblock som man kan återanvända Funktioner har ett namn och kan utföra ett ”arbete”. De kan också ta parameterar och skicka tillbaka, returnera, ett värde.

							
def omkrets(radie)
	puts "Beräknar omkretsen av en cirkel"
	return 3.14*2*radie
end
							
						

Repetition, Upprepning, Loopar

Repetition, Upprepning, Loopar

Innebär att programmet kommer upprepa en uppsättning instruktioner tills dess att något vilkor eventuellt avbryter.

						
sum = 0
i = 0
while i < 10 do #Upprepa medans i är mindre än 10
	sum = sum + i
	i = i + 1
end

sum = 0
for i in 0..9
	sum = sum + i
end	
						
					
For, while, each, reduce, map osv

Alternativ

Betyder att datorn kan välja väg med hjälp av logiska uttryck. Alltså uttryck som antingen blir sanna eller falska. == Jämför värden, i exemplet jämförs värdet 42 med det som finns i variabeln svar.

							
puts "Vad är svaret på allt?"
svar = gets.to_i() #Läs in tal från tangentbordet
if(svar == 42)
	puts "Rätt svar" 
else
	puts "Fel svar"
end	
							
						

Datorn kan välja väg genom programmet beroende på hur uttryck tolkas.

Objektorienterad programmering / OOP

Ganska avancerat koncept

Vi går över på att prata om OOP, kallar det OOP. Ruby är ett objektorienterat språk. Betyder att man bryter ned problem genom att fundera på hur objekt kan samverka. Istället för att bara ordna program med hjälp av funktioner bryter man ner programmet i objekt. Objekten inkapslar både funktioner och data

OOP - Klasser

Klasser är en användardefinierad typ. På samma sätt som heltal eller strängar i Ruby. En instans av en klass kallas objekt. Klassen är abstrakt, t.ex. Bok medan en instans av en klass kan vara en viss bok. När man gör nya objekt från en klass i Ruby använder man funktionen new på klassen.

							
class Bok #Klass definition
  def initialize(name)
    @name = name
  end

  def name()
    return @name
  end	
end 

hitchiker = Bok.new("The Hitchhiker's Guide to the Galaxy")
puts hitchiker.name() #Skriver ut namnet på boken

							
						

Initialize constructor. Visa anrop till name i puts

Konstruktor

Har hand om att ställa in det nya objektet så att det är redo att användas. Funktionen heter initialize och kan ta parameterar

							
class Bok
  def initialize(name)  #Konstruktor
    @name = name
  end

  def name()
    return @name
  end	
end 

hitchiker = Bok.new("The Hitchhiker's Guide to the Galaxy")
puts hitchiker.name() #Skriver ut namnet på boken

							
						

inga, en eller flera parametrar värdet i new skickas till initialize

Instansvariabler

Är variabler som kan nås från alla funktioner i klassen. @name är en instansvariabel. Det betyder att objektet har en variabel som kan nås från alla funktioner. Gör vi en ny Bok kommer den få en egen instansvariabel. Instansvariabler startar alltid med ett @

							
class Bok
  def initialize(name)  #Konstruktor
    @name = name
  end

  def name()
    return @name
  end	
end 

hitchiker = Bok.new("The Hitchhiker's Guide to the Galaxy")
puts hitchiker.name() #Skriver ut namnet på boken

							
						

Nås ifrån olika funktioner i en klass. Delas inte mellan olika objekt

nog

pratat mycket, väldigt abstrakt och ganska läskigt. Man behöver inte kunna allt direkt, läs program,

Demon/Frågor

http://tryruby.org / kidsruby