home Sem categoria Agilidade no desenvolvimento nativo – Flutter vs React Native

Agilidade no desenvolvimento nativo – Flutter vs React Native

A indústria de aplicativos para dispositivos móveis teve um crescimento gigantesco durante os últimos anos. Em 2017, o faturamento das lojas de aplicativos conhecidas como App Store, Google Play e outras independentes somou cerca de U$ 86 bilhões. Esse número é reflexo do grande sucesso das plataformas, que impulsionaram os negócios de empresas e a criação de diversas aplicações que revolucionaram o modo como os usuários de dispositivos móveis se organizam, locomovem, consomem produtos, entre outros. De fato, as aplicações mobile se tornaram uma necessidade no dia a dia das pessoas e das empresas.

Esse rápido crescimento trouxe um grande desafio para os desenvolvedores de aplicativos móveis, em vista de suprir essa demanda do mercado: criar, em tempo recorde, aplicações que funcionam muito bem em múltiplas plataformas (Android, iOS, Windows Phone, etc). A solução para isso foi o desenvolvimento de frameworks para a criação de aplicativos cross-platform, ou seja, a partir de um só código, o desenvolvedor pode gerar uma aplicação para diversas plataformas. Dois desses frameworks são o foco principal deste artigo e serão discutidos ao longo do texto.

Este artigo visa ainda introduzir ao leitor as alternativas existentes para o desenvolvimento de aplicações mobile (Nativo ou Híbrido) e mostrar um comparativo entre dois frameworks que prometem ser o futuro do desenvolvimento de aplicações móveis: Flutter e React Native.

Desenvolvimento Nativo

A maneira “tradicional” de se desenvolver uma aplicação mobile é utilizando as ferramentas e linguagens específicas para uma determinada plataforma que são, na maioria das vezes, disponibilizadas pelas empresas proprietárias da tecnologia. Por exemplo:

  • Para o desenvolvimento de aplicações para dispositivos Android se utiliza as ferramentas, SDK, elementos de interface, todos disponibilizados pelo Google, utilizando-se das linguagens de programação Java e/ou Kotlin.
  • Dispositivos que possuem IOS como sistema operacional utilizam as ferramentas fornecidas pela Apple e as linguagens são Objective-C e Swift.

O desenvolvimento nativo apresenta inúmeras vantagens, a maioria delas relacionadas ao desempenho da aplicação, visto que, todo o código e ferramentas utilizadas foram construídas especificamente para aquela plataforma. Esse desempenho é um fator determinante na usabilidade e desempenho da aplicação, além de fazer grande diferença na experiência do usuário.

As desvantagens são simples e muito fáceis de serem apontadas. A primeira delas é que, se você ou sua empresa quiser um aplicativo rodando em múltiplas plataformas, é preciso que tenha o conhecimento de ambas ou contrate alguém que o tenha, isso torna então o desenvolvimento algo mais custoso em vários aspectos.

Um dos fatores que torna isso tão trabalhoso é a falta de profissionais que dominam o desenvolvimento nativo, seja de uma ou ambas plataformas, visto que o aprendizado é um processo oneroso. Além do custo, o tempo de desenvolvimento pode ser maior, já que desenvolver nativo requer que o desenvolvedor se preocupe com detalhes que, para aplicações menores, poderiam ser facilmente ignoradas.

Devido às desvantagens citadas no desenvolvimento nativo “clássico” e com o crescimento, popularização das aplicações móveis e o grande retorno financeiro que elas trazem para startups, desenvolvedores independentes e empresas de grande porte, criou-se a necessidade de encontrar novas maneiras para a criação das aplicações de maneira mais rápida e com menos custos. Surge então o desenvolvimento cross-platform.

Desenvolvimento Cross-Platform Hybrid

Desenvolvimento “Cross-Platform Hybrid” é a abordagem dos chamados Web Apps, ou seja, aplicações desenvolvidas utilizando tecnologias Web (HTML, CSS e JavaScript).

Tal forma de desenvolvimento é mais barata, uma vez que o tempo de desenvolvimento acaba sendo reduzido, pois a aplicação pode ser utilizada em diferentes plataformas (iOS, Android e Windows Phone), além de dar ao programador grande liberdade para criar aplicações que pareçam idênticas a aplicações nativas, mas que na realidade estão rodando em um navegador.

Toda essa liberdade e facilidade pode ter seus pontos negativos. A fuga do padrão de design da plataforma é uma delas. Os sistemas iOS e Android possuem diversas particularidades, como gestos, ações, cores, formas, etc. Quando uma aplicação é desenvolvida usando uma plataforma híbrida, todos esses fatores apontados podem ser comprometidos caso a interface da aplicação não seja bem planejada, afetando e muito na experiência do usuário.    

O desenvolvimento híbrido mostra-se mais atraente para quem necessita de aplicações simples e que não careçam de funcionalidades complexas do Sistema Operacional do aparelho. É uma alternativa barata e rápida, porém os quesitos: desempenho, UX (User Experience) e a dificuldade em usar recursos nativos como câmera, bluetooth, armazenamento, gps, etc, podem comprometer aplicações mais complexas. Alguns exemplos desses frameworks são: Ionic, Cordova e PhoneGap.

Desenvolvimento Cross-Platform Native

Desenvolvimento “Cross-Platform Native” é basicamente o uso de um framework que possibilita que o programador desenvolva em uma linguagem de programação (definida pelo framework) para escrever códigos que quando compilado gera um executável para as diversas plataformas.

