Ohjelmointi 1, syksy 2024, luento20

# L20

20. luento: ti 5.11.2024 klo 14:15-16:00: Poikkeukset, Delegaatti ja Lambda-lauseke, ohjelman suoritusaika

Kertausta: Kasvatusoperaattorit

  • ensi ma luento on kertausluento, kannattaa varulta kerrata itselleen etukäteen kurssin perusasioita, niin pärjää sitten paremmin
# muuttujat1
# muuttujat2

Speden rautakauppasketsi

Katso ennen luentojen katsomista:

Demo 9 vaarallisia poimintoja poistoon

  • Contains etsii ja remove etsii uudelleen (sama olisi IndexOf):
        public static List<string> PoistaSanat(List<string> sanat, string poistettava)
        {
            do
            {
                sanat.Remove(poistettava);
            } while (sanat.Contains(poistettava));
            return sanat;
        }
  • varo myös tilannetta jos tarvitisit jonkin indeksin tyyliin:
        if (sanat.Contains("kissa")) 
        {
           paikka = sanat.IndexOf("kissa");
           ...
        }    

koska saman saa suoraan:

        paikka = sanat.IndexOf("kissa");
        if ( paikka >= 0 ) 
        {
           ...
        }   
  • forissa indeksin muuttamista muualla kuin itse for-rivillä:
        public static void PoistaSanat(List<string> sanat, string poistettavaSana)
        {
            int lkm = 0;
            for (int i = 0; i < sanat.Count; )
            {
                if ( sanat[i] == poistettavaSana )
                {
                    lkm++;
                    sanat.RemoveAt(i);
                }
                else i++;
            }
        }
Sitten oli niitä, joissa tehtiin `i--` ja niitä voi pitää vielä huonompana.
Jos noin pitää tehdä, niin `while` olisi selkeämpi.
    
  • jono käydään läpi liian monesti (\(O(n^2)\)):
        public static List<string> PoistaSanat(List<string> sanat, string poistettavaSana)
        {
            for (int i = 0; i < sanat.Count; i++)
            {
                sanat.Remove(poistettavaSana);
            }        
            return sanat;
        }
  • osin ok, mutta varo ettet muulloin laita puolipistettä while perään:
        public static void PoistaSanat(List<string> sanat, string poistettava)
        {
            while (sanat.Remove(poistettava));   // while (i<5);
        }

Lambda-lausekkeet

# lambda

Poikkeukset

    try
    { 
        // poikkeusalttiit lauseet 
    } 
    catch (Poikkeusluokka p) 
    { 
        // lauseet poikkeuksen sattuessa 
    } 
    finally 
    { 
        // Lauseet jotka tehdään aina 
    }

Tiedostot

# Plugin1
# kissatxt
# poistakissa
# luenetistavanha
# luenetista

Jakolaskut, indeksiylitykset yms.

# poikkeus

Ohjelman kesto

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.