Theory
કશું શીખ્યા વગર જ વાંચો
કોઈ પણ સમજૂતી પહેલાં આ Dart વાંચો અને એનું પરિણામ ધારો:
int day = 2;
if (day == 2) {
print('Workshops today');
} else {
print('Regular schedule');
}
તમે એને બરાબર વાંચી લીધું: એ Workshops today છાપે છે, કારણ કે Dart નું control flow તમારા Java જેવું જ છે, બસ થોડું હળવું પહેરણ પહેરીને. આ પાઠ આખા syntax નો પ્રવાસ ઝડપી રીતે કરાવે છે: જાણીતા ભાગ પર સરકી જવું, અને Dart જ્યાં 4 જગ્યાએ જુદું પડે છે ત્યાં કડક બ્રેક મારવી.
At a glance
Datatypes (3, 6 અને 7 નંબરની હરોળે બ્રેક મારો)
| Type | શું સમાવે | દાખલો |
|---|---|---|
| int, double | પૂર્ણ સંખ્યા, દશાંશ સંખ્યા | int seats = 350; double fee = 49.5; |
| num | int કે double, બેમાંથી કોઈ પણ | num anyNumber = 350; |
| String | લખાણ: મોટો S, અને એક અવતરણચિહ્ન વપરાશમાં રૂઢ | String fest = 'TechnoUtsav'; |
| bool | true / false | bool open = true; |
| List | Dart નું array: વધી શકે એવું, 0 થી ક્રમાંકિત | var events = ['Garba', 'Robo']; |
| Map | કૂંચી અને કિંમતની જોડ | var seats = {'Garba': 350, 'Robo': 80}; |
| var / dynamic | var તારવીને જડી દે છે; dynamic તપાસમાંથી બહાર નીકળી જાય છે | var day = 2; // હંમેશ માટે int |
Theory
Variables અને comments: લહેકા
var શરૂઆતની કિંમત પરથી type તારવે છે અને એને જડી દે છે: var seats = 350; થી seats એ int બની જાય છે; પછી seats = 'full'; લખો તો એ compile error છે. તારવણી એટલે ઢીલાશ નહીં.
dynamic એ ખરેખરો બહાર નીકળવાનો રસ્તો છે (તપાસ runtime પર ઠેલાય છે): ભાગ્યે જ અને જાણી જોઈને વપરાય.
final એટલે runtime પર એક જ વાર ગોઠવાય (final festName = fetchName();); const એટલે compile વખતનો અચળ (const maxSeats = 350;).
Comments: Java ની જેમ જ // અને /* */, અને એ ઉપરાંત /// વાળી documentation comments જેને tooling વાંચે છે: Flutter ની libraries આ જ રીતે નોંધાયેલી છે.
Practical
નિર્ણયો, દરેક loop, અને label ની યુક્તિ
void main() {
var events = ['Garba Night', 'Coding Contest', 'Robo Race'];
int day = 2;
// switch: Java જેવા જ ઘાટનું, ખાલી ન હોય એવા દરેક case માટે break
switch (day) {
case 1:
print('Inaugration day');
break;
case 2:
print('Workshops today');
break;
default:
print('Regular schedule');
}
// for-in: collection પર ફરનારું (નવો લહેકો)
for (var e in events) {
print(e);
}
// પરંપરાગત for, while, do-while: બરાબર તમારા Java જેવાં જ
for (int i = 0; i < 2; i++) { print('pass $i'); }
// LABEL: એક જ કૂદકે બંને loops માંથી બહાર
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j == 4) {
print('found at i=$i, j=$j'); // i=2, j=2
break outer; // બંને loops માંથી બહાર નીકળે છે
}
}
}
}
Quiz
var seats = 350; અને 2 લીટી પછી: seats = 'Housefull'; Dart શું કહેશે?
- વાંધો નહીં: var એટલે type ગમે ત્યારે બદલી શકાય
- Compile error: var એ શરૂઆતમાં int તારવ્યો હતો અને એ type હંમેશ માટે જડાઈ ગયો છે
- String ને પહેલી વાર સંખ્યા તરીકે વાપરો ત્યારે runtime error
- વાંધો નહીં, પણ ત્યાર પછી seats એ dynamic બની જાય છે
Show the answer
Compile error: var એ શરૂઆતમાં int તારવ્યો હતો અને એ type હંમેશ માટે જડાઈ ગયો છે
var એટલે તારવણી, છૂટછાટ નહીં: શરૂઆતની કિંમતનો type (int) એ જ variable નો જડાયેલો, compiler તપાસે એવો type બની જાય છે, અને એમાં String પ્રવેશી શકતો નથી: Java વાંચનાર માટે આ Dart નો સૌથી અગત્યનો લહેકો છે, અને આ unit નો સૌથી પ્રિય પરીક્ષા-પ્રશ્ન પણ. વિકલ્પ A તો dynamic ને વર્ણવે છે, જે જાણી જોઈને લખવો પડતો છૂટકારો છે. વિકલ્પ C એ ભૂલને પાછળ ઠેલે છે જેને Dart compile વખતે જ પકડી પાડે છે (static typing નો આખો મુદ્દો એ જ છે). વિકલ્પ D એવું type બદલાવાનું કલ્પી લે છે જે કોઈ assignment કરી શકતું નથી. નિયમ: var જન્મ વખતે, જોઈને, એક જ વાર નક્કી કરી લે છે.
Think first
Label ને હાથે ટ્રેસ કરો
ઉપરના listing ના nested loop માં i અને j ને હાથે ચલાવો: break પહેલાં કઈ (i, j) જોડીઓ ચાલે છે, શું છપાય છે, અને label વગરનું સાદું break હોત તો શું જુદું થાત?
Show the answer
જોડીઓ ક્રમમાં આ રહી: (1,1), (1,2), (1,3), (2,1), અને પછી (2,2), જ્યાં ij બરાબર 4 થાય છે: ત્યાં found at i=2, j=2* છપાય છે, અને break outer; એકસાથે બંને loops માંથી બહાર કાઢી દે છે.
સાદું break ફક્ત અંદરના loop ને જ મારે છે: બહારનો loop i=3 સાથે ચાલુ રહેત, એટલે કે (3,1) થી આગળ ચાલત. ખરેખર જોઈએ તો i=3 સાથે ગુણાકાર 3, 6, 9 થાય છે, એટલે બીજી વાર 4 મળતું નથી, છતાં બહારનો loop નકામો પોતાનો આખો આંટો પૂરો કરત. Labels આ એક જ પ્રામાણિક જરૂરિયાત માટે જ છે: એક જ કૂદકે અંદરોઅંદર ગોઠવાયેલા loops માંથી નીકળી જવું. Java માં પણ એ હતાં; Dart એમને પરીક્ષામાં પુછાય એ રીતે સાચવી રાખે છે.
Watch out
Java જાણનારને ભૂલાવે એવા 4 લહેકા
var નો type જડાયેલો હોય છે: આ જ quiz વાળી વાત; એને હાથ પર લખી રાખો.
String માં S મોટો હોય છે: string લખો તો compile થતું નથી; અને એક અવતરણચિહ્ન એ અહીંની રૂઢ રીત છે.
List, arrays નહીં: int[] જેવો syntax નથી; events[0] ચાલે છે, અને .length એ property છે (કૌંસ વગર: Java ના array વાળું .length, String વાળું .length() નહીં).
અલગ char નથી: 'G' એ ફક્ત 1 અક્ષરનો String જ છે.
Theory
સરકો અને બ્રેક મારો: બીજી ભાષા શીખવાની રીત
તમે એક જ પાઠમાં આખી ભાષાનો 90 ટકા ભાગ શીખી ગયા, કારણ કે તમે Java માં બરાબર મહેનત કરી હતી: આને જ transfer કહેવાય, અને ખરો અભ્યાસક્રમ એ જ છે. લહેકાની યાદી તમે જ્યાં પુનરાવર્તન કરો છો ત્યાં રાખો, અને ફક્ત લહેકાનો જ મહાવરો કરો: જાણીતા ભાગ પોતાની મેળે સચવાઈ રહેશે. Flutter પહેલાં ભાષાનો એક જ ટુકડો બાકી છે: functions, જ્યાં Dart પોતાની સૌથી સારી નવી યુક્તિઓ (arrow bodies, named parameters) સંતાડીને બેઠું છે, અને એ જ હવે પછી.
Summary
Key takeaways
- Identifiers અને comments: Java ના જ નિયમો, અને ઉપરથી /// વાળી documentation comments.
- Types: int, double, num (બેમાંથી કોઈ પણ), String (મોટો S), bool, List (વધી શકે એવું array), Map.
- var શરૂઆતની કિંમત પરથી એક જ વાર type તારવીને એને જડી દે છે; dynamic ભાગ્યે જ વપરાતો છૂટકારો છે; final runtime પર એક વાર, const compile વખતે.
- if/else if/else અને switch-case: Java જેવા જ ઘાટનાં, ખાલી ન હોય એવા દરેક case માટે break.
- Loops: for, collections માટે for-in, while, do-while; break અને continue તમે જાણો છો એ જ રીતે.
- Label (outer:) હોય તો break outer; એક જ કૂદકે અંદરોઅંદરના loops માંથી બહાર: ટ્રેસમાં i=2, j=2 પર.
- યાદ રાખવાની કડી: જાણીતા પર સરકો, અને var, String, List તથા for-in પર બ્રેક મારો.