Ngân hàng câu hỏi của chương

Câu hỏi: PRM393 - Dart cơ bản: biến, kiểu dữ liệu, null safety

62 câu trắc nghiệm kèm lời giải của môn Lập trình di động (Flutter) - Mobile Programming, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/62 câuCòn 42
AStoring values without keys
BStoring key-value pairs
CRendering UI components
DManaging asynchronous tasks
Lời giải
Maps trong Dart là một cấu trúc dữ liệu mạnh mẽ giúp lưu trữ và truy xuất dữ liệu một cách hiệu quả. Khi sử dụng Maps, bạn có thể lưu trữ các giá trị theo cặp khóa-giá trị (key-value pairs), điều này giúp bạn có thể truy xuất và cập nhật dữ liệu một cách dễ dàng và nhanh chóng. Ví dụ, bạn có thể sử dụng Maps để lưu trữ thông tin về người dùng, bao gồm tên, tuổi, địa chỉ, v.v. Mỗi khóa sẽ đại diện cho một thuộc tính, và giá trị tương ứng sẽ chứa thông tin chi tiết về thuộc tính đó. Điều này giúp bạn có thể quản lý và truy xuất dữ liệu một cách hiệu quả, giảm thiểu thời gian và công sức.
Mở trang câu hỏi này →
AWidgets
BPackages and imports
CHot reload
DLayout constraints
Lời giải
Dart cung cấp một số tính năng giúp tổ chức mã nguồn vào các thư viện có thể tái sử dụng. Thư viện là một tập hợp các mã nguồn có thể được sử dụng lại trong nhiều dự án khác nhau. Trong Dart, tính năng giúp tổ chức mã nguồn vào các thư viện có thể tái sử dụng là Packages và imports. Packages là các thư viện có thể được tải xuống và sử dụng trong dự án của bạn, trong khi imports là cách để bạn thêm các thư viện vào dự án của mình. Điều này giúp giảm thiểu sự lặp lại và tăng cường tính tái sử dụng của mã nguồn.
Mở trang câu hỏi này →
AMixins
BGenerics
CFutures
DStreams
Lời giải
Tính năng Dart cho phép định nghĩa các thành phần có thể tái sử dụng và an toàn về kiểu dữ liệu là Generics. Generics cho phép bạn định nghĩa các lớp hoặc hàm có thể hoạt động với nhiều loại dữ liệu khác nhau mà không cần phải viết lại mã nguồn. Điều này giúp tăng cường tính linh hoạt và tái sử dụng của mã nguồn Dart. Ví dụ, bạn có thể định nghĩa một lớp danh sách có thể chứa các phần tử có kiểu dữ liệu khác nhau, chẳng hạn như số nguyên, chuỗi hoặc đối tượng.
Mở trang câu hỏi này →
4`?.` and `??` in null safety:4 lựa chọn
A`?.` safely accesses if non-null; `??` supplies a value when the left side is null
B`?.` always throws if null
C`??` is only for List
DBoth force non-null
Lời giải
Trong lập trình an toàn null, `?.` và `??` là hai toán tử quan trọng. `?.` được gọi là toán tử null-aware, nó cho phép truy cập vào một đối tượng hoặc phương thức mà không gây ra lỗi null. Ví dụ, nếu bạn có một biến `user` có thể là null, thì bạn có thể sử dụng `user?.name` để truy cập vào tên của người dùng mà không gây ra lỗi. Nếu `user` là null, thì biểu thức sẽ trở thành null thay vì gây ra lỗi. `??` là toán tử null-coalescing, nó cho phép cung cấp một giá trị mặc định khi đối tượng hoặc phương thức bên trái là null. Ví dụ, `user?.name ?? 'Unknown'` sẽ trả về tên của người dùng nếu có, hoặc 'Unknown' nếu không có. Điều này giúp tránh các lỗi null và làm cho mã của bạn trở nên an toàn hơn. Tóm lại, `?.` được sử dụng để truy cập vào đối tượng hoặc phương thức mà không gây ra lỗi null, trong khi `??` được sử dụng để cung cấp một giá trị mặc định khi đối tượng hoặc phương thức bên trái là null.
Mở trang câu hỏi này →
AIt is never lazy
BYou usually need `toList()` / `for-in` to actually run and collect results
CIt is already a full `List` right after `map`
DOnly works with `Set`
Lời giải

