Archiwa tagu: logika

Logika wyrażeń w instrukcjach warunkowych

Logika matematyczna to jedna z bardziej przydatnych w programowaniu (i ogólnie informatyce) dziedzin matematyki. Dzięki prawom logiki działają wszystkie układy elektroniczne. W codzienności programisty może przydać się zwłaszcza podczas optymalizacji warunków logicznych.

Przykładowo, inspekcja kodu Ruby w środowisko IntelliJ za błąd uważa sterowanie przepływem za pomocą negatywnego warunku typu: if !condition ... . Taki pojedynczy warunek wystarczy w takim przypadku zamienić na: unless condition .... W przypadku bardziej rozbudowanych warunków przydają się znane z liceum prawa de Morgana.

I prawo de Morgana (zaprzeczenia koniunkcji)
~(p ^ q) <==> (~p v ~q)

Poniższy kod sprawdza, czy jest widoczny nagłówek. Nagłówek powinien mieć tytuł oraz podtytuł. Jeżeli obydwa tytuły są widoczne, uznajemy ze jest wyświetlony poprawnie. I tak następujące instrukcje warunkowe:

if !is_title_displayed || !is_subtitle_displayed
  puts 'Header not visible!'
end

można zamienić na:

unless (is_title_displayed && is_subtitle_displayed)
  puts 'Header not visible!'
end

Zobaczmy, jak to działa.

def check(p, q)
  if !p || !q
    puts 'Header not visible!'
  else
    puts 'Header is displayed.'
  end
end

def check_morgan(p, q)
  unless p && q
    puts 'Header not visible!'
  else
    puts 'Header is displayed.'
  end
end

Czytaj dalej