Funzionalità di ricerca
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 104 di 110.
Sfida
FacileNella lezione precedente, hai creato una classe Library con funzionalità per prendere in prestito e restituire libri. Ora aggiungiamo funzionalità di ricerca, così gli utenti possono trovare i libri nella collezione della biblioteca.
Arricchirai la classe Library con tre nuovi metodi di ricerca che aiutano gli utenti a trovare libri:
book.dart: mantieni invariata la classeBookesistente.user.dart: mantieni invariata la classeUseresistente.library.dart: aggiungi tre metodi di ricerca alla classeLibrary:searchByTitle(String query)- restituisce unaList<Book>contenente tutti i libri il cui titolo include la stringa di ricerca (senza distinzione tra maiuscole e minuscole)searchByAuthor(String query)- restituisce unaList<Book>contenente tutti i libri il cui autore include la stringa di ricerca (senza distinzione tra maiuscole e minuscole)getAvailableBooks()- restituisce unaList<Book>contenente solo i libri attualmente disponibili per il prestito
main.dart: mostra il funzionamento della ricerca. Crea unaLibrarye aggiungi quattro libri: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) e fagli prendere in prestito il primo libro. Poi:- Cerca i libri con
pragmaticnel titolo e stampaTitle search 'pragmatic': X found, dove X è il numero di risultati - Cerca i libri dell'autore
davide stampaAuthor search 'david': X found - Recupera i libri disponibili e stampa
Available books: X - Stampa ciascun libro disponibile su una riga separata
Output previsto:
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 HuntProvalo tu
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// Crea una Library
Library library = Library();
// TODO: Aggiungi quattro libri alla 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: Registra un utente (U001, Alice)
// TODO: Fai prendere in prestito il primo libro all'utente
// TODO: Cerca libri con 'pragmatic' nel titolo
// Stampa: Title search 'pragmatic': X trovati
// TODO: Cerca libri dell'autore 'david'
// Stampa: Author search 'david': X trovati
// TODO: Ottieni i libri disponibili e stampa: Available books: X
// TODO: Stampa ogni libro disponibile su una riga separata
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online