É possível em certos frameworks utilizar códigos na linguagem nativa e assim mesclar com a do framework. Isso ocorre na maioria das vezes na criação de layouts, minificando o problema de UX apontado no desenvolvimento híbrido. Exemplos desses frameworks são: Xamarin, React Native e Flutter, sendo os dois últimos os que abordaremos à partir de agora.

Panorama geral React Native

Tendo em vista todos os problemas apontados no desenvolvimento nativo e as possíveis soluções propostas pela comunidade com a abordagem Cross-Platform, alguns frameworks atualmente se destacam no mercado.

Um exemplo de sucesso no mercado é o React Native, lançado publicamente com o código aberto no GitHub em 2015 pelo Facebook, unindo as APIs nativas Android e iOS, de modo a simplificar muito o desenvolvimento mobile. O React já possui em seu portfólio diversas aplicações famosas, como: Facebook, Facebook Ads Manager, Instagram, Facebook Analytics, Pinterest, Skype, Tesla, Uber, Walmart, Wix, Discord, SoundCloud Pulse, adidas GLITCH, entre outros. A linguagem de programação é o Javascript, apontada pelo GitHub como a linguagem mais usada atualmente em sua plataforma. O framework conta ainda com suporte a widgets nativos o que torna a navegação e experiência do usuário bastante agradáveis. Possui suporte a algumas API’s do Android e iOS, como explicaremos mais à frente.

Panorama geral Flutter

Um concorrente do React Native é o Flutter, desenvolvido pelo Google e lançado em 2017. Apesar de novo, promete revolucionar o mundo mobile. Por ser um framework recentemente lançado, não é fácil encontrar aplicativos de sucesso que foram desenvolvidos na plataforma. Possui uma ótima documentação, explicando em detalhes o passo a passo da criação de aplicações usando a ferramenta. Conta com widgets próprios, sendo totalmente baseado no Material Design do Google, que por sua vez criou uma vertente para atender o framework. Sua linguagem de programação é o que pode estranhar a muitos, o framework conta com a linguagem Dart, lançada na GOTO Conference em Outubro de 2011. Apesar de parecer ruim adotar uma linguagem nova e não muito usada pela comunidade, o Dart se assemelha muito com linguagens famosas como JAVA, C# e C++, prometendo uma curva de aprendizado pequena para programadores com certa experiência.

React Native e Flutter

Ambos frameworks são atrativos contendo vantagens e desvantagens. O React Native por sua vez já está no mercado há mais tempo e possui mais aplicações em seu portfólio. Isso fornece segurança para grandes organizações se arriscarem na adoção do framework, o que alavanca ainda mais sua fama.

Já o Flutter, por ter sido lançado há menos de um ano, ainda precisa ser mais explorado pela indústria de modo a fazer com que a plataforma ganhe a confiança dos desenvolvedores.

Segundo o Google um dos grandes diferenciais do Flutter é em relação à sua rapidez, conseguindo mostrar nativamente animações a 60fps e fornecendo otimização de compilação antecipada, o que torna a aplicação portátil por ser compilada em código apropriado para arquiteturas ARM e x86, compatível com IOS, Android e outros. Uma desvantagem que pode ser apontada é o fato de usar widgets próprios, podendo causar o mesmo problema que aplicações Cross Platform Hybrid.

React conta com APIs de recursos nativos para WiFi e GPS, com boas soluções de terceiros para câmeras, sensores, biometria, Bluetooth e NFC. Porém, possui um ponto fraco em relação a construção de gráficos personalizados. Não existem boas API’s para o desenvolvimento desta funcionalidade, tornando esses tipos de features mais complexas de serem realizadas, implicando em desenvolvimento de código nativo.
A situação é ligeiramente diferente no Flutter. A maioria das APIs de hardware, com exceção de Bluetooth e NFC, estão em desenvolvimento ou já estão disponíveis. Dependendo de quão rápido tudo isso estiver pronto, o Flutter pode se tornar o vencedor no que diz respeito às APIs de hardware.

Parte do quadro comparativo feito pela empresa Agile Engine consegue exemplificar algumas das diferenças encontradas nos frameworks, dando um panorama geral do estado de cada um.

Flutter vs React Native
Fonte: https://agileengine.com/flutter-vs-react-native-comparison/

Conclusão: Por qual optar?

É fácil ver que ambos solucionam em grande parte os problemas do desenvolvimento nativo, trazendo agilidade, performance e praticidade para o desenvolvedor, que consegue, com menos código e trabalho, atingir um desenvolvimento mais rápido, seguro e reutilizável com o melhor desempenho possível.

Prós e contras podem ser levantados acerca de cada um, porém, se levarmos em consideração a maturidade e a adoção por parte da indústria,sendo estes pontos determinantes para que uma plataforma ganhe seu espaço no mercado, o React Native é o vencedor nessa disputa. Flutter promete trazer grandes benefícios e ainda pode surpreender muito no que se diz respeito à agilidade no desenvolvimento mobile e desempenho, mas só o tempo pode comprovar se tais promessas surtirão algum efeito real na área.

Por enquanto, a escolha mais sensata por parte dos desenvolvedores, seria se espelhar em grandes aplicações que se arriscaram e deram certo, contando com um suporte e uma comunidade ativa a mais de 3 anos, que é o caso do React Native.

Autores:

Gustavo Barbosa Barretograduando em Ciência da Computação – UFU e Desenvolvedor Mobile (Trainee I) na Cedro Technologies.

Esdras de Lima Chaves, graduando em Ciência da Computação – UFU e Desenvolvedor Mobile (Estagiário) na Cedro Technologies.

Gostou? Compartilhe:

Equipe Cedro

Equipe Cedro

Empresa focada em tecnologia e referência em inovação para o mercado financeiro e em soluções de TI e mobile.