Feda /dev/

Traber

#26093 A mi eso me gusta bastante en PHP dado que le da bastante flexibilidad. Un ejemplo:

function dividir($dividendo = FALSE, $divisor = FALSE){
    if($dividendo !== FALSE && $divisor !== FALSE){
        if($divisor > 0){
            return (float) $dividendo / (float) $divisor;
        }
    }
    return FALSE;
}
echo dividir(2,6);
echo dividir(2,0);
echo dividir(17);
echo dividir();
echo dividir(8,12);

¿Por qué esto no está tan mal? Porque en lenguajes tipados, las funciones deben devolver un valor del tipo de la función. En .NET por ejemplo, hay tipos de variables que no admiten nulos (int, float, bool), por lo que debes devolver un valor y entender tú en tu código que ese valor significa que ha ocurrido un error en esa función. Si pudiera devolver false directamente sería mucho más fácil de manejar y más semántico, ¿no crees? Y ojo, que se de la existencia de int?, float?, bool? y demás, pero no funcionan igual.

1 6 respuestas
HeXaN

#26101 Justo eso tiene un capítulo entero en el Clean Code para justificar lo incorrecto de esa forma de programar funciones/métodos/loquesea.

6 1 respuesta
Leos

#26101 mmmmmm a mi manera de pensar, eso no debería pasar, vamos si tu haces una función para dividir por ejemplo, no debería de poderse introducir ningún valor incorrecto y si por lo que sea se introduce se debe controlar ese error, no darle toda la libertad del mundo.

En un mundo idilico de buenos programadores y buenas prácticas, estaría bien, pero en un mundo donde cada uno hace lo que quiere, mientras más libertad, más chapuzas, a mi humilde modo de ver.

MisKo

Throw errors please

1 respuesta
B

#26101 Por normal general cuando das "flexibilidad" para hacer las cosas en un lenguaje, el 90% de los programadores lo va a hacer mal. De todas formas, con respecto a tu código tienes generics en otros lenguajes tipados.

1 respuesta
Saphyel

#26105 y los que no eran tambien.
https://www.python.org/dev/peps/pep-0484/#generics
https://wiki.php.net/rfc/generics

gg

LLoid

#26101 tío, ese código... No puedo añadir nada que no hayan dicho ya, pero qué puto dolor

1
desu

#26102 Que además te lo lees en una tarde...
#26104 No sé si lo dices en serio. Los throws son malas prácticas. Esto te lo resolvería así.

function (dividendo: float, divisor:float) : Optional<float> {
    divisor > 0 ? Optional(dividendo/divisor) :  Optional()
}

y lo utilizamos según como lo tengamos definido.

Optional<float> result = funcion(2.0, 3.0);
Optional<float> result2 = funcion(2.0, 0.0);
eisenfaust

#26101 nil punning es un idiom que me encanta de los lenguajes dinamicos, el poder tratar cosas como null, "", [], 0, etc como false y lo demas como true en un contexto booleano permite codigo elegante y compacto. common lisp y perl son buenos ejemplos de esto y al otro lado de la calle estarian scheme o python que son algo mas tradicionales en ese aspecto

lo que dices en tu ejemplo de todas formas lo puedes hacer en un lenguaje tipado siempre y cuando su sistema de tipado sea decente y no algo pegado con moco tipo java y c

por ejemplo no tienes por que decidir entre si un objeto devuelte int o bool en ese caso, puedes devolver la union de ambos tipos perfectamente

o si tienes soporte para ADT None Some(Int), creo que en java seria Optional.of(123) o Optional.empty que tampoco esta mal

2
Saphyel

yo he llegado a ver:

new Integer(text).intValue()

y

public interface LoleInterface {
  boolean ALGO = true;
  int KILLOS = 1;
}

si es que Java esta pensando para hacer mierda codigo...

2 respuestas
Ranthas

#26110 Es lo que pasa cuando le das un destornillador a una persona y lo usa para clavar tachas en una pared.

Buenas herramientas usadas como el culo, llámalo desconocimiento, llámalo dejadez, pero en cualquier caso, es una herramienta mal usada, no una mala herramienta.

Y esto es extensible a todos los lenguajes menos JS, por lo del meme y tal.

Fyn4r

#26110 las buenas interfaces para declarar todas las constantes del universo xd

desu

keke he implementado la solución de senpai @eisenfaust antes de que posteara, esos libros al toque keke

Este año solo voy a leer libros de "filosofia" como Essentialism(de lo mejor que he leído nunca) y Cracking The Code Interview, a ver si en 2 años llego a @Amazon o @Google con mis senpais del hilo.

