Pular para o conteúdo
Bruno Dórea
Todos os posts

4 mins de leitura


Extension Function - Gerando Slugs de Livros

Explorando Padrões de Projetos com Kotlin - 4/5


Desenvolvimento Backend com Kotlin
Desenvolvimento Backend com Kotlin

Descrição

As Extension Functions, ou Funções de Extensão, são recursos poderosos disponíveis em linguagens de programação que permitem adicionar métodos a classes existentes sem a necessidade de modificar o código-fonte original dessas classes. Isso facilita a criação de novas funcionalidades ou comportamentos para tipos de dados já existentes, mesmo quando você não tem acesso ao código fonte original desses tipos.

Neste desafio, com foco em um sistema de gerenciamento de livros para uma biblioteca digital, você deve implementar uma solução que permita gerar um "slug" único para representar os dados de um livro. Um "slug" é uma versão simplificada e amigável para URLs de um texto, com espaços substituídos por traços (-) e caracteres especiais removidos. A solução requer que você crie uma função de extensão generateSlug() para a classe String que fará essa transformação.

Funcionalidade a ser implementada:

generateSlug(): Crie uma função de extensão chamada generateSlug() para a classe String. A função deve gerar um "slug" para a string fornecida, removendo espaços e caracteres especiais, substituindo-os por traços.

Entrada

A entrada consistirá em duas strings: o título e o autor de um livro.

Saída

Imprima o "slug" gerado para o livro, no seguinte padrão: Slug gerado para o livro: nome-livro-separado-por-ifens_nome-autor-separado-por-ifens

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
Senhor dos AnéisJ. R. R Tolkien
Slug gerado para o livro:senhor-dos-aneis_j-r-r-tolkien
EntradaSaída
O Enigma do ParqueJody Shields
Slug gerado para o livro:o-enigma-do-parque_jody-shields
EntradaSaída
O Chamado de CthulhuH. P. Lovecraft
Slug gerado para o livro:o-chamado-de-cthulhu_h-p-lovecraft

Nota

O uso de extension functions tem seus pontos positivos, como a extensibilidade e organização do código, mas também apresenta desafios, como a possível confusão e a separação da lógica. A solução eficiente depende da linguagem de programação escolhida e das práticas de programação adotadas.

Resolução

fun main() {
    val titulo = readLine() ?: ""
    val autor = readLine() ?: ""
    
    val slugTitulo = titulo.generateSlug()
    val slugAutor = autor.generateSlug()
    
    println("Slug gerado para o livro:")
    println("${slugTitulo}_${slugAutor}")
}
 
fun String.generateSlug(): String {
    return this
        .lowercase()
        .replace(Regex("[^a-z0-9\\s-]"), "")
        .replace(Regex("\\s+"), "-")
        .replace(Regex("-+"), "-")
        .trim('-')
 
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.