Hola Carlos Gracias por tus comentarios. Tiene otro problema, la función que usa esta obsoleta, según la pagina de microsoft, que a esta altura se debería llamar macrosoft :).
Porqué estas diciendo que esta mal usar #error: ? . No recuerdo bien los motivos, pero los mecanismos de control de error no son intercambiables. Me aclaras la diferencia ? saludos kiko --- El mié 28-jul-10, Carlos E. Ferro <[email protected]> escribió: De: Carlos E. Ferro <[email protected]> Asunto: Re: [clubSmalltalk] StdioFileStream dolphin Para: [email protected] Fecha: miércoles, 28 de julio de 2010, 12:03 On 28/07/2010 11:44, Jose Gregoris wrote: Hola En la clase StdioFileStream tenes el mensaje : StdioFileStream >>read: aString text: aBoolean [ . . . ] No es mejor que primero verifique la existencia del archivo y luego proceda ? Es un error de codificación o estoy errado ? Estás errado. No es UN error de codificación. ¡Son varios! Probablemente alguien "mejoró" el método en CRTLibrary y ahora se traga la excepción y te devuelve nil. Ya es feo que el comment sea tan largo. Aparentemente, hay mucho para entender en un método que es muy corto... y no se entiende leyendo el código. Eso es mala señal (aunque entiendo que puede ocurrir en lugares "puente" donde invocás una función externa). Es malo que te diga que levanta una excepción, si en este método no se levanta ni se maneja. Eso quiere decir que el que lo escribió conoce la implementación de lo que está llamando, y sabe que va a tirar una excepción. El problema es que conocía la implementación de ese momento... el comentario y su valiosa info quedan obsoletos en cuanto alguien modifica en otro lado. Otro problema que oscurece el método es el argumento en la expresión anidada de paréntesis. Nosotros aplicamos siempre la "regla de Valloud" en estos casos (perdón, Andrés, pero está en el libro): un argumento de un keyword no puede ir nunca entre paréntesis. Requiere un nombre que aclare qué es. Finalmente, los nombres de los argumentos no aportan suficiente información, que ya tenemos y agiliza la lectura. Rápidamente lo reescribiría así: StdioFileStream >>read: filename text: aBoolean "Access is character based or binary, depending on the <boolean> argument" | handler mode | mode := aBoolean ifTrue: ['rt'] ifFalse: ['rb']. handler := CRTLibrary default fopen: filename mode: mode. handler isNil ifTrue: [ self error: 'File ', filename, ' does not exist' ]. ^self basicNew setStream: handler isText: aBoolean name: filename Ojo, donde puse self error:, eso también es muy malo; ahí hay que generar una excepción apropiada. Saludos -- signature carlos e. ferro | senior developer | caesar systems | see clearly. decide smarter. [email protected] | t: +1.281.598.8790 | t: +54.11.4389.0126 | www.caesarsystems.com This message and any attached documents contain information from Caesar Systems LLC that may be confidential/trade secret and/or privileged. If you are not the intended recipient, you may not read, copy, distribute or use this information. If you have received this transmission in error, please notify the sender immediately by telephone or by reply e-mail and then delete this message. -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
