Android bez Javy?

0

Od pewnego czasu jest już mowa o zmianach: czy chodzi to o zastąpienie JS (co jednak wydaje się mało prawdopodobne), Objective-C (co stało się faktem, vide Swift), czy też sztandardowej platformy do programowania w Android, czyli Javy.

Czy i na ile taka zmiana jest prawdopodobna?

Pewnie wielu to pytanie przyszło na myśl, też się nad tym zastanawiam od pewnego czasu. Google oczywiście zawsze wszystko trzyma w tajemnicy, niemniej jest to całkiem prawdopodobne, że Java zostanie zastąpiona z kilku powodów czymś innym. Wg. mnie nie będzie to ani C/C++, ani Xamarin. Ten pierwszy prawdpodobnie pośrednio przyczynił się do spadku popularności Windows Phone, i wybór C/C++ nie wydaje się rozsądny w drugiej połowie drugiej dekady XXI wieku, m.in. ze wzg. na fakt, że procesory są szybkie, internet mobilny (a zatem, m.in. cloud computing i inne usługi serwowane przez serwery) powszechny, a nikt raczej nie spodziewa się po "podręcznych kalkulatorach" nie wiadomo jakich obliczeń.

Powody oraz kryteria, które wg. mnie przemawiają za wyborem nowej platformy:

  • Google przejął (zakupił) projekt Android, choć na rynku było dostępnych więcej rozwiązań; Java jest popularnym językiem w tej firmie, w dodatku dojrzałym, więc potencjalny wybór pewnie padnie na jakąś dojrzałą platformę (jaką Java ciągle jest / była w momencie wyboru) oraz bardzo popularnym językiem
  • z ww. względu wydaje się, że Dart jest raczej mało prawdopodobnym kierunkiem (ze wzg. na konieczność nauki nowego języka - dla większości), choć są pewne czynniki, które nie pozwalają go od razu skreślić z listy: popularność nowoczesnych rozwiązań technologicznych, rozwój i duża popularność JavaScript, monopol Androida na rynku
  • na tą chwilę myślę, że prawdopodobnie będzie to Kotlin, gdyż już jest używany w Android, co więcej, pozwala na gładkie przejście od Javy, i ma niezłe wsparcie od twórców

Dla zainteresowanych, artykuł z netu (powyższe to moje przemyślenia, tutaj wypowiedź nieco odmienna): https://www.sitepoint.com/java-free-android/

0

Swift odcina się od objective-c. I dobrze. Google ponoć bardzo przychylnie się spogląda w tym kierunku. I myślę, że to będzie się rozwijać, bo oracle robi problemy.

0

Kotlin? Może i tak, ale chyba prędzej GOlang. Po co jeszcze raz się pchać w JVM jak można użyć swojego języka.

Google ponoć bardzo przychylnie się spogląda w tym kierunku.

W tym kierunku? czyli w jakim?

0

Wygląda na to, że jednak chyba JavaScript zdobywa coraz bardziej popularność, a nie JVM. ReactNative jest coraz szerzej wykorzystywany i wg. opinii wielu, znacznie usprawnia pisanie multi-platform (na razie: iOS i Android) apek, które nie są jakimiś niby-native web-apkami, czy hybrydami.

0

Nie bedzie zmiany bo nie ma lepszej alternatywy.

0

Kotlin.

0
forsberg napisał(a):

Wygląda na to, że jednak chyba JavaScript zdobywa coraz bardziej popularność, a nie JVM. ReactNative jest coraz szerzej wykorzystywany i wg. opinii wielu, znacznie usprawnia pisanie multi-platform (na razie: iOS i Android) apek, które nie są jakimiś niby-native web-apkami, czy hybrydami.

Ta, JS jest dobry tylko na front bo nie ma innej alternatywy
Ciekawe jak z wielowątkowością choćby?

0

Ja bym stawiał na GoLang z racji jego zaawansowania chociażby, mozliwosci wykorzystania i tego, że to w końcu projekt Google (po godzinach) i od jakiegos czasu jest IDE od JetBrains (Gogland). Faktycznie jakiś czas temu były dziwne informacje o Swift ale nigdy oficjalne. Z drugiej strony taka nagla przesiadka na inny jezyk to byłby czysty hardcore :-)

0

Może Ceylon zastąpi na Androidzie Jave lub Rust?

3

