选择App网站开发编程语言有以下几点需要注意:
实用:语言应该给开发人员在不消耗太多资源的情况下对特定项目的控制权。
流行:该语言应该非常流行,以便有大量的工具、框架和资源支持它。它应该是团队的其他成员都熟悉的。
繁荣:语言应该在几年后才可以使用,而不是仅仅是现在。
归根结底,最好的编程语言取决于具体情况,但作为应用程序开发人员,App网站开发需要用到什么编程语言我们可以归纳出一些普遍的要点。
原生app:Swift(IOS):创建一个iOS应用程序。iOS应用程序是用Xcode编写的,它使用两种语言中的一种:ObjectiveC或Swift。Swift更容易阅读、书写和使用,能更好地管理内存和硬件,可读性更强,需要的代码更少。它不能用于Android开发,但如果只是开发ios应用,Swift是最好的选择。
Java(Android):Java是一种面向对象的编程语言,Andorid *** 作系统是用Java编写的,所以它的编译速度要快一些。
Kotlin(Android):Kotlin是一种较新的语言。它也可以编译成JavaScript,这使得它更加灵活。
Java和Kotlin也可以很好地互换。它们是不同的语言,但是你可以从Kotlin中调用Java,从Java中调用Kotlin。在编译之后,甚至无法分辨Java和Kotlin类之间的区别。它虽然开发方式有点不同,但是最终产品是非常相似的。
APICloudStudio3:基于业界领先的代码编辑器-Vscode深度定制,可以快速轻松地构建多端应用,同时为Windows、Mac和Linux提供了出色的开发体验,可以选择自己喜欢的 *** 作系统进行开发。
网站开发前端和Web编程语言:
JavaScript:JavaScript是开发前端应用程序最有用的编程语言。它是最流行的前端工具和框架的首选语言。
HTML5CSS3:超文本标记语言。与HTML一样,CSS(层叠样式表)也是一种标记语言。HTML关注的是结构、功能和文字,而CSS关注的是设计。颜色、视觉效果以及更多的内容都由CSS完成。
如果需要做任何一种app网站开发应用程序,学习CSS是必须的。它是用户和实际产品之间的最后一层,决定了站点的外观和感觉。
一个新特性的出现必然是为了解决之前遗留的开发问题和提升目前开发效率。扩展函数也是如此。
首先来介绍下OOP: 开放封闭原则 。
举个栗子: 当某个三方库的功能无法满足现有业务时需要新增功能时。最简单的做法就是 直接对库源码修改 ,但是这样违反了开放封闭原则:对源码 修改 。
更合理的方案是依靠 扩展 。Kotlin的扩展函数很显然能够优雅的解决这种问题。
首先来看下他的使用:
我们将MutableList叫做接受者(receivers),意思就是这个MutableList接受了这个函数,也就是给这个类扩展了这个函数。
Java中的 this叫做调用者 ,对于普通函数来说就是该函数所属类的实例也就是调用者对象。由于这个函数是属于MutableList的,所以在这个方法体中this也就是指代的MutableList。 通俗的来说 扩展函数体里面的this就是receivers的类型
根据上面定义的扩展函数栗子,来看下这个扩展函数的用法:
还是回到刚刚第二个话题,这次的 是什么 就不是简单的介绍了。之前有篇文章讲解过新技术必然离不开 性能方面 的考虑。因此再来讲解下他是如何实现扩展函数的,我们通过解析他的反编译字节码~~
可以看到该函数会变成一个 静态不可重写 的方法,并且 receiver变成了第一个参数 。扩展函数里的的this就是receiver参数。
看来并没有什么神奇的地方只是将扩展函数变成了一个静态方法而已。所以性能方面是没有影响的
这里首先说明下,扩展函数定义在不同的地方效果也是不一样的。
可以看到上面反编译后的扩展函数就是这种类型,被static,public,final修饰的方法会有这个特征:在 同一个包中是可以共享这个扩展函数 的也就是可以调用到这个扩展函数。其他包里面如果也想使用这个函数就可以import这个包中的这个函数即可。
这时候诡异的事情出现了, 扩展函数无法被调用 。接下来看下对应的扩展函数反编译后的字节码:
可以看到失去了static关键字并且变成了外部类中的方法(和正常的方法没什么区别了),也就是 其他地方调用不到了,只有该类或者该类的子类可以调用 ;如果失去了public关键字,那么将只有该类才能使用这个扩展函数,其子类也无法使用。
前面介绍了扩展函数实现的原理并且看到了扩展函数的作用域信息,接下来分析下扩展函数在哪些场景下会被限制。
首先来回顾下普通的静态函数/变量如何定义,在Kotlin中使用伴生对象类将函数/变量定义在其中,那么该函数/变量就是静态函数/变量了。
和普通函数/变量一样,扩展函数也是一样的定义方式,在伴生对象中定义扩展函数:
这样foo就不需要Son的实例直接可以通过Son的类名进行调用了。
这样似乎看起来没有什么问题,但是当我们 需要扩展三方类的静态函数 时,如果其没有用Kotlin的伴生对象指定静态方法/变量,那么该方案将无法使用,只能用 实例去调用 。
有没有想过这样一种情况:就是这个类扩展的函数名之前在这个类中就已经存在了,那么调用这个方法时,会调用扩展函数还是之前类中定义好的方法。
答案是:之前类中定义的方法、 因此: 成员方法优先级高于扩展函数
当我们在类中使用扩展函数时,在扩展函数体内想要获取当前类的this,而不是默认的扩展函数的receivers的类型的时候,我们可以指定this@类名来指向外部类。
调用者类型是运行时类型,而接受者类型是编译时类型也就是说当扩展被生命为成员函数时具体调用哪个类的扩展方法是由它的运行时类型决定,而具体调用哪个扩展方法是根据其被定义为什么类型也就是编译时可知类型。
还是java中的规则: 重载基于编译时类型,重写基于运行时类型。
所以在编写扩展函数时需要注意
Kotlin的扩展函数是非常好用的,其符合OOP原则,而且还可以扩展很多函数Google的ktx库也是基于这个功能开发了很多好用的方法。
kotlin出来很多年,并被google被赋予Android首选开发语言的地位,还是有必要研究一下的,基础语法不再复述了,只简单聊聊kotlin中的核心内容之一:协程 Coroutine。
相关概念和API可以直接进入[官网](>
内联类必须具有在主构造函数中初始化的单个属性。在运行时,内联类的实例将使用这个单一属性表示(请参阅 下面 有关运行时表示的详细信息):
这是内联类的主要特征:类的数据被 内联 到使用它的地方。
内联类的属性不能拥有 backing fields , 内联类只能拥有简单的计算属性 (不能拥有延迟初始化属性或委托属性)。
在生成的代码中,Kotlin 编译器为每个内联类保留一个 包装器。 内联类实例可以在运行时表示为包装器或底层类型。 类似于Int可以表达为基本类型int, 也可以表达为包装类Integer。 Kotlin编译器更喜欢使用底层类型而不是包装器来生成最高性能和优化的代码。但是,有时需要保留包装器。根据经验,内联类在用作另一种类型时都会被装箱。
因为内联类既可以表示为基础值,也可以表示为包装器,因此 引用相等 对它们没有意义,因此被禁止。
由于内联类被编译为它们的底层类型,它可能会导致各种模糊的错误,例如意外的平台签名冲突:
为了解决这种问题,使用内联类的函数会通过在函数名称中添加一些稳定的哈希码来 破坏 。因此,fun compute(x: UInt)将表示为public final void compute- (int x),从而解决了冲突问题。
乍一看,内联类似乎与类型别名非常相似。实际上,两者似乎都引入了一种新类型,并且两者都将在运行时表示为底层类型。然而,关键的区别在于类型别名与其底层类型(以及具有相同底层类型的其他类型别名) 赋值兼容,而内联类则不然。 换句话说,内联类引入了一种真正的 新 类型,与类型别名相反,类型别名只为现有类型引入替代名称(别名):
以上就是关于开发APP用什么样的编程语言全部的内容,包括:开发APP用什么样的编程语言、Kotlin的扩展函数知识点、Kotlin Coroutine在 Android 中的使用和封装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)