Funcionalidad de búsqueda
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 104 de 110.
Desafío
FácilEn la lección anterior, construiste una clase Library con funcionalidad de préstamo y devolución. Ahora vamos a añadir capacidades de búsqueda para que los usuarios puedan encontrar libros en la colección de la biblioteca.
Mejorarás tu clase Library con tres nuevos métodos de búsqueda que ayudan a los usuarios a descubrir libros:
book.dart: Mantén tu claseBookexistente sin cambios.user.dart: Mantén tu claseUserexistente sin cambios.library.dart: Añade tres métodos de búsqueda a tu claseLibrary:searchByTitle(String query)- devuelve unaList<Book>que contiene todos los libros cuyo título contiene la cadena de consulta (sin distinguir entre mayúsculas y minúsculas)searchByAuthor(String query)- devuelve unaList<Book>que contiene todos los libros cuyo nombre de autor contiene la cadena de consulta (sin distinguir entre mayúsculas y minúsculas)getAvailableBooks()- devuelve unaList<Book>que contiene solo los libros que están actualmente disponibles para préstamo
main.dart: Demuestra la funcionalidad de búsqueda. Crea unaLibraryy añade cuatro libros:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin978-0-20-161622-4,The Pragmatic Programmer,Andrew Hunt
U001,Alice) y haz que tome prestado el primer libro. Luego:- Busca libros con
pragmaticen el título e imprimeTitle search 'pragmatic': X founddonde X es el recuento - Busca libros por el autor
davide imprimeAuthor search 'david': X found - Obtén los libros disponibles e imprime
Available books: X - Imprime cada libro disponible en su propia línea
Salida esperada:
U001 borrowed "The Pragmatic Programmer"
Title search 'pragmatic': 2 found
Author search 'david': 1 found
Available books: 3
[978-0-596-51774-8] JavaScript: The Good Parts by Douglas Crockford
[978-0-13-235088-4] Clean Code by Robert Martin
[978-0-20-161622-4] The Pragmatic Programmer by Andrew HuntPruébalo tú mismo
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// Crear una Library
Library library = Library();
// TODO: Agregar cuatro libros a la biblioteca:
// 1. 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// 2. 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// 3. 978-0-13-235088-4, Clean Code, Robert Martin
// 4. 978-0-20-161622-4, The Pragmatic Programmer, Andrew Hunt
// TODO: Registrar un usuario (U001, Alice)
// TODO: Hacer que el usuario pida prestado el primer libro
// TODO: Buscar libros con 'pragmatic' en el título
// Imprimir: Title search 'pragmatic': X found
// TODO: Buscar libros por el autor 'david'
// Imprimir: Author search 'david': X found
// TODO: Obtener los libros disponibles e imprimir: Available books: X
// TODO: Imprimir cada libro disponible en su propia línea
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO
Archivos externosLibrerías e importacionesIntroducción a la POOClases vs. ObjetosLa palabra clave thisMétodosVariables de instanciaConceptos básicos de constructoresResumen - Calculadora sencilla4Seguridad de nulos
Introducción a la seguridad de nulosNulables vs No nulablesLos operadores ? y !Palabra clave Late y Null SafetyOperadores Null-awareNull Safety en clasesResumen - Sistema de perfil de usuario7Clases abstractas e interfaces
Clases abstractasMétodos abstractosInterfaces en DartInterfaces implícitasImplementar vs. ExtenderInterfaces múltiplesRepaso - Calculadora de figuras10Colecciones y Genéricos
Visión general de List, Set y MapColecciones con seguridad de tiposClases genéricasMétodos genéricosRestricciones genéricasIterable e IteratorResumen - Almacenamiento genérico13Conceptos avanzados de POO
Composición vs. HerenciaMétodos de extensiónClases invocablesClases selladas (Dart 3)Records (Dart 3)Patrones y coincidencia (3.0)Enums con métodos16Proyecto: Gestión de biblioteca
Descripción general del proyectoClases de Libros y Usuarios2Constructores en Dart
Constructor por defectoConstructores nombradosListas de inicializaciónConstructores constantesConstructores de fábricaConstructores de redireccionamientoResumen - Constructor de formas5Encapsulamiento
Miembros públicos vs. privadosLa convención del prefijo _Privacidad a nivel de libreríaProfundidad en Getters y SettersOcultamiento de informaciónResumen - Registros de estudiantes8Mixins
Introducción a los MixinsCreación de MixinsUso de múltiples MixinsPalabra clave on en MixinsMixin vs HerenciaMixin vs InterfazResumen - Sistema Animal11Métodos especiales
Sobrescritura de toString()Sobrescritura de hashCode y ==Interfaz ComparableMétodo call()Sobrescritura de noSuchMethodResumen - Colección personalizada14Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy3Propiedades de clase
Miembros de instancia vs. estáticosCampos Final y ConstVariables LateMétodos y campos estáticosGetters y SettersResumen - Gestor de cuentas bancarias6Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosLa anotación @overrideLa palabra clave final en clasesConstructores y herenciaResumen - Jerarquía de empleados9Polimorfismo
Fundamentos del polimorfismoPolimorfismo mediante interfacesComprobación de tipos en tiempo de ejecuciónLos operadores is y asPalabra clave covariantResumen - Procesador de pagos12POO Asíncrona
Futures y async/awaitFundamentos de StreamsStream ControllersConstructores asíncronosAsincronía en métodos de claseRepaso - Data Fetcher15Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository