Narzędzia użytkownika

Narzędzia witryny


ewdrstyle

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
ewdrstyle [2015/06/30 14:23]
t.zoltak [Metody weryfikacji argumentów funkcji]
ewdrstyle [2016/10/03 21:16] (aktualna)
t.zoltak [Zasady formatowania kodu R w projekcie EWD]
Linia 3: Linia 3:
 =====Zasady formatowania kodu R w projekcie EWD===== =====Zasady formatowania kodu R w projekcie EWD=====
  
-  * Zasadniczo trzymamy się zasad z [[https://​google-styleguide.googlecode.com/svn/trunk/​Rguide.xml|Google'​s R Style Guide]]+  * Zasadniczo trzymamy się zasad z [[https://​google.github.io/styleguide/​Rguide.xml|Google'​s R Style Guide]]
   * Z następującymi wyjątkami:   * Z następującymi wyjątkami:
     - jako operatora przypisania wartości używamy '​='​ a nie '​%%<​-%%';​     - jako operatora przypisania wartości używamy '​='​ a nie '​%%<​-%%';​
Linia 82: Linia 82:
  
   * Generalnie przyjmujemy zasadę, że **funkcje powinny weryfikować poprawność przekazywanych do nich argumentów**. W przypadku tworzenia pakietów zasada ta powinna być bezwzględnie przestrzegana w odniesieniu do funkcji, które są eksportowane.   * Generalnie przyjmujemy zasadę, że **funkcje powinny weryfikować poprawność przekazywanych do nich argumentów**. W przypadku tworzenia pakietów zasada ta powinna być bezwzględnie przestrzegana w odniesieniu do funkcji, które są eksportowane.
 +  * Jeżeli w funkcji implementowana jest opcjonalna konwersja typów argumentów (np. jeśli argument powinien być wektorem liczb całkowitych,​ ale jest wektorem logicznym, można skonwertować go na wektor liczb całkowitych),​ to **dokonanie konwersji typów powinno wiązać się z wygenerowanie ostrzeżenia widocznego dla użytkownika**.
   * Minimalny zakres weryfikacji obejmuje:   * Minimalny zakres weryfikacji obejmuje:
     * Zgodność typów (w przypadku argumentów o bardziej złożonej strukturze, ale posiadających przypisane klasy - zgodność klas).     * Zgodność typów (w przypadku argumentów o bardziej złożonej strukturze, ale posiadających przypisane klasy - zgodność klas).
Linia 94: Linia 95:
 ====Metody weryfikacji argumentów funkcji==== ====Metody weryfikacji argumentów funkcji====
  
-Spośród opisanych niżej metod **preferowane jest wykorzystanie funkcji pakietu //assert//**.+Spośród opisanych niżej metod **preferowane jest wykorzystanie funkcji pakietu //assertive//** w rozsądnym połączeniu z użyciem warunków do obsługi bardziej skomplikowanych sytuacji (w szczególności ostrzeżeń i konwersji typów, jeśli funkcja takowe wykonuje). 
 + 
 +[[pakietassert|Przewodnik po funkcjach pakietu assertive.]]
  
 ===Stosowanie warunków=== ===Stosowanie warunków===
  
-  * Zalety:+  ​* **Zalety:**
     * Elastyczne.     * Elastyczne.
     * Umożliwia zwracanie czytelnych komunikatów o błędach i/lub ostrzeżeń.     * Umożliwia zwracanie czytelnych komunikatów o błędach i/lub ostrzeżeń.
-  * Wady:+  ​* **Wady:**
     * Wymaga pisania bardzo dużo kodu, co jest uciążliwe i często czyni kod nieczytelnym.     * Wymaga pisania bardzo dużo kodu, co jest uciążliwe i często czyni kod nieczytelnym.
-  * Przykład:<​code>​moja_funkcja = function(x) {+  ​* **Przykład:**<​code>​moja_funkcja = function(x) {
   if (any(is.na(x)) {   if (any(is.na(x)) {
     stop("​Argument '​x'​ nie może zawierać braków danych!"​)     stop("​Argument '​x'​ nie może zawierać braków danych!"​)
Linia 113: Linia 116:
 ===Stosowanie funkcji stopifnot()=== ===Stosowanie funkcji stopifnot()===
  
-  * Zalety:+  ​* **Zalety:**
     * W typowych, niezbyt złożonych sytuacjach, krótki i czytelny kod.     * W typowych, niezbyt złożonych sytuacjach, krótki i czytelny kod.
-  * Wady:+  ​* **Wady:**
     * Niezbyt przyjazne użytkownikowi komunikaty o błędach.     * Niezbyt przyjazne użytkownikowi komunikaty o błędach.
     * Obsługa wyłącznie błędów (ale ostrzeżeń już nie).     * Obsługa wyłącznie błędów (ale ostrzeżeń już nie).
-  * Przykład:<​code>​moja_funkcja = function(x) {+  ​* **Przykład:**<​code>​moja_funkcja = function(x) {
   stopifnot(all(!is.na(x))   stopifnot(all(!is.na(x))
   return(x)   return(x)
 }</​code>​ }</​code>​
  
-===Stosowanie funkcji pakietu ​assert===+===Stosowanie funkcji pakietu ​assertive=== 
 + 
 +[[pakietassert|Przewodnik po funkcjach pakietu assertive.]]
  
-  * Zalety:+  ​* **Zalety:**
     * Krótki i czytelny kod w szerokim zakresie zastosowań (nieco szerszym niż //​stopifnot()//​).     * Krótki i czytelny kod w szerokim zakresie zastosowań (nieco szerszym niż //​stopifnot()//​).
       * Wiele warunków i formatów, z którymi można sprawdzać zgodność.       * Wiele warunków i formatów, z którymi można sprawdzać zgodność.
       * Automatyzacja najbardziej typowych kombinacji warunków w pojedynczych funkcjach.       * Automatyzacja najbardziej typowych kombinacji warunków w pojedynczych funkcjach.
     * Przyjazne użytkownikowi komunikaty o błędach.     * Przyjazne użytkownikowi komunikaty o błędach.
-  * Wady:+  ​* **Wady:**
     * Nic nie będzie równie elastyczne, jak używanie //if//.     * Nic nie będzie równie elastyczne, jak używanie //if//.
-  ​* Przykład:<​code>​moja_funkcja = function(x) {+    * Wymaga trochę czasu, żeby zorientować się w mnogości funkcji udostępnianych przez pakiet. 
 +  * **Przykład:**<​code>​moja_funkcja = function(x) {
   assert_all_are_not_na(x)   assert_all_are_not_na(x)
   return(x)   return(x)
 }</​code>​ }</​code>​
ewdrstyle.1435666999.txt.gz · ostatnio zmienione: 2015/06/30 14:23 (edycja zewnętrzna)