2 respuestas
Saphyel

#26113 puedes postearlas?

1 respuesta
desu

#26114 wut, los libros? es el Essentialism: The Disciplined Pursuit of Less y el cracking en github está.

1 respuesta
Saphyel

#26115 me referia a la solucion xD

Amazon

#26113 oye pero quien eres?

1
eondev
1
eZpit

#26101 Se me han pegado todas las ETS de tu código instant.

Dividir algo entre 0 debe dar infinito y dividir 0 entre 0 debe dar “NaN”.
Si siempre quieres ignorar dichos valores puedes usar opcionales, como bien apuntabas.
No hay ninguna ventaja en tu código frente a un tipado estático. En ambos casos tendrás que validar el resultado, y el tipado te obligará a hacerlo impidiéndote hacer las cosas mal.

2 2 respuestas
Fyn4r

#26119 la división por 0 no está definida hasta donde yo sé. Y como mucho el límite tenderá a infinito o -infinito dependiendo del caso.

1 1 respuesta
HeXaN

Mira @eZpit , te voy a explicar una cosa para que entiendas cómo funciona la puta vida.

Llevo sabiendo como funciona un puto PC por dentro y por fuera desde los 8 años y a programar desde los 12, he hecho tutoriales a los 13 años de cómo instalar PHPNuke en IEspana cuando nadie tuvo 2 putos cojones a hacer funcionar dicho CMS en ese hosting porque era una puta mierda infecta.

Estuve haciendo el rediseño móvil de un clon de Ogame para shitphones de la era de las webs WAP con 14-15 años y desarrollando mis primeras shells en VB con 16 años.

A los 18, cuando lo de las ROMs no estaba muy extendido que digamos, estuve colaborando para hacer una ROM de Android Ice Cream Sandwich para el teléfono LG Eve/Etna/GW620, y entre otras cosas me encargué de la parte de los drivers A2DP (música bluetooth), drivers OpenGL 1.2, y de dar soporte al layout del teclado físico de ese teléfono.

Cuando empecé el grado superior de Desarrollo de Aplicaciones Web, antes de acabar el primer año ya tenía desarrolladas varias aplicaciones para Android, entre ellas Bluetooth App Sender que en menos de 4 años consiguió más de 5 millones de descargas y tener más de 2.2 millones de instalaciones activas, y también conseguí desarrollar una de las primeras aplicaciones que llevó las notificaciones flotantes a los teléfonos Android cuando estas solo existían en iOS, y aparecer en portada de XDA Developers. También desarrollé una aplicación de seguridad para evitar ataques MITM mediante la detección de ataques tipo APR-Spoofing o Arp Poisoning Routing, concretamente la segunda que existía en ese momento.

Y dicho esto, que no es para ir de soberbio (simplemente es la experiencia de mi vida porque desde chiquitito me encantan las putas máquinas y programar), te digo que donde más he aprendido a programar es en mi trabajo. No en casa. No en clase. No en mis 10 años previos desde que programaba en VB6, un PHP primitivo, hacía hojas de estilos personalizadas en CSS, hacía webs de mierda en HTML o tiraba de Java para hacer aplicaciones para movil, no, en mi trabajo. Aprendí más en 1 año que en 10. Si aún así crees que vas a saber más que los que te entrevistan, vas a ir muy bien.

Pista: Tengo 26 años.

5 1 respuesta
pineda

po yo hago xetos

1 respuesta
yasurio

#26121 Pero que tal programas que es lo importante?

1 respuesta
Fyn4r

#26123 lo importante es saber que pienso le da a su pato

B

#26119 En realidad debe calcularse la indeterminación si nos ponemos finos.

1 1 respuesta
eZpit

#26120 Infinito en programación entiendo que es siempre una indeterminación.
#26125 Ok, que he sido un poco repu. Lo mencionaba simplemente porque cosas como infinito, indefiniciones o ausencias de valor pueden ser representadas adecuadamente, en vez de hacer el return false o el return -1 típico de newfag.

Zerokkk

#26075 Yo tengo una certificación en SQL y PL/SQL y sigo haciéndolo para gran parte de las cosas básicas, ni te rayes xDD.

Troyer

#26122 algún día alguien te matara por la calle, yo te aviso

1
GlatoR

Es bueno saber que todos somos tontos

1 respuesta
Merkury

#26129 Es bueno saber que es totalmente innecesario memorizar cosas que puedes consultar en menos de un segundo.

1 3 respuestas
Tema cerrado