golang python对比,go语言和python对比
科特林是功能非常强大的编程语言,在爪哇岛以及多种语言的基础上,去掉了冗余代码,方便开发者用较少的模板编写更多的代码。尤其是在机器人开发中。除了编程语言自身和它的类之外科特林还为已有的爪哇类提供一组好用的扩展。这个例子是请求应用程序接口和下载结果的方法,通过对比我们可以更加直观了解科特林的艺术。
应用程序接口请求:Java与科特林对比
使用安卓开发环境的科特林插件,可以很方便的把爪哇岛代码转换成科特林代码,通过两种语言进行对比,看看坚持使用爪哇会错过什么。
下面是爪哇岛代码:
公共字符串url(字符串apiUrl) {
尝试{
URL url=null
url=新URL(API URL);
URL连接=(http urlConnection)URL。打开连接();
URL连接。setrequestmethod( GET );
URL连接。connect();
InputStream输入流=URL连接。getinputstream();
string buffer buffer=new string buffer();
if (inputStream==null) {
//无所事事。
返回空
}
reader=新缓冲读取器(新输入流读取器(输入流));
弦线;
while ((line=reader.readLine())!=null) {
缓冲区.附加(行\ n’);
}
if (buffer.length()==0) {
返回空
}
结果=缓冲区。tostring();
} catch(协议异常e) {
e。printstacktrace();
} catch (IOException e) {
Log.e(请求,错误,e);
返回空
}最后{
if (urlConnection!=null) {
URL连接。disconnect();
}
如果(读者!=null) {
尝试{
读者。close();
} catch(最终IOException e) {
Log.e(请求,关闭流时出错,e);
}
}
}
返回空
}
下面是科特林代码
趣味网址(apiUrl: String): String?{
返回URL(apiUrl).readText()
}
没有看错,就是一行,是不是很神奇科特林标准库为统一资源定位器类提供了扩展函数,避免我们编写所有代码。
对于大量的响应,不建议使用这个函数,但是在大多数情况下,它是足够了。如果不这样,还有许多其他有趣的扩展函数,如:BufferedReader.forEachLine(),它产生行序列,我们可以用它们中任何一个。或是,可以通过BufferedReader.lineSequence()得到原始的序列。这时,你能够使用顺序进行各种操作,如:过滤、排序、映射等等。
异步请求
主线程是负责用户界面呈现和交互的,我们不应该因其它运行时间长的任务阻塞它,这将会影响用户界面性能。在超文本传送协议请求情况下,Android SDK甚至通过抛出一个异常来阻止我们这么做。在机器人典型的解决方案是使用异步任务。异步任务有一个操作抽象方法,使得方法在另个线程中执行。
爪哇岛例子
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。活动_主);
TextView TextView=(TextView)findViewById(r . id。TV _ title);
文本视图。settext( hello );
task=new AsyncTask() {
@覆盖
受保护的字符串背景(Void.params) {
返回requestFromServer(" ");
}
@覆盖
受保护的void onPostExecute(字符串){
如果(!isFinishing()!isCancelled()) {
Log.d(Request ,s);
吐司。制作文本(主要活动2。“这,”请求已执行,吐司.长度_长)。show();
}
}
};
}
@覆盖
受保护的void onDestroy() {
超级棒。on destroy();
如果(任务!=null) {
任务。取消(真);
任务=空
}
}
私有字符串请求服务器(字符串){
返回s;
}
这实在不清晰也不直观。学习科特林开发时,我们不能漏掉安科库。它主要目的是提供数字式用户线路方式用代码来创建布局,而不是用XML。我实际使用过XML,所以我现在不使用它了,但是它还是包括一整套非常有用的特性。特别对异步任务有些小的DSL。
科特林代码
val result=URL(" ").readText()
uiThread {
Log.d(请求,结果)
longToast("请求已执行")
}
}
实际上,你有异步非同步(异步)函数,它将在另一个线程中执行代码,并由线程
给一个回归主线的机会。Async是Context的扩展函数实现,其弱应用不会阻止GC释放内存。
线程
优点是可以根据使用类别以不同的方式实现。如果我们称之为活动,就说第二幕Activity . is finishing()
在这种情况下,uiThread代码不会被执行,也不会崩溃。
假设要用future,Async返回Java Future。如果需要返回未来结果,可以使用asyncResult。
您也可以使用自己的执行器:
doAsync(执行者){
//一些任务
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。