Ohjelmointi 1, syksy 2022, luento 20

# L20

20. luento: ti 01.11.2022 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));
      }

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.