void 函数不打印,因为不能 return 值,但是当我创建 string 或 int 函数时,它会在末尾自动打印 null 或 return 值
void function not printing because cant return value but when i make string or int function it print null or return value at the end automatically
dart 新手,以下面的代码为例,//void 函数不起作用并且 int/string 函数要么打印 returns null 要么自动打印值 return从输出中可以看出。
class Microphones{
String? name;
String? color;
int? model;
String printEverything(){
print(name);
return " ";
}
int? printint(){
print(model);
}
}
void main() {
var mic1=Microphones();
print(mic1.name);
mic1.name="Yeti";
mic1.color="black";
mic1.model=26;
print(mic1.name);
print(mic1.color);
print(mic1.model);
print(mic1.printEverything());
print(mic1.printint());
}
output:
null
Yeti
black
26
Yeti
26
null
我非常感谢你在这方面的 replies/help。
如果您没有 returning 任何东西(通过在指定给 return 的方法中有一个空的 return
void
或在方法 returning void
或可空类型(如 int?
)中根本没有任何 return
)。
但是方法签名中的return-type指定了方法的调用者应该如何看到这个值。这里我们有 void
,在 Dart 语言教程中被描述为:
A special type that indicates a value that’s never used.
https://dart.dev/guides/language/language-tour#a-basic-dart-program
因此我们指定 void
来向我们方法的用户发出信号,即永远不应使用 returned 值。然后 Dart 分析器和编译器将非常努力地确保您最终不会使用 returned 值类型 void
.
好奇的高级部分
但这并不意味着不可能使用方法签名指定为 void
的 returned 值:
void someMethod() {
void someVoidVariable = 'Hey, I am a String!';
return someVoidVariable;
}
void someOtherMethod() => 'Hey, I am also a String!';
void main() {
print(someMethod() as String); // Hey, I am a String!
print(someOtherMethod() as String); // Hey, I am also a String!
}
在第一个示例中,我们强制 Dart 将我们的 String
视为 void
。这完全没问题,因为所有类型都可以看作 void
。然后我们可以 return 这个 void
值,因为 someMethod()
假设 return void
.
这种强制的原因是 Dart 会抱怨(这是有道理的,因为我们正在做的事情非常愚蠢,不应该在真正的程序中):
void someMethod() {
return 'Hey, I am a String!';
// ERROR: A value of type 'String' can't be returned from the function
// 'someMethod' because it has a return type of 'void'.
}
或者这是因为我们无法使用 as
转换为 void
:
void someMethod() {
return 'Hey, I am a String!' as void; // ERROR: Expected a type name.
}
然后我们将 void
转换回 String
让 Dart 允许我们在 print()
中使用 returned 值(因为 Dart 否则会阻止我们避免尝试使用 void
键入的值)。
在第二个示例中,我展示了事情之所以如此运作的原因之一。在 Dart 中,我们可以编写这两个方法,它们将执行完全相同的操作(请注意,在本例中,我将 return 类型更改为 String
):
String someOtherMethod() {
return 'Hey, I am also a String!';
}
String someOtherMethod() => 'Hey, I am also a String!';
所以第二种方式是 shorthand 如果我们只想执行一个语句并且 return 它的值。
但是:
void someOtherMethod() => 'Hey, I am also a String!';
如果我们遵循传统规则,这是不允许的,因为我们不能 return a String
因为我们已经输入了 void
。但有时,我们也想使用这种简单的语法来执行一个方法,而不想关心该方法最终会发生什么 returning.
例如这个:
final someList = <String>[];
void removeStringFromList(String string) => someList.remove(string);
List
上的 remove
方法实际上是 returning 一个 bool
,它指示元素是否在列表中。
所以当我们使用 =>
时 Dart 忽略了这个问题,在这种情况下只是将结果转换为 void
。所以在我们最后的例子中,returned bool
实际上是 returned 到 removeStringFromList
的调用者,但是因为它的类型已经被转换为 void
,所以removeStringFromList
的调用者被阻止(在很多方面)使用该值。
dart 新手,以下面的代码为例,//void 函数不起作用并且 int/string 函数要么打印 returns null 要么自动打印值 return从输出中可以看出。
class Microphones{
String? name;
String? color;
int? model;
String printEverything(){
print(name);
return " ";
}
int? printint(){
print(model);
}
}
void main() {
var mic1=Microphones();
print(mic1.name);
mic1.name="Yeti";
mic1.color="black";
mic1.model=26;
print(mic1.name);
print(mic1.color);
print(mic1.model);
print(mic1.printEverything());
print(mic1.printint());
}
output:
null
Yeti
black
26
Yeti
26
null
我非常感谢你在这方面的 replies/help。
如果您没有 returning 任何东西(通过在指定给 return 的方法中有一个空的 return
void
或在方法 returning void
或可空类型(如 int?
)中根本没有任何 return
)。
但是方法签名中的return-type指定了方法的调用者应该如何看到这个值。这里我们有 void
,在 Dart 语言教程中被描述为:
A special type that indicates a value that’s never used.
https://dart.dev/guides/language/language-tour#a-basic-dart-program
因此我们指定 void
来向我们方法的用户发出信号,即永远不应使用 returned 值。然后 Dart 分析器和编译器将非常努力地确保您最终不会使用 returned 值类型 void
.
好奇的高级部分
但这并不意味着不可能使用方法签名指定为 void
的 returned 值:
void someMethod() {
void someVoidVariable = 'Hey, I am a String!';
return someVoidVariable;
}
void someOtherMethod() => 'Hey, I am also a String!';
void main() {
print(someMethod() as String); // Hey, I am a String!
print(someOtherMethod() as String); // Hey, I am also a String!
}
在第一个示例中,我们强制 Dart 将我们的 String
视为 void
。这完全没问题,因为所有类型都可以看作 void
。然后我们可以 return 这个 void
值,因为 someMethod()
假设 return void
.
这种强制的原因是 Dart 会抱怨(这是有道理的,因为我们正在做的事情非常愚蠢,不应该在真正的程序中):
void someMethod() {
return 'Hey, I am a String!';
// ERROR: A value of type 'String' can't be returned from the function
// 'someMethod' because it has a return type of 'void'.
}
或者这是因为我们无法使用 as
转换为 void
:
void someMethod() {
return 'Hey, I am a String!' as void; // ERROR: Expected a type name.
}
然后我们将 void
转换回 String
让 Dart 允许我们在 print()
中使用 returned 值(因为 Dart 否则会阻止我们避免尝试使用 void
键入的值)。
在第二个示例中,我展示了事情之所以如此运作的原因之一。在 Dart 中,我们可以编写这两个方法,它们将执行完全相同的操作(请注意,在本例中,我将 return 类型更改为 String
):
String someOtherMethod() {
return 'Hey, I am also a String!';
}
String someOtherMethod() => 'Hey, I am also a String!';
所以第二种方式是 shorthand 如果我们只想执行一个语句并且 return 它的值。
但是:
void someOtherMethod() => 'Hey, I am also a String!';
如果我们遵循传统规则,这是不允许的,因为我们不能 return a String
因为我们已经输入了 void
。但有时,我们也想使用这种简单的语法来执行一个方法,而不想关心该方法最终会发生什么 returning.
例如这个:
final someList = <String>[];
void removeStringFromList(String string) => someList.remove(string);
List
上的 remove
方法实际上是 returning 一个 bool
,它指示元素是否在列表中。
所以当我们使用 =>
时 Dart 忽略了这个问题,在这种情况下只是将结果转换为 void
。所以在我们最后的例子中,returned bool
实际上是 returned 到 removeStringFromList
的调用者,但是因为它的类型已经被转换为 void
,所以removeStringFromList
的调用者被阻止(在很多方面)使用该值。