Khi sử dụng hàm `map` trên một đối tượng có thể lặp lại (`Iterable`), nó sẽ trả về một đối tượng có thể lặp lại lazy. Điều này có nghĩa là kết quả của hàm `map` sẽ không được tính toán ngay lập tức, mà sẽ được tính toán khi bạn thực sự cần nó. Để lấy được kết quả của hàm `map`, bạn thường cần sử dụng phương thức `toList()` hoặc vòng lặp `for-in`. Ví dụ, nếu bạn có một danh sách các số và muốn tạo một danh sách các số bình phương, bạn có thể sử dụng hàm `map` như sau: ```swift

Lời giải
let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map { $0 * $0 }
print(squares) // [1, 4, 9, 16, 25]

``` Tuy nhiên, nếu bạn muốn lấy được kết quả của hàm `map` ngay lập tức, bạn có thể sử dụng phương thức `toList()` như sau: ```swift

Lời giải
let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map { $0 * $0 }.toList()
print(squares) // [1, 4, 9, 16, 25]

``` Tóm lại, hàm `map` trên `Iterable` trả về một đối tượng có thể lặp lại lazy, và bạn thường cần sử dụng phương thức `toList()` hoặc vòng lặp `for-in` để lấy được kết quả.

Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Một tập hợp Dart là một tập hợp dữ liệu cho phép lưu trữ các giá trị trùng lặp. Tập hợp Dart không giống như các tập hợp trong toán học, nơi mà các phần tử phải duy nhất. Trong Dart, bạn có thể thêm nhiều lần một phần tử vào tập hợp, và nó sẽ không gây ra lỗi. Điều này làm cho tập hợp Dart trở thành một công cụ mạnh mẽ trong việc quản lý và thao tác dữ liệu. Ví dụ, bạn có thể sử dụng tập hợp để lưu trữ các giá trị duy nhất trong một danh sách, hoặc để loại bỏ các phần tử trùng lặp trong một tập hợp.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Khi thêm từ khóa 'const' vào các widget tĩnh trong ứng dụng, nó ngăn chặn chúng được xây dựng lại trong quá trình cập nhật ứng dụng. Điều này là do từ khóa 'const' chỉ định rằng giá trị của widget không thể thay đổi sau khi được khởi tạo. Vì vậy, khi ứng dụng được cập nhật, các widget 'const' sẽ không bị ảnh hưởng bởi các thay đổi và vẫn giữ nguyên trạng thái ban đầu. Điều này giúp tăng hiệu suất và giảm thiểu thời gian tải lại ứng dụng.
Mở trang câu hỏi này →
8const variables are?4 lựa chọn
ARuntime values
BAssigned later
CCompile-time constants
DNullable
Lời giải
Biến hằng trong lập trình là những giá trị được xác định trước khi chương trình được biên dịch. Chúng được sử dụng để lưu trữ các giá trị không thay đổi trong suốt quá trình chạy chương trình. Biến hằng thường được sử dụng để lưu trữ các giá trị như tên lớp, tên phương thức, tên biến, v.v. Chúng được xác định bằng từ khóa const và không thể được thay đổi sau khi được khai báo.
Mở trang câu hỏi này →
9Dart is a ____ language4 lựa chọn
AProcedural
BObject-oriented
CAssembly
DMarkup
Lời giải
Dart là một ngôn ngữ lập trình hướng đối tượng. Nó được thiết kế để tạo ra các ứng dụng di động và web nhanh chóng và hiệu quả. Ngôn ngữ này hỗ trợ các tính năng như lớp, kế thừa, đa hình và giao diện. Dart cũng có thể được sử dụng để tạo ra các ứng dụng máy tính để bàn và các ứng dụng khác. Nó được sử dụng rộng rãi trong việc phát triển các ứng dụng di động và web bằng cách sử dụng framework Flutter. Dart cung cấp một môi trường lập trình mạnh mẽ và linh hoạt, giúp các nhà phát triển có thể tạo ra các ứng dụng phức tạp và đa dạng.
Mở trang câu hỏi này →
10Dart is developed by?4 lựa chọn
AApple
BMicrosoft
CGoogle
DAmazon
Lời giải
Dart là một ngôn ngữ lập trình được phát triển bởi Google. Nó được thiết kế để xây dựng các ứng dụng di động và web. Dart được giới thiệu lần đầu tiên vào năm 2011 và đã trở thành một trong những ngôn ngữ lập trình phổ biến nhất hiện nay. Dart có thể được sử dụng để xây dựng các ứng dụng di động trên các nền tảng khác nhau, bao gồm cả Android và iOS. Nó cũng có thể được sử dụng để xây dựng các ứng dụng web và các ứng dụng máy tính để bàn. Dart được biết đến với tính linh hoạt và khả năng mở rộng cao, khiến nó trở thành lựa chọn phổ biến cho các nhà phát triển phần mềm.
Mở trang câu hỏi này →
11Entry point of a Dart program is?4 lựa chọn
Astart()
Brun()
Cinit()
Dmain()
Lời giải
Câu hỏi này hỏi về điểm nhập vào của một chương trình Dart. Điểm nhập vào là nơi mà chương trình bắt đầu thực hiện. Trong Dart, điểm nhập vào được xác định bởi hàm chính, được gọi là 'main()'. Hàm này là nơi mà chương trình được thực hiện và nó được gọi khi chương trình được chạy. Các lựa chọn khác như 'start()', 'run()', 'init()' không phải là điểm nhập vào chính thức của một chương trình Dart.
Mở trang câu hỏi này →
Atypeof(var)
Bvar.type
Cvar.runtimeType
DgetType(var)
Lời giải
Để kiểm tra loại biến trong lập trình, bạn cần sử dụng các hàm hoặc phương thức khác nhau tùy thuộc vào ngôn ngữ lập trình. Trong trường hợp này, chúng ta đang tìm kiếm cách kiểm tra loại biến trong một số ngôn ngữ lập trình phổ biến. Các lựa chọn bao gồm: typeof(var), var.type, var.runtimeType và getType(var).
Mở trang câu hỏi này →
Aint.parse()
BtoInt()
Ccast()
Dconvert()
Lời giải

