質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

2回答

1104閲覧

Dartで関数を返す関数の型注釈はどうすれば良いか?

moriman

総合スコア615

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/03/18 08:25

https://jsprimer.net/basic/function-scope/

javascript

1// `increment`関数を定義して返す関数 2function createCounter() { 3 let count = 0; 4 // `increment`関数は`count`変数を参照 5 function increment() { 6 count = count + 1; 7 return count; 8 } 9 return increment; 10} 11// `myCounter`は`createCounter`が返した関数を参照 12const myCounter = createCounter(); 13myCounter(); // => 1 14myCounter(); // => 2 15// 新しく`newCounter`を定義する 16const newCounter = createCounter(); 17newCounter(); // => 1 18newCounter(); // => 2 19// `myCounter`と`newCounter`は別々の状態持っている 20myCounter(); // => 3 21newCounter(); // => 3

よくあるカウンターのサンプルなんですが、同じ意味のコードをDartで書こうと思っています。

Dart

1void main(){ 2 3 createCounter(){ 4 int count=0; 5 6 int increment(){ 7 count=count+1; 8 return count; 9 } 10 return increment; 11 } 12 13 myC=createCounter(); 14 myC(); 15 myC(); 16}

とりあえず書いてみたのですが、最後の2行で
The function 'myC' isn't defined
のエラーが出ます。
createCounter()関数の型注釈の仕方がわかりません。どうすれば良いでしょうか?
Dartでは関数宣言で型注釈付けないこと自体は問題無いですかね。
ただエラーが出るということもあるし、型注釈を書いたり書かなかったりというのは
モヤモヤするので、やはり型注釈が必要な気がします。
とりあえずエラーが出ないようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

void main(){
Function createCounter(){
int count=0;

int increment(){ count=count+1; return count; } return increment;

}

Function myC=createCounter();
print(myC());
print(myC());
}

Function型で型注釈すればいけました。

投稿2020/03/19 01:42

moriman

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Dart よく分かりませんが、typdef しないといけないっぽいですね。

dart

1typedef Compare = int Function(Object a, Object b); 2 3class SortedCollection { 4 Compare compare; 5 6 SortedCollection(this.compare); 7}

参考: Typedefs - Language tour | Dart
参考: sdk/generic-function-type-alias.md at master · dart-lang/sdk

投稿2020/03/19 01:33

hoshi-takanori

総合スコア7899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2020/03/19 01:42

回答を頂きましてありがとうございます。 Function型で型注釈すればいけました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問