You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
No estoy entendiendo por qué aparecen estos mensajes de error, parecieran no tener sentido.
El segundo mensaje donde dice "valor del tipo devuelto" supongo deberia decir "tipo del valor devuelto".
Hice captura del mensaje del Linter y las pegue encima de la captura del codigo.
De cualquier forma dejo el codigo completo abajo para testear.
IDE: VS Code 1.92.1
SO: w10
Version Wollok: 0.2.7
Version de la extension "wollok-lsp-ide": 0.3.3
Version de node: 20.16.0
Error 1
Error 2 (esta tambien sale de la misma forma en la clase AntivirusTrial)
class Computadora {
const property archivos = [] // lista de Archivo
const programas = [] // lista de Programa
var property antivirus = antivirusNulo
/* Punto 1 */
method agregarArchivo(archivo) {
archivos.add(archivo)
}
method agregarArchivos(archivosNuevos) {
archivos.addAll(archivosNuevos)
}
method eliminarArchivo(archivo) {
archivos.remove(archivo)
}
method instalarPrograma(programaNuevo) {
programas.add(programaNuevo)
}
method desinstalarPrograma(programaExistente) {
programas.remove(programaExistente)
}
method afectarArchivosCon(virus) {
archivos.forEach{ archivo => archivo.afectarCon(virus) }
}
method tieneComprobantePara(ransomware) =
archivos.any{ archivo => archivo.esComprobantePara(ransomware) }
method tieneArchivosSecuestrablesPor(ransomware) =
archivos.any{ archivo => archivo != ransomware.nuevoReadme() }
method eliminarArchivos() {
archivos.clear()
}
method ejecutarPrograma(unPrograma){
if(!antivirus.esMalware(unPrograma)) // si no es malware
unPrograma.ejecutarEn(self)
} // si el antivirus esta caducado, no analiza y el programa se ejecuta
}
/* Punto 2 */
class Archivo {
method peso()
method afectarCon(virus)
method esComprobantePara(ransomware) = false
}
class Texto inherits Archivo {
var property contenido // string
const property nombre // string
override method peso() = (contenido.length() + nombre.length()) / 5
override method afectarCon(virus) {
contenido = virus.nombre()
}
override method esComprobantePara(ransomware) =
nombre == "comprobante de pago" and
contenido.contains(ransomware.cuenta())
override method ==(otro) = nombre == otro.nombre() and
contenido == otro.contenido()
}
class Imagen inherits Archivo {
var property resolucion // Resolucion
var property nombre // string
override method peso() = resolucion.totalDePixeles() / 100
override method afectarCon(virus) {
nombre = "Brad Pitt dentro de un caballo de madera gigante"
resolucion =
new Resolucion(alto = resolucion.ancho(),
ancho = resolucion.alto())
}
}
class Resolucion {
const property alto
const property ancho
method totalDePixeles() = alto * ancho
}
class Musica inherits Archivo {
const property peso //
const nombreCancion
var nombreArtista
//const anioSalida
override method afectarCon(virus) {
if(nombreCancion != "Pronta Entrega")
nombreArtista = virus.nombre()
}
method nombre() = nombreCancion + " - " + nombreArtista
}
// PROGRAMAS
class ProgramaNormal {
const property nombre
/* Punto 3.a */
method ejecutarEn(compu) {
const archivoTexto =
new Texto(contenido = "información muy importante para el trabajo",
nombre = "datos." + nombre)
compu.agregarArchivo(archivoTexto)
}
}
class Virus {
const property nombre
/* Punto 3.b */
method ejecutarEn(compu) {
compu.afectarArchivosCon(self)
}
}
class Ransomware {
const property nombre
const property cuenta
const cantidad
const archivosSecuestrados = []
/* Punto 3.c */
method ejecutarEn(compu) {
if(compu.tieneComprobantePara(self))
self.devolverArchivosA(compu)
else
if(compu.tieneArchivosSecuestrablesPor(self))
self.secuestrarArchivosDe(compu)
else
throw new RansomwareException(message = "no se puede secuestrar")
}
method devolverArchivosA(compu) {
compu.agregarArchivos(archivosSecuestrados)
}
method nuevoReadme() =
new Texto(contenido = "Pagame " + cantidad + " a la cuenta " + cuenta,
nombre = "README")
method secuestrarArchivosDe(compu) {
archivosSecuestrados.addAll(compu.archivos())
compu.eliminarArchivos()
compu.agregarArchivo(self.nuevoReadme())
}
}
class RansomwareException inherits Exception {}
// ANTIVIRUS
class Antivirus {
const baseConocimiento // lista de nombres de malware
method esMalware(unPrograma) = baseConocimiento.any({programa => programa == unPrograma.nombre()})
method cuantosSonMalware(listaProgramas) =
listaProgramas.count{programa => self.esMalware(programa)}
}
class AntivirusGratuito inherits Antivirus{
const fechaExpiracion
override method esMalware(unPrograma) {
if (new Date() > fechaExpiracion)
return false
else
return super(unPrograma)
}
}
class AntivirusTrial inherits Antivirus{
const limiteChequeos
var chequeosRealizados
override method esMalware(unPrograma) {
if (chequeosRealizados > limiteChequeos)
return false
else {
chequeosRealizados += 1
return super(unPrograma)
}
}
}
class AntivirusPago inherits Antivirus{
}
object antivirusNulo {
method esMalware(unPrograma) = false
}
class AntivirusCaducadoException inherits Exception {}
object theUltimateAntivirusBenchmark {
const listaProgramasNormales = []
const listaMalware = []
method antivirusGanador(listaAntivirus) {
return listaAntivirus.max{antivirus => antivirus.cuantosSonMalware(listaMalware) / listaMalware.length()
- antivirus.cuantosSonMalware(listaProgramasNormales) / listaProgramasNormales.length()}
}
}
The text was updated successfully, but these errors were encountered:
NicolasKalaydjian
changed the title
Errores del Linter confusos al usar herencia ("tipo del valor de vuelto" y "deberia marcarse como override")
Errores del Linter confusos al usar herencia ("shouldUseOverrideKeyword" y "shouldMatchSuperclassReturnValue")
Aug 11, 2024
@PalumboN@fdodino
Creo que encontré el problema con el error 2 del "shouldMatchSuperclassReturnValue", pero tampoco la tengo tan clara asi que es para agarrar con pinzas, me parece que el Validator solamente esta viendo que la ultima sentencia del metodo sea un return, tanto en el metodo que se le hizo override como el de la superclase:
Entonces el metodo con override no podria estar compuesto solamente por una sentencia if - else, ya que tomaria como ultima sentencia el else , necesita que esté el return por fuera
Aca se puede ver la diferencia y como en un caso tira error y en el otro no:
Respecto del error 1 (del shouldUseOverrideKeyword), logré aislarlo y esta bien que salga el error, era por tener un const property peso teniendo en la superclase un metodo que tambien se llama peso() . La cosa es que el error sale en la primer linea del código independientemente de que haya ahí, cuando debería salir en la linea del const property peso (tal vez con una descripcion diferente), de hecho tuve que andar sacando y poniendo codigo para ver que era lo que lo hacia saltar. Lo que se ve en la foto es el único codigo que dejé en el archivo.
Hola buenas, soy Nico, ayudante de PdP.
Hice captura del mensaje del Linter y las pegue encima de la captura del codigo.
De cualquier forma dejo el codigo completo abajo para testear.
IDE: VS Code 1.92.1
SO: w10
Version Wollok: 0.2.7
Version de la extension "wollok-lsp-ide": 0.3.3
Version de node: 20.16.0
Error 1
Error 2 (esta tambien sale de la misma forma en la clase AntivirusTrial)
The text was updated successfully, but these errors were encountered: