14 outubro, 2021
A ideia básica da programação defensiva é:
stop() e warning().stop(..., call. = TRUE, domain = NULL),
em que:
... objeto a ser coagido a caractere;call. argumento lógico. Se TRUE chamará parte da mensagem de erro;domain argumento que representa o domínio, geralmente o nome do pacote em desenvolvimento. Esse argumento é utilizado juntamente com a função gettext() para a internacionalização do pacote.Semântica: Chamado stop() no corpo de uma função, esta é encerrada e retornado a mensagem de erro, especificada na própria função.
warning(..., call. = TRUE, immediate. = FALSE, noBreaks. = FALSE,
domain = NULL),
em que:
... objeto a ser coagido a caractere;call. argumento lógico. Se TRUE chamará parte da mensagem de erro;immediate. argumento lógico indicando se a mensagem deve ser imediata (TRUE), ou apenas no final de toda a execução (FALSE);noBreaks. argumento lógico, apresentando o número de linhas para apresentar a mensagem de alerta (isso ocorre quando options(warn = 1)). Sem quebras TRUE, com quebras FALSE;domain argumento que representa o domínio, geralmente o nome do pacote em desenvolvimento. Esse argumento é utilizado juntamente com a função gettext() para a internacionalização do pacote.prog_def <- function(teste = "tudo") {
# Suponha que no corpo da funcao, as operacoes devem ser
# realizadas apenas com um objeto sendo apenas caracter.
cat("Ufa, cheguei até o final, com o objeto teste igual a", teste, "\n")
}
prog_def(teste = 1)
## Ufa, cheguei até o final, com o objeto teste igual a 1
prog_def(teste = "nada")
## Ufa, cheguei até o final, com o objeto teste igual a nada
prog_def(expression(x ~y))
## Ufa, cheguei até o final, com o objeto teste igual a
## Error in cat("Ufa, cheguei até o final, com o objeto
## teste igual a", : argumento 2 (tipo 'expression') não
## suportado por 'cat'
prog_def <- function(teste = "tudo") {
if (!is.character(teste)) stop("O argumento 'teste' deve ser caractere! \n")
# Suponha que no corpo da funcao, as operacoes devem ser
# realizadas apenas com um objeto sendo apenas caracter.
cat("Ufa, cheguei até o final, com o objeto teste igual a", teste, "\n")
}
prog_def(teste = 1)
## Error in prog_def(teste = 1) : O argumento 'teste' deve ser caractere!
prog_def(teste = "nada")
## Ufa, cheguei até o final, com o objeto teste igual a nada
prog_def(expression(x ~ y))
## Error in prog_def(expression(x ~ y)) :
## O argumento 'teste' deve ser caractere!
prog_def <- function(teste = "tudo") {
if (!is.character(teste)) stop("O argumento 'teste' deve ser caractere! \n",
call. = FALSE)
# Suponha que no corpo da funcao, as operacoes devem ser
# realizadas apenas com um objeto sendo apenas caracter.
cat("Ufa, cheguei até o final, com o objeto teste igual a", teste, "\n")
}
prog_def(teste = 1)
## Error: O argumento 'teste' deve ser caractere!
prog_def(teste = "nada")
## Ufa, cheguei até o final, com o objeto teste igual a nada
prog_def(expression(x ~ y))
## Error: O argumento 'teste' deve ser caractere!
prog_def <- function(teste = "tudo") {
if (!is.character(teste)) stop("O argumento 'teste' deve ser caractere! \n",
call. = FALSE)
cat("Executada linha de comando 1 \n")
if (teste == "warning") {
warning("Mensagem de alerta, sem quebra! \n")
cat("Executada linha de comando após o \"warning()\"! \n")
}
if (teste == "stop") stop("Após o \"stop()\", nada será execudado! \n",
call. = FALSE)
if (!any(teste == c("warning", "stop"))) cat("Ufa, cheguei até o final! \n")
}
prog_def(teste = "warning")
## Executada linha de comando 1
## Executada linha de comando após o "warning()"!
## Warning message:
## In prog_def(teste = "warning") : Mensagem de alerta, sem quebra!
prog_def <- function(teste = "tudo") {
if (!is.character(teste)) stop("O argumento 'teste' deve ser caractere! \n",
call. = FALSE)
cat("Executada linha de comando 1 \n")
if (teste == "warning") {
warning("Mensagem de alerta, sem quebra! \n", immediate. = TRUE)
cat("Executada linha de comando após o \"warning()\"! \n")
}
if (teste == "stop") stop("Após o \"stop()\", nada será execudado! \n",
call. = FALSE)
if (!any(teste == c("warning", "stop"))) cat("Ufa, cheguei até o final! \n")
}
prog_def(teste = "warning")
## Executada linha de comando 1
## Warning in prog_def(teste = "warning") :
## Mensagem de alerta, sem quebra!
## Executada linha de comando após o "warning()"!
prog_def <- function(teste = "tudo") {
if (!is.character(teste)) stop("O argumento 'teste' deve ser caractere! \n",
call. = FALSE)
cat("Executada linha de comando 1 \n")
if (teste == "warning") {
warning("Mensagem de alerta, sem quebra! \n", immediate. = TRUE,
call. = FALSE)
cat("Executada linha de comando após o \"warning()\"! \n")
}
if (teste == "stop") stop("Após o \"stop()\", nada será execudado! \n",
call. = FALSE)
if (!any(teste == c("warning", "stop"))) cat("Ufa, cheguei até o final! \n")
}
prog_def() ## Executada linha de comando 1 ## Ufa, cheguei até o final! prog_def(teste = "warning") ## Executada linha de comando 1 ## Warning: Mensagem de alerta, sem quebra! ## Executada linha de comando após o "warning()"! prog_def(teste = "stop") ## Executada linha de comando 1 ## Error: Após o "stop()", nada será execudado! prog_def(teste = 1) ## Error: O argumento 'teste' deve ser caractere! prog_def(teste = "nada") ## Executada linha de comando 1 ## Ufa, cheguei até o final! prog_def(expression(x ~ y)) ## Error: O argumento 'teste' deve ser caractere!