Để chuyển đổi một chuỗi thành số nguyên trong Dart, bạn có thể sử dụng phương thức int.parse(). Phương thức này sẽ nhận vào một chuỗi và trả về một số nguyên. Ví dụ, bạn có thể sử dụng nó như sau: int number = int.parse('123');. Ngoài ra, bạn cũng có thể sử dụng toán tử toInt() để chuyển đổi một chuỗi thành số nguyên, nhưng phương thức int.parse() thường được khuyến nghị hơn vì nó hỗ trợ nhiều loại chuỗi hơn.

Mở trang câu hỏi này →
AMust use `equals()` via reflection
BUse `==`
CCannot compare
DOnly compare via `hashCode`
Lời giải

Để so sánh hai giá trị của cùng một enum trong Dart, bạn có thể sử dụng toán tử ==. Điều này là vì Dart tự động implement phương thức equals() và hashCode() cho các enum. Vì vậy, bạn có thể so sánh hai giá trị enum một cách trực tiếp mà không cần sử dụng reflection hoặc các phương thức khác. Ví dụ: enum Color { red, green, blue };

Lời giải
void main() {
  Color color1 = Color.red;
  Color color2 = Color.red;
  if (color1 == color2) {
    print('Hai

màu sắc giống nhau'); } }

Mở trang câu hỏi này →
15How does `const` differ from `final`?4 lựa chọn
A`const` can be reassigned
BNo difference
C`final` is only inside classes
D`const` requires compile-time values; `final` is single assignment but can be runtime (e.g. `DateTime.now()`)
Lời giải
Câu hỏi này liên quan đến việc so sánh hai từ khóa trong lập trình Dart: `const` và `final`. Từ khóa `const` được sử dụng để chỉ định một biến không thể thay đổi giá trị sau khi được khởi tạo. Trong khi đó, từ khóa `final` chỉ định một biến có thể được gán giá trị một lần duy nhất, nhưng có thể được khởi tạo tại runtime. Điều này có nghĩa là `final` có thể được sử dụng với các giá trị được tính toán tại thời điểm chạy chương trình, trong khi `const` chỉ có thể được sử dụng với các giá trị được biết trước tại thời điểm biên dịch. Ví dụ, nếu bạn muốn tạo một biến `final` với giá trị là thời gian hiện tại, bạn có thể sử dụng `DateTime.now()`, nhưng nếu bạn muốn tạo một biến `const` với giá trị là thời gian hiện tại, bạn sẽ phải biết trước thời gian đó tại thời điểm biên dịch.
Mở trang câu hỏi này →
ASame
B`[a]` nests a List as one element; `[...a]` spreads elements of `a`
CBoth are compile errors
D`...` is only for Map
Lời giải
Khi sử dụng List literal trong JavaScript, `[a]` và `[...a]` có thể được sử dụng khi `a` là một List. Tuy nhiên, có sự khác biệt giữa hai cách này. `[a]` sẽ tạo một List mới và chứa List `a` làm một phần tử duy nhất. Điều này có thể được sử dụng khi bạn muốn tạo một List mới và thêm List `a` vào đó. `[...a]` sẽ tạo một List mới và chứa tất cả các phần tử của List `a`. Điều này có thể được sử dụng khi bạn muốn tạo một List mới và thêm tất cả các phần tử của List `a` vào đó. Ví dụ, nếu bạn có một List `a = [1, 2, 3]`, thì `[a]` sẽ tạo một List mới `[ [1, 2, 3] ]`, trong khi `[...a]` sẽ tạo một List mới `[1, 2, 3]. Vì vậy, `[a]` sẽ tạo một List mới và chứa List `a` làm một phần tử duy nhất, trong khi `[...a]` sẽ tạo một List mới và chứa tất cả các phần tử của List `a`.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Trong Dart, chuỗi chèn (String interpolation) cho phép chèn biểu thức vào chuỗi sử dụng ký tự '$'. Điều này cho phép bạn tạo ra chuỗi phức tạp mà không cần sử dụng các phương thức như concat() hoặc format(). Ví dụ, bạn có thể tạo chuỗi như sau: 'Xin chào, tôi là $name' nơi $name là một biến. Điều này giúp cho việc viết mã trở nên dễ dàng và rõ ràng hơn.
Mở trang câu hỏi này →
AColumn arranges children vertically, while Row arranges children horizontally.
BIt insets its child by a specified amount of space.
CIt forcefully asserts that a nullable expression is non-null.
DIt manages the platform-specific transition animation between screens.
Lời giải
Trong ngữ cảnh an toàn null của Dart, toán tử ! (bang) có chức năng đặc biệt là ép buộc một biểu thức nullable thành không null. Điều này có nghĩa là toán tử ! sẽ loại bỏ khả năng null của một biểu thức, giúp tránh được các lỗi null reference. Ví dụ, nếu bạn có một biến nullable và muốn sử dụng nó như một biến không null, bạn có thể sử dụng toán tử ! để ép buộc nó thành không null. Tuy nhiên, sử dụng toán tử ! không phải lúc nào cũng là một ý tưởng tốt, vì nó có thể che giấu các lỗi null reference và khiến mã code trở nên khó hiểu hơn. Vì vậy, bạn nên sử dụng toán tử ! một cách cẩn thận và chỉ khi thực sự cần thiết.
Mở trang câu hỏi này →
AJIT in dev; AOT on mobile release for near-native performance
BJIT only
CJIT and AOT are identical
DAOT is web-only
Lời giải
JIT (Just-In-Time) và AOT (Ahead-Of-Time) là hai phương pháp biên dịch khác nhau trong Dart/Flutter. JIT là một phương pháp biên dịch được thực hiện trong thời gian chạy, tức là khi ứng dụng đang chạy trên thiết bị. AOT là một phương pháp biên dịch được thực hiện trước khi ứng dụng được chạy, tức là trước khi ứng dụng được phát hành. Trong Dart/Flutter, JIT thường được sử dụng trong môi trường phát triển (dev) để cung cấp hiệu suất nhanh chóng và linh hoạt. Tuy nhiên, khi ứng dụng được phát hành trên thiết bị di động, AOT thường được sử dụng để cung cấp hiệu suất gần như tự nhiên. Điều này là vì AOT có thể được tối ưu hóa cho từng thiết bị và hệ điều hành cụ thể, dẫn đến hiệu suất cao hơn. Vì vậy, câu trả lời chính xác là JIT trong môi trường phát triển và AOT khi ứng dụng được phát hành trên thiết bị di động để đạt được hiệu suất gần như tự nhiên.
Mở trang câu hỏi này →
20Named parameters are wrapped in?4 lựa chọn
A( )
B[ ]
C{ }
D< >
Lời giải
Các tham số được đặt tên được bọc trong ngoặc nhọn { }. Ví dụ: function (name: string, age: number) { ... }
Mở trang câu hỏi này →