Vamos a actualizar nuestra Política de privacidad próximamente. Te recomendamos consultar el avance.

C++: Librería de tratamiento de cadenas

Vista general de BWString

¡Prueba gratis durante 10 días

nuestros 1288 cursos !

Prueba gratis Mostrar modalidades de suscripción
Vamos a utilizar la clase BWString para sustituir a la clase String estándar, ya que nos ofrece mucha funcionalidad con poco código. Pero antes de empezar, hablaremos de las pruebas unitarias y de cómo hacer que sean compatibles con diferentes entornos de desarrollo.
07:02

Transcripción

En esta lección, vamos ver el diseño general de la clase BWString. Aquí tengo una copia de UnitTest.cpp extraída de los archivos de ejercicios. También tengo las clases BWString y BWUTest abiertas en este proyecto. En primer lugar quiero dedicar un minuto a hablar sobre la importancia de las pruebas unitarias. Los principales entornos de desarrollo incluyen un sistema de pruebas unitarias, tanto Xcode como hizo el estudio, ofrecen esta funcionalidad. Las pruebas unitarias son realmente útiles. Mientras desarrollaba esta clase, escribí pruebas unitarias para cada funcionalidad a medida que la implementaba. Después, cuando escribo nuevas funcionalidades, sigo probando cada una de las existentes. Esto me ha ahorrado tiempo y esfuerzo en muchas ocasiones en las que las nuevas funcionalidades pueden interferir en alguna funcionalidad existente o incluso hacer que falle. Así que si miramos este archivo, vemos que, básicamente, es un conjunto de pruebas unitarias. Las pruebas unitarias se crean así: llamo al método de prueba en mi clase de prueba unitaria, le paso un String, que es como se llama la prueba, y luego le paso una Expresión. Todo esto es una Expresión, que devuelve verdadero si pasa la prueba y falso, si no la pasa. Muchas clases de pruebas unitarias funcionan de otra forma. Así que tienes que asegurarte antes. Ahora, cuando compilo y ejecuto esto, verás que para cada una de estas pruebas, obtengo una pequeña cadena que dice cuál es la prueba y si la ha pasado o no. Además al final tengo un resumen. Como puedes ver es una forma realmente útil de hacer un seguimiento de lo que funciona y lo que no en un trozo grande de código. El problema con la mayoría de los sistemas de pruebas unitarias, sobretodo los que se incluyen en entornos de desarrollo, es que no suelen ser portables. En otras palabras, si escribo mis pruebas en un sistema, esas mismas pruebas no funcionarán en otro sistema a menos que las modifique o las reescriba completamente. Lo bueno es que un sistema de pruebas unitarias es muy sencillo de escribir. Así que me he creado mi propio sistema de pruebas unitarias. Si miras este archivo CPP te darás cuenta de que no es sólo un montón de código. Está todo aquí: tengo un constructor, tengo un inicializador, el propio método de prueba y el método de información. En el archivo .H verás que tengo todas las firmas de mis funciones. Una estructura de datos muy sencilla que sólo incluye: éxito, error y un par de cadenas Por tanto, el sistema de pruebas unitarias, como tal, es realmente sencillo. De esta forma, tengo un sistema portable que funcionará en Windows, Mac, Unix, en cualquier otro sitio en el que lo use sin necesidad de cambios importantes. Una funcionalidad que tiene es esta Sumary_flag. Aquí está puesta a falso, con lo que tenemos un informe completo cuando lo compilo y lo ejecuto. Verás que obtenemos todos estos descriptores. Si pongo la Sumary_flag a verdadero, se para a la prueba unitaria con el método de resumen. Ahora, cuando lo compilo y lo ejecuto, sólo obtengo un resumen. No veo todas esas cadenas individuales. Todas pasan con éxito, ninguna falla. Eso es todo lo que quiero saber. En la mayoría de los casos dejo la sumary_flag a falso y obtengo el informe completo que me dice qué sucede cuando hago mis pruebas. La propia clase BWSting ofrece mucha funcionalidad en muy poco espacio. Se ha diseñado para funcionar en sustitución de la clase Sting estándar en muchas de las operaciones más habituales. Este es el fichero de cabecera, la clase empieza aquí. Básicamente tiene todas estas estructuras de datos. Hay un String de C sin tratar que se utiliza para guardar la cadena, que funciona exactamente igual que la clase String str, agrupa un String C sin tratar y un Size T para la longitud. También guarda lo que yo llamo un vector de segundo nivel, un par de punteros para un array de sujetos String que se utilizará cuando se use la función Split. Hablaremos sobre ello a lo largo de este curso. La funcionalidad pública de la clase, está aquí. Puedes ver que hace un montón de cosas pero muchas de ellas, en realidad, no necesitan mucho código. Estos son los constructores. El constructor de movimiento tiene poco de código. La función Split es, probablemente, la más complicada. Tienen unas pocas funciones que, en realidad, hacen bastantes cosas. Pero la mayoría vamos a mirar aquí. Este es el operador de asignación, y este, el de cocatenación. Este tiene que reservar espacio para un String y copiarlo. Pero la mayoría de estos operadores de comparación son sólo encapsulamientos sobre funciones estándar. Y por eso, no tienen demasiado código. Esto, en realidad, no es mucho código. La función Trim requiere un poco más de lógica, pero el resto son realmente muy sencillas. Lo veremos en más detalle, a medida que avancemos en el resto de este curso. Un punto que merece la pena destacar aquí, es que no están algunas funciones estándar de la librería estándar de Microsoft. Tuve que sustituir una de ellas aquí porque quería utilizar código estándar y no tener código diferente para Microsoft, para Unix y para Mac. Así que simplemente añadí esta función aquí y puse un ifdef por delante. Así es como la plantilla variadec vuelca el contenido en un String en vez de en pantalla. La he utlizado para el método Format. Aquí está. Como puedes ver, la he incluido aquí para el método Format. Después, en la cabecera, tengo algunos componentes específicos de Microsoft. El compilador de Microsoft es el predominante y tiene algunas diferencias significativas con el estándar. Tenemos que gestionarlo así, por lo que tengo este Ifdef versión MSC y algunos pragmas y por último, declaro aquí esta vasprintf por tanto, hay algunas diferencias en el compilador de Microsoft. Así es como las he gestionado para que puedas poner este código en el compilador de Microsoft y compile y se ejecute tal y como lo hace en Unix o un Mac. Por tanto, esta clase proporciona la mayoría de la funcionalidad que necesito de una clase String. Lo hace con relativamente poco código y sin tener que utilizar ninguno de los contenedores STM que normalmente, ocupan mucho espacio y realentizan el sistema.

C++: Librería de tratamiento de cadenas

Adapta tus proyectos en C++ para ofrecer la mejor gestión de recursos usando librerías personalizadas de tratamiento de cadenas, BWString, constructores, operadores, y muchos más.

37 min (9 Videos)
Actualmente no hay comentarios.
 
Software:
Fecha de publicación:15/12/2016

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.