寻找最聪明、最有效和最易读的方法来执行以下操作:
int one = 1, two = 2;
int larger = one < two?two:one;
Run Code Online (Sandbox Code Playgroud)
我更喜欢(或以下的可变参数版本):
int largest(one,two){return one<two?two:one;}
int larger = largest(one,two);
Run Code Online (Sandbox Code Playgroud)
但是 dart 没有内联或宏。
带清单:
var nums = [51,4,6,8];
nums.sort();
in largest = nums.last
Run Code Online (Sandbox Code Playgroud)
或者(谢谢你,君特 Zöchbauer):
print([1,2,8,6].reduce(max));
Run Code Online (Sandbox Code Playgroud)
使用数学库:
import 'dart:math';
int largest = max(21,56);
Run Code Online (Sandbox Code Playgroud)
可能是最好的,但与第一种方法相比,max 的效率如何?
为什么这样问?
使用第一种方法时,我必须检查对它们中的每一个进行比较是否正确;有时会进行数百次比较。有了第二个,只需要验证一个函数,却有数百个函数调用。
文档:https://www.dartdocs.org/documentation/analyzer_experimental/0.8.0/analyzer/parseCompilationUnit.html
一些聪明的程序员在野外的优秀样本:https://github.com/mythz/dart-samples/blob/master/frog/leg/scanner/keyword.dart
RecursiveASTVisitor api:https://www.dartdocs.org/documentation/analyzer_experimental/0.8.0/analyzer/RecursiveASTVisitor-class.html
现在示例代码已移至下面的wiki.
IDE或编辑器所依赖的包用于检测错误.
git:https://github.com/dart-lang/dart-services
安装:
运行服务器:
客户端代码:
import "dart:convert";
import "dart:io";
const String url = "localhost";
const String path = r"api/dartservices/v1/analyze";
String src = """
main(){
print('hi');
}
""";
void main() {
analyse();
}
analyse() async {
Map m = {'source': src};
var client = new HttpClient();
String data = JSON.encode(m);
HttpClientRequest request = …
Run Code Online (Sandbox Code Playgroud) 寻找一个相当于python过滤器的飞镖
a = ['', None,4]
[print(e) for e in filter(None,a)]
Run Code Online (Sandbox Code Playgroud)
我的代码太丑了:
List a = [null,2,null];
List b=new List();
for(var e in a){if(e==null) b.add(e);}
for(var e in b){a.remove(e);}
print(a);
Run Code Online (Sandbox Code Playgroud) dart ×3