Przecież Java umarła i nikt już jej nie używa. Programistów Java szukają tylko wtedy gdy poprzedni umrze.

3

Nic nie zastąpi javy na androidzie. Google migruję teraz na openjdk w następnych wersjach androida, wprowadza wbudowany support dla javy 8.
Jedyną sensowną alternatywą jest kotlin (ale ma też swoje problemy, choćby w postaci sporo dłuższego czasu budowania projektu).
React też ma swoje wady, ale do prostszych aplikacji się nadaje (ewentualnie do pisania części aplikacji w react, a części natywnie).

0

A jakie macie zdanie ogólnie o przyszłości programowania natywnych aplikacji? Czy do na Android(Java) lub iOS(Swift)? Czy Xamarin i tego typu rozwiązania sprawia, że trzeba jednak będzie się przekwalifikować?

0
Nadziany Kot napisał(a):

Nic nie zastąpi javy na androidzie. Google migruję teraz na openjdk w następnych wersjach androida, wprowadza wbudowany support dla javy 8.
Jedyną sensowną alternatywą jest kotlin (ale ma też swoje problemy, choćby w postaci sporo dłuższego czasu budowania projektu).
React też ma swoje wady, ale do prostszych aplikacji się nadaje (ewentualnie do pisania części aplikacji w react, a części natywnie).

ale Kotlin przynajmniej jest kompatybilny z Javą.

0

Ten wątek chyba powinienem raczej nazwać: czyTwojaReligiaToJavaCzyAntyjava(Context Android) (w interfejsie: MojeUprzedzenia) - na wzór greckich bogów, gdzie entities typu "anty" + nazwa_boga też występowały. ;) Implementacje tej metody - dowolne :P

0
Biały Ogórek napisał(a):

A jakie macie zdanie ogólnie o przyszłości programowania natywnych aplikacji? Czy do na Android(Java) lub iOS(Swift)? Czy Xamarin i tego typu rozwiązania sprawia, że trzeba jednak będzie się przekwalifikować?

Proste. Jak zawsze co się da to będzie się robić 'webowo' a co nie to natywnie. np. gry na mobilki.
Chociaz takie webassembly pewnie jeszcze spopularyzuje weba jeszcze bardziej.

0

To chyba mogłem się jednak uczyć Springa :D

0

Uczcie sie tego weba, dla programistow to bardzo dobre.

0

Polecam ReactNative, bardzo fajnie się pisze. Powstaje mnóstwo ciekawych rzeczy do RN, które ułatwiają życie i zwiększają wydajność. Spróbuj najlepiej napisać prostą apkę i albo Cię zarazi to albo nie ; )

1

Wszystkie te multiplatformowe technologie przychodzą i odchodzą, raczej żadna firma ciągnąca duże projekty nie przerzuci się na takie technologie choćby z tego względu że prawdopodobnie za 5 lat nikt już nie będzie o nich pamiętał a tym bardziej wspierał czy rozwijał. Nie mam problemu z odejściem Javy, no chyba że na jego miejsce wejdzie JavaScript, wtedy to zmieniam branże :P

0

Nie tylko Android.
https://github.com/Kotlin/ktor

1

Java na Androidzie jest tylko dlatego, że w miarę łatwo było to zaimplementować. Jeżeli chcesz odejść od javy, zarówno języka jak i platformy javopoobnej, to rozwiązaniem jest pisanie natywnie w c. Android to w końcu tylko Linux.

0

Mało kto wie, że u zarania Google (ze względu na ciągnący się potem długo konflikt prawny) rozważał sięgnięcie po C# zamiast Javę jako główny język na Andka :)

http://www.devtopics.com/google-considered-c-as-the-native-language-for-android/

1

Tak? Skoro wszyscy tak chwalą Kotlina to przyjrzyjmy się w praktyce - empirycznie czy to na pewno taki lepszy język od Javy. Niżej podaje przykład zaczerpnięty z tutorialu o języku Kotlin.
https://sii.pl/blog/czy-swiat-konczy-sie-na-javie-kilka-ciekawostek-o-kotlinie/

To samo zapisane w języku Java jak i w języku Kotlin.

