|| zamiast if() ? Co sądzicie?

0

Co sądzicie o takiej praktyce, by w warunkach sprawdzających poprawność argumentów w funkcji zamiast pisać:

f <- function(x){
  if(!is.data.frame(x)) stop("variable x should be a data.frame type")
#
# dalszy ciąg funckji...
#
}

pisać:

f <- function(x){
  is.data.frame(x) || stop("variable x should be a data.frame type")
#
# dalszy ciąg funckji...
#
}
0

Nie pisałem w R. Jedyne co Ci mogę doradzić to pisz jak najbardziej czytelnie dla osoby, która będzie to czytać za X czasu (pewnie ty sam). Kod musi być przystępny, nie wymagaj od czytelnika, że będzie się wgryzał w meandry Twojego algorytmu.

Zwykle wykorzystuję || gdy chcę wykorzystać domyślny parametr, a funkcja którą wykorzystuję nie ma możliwości zwracania wartości domyślnej np. Repo.get(User, user_id) || %User{} (przykład z Elixira, weź usera z danym id, a jak go nie ma to zwróć pustą strukturę User).

Pamiętaj też, że || jest szybsze - przynajmniej w większości języków (upewnij się, że w R też) i w wypadku alternatywy sprawdza tylko pierwszy warunek przy przejść dalej, ale w tym wypadku to bez różnicy.

0

GCC generuje taki sam kod w obu przypadkach.

Inne kompilatory pewnie to samo, bo jedna operacja jest równoważna drugiej logicznie.

3

Trochę zależy od języka, ale w 99% przypadków polecam jednak if. If służy z założenia do sterowaniem przepływem programu, a || do warunków logicznych i trzymanie się tego podziału raczej doprowadzi do czytelniejszego kodu.

Są drobne wyjątki, np. w PHP swego czasu idiomem było (jest?):

[warunek] or die("[warunek] failed");
2

lepiej uzywaj ifa bo przez nieuwage zamiast

is.data.frame(x) || stop("variable x should be a data.frame type")

napiszesz

is.data.frame(x) | stop("variable x should be a data.frame type")

i bedzie wiocha :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1