@RestController
public class HelloWorldJava {
    final HelloAction helloAction;
    @Autowired
    public HelloWorldJava( HelloAction helloAction ) {
        this.helloAction = helloAction;
    }
    @RequestMapping("/java")
    public String helloWorld (String name) {
        helloAction.doAction();
        return "Hello " + name;
    }
}
@RestController
open class HelloWorldKotlin (
        open val helloAction: HelloAction) {
@RequestMapping("/kotlin")
    fun helloWorld (name : String) : String {
            helloAction.doAction()
            return "Hello " + name
    }
}

Który kod składniowo wygląda dla was prościej? No właśnie. I jak już na tym etapie przy tak prostej rzeczy zaczynają się schody, jakieś udziwnienia, jakieś dziwne wcięcia i niewiadomego pochodzenia nawiasy to jest coś nie tak. Do tego dodajmy, że public to w świecie programowania Javy i C++ to każdy wie co oznacza a open to pierwsze słyszę. Dlaczego zamiast public dali open? Kto to wymyślił? Do tego dochodzi fakt, że ten kod w Javie z pomocą Lomboka i Spring Boota można zapisać jeszcze prościej i bez adnotacji. Dlatego myślę, że ten język jest trudniejszy od Javy i pozostanie dalej w niszy razem z Scalą i Groovym. Dodatkowo 4programmers nie wspiera nawet kolorowania składni tego języka a krótszy kod nie oznacza, że lepszy kod.

3

Pewnie wyglądałoby to lepiej, gdyby ktoś nie sformatował kotlinowego snippetu jak idiota.

@RestController
open class HelloWorldKotlin(open val helloAction: HelloAction) {

  @RequestMapping("/kotlin")
  fun helloWorld(name: String): String {
    helloAction.doAction()
    return "Hello " + name
  }

}

Mniej adnotacji potrzebnych do zrobienia tego samego, mniej kodu - dla mnie bomba.
Jeśli chodzi o open - kolejna super sprawa, bo to przeciwieństwo final.

2

@karolinaa:

Tutaj masz odpowiednik. Jeżeli korzystasz z kotlina to używaj jego zalet. A odpowiadając, kotlin.

@RestController
class HelloWorldKotlin @Autowired constructor(val helloAction: HelloAction) {
    @RequestMapping("/kotlin")
    fun helloWorld (name : String)  {
        helloAction.doAction()
        return "Hello ${name}" 
    }
}

@Edit

Dlaczego zamiast public dali open

The open annotation on a class is the opposite of Java's final: it allows others to inherit from this class. By default, all classes in Kotlin are final, which corresponds to Effective Java, Item 17: Design and document for inheritance or else prohibit it.

Zdaje się że chwaliłaś Effective Java prawda?

0

@karolinaa: proponuję poczytać niezłą serię postów Leivy na temat Kotlina: https://antonioleiva.com/kotlin/

Dobrym wprowadzeniem jest też - stara, ale w dużej mierze aktualna - pogadanka Whartona na ten temat:

Jak szukałem tych materiałów, nie doczytałem tego w jej poście:

karolinaa napisał(a):

Dodatkowo 4programmers nie wspiera nawet kolorowania składni tego języka

:))) No to teraz już raczej wiadomo że to podpucha, ale może ww materiały kogoś zaciekawią więc i tak zostawiam

0

A przy okazji - z pewnej mojej prezentacji na temat Kotlina.

Funkcja zwracająca 10 najczęściej występujących w danym tekście słów, z zastrzeżeniem że muszą być co najmniej trzyliterowe:

fun getTopWords(text: String): Iterable<String> = text
    .split("\\s")
    .filter { it.length >= 3 }
    .groupBy { it }
    .asIterable()
    .sortedByDescending { it.value.count() }
    .take(10}
    .map { it.key }

Proszę o wersję w Javie na Androida. Tylko biblioteki standardowe rzecz jasna.

0

@V-2:

    public static List<String> getTopWords(final String text) {
        return Stream.of(text.split("\\s"))
                .filter(s -> s.length() > 3)
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
                .entrySet()
                .stream()
                .sorted(Comparator.comparing(Map.Entry::getValue))
                .limit(10)
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());
    }

no i co łyso?

public static int countOccurences(Collection<?> collection, Object o) {
        return Collections.frequency(collection,o);
}

funkcja obliczająca liczbę wystąpień obiektu w kolekcji. Teraz proszę o wersję w Kotlinie na Androida. Tylko biblioteki standardowe rzecz jasna !!!!!!!!!!!!!!!!!!!

0 użytkowników online, w tym zalogowanych: 0, gości: 0