javascript-tutorials

Introduction to JavaScript

JavaScript is the language of the web. In these four lessons, you'll learn its basics. ### Topics 1. Variables and Data Types 2. Functions and Methods 3. Making Decisions with JavaScript 4. Arrays and Loops ### Credits These lessons were written with ♥️ by Jasmine Greenaway, Christopher Harrison and Chris Noring

javascript

Data Types

Data types are one of the fundamental concepts in JavaScript that you'll encounter in every program you write. Think of data types like the filing system used by ancient librarians in Alexandria – they had specific places for scrolls containing poetry, mathematics, and historical records. JavaScript organizes information in a similar way with different categories for different kinds of data. In this lesson, we'll explore the core data types that make JavaScript work. You'll learn how to handle numbers, text, true/false values, and understand why choosing the correct type is essential for your programs. These concepts might seem abstract at first, but with practice, they'll become second nature. Understanding data types will make everything else in JavaScript much clearer. Just as architects need to understand different building materials before constructing a cathedral, these fundamentals will support everything you build going forward. ## Pre-Lecture Quiz Pre-lecture quiz This lesson covers the basics of JavaScript, the language that provides interactivity on the web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Let's start with variables and the data types that populate them! ## Variables Variables are fundamental building blocks in programming. Like the labeled jars that medieval alchemists used to store different substances, variables let you store information and give it a descriptive name so you can reference it later. Need to remember someone's age? Store it in a variable called age. Want to track a user's name? Keep it in a variable called userName. We'll focus on the modern approach to creating variables in JavaScript. The techniques you'll learn here represent years of language evolution and best practices developed by the programming community. Creating and declaring a variable has the following syntax [keyword] [name]. It's made up of the two parts: - Keyword. Use let for variables that can change, or const for values that stay the same. - The variable name, this is a descriptive name you choose yourself. ✅ The keyword let was introduced in ES6 and gives your variable a so called _block scope_. It's recommended that you use let or const instead of the older var keyword. We will cover block scopes more in depth in future parts. ### Task - working with variables 1. Declare a variable. Let's start by creating our first variable: ```javascript let myVariable; ``` What this accomplishes: - This tells JavaScript to create a storage location called myVariable - JavaScript allocates space in memory for this variable - The variable currently has no value (undefined) 2. Give it a value. Now let's put something in our variable: ```javascript myVariable = 123; ``` How assignment works: - The = operator assigns the value 123 to our variable - The variable now contains this value instead of being undefined - You can reference this value throughout your code using myVariable > Note: the use of = in this lesson means we make use of an "assignment operator", used to set a value to a variable. It doesn't denote equality. 3. Do it the smart way. Actually, let's combine those two steps: ```javascript let myVariable = 123; ``` This approach is more efficient: - You're declaring the variable and assigning a value in one statement - This is the standard practice among developers - It reduces code length while maintaining clarity 4. Change your mind. What if we want to store a different number? ```javascript myVariable = 321; ``` Understanding reassignment: - The variable now contains 321 instead of 123 - The previous value is replaced – variables store only one value at a time - This mutability is the key characteristic of variables declared with let ✅ Try it! You can write JavaScript right in your browser. Open a browser window and navigate to Developer Tools. In the console, you will find a prompt; type let myVariable = 123, press return, then type myVariable. What happens? Note, you'll learn more about these concepts in subsequent lessons. ### 🧠 Variables Mastery Check: Getting Comfortable Let's see how you're feeling about variables: - Can you explain the difference between declaring and assigning a variable? - What happens if you try to use a variable before you declare it? - When would you choose let over const for a variable? ## Constants Sometimes you need to store information that should never change during program execution. Think of constants like the mathematical principles that Euclid established in ancient Greece – once proven and documented, they remained fixed for all future reference. Constants work similarly to variables, but with an important restriction: once you assign their value, it cannot be changed. This immutability helps prevent accidental modifications to critical values in your program. Declaration and initialization of a constant follows the same concepts as a variable, with the exception of the const keyword. Constants are typically declared with all uppercase letters. Here's what this code does: - Creates a constant named MY_VARIABLE with the value 123 - Uses uppercase naming convention for constants - Prevents any future changes to this value Constants have two main rules: - You must give them a value right away – no empty constants allowed! - You can never change that value – JavaScript will throw an error if you try. Let's see what I mean: Simple value - The following is NOT allowed: ```javascript const PI = 3; PI = 4; // not allowed ``` What you need to remember: - Attempts to reassign a constant will cause an error - Protects important values from accidental changes - Ensures the value remains consistent throughout your program Object reference is protected - The following is NOT allowed: ```javascript const obj = { a: 3 }; obj = { b: 5 } // not allowed ``` Understanding these concepts: - Prevents replacing the entire object with a new one - Protects the reference to the original object - Maintains the object's identity in memory Object value is not protected - The following IS allowed: ```javascript const obj = { a: 3 }; obj.a = 5; // allowed ``` Breaking down what happens here: - Modifies the property value inside the object - Keeps the same object reference - Demonstrates that object contents can change while the reference stays constant > Note, a const means the reference is protected from reassignment. The value is not _immutable_ though and can change, especially if it's a complex construct like an object. ## Data Types JavaScript organizes information into different categories called data types. This concept mirrors how ancient scholars categorized knowledge – Aristotle distinguished between different types of reasoning, knowing that logical principles couldn't be applied uniformly to poetry, mathematics, and natural philosophy. Data types matter because different operations work with different kinds of information. Just as you can't perform arithmetic on a person's name or alphabetize a mathematical equation, JavaScript requires the appropriate data type for each operation. Understanding this prevents errors and makes your code more reliable. Variables can store many different types of values, like numbers and text. These various types of values are known as the data type. Data types are an important part of software development because it helps developers make decisions on how the code should be written and how the software should run. Furthermore, some data types have unique features that help transform or extract additional information in a value. ✅ Data Types are also referred to as JavaScript data primitives, as they are the lowest-level data types that are provided by the language. There are 7 primitive data types: string, number, bigint, boolean, undefined, null and symbol. Take a minute to visualize what each of these primitives might represent. What is a zebra? How about 0? true? ### Numbers Numbers are the most straightforward data type in JavaScript. Whether you're working with whole numbers like 42, decimals like 3.14, or negative numbers like -5, JavaScript handles them uniformly. Remember our variable from earlier? That 123 we stored was actually a number data type: Key characteristics: - JavaScript automatically recognizes numeric values - You can perform mathematical operations with these variables - No explicit type declaration is required Variables can store all types of numbers, including decimals or negative numbers. Numbers also can be used with arithmetic operators, covered in the next section. ### Arithmetic Operators Arithmetic operators allow you to perform mathematical calculations in JavaScript. These operators follow the same principles mathematicians have used for centuries – the same symbols that appeared in the works of scholars like Al-Khwarizmi, who developed algebraic notation. The operators work as you would expect from traditional mathematics: plus for addition, minus for subtraction, and so forth. There are several types of operators to use when performing arithmetic functions, and some are listed here: ✅ Try it! Try an arithmetic operation in your browser's console. Do the results surprise you? ### 🧮 Math Skills Check: Calculating with Confidence Test your arithmetic understanding: - What's the difference between / (division) and % (remainder)? - Can you predict what 10 % 3 equals? (Hint: it's not 3.33...) - Why might the remainder operator be useful in programming? ### Strings In JavaScript, textual data is represented as strings. The term "string" comes from the concept of characters strung together in sequence, much like the way scribes in medieval monasteries would connect letters to form words and sentences in their manuscripts. Strings are fundamental to web development. Every piece of text displayed on a website – usernames, button labels, error messages, content – is handled as string data. Understanding strings is essential for creating functional user interfaces. Strings are sets of characters that reside between single or double quotes. Understanding these concepts: - Uses either single quotes ' or double quotes " to define strings - Stores text data that can include letters, numbers, and symbols - Assigns string values to variables for later use - Requires quotes to distinguish text from variable names Remember to use quotes when writing a string, or else JavaScript will assume it's a variable name. ### Formatting Strings String manipulation allows you to combine text elements, incorporate variables, and create dynamic content that responds to program state. This technique enables you to construct text programmatically. Often you need to join multiple strings together – this process is called concatenation. To concatenate two or more strings, or join them together, use the + operator. Step by step, here's what's happening: - Combines multiple strings using the + operator - Joins strings directly together without spaces in the first example - Adds space characters " " between strings for readability - Inserts punctuation like commas to create proper formatting ✅ Why does 1 + 1 = 2 in JavaScript, but '1' + '1' = 11? Think about it. What about '1' + 1? Template literals are another way to format strings, except instead of quotes, the backtick is used. Anything that is not plain text must be placed inside placeholders ${ }. This includes any variables that may be strings. Let's understand each part: - Uses backticks ` `` instead of regular quotes to create template literals - Embeds variables directly using ${} placeholder syntax - Preserves spaces and formatting exactly as written - Provides a cleaner way to create complex strings with variables You can achieve your formatting goals with either method, but template literals will respect any spaces and line breaks. ✅ When would you use a template literal vs. a plain string? ### 🔤 String Mastery Check: Text Manipulation Confidence Evaluate your string skills: - Can you explain why '1' + '1' equals '11' instead of 2? - Which string method do you find more readable: concatenation or template literals? - What happens if you forget the quotes around a string? ### Booleans Booleans represent the simplest form of data: they can only hold one of two values – true or false. This binary logic system traces back to the work of George Boole, a 19th-century mathematician who developed Boolean algebra. Despite their simplicity, booleans are essential for program logic. They enable your code to make decisions based on conditions – whether a user is logged in, if a button was clicked, or if certain criteria are met. Booleans can be only two values: true or false. Booleans can help make decisions on which lines of code should run when certain conditions are met. In many cases, operators assist with setting the value of a Boolean and you will often notice and write variables being initialized or their values being updated with an operator. In the above, we've: - Created a variable that stores the Boolean value true - Demonstrated how to store the Boolean value false - Used the exact keywords true and false (no quotes needed) - Prepared these variables for use in conditional statements ✅ A variable can be considered 'truthy' if it evaluates to a boolean true. Interestingly, in JavaScript, all values are truthy unless defined as falsy. ### 🎯 Boolean Logic Check: Decision Making Skills Test your boolean understanding: - Why do you think JavaScript has "truthy" and "falsy" values beyond just true and false? - Can you predict which of these is falsy: 0, "0", [], "false"? - How might booleans be useful in controlling program flow? --- ## 📊 Your Data Types Toolkit Summary ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a personal information manager that demonstrates all the JavaScript data types you've learned in this lesson while handling real-world data scenarios. Prompt: Build a JavaScript program that creates a user profile object containing: a person's name (string), age (number), is a student status (boolean), favorite colors as an array, and an address object with street, city, and zip code properties. Include functions to display the profile information and update individual fields. Make sure to demonstrate string concatenation, template literals, arithmetic operations with the age, and boolean logic for the student status. Learn more about agent mode here. ## 🚀 Challenge JavaScript has some behaviors that can catch developers off guard. Here's a classic example to explore: try typing this in your browser console: let age = 1; let Age = 2; age == Age and observe the result. It returns false – can you determine why? This represents one of many JavaScript behaviors worth understanding. Familiarity with these quirks will help you write more reliable code and debug issues more effectively. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Take a look at this list of JavaScript exercises and try one. What did you learn? ## Assignment Data Types Practice ## 🚀 Your JavaScript Data Types Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Open your browser console and create 3 variables with different data types - [ ] Try the challenge: let age = 1; let Age = 2; age == Age and figure out why it's false - [ ] Practice string concatenation with your name and favorite number - [ ] Test what happens when you add a number to a string ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Create a mini calculator that adds, subtracts, multiplies, and divides two numbers - [ ] Build a simple name formatter using template literals - [ ] Explore the differences between == and === comparison operators - [ ] Practice converting between different data types ### 📅 Your Week-Long JavaScript Foundation - [ ] Complete the assignment with confidence and creativity - [ ] Create a personal profile object using all data types learned - [ ] Practice with JavaScript exercises from CSS-Tricks - [ ] Build a simple form validator using boolean logic - [ ] Experiment with array and object data types (preview of coming lessons) - [ ] Join a JavaScript community and ask questions about data types ### 🌟 Your Month-Long Transformation - [ ] Integrate data type knowledge into larger programming projects - [ ] Understand when and why to use each data type in real applications - [ ] Help other beginners understand JavaScript fundamentals - [ ] Build a small application that manages different types of user data - [ ] Explore advanced data type concepts like type coercion and strict equality - [ ] Contribute to open source JavaScript projects with documentation improvements ### 🧠 Final Data Types Mastery Check-in Celebrate your JavaScript foundation: - Which data type surprised you the most in terms of its behavior? - How comfortable do you feel explaining variables vs. constants to a friend? - What's the most interesting thing you discovered about JavaScript's type system? - Which real-world application can you imagine building with these fundamentals?

data

Methods and Functions

## Pre-Lecture Quiz Pre-lecture quiz Writing the same code repeatedly is one of programming's most common frustrations. Functions solve this problem by letting you package code into reusable blocks. Think of functions like the standardized parts that made Henry Ford's assembly line revolutionary – once you create a reliable component, you can use it wherever needed without rebuilding from scratch. Functions allow you to bundle pieces of code so you can reuse them throughout your program. Instead of copying and pasting the same logic everywhere, you can create a function once and call it whenever needed. This approach keeps your code organized and makes updates much easier. In this lesson, you'll learn how to create your own functions, pass information to them, and get useful results back. You'll discover the difference between functions and methods, learn modern syntax approaches, and see how functions can work with other functions. We'll build these concepts step by step. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Functions A function is a self-contained block of code that performs a specific task. It encapsulates logic that you can execute whenever needed. Instead of writing the same code multiple times throughout your program, you can package it in a function and call that function whenever you need it. This approach keeps your code clean and makes updates much easier. Consider the maintenance challenge if you needed to change logic that was scattered across 20 different locations in your codebase. Naming your functions descriptively is essential. A well-named function communicates its purpose clearly – when you see cancelTimer(), you immediately understand what it does, just as a clearly labeled button tells you exactly what will happen when you click it. ## Creating and calling a function Let's examine how to create a function. The syntax follows a consistent pattern: Let's break this down: - The function keyword tells JavaScript "Hey, I'm creating a function!" - nameOfFunction is where you give your function a descriptive name - The parentheses () are where you can add parameters (we'll get to that soon) - The curly braces {} contain the actual code that runs when you call the function Let's create a simple greeting function to see this in action: This function prints "Hello, world!" to the console. Once you've defined it, you can use it as many times as needed. To execute (or "call") your function, write its name followed by parentheses. JavaScript allows you to define your function before or after you call it – the JavaScript engine will handle the execution order. When you run this line, it executes all the code inside your displayGreeting function, displaying "Hello, world!" in your browser's console. You can call this function repeatedly. ### 🧠 Function Fundamentals Check: Building Your First Functions Let's see how you're feeling about basic functions: - Can you explain why we use curly braces {} in function definitions? - What happens if you write displayGreeting without the parentheses? - Why might you want to call the same function multiple times? ### Function best practices Here are a few tips to help you write great functions: - Give your functions clear, descriptive names – your future self will thank you! - Use camelCasing for multi-word names (like calculateTotal instead of calculate_total) - Keep each function focused on doing one thing well ## Passing information to a function Our displayGreeting function is limited – it can only display "Hello, world!" for everyone. Parameters allow us to make functions more flexible and useful. Parameters act like placeholders where you can insert different values each time you use the function. This way, the same function can work with different information on each call. You list parameters inside the parentheses when you define your function, separating multiple parameters with commas: Each parameter acts like a placeholder – when someone calls your function, they'll provide actual values that get plugged into these spots. Let's update our greeting function to accept someone's name: Notice how we're using backticks (` `) and ${}` to insert the name directly into our message – this is called a template literal, and it's a really handy way to build strings with variables mixed in. Now when we call our function, we can pass in any name: JavaScript takes the string 'Christopher', assigns it to the name parameter, and creates the personalized message "Hello, Christopher!" ## Default values What if we want to make some parameters optional? That's where default values come in handy! Let's say we want people to be able to customize the greeting word, but if they don't specify one, we'll just use "Hello" as a fallback. You can set up default values by using the equals sign, just like setting a variable: Here, name is still required, but salutation has a backup value of 'Hello' if no one provides a different greeting. Now we can call this function in two different ways: In the first call, JavaScript uses the default "Hello" since we didn't specify a salutation. In the second call, it uses our custom "Hi" instead. This flexibility makes functions adaptable to different scenarios. ### 🎛️ Parameters Mastery Check: Making Functions Flexible Test your parameter understanding: - What's the difference between a parameter and an argument? - Why are default values useful in real-world programming? - Can you predict what happens if you pass more arguments than parameters? ## Return values Our functions so far have just been printing messages to the console, but what if you want a function to calculate something and give you back the result? That's where return values come in. Instead of just displaying something, a function can hand you back a value that you can store in a variable or use in other parts of your code. To send a value back, you use the return keyword followed by whatever you want to return: Here's something important: when a function hits a return statement, it immediately stops running and sends that value back to whoever called it. Let's modify our greeting function to return the message instead of printing it: Now instead of printing the greeting, this function creates the message and hands it back to us. To use the returned value, we can store it in a variable just like any other value: Now greetingMessage contains "Hello, Christopher" and we can use it anywhere in our code – to display it on a webpage, include it in an email, or pass it to another function. ### 🔄 Return Values Check: Getting Results Back Evaluate your return value understanding: - What happens to code after a return statement in a function? - Why is returning values often better than just printing to console? - Can a function return different types of values (string, number, boolean)? ## Functions as parameters for functions Functions can be passed as parameters to other functions. While this concept may seem complex initially, it's a powerful feature that enables flexible programming patterns. This pattern is super common when you want to say "when something happens, do this other thing." For example, "when the timer finishes, run this code" or "when the user clicks the button, call this function." Let's look at setTimeout, which is a built-in function that waits a certain amount of time and then runs some code. We need to tell it what code to run – perfect use case for passing a function! Try this code – after 3 seconds, you'll see a message: Notice how we pass displayDone (without parentheses) to setTimeout. We're not calling the function ourselves – we're handing it over to setTimeout and saying "call this in 3 seconds." ### Anonymous functions Sometimes you need a function for just one thing and don't want to give it a name. Think about it – if you're only using a function once, why clutter up your code with an extra name? JavaScript lets you create anonymous functions – functions without names that you can define right where you need them. Here's how we can rewrite our timer example using an anonymous function: This achieves the same result, but the function is defined directly within the setTimeout call, eliminating the need for a separate function declaration. ### Fat arrow functions Modern JavaScript has an even shorter way to write functions called arrow functions. They use => (which looks like an arrow – get it?) and are super popular with developers. Arrow functions let you skip the function keyword and write more concise code. Here's our timer example using an arrow function: The () is where parameters would go (empty in this case), then comes the arrow =>, and finally the function body in curly braces. This provides the same functionality with more concise syntax. ### When to use each strategy When should you use each approach? A practical guideline: if you'll use the function multiple times, give it a name and define it separately. If it's for one specific use, consider an anonymous function. Both arrow functions and traditional syntax are valid choices, though arrow functions are prevalent in modern JavaScript codebases. ### 🎨 Function Styles Mastery Check: Choosing the Right Syntax Test your syntax understanding: - When might you prefer arrow functions over traditional function syntax? - What's the main advantage of anonymous functions? - Can you think of a situation where a named function is better than an anonymous one? --- ## 🚀 Challenge Can you articulate in one sentence the difference between functions and methods? Give it a try! ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a utility library of mathematical functions that demonstrates different function concepts covered in this lesson, including parameters, default values, return values, and arrow functions. Prompt: Create a JavaScript file called mathUtils.js that contains the following functions: 1. A function add that takes two parameters and returns their sum 2. A function multiply with default parameter values (second parameter defaults to 1) 3. An arrow function square that takes a number and returns its square 4. A function calculate that accepts another function as a parameter and two numbers, then applies the function to those numbers 5. Demonstrate calling each function with appropriate test cases Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study It's worth reading up a little more on arrow functions, as they are increasingly used in code bases. Practice writing a function, and then rewriting it with this syntax. ## Assignment Fun with Functions --- ## 🧰 Your JavaScript Functions Toolkit Summary --- ## 🚀 Your JavaScript Functions Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Write a simple function that returns your favorite number - [ ] Create a function with two parameters that adds them together - [ ] Try converting a traditional function to arrow function syntax - [ ] Practice the challenge: explain the difference between functions and methods ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Build the math utilities library from the GitHub Copilot challenge - [ ] Create a function that uses another function as a parameter - [ ] Practice writing functions with default parameters - [ ] Experiment with template literals in function return values ### 📅 Your Week-Long Function Mastery - [ ] Complete the "Fun with Functions" assignment with creativity - [ ] Refactor some repetitive code you've written into reusable functions - [ ] Build a small calculator using only functions (no global variables) - [ ] Practice arrow functions with array methods like map() and filter() - [ ] Create a collection of utility functions for common tasks - [ ] Study higher-order functions and functional programming concepts ### 🌟 Your Month-Long Transformation - [ ] Master advanced function concepts like closures and scope - [ ] Build a project that heavily uses function composition - [ ] Contribute to open source by improving function documentation - [ ] Teach someone else about functions and different syntax styles - [ ] Explore functional programming paradigms in JavaScript - [ ] Create a personal library of reusable functions for future projects ### 🏆 Final Functions Champion Check-in Celebrate your function mastery: - What's the most useful function you've created so far? - How has learning about functions changed the way you think about code organization? - Which function syntax do you prefer and why? - What real-world problem would you solve by writing a function?

function

Making Decisions

Have you ever wondered how applications make smart decisions? Like how a navigation system chooses the fastest route, or how a thermostat decides when to turn on the heat? This is the fundamental concept of decision-making in programming. Just as Charles Babbage's Analytical Engine was designed to follow different sequences of operations based on conditions, modern JavaScript programs need to make choices based on varying circumstances. This ability to branch and make decisions is what transforms static code into responsive, intelligent applications. In this lesson, you'll learn how to implement conditional logic in your programs. We'll explore conditional statements, comparison operators, and logical expressions that allow your code to evaluate situations and respond appropriately. ## Pre-Lecture Quiz Pre-lecture quiz The ability to make decisions and control program flow is a fundamental aspect of programming. This section covers how to control the execution path of your JavaScript programs using Boolean values and conditional logic. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## A Brief Recap on Booleans Before exploring decision-making, let's revisit Boolean values from our previous lesson. Named after mathematician George Boole, these values represent binary states – either true or false. There's no ambiguity, no middle ground. These binary values form the foundation of all computational logic. Every decision your program makes ultimately reduces to a Boolean evaluation. Creating Boolean variables is straightforward: This creates two variables with explicit Boolean values. ✅ Booleans are named after the English mathematician, philosopher and logician George Boole (1815–1864). ## Comparison Operators and Booleans In practice, you'll rarely set Boolean values manually. Instead, you'll generate them by evaluating conditions: "Is this number greater than that one?" or "Are these values equal?" Comparison operators enable these evaluations. They compare values and return Boolean results based on the relationship between the operands. ✅ Check your knowledge by writing some comparisons in your browser's console. Does any returned data surprise you? ### 🧠 Comparison Mastery Check: Understanding Boolean Logic Test your comparison understanding: - Why do you think === (strict equality) is generally preferred over == (loose equality)? - Can you predict what 5 === '5' returns? How about 5 == '5'? - What's the difference between !== and !=? ## If Statement The if statement is like asking a question in your code. "If this condition is true, then do this thing." It's probably the most important tool you'll use for making decisions in JavaScript. Here's how it works: The condition goes inside the parentheses, and if it's true, JavaScript runs the code inside the curly braces. If it's false, JavaScript just skips that whole block. You'll often use comparison operators to create these conditions. Let's see a practical example: Since 1000 >= 800 evaluates to true, the code inside the block executes, displaying "Getting a new laptop!" in the console. ## If..Else Statement But what if you want your program to do something different when the condition is false? That's where else comes in – it's like having a backup plan. The else statement gives you a way to say "if this condition isn't true, do this other thing instead." Now since 500 >= 800 is false, JavaScript skips the first block and runs the else block instead. You'll see "Can't afford a new laptop, yet!" in the console. ✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the currentMoney and laptopPrice variables to change the returned console.log(). ### 🎯 If-Else Logic Check: Branching Paths Evaluate your conditional logic understanding: - What happens if currentMoney exactly equals laptopPrice? - Can you think of a real-world scenario where if-else logic would be useful? - How might you extend this to handle multiple price ranges? ## Switch Statement Sometimes you need to compare one value against multiple options. While you could chain several if..else statements, this approach becomes unwieldy. The switch statement provides a cleaner structure for handling multiple discrete values. The concept resembles the mechanical switching systems used in early telephone exchanges – one input value determines which specific path the execution follows. Here's how it's structured: - JavaScript evaluates the expression once - It looks through each case to find a match - When it finds a match, it runs that code block - The break tells JavaScript to stop and exit the switch - If no cases match, it runs the default block (if you have one) In this example, JavaScript sees that dayNumber is 2, finds the matching case 2, sets dayName to "Tuesday", and then breaks out of the switch. The result? "Today is Tuesday" gets logged to the console. ✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the variable a to change the returned console.log(). ### 🔄 Switch Statement Mastery: Multiple Options Test your switch understanding: - What happens if you forget a break statement? - When would you use switch instead of multiple if-else statements? - Why is the default case useful even if you think you've covered all possibilities? ## Logical Operators and Booleans Complex decisions often require evaluating multiple conditions simultaneously. Just as Boolean algebra allows mathematicians to combine logical expressions, programming provides logical operators to connect multiple Boolean conditions. These operators enable sophisticated conditional logic by combining simple true/false evaluations. These operators let you combine conditions in useful ways: - AND (&&) means both conditions must be true - OR (||) means at least one condition must be true - NOT (!) flips true to false (and vice versa) ## Conditions and Decisions with Logical Operators Let's see these logical operators in action with a more realistic example: In this example: we calculate a 20% discount price (640), then evaluate whether our available funds cover either the full price OR the discounted price. Since 600 meets the discounted price threshold of 640, the condition evaluates to true. ### 🧮 Logical Operators Check: Combining Conditions Test your logical operator understanding: - In the expression A && B, what happens if A is false? Does B even get evaluated? - Can you think of a situation where you'd need all three operators (&&, ||, !) together? - What's the difference between !user.isActive and user.isActive !== true? ### Negation Operator Sometimes it's easier to think about when something is NOT true. Like instead of asking "Is the user logged in?", you might want to ask "Is the user NOT logged in?" The exclamation mark (!) operator flips the logic for you. The ! operator is like saying "the opposite of..." – if something is true, ! makes it false, and vice versa. ### Ternary Expressions For simple conditional assignments, JavaScript provides the ternary operator. This concise syntax allows you to write a conditional expression in a single line, useful when you need to assign one of two values based on a condition. It reads like a question: "Is this condition true? If yes, use this value. If no, use that value." Below is a more tangible example: ✅ Take a minute to read this code a few times. Do you understand how these operators are working? Here's what this line is saying: "Is firstNumber greater than secondNumber? If yes, put firstNumber in biggestNumber. If no, put secondNumber in biggestNumber." The ternary operator is just a shorter way to write this traditional if..else statement: Both approaches produce identical results. The ternary operator offers conciseness, while the traditional if-else structure may be more readable for complex conditions. --- ## 🚀 Challenge Create a program that is written first with logical operators, and then rewrite it using a ternary expression. What's your preferred syntax? --- ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a comprehensive grade calculator that demonstrates multiple decision-making concepts from this lesson, including if-else statements, switch statements, logical operators, and ternary expressions. Prompt: Write a JavaScript program that takes a student's numerical score (0-100) and determines their letter grade using the following criteria: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Below 60 Requirements: 1. Use an if-else statement to determine the letter grade 2. Use logical operators to check if the student passes (grade >= 60) AND has honors (grade >= 90) 3. Use a switch statement to provide specific feedback for each letter grade 4. Use a ternary operator to determine if the student is eligible for the next course (grade >= 70) 5. Include input validation to ensure the score is between 0 and 100 Test your program with various scores including edge cases like 59, 60, 89, 90, and invalid inputs. Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Read more about the many operators available to the user on MDN. Go through Josh Comeau's wonderful operator lookup! ## Assignment Operators --- ## 🧠 Your Decision-Making Toolkit Summary --- ## 🚀 Your JavaScript Decision-Making Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Practice comparison operators in your browser console - [ ] Write a simple if-else statement that checks your age - [ ] Try the challenge: rewrite an if-else using a ternary operator - [ ] Test what happens with different "truthy" and "falsy" values ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Build the comprehensive grade calculator from the GitHub Copilot challenge - [ ] Create a simple decision tree for a real-world scenario (like choosing what to wear) - [ ] Practice combining multiple conditions with logical operators - [ ] Experiment with switch statements for different use cases ### 📅 Your Week-Long Logic Mastery - [ ] Complete the operators assignment with creative examples - [ ] Build a mini quiz application using various conditional structures - [ ] Create a form validator that checks multiple input conditions - [ ] Practice Josh Comeau's operator lookup exercises - [ ] Refactor existing code to use more appropriate conditional structures - [ ] Study short-circuit evaluation and performance implications ### 🌟 Your Month-Long Transformation - [ ] Master complex nested conditions and maintain code readability - [ ] Build an application with sophisticated decision-making logic - [ ] Contribute to open source by improving conditional logic in existing projects - [ ] Teach someone else about different conditional structures and when to use each - [ ] Explore functional programming approaches to conditional logic - [ ] Create a personal reference guide for conditional best practices ### 🏆 Final Decision-Making Champion Check-in Celebrate your logical thinking mastery: - What's the most complex decision logic you've successfully implemented? - Which conditional structure feels most natural to you and why? - How has learning about logical operators changed your problem-solving approach? - What real-world application would benefit from sophisticated decision-making logic?

web,development

Arrays and Loops

## Pre-Lecture Quiz Pre-lecture quiz Ever wondered how websites keep track of shopping cart items or display your friend list? That's where arrays and loops come in. Arrays are like digital containers that hold multiple pieces of information, while loops let you work with all that data efficiently without repetitive code. Together, these two concepts form the foundation for handling information in your programs. You'll learn to move from manually writing out every single step to creating smart, efficient code that can process hundreds or even thousands of items quickly. By the end of this lesson, you'll understand how to accomplish complex data tasks with just a few lines of code. Let's explore these essential programming concepts. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Think of arrays as a digital filing cabinet - instead of storing one document per drawer, you can organize multiple related items in a single, structured container. In programming terms, arrays let you store multiple pieces of information in one organized package. Whether you're building a photo gallery, managing a to-do list, or keeping track of high scores in a game, arrays provide the foundation for data organization. Let's see how they work. ✅ Arrays are all around us! Can you think of a real-life example of an array, such as a solar panel array? ### Creating Arrays Creating an array is super simple - just use square brackets! What's happening here? You've just created an empty container using those square brackets []. Think of it like an empty library shelf - it's ready to hold whatever books you want to organize there. You can also fill your array with initial values right from the start: Cool things to notice: - You can store text, numbers, or even true/false values in the same array - Just separate each item with a comma - easy! - Arrays are perfect for keeping related information together ### Array Indexing Here's something that might seem unusual at first: arrays number their items starting from 0, not 1. This zero-based indexing has its roots in how computer memory works - it's been a programming convention since the early days of computing languages like C. Each spot in the array gets its own address number called an index. ✅ Does it surprise you that arrays start at the zero index? In some programming languages, indexes start at 1. There's an interesting history around this, which you can read on Wikipedia. Accessing Array Elements: Breaking down what happens here: - Uses square bracket notation with the index number to access elements - Returns the value stored at that specific position in the array - Starts counting from 0, making the first element index 0 Modifying Array Elements: In the above, we've: - Modified the element at index 4 from "Rocky Road" to "Butter Pecan" - Added a new element "Cookie Dough" at index 5 - Expanded the array length automatically when adding beyond current bounds ### Array Length and Common Methods Arrays come with built-in properties and methods that make working with data much easier. Finding Array Length: Key points to remember: - Returns the total number of elements in the array - Updates automatically when elements are added or removed - Provides a dynamic count useful for loops and validation Essential Array Methods: Understanding these methods: - Adds elements with push() (end) and unshift() (beginning) - Removes elements with pop() (end) and shift() (beginning) - Locates elements with indexOf() and checks existence with includes() - Returns useful values like removed elements or position indexes ✅ Try it yourself! Use your browser's console to create and manipulate an array of your own creation. ### 🧠 Array Fundamentals Check: Organizing Your Data Test your array understanding: - Why do you think arrays start counting from 0 instead of 1? - What happens if you try to access an index that doesn't exist (like arr[100] in a 5-element array)? - Can you think of three real-world scenarios where arrays would be useful? ## Loops Think of the famous punishment from Charles Dickens' novels where students had to write lines repeatedly on a slate. Imagine if you could simply instruct someone to "write this sentence 100 times" and have it done automatically. That's exactly what loops do for your code. Loops are like having a tireless assistant who can repeat tasks without error. Whether you need to check every item in a shopping cart or display all the photos in an album, loops handle the repetition efficiently. JavaScript provides several types of loops to choose from. Let's examine each one and understand when to use them. ### For Loop The for loop is like setting a timer - you know exactly how many times you want something to happen. It's super organized and predictable, which makes it perfect when you're working with arrays or need to count things. For Loop Structure: Step by step, here's what's happening: - Initializes the counter variable i to 0 at the start - Checks the condition i < 10 before each iteration - Executes the code block when the condition is true - Increments i by 1 after each iteration with i++ - Stops when the condition becomes false (when i reaches 10) ✅ Run this code in a browser console. What happens when you make small changes to the counter, condition, or iteration expression? Can you make it run backwards, creating a countdown? ### 🗓️ For Loop Mastery Check: Controlled Repetition Evaluate your for loop understanding: - What are the three parts of a for loop, and what does each one do? - How would you loop through an array backwards? - What happens if you forget the increment part (i++)? ### While Loop The while loop is like saying "keep doing this until..." - you might not know exactly how many times it'll run, but you know when to stop. It's perfect for things like asking a user for input until they give you what you need, or searching through data until you find what you're looking for. While Loop Characteristics: - Continues executing as long as the condition is true - Requires manual management of any counter variables - Checks the condition before each iteration - Risks infinite loops if the condition never becomes false Understanding these examples: - Manages the counter variable i manually inside the loop body - Increments the counter to prevent infinite loops - Demonstrates practical use case with user input and attempt limiting - Includes safety mechanisms to prevent endless execution ### ♾️ While Loop Wisdom Check: Condition-Based Repetition Test your while loop comprehension: - What's the main danger when using while loops? - When would you choose a while loop over a for loop? - How can you prevent infinite loops? ### Modern Loop Alternatives JavaScript offers modern loop syntax that can make your code more readable and less error-prone. For...of Loop (ES6+): Key advantages of for...of: - Eliminates index management and potential off-by-one errors - Provides direct access to array elements - Improves code readability and reduces syntax complexity forEach Method: What you need to know about forEach: - Executes a function for each array element - Provides both element value and index as parameters - Cannot be stopped early (unlike traditional loops) - Returns undefined (doesn't create a new array) ✅ Why would you choose a for loop vs. a while loop? 17K viewers had the same question on StackOverflow, and some of the opinions might be interesting to you. ### 🎨 Modern Loop Syntax Check: Embracing ES6+ Assess your modern JavaScript understanding: - What are the advantages of for...of over traditional for loops? - When might you still prefer traditional for loops? - What's the difference between forEach and map? ## Loops and Arrays Combining arrays with loops creates powerful data processing capabilities. This pairing is fundamental to many programming tasks, from displaying lists to calculating statistics. Traditional Array Processing: Let's understand each approach: - Uses array length property to determine loop boundary - Accesses elements by index in traditional for loops - Provides direct element access in for...of loops - Processes each array element exactly once Practical Data Processing Example: Here's how this code works: - Initializes tracking variables for sum and extremes - Processes each grade with a single efficient loop - Accumulates the total for average calculation - Tracks highest and lowest values during iteration - Calculates final statistics after loop completion ✅ Experiment with looping over an array of your own making in your browser's console. --- ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Build a comprehensive data processing function that combines arrays and loops to analyze a dataset and generate meaningful insights. Prompt: Create a function called analyzeGrades that takes an array of student grade objects (each containing name and score properties) and returns an object with statistics including the highest score, lowest score, average score, count of students who passed (score >= 70), and an array of student names who scored above average. Use at least two different loop types in your solution. Learn more about agent mode here. ## 🚀 Challenge JavaScript offers several modern array methods that can replace traditional loops for specific tasks. Explore forEach, for-of, map, filter, and reduce. Your challenge: Refactor the student grades example using at least three different array methods. Notice how much cleaner and more readable the code becomes with modern JavaScript syntax. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Arrays in JavaScript have many methods attached to them, that are extremely useful for data manipulation. Read up on these methods and try some of them out (like push, pop, slice and splice) on an array of your creation. ## Assignment Loop an Array --- ## 📊 Your Arrays & Loops Toolkit Summary --- ## 🚀 Your Arrays & Loops Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Create an array of your favorite movies and access specific elements - [ ] Write a for loop that counts from 1 to 10 - [ ] Try the modern array methods challenge from the lesson - [ ] Practice array indexing in your browser console ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any challenging concepts - [ ] Build the comprehensive grade analyzer from the GitHub Copilot challenge - [ ] Create a simple shopping cart that adds and removes items - [ ] Practice converting between different loop types - [ ] Experiment with array methods like push, pop, slice, and splice ### 📅 Your Week-Long Data Processing Journey - [ ] Complete the "Loop an Array" assignment with creative enhancements - [ ] Build a to-do list application using arrays and loops - [ ] Create a simple statistics calculator for numerical data - [ ] Practice with MDN array methods - [ ] Build a photo gallery or music playlist interface - [ ] Explore functional programming with map, filter, and reduce ### 🌟 Your Month-Long Transformation - [ ] Master advanced array operations and performance optimization - [ ] Build a complete data visualization dashboard - [ ] Contribute to open source projects involving data processing - [ ] Teach someone else about arrays and loops with practical examples - [ ] Create a personal library of reusable data processing functions - [ ] Explore algorithms and data structures built on arrays ### 🏆 Final Data Processing Champion Check-in Celebrate your array and loop mastery: - What's the most useful array operation you've learned for real-world applications? - Which loop type feels most natural to you and why? - How has understanding arrays and loops changed your approach to organizing data? - What complex data processing task would you like to tackle next?

array,loop

مقدمة إلى JavaScript

JavaScript هي لغة الويب. في هذه الدروس الأربعة، ستتعلم أساسياتها. ### المواضيع 1. المتغيرات وأنواع البيانات 2. الدوال والطرق 3. اتخاذ القرارات باستخدام JavaScript 4. المصفوفات والحلقات ### الشكر والتقدير تم كتابة هذه الدروس بكل ♥️ بواسطة Jasmine Greenaway، Christopher Harrison و Chris Noring إخلاء المسؤولية: تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.

javascript

أساسيات JavaScript: أنواع البيانات

أنواع البيانات هي واحدة من المفاهيم الأساسية في JavaScript التي ستواجهها في كل برنامج تكتبه. فكر في أنواع البيانات كنظام تصنيف استخدمه أمناء المكتبات القدامى في الإسكندرية – حيث كان لديهم أماكن محددة لللفائف التي تحتوي على الشعر، الرياضيات، والسجلات التاريخية. JavaScript تنظم المعلومات بطريقة مشابهة مع فئات مختلفة لأنواع البيانات المختلفة. في هذا الدرس، سنستكشف أنواع البيانات الأساسية التي تجعل JavaScript تعمل. ستتعلم كيفية التعامل مع الأرقام، النصوص، القيم الصحيحة/الخاطئة، وفهم لماذا اختيار النوع الصحيح ضروري لبرامجك. قد تبدو هذه المفاهيم مجردة في البداية، ولكن مع الممارسة، ستصبح طبيعية بالنسبة لك. فهم أنواع البيانات سيجعل كل شيء آخر في JavaScript أكثر وضوحًا. تمامًا كما يحتاج المهندسون المعماريون إلى فهم مواد البناء المختلفة قبل بناء الكاتدرائية، فإن هذه الأساسيات ستدعم كل ما تبنيه في المستقبل. ## اختبار ما قبل المحاضرة اختبار ما قبل المحاضرة يغطي هذا الدرس أساسيات JavaScript، اللغة التي توفر التفاعل على الويب. [](https://youtube.com/watch?v=JNIXfGiDWM8 "المتغيرات في JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "أنواع البيانات في JavaScript") لنبدأ مع المتغيرات وأنواع البيانات التي تملؤها! ## المتغيرات المتغيرات هي اللبنات الأساسية في البرمجة. مثل الجرار المسمّاة التي استخدمها الكيميائيون في العصور الوسطى لتخزين المواد المختلفة، تتيح لك المتغيرات تخزين المعلومات وإعطائها اسمًا وصفيًا حتى تتمكن من الرجوع إليها لاحقًا. هل تحتاج إلى تذكر عمر شخص ما؟ خزّنه في متغير يسمى age. هل تريد تتبع اسم المستخدم؟ احتفظ به في متغير يسمى userName. سنركز على النهج الحديث لإنشاء المتغيرات في JavaScript. تمثل التقنيات التي ستتعلمها هنا سنوات من تطور اللغة وأفضل الممارسات التي طورها مجتمع البرمجة. إنشاء وتصريح المتغير له الصيغة التالية [الكلمة المفتاحية] [الاسم]. يتكون من جزئين: - الكلمة المفتاحية. استخدم let للمتغيرات التي يمكن أن تتغير، أو const للقيم التي تبقى ثابتة. - اسم المتغير، وهو اسم وصفي تختاره بنفسك. ✅ تم تقديم الكلمة المفتاحية let في ES6 وتمنح متغيرك ما يسمى _نطاق الكتلة_. يُوصى باستخدام let أو const بدلاً من الكلمة المفتاحية القديمة var. سنغطي نطاق الكتلة بشكل أعمق في الأجزاء المستقبلية. ### المهمة - العمل مع المتغيرات 1. صرّح عن متغير. لنبدأ بإنشاء أول متغير لدينا: ```javascript let myVariable; ``` ما الذي يحققه هذا: - هذا يخبر JavaScript بإنشاء موقع تخزين يسمى myVariable - تخصص JavaScript مساحة في الذاكرة لهذا المتغير - المتغير حاليًا ليس له قيمة (غير معرّف) 2. امنحه قيمة. الآن لنضع شيئًا في متغيرنا: ```javascript myVariable = 123; ``` كيف تعمل عملية الإسناد: - يقوم المشغل = بإسناد القيمة 123 إلى متغيرنا - يحتوي المتغير الآن على هذه القيمة بدلاً من أن يكون غير معرّف - يمكنك الرجوع إلى هذه القيمة في جميع أنحاء الكود باستخدام myVariable > ملاحظة: استخدام = في هذا الدرس يعني أننا نستخدم "مشغل الإسناد"، الذي يُستخدم لتعيين قيمة لمتغير. لا يشير إلى المساواة. 3. افعلها بطريقة ذكية. في الواقع، دعنا نجمع بين الخطوتين: ```javascript let myVariable = 123; ``` هذا النهج أكثر كفاءة: - تقوم بتصريح المتغير وتعيين قيمة في بيان واحد - هذه هي الممارسة القياسية بين المطورين - يقلل من طول الكود مع الحفاظ على الوضوح 4. غيّر رأيك. ماذا لو أردنا تخزين رقم مختلف؟ ```javascript myVariable = 321; ``` فهم إعادة الإسناد: - يحتوي المتغير الآن على 321 بدلاً من 123 - يتم استبدال القيمة السابقة – المتغيرات تخزن قيمة واحدة فقط في كل مرة - هذه القابلية للتغيير هي السمة الرئيسية للمتغيرات التي يتم التصريح عنها باستخدام let ✅ جرّبها! يمكنك كتابة JavaScript مباشرة في متصفحك. افتح نافذة المتصفح وانتقل إلى أدوات المطور. في وحدة التحكم، ستجد موجهًا؛ اكتب let myVariable = 123، اضغط على زر الإدخال، ثم اكتب myVariable. ماذا يحدث؟ لاحظ، ستتعلم المزيد عن هذه المفاهيم في الدروس اللاحقة. ### 🧠 اختبار إتقان المتغيرات: الشعور بالراحة لنرى كيف تشعر بشأن المتغيرات: - هل يمكنك شرح الفرق بين التصريح والإسناد لمتغير؟ - ماذا يحدث إذا حاولت استخدام متغير قبل التصريح عنه؟ - متى تختار let بدلاً من const لمتغير؟ ## الثوابت في بعض الأحيان تحتاج إلى تخزين معلومات يجب ألا تتغير أبدًا أثناء تنفيذ البرنامج. فكر في الثوابت مثل المبادئ الرياضية التي وضعها إقليدس في اليونان القديمة – بمجرد إثباتها وتوثيقها، ظلت ثابتة لجميع المراجع المستقبلية. الثوابت تعمل بشكل مشابه للمتغيرات، ولكن مع قيد مهم: بمجرد إسناد قيمتها، لا يمكن تغييرها. تساعد هذه الخاصية في منع التعديلات العرضية على القيم الحرجة في برنامجك. تصريح وتخصيص الثابت يتبع نفس مفاهيم المتغير، مع استثناء الكلمة المفتاحية const. عادةً ما يتم التصريح عن الثوابت بأحرف كبيرة. ما الذي يفعله هذا الكود: - ينشئ ثابتًا يسمى MY_VARIABLE بالقيمة 123 - يستخدم اتفاقية تسمية بالأحرف الكبيرة للثوابت - يمنع أي تغييرات مستقبلية لهذه القيمة الثوابت لها قاعدتان رئيسيتان: - يجب أن تعطيها قيمة فورًا – لا يُسمح بالثوابت الفارغة! - لا يمكنك أبدًا تغيير تلك القيمة – ستقوم JavaScript بإلقاء خطأ إذا حاولت. لنرى ما أعنيه: قيمة بسيطة - ما يلي غير مسموح به: ```javascript const PI = 3; PI = 4; // غير مسموح ``` ما تحتاج إلى تذكره: - محاولات إعادة إسناد ثابت ستسبب خطأ - تحمي القيم المهمة من التغييرات العرضية - تضمن أن القيمة تبقى ثابتة طوال برنامجك مرجع الكائن محمي - ما يلي غير مسموح به: ```javascript const obj = { a: 3 }; obj = { b: 5 } // غير مسموح ``` فهم هذه المفاهيم: - يمنع استبدال الكائن بالكامل بآخر جديد - يحمي المرجع للكائن الأصلي - يحافظ على هوية الكائن في الذاكرة قيمة الكائن غير محمية - ما يلي مسموح به: ```javascript const obj = { a: 3 }; obj.a = 5; // مسموح ``` تفصيل ما يحدث هنا: - يعدل قيمة الخاصية داخل الكائن - يحافظ على نفس مرجع الكائن - يوضح أن محتويات الكائن يمكن أن تتغير بينما يبقى المرجع ثابتًا > ملاحظة، تعني const أن المرجع محمي من إعادة الإسناد. القيمة ليست _غير قابلة للتغيير_ ومع ذلك يمكن أن تتغير، خاصة إذا كانت بنية معقدة مثل الكائن. ## أنواع البيانات JavaScript تنظم المعلومات في فئات مختلفة تسمى أنواع البيانات. هذا المفهوم يشبه كيف صنف العلماء القدامى المعرفة – ميز أرسطو بين أنواع مختلفة من التفكير، مع العلم أن المبادئ المنطقية لا يمكن تطبيقها بشكل موحد على الشعر، الرياضيات، والفلسفة الطبيعية. أنواع البيانات مهمة لأن العمليات المختلفة تعمل مع أنواع مختلفة من المعلومات. تمامًا كما لا يمكنك إجراء العمليات الحسابية على اسم شخص أو ترتيب معادلة رياضية أبجديًا، تتطلب JavaScript النوع المناسب من البيانات لكل عملية. فهم هذا يمنع الأخطاء ويجعل الكود الخاص بك أكثر موثوقية. يمكن للمتغيرات تخزين أنواع مختلفة من القيم، مثل الأرقام والنصوص. تُعرف هذه الأنواع المختلفة من القيم باسم نوع البيانات. أنواع البيانات هي جزء مهم من تطوير البرمجيات لأنها تساعد المطورين على اتخاذ قرارات حول كيفية كتابة الكود وكيفية تشغيل البرنامج. علاوة على ذلك، بعض أنواع البيانات لها ميزات فريدة تساعد في تحويل أو استخراج معلومات إضافية من قيمة. ✅ تُعرف أنواع البيانات أيضًا باسم البدائيات في JavaScript، لأنها أنواع البيانات ذات المستوى الأدنى التي توفرها اللغة. هناك 7 أنواع بيانات بدائية: string، number، bigint، boolean، undefined، null، وsymbol. خذ دقيقة لتصور ما قد يمثله كل من هذه البدائيات. ما هو zebra؟ ماذا عن 0؟ true؟ ### الأرقام الأرقام هي النوع الأكثر بساطة في JavaScript. سواء كنت تعمل مع أرقام صحيحة مثل 42، أرقام عشرية مثل 3.14، أو أرقام سلبية مثل -5، JavaScript تتعامل معها بشكل موحد. تذكر متغيرنا من قبل؟ تلك القيمة 123 التي قمنا بتخزينها كانت في الواقع نوع بيانات رقمي: الخصائص الرئيسية: - JavaScript تتعرف تلقائيًا على القيم الرقمية - يمكنك إجراء العمليات الحسابية باستخدام هذه المتغيرات - لا حاجة لتصريح نوع صريح يمكن للمتغيرات تخزين جميع أنواع الأرقام، بما في ذلك الأرقام العشرية أو السلبية. يمكن أيضًا استخدام الأرقام مع المشغلين الحسابيين، الذين يتم تناولهم في القسم التالي. ### المشغلون الحسابيون المشغلون الحسابيون يسمحون لك بإجراء العمليات الحسابية في JavaScript. هذه المشغلون تتبع نفس المبادئ التي استخدمها علماء الرياضيات لقرون – نفس الرموز التي ظهرت في أعمال علماء مثل الخوارزمي، الذي طور التدوين الجبري. تعمل المشغلون كما تتوقع من الرياضيات التقليدية: علامة الجمع للإضافة، علامة الطرح للطرح، وهكذا. هناك عدة أنواع من المشغلين لاستخدامها عند إجراء الوظائف الحسابية، وبعضها مدرج هنا: ✅ جرّبها! جرب عملية حسابية في وحدة التحكم في متصفحك. هل تفاجأت بالنتائج؟ ### 🧮 اختبار مهارات الرياضيات: الحساب بثقة اختبر فهمك للحساب: - ما الفرق بين / (القسمة) و % (الباقي)؟ - هل يمكنك التنبؤ بما يساوي 10 % 3؟ (تلميح: ليس 3.33...) - لماذا قد يكون مشغل الباقي مفيدًا في البرمجة؟ ### النصوص في JavaScript، يتم تمثيل البيانات النصية كنصوص. مصطلح "نصوص" يأتي من مفهوم الأحرف المرتبطة معًا في تسلسل، تمامًا مثل الطريقة التي كان الكتّاب في الأديرة في العصور الوسطى يربطون بها الحروف لتشكيل الكلمات والجمل في مخطوطاتهم. النصوص أساسية لتطوير الويب. كل قطعة نص تظهر على موقع الويب – أسماء المستخدمين، تسميات الأزرار، رسائل الخطأ، المحتوى – يتم التعامل معها كبيانات نصية. فهم النصوص ضروري لإنشاء واجهات مستخدم وظيفية. النصوص هي مجموعات من الأحرف التي تقع بين علامات الاقتباس الفردية أو المزدوجة. فهم هذه المفاهيم: - تستخدم إما علامات الاقتباس الفردية ' أو المزدوجة " لتعريف النصوص - تخزن بيانات نصية يمكن أن تشمل الحروف، الأرقام، والرموز - تسند قيم النصوص إلى المتغيرات لاستخدامها لاحقًا - تتطلب علامات اقتباس لتمييز النص عن أسماء المتغيرات تذكر استخدام علامات الاقتباس عند كتابة النص، وإلا ستفترض JavaScript أنه اسم متغير. ### تنسيق النصوص تتيح لك معالجة النصوص دمج عناصر النص، تضمين المتغيرات، وإنشاء محتوى ديناميكي يستجيب لحالة البرنامج. هذه التقنية تمكنك من بناء النصوص برمجيًا. غالبًا ما تحتاج إلى دمج نصوص متعددة معًا – تُعرف هذه العملية باسم الربط. لدمج سلسلتين أو أكثر أو جمعهما معًا، استخدم عامل التشغيل +. خطوة بخطوة، إليك ما يحدث: - يجمع عدة سلاسل باستخدام عامل التشغيل + - يربط السلاسل مباشرةً دون مسافات في المثال الأول - يضيف مسافات " " بين السلاسل لتحسين القراءة - يدرج علامات الترقيم مثل الفواصل لإنشاء تنسيق صحيح ✅ لماذا 1 + 1 = 2 في JavaScript، ولكن '1' + '1' = 11؟ فكر في ذلك. ماذا عن '1' + 1؟ القوالب النصية هي طريقة أخرى لتنسيق النصوص، ولكن بدلاً من استخدام علامات الاقتباس، يتم استخدام العلامة العكسية. يجب وضع أي شيء ليس نصًا عاديًا داخل قوالب ${ }. يشمل ذلك أي متغيرات قد تكون نصوصًا. لنستوعب كل جزء: - يستخدم العلامة العكسية ` `` بدلاً من علامات الاقتباس العادية لإنشاء القوالب النصية - يدمج المتغيرات مباشرة باستخدام صيغة القالب ${} - يحافظ على المسافات والتنسيق كما هو مكتوب - يوفر طريقة أنظف لإنشاء نصوص معقدة باستخدام المتغيرات يمكنك تحقيق أهداف التنسيق باستخدام أي طريقة، ولكن القوالب النصية تحترم أي مسافات وفواصل أسطر. ✅ متى تستخدم القالب النصي مقابل النص العادي؟ ### 🔤 اختبار إتقان النصوص: الثقة في معالجة النصوص قيّم مهاراتك في النصوص: - هل يمكنك شرح لماذا '1' + '1' تساوي '11' بدلاً من 2؟ - أي طريقة للنصوص تجدها أكثر وضوحًا: الدمج أم القوالب النصية؟ - ماذا يحدث إذا نسيت علامات الاقتباس حول النص؟ ### القيم المنطقية القيم المنطقية تمثل أبسط أشكال البيانات: يمكن أن تحمل فقط واحدة من قيمتين – true أو false. هذا النظام المنطقي الثنائي يعود إلى عمل جورج بول، عالم الرياضيات في القرن التاسع عشر الذي طور الجبر البولياني. على الرغم من بساطتها، القيم المنطقية ضرورية للمنطق البرمجي. فهي تمكن الكود الخاص بك من اتخاذ قرارات بناءً على الشروط – مثل ما إذا كان المستخدم مسجل الدخول، أو إذا تم النقر على زر، أو إذا تم استيفاء معايير معينة. القيم المنطقية يمكن أن تكون فقط true أو false. تساعد القيم المنطقية في اتخاذ قرارات حول أي خطوط من الكود يجب أن تعمل عندما يتم استيفاء شروط معينة. في كثير من الحالات، العوامل تساعد في تحديد قيمة القيم المنطقية وغالبًا ما تلاحظ وتكتب متغيرات يتم تهيئتها أو تحديث قيمها باستخدام عامل. في المثال أعلاه، قمنا بـ: - إنشاء متغير يخزن القيمة المنطقية true - عرض كيفية تخزين القيمة المنطقية false - استخدام الكلمات المفتاحية الدقيقة true و false (بدون علامات اقتباس) - تحضير هذه المتغيرات للاستخدام في العبارات الشرطية ✅ يمكن اعتبار المتغير "صحيحًا" إذا كان يقيم إلى القيمة المنطقية true. ومن المثير للاهتمام، في JavaScript، كل القيم صحيحة إلا إذا تم تعريفها كقيم خاطئة. ### 🎯 اختبار المنطق البولياني: مهارات اتخاذ القرار اختبر فهمك للقيم المنطقية: - لماذا تعتقد أن JavaScript لديها قيم "صحيحة" و"خاطئة" إلى جانب true و false؟ - هل يمكنك التنبؤ بأي من هذه القيم خاطئة: 0, "0", [], "false"؟ - كيف يمكن أن تكون القيم المنطقية مفيدة في التحكم بتدفق البرنامج؟ --- ## 📊 ملخص أدوات أنواع البيانات الخاصة بك ## تحدي وكيل GitHub Copilot 🚀 استخدم وضع الوكيل لإكمال التحدي التالي: الوصف: قم بإنشاء مدير معلومات شخصية يوضح جميع أنواع البيانات في JavaScript التي تعلمتها في هذا الدرس أثناء التعامل مع سيناريوهات بيانات واقعية. المهمة: قم ببناء برنامج JavaScript ينشئ كائن ملف تعريف مستخدم يحتوي على: اسم الشخص (نص)، العمر (رقم)، حالة كونه طالبًا (منطقي)، الألوان المفضلة كمصفوفة، وكائن عنوان يحتوي على خصائص الشارع، المدينة، والرمز البريدي. قم بتضمين وظائف لعرض معلومات الملف الشخصي وتحديث الحقول الفردية. تأكد من عرض دمج النصوص، القوالب النصية، العمليات الحسابية مع العمر، والمنطق البولياني لحالة الطالب. تعرف على المزيد حول وضع الوكيل هنا. ## 🚀 التحدي JavaScript لديها بعض السلوكيات التي قد تفاجئ المطورين. إليك مثال كلاسيكي للاستكشاف: حاول كتابة هذا في وحدة التحكم في المتصفح: let age = 1; let Age = 2; age == Age ولاحظ النتيجة. ستعيد false – هل يمكنك تحديد السبب؟ هذا يمثل واحدًا من العديد من سلوكيات JavaScript التي تستحق الفهم. الإلمام بهذه الأمور سيساعدك على كتابة كود أكثر موثوقية وحل المشكلات بشكل أكثر فعالية. ## اختبار ما بعد المحاضرة اختبار ما بعد المحاضرة ## المراجعة والدراسة الذاتية ألقِ نظرة على هذه القائمة من تمارين JavaScript وجرب واحدة. ماذا تعلمت؟ ## الواجب ممارسة أنواع البيانات ## 🚀 جدول إتقان أنواع البيانات في JavaScript ### ⚡ ما يمكنك القيام به في الدقائق الخمس القادمة - [ ] افتح وحدة التحكم في المتصفح وأنشئ 3 متغيرات بأنواع بيانات مختلفة - [ ] جرب التحدي: let age = 1; let Age = 2; age == Age واكتشف لماذا تكون النتيجة خاطئة - [ ] مارس دمج النصوص باستخدام اسمك ورقمك المفضل - [ ] اختبر ما يحدث عند إضافة رقم إلى نص ### 🎯 ما يمكنك إنجازه خلال الساعة - [ ] أكمل اختبار ما بعد الدرس وراجع أي مفاهيم مربكة - [ ] أنشئ آلة حاسبة صغيرة تضيف، تطرح، تضرب، وتقسم رقمين - [ ] قم ببناء منسق أسماء بسيط باستخدام القوالب النصية - [ ] استكشف الفروقات بين عوامل المقارنة == و === - [ ] مارس التحويل بين أنواع البيانات المختلفة ### 📅 أساسيات JavaScript الخاصة بك خلال أسبوع - [ ] أكمل الواجب بثقة وإبداع - [ ] أنشئ كائن ملف تعريف شخصي باستخدام جميع أنواع البيانات التي تعلمتها - [ ] مارس مع تمارين JavaScript من CSS-Tricks - [ ] قم ببناء مدقق نموذج بسيط باستخدام المنطق البولياني - [ ] جرب أنواع البيانات المصفوفة والكائنات (مقدمة للدرس القادم) - [ ] انضم إلى مجتمع JavaScript واطرح أسئلة حول أنواع البيانات ### 🌟 تحولك خلال شهر - [ ] دمج معرفة أنواع البيانات في مشاريع برمجية أكبر - [ ] فهم متى ولماذا تستخدم كل نوع بيانات في التطبيقات الحقيقية - [ ] مساعدة المبتدئين الآخرين على فهم أساسيات JavaScript - [ ] بناء تطبيق صغير يدير أنواع مختلفة من بيانات المستخدم - [ ] استكشاف مفاهيم أنواع البيانات المتقدمة مثل الإكراه النوعي والمساواة الصارمة - [ ] المساهمة في مشاريع JavaScript مفتوحة المصدر بتحسين الوثائق ### 🧠 فحص إتقان أنواع البيانات النهائي احتفل بأساسيات JavaScript الخاصة بك: - أي نوع بيانات فاجأك أكثر من حيث سلوكه؟ - ما مدى راحتك في شرح الفرق بين المتغيرات والثوابت لصديق؟ - ما هو الشيء الأكثر إثارة للاهتمام الذي اكتشفته عن نظام أنواع JavaScript؟ - ما هو التطبيق الواقعي الذي يمكنك تخيله بناءً على هذه الأساسيات؟ --- إخلاء المسؤولية: تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة.

javascript

أساسيات JavaScript: الطرق والدوال

## اختبار ما قبل المحاضرة اختبار ما قبل المحاضرة كتابة نفس الكود مرارًا وتكرارًا هي واحدة من أكثر الإحباطات شيوعًا في البرمجة. تحل الدوال هذه المشكلة من خلال السماح لك بتجميع الكود في كتل قابلة لإعادة الاستخدام. فكر في الدوال مثل الأجزاء القياسية التي جعلت خط التجميع الخاص بـ Henry Ford ثوريًا – بمجرد إنشاء مكون موثوق، يمكنك استخدامه أينما احتجت دون الحاجة إلى إعادة بنائه من البداية. تتيح لك الدوال تجميع أجزاء من الكود بحيث يمكنك إعادة استخدامها في جميع أنحاء البرنامج. بدلاً من نسخ ولصق نفس المنطق في كل مكان، يمكنك إنشاء دالة مرة واحدة واستدعائها عند الحاجة. هذه الطريقة تحافظ على تنظيم الكود وتجعل التحديثات أسهل بكثير. في هذه الدرس، ستتعلم كيفية إنشاء دوال خاصة بك، تمرير المعلومات إليها، والحصول على نتائج مفيدة منها. ستكتشف الفرق بين الدوال والطرق، تتعرف على الأساليب الحديثة للكتابة، وترى كيف يمكن للدوال أن تعمل مع دوال أخرى. سنبني هذه المفاهيم خطوة بخطوة. [](https://youtube.com/watch?v=XgKsD6Zwvlc "الطرق والدوال") ## الدوال الدالة هي كتلة مستقلة من الكود تؤدي مهمة محددة. إنها تحتوي على منطق يمكنك تنفيذه عند الحاجة. بدلاً من كتابة نفس الكود عدة مرات في البرنامج، يمكنك تجميعه في دالة واستدعاء تلك الدالة عند الحاجة. هذه الطريقة تحافظ على نظافة الكود وتجعل التحديثات أسهل بكثير. تخيل التحدي في الصيانة إذا كنت بحاجة إلى تغيير منطق منتشر في 20 موقعًا مختلفًا في قاعدة الكود. تسمية الدوال بشكل وصفي أمر ضروري. الدالة ذات الاسم الجيد توضح غرضها بوضوح – عندما ترى cancelTimer()، تفهم فورًا ما تقوم به، تمامًا مثل الزر الذي يحمل تسمية واضحة يخبرك بما سيحدث عند النقر عليه. ## إنشاء واستدعاء دالة لنلقِ نظرة على كيفية إنشاء دالة. الصيغة تتبع نمطًا ثابتًا: لنقم بتفصيل هذا: - الكلمة المفتاحية function تخبر JavaScript "مرحبًا، أنا أقوم بإنشاء دالة!" - nameOfFunction هو المكان الذي تعطي فيه الدالة اسمًا وصفيًا - الأقواس () هي المكان الذي يمكنك إضافة المعاملات فيه (سنتحدث عنها قريبًا) - الأقواس المعقوفة {} تحتوي على الكود الفعلي الذي يتم تشغيله عند استدعاء الدالة لنقم بإنشاء دالة ترحيب بسيطة لنرى هذا عمليًا: هذه الدالة تطبع "Hello, world!" في وحدة التحكم. بمجرد تعريفها، يمكنك استخدامها عدة مرات حسب الحاجة. لتنفيذ (أو "استدعاء") الدالة، اكتب اسمها متبوعًا بالأقواس. يسمح لك JavaScript بتعريف الدالة قبل أو بعد استدعائها – محرك JavaScript سيتولى ترتيب التنفيذ. عند تشغيل هذا السطر، يتم تنفيذ كل الكود داخل دالة displayGreeting، مما يعرض "Hello, world!" في وحدة التحكم في المتصفح. يمكنك استدعاء هذه الدالة مرارًا وتكرارًا. ### 🧠 فحص أساسيات الدوال: بناء أول دوال لك لنرى كيف تشعر بشأن الدوال الأساسية: - هل يمكنك شرح سبب استخدام الأقواس المعقوفة {} في تعريف الدوال؟ - ماذا يحدث إذا كتبت displayGreeting بدون الأقواس؟ - لماذا قد ترغب في استدعاء نفس الدالة عدة مرات؟ ### أفضل الممارسات للدوال إليك بعض النصائح لمساعدتك في كتابة دوال رائعة: - أعطِ دوالك أسماء واضحة ووصفيّة – ستشكر نفسك في المستقبل! - استخدم camelCasing لأسماء متعددة الكلمات (مثل calculateTotal بدلاً من calculate_total) - اجعل كل دالة تركز على القيام بشيء واحد بشكل جيد ## تمرير المعلومات إلى دالة دالتنا displayGreeting محدودة – يمكنها فقط عرض "Hello, world!" للجميع. تسمح لنا المعاملات بجعل الدوال أكثر مرونة وفائدة. المعاملات تعمل كأماكن مؤقتة حيث يمكنك إدخال قيم مختلفة في كل مرة تستخدم فيها الدالة. بهذه الطريقة، يمكن لنفس الدالة العمل مع معلومات مختلفة في كل استدعاء. تقوم بإدراج المعاملات داخل الأقواس عند تعريف الدالة، مع فصل المعاملات المتعددة بفواصل: كل معاملة تعمل كمكان مؤقت – عندما يستدعي شخص ما الدالة، سيقدم قيمًا فعلية يتم إدخالها في هذه الأماكن. لنقم بتحديث دالة الترحيب لتقبل اسم شخص ما: لاحظ كيف نستخدم العلامات الخلفية (` `) و${}` لإدخال الاسم مباشرة في رسالتنا – هذا يسمى القالب النصي، وهو طريقة مفيدة جدًا لبناء النصوص مع المتغيرات المدمجة. الآن عندما نستدعي دالتنا، يمكننا تمرير أي اسم: JavaScript يأخذ النص 'Christopher'، ويعينه إلى معاملة name، ويُنشئ الرسالة الشخصية "Hello, Christopher!" ## القيم الافتراضية ماذا لو أردنا جعل بعض المعاملات اختيارية؟ هنا تأتي القيم الافتراضية في متناول اليد! لنفترض أننا نريد أن يتمكن الناس من تخصيص كلمة الترحيب، ولكن إذا لم يحددوا واحدة، سنستخدم "Hello" كخيار افتراضي. يمكنك إعداد القيم الافتراضية باستخدام علامة المساواة، تمامًا مثل تعيين متغير: هنا، name لا يزال مطلوبًا، ولكن salutation لديه قيمة احتياطية 'Hello' إذا لم يقدم أحد تحية مختلفة. الآن يمكننا استدعاء هذه الدالة بطريقتين مختلفتين: في الاستدعاء الأول، يستخدم JavaScript القيمة الافتراضية "Hello" لأننا لم نحدد تحية. في الاستدعاء الثاني، يستخدم تحيتنا المخصصة "Hi" بدلاً من ذلك. هذه المرونة تجعل الدوال قابلة للتكيف مع سيناريوهات مختلفة. ### 🎛️ فحص إتقان المعاملات: جعل الدوال مرنة اختبر فهمك للمعاملات: - ما الفرق بين المعاملة والحجة؟ - لماذا تكون القيم الافتراضية مفيدة في البرمجة الواقعية؟ - هل يمكنك التنبؤ بما يحدث إذا مررت حججًا أكثر من المعاملات؟ ## القيم المرجعة دوالنا حتى الآن كانت فقط تعرض رسائل في وحدة التحكم، ولكن ماذا لو أردت أن تحسب دالة شيئًا وتعيد لك النتيجة؟ هنا تأتي القيم المرجعة. بدلاً من مجرد عرض شيء ما، يمكن للدالة أن تعيد لك قيمة يمكنك تخزينها في متغير أو استخدامها في أجزاء أخرى من الكود. لإرسال قيمة مرة أخرى، تستخدم الكلمة المفتاحية return متبوعة بما تريد إعادته: هناك شيء مهم: عندما تصل الدالة إلى عبارة return، تتوقف فورًا عن التشغيل وترسل تلك القيمة إلى من استدعى الدالة. لنقم بتعديل دالة الترحيب لدينا لإرجاع الرسالة بدلاً من طباعتها: الآن بدلاً من طباعة الترحيب، تقوم هذه الدالة بإنشاء الرسالة وتسلمها لنا. لاستخدام القيمة المرجعة، يمكننا تخزينها في متغير تمامًا مثل أي قيمة أخرى: الآن يحتوي greetingMessage على "Hello, Christopher" ويمكننا استخدامه في أي مكان في الكود – لعرضه على صفحة ويب، تضمينه في بريد إلكتروني، أو تمريره إلى دالة أخرى. ### 🔄 فحص القيم المرجعة: الحصول على النتائج قيّم فهمك للقيم المرجعة: - ماذا يحدث للكود بعد عبارة return في الدالة؟ - لماذا يكون إرجاع القيم غالبًا أفضل من مجرد الطباعة في وحدة التحكم؟ - هل يمكن للدالة أن تعيد أنواعًا مختلفة من القيم (نصوص، أرقام، قيم منطقية)؟ ## الدوال كمعاملات لدوال أخرى يمكن تمرير الدوال كمعاملات لدوال أخرى. على الرغم من أن هذا المفهوم قد يبدو معقدًا في البداية، إلا أنه ميزة قوية تتيح أنماط برمجة مرنة. هذا النمط شائع جدًا عندما تريد أن تقول "عندما يحدث شيء ما، قم بتنفيذ هذا الكود الآخر." على سبيل المثال، "عندما ينتهي المؤقت، قم بتشغيل هذا الكود" أو "عندما ينقر المستخدم على الزر، استدعِ هذه الدالة." لنلقِ نظرة على setTimeout، وهي دالة مدمجة تنتظر فترة زمنية معينة ثم تشغل بعض الكود. نحتاج إلى إخبارها بالكود الذي يجب تشغيله – حالة مثالية لتمرير دالة! جرب هذا الكود – بعد 3 ثوانٍ، سترى رسالة: لاحظ كيف نمرر displayDone (بدون أقواس) إلى setTimeout. نحن لا نستدعي الدالة بأنفسنا – نحن نسلمها إلى setTimeout ونقول "استدعِ هذه الدالة بعد 3 ثوانٍ." ### الدوال المجهولة أحيانًا تحتاج إلى دالة لشيء واحد فقط ولا تريد إعطائها اسمًا. فكر في الأمر – إذا كنت تستخدم دالة مرة واحدة فقط، فلماذا تملأ الكود باسم إضافي؟ يسمح لك JavaScript بإنشاء دوال مجهولة – دوال بدون أسماء يمكنك تعريفها في المكان الذي تحتاجها فيه. إليك كيف يمكننا إعادة كتابة مثال المؤقت باستخدام دالة مجهولة: هذا يحقق نفس النتيجة، ولكن يتم تعريف الدالة مباشرة داخل استدعاء setTimeout، مما يلغي الحاجة إلى تعريف دالة منفصلة. ### دوال السهم يوفر JavaScript الحديث طريقة أقصر لكتابة الدوال تسمى دوال السهم. تستخدم => (التي تبدو كالسهم – أليس كذلك؟) وهي شائعة جدًا بين المطورين. تتيح دوال السهم لك تخطي الكلمة المفتاحية function وكتابة كود أكثر اختصارًا. إليك مثال المؤقت الخاص بنا باستخدام دالة السهم: الأقواس () هي المكان الذي توضع فيه المعاملات (فارغة في هذه الحالة)، ثم يأتي السهم =>، وأخيرًا جسم الدالة داخل الأقواس المعقوفة. هذا يوفر نفس الوظيفة مع صيغة أكثر اختصارًا. ### متى تستخدم كل استراتيجية متى يجب أن تستخدم كل نهج؟ إرشاد عملي: إذا كنت ستستخدم الدالة عدة مرات، أعطها اسمًا وقم بتعريفها بشكل منفصل. إذا كانت للاستخدام مرة واحدة فقط، فكر في استخدام دالة مجهولة. كلا دوال السهم والصيغة التقليدية خيارات صالحة، على الرغم من أن دوال السهم شائعة في قواعد الكود الحديثة. ### 🎨 فحص أنماط الدوال: اختيار الصيغة المناسبة اختبر فهمك للصيغة: - متى قد تفضل دوال السهم على الصيغة التقليدية للدوال؟ - ما الميزة الرئيسية للدوال المجهولة؟ - هل يمكنك التفكير في موقف تكون فيه الدالة المسماة أفضل من الدالة المجهولة؟ --- ## 🚀 التحدي هل يمكنك التعبير في جملة واحدة عن الفرق بين الدوال والطرق؟ جرب ذلك! ## تحدي GitHub Copilot Agent 🚀 استخدم وضع الوكيل لإكمال التحدي التالي: الوصف: قم بإنشاء مكتبة أدوات رياضية تحتوي على دوال رياضية توضح مفاهيم الدوال المختلفة التي تم تناولها في هذا الدرس، بما في ذلك المعاملات، القيم الافتراضية، القيم المرجعة، ودوال السهم. المهمة: قم بإنشاء ملف JavaScript يسمى mathUtils.js يحتوي على الدوال التالية: 1. دالة add تأخذ معاملين وتعيد مجموعهما 2. دالة multiply مع قيم افتراضية للمعاملات (المعامل الثاني افتراضيًا 1) 3. دالة سهم square تأخذ رقمًا وتعيد مربعه 4. دالة calculate تقبل دالة أخرى كمعاملة ورقمين، ثم تطبق الدالة على هذه الأرقام 5. قم بتوضيح استدعاء كل دالة مع حالات اختبار مناسبة تعرف على المزيد حول وضع الوكيل هنا. ## اختبار ما بعد المحاضرة اختبار ما بعد المحاضرة ## المراجعة والدراسة الذاتية من المفيد قراءة المزيد عن دوال السهم، حيث يتم استخدامها بشكل متزايد في قواعد الكود. قم بممارسة كتابة دالة، ثم إعادة كتابتها باستخدام هذه الصيغة. ## الواجب المرح مع الدوال --- ## 🧰 ملخص أدوات دوال JavaScript الخاصة بك --- ## 🚀 جدول زمني لإتقان دوال JavaScript ### ⚡ ما يمكنك القيام به في الدقائق الخمس القادمة - [ ] اكتب دالة بسيطة تعيد رقمك المفضل - [ ] قم بإنشاء دالة تحتوي على معاملين تضيفهما معًا - [ ] حاول تحويل دالة تقليدية إلى صيغة دالة السهم - [ ] تدرب على التحدي: اشرح الفرق بين الدوال والطرق ### 🎯 ما يمكنك إنجازه خلال هذه الساعة - [ ] أكمل اختبار ما بعد الدرس وراجع أي مفاهيم مربكة - [ ] قم ببناء مكتبة أدوات الرياضيات من تحدي GitHub Copilot - [ ] أنشئ دالة تستخدم دالة أخرى كمعامل - [ ] تدرب على كتابة دوال بمعاملات افتراضية - [ ] جرب استخدام القوالب النصية في قيم إرجاع الدوال ### 📅 إتقان الدوال خلال أسبوعك - [ ] أكمل مهمة "المرح مع الدوال" بإبداع - [ ] أعد صياغة بعض الأكواد المتكررة التي كتبتها إلى دوال قابلة لإعادة الاستخدام - [ ] قم ببناء آلة حاسبة صغيرة باستخدام الدوال فقط (بدون متغيرات عامة) - [ ] تدرب على دوال السهم مع طرق المصفوفة مثل map() و filter() - [ ] أنشئ مجموعة من دوال الأدوات للمهام الشائعة - [ ] ادرس الدوال ذات الترتيب الأعلى ومفاهيم البرمجة الوظيفية ### 🌟 تحولك خلال الشهر - [ ] أتقن مفاهيم الدوال المتقدمة مثل الإغلاق والنطاق - [ ] قم ببناء مشروع يعتمد بشكل كبير على تركيب الدوال - [ ] ساهم في المصادر المفتوحة من خلال تحسين توثيق الدوال - [ ] علم شخصًا آخر عن الدوال وأنماط الكتابة المختلفة - [ ] استكشف نماذج البرمجة الوظيفية في JavaScript - [ ] أنشئ مكتبة شخصية من الدوال القابلة لإعادة الاستخدام للمشاريع المستقبلية ### 🏆 تسجيل الوصول النهائي لبطل الدوال احتفل بإتقانك للدوال: - ما هي أكثر دالة مفيدة قمت بإنشائها حتى الآن؟ - كيف غير تعلمك عن الدوال طريقة تفكيرك في تنظيم الأكواد؟ - أي صيغة دوال تفضل ولماذا؟ - ما هي المشكلة الواقعية التي ستقوم بحلها بكتابة دالة؟ --- إخلاء المسؤولية: تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.

javascript

أساسيات JavaScript: اتخاذ القرارات

هل تساءلت يومًا كيف تتخذ التطبيقات قرارات ذكية؟ مثل كيفية اختيار نظام الملاحة للطريق الأسرع، أو كيف يقرر منظم الحرارة تشغيل التدفئة؟ هذا هو المفهوم الأساسي لاتخاذ القرارات في البرمجة. كما تم تصميم محرك التحليل الخاص بـ Charles Babbage لاتباع تسلسلات مختلفة من العمليات بناءً على الظروف، تحتاج برامج JavaScript الحديثة إلى اتخاذ خيارات بناءً على ظروف متغيرة. هذه القدرة على التفرع واتخاذ القرارات هي ما يحول الكود الثابت إلى تطبيقات ذكية ومتجاوبة. في هذا الدرس، ستتعلم كيفية تنفيذ المنطق الشرطي في برامجك. سنستكشف العبارات الشرطية، عوامل المقارنة، والتعبيرات المنطقية التي تسمح لكودك بتقييم المواقف والاستجابة بشكل مناسب. ## اختبار ما قبل المحاضرة اختبار ما قبل المحاضرة القدرة على اتخاذ القرارات والتحكم في تدفق البرنامج هي جانب أساسي من البرمجة. يغطي هذا القسم كيفية التحكم في مسار تنفيذ برامج JavaScript الخاصة بك باستخدام القيم المنطقية والمنطق الشرطي. [](https://youtube.com/watch?v=SxTp8j-fMMY "اتخاذ القرارات") ## ملخص سريع عن القيم المنطقية قبل استكشاف اتخاذ القرارات، دعونا نعيد النظر في القيم المنطقية من درسنا السابق. سميت هذه القيم على اسم عالم الرياضيات جورج بول، وتمثل حالات ثنائية – إما true أو false. لا يوجد غموض، ولا منطقة وسطى. تشكل هذه القيم الثنائية أساس كل المنطق الحاسوبي. كل قرار يتخذه برنامجك يتلخص في النهاية إلى تقييم منطقي. إنشاء متغيرات منطقية أمر بسيط: هذا ينشئ متغيرين بقيم منطقية صريحة. ✅ سميت القيم المنطقية على اسم عالم الرياضيات والفيلسوف والمنطقي الإنجليزي جورج بول (1815–1864). ## عوامل المقارنة والقيم المنطقية في الواقع، نادرًا ما تقوم بتعيين القيم المنطقية يدويًا. بدلاً من ذلك، تقوم بإنشائها عن طريق تقييم الشروط: "هل هذا الرقم أكبر من ذاك؟" أو "هل هذه القيم متساوية؟" تُمكّن عوامل المقارنة هذه التقييمات. فهي تقارن القيم وتعيد نتائج منطقية بناءً على العلاقة بين العوامل. ✅ تحقق من معرفتك بكتابة بعض المقارنات في وحدة التحكم في المتصفح. هل تفاجأت بأي بيانات تم إرجاعها؟ ### 🧠 اختبار إتقان المقارنة: فهم المنطق اختبر فهمك للمقارنة: - لماذا تعتقد أن === (المساواة الصارمة) تُفضل عمومًا على == (المساواة غير الصارمة)؟ - هل يمكنك التنبؤ بما يعيده 5 === '5'؟ وماذا عن 5 == '5'؟ - ما الفرق بين !== و !=؟ ## عبارة If عبارة if تشبه طرح سؤال في الكود الخاص بك. "إذا كان هذا الشرط صحيحًا، فقم بهذا الشيء." إنها على الأرجح الأداة الأكثر أهمية التي ستستخدمها لاتخاذ القرارات في JavaScript. إليك كيفية عملها: يتم وضع الشرط داخل الأقواس، وإذا كان true، يقوم JavaScript بتشغيل الكود داخل الأقواس المتعرجة. إذا كان false، يتخطى JavaScript هذا الجزء بالكامل. غالبًا ما تستخدم عوامل المقارنة لإنشاء هذه الشروط. دعونا نرى مثالًا عمليًا: نظرًا لأن 1000 >= 800 يتم تقييمه إلى true، يتم تنفيذ الكود داخل الكتلة، ويعرض "شراء لابتوب جديد!" في وحدة التحكم. ## عبارة If..Else ولكن ماذا لو كنت تريد أن يقوم برنامجك بشيء مختلف عندما يكون الشرط خاطئًا؟ هنا يأتي دور else – إنها مثل وجود خطة احتياطية. عبارة else تمنحك طريقة لتقول "إذا لم يكن هذا الشرط صحيحًا، فقم بهذا الشيء الآخر بدلاً من ذلك." الآن، نظرًا لأن 500 >= 800 هو false، يتخطى JavaScript الكتلة الأولى ويقوم بتشغيل كتلة else بدلاً من ذلك. سترى "لا يمكنني شراء لابتوب جديد بعد!" في وحدة التحكم. ✅ اختبر فهمك لهذا الكود والكود التالي عن طريق تشغيله في وحدة التحكم في المتصفح. قم بتغيير قيم المتغيرات currentMoney و laptopPrice لتغيير ما يتم عرضه في console.log(). ### 🎯 اختبار منطق If-Else: مسارات متفرعة قيّم فهمك للمنطق الشرطي: - ماذا يحدث إذا كانت قيمة currentMoney تساوي تمامًا قيمة laptopPrice؟ - هل يمكنك التفكير في سيناريو واقعي حيث يكون منطق if-else مفيدًا؟ - كيف يمكنك توسيع هذا للتعامل مع نطاقات أسعار متعددة؟ ## عبارة Switch في بعض الأحيان تحتاج إلى مقارنة قيمة واحدة مع خيارات متعددة. بينما يمكنك ربط عدة عبارات if..else، يصبح هذا النهج غير عملي. توفر عبارة switch هيكلًا أنظف للتعامل مع قيم متعددة محددة. يشبه المفهوم أنظمة التبديل الميكانيكية المستخدمة في مقاسم الهاتف المبكرة – قيمة إدخال واحدة تحدد المسار المحدد الذي يتبعه التنفيذ. إليك كيفية هيكلتها: - يقوم JavaScript بتقييم التعبير مرة واحدة - يبحث في كل case للعثور على تطابق - عندما يجد تطابقًا، يقوم بتشغيل كتلة الكود - تخبر break JavaScript بالتوقف والخروج من switch - إذا لم تتطابق أي حالات، يقوم بتشغيل كتلة default (إذا كانت موجودة) في هذا المثال، يرى JavaScript أن dayNumber هو 2، يجد تطابقًا مع case 2، يعين dayName إلى "الثلاثاء"، ثم يخرج من switch. النتيجة؟ يتم تسجيل "اليوم هو الثلاثاء" في وحدة التحكم. ✅ اختبر فهمك لهذا الكود والكود التالي عن طريق تشغيله في وحدة التحكم في المتصفح. قم بتغيير قيم المتغير a لتغيير ما يتم عرضه في console.log(). ### 🔄 إتقان عبارة Switch: خيارات متعددة اختبر فهمك لـ switch: - ماذا يحدث إذا نسيت عبارة break؟ - متى تستخدم switch بدلاً من عبارات if-else المتعددة؟ - لماذا تكون حالة default مفيدة حتى إذا كنت تعتقد أنك غطيت جميع الاحتمالات؟ ## العوامل المنطقية والقيم المنطقية غالبًا ما تتطلب القرارات المعقدة تقييم شروط متعددة في نفس الوقت. تمامًا كما يسمح الجبر المنطقي للرياضيين بدمج التعبيرات المنطقية، توفر البرمجة عوامل منطقية لربط شروط منطقية متعددة. تُمكّن هذه العوامل منطقًا شرطيًا متقدمًا عن طريق دمج تقييمات true/false البسيطة. تتيح لك هذه العوامل دمج الشروط بطرق مفيدة: - AND (&&) يعني أن كلا الشرطين يجب أن يكونا صحيحين - OR (||) يعني أن على الأقل أحد الشرطين يجب أن يكون صحيحًا - NOT (!) يقلب true إلى false (والعكس صحيح) ## الشروط والقرارات باستخدام العوامل المنطقية دعونا نرى هذه العوامل المنطقية قيد التنفيذ مع مثال أكثر واقعية: في هذا المثال: نحسب سعر الخصم بنسبة 20% (640)، ثم نقيم ما إذا كانت أموالنا المتاحة تغطي السعر الكامل أو السعر المخفض. نظرًا لأن 600 تفي بحد السعر المخفض البالغ 640، يتم تقييم الشرط إلى true. ### 🧮 اختبار العوامل المنطقية: دمج الشروط اختبر فهمك للعوامل المنطقية: - في التعبير A && B، ماذا يحدث إذا كان A خاطئًا؟ هل يتم تقييم B؟ - هل يمكنك التفكير في موقف تحتاج فيه إلى استخدام جميع العوامل الثلاثة (&&، ||، !) معًا؟ - ما الفرق بين !user.isActive و user.isActive !== true؟ ### عامل النفي في بعض الأحيان يكون من الأسهل التفكير في متى يكون شيء ما غير صحيح. مثل بدلاً من السؤال "هل المستخدم مسجل الدخول؟"، قد ترغب في السؤال "هل المستخدم غير مسجل الدخول؟" يقوم عامل التعجب (!) بقلب المنطق لك. عامل ! يشبه قول "العكس من..." – إذا كان شيء ما true، يجعلها false، والعكس صحيح. ### التعبيرات الثلاثية للتعيينات الشرطية البسيطة، يوفر JavaScript العامل الثلاثي. يتيح لك هذا التركيب المختصر كتابة تعبير شرطي في سطر واحد، وهو مفيد عندما تحتاج إلى تعيين أحد القيمتين بناءً على شرط. يُقرأ كأنه سؤال: "هل هذا الشرط صحيح؟ إذا نعم، استخدم هذه القيمة. إذا لا، استخدم تلك القيمة." فيما يلي مثال أكثر وضوحًا: ✅ خذ دقيقة لقراءة هذا الكود عدة مرات. هل تفهم كيف تعمل هذه العوامل؟ إليك ما يقوله هذا السطر: "هل firstNumber أكبر من secondNumber؟ إذا نعم، ضع firstNumber في biggestNumber. إذا لا، ضع secondNumber في biggestNumber." العامل الثلاثي هو مجرد طريقة أقصر لكتابة عبارة if..else التقليدية: كلا النهجين ينتج نفس النتائج. يوفر العامل الثلاثي اختصارًا، بينما قد يكون هيكل if-else التقليدي أكثر قابلية للقراءة للشروط المعقدة. --- ## 🚀 التحدي قم بإنشاء برنامج مكتوب أولاً باستخدام العوامل المنطقية، ثم أعد كتابته باستخدام تعبير ثلاثي. ما هي الصياغة التي تفضلها؟ --- ## تحدي GitHub Copilot Agent 🚀 استخدم وضع الوكيل لإكمال التحدي التالي: الوصف: قم بإنشاء حاسبة شاملة للدرجات تعرض مفاهيم اتخاذ القرارات المتعددة من هذا الدرس، بما في ذلك عبارات if-else، عبارات switch، العوامل المنطقية، والتعبيرات الثلاثية. المهمة: اكتب برنامج JavaScript يأخذ درجة الطالب الرقمية (0-100) ويحدد درجته الحرفية باستخدام المعايير التالية: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: أقل من 60 المتطلبات: 1. استخدم عبارة if-else لتحديد الدرجة الحرفية 2. استخدم العمليات المنطقية للتحقق مما إذا كان الطالب ناجحًا (الدرجة >= 60) وأيضًا لديه تفوق (الدرجة >= 90) 3. استخدم عبارة switch لتقديم ملاحظات محددة لكل درجة حرفية 4. استخدم المشغل الثلاثي لتحديد ما إذا كان الطالب مؤهلاً للدورة التالية (الدرجة >= 70) 5. قم بتضمين التحقق من صحة الإدخال للتأكد من أن الدرجة بين 0 و100 اختبر برنامجك باستخدام درجات مختلفة بما في ذلك الحالات الحدية مثل 59، 60، 89، 90، ومدخلات غير صالحة. تعرف على المزيد حول وضع الوكيل هنا. ## اختبار ما بعد المحاضرة اختبار ما بعد المحاضرة ## المراجعة والدراسة الذاتية اقرأ المزيد عن العديد من العمليات المتاحة للمستخدم على MDN. اطلع على دليل جوش كومو الرائع للبحث عن العمليات! ## الواجب العمليات --- ## 🧠 ملخص أدوات اتخاذ القرار الخاصة بك --- ## 🚀 جدول زمني لإتقان اتخاذ القرار باستخدام JavaScript ### ⚡ ما يمكنك القيام به في الدقائق الخمس القادمة - [ ] ممارسة عمليات المقارنة في وحدة التحكم بالمتصفح - [ ] كتابة عبارة if-else بسيطة للتحقق من عمرك - [ ] تجربة التحدي: إعادة كتابة عبارة if-else باستخدام المشغل الثلاثي - [ ] اختبار ما يحدث مع القيم "الحقيقية" و"الزائفة" المختلفة ### 🎯 ما يمكنك تحقيقه خلال هذه الساعة - [ ] إكمال اختبار ما بعد الدرس ومراجعة أي مفاهيم مربكة - [ ] بناء آلة حاسبة شاملة للدرجات من تحدي GitHub Copilot - [ ] إنشاء شجرة قرار بسيطة لسيناريو واقعي (مثل اختيار ما ترتديه) - [ ] ممارسة الجمع بين شروط متعددة باستخدام العمليات المنطقية - [ ] تجربة عبارات switch لحالات استخدام مختلفة ### 📅 إتقان المنطق خلال أسبوع - [ ] إكمال واجب العمليات بأمثلة إبداعية - [ ] بناء تطبيق اختبار صغير باستخدام هياكل شرطية متنوعة - [ ] إنشاء مدقق نموذج يتحقق من شروط إدخال متعددة - [ ] ممارسة تمارين دليل جوش كومو للبحث عن العمليات - [ ] تحسين الكود الحالي باستخدام هياكل شرطية أكثر ملاءمة - [ ] دراسة التقييم القصير الدائرة وتأثيراته على الأداء ### 🌟 تحولك خلال شهر - [ ] إتقان الشروط المتداخلة المعقدة والحفاظ على قابلية قراءة الكود - [ ] بناء تطبيق يحتوي على منطق اتخاذ قرار متقدم - [ ] المساهمة في المصادر المفتوحة من خلال تحسين المنطق الشرطي في المشاريع الحالية - [ ] تعليم شخص آخر حول الهياكل الشرطية المختلفة ومتى يتم استخدام كل منها - [ ] استكشاف نهج البرمجة الوظيفية للمنطق الشرطي - [ ] إنشاء دليل مرجعي شخصي لأفضل الممارسات الشرطية ### 🏆 تسجيل الوصول النهائي لبطل اتخاذ القرار احتفل بإتقانك للتفكير المنطقي: - ما هو أكثر منطق قرار معقد قمت بتنفيذه بنجاح؟ - أي هيكل شرطي يبدو طبيعيًا بالنسبة لك ولماذا؟ - كيف غيّر تعلم العمليات المنطقية نهجك لحل المشكلات؟ - ما هو التطبيق الواقعي الذي سيستفيد من منطق اتخاذ قرار متقدم؟ --- إخلاء المسؤولية: تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.

javascript

أساسيات JavaScript: المصفوفات والحلقات

## اختبار ما قبل المحاضرة اختبار ما قبل المحاضرة هل تساءلت يومًا كيف تحتفظ المواقع الإلكترونية بعناصر سلة التسوق أو تعرض قائمة أصدقائك؟ هنا تأتي المصفوفات والحلقات. المصفوفات تشبه الحاويات الرقمية التي تحتوي على معلومات متعددة، بينما تتيح لك الحلقات العمل مع كل تلك البيانات بكفاءة دون الحاجة إلى كتابة كود متكرر. معًا، يشكل هذان المفهومان الأساس لمعالجة المعلومات في برامجك. ستتعلم كيف تنتقل من كتابة كل خطوة يدويًا إلى إنشاء كود ذكي وفعال يمكنه معالجة مئات أو حتى آلاف العناصر بسرعة. بنهاية هذه الدرس، ستفهم كيفية إنجاز مهام البيانات المعقدة باستخدام بضعة أسطر فقط من الكود. دعونا نستكشف هذه المفاهيم البرمجية الأساسية. [](https://youtube.com/watch?v=1U4qTyq02Xw "المصفوفات") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "الحلقات") ## المصفوفات فكر في المصفوفات كخزانة ملفات رقمية - بدلاً من تخزين مستند واحد في كل درج، يمكنك تنظيم عناصر متعددة ذات صلة في حاوية واحدة منظمة. في مصطلحات البرمجة، تتيح لك المصفوفات تخزين معلومات متعددة في حزمة واحدة منظمة. سواء كنت تبني معرض صور، تدير قائمة مهام، أو تتابع أعلى النقاط في لعبة، توفر المصفوفات الأساس لتنظيم البيانات. دعونا نرى كيف تعمل. ✅ المصفوفات موجودة في كل مكان! هل يمكنك التفكير في مثال واقعي لمصفوفة، مثل مصفوفة ألواح شمسية؟ ### إنشاء المصفوفات إنشاء مصفوفة أمر بسيط للغاية - فقط استخدم الأقواس المربعة! ما الذي يحدث هنا؟ لقد أنشأت للتو حاوية فارغة باستخدام تلك الأقواس المربعة []. فكر فيها كرف مكتبة فارغ - إنه جاهز لحمل أي كتب تريد تنظيمها هناك. يمكنك أيضًا ملء المصفوفة بقيم أولية من البداية: أشياء رائعة يجب ملاحظتها: - يمكنك تخزين نصوص، أرقام، أو حتى قيم صحيحة/خاطئة في نفس المصفوفة - فقط افصل بين كل عنصر بفاصلة - بسيط! - المصفوفات مثالية للحفاظ على المعلومات ذات الصلة معًا ### فهرسة المصفوفات هناك شيء قد يبدو غير مألوف في البداية: المصفوفات ترقم عناصرها بدءًا من 0، وليس 1. هذا الفهرسة القائمة على الصفر لها جذورها في كيفية عمل ذاكرة الكمبيوتر - لقد كانت تقليدًا برمجيًا منذ الأيام الأولى للغات البرمجة مثل C. كل موقع في المصفوفة يحصل على رقم عنوان خاص به يسمى الفهرس. ✅ هل يفاجئك أن المصفوفات تبدأ بالفهرس صفر؟ في بعض لغات البرمجة، تبدأ الفهارس من 1. هناك تاريخ مثير للاهتمام حول هذا الموضوع يمكنك قراءته على ويكيبيديا. الوصول إلى عناصر المصفوفة: تفصيل ما يحدث هنا: - يستخدم تدوين الأقواس المربعة مع رقم الفهرس للوصول إلى العناصر - يعيد القيمة المخزنة في ذلك الموقع المحدد في المصفوفة - يبدأ العد من 0، مما يجعل العنصر الأول فهرسه 0 تعديل عناصر المصفوفة: في المثال أعلاه، قمنا بـ: - تعديل العنصر عند الفهرس 4 من "Rocky Road" إلى "Butter Pecan" - إضافة عنصر جديد "Cookie Dough" عند الفهرس 5 - توسيع طول المصفوفة تلقائيًا عند الإضافة خارج الحدود الحالية ### طول المصفوفة والطرق الشائعة تأتي المصفوفات بخصائص وطرق مدمجة تجعل العمل مع البيانات أسهل بكثير. إيجاد طول المصفوفة: نقاط رئيسية يجب تذكرها: - يعيد العدد الإجمالي للعناصر في المصفوفة - يتحدث تلقائيًا عند إضافة أو إزالة العناصر - يوفر عدًا ديناميكيًا مفيدًا للحلقات والتحقق طرق المصفوفة الأساسية: فهم هذه الطرق: - يضيف عناصر باستخدام push() (النهاية) وunshift() (البداية) - يزيل عناصر باستخدام pop() (النهاية) وshift() (البداية) - يحدد العناصر باستخدام indexOf() ويتحقق من وجودها باستخدام includes() - يعيد قيمًا مفيدة مثل العناصر المزالة أو مواقع الفهارس ✅ جرب بنفسك! استخدم وحدة التحكم في متصفحك لإنشاء وتعديل مصفوفة من إنشائك. ### 🧠 فحص أساسيات المصفوفة: تنظيم بياناتك اختبر فهمك للمصفوفات: - لماذا تعتقد أن المصفوفات تبدأ العد من 0 بدلاً من 1؟ - ماذا يحدث إذا حاولت الوصول إلى فهرس غير موجود (مثل arr[100] في مصفوفة تحتوي على 5 عناصر)؟ - هل يمكنك التفكير في ثلاثة سيناريوهات واقعية حيث تكون المصفوفات مفيدة؟ ## الحلقات فكر في العقوبة الشهيرة في روايات تشارلز ديكنز حيث كان الطلاب يكتبون الجمل مرارًا وتكرارًا على اللوح. تخيل لو كان بإمكانك ببساطة أن تطلب من شخص ما "اكتب هذه الجملة 100 مرة" ويتم ذلك تلقائيًا. هذا بالضبط ما تفعله الحلقات في الكود الخاص بك. الحلقات تشبه وجود مساعد لا يكل يمكنه تكرار المهام دون خطأ. سواء كنت بحاجة إلى التحقق من كل عنصر في سلة التسوق أو عرض جميع الصور في ألبوم، فإن الحلقات تتعامل مع التكرار بكفاءة. يوفر JavaScript عدة أنواع من الحلقات للاختيار من بينها. دعونا نلقي نظرة على كل نوع ونفهم متى نستخدمه. ### حلقة For حلقة for تشبه ضبط مؤقت - تعرف بالضبط عدد المرات التي تريد أن يحدث فيها شيء ما. إنها منظمة للغاية ويمكن التنبؤ بها، مما يجعلها مثالية عند العمل مع المصفوفات أو الحاجة إلى عد الأشياء. هيكل حلقة For: خطوة بخطوة، إليك ما يحدث: - تهيئة متغير العداد i إلى 0 في البداية - التحقق من الشرط i < 10 قبل كل تكرار - تنفيذ كتلة الكود عندما يكون الشرط صحيحًا - زيادة قيمة i بمقدار 1 بعد كل تكرار باستخدام i++ - التوقف عندما يصبح الشرط خاطئًا (عندما يصل i إلى 10) ✅ قم بتشغيل هذا الكود في وحدة التحكم في المتصفح. ماذا يحدث عندما تقوم بإجراء تغييرات صغيرة على العداد، الشرط، أو تعبير التكرار؟ هل يمكنك جعله يعمل بالعكس، مما ينشئ عد تنازلي؟ ### 🗓️ فحص إتقان حلقة For: التكرار المنضبط قيّم فهمك لحلقة for: - ما هي الأجزاء الثلاثة لحلقة for، وما وظيفة كل منها؟ - كيف يمكنك تكرار المصفوفة بالعكس؟ - ماذا يحدث إذا نسيت جزء الزيادة (i++)؟ ### حلقة While حلقة while تشبه قول "استمر في فعل هذا حتى..." - قد لا تعرف بالضبط عدد المرات التي ستعمل فيها، لكنك تعرف متى تتوقف. إنها مثالية لأشياء مثل طلب إدخال المستخدم حتى يعطيك ما تحتاجه، أو البحث في البيانات حتى تجد ما تبحث عنه. خصائص حلقة While: - تستمر في التنفيذ طالما أن الشرط صحيح - تتطلب إدارة يدوية لأي متغيرات عداد - تتحقق من الشرط قبل كل تكرار - تخاطر بالحلقات اللانهائية إذا لم يصبح الشرط خاطئًا أبدًا فهم هذه الأمثلة: - تدير متغير العداد i يدويًا داخل جسم الحلقة - تزيد العداد لمنع الحلقات اللانهائية - توضح حالة استخدام عملية مع إدخال المستخدم وتحديد المحاولات - تتضمن آليات أمان لمنع التنفيذ اللامتناهي ### ♾️ فحص حكمة حلقة While: التكرار القائم على الشرط اختبر فهمك لحلقات while: - ما هو الخطر الرئيسي عند استخدام حلقات while؟ - متى تختار حلقة while بدلاً من حلقة for؟ - كيف يمكنك منع الحلقات اللانهائية؟ ### بدائل الحلقات الحديثة يوفر JavaScript صياغة حلقات حديثة يمكن أن تجعل الكود الخاص بك أكثر وضوحًا وأقل عرضة للأخطاء. حلقة For...of (ES6+): المزايا الرئيسية لحلقة for...of: - تلغي إدارة الفهرس وأخطاء الفهرسة - توفر الوصول المباشر لعناصر المصفوفة - تحسن وضوح الكود وتقلل من تعقيد الصياغة طريقة forEach: ما تحتاج إلى معرفته عن forEach: - تنفذ وظيفة لكل عنصر في المصفوفة - توفر قيمة العنصر والفهرس كمعلمات - لا يمكن إيقافها مبكرًا (على عكس الحلقات التقليدية) - تعيد undefined (لا تنشئ مصفوفة جديدة) ✅ لماذا تختار حلقة for مقابل حلقة while؟ 17 ألف مشاهد كان لديهم نفس السؤال على StackOverflow، وبعض الآراء قد تكون مثيرة للاهتمام بالنسبة لك. ### 🎨 فحص صياغة الحلقات الحديثة: تبني ES6+ قيّم فهمك للبرمجة الحديثة في JavaScript: - ما هي مزايا for...of مقارنة بالحلقات التقليدية؟ - متى قد تفضل الحلقات التقليدية؟ - ما الفرق بين forEach وmap؟ ## الحلقات والمصفوفات دمج المصفوفات مع الحلقات يخلق قدرات قوية لمعالجة البيانات. هذا الاقتران أساسي للعديد من مهام البرمجة، من عرض القوائم إلى حساب الإحصائيات. معالجة المصفوفات التقليدية: دعونا نفهم كل نهج: - يستخدم خاصية طول المصفوفة لتحديد حدود الحلقة - يصل إلى العناصر بواسطة الفهرس في الحلقات التقليدية - يوفر الوصول المباشر للعناصر في الحلقات من نوع for...of - يعالج كل عنصر في المصفوفة مرة واحدة بالضبط مثال عملي لمعالجة البيانات: إليك كيف يعمل هذا الكود: - يهيئ متغيرات التتبع للمجموع والقيم القصوى والدنيا - يعالج كل درجة باستخدام حلقة واحدة فعالة - يجمع الإجمالي لحساب المتوسط - يتتبع أعلى وأدنى القيم أثناء التكرار - يحسب الإحصائيات النهائية بعد انتهاء الحلقة ✅ جرب التكرار على مصفوفة من إنشائك في وحدة التحكم في المتصفح. --- ## تحدي GitHub Copilot Agent 🚀 استخدم وضع Agent لإكمال التحدي التالي: الوصف: قم ببناء وظيفة شاملة لمعالجة البيانات تجمع بين المصفوفات والحلقات لتحليل مجموعة بيانات وتوليد رؤى مفيدة. المهمة: قم بإنشاء وظيفة تسمى analyzeGrades تأخذ مصفوفة من كائنات درجات الطلاب (كل منها يحتوي على خصائص الاسم والدرجة) وتعيد كائنًا يحتوي على إحصائيات تشمل أعلى درجة، أدنى درجة، متوسط الدرجة، عدد الطلاب الذين اجتازوا (درجة >= 70)، ومصفوفة بأسماء الطلاب الذين حصلوا على درجات أعلى من المتوسط. استخدم على الأقل نوعين مختلفين من الحلقات في الحل. تعرف على المزيد حول وضع Agent هنا. ## 🚀 التحدي تقدم JavaScript العديد من الطرق الحديثة للتعامل مع المصفوفات التي يمكن أن تحل محل الحلقات التقليدية لأداء مهام محددة. استكشف forEach، for-of، map، filter، و reduce. تحديك: قم بإعادة كتابة مثال درجات الطلاب باستخدام ثلاثة طرق مختلفة على الأقل من طرق المصفوفات. لاحظ كيف يصبح الكود أكثر وضوحًا وسهولة في القراءة باستخدام صياغة JavaScript الحديثة. ## اختبار ما بعد المحاضرة اختبار ما بعد المحاضرة ## المراجعة والدراسة الذاتية تحتوي المصفوفات في JavaScript على العديد من الطرق المفيدة جدًا لمعالجة البيانات. اقرأ عن هذه الطرق وجرب بعضها (مثل push، pop، slice و splice) على مصفوفة من إنشائك. ## الواجب حلقة على مصفوفة --- ## 📊 ملخص أدواتك للمصفوفات والحلقات --- ## 🚀 جدولك الزمني لإتقان المصفوفات والحلقات ### ⚡ ما يمكنك القيام به في الدقائق الخمس القادمة - [ ] أنشئ مصفوفة لأفلامك المفضلة وقم بالوصول إلى عناصر محددة - [ ] اكتب حلقة for تعد من 1 إلى 10 - [ ] جرب تحدي الطرق الحديثة للمصفوفات من الدرس - [ ] تدرب على فهرسة المصفوفات في وحدة التحكم بالمتصفح ### 🎯 ما يمكنك إنجازه خلال هذه الساعة - [ ] أكمل اختبار ما بعد الدرس وراجع أي مفاهيم صعبة - [ ] قم ببناء محلل شامل للدرجات من تحدي GitHub Copilot - [ ] أنشئ عربة تسوق بسيطة تضيف وتزيل العناصر - [ ] تدرب على التحويل بين أنواع الحلقات المختلفة - [ ] جرب طرق المصفوفات مثل push، pop، slice، و splice ### 📅 رحلة معالجة البيانات لمدة أسبوع - [ ] أكمل واجب "حلقة على مصفوفة" مع تحسينات إبداعية - [ ] قم ببناء تطبيق قائمة مهام باستخدام المصفوفات والحلقات - [ ] أنشئ آلة حاسبة بسيطة للإحصائيات للبيانات الرقمية - [ ] تدرب باستخدام طرق المصفوفات في MDN - [ ] قم ببناء واجهة معرض صور أو قائمة تشغيل موسيقية - [ ] استكشف البرمجة الوظيفية باستخدام map، filter، و reduce ### 🌟 تحولك خلال شهر - [ ] إتقان العمليات المتقدمة على المصفوفات وتحسين الأداء - [ ] قم ببناء لوحة تحكم كاملة لتصور البيانات - [ ] ساهم في مشاريع مفتوحة المصدر تتعلق بمعالجة البيانات - [ ] علم شخصًا آخر عن المصفوفات والحلقات باستخدام أمثلة عملية - [ ] أنشئ مكتبة شخصية لوظائف معالجة البيانات القابلة لإعادة الاستخدام - [ ] استكشف الخوارزميات وهياكل البيانات المبنية على المصفوفات ### 🏆 تسجيل الوصول النهائي لبطل معالجة البيانات احتفل بإتقانك للمصفوفات والحلقات: - ما هي العملية الأكثر فائدة على المصفوفات التي تعلمتها للتطبيقات الواقعية؟ - أي نوع من الحلقات يبدو أكثر طبيعية بالنسبة لك ولماذا؟ - كيف غير فهمك للمصفوفات والحلقات نهجك في تنظيم البيانات؟ - ما هي مهمة معالجة البيانات المعقدة التي ترغب في التعامل معها بعد ذلك؟ --- إخلاء المسؤولية: تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.

javascript

Въведение в JavaScript

JavaScript е езикът на уеба. В тези четири урока ще научите основите му. ### Теми 1. Променливи и типове данни 2. Функции и методи 3. Вземане на решения с JavaScript 4. Масиви и цикли ### Автори Тези уроци са написани с ♥️ от Jasmine Greenaway, Christopher Harrison и Chris Noring --- Отказ от отговорност: Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.

javascript

Основи на JavaScript: Типове данни

Типовете данни са една от фундаменталните концепции в JavaScript, с които ще се срещнете във всеки писан от вас програмен код. Представете си типовете данни като система за подреждане, използвана от древните библиотекари в Александрия – те имаха определени места за свитъци с поезия, математика и исторически записи. JavaScript организира информацията по подобен начин с различни категории за различни видове данни. В този урок ще разгледаме основните типове данни, които карат JavaScript да работи. Ще научите как да работите с числа, текст, булеви стойности истинно/невярно и да разберете защо изборът на правилния тип е съществен за вашите програми. Тези концепции може да изглеждат абстрактни в началото, но с практиката ще станат втора природа. Разбирането на типовете данни ще направи всичко останало в JavaScript много по-ясно. Точно както архитектите трябва да познават различните строителни материали преди да издигнат катедрала, основните понятия тук ще подкрепят всичко, което изграждате занапред. ## Предварителен тест преди лекцията Предварителен тест Този урок обхваща основите на JavaScript, езикът, който осигурява интерактивност в уеб. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Нека започнем с променливите и типове данни, които ги пълнят! ## Променливи Променливите са основни градивни блокове в програмирането. Като надписаните буркани, които средновековните алхимици използваха за съхранение на различни субстанции, променливите ви позволяват да съхранявате информация и да ѝ дадете описателно име, за да може да я позовавате по-късно. Трябва ли да запомните нечия възраст? Съхранете я в променлива на име age. Искате ли да следите името на потребител? Запазете го в променлива с име userName. Ще се фокусираме върху съвременния подход за създаване на променливи в JavaScript. Техниките, които ще научите тук, представляват години еволюция на езика и най-добри практики, разработени от програмистката общност. Създаването и декларирането на променлива има следния синтаксис [ключова дума] [име]. То се състои от две части: - Ключова дума. Използвайте let за променливи, които могат да се променят, или const за стойности, които остават постоянни. - Името на променливата, това е описателно име, което избирате сами. ✅ Ключовата дума let беше въведена в ES6 и дава на вашата променлива така наречената _блокова обхватност_. Препоръчително е да използвате let или const вместо по-старата ключова дума var. Ще разгледаме блоковите обхвати по-подробно в бъдещи части. ### Задача - работа с променливи 1. Декларирайте променлива. Нека започнем с създаването на първата ни променлива: ```javascript let myVariable; ``` Какво се постига с това: - Казва на JavaScript да създаде място за съхранение с име myVariable - JavaScript заделя пространство в паметта за тази променлива - Променливата в момента няма стойност (undefined) 2. Дайте ѝ стойност. Сега нека сложим нещо в нашата променлива: ```javascript myVariable = 123; ``` Как работи задаването: - Операторът = приравнява стойността 123 към нашата променлива - Първоначалната undefined стойност се заменя с тази числова стойност - Можете да използвате тази стойност в кода си чрез myVariable > Забележка: използването на = в този урок означава, че ползваме "оператор за присвояване", който задава стойност на променлива. Не означава равенство. 3. Правете го по умен начин. Всъщност, нека комбинираме тези две стъпки: ```javascript let myVariable = 123; ``` Този подход е по-ефективен: - Декларирате променливата и ѝ задавате стойност в едно изречение - Това е стандартна практика сред разработчиците - Намалява дължината на кода, като същевременно запазва яснота 4. Променете решението си. Ами ако искаме да съхраним друго число? ```javascript myVariable = 321; ``` Разбиране на повторното задаване: - Променливата вече съдържа 321 вместо 123 - Предишната стойност се заменя – променливите съхраняват само една стойност в даден момент - Тази изменяемост е ключова характеристика на променливите, декларирани с let ✅ Опитайте сами! Можете да пишете JavaScript директно в браузъра си. Отворете прозорец на браузъра и отидете в Инструментите за разработчици. В конзолата ще намерите ред за въвеждане; напишете let myVariable = 123, натиснете Enter, след това напишете myVariable. Какво се случва? Ще научите повече за тези понятия в следващите уроци. ### 🧠 Проверка на овладяване на променливите: Да свикнем с тях Нека видим как се справяте с променливите: - Можете ли да обясните разликата между деклариране и задаване на променлива? - Какво се случва, ако опитате да използвате променлива преди да я декларирате? - Кога бихте избрали let пред const за променлива? ## Константи Понякога е нужно да съхранявате информация, която никога не трябва да се променя по време на изпълнението на програмата. Помислете за константите като за математическите принципи, които Евклид установил в древна Гърция – веднъж доказани и документирани, те останали неизменни за всички следващи препратки. Константите работят подобно на променливите, но с важно ограничение: след като им зададете стойност, тя не може да бъде променяна. Тази неизменяемост помага да се предотвратят случайни промени на критични стойности в програмата ви. Декларирането и инициализацията на константа следва същите концепции като при променлива, с изключение на ключовата дума const. Обикновено константите се декларират с главни букви. Ето какво прави този код: - Създава константа на име MY_VARIABLE със стойност 123 - Използва конвенцията за име с главни букви при константи - Предотвратява бъдещи промени на тази стойност Константите имат два основни правила: - Трябва веднага да им зададете стойност – не се позволяват празни константи! - Никога не можете да променяте тази стойност – JavaScript ще генерира грешка, ако опитате. Нека видим какво имам предвид: Проста стойност - Следното НЕ Е позволено: ```javascript const PI = 3; PI = 4; // не е позволено ``` Какво трябва да запомните: - Опитите за присвояване на нова стойност на константа ще доведат до грешка - Защитава важни стойности от случайни изменения - Гарантира, че стойността остава постоянна през цялата програма Защитена е референцията към обекта - Следното НЕ Е позволено: ```javascript const obj = { a: 3 }; obj = { b: 5 } // не е позволено ``` Разбиране на тези концепции: - Предотвратява пълната замяна на обекта с нов - Защитава референцията към оригиналния обект - Поддържа идентичността на обекта в паметта Стойността на обекта не е защитена - Следното Е позволено: ```javascript const obj = { a: 3 }; obj.a = 5; // позволено ``` Обяснение какво става тук: - Променя стойността на свойството в обекта - Запазва същата референция към обекта - Показва, че съдържанието на обекта може да се променя, докато референцията остава постоянна > Забележка: const означава, че референцията е защитена от повторно присвояване. Стойността на обекта обаче не е _непроменяема_ и може да се променя, особено ако е сложна структура като обект. ## Типове данни JavaScript организира информацията в различни категории, наречени типове данни. Тази концепция отразява начина, по който древните учени категоризирали знанието – Аристотел разграничавал различни видове разсъждения, знаейки, че логическите принципи не могат да се прилагат еднакво към поезия, математика и естествена философия. Типовете данни са важни, защото различни операции работят с различни видове информация. Също както не може да извършвате аритметични операции над името на човек или да подреждате математическо уравнение по азбучен ред, JavaScript изисква подходящ тип данни за всяка операция. Разбирането на това предотвратява грешки и прави кода ви по-надежден. Променливите могат да съхраняват много различни типове стойности, като числа и текст. Тези различни видове стойности се наричат тип данни. Типовете данни са важна част от разработката на софтуер, защото помагат на разработчиците да вземат решения как кодът трябва да бъде написан и как трябва да се изпълнява софтуерът. Освен това някои типове данни имат уникални възможности, които помагат да се трансформира или извлече допълнителна информация от дадена стойност. ✅ Типовете данни понякога се наричат примитиви на JavaScript, тъй като са най-ниско ниво типове данни, предоставени от езика. Има 7 примитивни типа данни: string, number, bigint, boolean, undefined, null и symbol. Отделете минута да визуализирате какво може да представлява всеки от тези примитиви. Какво е зебра? А 0? true? ### Числа Числата са най-простият тип данни в JavaScript. Независимо дали работите със цели числа като 42, десетични като 3.14, или отрицателни числа като -5, JavaScript ги обработва по един и същи начин. Помните ли променливата ни от по-рано? Онзи 123, който съхранихме, всъщност беше тип число: Ключови характеристики: - JavaScript автоматично разпознава числови стойности - Можете да извършвате математически операции с тези променливи - Не е необходима експлицитна декларация на типа Променливите могат да съхраняват всякакви числа, включително десетични или отрицателни. Числата могат да се ползват и с аритметични оператори, разгледани в следващия раздел. ### Аритметични оператори Аритметичните оператори ви позволяват да извършвате математически изчисления в JavaScript. Тези оператори следват същите принципи, които математиците използват от векове – същите символи, които се появяват в трудовете на учени като Ал-Хорезми, създател на алгебричната нотация. Операторите работят както е в традиционната математика: плюс за събиране, минус за изваждане и така нататък. Има няколко типа оператори за използване при аритметични операции и някои от тях са изброени тук: ✅ Опитайте! Направете аритметична операция в конзолата на браузъра си. Резултатите изненадват ли ви? ### 🧮 Проверка на математическите умения: Изчисляване с увереност Проверете разбирането си за аритметика: - Каква е разликата между / (деление) и % (остатък)? - Можете ли да предскажете резултата от 10 % 3? (Подсказка: не е 3.33...) - Защо операторът за остатък може да е полезен при програмиране? ### Низове В JavaScript текстовите данни се представят чрез низове. Терминът "низа" произлиза от концепцията за поредица от символи, съединени заедно, подобно на начина, по който писарите в средновековните манастири свързвали букви в думи и изречения в техните ръкописи. Низовете са основополагащи за уеб разработката. Всеки текст, показван на уебсайт – потребителски имена, надписи на бутони, съобщения за грешки, съдържание – се обработва като низ. Разбирането на низовете е ключово за създаване на функционални потребителски интерфейси. Низовете са поредици от символи, намиращи се между единични или двойни кавички. Разбиране на тези понятия: - Използва или единични кавички ', или двойни кавички " за дефиниране на низове - Съхранява текстови данни, които могат да включват букви, числа и символи - Присвоява стрингови стойности на променливи за по-късна употреба - Изисква кавички, за да се разграничат текстовите стойности от имена на променливи Не забравяйте да използвате кавички при писане на низ, в противен случай JavaScript ще приеме, че става дума за име на променлива. ### Форматиране на низове Манипулирането на низове ви позволява да съединявате текстови елементи, да включвате променливи и да създавате динамично съдържание, което реагира на състоянието на програмата. Тази техника ви позволява да конструирате текст програмно. Често трябва да събирате няколко низове заедно – този процес се нарича конкатенация. За да обедините два или повече низа, или да ги свържете заедно, използвайте оператора +. Стъпка по стъпка, ето какво се случва: - Обединява няколко низа, използвайки оператора + - Свързва низовете директно без интервали в първия пример - Добавя интервали " " между низовете за по-добра четимост - Вмъква пунктуация като запетаи за правилно форматиране ✅ Защо в JavaScript 1 + 1 = 2, но '1' + '1' = 11? Помислете. А какво ще кажете за '1' + 1? Тemplate literals (шаблонни литерали) са друг начин да форматирате низове, но вместо кавички се използва обратен апостроф. Всичко, което не е обикновен текст, трябва да бъде поставено в плейсхолдъри ${ }. Това включва и променливи, които могат да са низове. Да разберем всяка част: - Използва обратни апострофи ` `` вместо обикновени кавички за създаване на шаблонни литерали - Вгражда променливи директно чрез синтаксиса на плейсхолдъра ${} - Запазва интервалите и форматирането точно както са написани - Предоставя по-чист начин за създаване на сложни низове с променливи Можете да постигнете желания ефект с всеки от двата метода, но шаблонните литерали ще уважават всички интервали и прекъсвания на редове. ✅ Кога бихте използвали шаблонен литерал вместо обикновен низ? ### 🔤 Проверка на уменията за низове: Увереност при манипулиране на текст Оценете уменията си с низове: - Можете ли да обясните защо '1' + '1' е равно на '11', а не на 2? - Кой метод за низове ви се струва по-четим: конкатенация или шаблонни литерали? - Какво се случва, ако забравите кавичките около низ? ### Булеви стойности Булевите стойности представляват най-простата форма на данни: те могат да имат само една от две стойности – true или false. Тази двоична логика води началото си от работата на Джордж Бул, математик от 19 век, който разработва булева алгебра. Въпреки своята простота, булевите стойности са основни за логиката в програмирането. Те позволяват на вашия код да взема решения въз основа на условия – например дали един потребител е влязъл в системата, дали е кликнат бутон или дали определени критерии са изпълнени. Булевите стойности могат да са само две: true или false. Те помагат за вземането на решения кои редове код да се изпълнят при изпълнение на определени условия. В много случаи операторите помагат при задаване на стойността на булева променлива и често ще видите и пишете променливи, които се инициализират или техните стойности се обновяват с оператор. В горния пример сме: - Създали променлива, която съхранява булевата стойност true - Показали как се съхранява булевата стойност false - Използвали точните ключови думи true и false (не са нужни кавички) - Подготвили тези променливи за използване в условни изрази ✅ Променлива може да се счита за „истинна“ (truthy), ако се оценява като булево true. Интересно е, че в JavaScript всички стойности са truthy, освен ако не са дефинирани като falsy. ### 🎯 Проверка на булевата логика: Умения за вземане на решения Тествайте разбирането си за булеви стойности: - Защо според вас JavaScript има „истински“ (truthy) и „невярни“ (falsy) стойности освен само true и false? - Можете ли да предвидите кое от следните е falsy: 0, "0", [], "false"? - Как булевите стойности могат да бъдат полезни при контролирането на изпълнението на програмата? --- ## 📊 Обобщение на вашия комплект от типове данни ## Предизвикателство с GitHub Copilot Agent 🚀 Използвайте режим Agent, за да изпълните следното предизвикателство: Описание: Създайте мениджър за лична информация, който демонстрира всички типове данни в JavaScript, които сте научили в този урок, докато обработва реални ситуации с данни. Задача: Напишете JavaScript програма, която създава обект с потребителски профил, съдържащ: име на човек (низ), възраст (число), статус на студент (булева стойност), любими цветове като масив и обект адрес с улица, град и пощенски код. Включете функции за показване на профилната информация и актуализиране на отделни полета. Демонстрирайте конкатенация на низове, шаблонни литерали, аритметични операции с възрастта и булева логика за статуса на студент. Научете повече за режим agent тук. ## 🚀 Предизвикателство JavaScript има някои поведения, които могат да изненадат разработчиците. Ето класически пример за изследване: опитайте да напишете в конзолата на браузъра си: let age = 1; let Age = 2; age == Age и наблюдавайте резултата. Връща false – можете ли да разберете защо? Това представлява едно от множеството поведения на JavaScript, които си струва да се разбират. Познаването на тези особености ще ви помогне да пишете по-надежден код и по-ефективно да отстранявате грешки. ## Тест след лекцията Тест след лекцията ## Преглед и самостоятелно обучение Вижте този списък с JavaScript упражнения и опитайте някое. Какво научихте? ## Задача Практика с типове данни ## 🚀 Вашата времева линия за усвояване на JavaScript типове данни ### ⚡ Какво можете да направите през следващите 5 минути - [ ] Отворете конзолата на браузъра и създайте 3 променливи с различни типове данни - [ ] Опитайте предизвикателството: let age = 1; let Age = 2; age == Age и разберете защо е false - [ ] Практикувайте конкатенация на низове с вашето име и любимо число - [ ] Тествайте какво се случва, когато добавите число към низ ### 🎯 Какво можете да постигнете този час - [ ] Попълнете теста след урока и прегледайте объркващи концепции - [ ] Създайте мини калкулатор, който събира, изважда, умножава и дели две числа - [ ] Направете прост форматиращ низ с помощта на шаблонни литерали - [ ] Изследвайте разликите между операторите == и === - [ ] Практикувайте преобразуване между различните типове данни ### 📅 Вашата седмична основа в JavaScript - [ ] Изпълнете задачата с увереност и креативност - [ ] Създайте личен профилен обект, използвайки всички научени типове данни - [ ] Практикувайте с JavaScript упражнения от CSS-Tricks - [ ] Изградете прост валидатор на формуляри с булева логика - [ ] Експериментирайте с масиви и обекти (преглед на предстоящи уроци) - [ ] Присъединете се към JavaScript общност и задавайте въпроси за типовете данни ### 🌟 Вашата месечна трансформация - [ ] Интегрирайте знанията за типове данни в по-големи програми - [ ] Разберете кога и защо да използвате всеки тип данни в реални приложения - [ ] Помогнете на други начинаещи да разберат основите на JavaScript - [ ] Създайте малко приложение за управление на различни типове потребителски данни - [ ] Изследвайте разширени концепции за типове данни като преобразуване на типове и строго равенство - [ ] Допринасяйте за open source JavaScript проекти с подобрения в документацията ### 🧠 Последна проверка на уменията с типове данни Празнувайте основите си в JavaScript: - Кой тип данни ви изненада най-много с поведението си? - Колко удобно се чувствате да обяснявате променливи и константи на приятел? - Кое е най-интересното нещо, което открихте за системата от типове на JavaScript? - Какво реално приложение си представяте да създадете с тези основи? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стараем за точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за никакви недоразумения или неправилни тълкувания, произтичащи от използването на този превод. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Основи на JavaScript: Методи и функции

## Предварителен тест преди лекцията Предварителен тест преди лекцията Повтарящото се писане на един и същ код е една от най-честите фрустрации в програмирането. Функциите решават този проблем, като ви позволяват да пакетирате код в многократно използваеми блокове. Мислете за функциите като за стандартни части, които направиха производствената линия на Хенри Форд революционна – след като създадете надежден компонент, можете да го използвате навсякъде, без да го изграждате отново от нулата. Функциите позволяват да свържете части от код, така че да ги използвате многократно в цялата си програма. Вместо да копирате и поставяте една и съща логика навсякъде, можете да създадете функция веднъж и да я извиквате, когато е необходимо. Този подход запазва кода ви организиран и прави актуализациите много по-лесни. В този урок ще научите как да създавате свои собствени функции, да им подавате информация и да получавате полезни резултати обратно. Ще откриете разликата между функции и методи, ще научите модерни синтактични подходи и ще видите как функциите могат да работят с други функции. Ще изграждаме тези концепции стъпка по стъпка. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Методи и функции") ## Функции Функцията е самостоятелен блок код, който изпълнява конкретна задача. Тя капсулира логика, която можете да изпълнявате, когато е необходимо. Вместо да пишете един и същ код многократно в цялата си програма, можете да го опаковате във функция и да извиквате тази функция винаги, когато ви трябва. Този подход държи кода ви чист и прави актуализациите много по-лесни. Помислете за предизвикателството при поддръжка, ако трябва да промените логика, разпръсната в 20 различни места във вашия код. Важно е да именувате функциите си описателно. Добре именувана функция ясно комуникира целта си – когато видите cancelTimer(), веднага разбирате какво прави, точно както бутон с ясна етикет казва точно какво ще се случи, когато го натиснете. ## Създаване и извикване на функция Да разгледаме как се създава функция. Синтаксисът следва постоянен модел: Нека го разчупим: - Ключовата дума function казва на JavaScript "Хей, създавам функция!" - nameOfFunction е мястото, където давате описателно име на функцията си - Круглите скоби () са където можете да добавите параметри (скоро ще ги разгледаме) - Фигурните скоби {} съдържат реалния код, който се изпълнява, когато извикате функцията Нека създадем проста функция за поздрав, за да видим това в действие: Тази функция отпечатва "Hello, world!" в конзолата. След като я дефинирате, можете да я използвате колкото пъти ви трябва. За да изпълните (или "извикате") функцията си, напишете нейното име, последвано от скоби. JavaScript ви позволява да дефинирате функцията си преди или след като я извикате – двигателят на JavaScript ще се погрижи за реда на изпълнение. Когато изпълните този ред, се изпълнява целият код вътре във вашата функция displayGreeting, който показва "Hello, world!" в конзолата на браузъра ви. Можете да извиквате тази функция многократно. ### 🧠 Проверка на основите на функциите: Създаване на първите ви функции Да видим как се справяте с основните функции: - Можете ли да обясните защо използваме фигурните скоби {} при дефиниция на функции? - Какво се случва, ако напишете displayGreeting без скобите? - Защо бихте искали да извиквате една и съща функция няколко пъти? ### Най-добри практики за функции Ето няколко съвета, за да напишете страхотни функции: - Давайте на функциите си ясни и описателни имена – бъдещото ви “аз” ще ви благодари! - Използвайте camelCase за многословни имена (като calculateTotal вместо calculate_total) - Поддържайте всяка функция фокусирана върху изпълнението на една задача добре ## Подаване на информация във функция Нашата функция displayGreeting е ограничена – тя може да покаже само "Hello, world!" на всички. Параметрите ни позволяват да направим функциите по-гъвкави и полезни. Параметрите действат като заместители, където можете да вмъквате различни стойности всеки път, когато използвате функцията. По този начин една и съща функция може да работи с различна информация при всяко извикване. Параметрите се изписват в скобите при дефиниране на функцията, като при многократно използване се разделят със запетаи: Всеки параметър действа като заместител – когато някой извика функцията ви, той ще подаде реални стойности, които се поставят на тези места. Нека ъпдейтнем нашата функция за поздрав, за да приема името на някого: Забележете как използваме обратни кавички (` `) и ${}` да вмъкнем името директно в съобщението – това се нарича template literal и е много удобен начин да се създават низове с променливи вътре. Сега, когато извикаме функцията, можем да подадем произволно име: JavaScript приема низа 'Christopher', присвоява го на параметъра name и създава персонализираното съобщение "Hello, Christopher!" ## Стойности по подразбиране Какво, ако искаме някои параметри да са по избор? Тогава идват на помощ стойностите по подразбиране! Да кажем, че искаме хората да могат да персонализират думата на поздрав, но ако не посочат такава, ще използваме "Hello" като резервна стойност. Можете да зададете стойности по подразбиране, като използвате знака за равенство, както при задаване на променлива: Тук name все още е задължителен, но salutation има резервна стойност 'Hello', ако никой не подаде друга стойност за поздрав. Сега можем да извикаме функцията по два начина: При първото извикване JavaScript използва "Hello" по подразбиране, тъй като не сме посочили поздрав. При второто ползваме нашия персонализиран "Hi". Тази гъвкавост прави функциите адаптивни към различни сценарии. ### 🎛️ Проверка на параметрите: Правене на функции гъвкави Изпробвайте знанията си за параметрите: - Каква е разликата между параметър и аргумент? - Защо стойностите по подразбиране са полезни в реалното програмиране? - Можете ли да предположите какво става, ако подадете повече аргументи, отколкото параметри? ## Връщане на стойности До момента функциите ни само отпечатват съобщения в конзолата, но какво, ако искате функция да изчисли нещо и да ви върне резултат? Тук идват върнатите стойности. Вместо просто да показва нещо, функцията може да ви върне стойност, която можете да съхраните в променлива или да използвате в други части от кода. За да върнете стойност, използвате ключовата дума return, последвана от това, което искате да върнете: Важно: когато функция достигне return, тя веднага спира изпълнението си и връща тази стойност на този, който я е извикал. Нека променим функцията за поздрав така, че да връща съобщението, вместо да го отпечатва: Сега вместо да отпечатва поздрав, функцията създава съобщение и ни го връща. За да използваме върнатата стойност, можем да я съхраним в променлива, както всяка друга стойност: Сега greetingMessage съдържа "Hello, Christopher" и можем да я използваме навсякъде в кода – за показване на уебстраница, включване в имейл или предаване на друга функция. ### 🔄 Проверка на върнатите стойности: Получаване на резултати Проверете познанията си за върнатите стойности: - Какво се случва с кода след един return в функция? - Защо връщането на стойности е често по-добро от просто отпечатване в конзолата? - Може ли функция да върне различни типове стойности (низ, число, логическо)? ## Функции като параметри за функции Функциите могат да бъдат подавани като параметри към други функции. Въпреки че тази идея може да изглежда сложна в началото, тя е силно полезна функция за постигане на гъвкави модели на програмиране. Този модел е много разпространен, когато искате да кажете "когато се случи нещо, направи това". Например "когато таймерът свърши, изпълни този код" или "когато потребителят кликне бутон, извикай тази функция". Нека разгледаме setTimeout, която е вградена функция, която чака определено време и след това изпълнява някакъв код. Трябва да ѝ кажем какъв код да изпълни – перфектен случай за подаване на функция! Опитайте този код – след 3 секунди ще видите съобщение: Забележете как подаваме displayDone (без скоби) на setTimeout. Ние не извикваме функцията сами – подаваме я на setTimeout и казваме "извикай това след 3 секунди". ### Анонимни функции Понякога имате нужда от функция за единствена цел и не искате да ѝ давате име. Помислете – ако използвате функция само веднъж, защо да замърсявате кода с допълнително име? JavaScript ви позволява да създавате анонимни функции – функции без имена, които можете да дефинирате точно там, където са ви нужни. Ето как можем да пренапишем нашия пример с таймера, използвайки анонимна функция: Това постига същия резултат, но функцията е дефинирана директно вътре в повикването на setTimeout, без нужда от отделна декларация. ### Стрелкови функции Съвременният JavaScript има още по-кратък начин за писане на функции, наречен стрелкови функции. Те използват => (което изглежда като стрела – разбирате ли?) и са много популярни сред разработчиците. Стрелковите функции ви позволяват да пропуснете ключовата дума function и да пишете по-кратък код. Ето нашия пример с таймера, използвайки стрелкова функция: () е мястото, където биха отишли параметрите (празно в този случай), следва стрелката => и накрая тялото на функцията във фигурни скоби. Това дава същата функционалност с по-сбит синтаксис. ### Кога да използвате всеки подход Кога да изберете всеки метод? Практично ръководство: ако ще използвате функцията многократно, дайте ѝ име и я дефинирайте отделно. Ако е за една конкретна употреба, помислете за анонимна функция. И двата начина – стрелковият синтаксис и традиционният – са валидни, макар че стрелковите функции са по-разпространени в съвременни кодови бази. ### 🎨 Проверка на стила на функции: Избор на подходящия синтаксис Проверете разбирането си за синтаксиса: - Кога бихте предпочели стрелкови функции пред традиционния синтаксис? - Какво е основното предимство на анонимните функции? - Можете ли да измислите ситуация, в която именуваната функция е по-добра от анонимна? --- ## 🚀 Предизвикателство Можете ли да формулирате с едно изречение разликата между функции и методи? Опитайте! ## Challenge с GitHub Copilot Agent 🚀 Използвайте режим Agent, за да изпълните следното предизвикателство: Описание: Създайте библиотека с математически функции, която демонстрира различните концепции за функции, разгледани в този урок, включително параметри, стойности по подразбиране, върнати стойности и стрелкови функции. Подсказка: Създайте JavaScript файл с име mathUtils.js, който съдържа следните функции: 1. Функция add, която приема два параметъра и връща тяхната сума 2. Функция multiply със стойности по подразбиране за параметрите (вторият параметър по подразбиране е 1) 3. Стрелкова функция square, която приема число и връща квадрата му 4. Функция calculate, която приема друга функция като параметър и две числа, след което прилага функцията върху тези числа 5. Демонстриране на извиквания на всяка функция с подходящи тестови случаи Научете повече за agent mode тук. ## Тест след лекцията Тест след лекцията ## Преглед и самоподготовка Струва си да прочетете малко повече за стрелковите функции, тъй като те все по-често се използват в кодовите бази. Практикувайте да пишете функция, а после да я пренапишете със синтаксиса на стрелковите функции. ## Задача Забавление с функции --- ## 🧰 Обобщение на Вашия инструментариум за JavaScript функции --- ## 🚀 Вашата времева линия за усвояване на JavaScript функции ### ⚡ Какво можете да направите в следващите 5 минути - [ ] Напишете проста функция, която връща любимото ви число - [ ] Създайте функция с два параметъра, която ги добавя заедно - [ ] Опитайте да конвертирате традиционна функция в синтаксис на стрелкова функция - [ ] Практикувайте предизвикателството: обяснете разликата между функции и методи ### 🎯 Какво можете да постигнете този час - [ ] Попълнете теста след урока и прегледайте объркващите концепции - [ ] Изградете библиотека с математически утилити от предизвикателството на GitHub Copilot - [ ] Създайте функция, която използва друга функция като параметър - [ ] Практикувайте писане на функции с параметри по подразбиране - [ ] Експериментирайте с шаблонни низове в стойностите връщани от функции ### 📅 Вашето седмично овладяване на функциите - [ ] Завършете задачата "Забавление с функции" с креативност - [ ] Рефакторирайте някакъв повторяем код, който сте написали, във възобновяеми функции - [ ] Изградете малък калкулатор, използвайки само функции (без глобални променливи) - [ ] Практикувайте стрелкови функции с методи на масиви като map() и filter() - [ ] Създайте колекция от утилити функции за често срещани задачи - [ ] Изучавайте висшестепенни функции и концепции на функционалното програмиране ### 🌟 Вашата месечна трансформация - [ ] Овладейте напреднали концепции за функции като затваряния и обхват - [ ] Изградете проект, който силно използва композиция на функции - [ ] Допринасяйте за отворен код, подобрявайки документацията на функциите - [ ] Преподавайте на някой друг за функциите и различните стилове на синтаксис - [ ] Проучете парадигмите на функционалното програмиране в JavaScript - [ ] Създайте лична библиотека с възобновяеми функции за бъдещи проекти ### 🏆 Финално чек-ин на шампиона по функции Отбележете вашето овладяване на функциите: - Коя е най-полезната функция, която сте създали досега? - Как изучаването на функциите промени начина, по който мислите за организацията на кода? - Кой синтаксис на функция предпочитате и защо? - Какъв реален проблем бихте решили, като напишете функция? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Основи на JavaScript: Вземане на решения

Замисляли ли сте се някога как приложенията вземат умни решения? Например как навигационна система избира най-бързия маршрут или как термостатът решава кога да включи отоплението? Това е основната концепция за вземане на решения в програмирането. Точно както аналитичният механизъм на Чарлз Бабидж е бил проектиран да следва различни последователности от операции според условия, така и съвременните JavaScript програми трябва да правят избори в зависимост от различни обстоятелства. Тази способност за разклоняване и вземане на решения превръща статичния код в отзивчиви, интелигентни приложения. В този урок ще научите как да прилагате условна логика в своите програми. Ще разгледаме условни изрази, оператори за сравнение и логически изрази, които позволяват на вашия код да оценява ситуации и да реагира по подходящ начин. ## Предварителен тест Предварителен тест Способността да вземате решения и да управлявате потока на програмата е основен аспект на програмирането. Този раздел обхваща как да контролирате пътя на изпълнение на вашите JavaScript програми, използвайки булеви стойности и условна логика. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Кратко припомняне за булевите стойности Преди да разгледаме вземането на решения, нека си припомним булевите стойности от предишния урок. Кръстени на математика Джордж Бул, тези стойности представляват бинарни състояния – или true, или false. Няма двусмислия, няма среден вариант. Тези двоични стойности формират основата на цялата изчислителна логика. Всяко решение, което вашата програма взема, в крайна сметка се свежда до булево оценяване. Създаването на булеви променливи е просто: Това създава две променливи с изрично зададени булеви стойности. ✅ Булевите стойности са именувани на английския математик, философ и логик Джордж Бул (1815–1864). ## Оператори за сравнение и булеви стойности В практиката рядко ще задавате булеви стойности ръчно. Вместо това ще ги генерирате чрез оценяване на условия: „Дали това число е по-голямо от онова?“ или „Равни ли са тези стойности?“ Операторите за сравнение позволяват тези оценки. Те сравняват стойности и връщат булеви резултати въз основа на връзката между операндите. ✅ Проверете знанията си, като напишете няколко сравнения в конзолата на браузъра. Изненада ли ви някой от върнатите резултати? ### 🧠 Проверка на уменията за сравнение: Разбиране на булевата логика Тествайте разбирането си за сравнения: - Защо смятате, че === (строго равенство) обикновено се предпочита пред == (нестрого равенство)? - Можете ли да предвидите какво връща 5 === '5'? А 5 == '5'? - Каква е разликата между !== и !=? ## If оператор Операторът if е като да зададете въпрос в кода си. „Ако това условие е вярно, тогава направи това.“ Вероятно това е най-важният инструмент, който ще използвате за вземане на решения в JavaScript. Ето как работи: Условието се поставя в скобите и ако е true, JavaScript изпълнява кода в къдриците. Ако е false, JavaScript пропуска целия блок. Често ще използвате оператори за сравнение, за да създавате тези условия. Нека видим практичен пример: Тъй като 1000 >= 800 се оценява като true, кодът вътре в блока се изпълнява и показва "Getting a new laptop!" в конзолата. ## If..Else оператор Но какво ако искате програмата ви да направи нещо различно, когато условието е false? Тук влиза else – нещо като резервен план. else операторът ви дава възможност да кажете „ако това условие не е вярно, направи това друго нещо вместо това.“ Тъй като 500 >= 800 е false, JavaScript пропуска първия блок и изпълнява else блока вместо това. В конзолата ще видите "Can't afford a new laptop, yet!". ✅ Тествайте разбирането си на този код и следващия, като го изпълните в конзолата на браузъра. Променете стойностите на променливите currentMoney и laptopPrice, за да промените изведеното в console.log(). ### 🎯 Проверка на логиката if-else: Разклонени пътища Оценете разбирането си за условната логика: - Какво се случва, ако currentMoney е точно равно на laptopPrice? - Можете ли да измислите реален сценарий, в който логиката if-else би била полезна? - Как бихте разширили това, за да обработвате няколко ценови диапазона? ## Switch оператор Понякога трябва да сравните една стойност с няколко опции. Въпреки че можете да свържете няколко if..else израза, този подход става неудобен. Операторът switch осигурява по-чиста структура за обработка на няколко отделни стойности. Концепцията прилича на механичните превключващи системи, използвани в ранните телефонни централи – една входна стойност определя кой конкретен път на изпълнение следва. Ето как е структуриран: - JavaScript оценява израза веднъж - Преглежда всеки case, за да намери съвпадение - Когато намери съвпадение, изпълнява този кодов блок - break казва на JavaScript да спре и да излезе от switch-а - Ако няма съвпадение, изпълнява блока default (ако има такъв) В този пример JavaScript вижда, че dayNumber е 2, намира съответния case 2, задава dayName на "Tuesday" и след това излиза от switch-а. Резултатът? В конзолата се изписва "Today is Tuesday". ✅ Тествайте разбирането си на този код и следващия, като го изпълните в конзолата на браузъра. Променете стойността на променливата a, за да промените изведеното в console.log(). ### 🔄 Майсторство с Switch: Множество опции Тествайте разбирането си за switch: - Какво се случва, ако забравите оператор break? - Кога бихте използвали switch вместо няколко if-else оператора? - Защо default случая е полезен, дори ако мислите, че сте покрили всички възможности? ## Логически оператори и булеви стойности Сложните решения често изискват едновременно оценяване на няколко условия. Точно както булевата алгебра позволява на математиците да комбинират логически изрази, програмирането предлага логически оператори за свързване на множество булеви условия. Тези оператори дават възможност за усъвършенствана условна логика чрез комбиниране на прости true/false оценки. Тези оператори ви позволяват да комбинирате условия по полезни начини: - AND (&&) означава, че и двете условия трябва да са верни - OR (||) означава, че поне едно от условията трябва да е вярно - NOT (!) обръща true в false (и обратно) ## Условия и решения с логически оператори Нека видим тези логически оператори в действие чрез по-реалистичен пример: В този пример: изчисляваме 20% отстъпка (640), след това оценяваме дали наличните средства покриват пълната цена ИЛИ цената със 20% отстъпка. Тъй като 600 не покрива намалената цена от 640, условието се оценява като false. ### 🧮 Проверка на логическите оператори: Комбиниране на условия Тествайте разбирането си за логическите оператори: - В израза A && B, какво се случва, ако A е false? Оценява ли се изобщо B? - Можете ли да си представите ситуация, в която трябва да използвате трите оператора (&&, ||, !) заедно? - Каква е разликата между !user.isActive и user.isActive !== true? ### Оператор за отрицание Понякога е по-лесно да мислите кога нещо не е вярно. Например, вместо да питате „Потребителят влязъл ли е?“, може да искате да попитате „Потребителят не е влязъл ли?“. Операторът удивителен знак (!) обръща логиката вместо вас. Операторът ! е като да кажете „обратното на...“ – ако нещо е true, ! го превръща в false, и обратно. ### Тернарни изрази За прости условни присвоявания, JavaScript предлага тернарния оператор. Този кратък синтаксис ви позволява да напишете условен израз на един ред, полезно когато трябва да зададете една от две стойности в зависимост от условието. Той се чете като въпрос: „Това условие вярно ли е? Ако да, използвай тази стойност. Ако не, използвай другата стойност.“ По-долу е по-ясен пример: ✅ Отделете минута да прочетете този код няколко пъти. Разбирате ли как работят тези оператори? Тази линия казва: „Дали firstNumber е по-голямо от secondNumber? Ако да, сложи firstNumber в biggestNumber. Ако не, сложи secondNumber в biggestNumber.“ Тернарният оператор е просто по-кратък начин да се напише традиционният if..else израз: И двата подхода произвеждат идентични резултати. Тернарният оператор предлага компактност, докато традиционната if-else структура може да е по-четлива за по-сложни условия. --- ## 🚀 Предизвикателство Създайте програма, която първо е написана с логически оператори, а след това я пренапишете, използвайки тернарен израз. Кой синтаксис предпочитате? --- ## GitHub Copilot Agent Предизвикателство 🚀 Използвайте Agent режима, за да изпълните следното предизвикателство: Описание: Създайте цялостен калкулатор за оценки, който демонстрира няколко концепции за вземане на решения от този урок, включително if-else оператори, switch оператори, логически оператори и тернарни изрази. Подканващ текст: Напишете JavaScript програма, която приема числова оценка на ученик (0-100) и определя буквена оценка според следните критерии: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: под 60 Изисквания: 1. Използвайте if-else оператор за определяне на буквена оценка 2. Използвайте логически оператори, за да проверите дали студентът е издържал (оценка >= 60) И има отличен успех (оценка >= 90) 3. Използвайте конструкция switch, за да дадете конкретна обратна връзка за всяка буквена оценка 4. Използвайте тернарен оператор, за да определите дали студентът е допустим за следващия курс (оценка >= 70) 5. Включете проверка на входните данни, за да гарантирате, че резултатът е между 0 и 100 Тествайте програмата си с различни резултати, включително гранични случаи като 59, 60, 89, 90 и невалидни входни данни. Научете повече за agent mode тук. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Прочетете повече за многобройните оператори, налични за потребителя в MDN. Прегледайте чудесния operator lookup на Джош Комо! ## Assignment Operators --- ## 🧠 Обобщение на вашия комплект за вземане на решения --- ## 🚀 Вашият график за овладяване на вземането на решения в JavaScript ### ⚡ Какво можете да направите в следващите 5 минути - [ ] Практикувайте оператори за сравнение в конзолата на браузъра - [ ] Напишете прост if-else израз, който проверява възрастта ви - [ ] Опитайте предизвикателството: пренапишете if-else с помощта на тернарен оператор - [ ] Тествайте какво се случва с различни "истински" и "фалшиви" стойности ### 🎯 Какво можете да постигнете този час - [ ] Завършете теста след урока и прегледайте объркващите концепции - [ ] Изградете комплексен калкулатор за оценки от предизвикателството GitHub Copilot - [ ] Създайте просто решение на дърво за решение за реален сценарий (като избор какво да облечете) - [ ] Практикувайте комбиниране на множество условия с логически оператори - [ ] Експериментирайте с switch конструкции за различни случаи на употреба ### 📅 Вашето овладяване на логиката за седмицата - [ ] Завършете задачата с оператори с креативни примери - [ ] Създайте мини приложение за тест с използване на различни условни структури - [ ] Направете валидатор за форма, който проверява няколко входни условия - [ ] Практикувайте упражненията от operator lookup на Джош Комо - [ ] Рефакторирайте съществуващия код, за да използва по-подходящи условни структури - [ ] Учете се на оценки със съкращаване и влияние върху производителността ### 🌟 Трансформацията ви за месеца - [ ] Овладейте сложни вложени условия и запазете четливостта на кода - [ ] Изградете приложение с усъвършенствана логика за вземане на решения - [ ] Допринасяйте в open source чрез подобряване на условната логика в съществуващи проекти - [ ] Обучавайте други за различните условни структури и кога да се използват - [ ] Проучете функционални подходи към условната логика - [ ] Създайте личен справочник за най-добри практики в условната логика ### 🏆 Финална проверка за шампион в вземането на решения Празнувайте овладяването на логическото мислене: - Коя е най-сложната логика за вземане на решения, която успешно сте имплементирали? - Коя условна структура ви се струва най-естествена и защо? - Как научаването за логическите оператори промени вашия подход към решаването на проблеми? - Кое приложение в реалния свят биха имали полза от усъвършенствана логика за вземане на решения? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Отговорност: Този документ е преведен с използване на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни интерпретации, произтичащи от използването на този превод. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Основи на JavaScript: Масиви и цикли

## Предварителен тест преди лекцията Предварителен тест Някога чудили ли сте се как уебсайтовете следят съдържанието на количката за пазаруване или показват списъка на приятелите ви? Тук влизат в игра масивите и цикълите. Масивите са като дигитални контейнери, които държат множество парчета информация, докато цикълите ви позволяват да работите с всички тези данни ефективно, без да пишете повторен код. Заедно тези две концепции формират основата за работа с информацията във вашите програми. Ще научите как да преминете от ръчното писане на всяка стъпка до създаването на умен, ефективен код, който може бързо да обработва стотици или дори хиляди елементи. До края на този урок ще разберете как да изпълнявате сложни задачи с данни с няколко реда код. Нека разгледаме тези основни програмни концепции. [](https://youtube.com/watch?v=1U4qTyq02Xw "Масиви") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Цикли") ## Масиви Помислете за масивите като дигитален файлов шкаф – вместо да съхранявате един документ на чекмедже, можете да организирате множество свързани елементи в един структуриран контейнер. В програмирането масивите ви позволяват да съхранявате множество парчета информация в един организиран пакет. Независимо дали правите фотогалерия, управлявате списък със задачи или следите високи резултати в игра, масивите осигуряват основата за организация на данните. Нека видим как работят. ✅ Масиви има навсякъде около нас! Можете ли да си представите реален пример за масив, като масив от соларни панели? ### Създаване на масиви Създаването на масив е много просто - просто използвайте квадратни скоби! Какво се случва тук? Току-що създадохте празен контейнер, използвайки тези квадратни скоби []. Помислете за това като празна библиотечна рафт - готова да държи всички книги, които искате да организирате там. Можете също да напълните вашия масив с начални стойности от самото начало: Готини неща, които да забележите: - Можете да съхранявате текст, числа или дори стойности true/false в един и същ масив - Просто отделете всеки елемент със запетая - лесно е! - Масивите са перфектни за съхраняване на свързана информация заедно ### Индексиране на масиви Ето нещо, което може да ви се струва необичайно в началото: масивите номерират своите елементи, започвайки от 0, а не от 1. Това индексиране с начало от нула има корени в начина, по който работи компютърната памет – то е програмна конвенция от ранните дни на езици за програмиране като C. Всяко място в масива получава свой собствен адресен номер, наречен индекс. ✅ Изненадва ли ви, че масивите започват с индекс 0? В някои програмни езици индексите започват от 1. Има интересна история по този въпрос, която можете да прочетете в Wikipedia. Достъп до елементи на масив: Разглеждане стъпка по стъпка: - Използва квадратна скоба с номер на индекс за достъп до елементи - Връща стойността, съхранена на тази специфична позиция в масива - Започва броенето от 0, което прави първия елемент с индекс 0 Промяна на елементи на масив: В горния пример сме: - Променили елемента на индекс 4 от "Роки Род" на "Бътер Пекан" - Добавили нов елемент "Куки Доу" на индекс 5 - Разширили дължината на масива автоматично, когато добавяте извън текущите граници ### Дължина на масив и често използвани методи Масивите имат вградени свойства и методи, които правят работата с данни много по-лесна. Откриване на дължината на масив: Основни точки за запомняне: - Връща общия брой елементи в масива - Актуализира се автоматично, когато елементи се добавят или премахват - Осигурява динамичен брой, полезен за цикли и валидация Основни методи на масив: Разбиране на тези методи: - Добавят елементи с push() (в края) и unshift() (в началото) - Премахват елементи с pop() (в края) и shift() (в началото) - Намират елементи с indexOf() и проверяват съществуване с includes() - Връщат полезни стойности като премахнати елементи или позиционни индекси ✅ Опитайте сами! Използвайте конзолата на браузъра, за да създадете и манипулирате собствен масив. ### 🧠 Проверка на основите на масива: Организиране на вашите данни Тествайте разбирането си за масиви: - Защо мислите, че масивите започват да броят от 0, а не от 1? - Какво се случва, ако опитате да достъпите индекс, който не съществува (като arr[100] в масив с 5 елемента)? - Можете ли да дадете три реални примера, където масивите биха били полезни? ## Цикли Помислете за известната наказателна практика от романите на Чарлз Дикенс, при която учениците трябвало да пишат редове многократно на шрифт. Представете си, че просто можете да кажете на някого "напиши това изречение 100 пъти" и то да бъде изпълнено автоматично. Това е точно това, което правят цикълите за вашия код. Циклите са като неуморен помощник, който може да повтаря задачи без грешки. Независимо дали трябва да проверите всеки артикул в количката за пазаруване, или да покажете всички снимки в албум, цикълите обработват повторението ефективно. JavaScript предоставя няколко вида цикли за избор. Нека разгледаме всеки и разберем кога да ги използваме. ### For цикъл for цикълът е като да зададете таймер – знаете точно колко пъти искате нещо да се случи. Той е много организиран и предсказуем, което го прави перфектен, когато работите с масиви или трябва да броите неща. Структура на For цикъла: Стъпка по стъпка, ето какво се случва: - Инициализира брояча i на 0 в началото - Проверява условието i < 10 преди всяка итерация - Изпълнява блока код, когато условието е вярно - Увеличава i с 1 след всяка итерация чрез i++ - Спира когато условието стане невярно (когато i достигне 10) ✅ Стартирайте този код в конзолата на браузъра. Какво се случва, ако направите малки промени в брояча, условието или израза за итерация? Можете ли да го накарате да върви назад, създавайки броене назад? ### 🗓️ Проверка на усвояването на For цикъл: Контролирано повторение Оценете разбирането си за for цикъла: - Кои са трите части на for цикъла и какво прави всяка? - Как бихте обходили масив в обратен ред? - Какво се случва, ако забравите частта за увеличаване (i++)? ### While цикъл while цикълът е като да кажете "продължавай да правиш това, докато..." - може да не знаете точно колко пъти ще се изпълни, но знаете кога да спре. Той е идеален за неща като искане за въвеждане от потребител, докато не получи необходимата стойност, или търсене в данни, докато не намерите търсеното. Характеристики на While цикъла: - Продължава да изпълнява, докато условието е вярно - Изисква ръчно управление на броячите - Проверява условието преди всяка итерация - Рискува безкрайни цикли, ако условието никога не стане невярно Разбиране на тези примери: - Управлява брояча i ръчно в тялото на цикъла - Увеличава брояча, за да предотврати безкраен цикъл - Демонстрира практическо използване с въвеждане от потребител и ограничение на опити - Включва механизми за безопасност срещу безкрайно изпълнение ### ♾️ Проверка на мъдростта на While цикъла: Повторение базирано на условие Тествайте разбирането си за while цикъла: - Каква е основната опасност при използване на while цикли? - Кога бихте избрали while пред for цикъл? - Как може да предотвратите безкрайни цикли? ### Модерни алтернативи на цикли JavaScript предлага модерни синтаксиси за цикли, които правят кода ви по-четим и по-малко податлив на грешки. For...of цикъл (ES6+): Основни предимства на for...of: - Премахва нуждата от управление на индекс и потенциални грешки с офсет - Осигурява директен достъп до елементи от масива - Подобрява читливостта на кода и намалява синтактичната сложност Метод forEach: Какво е полезно да знаете за forEach: - Изпълнява дадена функция за всеки елемент от масива - Предоставя както стойност, така и индекс като параметри - Не може да бъде прекъснат преждевременно (за разлика от традиционните цикли) - Връща undefined (не създава нов масив) ✅ Защо бихте избрали for цикъл пред while? 17 000 потребители във StackOverflow са имали същия въпрос и някои от мненията могат да ви бъдат интересни. ### 🎨 Проверка на модерния синтаксис на цикли: Възприемане на ES6+ Оценете разбирането си за съвременния JavaScript: - Какви са предимствата на for...of спрямо традиционните for цикли? - Кога бихте предпочели традиционния for цикъл? - Каква е разликата между forEach и map? ## Цикли и масиви Комбинирането на масиви с цикли създава мощни възможности за обработка на данни. Това съчетание е фундаментално за много програмни задачи – от показване на списъци до изчисляване на статистики. Традиционна обработка на масив: Нека разберем всеки подход: - Използва свойството дължина на масива, за да определи границата на цикъла - Достъпва елементи чрез индекс в традиционни for цикли - Осигурява директен достъп до елементи в for...of цикли - Обработва всеки елемент от масива точно веднъж Практически пример за обработка на данни: Ето как работи този код: - Инициализира променливи за сума и екстремуми - Обработва всяка оценка с един ефективен цикъл - Натрупва общата сума за изчисляване на средно - Следи най-високите и най-ниските стойности по време на итерацията - Изчислява крайни статистики след приключване на цикъла ✅ Експериментирайте с обхождане на собствен масив в конзолата на браузъра. --- ## Предизвикателство GitHub Copilot Agent 🚀 Използвайте Agent режима, за да изпълните следното предизвикателство: Описание: Създайте изчерпателна функция за обработка на данни, която комбинира масиви и цикли за анализ на набор от данни и генериране на смислени изводи. Задача: Напишете функция на име analyzeGrades, която приема масив от обекти с оценки на студенти (всеки съдържащ свойства име и оценка) и връща обект със статистики, включително най-висока оценка, най-ниска оценка, средна оценка, брой на студенти, които са успели (оценка >= 70), и масив с имената на студентите, които са над средно. Използвайте поне два различни вида цикли в решението си. Научете повече за agent mode тук. ## 🚀 Предизвикателство JavaScript предлага няколко модерни метода за масиви, които могат да заменят традиционните цикли за конкретни задачи. Разгледайте forEach, for-of, map, filter и reduce. Вашето предизвикателство: Рефакторирайте примера с оценките на студентите, използвайки поне три различни метода за масиви. Забележете колко по-чист и четим става кодът с модерния JavaScript синтаксис. ## Куиз след лекцията Куиз след лекцията ## Преглед и самостоятелно обучение Масивите в JavaScript имат много методи, които са изключително полезни за манипулация на данни. Прочетете за тези методи и изпробвайте някои от тях (като push, pop, slice и splice) върху масив по ваш избор. ## Задача Обход на масив --- ## 📊 Обобщение на Вашия набор от инструменти за масиви и цикли --- ## 🚀 Вашият път към майсторство с масиви и цикли ### ⚡ Какво можете да направите през следващите 5 минути - [ ] Създайте масив с любимите си филми и достъпете конкретни елементи - [ ] Напишете for цикъл, който брои от 1 до 10 - [ ] Опитайте предизвикателството с модерните методи за масиви от урока - [ ] Практикувайте индексиране на масиви във вашата конзола на браузъра ### 🎯 Какво можете да постигнете през този час - [ ] Попълнете куиза след урока и прегледайте всички затрудняващи ви концепции - [ ] Изградете комплексния анализатор на оценки от предизвикателството на GitHub Copilot - [ ] Създайте прост пазарски кош за добавяне и премахване на артикули - [ ] Практикувайте конвертиране между различни типове цикли - [ ] Експериментирайте с методи за масиви като push, pop, slice и splice ### 📅 Вашето седмично пътешествие в обработката на данни - [ ] Завършете задачата "Обход на масив" с творчески подобрения - [ ] Изградете приложение за списък със задачи, използвайки масиви и цикли - [ ] Създайте прост калкулатор за статистически данни - [ ] Практикувайте с MDN методи за масиви - [ ] Изградете галерия за снимки или интерфейс за музикални плейлисти - [ ] Изследвайте функционалното програмиране с map, filter и reduce ### 🌟 Вашата месечна трансформация - [ ] Усъвършенствайте напредналите операции с масиви и оптимизация на производителността - [ ] Изградете пълен табло за визуализация на данни - [ ] Допринасяйте към проекти с отворен код, свързани с обработка на данни - [ ] Обучете друг някой за масиви и цикли с практически примери - [ ] Създайте лична библиотека с повторно използваеми функции за обработка на данни - [ ] Изследвайте алгоритми и структури от данни, базирани на масиви ### 🏆 Краен контролен списък за шампион по обработка на данни Празнувайте вашето майсторство с масиви и цикли: - Коя е най-полезната операция с масив, която сте научили за реални приложения? - Кой тип цикъл ви се струва най-естествен и защо? - Как разбирането на масиви и цикли промени вашия подход към организацията на данни? - Каква сложна задача за обработка на данни бихте искали да решите следваща? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля имайте предвид, че автоматичните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за всякакви недоразумения или неправилни тълкувания, произтичащи от използването на този превод. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

জাভাস্ক্রিপ্টের পরিচিতি

জাভাস্ক্রিপ্ট হলো ওয়েবের ভাষা। এই চারটি পাঠে, আপনি এর মৌলিক বিষয়গুলো শিখবেন। ### বিষয়সমূহ 1. ভেরিয়েবল এবং ডেটা টাইপ 2. ফাংশন এবং মেথড 3. জাভাস্ক্রিপ্ট দিয়ে সিদ্ধান্ত নেওয়া 4. অ্যারে এবং লুপ ### কৃতজ্ঞতা এই পাঠগুলো ভালোবাসা দিয়ে লিখেছেন জেসমিন গ্রিনঅ্যাওয়ে, ক্রিস্টোফার হ্যারিসন এবং ক্রিস নরিং অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।

web,development

জাভাস্ক্রিপ্টের বুনিয়াদি: ডেটা টাইপ

ডেটা টাইপ জাভাস্ক্রিপ্টের একটি মৌলিক ধারণা যা আপনি প্রতিটি প্রোগ্রামে পাবেন। ডেটা টাইপকে প্রাচীন আলেকজান্দ্রিয়ার গ্রন্থাগারিকদের ফাইলিং সিস্টেমের মতো ভাবুন – তারা কবিতা, গণিত এবং ঐতিহাসিক নথির জন্য নির্দিষ্ট জায়গা রাখতেন। জাভাস্ক্রিপ্টও তথ্যকে একইভাবে বিভিন্ন শ্রেণিতে সংগঠিত করে। এই পাঠে আমরা জাভাস্ক্রিপ্টের মূল ডেটা টাইপগুলো নিয়ে আলোচনা করব। আপনি শিখবেন কীভাবে সংখ্যা, টেক্সট, সত্য/মিথ্যা মান পরিচালনা করতে হয় এবং কেন সঠিক টাইপ নির্বাচন করা আপনার প্রোগ্রামের জন্য গুরুত্বপূর্ণ। প্রথমে এই ধারণাগুলো একটু কঠিন মনে হতে পারে, কিন্তু অনুশীলনের মাধ্যমে এগুলো সহজ হয়ে যাবে। ডেটা টাইপ বুঝতে পারলে জাভাস্ক্রিপ্টের অন্যান্য বিষয় অনেক পরিষ্কার হয়ে যাবে। যেমন স্থপতিরা ক্যাথেড্রাল নির্মাণের আগে বিভিন্ন নির্মাণ সামগ্রী সম্পর্কে জানতে হয়, তেমনি এই বুনিয়াদি বিষয়গুলো আপনার ভবিষ্যৎ নির্মাণের ভিত্তি তৈরি করবে। ## প্রি-লেকচার কুইজ প্রি-লেকচার কুইজ এই পাঠে জাভাস্ক্রিপ্টের বুনিয়াদি বিষয়গুলো আলোচনা করা হয়েছে, যা ওয়েবের ইন্টারঅ্যাক্টিভিটি প্রদান করে। [](https://youtube.com/watch?v=JNIXfGiDWM8 "জাভাস্ক্রিপ্টে ভ্যারিয়েবল") [](https://youtube.com/watch?v=AWfA95eLdq8 "জাভাস্ক্রিপ্টে ডেটা টাইপ") চলুন ভ্যারিয়েবল এবং তাদের মধ্যে থাকা ডেটা টাইপ দিয়ে শুরু করি! ## ভ্যারিয়েবল ভ্যারিয়েবল প্রোগ্রামিংয়ের একটি মৌলিক উপাদান। মধ্যযুগের আলকেমিস্টরা যেমন লেবেলযুক্ত জারে বিভিন্ন পদার্থ সংরক্ষণ করতেন, ভ্যারিয়েবল আপনাকে তথ্য সংরক্ষণ করতে এবং একটি বর্ণনামূলক নাম দিতে সাহায্য করে যাতে আপনি পরে এটি ব্যবহার করতে পারেন। কারো বয়স মনে রাখতে হবে? age নামে একটি ভ্যারিয়েবল তৈরি করুন। ব্যবহারকারীর নাম ট্র্যাক করতে চান? userName নামে একটি ভ্যারিয়েবল ব্যবহার করুন। আমরা জাভাস্ক্রিপ্টে ভ্যারিয়েবল তৈরি করার আধুনিক পদ্ধতির উপর ফোকাস করব। এখানে আপনি যে কৌশলগুলো শিখবেন তা ভাষার বিবর্তন এবং প্রোগ্রামিং কমিউনিটির সেরা অভ্যাসের প্রতিনিধিত্ব করে। ভ্যারিয়েবল তৈরি এবং ডিক্লেয়ার করার সিনট্যাক্স হলো [keyword] [name]। এটি দুটি অংশ নিয়ে গঠিত: - কীওয়ার্ড। পরিবর্তনশীল ভ্যারিয়েবলের জন্য let ব্যবহার করুন, অথবা স্থায়ী মানের জন্য const ব্যবহার করুন। - ভ্যারিয়েবলের নাম, এটি একটি বর্ণনামূলক নাম যা আপনি নিজে নির্বাচন করেন। ✅ ES6-এ let কীওয়ার্ডটি পরিচিত হয় এবং এটি আপনার ভ্যারিয়েবলকে একটি _ব্লক স্কোপ_ দেয়। let বা const ব্যবহার করার পরামর্শ দেওয়া হয়, পুরনো var কীওয়ার্ডের পরিবর্তে। আমরা ভবিষ্যৎ অংশে ব্লক স্কোপ নিয়ে আরও বিস্তারিত আলোচনা করব। ### কাজ - ভ্যারিয়েবল নিয়ে কাজ করা 1. একটি ভ্যারিয়েবল ডিক্লেয়ার করুন। চলুন আমাদের প্রথম ভ্যারিয়েবল তৈরি করি: ```javascript let myVariable; ``` এটি কী অর্জন করে: - এটি জাভাস্ক্রিপ্টকে myVariable নামে একটি স্টোরেজ লোকেশন তৈরি করতে বলে - জাভাস্ক্রিপ্ট এই ভ্যারিয়েবলের জন্য মেমোরিতে জায়গা বরাদ্দ করে - ভ্যারিয়েবলের বর্তমানে কোনো মান নেই (undefined) 2. এতে একটি মান দিন। এখন আমাদের ভ্যারিয়েবলে কিছু রাখি: ```javascript myVariable = 123; ``` অ্যাসাইনমেন্ট কীভাবে কাজ করে: - = অপারেটর আমাদের ভ্যারিয়েবলে 123 মান অ্যাসাইন করে - ভ্যারিয়েবল এখন এই মানটি ধারণ করে, undefined নয় - আপনি আপনার কোডে myVariable ব্যবহার করে এই মানটি রেফার করতে পারেন > নোট: এই পাঠে = ব্যবহার করা মানে আমরা একটি "অ্যাসাইনমেন্ট অপারেটর" ব্যবহার করছি, যা একটি ভ্যারিয়েবলে মান সেট করতে ব্যবহৃত হয়। এটি সমতা নির্দেশ করে না। 3. স্মার্ট উপায়ে করুন। আসলে, চলুন এই দুটি ধাপ একসাথে করি: ```javascript let myVariable = 123; ``` এই পদ্ধতি আরও কার্যকর: - আপনি এক বিবৃতিতে ভ্যারিয়েবল ডিক্লেয়ার এবং মান অ্যাসাইন করছেন - এটি ডেভেলপারদের মধ্যে স্ট্যান্ডার্ড প্র্যাকটিস - এটি কোডের দৈর্ঘ্য কমায় এবং স্পষ্টতা বজায় রাখে 4. মত পরিবর্তন করুন। যদি আমরা অন্য একটি সংখ্যা সংরক্ষণ করতে চাই? ```javascript myVariable = 321; ``` রিঅ্যাসাইনমেন্ট বুঝুন: - ভ্যারিয়েবল এখন 321 ধারণ করে, 123 নয় - পূর্বের মানটি প্রতিস্থাপিত হয় – ভ্যারিয়েবল একবারে শুধুমাত্র একটি মান সংরক্ষণ করে - এটি let দিয়ে ডিক্লেয়ার করা ভ্যারিয়েবলের একটি মূল বৈশিষ্ট্য ✅ চেষ্টা করুন! আপনি আপনার ব্রাউজারেই জাভাস্ক্রিপ্ট লিখতে পারেন। একটি ব্রাউজার উইন্ডো খুলুন এবং ডেভেলপার টুলে যান। কনসোলে একটি প্রম্পট পাবেন; সেখানে let myVariable = 123 টাইপ করুন, এন্টার চাপুন, তারপর myVariable টাইপ করুন। কী ঘটে? নোট করুন, আপনি এই ধারণাগুলো পরবর্তী পাঠে আরও শিখবেন। ### 🧠 ভ্যারিয়েবল মাস্টারি চেক: আরামদায়ক হওয়া চলুন দেখি আপনি ভ্যারিয়েবল নিয়ে কতটা আত্মবিশ্বাসী: - আপনি কি ডিক্লেয়ার এবং অ্যাসাইনমেন্টের পার্থক্য ব্যাখ্যা করতে পারেন? - যদি আপনি একটি ভ্যারিয়েবল ডিক্লেয়ার করার আগে ব্যবহার করতে চান, তাহলে কী হবে? - আপনি কখন let এর পরিবর্তে const ব্যবহার করবেন? ## কনস্ট্যান্ট কখনও কখনও আপনাকে এমন তথ্য সংরক্ষণ করতে হয় যা প্রোগ্রাম চলাকালীন কখনও পরিবর্তন করা উচিত নয়। কনস্ট্যান্টকে প্রাচীন গ্রিসের ইউক্লিডের প্রতিষ্ঠিত গাণিতিক নীতিগুলোর মতো ভাবুন – একবার প্রমাণিত এবং নথিভুক্ত হলে, সেগুলো ভবিষ্যতের জন্য স্থায়ী থাকে। কনস্ট্যান্ট ভ্যারিয়েবলের মতো কাজ করে, তবে একটি গুরুত্বপূর্ণ সীমাবদ্ধতা রয়েছে: একবার আপনি এর মান অ্যাসাইন করলে, এটি আর পরিবর্তন করা যাবে না। এই অপরিবর্তনশীলতা আপনার প্রোগ্রামের গুরুত্বপূর্ণ মানগুলোকে দুর্ঘটনাজনিত পরিবর্তন থেকে রক্ষা করে। কনস্ট্যান্ট ডিক্লেয়ার এবং ইনিশিয়ালাইজ করার ধারণা ভ্যারিয়েবলের মতোই, তবে const কীওয়ার্ডের ব্যতিক্রম রয়েছে। সাধারণত কনস্ট্যান্টগুলো সব বড় অক্ষরে ডিক্লেয়ার করা হয়। এই কোডটি যা করে: - একটি কনস্ট্যান্ট তৈরি করে MY_VARIABLE নামে যার মান 123 - বড় অক্ষরের নামকরণ পদ্ধতি ব্যবহার করে কনস্ট্যান্টের জন্য - ভবিষ্যতে এই মান পরিবর্তন প্রতিরোধ করে কনস্ট্যান্টের দুটি প্রধান নিয়ম রয়েছে: - আপনাকে সঙ্গে সঙ্গে একটি মান দিতে হবে – খালি কনস্ট্যান্ট অনুমোদিত নয়! - আপনি কখনও এই মান পরিবর্তন করতে পারবেন না – যদি চেষ্টা করেন, জাভাস্ক্রিপ্ট একটি ত্রুটি দেখাবে। চলুন দেখি এর অর্থ কী: সাধারণ মান - নিচেরটি অনুমোদিত নয়: ```javascript const PI = 3; PI = 4; // অনুমোদিত নয় ``` যা মনে রাখতে হবে: - পুনরায় অ্যাসাইন করার চেষ্টা করলে ত্রুটি হবে - গুরুত্বপূর্ণ মানগুলোকে রক্ষা করে দুর্ঘটনাজনিত পরিবর্তন থেকে - প্রোগ্রামের মধ্যে মানের সামঞ্জস্য নিশ্চিত করে অবজেক্ট রেফারেন্স সুরক্ষিত - নিচেরটি অনুমোদিত নয়: ```javascript const obj = { a: 3 }; obj = { b: 5 } // অনুমোদিত নয় ``` এই ধারণাগুলো বুঝুন: - পুরো অবজেক্ট প্রতিস্থাপন প্রতিরোধ করে - মূল অবজেক্টের রেফারেন্স রক্ষা করে - মেমোরিতে অবজেক্টের পরিচয় বজায় রাখে অবজেক্টের মান সুরক্ষিত নয় - নিচেরটি অনুমোদিত: ```javascript const obj = { a: 3 }; obj.a = 5; // অনুমোদিত ``` এখানে যা ঘটে: - অবজেক্টের প্রপার্টি মান পরিবর্তন করে - একই অবজেক্ট রেফারেন্স বজায় রাখে - দেখায় যে অবজেক্টের বিষয়বস্তু পরিবর্তন হতে পারে, যদিও রেফারেন্স স্থায়ী থাকে > নোট, একটি const মানে রেফারেন্সটি পুনরায় অ্যাসাইনমেন্ট থেকে সুরক্ষিত। তবে মানটি _অপরিবর্তনশীল_ নয় এবং এটি পরিবর্তন হতে পারে, বিশেষত যদি এটি একটি জটিল কাঠামো যেমন অবজেক্ট হয়। ## ডেটা টাইপ জাভাস্ক্রিপ্ট তথ্যকে বিভিন্ন শ্রেণিতে সংগঠিত করে, যাকে ডেটা টাইপ বলা হয়। এই ধারণাটি প্রাচীন পণ্ডিতদের জ্ঞান শ্রেণিবদ্ধ করার পদ্ধতির মতো – অ্যারিস্টটল বিভিন্ন ধরনের যুক্তি আলাদা করেছিলেন, কারণ তিনি জানতেন যে কবিতা, গণিত এবং প্রাকৃতিক দর্শনের জন্য একই যুক্তি প্রয়োগ করা যায় না। ডেটা টাইপ গুরুত্বপূর্ণ কারণ বিভিন্ন অপারেশন বিভিন্ন ধরনের তথ্যের সাথে কাজ করে। যেমন আপনি কারো নামের উপর গাণিতিক হিসাব করতে পারবেন না বা একটি গাণিতিক সমীকরণকে বর্ণানুক্রমিকভাবে সাজাতে পারবেন না, তেমনি জাভাস্ক্রিপ্ট প্রতিটি অপারেশনের জন্য সঠিক ডেটা টাইপ প্রয়োজন। এটি ত্রুটি প্রতিরোধ করে এবং আপনার কোডকে আরও নির্ভরযোগ্য করে তোলে। ভ্যারিয়েবল বিভিন্ন ধরনের মান সংরক্ষণ করতে পারে, যেমন সংখ্যা এবং টেক্সট। এই বিভিন্ন ধরনের মানকে ডেটা টাইপ বলা হয়। ডেটা টাইপ সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ কারণ এটি ডেভেলপারদের সিদ্ধান্ত নিতে সাহায্য করে যে কোড কীভাবে লেখা উচিত এবং সফটওয়্যার কীভাবে চলবে। তাছাড়া, কিছু ডেটা টাইপের অনন্য বৈশিষ্ট্য রয়েছে যা একটি মানে অতিরিক্ত তথ্য রূপান্তর বা বের করতে সাহায্য করে। ✅ ডেটা টাইপগুলোকে জাভাস্ক্রিপ্ট ডেটা প্রিমিটিভও বলা হয়, কারণ এগুলো ভাষার দ্বারা প্রদত্ত নিম্ন-স্তরের ডেটা টাইপ। জাভাস্ক্রিপ্টে ৭টি প্রিমিটিভ ডেটা টাইপ রয়েছে: string, number, bigint, boolean, undefined, null এবং symbol। এক মিনিট সময় নিয়ে ভাবুন, এই প্রিমিটিভগুলো কী প্রতিনিধিত্ব করে। একটি zebra কী? 0 কী? true কী? ### সংখ্যা সংখ্যা জাভাস্ক্রিপ্টের সবচেয়ে সরল ডেটা টাইপ। আপনি পুরো সংখ্যা যেমন 42, দশমিক সংখ্যা যেমন 3.14, বা ঋণাত্মক সংখ্যা যেমন -5 নিয়ে কাজ করুন, জাভাস্ক্রিপ্ট এগুলোকে একইভাবে পরিচালনা করে। আমাদের আগের ভ্যারিয়েবলটি মনে আছে? আমরা যে 123 সংরক্ষণ করেছিলাম, সেটি আসলে একটি সংখ্যা ডেটা টাইপ ছিল: মূল বৈশিষ্ট্য: - জাভাস্ক্রিপ্ট স্বয়ংক্রিয়ভাবে সংখ্যাকে চিনতে পারে - আপনি এই ভ্যারিয়েবল দিয়ে গাণিতিক অপারেশন করতে পারেন - কোনো স্পষ্ট টাইপ ডিক্লেয়ার করার প্রয়োজন নেই ভ্যারিয়েবল সব ধরনের সংখ্যা সংরক্ষণ করতে পারে, যেমন দশমিক বা ঋণাত্মক সংখ্যা। সংখ্যা গাণিতিক অপারেটরের সাথে ব্যবহার করা যায়, যা পরবর্তী অংশে আলোচনা করা হয়েছে। ### গাণিতিক অপারেটর গাণিতিক অপারেটর আপনাকে জাভাস্ক্রিপ্টে গাণিতিক হিসাব করতে সাহায্য করে। এই অপারেটরগুলো সেই একই নীতিগুলো অনুসরণ করে যা শতাব্দী ধরে গণিতবিদরা ব্যবহার করেছেন – একই প্রতীক যা আল-খাওয়ারিজমির মতো পণ্ডিতদের কাজেও দেখা যায়, যিনি বীজগণিতের নোটেশন তৈরি করেছিলেন। অপারেটরগুলো ঐতিহ্যবাহী গণিতের মতো কাজ করে: যোগের জন্য প্লাস, বিয়োগের জন্য মাইনাস, ইত্যাদি। গাণিতিক ফাংশন করার সময় ব্যবহৃত কিছু অপারেটরের তালিকা এখানে দেওয়া হলো: ✅ চেষ্টা করুন! আপনার ব্রাউজারের কনসোলে একটি গাণিতিক অপারেশন চেষ্টা করুন। ফলাফল দেখে কি আপনি অবাক হয়েছেন? ### 🧮 গাণিতিক দক্ষতা চেক: আত্মবিশ্বাসের সাথে গণনা আপনার গাণিতিক ধারণা পরীক্ষা করুন: - / (ভাগ) এবং % (অবশিষ্টাংশ) এর মধ্যে পার্থক্য কী? - আপনি কি অনুমান করতে পারেন 10 % 3 এর মান কী হবে? (ইঙ্গিত: এটি 3.33 নয়...) - প্রোগ্রামিংয়ে অবশিষ্টাংশ অপারেটর কেন উপকারী হতে পারে? ### স্ট্রিং জাভাস্ক্রিপ্টে টেক্সট ডেটা স্ট্রিং হিসেবে উপস্থাপিত হয়। "স্ট্রিং" শব্দটি চরিত্রগুলোকে একসাথে সংযুক্ত করার ধারণা থেকে এসেছে, যেমন মধ্যযুগের মঠের লেখকরা তাদের পাণ্ডুলিপিতে শব্দ এবং বাক্য তৈরি করতে অক্ষরগুলোকে সংযুক্ত করতেন। স্ট্রিং ওয়েব ডেভেলপমেন্টের একটি মৌলিক বিষয়। একটি ওয়েবসাইটে প্রদর্শিত প্রতিটি টেক্সট – ব্যবহারকারীর নাম, বোতামের লেবেল, ত্রুটির বার্তা, কন্টেন্ট – স্ট্রিং ডেটা হিসেবে পরিচালিত হয়। স্ট্রিং বুঝতে পারা কার্যকরী ব্যবহারকারী ইন্টারফেস তৈরি করার জন্য অপরিহার্য। স্ট্রিং হলো অক্ষরের সেট যা একক বা দ্বৈত উদ্ধৃতির মধ্যে থাকে। এই ধারণাগুলো বুঝুন: - একক উদ্ধৃতি ' বা দ্বৈত উদ্ধৃতি " ব্যবহার করে স্ট্রিং সংজ্ঞায়িত করে - টেক্সট ডেটা সংরক্ষণ করে যা অক্ষর, সংখ্যা এবং প্রতীক অন্ত দুই বা তার বেশি স্ট্রিং একত্রিত করতে বা একসাথে যোগ করতে, + অপারেটর ব্যবহার করুন। ধাপে ধাপে যা ঘটছে: - একত্রিত করে একাধিক স্ট্রিং + অপারেটর ব্যবহার করে - যোগ করে স্ট্রিংগুলোকে সরাসরি একসাথে, প্রথম উদাহরণে কোনো স্পেস ছাড়াই - স্পেস যোগ করে " " স্ট্রিংগুলোর মধ্যে পাঠযোগ্যতার জন্য - যথাযথ ফরম্যাটিং তৈরি করতে কমার মতো বিরামচিহ্ন যোগ করে ✅ কেন 1 + 1 = 2 জাভাস্ক্রিপ্টে, কিন্তু '1' + '1' = 11? চিন্তা করুন। '1' + 1 এর ক্ষেত্রে কী হয়? টেমপ্লেট লিটারাল স্ট্রিং ফরম্যাট করার আরেকটি উপায়, যেখানে কোটসের পরিবর্তে ব্যাকটিক ব্যবহার করা হয়। সাধারণ টেক্সট ছাড়া অন্য কিছু প্লেসহোল্ডার ${ } এর মধ্যে রাখতে হয়। এর মধ্যে স্ট্রিং হতে পারে এমন কোনো ভ্যারিয়েবলও অন্তর্ভুক্ত। প্রতিটি অংশ বুঝি: - ব্যাকটিক ব্যবহার করে ` `` সাধারণ কোটসের পরিবর্তে টেমপ্লেট লিটারাল তৈরি করতে - ভ্যারিয়েবল সরাসরি এম্বেড করে ${} প্লেসহোল্ডার সিনট্যাক্স ব্যবহার করে - স্পেস এবং ফরম্যাটিং ঠিক রাখে যেমন লেখা হয়েছে - একটি পরিষ্কার উপায় প্রদান করে ভ্যারিয়েবলসহ জটিল স্ট্রিং তৈরি করতে আপনার ফরম্যাটিং লক্ষ্য অর্জন করতে আপনি যেকোনো পদ্ধতি ব্যবহার করতে পারেন, তবে টেমপ্লেট লিটারাল স্পেস এবং লাইন ব্রেককে সম্মান করে। ✅ কখন আপনি টেমপ্লেট লিটারাল ব্যবহার করবেন এবং কখন সাধারণ স্ট্রিং ব্যবহার করবেন? ### 🔤 স্ট্রিং দক্ষতা পরীক্ষা: টেক্সট ম্যানিপুলেশন আত্মবিশ্বাস আপনার স্ট্রিং দক্ষতা মূল্যায়ন করুন: - কেন '1' + '1' '11' হয় 2 এর পরিবর্তে, ব্যাখ্যা করতে পারেন? - কোন স্ট্রিং পদ্ধতি আপনার কাছে বেশি পাঠযোগ্য মনে হয়: কনক্যাটেনেশন না টেমপ্লেট লিটারাল? - যদি স্ট্রিংয়ের চারপাশে কোটস দিতে ভুলে যান, তাহলে কী হবে? ### বুলিয়ান বুলিয়ান হলো সবচেয়ে সহজ ডেটা ফর্ম: এটি শুধুমাত্র দুটি মান ধারণ করতে পারে – true বা false। এই বাইনারি লজিক সিস্টেম ১৯ শতকের গণিতবিদ জর্জ বুলের কাজ থেকে উদ্ভূত, যিনি বুলিয়ান অ্যালজেব্রা তৈরি করেছিলেন। তাদের সরলতার পরেও, বুলিয়ান প্রোগ্রাম লজিকের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলো আপনার কোডকে শর্তের ভিত্তিতে সিদ্ধান্ত নিতে সক্ষম করে – ব্যবহারকারী লগ ইন করেছেন কিনা, কোনো বোতাম ক্লিক করা হয়েছে কিনা, বা নির্দিষ্ট মানদণ্ড পূরণ হয়েছে কিনা। বুলিয়ান শুধুমাত্র দুটি মান ধারণ করতে পারে: true বা false। বুলিয়ান শর্ত পূরণ হলে কোন লাইন কোড চলবে তা নির্ধারণ করতে সাহায্য করে। অনেক ক্ষেত্রে, অপারেটর বুলিয়ানের মান সেট করতে সাহায্য করে এবং আপনি প্রায়ই ভ্যারিয়েবল ইনিশিয়ালাইজ বা তাদের মান অপারেটর দিয়ে আপডেট করতে দেখবেন। উপরের উদাহরণে আমরা: - একটি ভ্যারিয়েবল তৈরি করেছি যা বুলিয়ান মান true সংরক্ষণ করে - প্রদর্শন করেছি কীভাবে বুলিয়ান মান false সংরক্ষণ করা যায় - সঠিক কীওয়ার্ড ব্যবহার করেছি true এবং false (কোনো কোটস প্রয়োজন নেই) - এই ভ্যারিয়েবলগুলো প্রস্তুত করেছি শর্তমূলক বিবৃতিতে ব্যবহারের জন্য ✅ একটি ভ্যারিয়েবলকে 'truthy' বিবেচনা করা যেতে পারে যদি এটি বুলিয়ান true হিসেবে মূল্যায়িত হয়। মজার বিষয় হলো, জাভাস্ক্রিপ্টে সব মান truthy, যদি তা falsy হিসেবে সংজ্ঞায়িত না হয়। ### 🎯 বুলিয়ান লজিক পরীক্ষা: সিদ্ধান্ত গ্রহণ দক্ষতা আপনার বুলিয়ান বোঝাপড়া পরীক্ষা করুন: - কেন আপনি মনে করেন জাভাস্ক্রিপ্টে true এবং false ছাড়াও "truthy" এবং "falsy" মান আছে? - আপনি কি অনুমান করতে পারেন কোনটি falsy: 0, "0", [], "false"? - কীভাবে বুলিয়ান প্রোগ্রামের প্রবাহ নিয়ন্ত্রণে সহায়ক হতে পারে? --- ## 📊 আপনার ডেটা টাইপ টুলকিট সারসংক্ষেপ ## GitHub Copilot Agent Challenge 🚀 Agent মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জ সম্পন্ন করুন: বর্ণনা: একটি ব্যক্তিগত তথ্য ব্যবস্থাপক তৈরি করুন যা এই পাঠে শেখা সমস্ত জাভাস্ক্রিপ্ট ডেটা টাইপ প্রদর্শন করে এবং বাস্তব জীবনের ডেটা পরিস্থিতি পরিচালনা করে। প্রম্পট: একটি জাভাস্ক্রিপ্ট প্রোগ্রাম তৈরি করুন যা একটি ব্যবহারকারীর প্রোফাইল অবজেক্ট তৈরি করে, যেখানে থাকবে: ব্যক্তির নাম (স্ট্রিং), বয়স (নাম্বার), ছাত্র অবস্থার স্ট্যাটাস (বুলিয়ান), প্রিয় রঙের একটি অ্যারে, এবং একটি ঠিকানা অবজেক্ট যার মধ্যে থাকবে স্ট্রিট, সিটি, এবং জিপ কোড প্রপার্টি। প্রোফাইল তথ্য প্রদর্শন এবং পৃথক ক্ষেত্র আপডেট করার জন্য ফাংশন অন্তর্ভুক্ত করুন। স্ট্রিং কনক্যাটেনেশন, টেমপ্লেট লিটারাল, বয়সের সাথে গাণিতিক অপারেশন এবং ছাত্র অবস্থার জন্য বুলিয়ান লজিক প্রদর্শন করুন। Agent মোড সম্পর্কে আরও জানুন এখানে। ## 🚀 চ্যালেঞ্জ জাভাস্ক্রিপ্টে কিছু আচরণ আছে যা ডেভেলপারদের বিভ্রান্ত করতে পারে। এখানে একটি ক্লাসিক উদাহরণ: আপনার ব্রাউজার কনসোলে এটি টাইপ করুন: let age = 1; let Age = 2; age == Age এবং ফলাফল পর্যবেক্ষণ করুন। এটি false ফেরত দেয় – আপনি কেন তা নির্ধারণ করতে পারেন? এটি অনেক জাভাস্ক্রিপ্ট আচরণের মধ্যে একটি যা বোঝা গুরুত্বপূর্ণ। এই অদ্ভুত বিষয়গুলো সম্পর্কে পরিচিতি আপনাকে আরও নির্ভরযোগ্য কোড লিখতে এবং সমস্যাগুলো আরও কার্যকরভাবে ডিবাগ করতে সাহায্য করবে। ## পোস্ট-লেকচার কুইজ পোস্ট-লেকচার কুইজ ## পর্যালোচনা ও স্ব-অধ্যয়ন জাভাস্ক্রিপ্ট এক্সারসাইজের এই তালিকা দেখুন এবং একটি চেষ্টা করুন। আপনি কী শিখলেন? ## অ্যাসাইনমেন্ট ডেটা টাইপ প্র্যাকটিস ## 🚀 আপনার জাভাস্ক্রিপ্ট ডেটা টাইপ দক্ষতা টাইমলাইন ### ⚡ আপনি পরবর্তী ৫ মিনিটে যা করতে পারেন - [ ] আপনার ব্রাউজার কনসোলে ৩টি ভিন্ন ডেটা টাইপের ভ্যারিয়েবল তৈরি করুন - [ ] চ্যালেঞ্জটি চেষ্টা করুন: let age = 1; let Age = 2; age == Age এবং কেন এটি false তা বের করুন - [ ] আপনার নাম এবং প্রিয় নম্বর দিয়ে স্ট্রিং কনক্যাটেনেশন প্র্যাকটিস করুন - [ ] পরীক্ষা করুন যখন আপনি একটি স্ট্রিংয়ে একটি নম্বর যোগ করেন তখন কী ঘটে ### 🎯 আপনি এই ঘণ্টায় যা অর্জন করতে পারেন - [ ] পোস্ট-লেসন কুইজ সম্পন্ন করুন এবং কোনো বিভ্রান্তিকর ধারণা পর্যালোচনা করুন - [ ] একটি মিনি ক্যালকুলেটর তৈরি করুন যা দুটি সংখ্যার যোগ, বিয়োগ, গুণ এবং ভাগ করে - [ ] টেমপ্লেট লিটারাল ব্যবহার করে একটি সাধারণ নাম ফরম্যাটার তৈরি করুন - [ ] == এবং === তুলনা অপারেটরের পার্থক্য অন্বেষণ করুন - [ ] বিভিন্ন ডেটা টাইপের মধ্যে রূপান্তর প্র্যাকটিস করুন ### 📅 আপনার সপ্তাহব্যাপী জাভাস্ক্রিপ্ট ভিত্তি - [ ] আত্মবিশ্বাস এবং সৃজনশীলতার সাথে অ্যাসাইনমেন্ট সম্পন্ন করুন - [ ] শেখা সমস্ত ডেটা টাইপ ব্যবহার করে একটি ব্যক্তিগত প্রোফাইল অবজেক্ট তৈরি করুন - [ ] CSS-Tricks থেকে জাভাস্ক্রিপ্ট এক্সারসাইজ দিয়ে প্র্যাকটিস করুন - [ ] বুলিয়ান লজিক ব্যবহার করে একটি সাধারণ ফর্ম ভ্যালিডেটর তৈরি করুন - [ ] অ্যারে এবং অবজেক্ট ডেটা টাইপ নিয়ে পরীক্ষা করুন (পরবর্তী পাঠের প্রিভিউ) - [ ] একটি জাভাস্ক্রিপ্ট কমিউনিটিতে যোগ দিন এবং ডেটা টাইপ সম্পর্কে প্রশ্ন করুন ### 🌟 আপনার মাসব্যাপী রূপান্তর - [ ] বড় প্রোগ্রামিং প্রজেক্টে ডেটা টাইপ জ্ঞান সংযুক্ত করুন - [ ] বাস্তব অ্যাপ্লিকেশনে প্রতিটি ডেটা টাইপ কখন এবং কেন ব্যবহার করবেন তা বুঝুন - [ ] অন্য শিক্ষার্থীদের জাভাস্ক্রিপ্টের মৌলিক বিষয়গুলো বুঝতে সাহায্য করুন - [ ] বিভিন্ন ধরনের ব্যবহারকারীর ডেটা পরিচালনা করে একটি ছোট অ্যাপ্লিকেশন তৈরি করুন - [ ] টাইপ কোয়েরশন এবং স্ট্রিক্ট ইকুয়ালিটির মতো উন্নত ডেটা টাইপ ধারণা অন্বেষণ করুন - [ ] ডকুমেন্টেশন উন্নতির মাধ্যমে ওপেন সোর্স জাভাস্ক্রিপ্ট প্রজেক্টে অবদান রাখুন ### 🧠 ফাইনাল ডেটা টাইপ দক্ষতা চেক-ইন আপনার জাভাস্ক্রিপ্ট ভিত্তি উদযাপন করুন: - কোন ডেটা টাইপের আচরণ আপনাকে সবচেয়ে বেশি অবাক করেছে? - আপনি কতটা আত্মবিশ্বাসী যে আপনি ভ্যারিয়েবল বনাম কনস্ট্যান্ট সম্পর্কে একজন বন্ধুকে ব্যাখ্যা করতে পারবেন? - জাভাস্ক্রিপ্টের টাইপ সিস্টেম সম্পর্কে আপনি সবচেয়ে আকর্ষণীয় কী আবিষ্কার করেছেন? - এই মৌলিক বিষয়গুলো দিয়ে আপনি কোন বাস্তব জীবনের অ্যাপ্লিকেশন তৈরি করতে পারেন কল্পনা করুন? --- অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।

web,development

জাভাস্ক্রিপ্টের বেসিক: মেথড এবং ফাংশন

## লেকচারের আগে কুইজ লেকচারের আগে কুইজ একই কোড বারবার লিখা প্রোগ্রামিংয়ের সবচেয়ে সাধারণ সমস্যাগুলোর একটি। ফাংশন এই সমস্যার সমাধান করে, কারণ এটি কোডকে পুনরায় ব্যবহারযোগ্য ব্লকে প্যাকেজ করতে সাহায্য করে। ফাংশনকে ভাবুন হেনরি ফোর্ডের অ্যাসেম্বলি লাইনের মতো স্ট্যান্ডার্ডাইজড অংশ হিসেবে – একবার আপনি একটি নির্ভরযোগ্য কম্পোনেন্ট তৈরি করলে, সেটি যেখানে প্রয়োজন সেখানে ব্যবহার করতে পারবেন, নতুন করে তৈরি করার দরকার হবে না। ফাংশন আপনাকে কোডের অংশগুলো একত্রিত করতে সাহায্য করে, যাতে আপনি সেগুলো আপনার প্রোগ্রামের বিভিন্ন জায়গায় পুনরায় ব্যবহার করতে পারেন। একই লজিক বারবার কপি-পেস্ট করার পরিবর্তে, আপনি একবার একটি ফাংশন তৈরি করতে পারেন এবং যখনই প্রয়োজন হয় তখন সেটি কল করতে পারেন। এই পদ্ধতি আপনার কোডকে সংগঠিত রাখে এবং আপডেট করা অনেক সহজ করে তোলে। এই পাঠে, আপনি শিখবেন কীভাবে নিজের ফাংশন তৈরি করবেন, তথ্য পাস করবেন এবং কার্যকর ফলাফল পাবেন। আপনি ফাংশন এবং মেথডের মধ্যে পার্থক্য বুঝতে পারবেন, আধুনিক সিনট্যাক্স পদ্ধতি শিখবেন এবং দেখবেন কীভাবে ফাংশন অন্য ফাংশনের সাথে কাজ করতে পারে। আমরা এই ধারণাগুলো ধাপে ধাপে তৈরি করব। [](https://youtube.com/watch?v=XgKsD6Zwvlc "মেথড এবং ফাংশন") ## ফাংশন একটি ফাংশন হলো একটি স্বতন্ত্র কোড ব্লক যা একটি নির্দিষ্ট কাজ সম্পন্ন করে। এটি এমন একটি লজিককে অন্তর্ভুক্ত করে যা আপনি যখনই প্রয়োজন মনে করবেন তখনই কার্যকর করতে পারবেন। আপনার প্রোগ্রামের বিভিন্ন জায়গায় একই কোড বারবার লিখার পরিবর্তে, আপনি এটি একটি ফাংশনে প্যাকেজ করতে পারেন এবং যখনই প্রয়োজন হয় তখন সেই ফাংশনটি কল করতে পারেন। এই পদ্ধতি আপনার কোডকে পরিষ্কার রাখে এবং আপডেট করা অনেক সহজ করে তোলে। কল্পনা করুন, যদি আপনাকে আপনার কোডবেসের ২০টি ভিন্ন স্থানে ছড়িয়ে থাকা লজিক পরিবর্তন করতে হয়, তাহলে কতটা কঠিন হবে। আপনার ফাংশনগুলোর নামকরণ বর্ণনামূলক হওয়া অত্যন্ত গুরুত্বপূর্ণ। একটি ভালো নামকরণ করা ফাংশন তার উদ্দেশ্য স্পষ্টভাবে প্রকাশ করে – যেমন আপনি যখন cancelTimer() দেখেন, তখন আপনি সহজেই বুঝতে পারেন এটি কী করে, ঠিক যেমন একটি স্পষ্টভাবে লেবেলযুক্ত বোতাম আপনাকে বলে দেয় এটি ক্লিক করলে কী হবে। ## ফাংশন তৈরি এবং কল করা চলুন দেখি কীভাবে একটি ফাংশন তৈরি করা যায়। সিনট্যাক্স একটি নির্দিষ্ট প্যাটার্ন অনুসরণ করে: এটি ভেঙে দেখি: - function কীওয়ার্ডটি জাভাস্ক্রিপ্টকে বলে "এই যে, আমি একটি ফাংশন তৈরি করছি!" - nameOfFunction হলো যেখানে আপনি আপনার ফাংশনকে একটি বর্ণনামূলক নাম দেন - বন্ধনী () হলো যেখানে আপনি প্যারামিটার যোগ করতে পারেন (আমরা শীঘ্রই এটি নিয়ে আলোচনা করব) - কার্লি ব্রেস {} হলো যেখানে ফাংশন কল করার সময় কার্যকর হওয়া কোড থাকে চলুন একটি সাধারণ অভিবাদন ফাংশন তৈরি করি এবং এটি কীভাবে কাজ করে তা দেখি: এই ফাংশনটি কনসোলে "Hello, world!" প্রিন্ট করে। একবার আপনি এটি সংজ্ঞায়িত করলে, আপনি এটি যতবার প্রয়োজন ততবার ব্যবহার করতে পারবেন। আপনার ফাংশন কার্যকর করতে (অথবা "কল" করতে), এর নাম লিখুন এবং তারপরে বন্ধনী যোগ করুন। জাভাস্ক্রিপ্ট আপনাকে ফাংশনটি কল করার আগে বা পরে সংজ্ঞায়িত করতে দেয় – জাভাস্ক্রিপ্ট ইঞ্জিন কার্যকর করার ক্রম পরিচালনা করবে। যখন আপনি এই লাইনটি চালান, এটি আপনার displayGreeting ফাংশনের ভিতরের সমস্ত কোড কার্যকর করে, কনসোলে "Hello, world!" প্রদর্শন করে। আপনি এই ফাংশনটি বারবার কল করতে পারবেন। ### 🧠 ফাংশনের মৌলিক বিষয় চেক: আপনার প্রথম ফাংশন তৈরি করা চলুন দেখি আপনি মৌলিক ফাংশন সম্পর্কে কেমন অনুভব করছেন: - আপনি ব্যাখ্যা করতে পারবেন কেন ফাংশন সংজ্ঞায়নে কার্লি ব্রেস {} ব্যবহার করা হয়? - যদি আপনি displayGreeting বন্ধনী ছাড়া লিখেন তাহলে কী হবে? - কেন আপনি একই ফাংশন বারবার কল করতে চাইতে পারেন? ### ফাংশন লেখার সেরা পদ্ধতি ফাংশন লেখার জন্য কিছু টিপস: - আপনার ফাংশনের নাম স্পষ্ট এবং বর্ণনামূলক রাখুন – ভবিষ্যতে আপনি নিজেই এর জন্য কৃতজ্ঞ থাকবেন! - camelCasing ব্যবহার করুন বহু-শব্দের নামের জন্য (যেমন calculateTotal এর পরিবর্তে calculate_total) - প্রতিটি ফাংশনকে একটি কাজ ভালোভাবে সম্পন্ন করার জন্য ফোকাস করুন ## ফাংশনে তথ্য পাস করা আমাদের displayGreeting ফাংশন সীমিত – এটি সবার জন্য শুধুমাত্র "Hello, world!" প্রদর্শন করতে পারে। প্যারামিটার আমাদের ফাংশনগুলোকে আরও নমনীয় এবং কার্যকর করে তোলে। প্যারামিটার হলো প্লেসহোল্ডার যেখানে আপনি প্রতিবার ফাংশন ব্যবহার করার সময় বিভিন্ন মান প্রবেশ করাতে পারেন। এইভাবে, একই ফাংশন প্রতিবার ভিন্ন তথ্যের সাথে কাজ করতে পারে। আপনি যখন আপনার ফাংশন সংজ্ঞায়িত করেন তখন প্যারামিটারগুলো বন্ধনীর ভিতরে তালিকাভুক্ত করেন, একাধিক প্যারামিটার কমা দিয়ে আলাদা করেন: প্রতিটি প্যারামিটার একটি প্লেসহোল্ডারের মতো কাজ করে – যখন কেউ আপনার ফাংশন কল করে, তারা প্রকৃত মান সরবরাহ করবে যা এই জায়গাগুলোতে প্রবেশ করবে। চলুন আমাদের অভিবাদন ফাংশন আপডেট করি যাতে এটি কারও নাম গ্রহণ করতে পারে: দেখুন আমরা কীভাবে ব্যাকটিকস (` `) এবং ${}` ব্যবহার করছি নামটি সরাসরি আমাদের বার্তায় প্রবেশ করাতে – এটিকে টেমপ্লেট লিটারাল বলা হয়, এবং এটি ভেরিয়েবল মিশ্রিত করে স্ট্রিং তৈরি করার একটি খুবই সুবিধাজনক উপায়। এখন যখন আমরা আমাদের ফাংশন কল করি, আমরা যেকোনো নাম পাস করতে পারি: জাভাস্ক্রিপ্ট স্ট্রিং 'Christopher' নেয়, এটি name প্যারামিটারে অ্যাসাইন করে এবং ব্যক্তিগত বার্তা "Hello, Christopher!" তৈরি করে। ## ডিফল্ট মান যদি আমরা কিছু প্যারামিটারকে ঐচ্ছিক করতে চাই, তাহলে ডিফল্ট মান খুবই কার্যকর! ধরুন আমরা চাই যে মানুষ অভিবাদন শব্দটি কাস্টমাইজ করতে পারুক, কিন্তু যদি তারা কোনো নির্দিষ্ট শব্দ উল্লেখ না করে, তাহলে আমরা "Hello" ব্যবহার করব। আপনি ডিফল্ট মান সেট করতে পারেন সমান চিহ্ন ব্যবহার করে, ঠিক যেমন একটি ভেরিয়েবল সেট করা হয়: এখানে, name এখনও প্রয়োজনীয়, কিন্তু salutation এর একটি ব্যাকআপ মান 'Hello' আছে যদি কেউ ভিন্ন অভিবাদন সরবরাহ না করে। এখন আমরা এই ফাংশনটি দুটি ভিন্ন উপায়ে কল করতে পারি: প্রথম কলের ক্ষেত্রে, জাভাস্ক্রিপ্ট ডিফল্ট "Hello" ব্যবহার করে কারণ আমরা কোনো অভিবাদন উল্লেখ করিনি। দ্বিতীয় কলের ক্ষেত্রে, এটি আমাদের কাস্টম "Hi" ব্যবহার করে। এই নমনীয়তা ফাংশনগুলোকে বিভিন্ন পরিস্থিতিতে মানিয়ে নিতে সাহায্য করে। ### 🎛️ প্যারামিটার মাস্টারি চেক: ফাংশনগুলোকে নমনীয় করা আপনার প্যারামিটার বোঝার পরীক্ষা করুন: - প্যারামিটার এবং আর্গুমেন্টের মধ্যে পার্থক্য কী? - বাস্তব জীবনের প্রোগ্রামিংয়ে ডিফল্ট মান কেন কার্যকর? - যদি আপনি প্যারামিটারের চেয়ে বেশি আর্গুমেন্ট পাস করেন তাহলে কী হবে তা অনুমান করতে পারেন? - [ ] একটি প্রচলিত ফাংশনকে অ্যারো ফাংশন সিনট্যাক্সে রূপান্তর করার চেষ্টা করুন - [ ] চ্যালেঞ্জটি অনুশীলন করুন: ফাংশন এবং মেথডের মধ্যে পার্থক্য ব্যাখ্যা করুন ### 🎯 এই ঘণ্টায় আপনি যা অর্জন করতে পারেন - [ ] পোস্ট-লেসন কুইজ সম্পন্ন করুন এবং যেকোনো বিভ্রান্তিকর ধারণা পর্যালোচনা করুন - [ ] GitHub Copilot চ্যালেঞ্জ থেকে গণিত ইউটিলিটি লাইব্রেরি তৈরি করুন - [ ] এমন একটি ফাংশন তৈরি করুন যা অন্য একটি ফাংশনকে প্যারামিটার হিসেবে ব্যবহার করে - [ ] ডিফল্ট প্যারামিটার সহ ফাংশন লেখার অনুশীলন করুন - [ ] ফাংশনের রিটার্ন মানে টেমপ্লেট লিটারাল ব্যবহার করে পরীক্ষা করুন ### 📅 আপনার সপ্তাহব্যাপী ফাংশন দক্ষতা - [ ] সৃজনশীলতার সাথে "Fun with Functions" অ্যাসাইনমেন্ট সম্পন্ন করুন - [ ] আপনার লেখা কিছু পুনরাবৃত্তিমূলক কোডকে পুনরায় ব্যবহারযোগ্য ফাংশনে রিফ্যাক্টর করুন - [ ] শুধুমাত্র ফাংশন ব্যবহার করে একটি ছোট ক্যালকুলেটর তৈরি করুন (কোনো গ্লোবাল ভেরিয়েবল নয়) - [ ] map() এবং filter() এর মতো অ্যারে মেথডের সাথে অ্যারো ফাংশন অনুশীলন করুন - [ ] সাধারণ কাজের জন্য ইউটিলিটি ফাংশনের একটি সংগ্রহ তৈরি করুন - [ ] উচ্চ-স্তরের ফাংশন এবং ফাংশনাল প্রোগ্রামিং ধারণাগুলি অধ্যয়ন করুন ### 🌟 আপনার মাসব্যাপী রূপান্তর - [ ] ক্লোজার এবং স্কোপের মতো উন্নত ফাংশন ধারণাগুলি আয়ত্ত করুন - [ ] ফাংশন কম্পোজিশন ব্যাপকভাবে ব্যবহার করে একটি প্রকল্প তৈরি করুন - [ ] ওপেন সোর্সে অবদান রাখুন ফাংশন ডকুমেন্টেশন উন্নত করে - [ ] অন্য কাউকে ফাংশন এবং বিভিন্ন সিনট্যাক্স স্টাইল সম্পর্কে শেখান - [ ] জাভাস্ক্রিপ্টে ফাংশনাল প্রোগ্রামিং প্যারাডাইমগুলি অন্বেষণ করুন - [ ] ভবিষ্যতের প্রকল্পগুলির জন্য পুনরায় ব্যবহারযোগ্য ফাংশনের একটি ব্যক্তিগত লাইব্রেরি তৈরি করুন ### 🏆 ফাইনাল ফাংশন চ্যাম্পিয়ন চেক-ইন আপনার ফাংশন দক্ষতা উদযাপন করুন: - এখন পর্যন্ত আপনি সবচেয়ে উপযোগী কোন ফাংশনটি তৈরি করেছেন? - ফাংশন সম্পর্কে শেখার ফলে কোড সংগঠনের বিষয়ে আপনার চিন্তাভাবনা কীভাবে পরিবর্তিত হয়েছে? - আপনি কোন ফাংশন সিনট্যাক্স পছন্দ করেন এবং কেন? - কোন বাস্তব সমস্যাটি আপনি একটি ফাংশন লিখে সমাধান করবেন? --- অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী থাকব না।

web,development

জাভাস্ক্রিপ্টের মৌলিক বিষয়: সিদ্ধান্ত গ্রহণ

আপনি কি কখনও ভেবেছেন কীভাবে অ্যাপ্লিকেশনগুলো বুদ্ধিমত্তার সাথে সিদ্ধান্ত নেয়? যেমন একটি নেভিগেশন সিস্টেম কীভাবে দ্রুততম পথ নির্বাচন করে, অথবা একটি থার্মোস্ট্যাট কীভাবে তাপ চালু করার সিদ্ধান্ত নেয়? এটি প্রোগ্রামিংয়ে সিদ্ধান্ত গ্রহণের মৌলিক ধারণা। যেমন চার্লস ব্যাবেজের অ্যানালিটিক্যাল ইঞ্জিন বিভিন্ন শর্তের উপর ভিত্তি করে বিভিন্ন অপারেশনের ক্রম অনুসরণ করার জন্য ডিজাইন করা হয়েছিল, আধুনিক জাভাস্ক্রিপ্ট প্রোগ্রামগুলোকেও বিভিন্ন পরিস্থিতির উপর ভিত্তি করে পছন্দ করতে হয়। এই শাখা এবং সিদ্ধান্ত নেওয়ার ক্ষমতা স্থির কোডকে প্রতিক্রিয়াশীল, বুদ্ধিমান অ্যাপ্লিকেশনে রূপান্তরিত করে। এই পাঠে, আপনি আপনার প্রোগ্রামে শর্তযুক্ত যুক্তি বাস্তবায়ন করতে শিখবেন। আমরা শর্তযুক্ত বিবৃতি, তুলনা অপারেটর এবং যৌক্তিক অভিব্যক্তি অন্বেষণ করব যা আপনার কোডকে পরিস্থিতি মূল্যায়ন করতে এবং উপযুক্তভাবে প্রতিক্রিয়া জানাতে সক্ষম করে। ## প্রাক-লেকচার কুইজ প্রাক-লেকচার কুইজ সিদ্ধান্ত নেওয়ার এবং প্রোগ্রাম প্রবাহ নিয়ন্ত্রণ করার ক্ষমতা প্রোগ্রামিংয়ের একটি মৌলিক দিক। এই অংশটি আপনার জাভাস্ক্রিপ্ট প্রোগ্রামের কার্যকরী পথ নিয়ন্ত্রণ করার জন্য বুলিয়ান মান এবং শর্তযুক্ত যুক্তি ব্যবহার করার পদ্ধতি কভার করে। [](https://youtube.com/watch?v=SxTp8j-fMMY "সিদ্ধান্ত গ্রহণ") ## বুলিয়ান সম্পর্কে সংক্ষিপ্ত পুনরালোচনা সিদ্ধান্ত গ্রহণ অন্বেষণ করার আগে, আসুন আমাদের পূর্ববর্তী পাঠ থেকে বুলিয়ান মানগুলোর দিকে ফিরে তাকাই। গণিতবিদ জর্জ বুলের নামে নামকরণ করা, এই মানগুলো বাইনারি অবস্থান উপস্থাপন করে – হয় true অথবা false। এখানে কোনো অস্পষ্টতা নেই, কোনো মধ্যবর্তী অবস্থান নেই। এই বাইনারি মানগুলো সমস্ত গণনামূলক যুক্তির ভিত্তি গঠন করে। আপনার প্রোগ্রাম যে কোনো সিদ্ধান্ত নেয় তা শেষ পর্যন্ত একটি বুলিয়ান মূল্যায়নে নেমে আসে। বুলিয়ান ভেরিয়েবল তৈরি করা সহজ: এটি দুটি ভেরিয়েবল তৈরি করে যেগুলোতে স্পষ্ট বুলিয়ান মান রয়েছে। ✅ বুলিয়ান মানগুলো ইংরেজ গণিতবিদ, দার্শনিক এবং যুক্তিবিদ জর্জ বুল (১৮১৫–১৮৬৪) এর নামে নামকরণ করা হয়েছে। ## তুলনা অপারেটর এবং বুলিয়ান বাস্তবে, আপনি খুব কমই ম্যানুয়ালি বুলিয়ান মান সেট করবেন। পরিবর্তে, আপনি শর্ত মূল্যায়ন করে সেগুলো তৈরি করবেন: "এই সংখ্যাটি কি ঐ সংখ্যার চেয়ে বড়?" অথবা "এই মানগুলো কি সমান?" তুলনা অপারেটরগুলো এই মূল্যায়নগুলো সক্ষম করে। এগুলো মানগুলো তুলনা করে এবং অপারেন্ডগুলোর সম্পর্কের উপর ভিত্তি করে বুলিয়ান ফলাফল প্রদান করে। ✅ আপনার জ্ঞান পরীক্ষা করুন ব্রাউজারের কনসোলে কিছু তুলনা লিখে। কোনো ফেরত দেওয়া ডেটা কি আপনাকে অবাক করেছে? ### 🧠 তুলনা দক্ষতা পরীক্ষা: বুলিয়ান যুক্তি বোঝা আপনার তুলনা বোঝার পরীক্ষা করুন: - কেন আপনি মনে করেন === (কঠোর সমতা) সাধারণত == (শিথিল সমতা) এর চেয়ে বেশি পছন্দ করা হয়? - আপনি কি অনুমান করতে পারেন 5 === '5' কী ফেরত দেয়? আর 5 == '5' কী? - !== এবং != এর মধ্যে পার্থক্য কী? ## If Statement if স্টেটমেন্টটি আপনার কোডে একটি প্রশ্ন জিজ্ঞাসা করার মতো। "যদি এই শর্তটি সত্য হয়, তবে এই কাজটি করুন।" এটি সম্ভবত জাভাস্ক্রিপ্টে সিদ্ধান্ত নেওয়ার জন্য আপনি সবচেয়ে গুরুত্বপূর্ণ টুল ব্যবহার করবেন। এটি কীভাবে কাজ করে: শর্তটি বন্ধনীর ভিতরে যায়, এবং যদি এটি true হয়, তাহলে জাভাস্ক্রিপ্ট কোডটি কার্লি ব্রেসের ভিতরে চালায়। যদি এটি false হয়, তাহলে জাভাস্ক্রিপ্ট পুরো ব্লকটি এড়িয়ে যায়। আপনি প্রায়ই এই শর্তগুলো তৈরি করতে তুলনা অপারেটর ব্যবহার করবেন। চলুন একটি বাস্তব উদাহরণ দেখি: যেহেতু 1000 >= 800 true হিসেবে মূল্যায়ন করে, ব্লকের ভিতরের কোডটি কার্যকর হয়, কনসোলে "Getting a new laptop!" প্রদর্শন করে। ## If..Else Statement কিন্তু যদি আপনি চান আপনার প্রোগ্রাম শর্তটি মিথ্যা হলে কিছু ভিন্ন কাজ করুক? তখন else আসে – এটি একটি ব্যাকআপ পরিকল্পনা থাকার মতো। else স্টেটমেন্ট আপনাকে একটি উপায় দেয় বলার জন্য "যদি এই শর্তটি সত্য না হয়, তবে এই অন্য কাজটি করুন।" এখন যেহেতু 500 >= 800 false, জাভাস্ক্রিপ্ট প্রথম ব্লকটি এড়িয়ে যায় এবং পরিবর্তে else ব্লকটি চালায়। আপনি কনসোলে "Can't afford a new laptop, yet!" দেখতে পাবেন। ✅ এই কোড এবং পরবর্তী কোডটি ব্রাউজারের কনসোলে চালিয়ে আপনার বোঝার পরীক্ষা করুন। বর্তমানMoney এবং laptopPrice ভেরিয়েবলের মান পরিবর্তন করুন console.log() এর ফেরত দেওয়া মান পরিবর্তন করতে। ### 🎯 If-Else লজিক পরীক্ষা: শাখা পথ আপনার শর্তযুক্ত লজিক বোঝার মূল্যায়ন করুন: - কী ঘটে যদি currentMoney ঠিক laptopPrice এর সমান হয়? - আপনি কি একটি বাস্তব জীবনের পরিস্থিতি ভাবতে পারেন যেখানে if-else লজিকটি কার্যকর হবে? - আপনি কীভাবে এটি একাধিক মূল্য পরিসর পরিচালনা করতে প্রসারিত করবেন? ## Switch Statement কখনও কখনও আপনাকে এক মানকে একাধিক বিকল্পের সাথে তুলনা করতে হয়। যদিও আপনি একাধিক if..else স্টেটমেন্ট চেইন করতে পারেন, এই পদ্ধতিটি অগোছালো হয়ে যায়। switch স্টেটমেন্ট একাধিক নির্দিষ্ট মান পরিচালনার জন্য একটি পরিষ্কার কাঠামো প্রদান করে। এই ধারণাটি প্রাথমিক টেলিফোন এক্সচেঞ্জে ব্যবহৃত যান্ত্রিক সুইচিং সিস্টেমের মতো – একটি ইনপুট মান নির্ধারণ করে কোন নির্দিষ্ট পথটি কার্যকর হবে। এটি কীভাবে গঠিত: - জাভাস্ক্রিপ্ট একবার অভিব্যক্তিটি মূল্যায়ন করে - এটি প্রতিটি case এর মধ্য দিয়ে যায় একটি মিল খুঁজে পেতে - যখন এটি একটি মিল খুঁজে পায়, এটি সেই কোড ব্লকটি চালায় - break জাভাস্ক্রিপ্টকে থামতে এবং সুইচ থেকে বেরিয়ে যেতে বলে - যদি কোনো কেস মিলে না যায়, এটি default ব্লকটি চালায় (যদি আপনার থাকে) এই উদাহরণে, জাভাস্ক্রিপ্ট দেখে যে dayNumber হল 2, মিলে যাওয়া case 2 খুঁজে পায়, dayName কে "Tuesday" সেট করে এবং তারপর সুইচ থেকে বেরিয়ে যায়। ফলাফল? "Today is Tuesday" কনসোলে লগ হয়। ✅ এই কোড এবং পরবর্তী কোডটি ব্রাউজারের কনসোলে চালিয়ে আপনার বোঝার পরীক্ষা করুন। ভেরিয়েবল a এর মান পরিবর্তন করুন console.log() এর ফেরত দেওয়া মান পরিবর্তন করতে। ### 🔄 Switch Statement দক্ষতা: একাধিক বিকল্প আপনার switch বোঝার পরীক্ষা করুন: - কী ঘটে যদি আপনি একটি break স্টেটমেন্ট ভুলে যান? - কখন আপনি একাধিক if-else স্টেটমেন্টের পরিবর্তে switch ব্যবহার করবেন? - কেন default কেসটি কার্যকর, যদিও আপনি মনে করেন আপনি সমস্ত সম্ভাবনা কভার করেছেন? ## যৌক্তিক অপারেটর এবং বুলিয়ান জটিল সিদ্ধান্ত প্রায়ই একাধিক শর্ত একসাথে মূল্যায়ন করার প্রয়োজন হয়। যেমন বুলিয়ান অ্যালজেব্রা গণিতবিদদের যৌক্তিক অভিব্যক্তি একত্রিত করতে দেয়, প্রোগ্রামিং যৌক্তিক অপারেটর প্রদান করে একাধিক বুলিয়ান শর্ত সংযোগ করতে। এই অপারেটরগুলো সহজ true/false মূল্যায়নগুলো একত্রিত করে জটিল শর্তযুক্ত লজিক সক্ষম করে। এই অপারেটরগুলো আপনাকে শর্তগুলো কার্যকরভাবে একত্রিত করতে দেয়: - AND (&&) মানে উভয় শর্তই সত্য হতে হবে - OR (||) মানে অন্তত একটি শর্ত সত্য হতে হবে - NOT (!) সত্যকে মিথ্যা এবং মিথ্যাকে সত্যে পরিবর্তন করে ## যৌক্তিক অপারেটর দিয়ে শর্ত এবং সিদ্ধান্ত চলুন এই যৌক্তিক অপারেটরগুলো একটি আরও বাস্তব উদাহরণে দেখি: এই উদাহরণে: আমরা ২০% ডিসকাউন্ট মূল্য (৬৪০) গণনা করি, তারপর মূল্যায়ন করি আমাদের উপলব্ধ তহবিল সম্পূর্ণ মূল্য অথবা ডিসকাউন্ট মূল্যের মধ্যে কোনো একটিকে কভার করে কিনা। যেহেতু ৬০০ ডিসকাউন্ট মূল্যের থ্রেশহোল্ড ৬৪০ পূরণ করে, শর্তটি true হিসেবে মূল্যায়ন করে। ### 🧮 যৌক্তিক অপারেটর পরীক্ষা: শর্তগুলো একত্রিত করা আপনার যৌক্তিক অপারেটর বোঝার পরীক্ষা করুন: - অভিব্যক্তি A && B এ, যদি A মিথ্যা হয়, তাহলে কি B মূল্যায়ন করা হয়? - আপনি কি এমন একটি পরিস্থিতি ভাবতে পারেন যেখানে আপনি তিনটি অপারেটর (&&, ||, !) একসাথে ব্যবহার করবেন? - !user.isActive এবং user.isActive !== true এর মধ্যে পার্থক্য কী? ### নেগেশন অপারেটর কখনও কখনও কিছু সত্য নয় এমন সময় ভাবা সহজ হয়। যেমন "ব্যবহারকারী লগ ইন করেছেন?" জিজ্ঞাসা করার পরিবর্তে, আপনি "ব্যবহারকারী লগ ইন করেননি?" জিজ্ঞাসা করতে পারেন। বিস্ময় চিহ্ন (!) অপারেটর আপনার জন্য লজিকটি উল্টে দেয়। ! অপারেটরটি "এর বিপরীত..." বলার মতো – যদি কিছু true হয়, ! এটিকে false করে এবং এর বিপরীতে। ### টার্নারি অভিব্যক্তি সরল শর্তযুক্ত অ্যাসাইনমেন্টের জন্য, জাভাস্ক্রিপ্ট টার্নারি অপারেটর প্রদান করে। এই সংক্ষিপ্ত সিনট্যাক্স আপনাকে একটি শর্তযুক্ত অভিব্যক্তি এক লাইনে লিখতে দেয়, যখন আপনি একটি শর্তের উপর ভিত্তি করে দুটি মানের মধ্যে একটি অ্যাসাইন করতে চান তখন এটি কার্যকর। এটি একটি প্রশ্নের মতো পড়ে: "এই শর্তটি সত্য? যদি হ্যাঁ, এই মানটি ব্যবহার করুন। যদি না হয়, ঐ মানটি ব্যবহার করুন।" নিচে একটি আরও স্পষ্ট উদাহরণ: ✅ এই কোডটি কয়েকবার পড়ুন। আপনি কি বুঝতে পারছেন এই অপারেটরগুলো কীভাবে কাজ করছে? এই লাইনটি যা বলছে তা হলো: "firstNumber কি secondNumber এর চেয়ে বড়? যদি হ্যাঁ, firstNumber কে biggestNumber এ রাখুন। যদি না হয়, secondNumber কে biggestNumber এ রাখুন।" টার্নারি অপারেটরটি এই ঐতিহ্যবাহী if..else স্টেটমেন্টটি লেখার একটি সংক্ষিপ্ত উপায় মাত্র: উভয় পদ্ধতিই অভিন্ন ফলাফল তৈরি করে। টার্নারি অপারেটর সংক্ষিপ্ততা প্রদান করে, যখন ঐতিহ্যবাহী if-else কাঠামো জটিল শর্তের জন্য আরও পাঠযোগ্য হতে পারে। --- ## 🚀 চ্যালেঞ্জ প্রথমে যৌক্তিক অপারেটর দিয়ে একটি প্রোগ্রাম তৈরি করুন, এবং তারপর এটি একটি টার্নারি অভিব্যক্তি ব্যবহার করে পুনরায় লিখুন। কোন সিনট্যাক্সটি আপনার পছন্দ? --- ## GitHub Copilot Agent চ্যালেঞ্জ 🚀 Agent মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জটি সম্পূর্ণ করুন: বর্ণনা: এই পাঠ থেকে একাধিক সিদ্ধান্ত গ্রহণের ধারণা প্রদর্শন করে একটি বিস্তৃত গ্রেড ক্যালকুলেটর তৈরি করুন, যার মধ্যে if-else স্টেটমেন্ট, switch স্টেটমেন্ট, যৌক্তিক অপারেটর এবং টার্নারি অভিব্যক্তি অন্তর্ভুক্ত থাকবে। প্রম্পট: একটি জাভাস্ক্রিপ্ট প্রোগ্রাম লিখুন যা একটি শিক্ষার্থীর 2. লজিক্যাল অপারেটর ব্যবহার করে পরীক্ষা করুন ছাত্রটি পাশ করেছে (grade >= 60) এবং সম্মান পেয়েছে (grade >= 90) কিনা। 3. একটি সুইচ স্টেটমেন্ট ব্যবহার করে প্রতিটি লেটার গ্রেডের জন্য নির্দিষ্ট প্রতিক্রিয়া প্রদান করুন। 4. একটি টার্নারি অপারেটর ব্যবহার করে নির্ধারণ করুন ছাত্রটি পরবর্তী কোর্সের জন্য যোগ্য (grade >= 70) কিনা। 5. ইনপুট যাচাই অন্তর্ভুক্ত করুন যাতে স্কোর 0 থেকে 100 এর মধ্যে থাকে। আপনার প্রোগ্রামটি বিভিন্ন স্কোর দিয়ে পরীক্ষা করুন, যেমন 59, 60, 89, 90 এবং অকার্যকর ইনপুট। agent mode সম্পর্কে আরও জানুন। ## পোস্ট-লেকচার কুইজ পোস্ট-লেকচার কুইজ ## পর্যালোচনা এবং স্ব-অধ্যয়ন ব্যবহারকারীর জন্য উপলব্ধ বিভিন্ন অপারেটর সম্পর্কে আরও পড়ুন MDN-এ। জোশ কমাউয়ের অসাধারণ অপারেটর লুকআপ দেখুন! ## অ্যাসাইনমেন্ট অপারেটর --- ## 🧠 আপনার সিদ্ধান্ত গ্রহণের টুলকিট সারাংশ --- ## 🚀 আপনার জাভাস্ক্রিপ্ট সিদ্ধান্ত গ্রহণের দক্ষতার টাইমলাইন ### ⚡ আপনি পরবর্তী ৫ মিনিটে যা করতে পারেন - [ ] আপনার ব্রাউজার কনসোলে তুলনামূলক অপারেটর অনুশীলন করুন। - [ ] একটি সাধারণ if-else স্টেটমেন্ট লিখুন যা আপনার বয়স পরীক্ষা করে। - [ ] চ্যালেঞ্জটি চেষ্টা করুন: একটি if-else টার্নারি অপারেটর ব্যবহার করে পুনর্লিখন করুন। - [ ] বিভিন্ন "truthy" এবং "falsy" মান দিয়ে পরীক্ষা করুন। ### 🎯 আপনি এই ঘণ্টায় যা অর্জন করতে পারেন - [ ] পোস্ট-লেসন কুইজ সম্পন্ন করুন এবং কোনো বিভ্রান্তিকর ধারণা পর্যালোচনা করুন। - [ ] GitHub Copilot চ্যালেঞ্জ থেকে একটি সম্পূর্ণ গ্রেড ক্যালকুলেটর তৈরি করুন। - [ ] একটি বাস্তব জীবনের পরিস্থিতির জন্য একটি সাধারণ সিদ্ধান্ত গাছ তৈরি করুন (যেমন কী পরবেন তা নির্বাচন করা)। - [ ] লজিক্যাল অপারেটর দিয়ে একাধিক শর্ত একত্রিত করার অনুশীলন করুন। - [ ] বিভিন্ন ব্যবহারের জন্য সুইচ স্টেটমেন্ট নিয়ে পরীক্ষা করুন। ### 📅 আপনার সপ্তাহব্যাপী লজিক দক্ষতা অর্জন - [ ] সৃজনশীল উদাহরণ সহ অপারেটর অ্যাসাইনমেন্ট সম্পন্ন করুন। - [ ] বিভিন্ন শর্তমূলক কাঠামো ব্যবহার করে একটি মিনি কুইজ অ্যাপ্লিকেশন তৈরি করুন। - [ ] একাধিক ইনপুট শর্ত পরীক্ষা করার জন্য একটি ফর্ম ভ্যালিডেটর তৈরি করুন। - [ ] জোশ কমাউয়ের অপারেটর লুকআপ অনুশীলন করুন। - [ ] বিদ্যমান কোড পুনর্গঠন করুন যাতে আরও উপযুক্ত শর্তমূলক কাঠামো ব্যবহার করা যায়। - [ ] শর্ট-সার্কিট মূল্যায়ন এবং কর্মক্ষমতার প্রভাব অধ্যয়ন করুন। ### 🌟 আপনার মাসব্যাপী রূপান্তর - [ ] জটিল নেস্টেড শর্তগুলো দক্ষতার সাথে পরিচালনা করুন এবং কোডের পাঠযোগ্যতা বজায় রাখুন। - [ ] উন্নত সিদ্ধান্ত গ্রহণের লজিক সহ একটি অ্যাপ্লিকেশন তৈরি করুন। - [ ] বিদ্যমান প্রকল্পে শর্তমূলক লজিক উন্নত করে ওপেন সোর্সে অবদান রাখুন। - [ ] বিভিন্ন শর্তমূলক কাঠামো এবং কখন কোনটি ব্যবহার করবেন তা নিয়ে অন্য কাউকে শেখান। - [ ] শর্তমূলক লজিকের জন্য ফাংশনাল প্রোগ্রামিং পদ্ধতি অন্বেষণ করুন। - [ ] শর্তমূলক সেরা অনুশীলনের জন্য একটি ব্যক্তিগত রেফারেন্স গাইড তৈরি করুন। ### 🏆 চূড়ান্ত সিদ্ধান্ত গ্রহণের চ্যাম্পিয়ন চেক-ইন আপনার লজিক্যাল চিন্তার দক্ষতা উদযাপন করুন: - আপনি সফলভাবে বাস্তবায়িত সবচেয়ে জটিল সিদ্ধান্ত লজিক কী? - কোন শর্তমূলক কাঠামো আপনার কাছে সবচেয়ে স্বাভাবিক মনে হয় এবং কেন? - লজিক্যাল অপারেটর সম্পর্কে শেখা কীভাবে আপনার সমস্যা সমাধানের পদ্ধতি পরিবর্তন করেছে? - কোন বাস্তব জীবনের অ্যাপ্লিকেশন উন্নত সিদ্ধান্ত গ্রহণের লজিক থেকে উপকৃত হবে? --- অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।

web,development

জাভাস্ক্রিপ্টের বেসিক: অ্যারে এবং লুপ

## লেকচারের আগে কুইজ লেকচারের আগে কুইজ কখনো ভেবেছেন কীভাবে ওয়েবসাইটগুলো শপিং কার্টের আইটেমগুলো ট্র্যাক করে বা আপনার বন্ধু তালিকা দেখায়? এখানেই অ্যারে এবং লুপের প্রয়োজন হয়। অ্যারে হলো ডিজিটাল কন্টেইনার যা একাধিক তথ্য ধারণ করে, আর লুপ আপনাকে সেই তথ্যগুলো দক্ষতার সাথে কাজ করতে সাহায্য করে, বারবার কোড লেখার প্রয়োজন ছাড়াই। এই দুটি ধারণা একসাথে আপনার প্রোগ্রামে তথ্য পরিচালনার ভিত্তি তৈরি করে। আপনি শিখবেন কীভাবে প্রতিটি ধাপ ম্যানুয়ালি লিখার পরিবর্তে স্মার্ট, দক্ষ কোড তৈরি করবেন যা শত শত বা হাজার হাজার আইটেম দ্রুত প্রক্রিয়া করতে পারে। এই পাঠ শেষে, আপনি বুঝতে পারবেন কীভাবে জটিল তথ্য প্রক্রিয়া কয়েকটি কোড লাইনের মাধ্যমে সম্পন্ন করা যায়। চলুন এই গুরুত্বপূর্ণ প্রোগ্রামিং ধারণাগুলো অন্বেষণ করি। [](https://youtube.com/watch?v=1U4qTyq02Xw "অ্যারে") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "লুপ") ## অ্যারে অ্যারে হলো একটি ডিজিটাল ফাইলিং ক্যাবিনেটের মতো - যেখানে এক ড্রয়ারে এক ডকুমেন্ট সংরক্ষণ করার পরিবর্তে, আপনি একাধিক সম্পর্কিত আইটেম একটি কাঠামোবদ্ধ কন্টেইনারে সংরক্ষণ করতে পারেন। প্রোগ্রামিংয়ের ভাষায়, অ্যারে আপনাকে একাধিক তথ্য একসাথে সংরক্ষণ করতে সাহায্য করে। আপনি যদি একটি ফটো গ্যালারি তৈরি করেন, টু-ডু লিস্ট পরিচালনা করেন, বা গেমে উচ্চ স্কোর ট্র্যাক করেন, তাহলে অ্যারে তথ্য সংগঠনের ভিত্তি প্রদান করে। চলুন দেখি এটি কীভাবে কাজ করে। ✅ অ্যারে আমাদের চারপাশে সব জায়গায় রয়েছে! আপনি কি অ্যারের কোনো বাস্তব উদাহরণ ভাবতে পারেন, যেমন একটি সোলার প্যানেল অ্যারে? ### অ্যারে তৈরি করা অ্যারে তৈরি করা খুবই সহজ - শুধু স্কয়ার ব্র্যাকেট ব্যবহার করুন! এখানে কী ঘটছে? আপনি স্কয়ার ব্র্যাকেট [] ব্যবহার করে একটি খালি কন্টেইনার তৈরি করেছেন। এটি একটি খালি লাইব্রেরি শেলফের মতো - এটি প্রস্তুত আপনার পছন্দমতো বইগুলো সংগঠিত করে রাখার জন্য। আপনি চাইলে শুরু থেকেই আপনার অ্যারে কিছু মান দিয়ে পূরণ করতে পারেন: মজার বিষয়গুলো লক্ষ্য করুন: - আপনি একই অ্যারেতে টেক্সট, সংখ্যা, এমনকি সত্য/মিথ্যা মান সংরক্ষণ করতে পারেন - প্রতিটি আইটেমকে কমা দিয়ে আলাদা করুন - সহজ! - সম্পর্কিত তথ্য একসাথে রাখার জন্য অ্যারে আদর্শ ### অ্যারে ইনডেক্সিং এখানে একটি বিষয় প্রথমে অদ্ভুত মনে হতে পারে: অ্যারে তাদের আইটেমগুলোকে ০ থেকে নম্বর দেয়, ১ থেকে নয়। এই জিরো-বেসড ইনডেক্সিং কম্পিউটার মেমোরি কাজ করার পদ্ধতির সাথে সম্পর্কিত - এটি প্রোগ্রামিংয়ের একটি প্রচলিত নিয়ম যা C এর মতো প্রাচীন ভাষা থেকে এসেছে। অ্যারের প্রতিটি স্থানে একটি নিজস্ব ঠিকানা নম্বর থাকে, যাকে ইনডেক্স বলা হয়। ✅ আপনাকে কি অবাক করে যে অ্যারে ০ ইনডেক্স থেকে শুরু হয়? কিছু প্রোগ্রামিং ভাষায় ইনডেক্স ১ থেকে শুরু হয়। এর একটি আকর্ষণীয় ইতিহাস রয়েছে, যা আপনি উইকিপিডিয়ায় পড়তে পারেন। অ্যারের উপাদান অ্যাক্সেস করা: এখানে কী ঘটছে তা ভেঙে দেখা: - ব্যবহার করে স্কয়ার ব্র্যাকেট নোটেশন ইনডেক্স নম্বর দিয়ে উপাদান অ্যাক্সেস করতে - ফিরিয়ে দেয় নির্দিষ্ট অবস্থানে সংরক্ষিত মান - শুরু করে ০ থেকে গণনা, প্রথম উপাদান ইনডেক্স ০ অ্যারের উপাদান পরিবর্তন করা: উপরের উদাহরণে আমরা: - পরিবর্তন করেছি ইনডেক্স ৪ এর উপাদান "Rocky Road" থেকে "Butter Pecan" - যোগ করেছি নতুন উপাদান "Cookie Dough" ইনডেক্স ৫ এ - স্বয়ংক্রিয়ভাবে অ্যারের দৈর্ঘ্য বৃদ্ধি করেছি বর্তমান সীমার বাইরে যোগ করার সময় ### অ্যারের দৈর্ঘ্য এবং সাধারণ মেথড অ্যারে এমন কিছু বিল্ট-ইন প্রপার্টি এবং মেথড নিয়ে আসে যা তথ্য নিয়ে কাজ করা সহজ করে তোলে। অ্যারের দৈর্ঘ্য খুঁজে বের করা: মনে রাখার গুরুত্বপূর্ণ বিষয়: - ফিরিয়ে দেয় অ্যারের মোট উপাদানের সংখ্যা - স্বয়ংক্রিয়ভাবে আপডেট হয় যখন উপাদান যোগ বা সরানো হয় - প্রদান করে একটি ডায়নামিক গণনা যা লুপ এবং যাচাইয়ের জন্য উপযোগী অ্যারের গুরুত্বপূর্ণ মেথড: এই মেথডগুলো বুঝুন: - যোগ করে push() (শেষে) এবং unshift() (শুরুতে) - সরায় pop() (শেষে) এবং shift() (শুরুতে) - সনাক্ত করে indexOf() দিয়ে এবং includes() দিয়ে উপস্থিতি যাচাই করে - ফিরিয়ে দেয় উপযোগী মান যেমন সরানো উপাদান বা অবস্থান ইনডেক্স ✅ নিজে চেষ্টা করুন! আপনার ব্রাউজারের কনসোলে একটি অ্যারে তৈরি করুন এবং সেটি নিয়ে কাজ করুন। ### 🧠 অ্যারের মৌলিক বিষয় যাচাই: আপনার তথ্য সংগঠিত করা আপনার অ্যারে বোঝার পরীক্ষা করুন: - কেন আপনি মনে করেন অ্যারে ০ থেকে গণনা শুরু করে ১ থেকে নয়? - যদি আপনি এমন একটি ইনডেক্স অ্যাক্সেস করার চেষ্টা করেন যা নেই (যেমন arr[100] একটি ৫-উপাদানের অ্যারে), তাহলে কী হবে? - তিনটি বাস্তব জীবনের পরিস্থিতি ভাবুন যেখানে অ্যারে উপযোগী হতে পারে। ## লুপ চার্লস ডিকেন্সের উপন্যাসে বিখ্যাত শাস্তি যেখানে ছাত্রদের বারবার স্লেটে লাইন লিখতে হতো, সেটি ভাবুন। কল্পনা করুন যদি আপনি কাউকে বলতে পারেন "এই বাক্যটি ১০০ বার লিখুন" এবং এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। লুপ ঠিক এটাই করে আপনার কোডের জন্য। লুপ হলো এমন একটি tireless সহকারী যা কাজগুলো বারবার ভুল ছাড়াই সম্পন্ন করতে পারে। আপনি যদি শপিং কার্টের প্রতিটি আইটেম পরীক্ষা করতে চান বা অ্যালবামের সব ফটো প্রদর্শন করতে চান, তাহলে লুপ দক্ষতার সাথে পুনরাবৃত্তি পরিচালনা করে। জাভাস্ক্রিপ্টে বিভিন্ন ধরনের লুপ রয়েছে। চলুন প্রতিটি লুপ পরীক্ষা করি এবং কখন সেগুলো ব্যবহার করতে হয় তা বুঝি। ### ফর লুপ for লুপ হলো একটি টাইমার সেট করার মতো - আপনি জানেন ঠিক কতবার কিছু ঘটতে হবে। এটি খুবই সংগঠিত এবং পূর্বানুমানযোগ্য, যা এটিকে অ্যারে নিয়ে কাজ করার সময় বা কিছু গণনা করার জন্য আদর্শ করে তোলে। ফর লুপের কাঠামো: ধাপে ধাপে কী ঘটছে: - ইনিশিয়ালাইজ করে কাউন্টার ভেরিয়েবল i কে ০ দিয়ে শুরুতে - পরীক্ষা করে শর্ত i < 10 প্রতিটি পুনরাবৃত্তির আগে - কোড ব্লক সম্পাদন করে যখন শর্ত সত্য হয় - ইনক্রিমেন্ট করে i কে প্রতিটি পুনরাবৃত্তির পরে i++ দিয়ে - থামে যখন শর্ত মিথ্যা হয় (যখন i ১০ এ পৌঁছায়) ✅ এই কোডটি ব্রাউজারের কনসোলে চালান। যখন আপনি কাউন্টার, শর্ত বা পুনরাবৃত্তি প্রকাশে ছোট পরিবর্তন করেন তখন কী ঘটে? আপনি কি এটি উল্টোভাবে চালাতে পারেন, একটি কাউন্টডাউন তৈরি করতে? ### 🗓️ ফর লুপ মাস্টারি যাচাই: নিয়ন্ত্রিত পুনরাবৃত্তি আপনার ফর লুপ বোঝার মূল্যায়ন করুন: - ফর লুপের তিনটি অংশ কী এবং প্রতিটি কী করে? - কীভাবে আপনি একটি অ্যারে উল্টোভাবে লুপ করবেন? - যদি আপনি ইনক্রিমেন্ট অংশটি (i++) ভুলে যান তাহলে কী হবে? ### হোয়াইল লুপ while লুপ হলো "এটি চালিয়ে যান যতক্ষণ না..." বলার মতো - আপনি ঠিক কতবার এটি চলবে তা জানেন না, কিন্তু আপনি জানেন কখন থামতে হবে। এটি এমন পরিস্থিতির জন্য আদর্শ যেখানে আপনি ব্যবহারকারীর ইনপুট চাইছেন যতক্ষণ না তারা সঠিক তথ্য দেয়, বা ডেটা অনুসন্ধান করছেন যতক্ষণ না আপনি যা খুঁজছেন তা খুঁজে পান। হোয়াইল লুপের বৈশিষ্ট্য: - চালিয়ে যায় যতক্ষণ শর্ত সত্য থাকে - প্রয়োজন হয় ম্যানুয়াল ব্যবস্থাপনার কোনো কাউন্টার ভেরিয়েবলের - পরীক্ষা করে শর্ত প্রতিটি পুনরাবৃত্তির আগে - ঝুঁকি থাকে অনন্ত লুপের যদি শর্ত কখনো মিথ্যা না হয় এই উদাহরণগুলো বুঝুন: - ম্যানেজ করে কাউন্টার ভেরিয়েবল i লুপ বডির ভিতরে ম্যানুয়ালি - ইনক্রিমেন্ট করে কাউন্টার অনন্ত লুপ প্রতিরোধ করতে - প্রদর্শন করে ব্যবহারকারীর ইনপুট এবং প্রচেষ্টা সীমিত করার ব্যবহারিক উদাহরণ - অন্তর্ভুক্ত করে নিরাপত্তা ব্যবস্থা অনন্ত কার্যকরতা প্রতিরোধ করতে ### ♾️ হোয়াইল লুপের জ্ঞান যাচাই: শর্ত-ভিত্তিক পুনরাবৃত্তি আপনার হোয়াইল লুপ বোঝার পরীক্ষা করুন: - হোয়াইল লুপ ব্যবহার করার প্রধান ঝুঁকি কী? - কখন আপনি ফর লুপের পরিবর্তে হোয়াইল লুপ বেছে নেবেন? - কীভাবে আপনি অনন্ত লুপ প্রতিরোধ করবেন? ### আধুনিক লুপের বিকল্প জাভাস্ক্রিপ্ট আধুনিক লুপ সিনট্যাক্স প্রদান করে যা আপনার কোডকে আরও পাঠযোগ্য এবং কম ত্রুটিপূর্ণ করে তুলতে পারে। For...of লুপ (ES6+): For...of এর প্রধান সুবিধা: - ইনডেক্স ব্যবস্থাপনা এবং সম্ভাব্য ত্রুটি দূর করে - অ্যারের উপাদানগুলোর সরাসরি অ্যাক্সেস প্রদান করে - কোডের পাঠযোগ্যতা উন্নত করে এবং সিনট্যাক্স জটিলতা কমায় forEach মেথড: forEach সম্পর্কে যা জানা প্রয়োজন: - প্রতিটি অ্যারে উপাদানের জন্য একটি ফাংশন সম্পাদন করে - উপাদানের মান এবং ইনডেক্স উভয়ই প্যারামিটার হিসেবে প্রদান করে - প্রথম দিকে থামানো যায় না (প্রথাগত লুপের মতো নয়) - undefined ফেরত দেয় (নতুন অ্যারে তৈরি করে না) ✅ কেন আপনি ফর লুপ বনাম হোয়াইল লুপ বেছে নেবেন? StackOverflow-এ ১৭ হাজার দর্শক একই প্রশ্ন করেছিলেন, এবং কিছু মতামত আপনার জন্য আকর্ষণীয় হতে পারে। ### 🎨 আধুনিক লুপ সিনট্যাক্স যাচাই: ES6+ গ্রহণ করা আপনার আধুনিক জাভাস্ক্রিপ্ট বোঝার মূল্যায়ন করুন: - for...of এর সুবিধাগুলো প্রথাগত ফর লুপের তুলনায় কী? - কখন আপনি এখনও প্রথাগত ফর লুপ পছন্দ করবেন? - forEach এবং map এর মধ্যে পার্থক্য কী? ## লুপ এবং অ্যারে অ্যারে এবং লুপ একত্রিত করে শক্তিশালী তথ্য প্রক্রিয়াকরণ ক্ষমতা তৈরি করে। এই জুটি অনেক প্রোগ্রামিং কাজের জন্য মৌলিক, যেমন তালিকা প্রদর্শন করা বা পরিসংখ্যান গণনা করা। প্রথাগত অ্যারে প্রক্রিয়াকরণ: প্রতিটি পদ্ধতি বুঝুন: - ব্যবহার করে অ্যারের দৈর্ঘ্য প্রপার্টি লুপের সীমা নির্ধারণ করতে - অ্যাক্সেস করে ইনডেক্স দ্বারা উপাদান প্রথাগত ফর লুপে - সরাসরি উপাদান অ্যাক্সেস প্রদান করে for...of লুপে - প্রতিটি অ্যারে উপাদান একবার করে প্রক্রিয়া করে ব্যবহারিক তথ্য প্রক্রিয়াকরণ উদাহরণ: এই কোড কীভাবে কাজ করে: - ট্র্যাকিং ভেরিয়েবল ইনিশিয়ালাইজ করে যোগফল এবং চরম মানের জন্য - প্রতিটি গ্রেড প্রক্রিয়া করে একটি একক দক্ষ লুপে - মোট যোগফল জমা করে গড় গণনার জন্য - সর্বোচ্চ এবং সর্বনিম্ন মান ট্র্যাক করে পুনরাবৃত্তির সময় - চূড়ান্ত পরিসংখ্যান গণনা করে লুপ সম্পন্ন হওয়ার পরে ✅ আপনার নিজের তৈরি করা অ্যারে নিয়ে ব্রাউজারের কনসোলে লুপিং পরীক্ষা করুন। --- ## GitHub Copilot Agent Challenge 🚀 Agent মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জ সম্পন্ন করুন: বর্ণনা: একটি ব্যাপক তথ্য প্রক্রিয়াকরণ ফাংশন তৈরি করুন যা অ্যারে এবং লুপ একত্রিত করে একটি ডেটাসেট বিশ্লেষণ করে এবং অর্থপূর্ণ অন্তর্দৃষ্টি তৈরি করে। প্রম্পট: analyzeGrades নামে একটি ফাংশন তৈরি করুন যা ছাত্রদের গ্রেড অবজেক্টের একটি অ্যারে নেয় (প্রত্যেকটিতে name এবং score প্রপার্টি থাকে) এবং একটি অবজেক্ট ফেরত দেয় যার মধ্যে পরিসংখ্যান থাকে যেমন সর্বোচ্চ স্কোর, সর্বনিম্ন স্কোর, গড় স্কোর, পাস করা ছাত্রদের সংখ্যা (স্কোর >= ৭০), এবং গড়ের উপরে স্কোর করা ছাত্রদের নামের একটি অ্যারে। আপনার সমাধানে অন্তত দুটি ভিন্ন লুপ টাইপ ব্যবহার করুন। Agent মোড সম্পর্কে আরও জানুন এখানে। ## 🚀 চ্যালেঞ্জ জাভাস্ক্রিপ্টে বেশ কিছু আধুনিক অ্যারে মেথড রয়েছে যা নির্দিষ্ট কাজের জন্য প্রচলিত লুপগুলোর বিকল্প হতে পারে। forEach, for-of, map, filter, এবং reduce সম্পর্কে জানুন। আপনার চ্যালেঞ্জ: অন্তত তিনটি ভিন্ন অ্যারে মেথড ব্যবহার করে ছাত্রদের গ্রেডের উদাহরণটি পুনর্গঠন করুন। লক্ষ্য করুন, আধুনিক জাভাস্ক্রিপ্ট সিনট্যাক্স ব্যবহার করে কোড কতটা পরিষ্কার এবং সহজবোধ্য হয়ে ওঠে। ## পোস্ট-লেকচার কুইজ পোস্ট-লেকচার কুইজ ## রিভিউ এবং স্ব-অধ্যয়ন জাভাস্ক্রিপ্টে অ্যারেগুলোর সাথে অনেক মেথড সংযুক্ত থাকে, যা ডেটা ম্যানিপুলেশনের জন্য অত্যন্ত কার্যকর। এই মেথডগুলো সম্পর্কে পড়ুন এবং আপনার তৈরি করা একটি অ্যারেতে কিছু মেথড (যেমন push, pop, slice এবং splice) ব্যবহার করে দেখুন। ## অ্যাসাইনমেন্ট অ্যারে লুপ করুন --- ## 📊 আপনার অ্যারে এবং লুপ টুলকিট সারাংশ --- ## 🚀 আপনার অ্যারে এবং লুপ দক্ষতার টাইমলাইন ### ⚡ পরবর্তী ৫ মিনিটে আপনি যা করতে পারেন - [ ] আপনার প্রিয় সিনেমার একটি অ্যারে তৈরি করুন এবং নির্দিষ্ট উপাদানগুলো অ্যাক্সেস করুন - [ ] ১ থেকে ১০ পর্যন্ত গণনা করার জন্য একটি for লুপ লিখুন - [ ] লেসনের আধুনিক অ্যারে মেথড চ্যালেঞ্জটি চেষ্টা করুন - [ ] আপনার ব্রাউজারের কনসোলে অ্যারে ইনডেক্সিং অনুশীলন করুন ### 🎯 এই ঘণ্টায় আপনি যা অর্জন করতে পারেন - [ ] পোস্ট-লেসন কুইজ সম্পন্ন করুন এবং যেকোনো চ্যালেঞ্জিং ধারণা পর্যালোচনা করুন - [ ] GitHub Copilot চ্যালেঞ্জ থেকে সম্পূর্ণ গ্রেড বিশ্লেষক তৈরি করুন - [ ] একটি সাধারণ শপিং কার্ট তৈরি করুন যা আইটেম যোগ এবং সরিয়ে দেয় - [ ] বিভিন্ন লুপ টাইপের মধ্যে রূপান্তর অনুশীলন করুন - [ ] push, pop, slice এবং splice এর মতো অ্যারে মেথড নিয়ে পরীক্ষা করুন ### 📅 আপনার সপ্তাহব্যাপী ডেটা প্রসেসিং যাত্রা - [ ] "অ্যারে লুপ করুন" অ্যাসাইনমেন্টটি সৃজনশীল উন্নয়নের সাথে সম্পন্ন করুন - [ ] অ্যারে এবং লুপ ব্যবহার করে একটি টু-ডু লিস্ট অ্যাপ্লিকেশন তৈরি করুন - [ ] সংখ্যাসংক্রান্ত ডেটার জন্য একটি সাধারণ পরিসংখ্যান ক্যালকুলেটর তৈরি করুন - [ ] MDN অ্যারে মেথড নিয়ে অনুশীলন করুন - [ ] একটি ফটো গ্যালারি বা মিউজিক প্লেলিস্ট ইন্টারফেস তৈরি করুন - [ ] map, filter, এবং reduce দিয়ে ফাংশনাল প্রোগ্রামিং অন্বেষণ করুন ### 🌟 আপনার মাসব্যাপী রূপান্তর - [ ] উন্নত অ্যারে অপারেশন এবং পারফরম্যান্স অপ্টিমাইজেশন আয়ত্ত করুন - [ ] একটি সম্পূর্ণ ডেটা ভিজ্যুয়ালাইজেশন ড্যাশবোর্ড তৈরি করুন - [ ] ডেটা প্রসেসিং সম্পর্কিত ওপেন সোর্স প্রকল্পে অবদান রাখুন - [ ] বাস্তব উদাহরণ দিয়ে কাউকে অ্যারে এবং লুপ সম্পর্কে শেখান - [ ] পুনর্ব্যবহারযোগ্য ডেটা প্রসেসিং ফাংশনের একটি ব্যক্তিগত লাইব্রেরি তৈরি করুন - [ ] অ্যারেগুলোর উপর ভিত্তি করে অ্যালগরিদম এবং ডেটা স্ট্রাকচার অন্বেষণ করুন ### 🏆 চূড়ান্ত ডেটা প্রসেসিং চ্যাম্পিয়ন চেক-ইন আপনার অ্যারে এবং লুপ দক্ষতা উদযাপন করুন: - বাস্তব জীবনের অ্যাপ্লিকেশনের জন্য আপনি কোন অ্যারে অপারেশনটি সবচেয়ে কার্যকর মনে করেছেন? - কোন লুপ টাইপটি আপনার কাছে সবচেয়ে স্বাভাবিক মনে হয় এবং কেন? - অ্যারে এবং লুপ সম্পর্কে বোঝার ফলে ডেটা সংগঠনের প্রতি আপনার দৃষ্টিভঙ্গি কীভাবে পরিবর্তিত হয়েছে? - আপনি পরবর্তী কোন জটিল ডেটা প্রসেসিং কাজটি মোকাবিলা করতে চান? --- অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। এর মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।

web,development

Úvod do JavaScriptu

JavaScript je jazyk webu. V těchto čtyřech lekcích se naučíte jeho základy. ### Témata 1. Proměnné a datové typy 2. Funkce a metody 3. Rozhodování v JavaScriptu 4. Pole a cykly ### Autoři Tyto lekce byly napsány s ♥️ Jasmine Greenaway, Christopher Harrison a Chris Noring --- Upozornění: Tento dokument byl přeložen pomocí služby pro automatický překlad Co-op Translator. I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro kritické informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.

javascript

Základy JavaScriptu: Datové typy

Datové typy jsou jedním ze základních konceptů v JavaScriptu, se kterými se setkáte v každém programu, který napíšete. Představte si datové typy jako systém třídění používaný starověkými knihovníky v Alexandrii – měli specifická místa pro svitky s poezií, matematikou a historickými záznamy. JavaScript organizuje informace podobným způsobem do různých kategorií pro různé druhy dat. V této lekci prozkoumáme základní datové typy, které umožňují fungování JavaScriptu. Naučíte se, jak pracovat s čísly, textem, hodnotami pravda/nepravda a pochopíte, proč je výběr správného typu zásadní pro vaše programy. Tyto koncepty mohou zpočátku působit abstraktně, ale s praxí se stanou druhou přirozeností. Porozumění datovým typům zpřehlední vše ostatní v JavaScriptu. Stejně jako architekti potřebují znát různé stavební materiály před postavením katedrály, tyto základy budou podporou všeho, co budete dále tvořit. ## Přednáškový kvíz Přednáškový kvíz Tato lekce pokrývá základy JavaScriptu, jazyka, který umožňuje interaktivitu na webu. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Začněme s proměnnými a datovými typy, které je vyplňují! ## Proměnné Proměnné jsou základní stavební kameny programování. Jako označené nádoby, které používali středověcí alchymisté ke skladování různých látek, proměnné vám umožňují uchovávat informace a přiřadit jim popisný název, abyste na ně mohli později odkazovat. Potřebujete si zapamatovat něčí věk? Uložte jej do proměnné s názvem age. Chcete sledovat uživatelské jméno? Uchovávejte jej v proměnné s názvem userName. Zaměříme se na moderní přístup k vytváření proměnných v JavaScriptu. Techniky, které se zde naučíte, představují léta vývoje jazyka a osvědčené postupy vyvinuté programátorskou komunitou. Vytvoření a deklarace proměnné má následující syntax: [keyword] [name]. Skládá se ze dvou částí: - Klíčové slovo. Použijte let pro proměnné, které se mohou měnit, nebo const pro hodnoty, které zůstávají stejné. - Název proměnné, tedy popisný název, který si sami zvolíte. ✅ Klíčové slovo let bylo představeno v ES6 a poskytuje vaší proměnné tzv. _blokový rozsah_. Doporučuje se používat let nebo const místo staršího klíčového slova var. O blokových rozsazích budeme mluvit podrobněji v budoucích částech. ### Úkol - práce s proměnnými 1. Deklarujte proměnnou. Začněme vytvořením naší první proměnné: ```javascript let myVariable; ``` Co se tím dosahuje: - Říkáme JavaScriptu, aby vytvořil úložné místo s názvem myVariable - JavaScript vyhradí v paměti prostor pro tuto proměnnou - Proměnná momentálně nemá žádnou hodnotu (undefined) 2. Přiřaďte hodnotu. Nyní vložme něco do naší proměnné: ```javascript myVariable = 123; ``` Jak funguje přiřazení: - Operátor = přiřadí hodnotu 123 naší proměnné - Proměnná nyní obsahuje tuto hodnotu místo undefined - Na tuto hodnotu můžete ve svém kódu odkazovat pomocí myVariable > Poznámka: použití = v této lekci znamená, že používáme "přiřazovací operátor", který slouží k nastavení hodnoty proměnné. Nevyjadřuje rovnítko v matematickém smyslu. 3. Udělejte to chytře. Spojme tyto dva kroky dohromady: ```javascript let myVariable = 123; ``` Toto řešení je efektivnější: - Prohlašujete proměnnou a zároveň ji přiřazujete hodnotu v jednom příkazu - Je to standardní postup mezi vývojáři - Zkracuje kód, přičemž zůstává jasný 4. Změňte názor. Co když chceme uložit jiné číslo? ```javascript myVariable = 321; ``` Pochopení přepisování: - Proměnná nyní obsahuje 321 místo 123 - Původní hodnota je nahrazena – proměnné uchovávají vždy jen jednu hodnotu - Tato proměnlivost je klíčovou charakteristikou proměnných deklarovaných pomocí let ✅ Vyzkoušejte si to! Můžete psát JavaScript přímo ve svém prohlížeči. Otevřete okno prohlížeče a přejděte do Nástrojů pro vývojáře. V konzoli najdete výzvu; napište let myVariable = 123, stiskněte Enter, pak napište myVariable. Co se stalo? O těchto konceptech se dozvíte více v dalších lekcích. ### 🧠 Kontrola ovládání proměnných: Cítíte se pohodlně? Podívejme se, jak rozumíte proměnným: - Dokážete vysvětlit rozdíl mezi deklarací a přiřazením proměnné? - Co se stane, když použijete proměnnou dříve, než ji deklarujete? - Kdy byste zvolili let místo const pro proměnnou? ## Konstanty Někdy je potřeba ukládat informace, které by se během běhu programu neměly měnit. Přemýšlejte o konstantách jako o matematických principech, které Euclid stanovil ve starověkém Řecku – jakmile byly dokázány a zapsány, zůstaly neměnné pro veškeré budoucí použití. Konstanty fungují podobně jako proměnné, ale s důležitým omezením: jakmile jim přiřadíte hodnotu, ta se už nemůže změnit. Tato neměnnost pomáhá zabránit náhodným změnám kritických hodnot ve vašem programu. Deklarace a inicializace konstanty následuje stejné principy jako u proměnné, s výjimkou klíčového slova const. Konstanty se obvykle deklarují velkými písmeny. Co tento kód dělá: - Vytvoří konstantu s názvem MY_VARIABLE s hodnotou 123 - Používá velká písmena pro pojmenování konstant - Zabraňuje jakýmkoli budoucím změnám této hodnoty Konstanty mají dvě hlavní pravidla: - Musíte jim hned přiřadit hodnotu – prázdné konstanty nejsou povolené! - Hodnotu nikdy nemůžete změnit – JavaScript vyhodí chybu, pokud to zkusíte. Podívejme se na příklad: Jednoduchá hodnota - Následující není povoleno: ```javascript const PI = 3; PI = 4; // není povoleno ``` Co si zapamatovat: - Pokusy o přepsání konstanty vyvolají chybu - Chrání důležité hodnoty před náhodnými změnami - Zajišťuje, že hodnota zůstane konzistentní v průběhu celého programu Reference na objekt je chráněna - Následující není povoleno: ```javascript const obj = { a: 3 }; obj = { b: 5 } // není povoleno ``` Porozumění těmto konceptům: - Zabraňuje nahrazení celého objektu novým objektem - Chrání referenci na původní objekt - Udržuje identitu objektu v paměti Hodnota objektu není chráněna - Následující je povoleno: ```javascript const obj = { a: 3 }; obj.a = 5; // povoleno ``` Co se zde děje: - Mění hodnotu vlastnosti uvnitř objektu - Udržuje stejnou referenci na objekt - Ukazuje, že obsah objektu se může změnit, zatímco reference zůstává konstantní > Poznámka: const znamená, že reference je chráněna před přepsáním. Hodnota ale není _neměnná_ a může se změnit, zejména pokud jde o složitější konstrukty jako objekty. ## Datové typy JavaScript organizuje informace do různých kategorií nazývaných datové typy. Tento koncept připomíná, jak starověcí učenci kategorizovali znalosti – Aristotelés rozlišoval různé typy uvažování, protože věděl, že logické principy nelze jednotně použít na poezii, matematiku a přírodní filosofii. Datové typy jsou důležité, protože různé operace pracují s různými druhy informací. Stejně jako nemůžete provádět aritmetiku s názvem osoby nebo seřadit matematickou rovnici podle abecedy, JavaScript vyžaduje pro každou operaci odpovídající datový typ. Porozumění tomu zabraňuje chybám a činí váš kód spolehlivějším. Proměnné mohou ukládat různé typy hodnot, jako jsou čísla a text. Tyto různé druhy hodnot jsou známy jako datový typ. Datové typy jsou důležitou součástí vývoje softwaru, protože pomáhají vývojářům rozhodovat, jak by měl být kód napsán a jak by měl software běžet. Navíc některé datové typy mají jedinečné vlastnosti, které pomáhají transformovat nebo získat další informace z hodnoty. ✅ Datové typy jsou také označovány jako primitivní datové typy JavaScriptu, protože jsou nejzákladnějšími typy dat poskytovanými jazykem. Existuje 7 primitivních datových typů: string, number, bigint, boolean, undefined, null a symbol. Věnujte chvíli vizualizaci, co by každý z těchto primitiv mohl představovat. Co je to zebra? Co třeba 0? true? ### Čísla Čísla jsou nejpřímějším datovým typem v JavaScriptu. Ať už pracujete s celými čísly jako 42, desetinnými jako 3.14 nebo zápornými čísly jako -5, JavaScript s nimi zachází jednotně. Vzpomněli jste si na naši předchozí proměnnou? Ta hodnota 123, kterou jsme uložili, byla ve skutečnosti datového typu číslo: Klíčové vlastnosti: - JavaScript automaticky rozpoznává číselné hodnoty - S těmito proměnnými můžete provádět matematické operace - Není potřeba explicitní deklarace typu Proměnné mohou uchovávat všechny typy čísel, včetně desetinných nebo záporných. Čísla lze také používat s aritmetickými operátory, které jsou probrány v následující části. ### Aritmetické operátory Aritmetické operátory vám umožňují provádět matematické výpočty v JavaScriptu. Tyto operátory se řídí stejnými principy, jaké používali matematici po staletí – stejné symboly, které se objevily v pracích učenců jako Al-Chvárizmí, který vyvinul algebraickou notaci. Operátory fungují, jak byste očekávali z tradiční matematiky: plus pro sčítání, minus pro odčítání a tak dále. Existuje několik typů operátorů, které můžete použít při aritmetických funkcích, některé jsou uvedeny zde: ✅ Vyzkoušejte si to! Vyzkoušejte aritmetickou operaci v konzoli vašeho prohlížeče. Překvapily vás výsledky? ### 🧮 Kontrola matematických dovedností: Vypočítáváme s jistotou Otestujte své matematické znalosti: - Jaký je rozdíl mezi / (dělení) a % (zbytek)? - Dokážete odhadnout, co je 10 % 3? (Nápověda: není to 3.33...) - Proč by mohl být operátor zbytku užitečný v programování? ### Řetězce (Strings) V JavaScriptu jsou textová data reprezentována jako řetězce. Termín „string“ pochází z konceptu znaků navázaných za sebe do sekvence, stejně jako písaři v středověkých klášterech spojovali písmena do slov a vět ve svých rukopisech. Řetězce jsou základní pro webový vývoj. Každý text, který se zobrazí na webu – uživatelská jména, popisky tlačítek, chybové zprávy, obsah – je zpracováván jako řetězec. Porozumění řetězcům je nezbytné pro tvorbu funkčních uživatelských rozhraní. Řetězce jsou sady znaků, které jsou uzavřeny v jednoduchých nebo dvojitých uvozovkách. Porozumění těmto konceptům: - Používá jednoduché ' nebo dvojité " uvozovky pro definici řetězců - Uchovává textová data, která mohou obsahovat písmena, číslice i symboly - Přiřazuje řetězcové hodnoty proměnným pro pozdější použití - Vyžaduje uvozovky k odlišení textu od názvů proměnných Nezapomeňte použít uvozovky při psaní řetězce, jinak JavaScript bude předpokládat, že jde o název proměnné. ### Formátování řetězců Manipulace s řetězci vám umožňuje kombinovat textové prvky, začleňovat proměnné a vytvářet dynamický obsah reagující na stav programu. Tato technika vám umožňuje text tvořit programově. Často je potřeba spojit více řetězců dohromady – tento proces se nazývá konkatenace. Pro spojení dvou nebo více řetězců, tedy jejich spojení dohromady, použijte operátor +. Krok za krokem, co se děje: - Spojuje více řetězců pomocí operátoru + - Spojuje řetězce přímo bez mezer v prvním příkladu - Přidává mezery " " mezi řetězce pro lepší čitelnost - Vkládá interpunkci jako čárky pro správné formátování ✅ Proč v JavaScriptu platí 1 + 1 = 2, ale '1' + '1' = 11? Zamyslete se. A co '1' + 1? Šablonové literály jsou další způsob formátování řetězců, místo uvozovek se používají zpětné apostrofy. Všechno, co není obyčejný text, musí být vloženo do zástupných znaků ${ }. To zahrnuje i proměnné, které mohou být řetězci. Pojďme si to vysvětlit: - Používá zpětné apostrofy ` `` místo obyčejných uvozovek pro šablonové literály - Vkládá proměnné přímo pomocí ${} syntaxe zástupných znaků - Zachovává přesně mezery a formátování, jak je napsáno - Nabízí čistší způsob vytváření složitých řetězců s proměnnými Formátování můžete dosáhnout oběma způsoby, ale šablonové literály respektují všechny mezery a přerušení řádků. ✅ Kdy byste použili šablonový literál místo obyčejného řetězce? ### 🔤 Ověření mistrovství v práci s řetězci: Sebevědomí v manipulaci s textem Zhodnoťte své dovednosti s řetězci: - Dokážete vysvětlit, proč '1' + '1' je '11' místo 2? - Který způsob spojování řetězců vám přijde čitelnější: konkatenace nebo šablonové literály? - Co se stane, když zapomenete uvozovky kolem řetězce? ### Boolean (logické hodnoty) Booleany představují nejjednodušší formu dat: mohou mít pouze jednu ze dvou hodnot – true nebo false. Tento binární logický systém má původ v práci George Boola, matematika z 19. století, který vyvinul Booleovu algebru. I přes svou jednoduchost jsou booleany nezbytné pro logiku programu. Umožňují kódu rozhodovat se na základě podmínek – jestli je uživatel přihlášen, jestli bylo stisknuto tlačítko, nebo zda jsou splněna určitá kritéria. Booleany mohou mít pouze dvě hodnoty: true nebo false. Pomáhají rozhodnout, které části kódu se mají vykonat, když jsou splněny určité podmínky. V mnoha případech pomáhají operátory nastavit hodnotu booleanu a často si všimnete a píšete proměnné, které jsou inicializovány nebo jejichž hodnoty jsou aktualizovány s pomocí operátoru. Výše jsme: - Vytvořili proměnnou, která uchovává boolean true - Ukázali, jak uložit boolean false - Použili přesná klíčová slova true a false (bez uvozovek) - Připravili tyto proměnné pro použití v podmínkách ✅ Proměnná může být považována za „truthy“, pokud se vyhodnotí jako boolean true. Zajímavé je, že v JavaScriptu jsou všechny hodnoty truthy, pokud nejsou definovány jako falsy. ### 🎯 Ověření logiky Boolean: Dovednosti rozhodování Otestujte své pochopení booleanů: - Proč si myslíte, že JavaScript má kromě true a false i hodnoty "truthy" a "falsy"? - Dokážete předpovědět, která z těchto hodnot je falsy: 0, "0", [], "false"? - Jak by mohly být booleany užitečné při řízení toku programu? --- ## 📊 Shrnutí vašeho nástroje pro datové typy ## Výzva GitHub Copilot Agenta 🚀 Použijte režim Agent k dokončení následující výzvy: Popis: Vytvořte správce osobních informací, který demonstruje všechny datové typy JavaScriptu, které jste se v této lekci naučili, a přitom zpracovává reálné scénáře dat. Zadání: Napište program v JavaScriptu, který vytvoří objekt profilu uživatele obsahující: jméno osoby (řetězec), věk (číslo), stav studenta (boolean), oblíbené barvy jako pole a objekt adresy se ulicí, městem a PSČ. Zahrňte funkce pro zobrazení informací profilu a aktualizaci jednotlivých polí. Ukažte konkatenaci řetězců, šablonové literály, aritmetické operace s věkem a logiku boolean pro stav studenta. Více o režimu agenta se dozvíte zde. ## 🚀 Výzva JavaScript má některé vlastnosti, které mohou vývojáře překvapit. Zde je klasický příklad k prozkoumání: zkuste zadat do konzole prohlížeče: let age = 1; let Age = 2; age == Age a sledujte výsledek. Vrátí false – dokážete přijít na důvod? To je jeden z mnoha fenomenů JavaScriptu, které stojí za to znát. Dobrá znalost těchto zvláštností vám pomůže psát spolehlivější kód a efektivněji odstraňovat chyby. ## Kvíz po přednášce Kvíz po přednášce ## Přehled & Samostudium Podívejte se na tento seznam JavaScript cvičení a vyzkoušejte si jedno. Co jste se naučili? ## Zadání Procvičování datových typů ## 🚀 Váš časový plán zvládnutí datových typů v JavaScriptu ### ⚡ Co zvládnete během příštích 5 minut - [ ] Otevřete konzoli v prohlížeči a vytvořte 3 proměnné s různými datovými typy - [ ] Vyzkoušejte výzvu: let age = 1; let Age = 2; age == Age a zjistěte, proč je výsledek false - [ ] Procvičte si spojování řetězců s vaším jménem a oblíbeným číslem - [ ] Otestujte, co se stane, když přidáte číslo k řetězci ### 🎯 Co zvládnete během této hodiny - [ ] Dokončit kvíz po lekci a zopakovat případně nejasné pojmy - [ ] Vytvořit mini kalkulačku pro sčítání, odčítání, násobení a dělení dvou čísel - [ ] Vytvořit jednoduchý formátovač jmen pomocí šablonových literálů - [ ] Prozkoumat rozdíly mezi operátory porovnání == a === - [ ] Procvičit převody mezi různými datovými typy ### 📅 Váš týdenní plán pro základy JavaScriptu - [ ] Dokončit zadání s jistotou a kreativitou - [ ] Vytvořit osobní profilový objekt využívající všechny naučené datové typy - [ ] Procvičit si JavaScript cvičení z CSS-Tricks - [ ] Vytvořit jednoduchý validátor formuláře využívající boolean logiku - [ ] Experimentovat s datovými typy pole a objekt (náhled na další lekce) - [ ] Připojit se k JavaScript komunitě a ptát se na datové typy ### 🌟 Měsíční transformace - [ ] Začlenit znalosti datových typů do větších programátorských projektů - [ ] Pochopit, kdy a proč použít který datový typ v reálných aplikacích - [ ] Pomáhat ostatním začátečníkům porozumět základům JavaScriptu - [ ] Vytvořit malou aplikaci pro správu různých typů uživatelských dat - [ ] Prozkoumat pokročilé koncepce datových typů jako přetypování a přísné rovnosti - [ ] Přispívat do open source JavaScript projektů vylepšením dokumentace ### 🧠 Závěrečné ověření zvládnutí datových typů Oslavte své základy JavaScriptu: - Který datový typ vás nejvíce překvapil svým chováním? - Jak pohodlně se cítíte vysvětlovat proměnné vs. konstanty příteli? - Co nejzajímavějšího jste objevili o typovém systému JavaScriptu? - Jakou reálnou aplikaci si dokážete představit, že vytvoříte s těmito základy? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Prohlášení o vyloučení odpovědnosti: Tento dokument byl přeložen pomocí AI překladatelské služby Co-op Translator. Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro kritické informace je doporučeno využít profesionální lidský překlad. Nejsme odpovědní za jakékoliv nedorozumění nebo mylné interpretace vzniklé použitím tohoto překladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Základy JavaScriptu: Metody a funkce

## Přednáškový kvíz Přednáškový kvíz Opakované psaní stejného kódu je jednou z nejčastějších frustrací při programování. Funkce tento problém řeší tím, že vám umožní zabalit kód do znovupoužitelných bloků. Fungují jako standardizované součástky, které udělaly výrobní linku Henryho Forda revoluční – jakmile vytvoříte spolehlivou komponentu, můžete ji použít kdekoliv, aniž byste ji museli znovu stavět od nuly. Funkce vám umožní seskupit části kódu, abyste je mohli znovu využívat v celém programu. Místo kopírování a vkládání stejné logiky všude můžete funkci vytvořit jednou a volat ji kdykoli potřeba. Tento přístup udržuje váš kód organizovaný a usnadňuje aktualizace. V této lekci se naučíte, jak si vytvořit vlastní funkce, předávat jim informace a získat užitečné výsledky zpět. Objevíte rozdíl mezi funkcemi a metodami, naučíte se moderní syntaxi a uvidíte, jak funkce mohou spolupracovat s jinými funkcemi. Tyto koncepty budeme budovat krok za krokem. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metody a funkce") ## Funkce Funkce je samostatný blok kódu, který provádí konkrétní úkol. Zapouzdřuje logiku, kterou můžete spustit, kdykoli je potřeba. Místo psaní stejného kódu několikrát v celém programu ho můžete zabalit do funkce a volat ji vždy, když to potřebujete. Tento přístup udržuje kód přehledný a usnadňuje aktualizace. Představte si jen, jak náročná by byla údržba, pokud byste potřebovali změnit logiku roztroušenou na 20 různých místech v kódu. Důležité je funkce pojmenovávat výstižně. Dobře pojmenovaná funkce jasně říká, co dělá – když vidíte cancelTimer(), hned víte, co ta funkce provede, stejně jako jasně označené tlačítko vám přesně řekne, co se stane po kliknutí. ## Vytvoření a volání funkce Podívejme se, jak si funkci vytvořit. Syntax má konzistentní vzor: Rozložme si to: - Klíčové slovo function říká JavaScriptu "Hej, tvořím funkci!" - nameOfFunction je místo, kde dáte funkci popisný název - Kulaté závorky () jsou místo, kde mohou být parametry (k tomu se brzy dostaneme) - Složené závorky {} obsahují skutečný kód, který se spustí, když funkci zavoláte Vytvořme jednoduchou funkci pozdravu, abychom to viděli v praxi: Tato funkce vypíše "Hello, world!" do konzole. Jakmile ji definujete, můžete ji použít tolikrát, kolikrát chcete. Pro spuštění (neboli "volání") funkce napište její jméno následované závorkami. JavaScript vám dovolí definovat funkci před nebo po jejím zavolání – JavaScript engine se postará o pořadí spuštění. Když tento řádek spustíte, vykoná se veškerý kód uvnitř funkce displayGreeting, zobrazí se "Hello, world!" v konzoli vašeho prohlížeče. Můžete tuto funkci volat opakovaně. ### 🧠 Základní kontrola funkcí: Vytvoření vašich prvních funkcí Podívejme se, jak vám jdou základní funkce: - Dokážete vysvětlit, proč používáme složené závorky {} při definici funkcí? - Co se stane, když napíšete displayGreeting bez závorek? - Proč byste chtěli jednu funkci volat vícekrát? ### Nejlepší postupy při psaní funkcí Zde je pár rad, jak psát skvělé funkce: - Dávejte funkcím jasné, výstižné názvy – vaše budoucí já vám poděkuje! - Používejte camelCase u víceslovných názvů (například calculateTotal místo calculate_total) - Každá funkce by měla dělat jednu věc dobře ## Předávání informací do funkce Naše funkce displayGreeting je omezená – umí zobrazit jen „Hello, world!“ pro každého. Parametry nám umožňují dělat funkce flexibilnější a užitečnější. Parametry fungují jako zástupná místa, kam můžete při každém volání vložit jiné hodnoty. Takže stejná funkce může s různými informacemi fungovat pokaždé jinak. Parametry vypisujete do závorek při definici funkce, více parametrů oddělíte čárkou: Každý parametr je jako zástupné místo – když někdo funkci zavolá, dodá skutečné hodnoty, které se do těchto míst dosadí. Aktualizujme pozdrav, aby přijímal jméno: Všimněte si, že používáme zpětné apostrofy (` `) a ${}`, abychom jméno vložili přímo do zprávy – tomu se říká šablonový literál a je to opravdu užitečný způsob vytváření textu s proměnnými. Teď, když funkci zavoláme, můžeme předat libovolné jméno: JavaScript vezme řetězec 'Christopher', přiřadí ho parametru name a vytvoří personalizovanou zprávu "Hello, Christopher!" ## Výchozí hodnoty Co když chceme, aby některé parametry byly nepovinné? Tady přicházejí na řadu výchozí hodnoty! Řekněme, že chceme umožnit uživatelům přizpůsobit oslovení, ale pokud ho neuvedou, použijeme "Hello" jako výchozí. Výchozí hodnoty nastavíte pomocí rovná se, podobně jako při přiřazování proměnné: Tady je name stále povinné, ale salutation má záložní hodnotu 'Hello', pokud nikdo nezadá oslovení. Funkci tak můžeme volat dvěma způsoby: V prvním volání JavaScript použije výchozí „Hello“, protože jsme neurčili oslovení. Ve druhém volání naopak použije naše vlastní „Hi“. Tato flexibilita dělá funkce přizpůsobivé různým situacím. ### 🎛️ Kontrola osvojení parametrů: Udělejte funkce flexibilními Otestujte své znalosti parametrů: - Jaký je rozdíl mezi parametrem a argumentem? - Proč jsou výchozí hodnoty užitečné v reálném programování? - Dokážete předpovědět, co se stane, když předáte více argumentů než parametrů? ## Návratové hodnoty Dosud naše funkce pouze vypisovaly zprávy do konzole, ale co když chcete, aby funkce něco spočítala a vrátila výsledek? Tady přicházejí na řadu návratové hodnoty. Místo pouhého zobrazení hodnoty může funkce zaslat hodnotu zpět, aby ji bylo možné uložit do proměnné nebo použít v jiných částech kódu. Pro vrácení hodnoty použijte klíčové slovo return následované tím, co chcete vrátit: Důležité: Když funkce narazí na return, okamžitě přestane běžet a pošle hodnotu zpět tomu, kdo ji volal. Upravme naši pozdravovou funkci tak, aby zprávu vracela místo toho, aby ji tiskla: Místo tisku pozdrav vytvoří a vrátí nám zprávu. Vrácenou hodnotu můžeme uložit do proměnné stejně jako jinou hodnotu: Nyní greetingMessage obsahuje "Hello, Christopher" a můžeme ji použít kdekoli v kódu – zobrazit na webu, vložit do emailu, nebo předat další funkci. ### 🔄 Kontrola návratových hodnot: Získávání výsledků Zhodnoťte porozumění návratovým hodnotám: - Co se stane s kódem po příkazu return ve funkci? - Proč je často lepší vracet hodnoty než jen vypisovat do konzole? - Může funkce vracet různé typy hodnot (řetězec, číslo, boolean)? ## Funkce jako parametry funkcí Funkce můžete předávat jako parametry do jiných funkcí. Tato koncepce může na začátku působit složitě, ale je to mocná vlastnost umožňující flexibilní programovací vzory. Tento vzor je velmi běžný, když chcete říct: „když se něco stane, udělej toto“. Například „když timer skončí, spusť tento kód“ nebo „když uživatel klikne na tlačítko, zavolej tuto funkci“. Podívejme se na setTimeout, což je vestavěná funkce, která počká stanovenou dobu a pak spustí nějaký kód. Musíme jí říct, který kód spustit – perfektní případ pro předání funkce! Zkuste tento kód – po 3 sekundách uvidíte zprávu: Všimněte si, že předáváme displayDone (bez závorek) do setTimeout. Funkci sami nevoláme – jdeme ji předat setTimeout a říct „zavolej to za 3 sekundy“. ### Anonymní funkce Někdy potřebujete funkci jen pro jednu věc a nechcete jí dávat jméno. Zvažte to – pokud funkci použijete jen jednou, proč zahlcovat kód dalším názvem? JavaScript umožňuje vytvářet anonymní funkce – funkce bez jména, které definujete tam, kde je potřebujete. Tady je, jak můžeme přepsat náš timerový příklad s anonymní funkcí: Dosáhli jsme stejného výsledku, ale funkce je definována přímo uvnitř volání setTimeout, není tedy potřeba samostatná deklarace funkce. ### Šipkové funkce Moderní JavaScript nabízí ještě kratší zápis funkcí, nazývaný šipkové funkce. Používají => (vypadá jako šipka – chápete?) a jsou velmi populární mezi vývojáři. Šipkové funkce umožňují vynechat klíčové slovo function a napsat kód stručněji. Tady je náš timerový příklad s šipkovou funkcí: () jsou místo pro parametry (v tomto případě prázdné), následuje šipka => a tělo funkce ve složených závorkách. To poskytuje stejnou funkcionalitu s kratší syntaxí. ### Kdy použít kterou strategii Kdy která metoda? Praktická rada: pokud funkci budete používat vícekrát, pojmenujte ji a definujte zvlášť. Pokud je jen pro jednorázové použití, uvažujte o anonymní funkci. Obě varianty – šipkové i tradiční – jsou platné, ale šipkové funkce jsou dominantní v moderních kódech. ### 🎨 Ovládání stylů funkcí: Výběr správné syntaxe Otestujte své porozumění syntaxi: - Kdy byste dali přednost šipkovým funkcím před tradiční syntaxí? - Jaká je hlavní výhoda anonymních funkcí? - Dokážete uvést situaci, kdy je lepší pojmenovaná funkce než anonymní? --- ## 🚀 Výzva Dokážete jednou větou vysvětlit rozdíl mezi funkcemi a metodami? Zkuste to! ## GitHub Copilot Agent Výzva 🚀 Použijte režim Agent k vyřešení následující výzvy: Popis: Vytvořte užitečnou knihovnu matematických funkcí, která demonstruje různé koncepty funkcí probrané v této lekci, včetně parametrů, výchozích hodnot, návratových hodnot a šipkových funkcí. Zadání: Vytvořte JavaScript soubor mathUtils.js, který bude obsahovat následující funkce: 1. Funkci add, která přijímá dva parametry a vrací jejich součet 2. Funkci multiply s výchozími hodnotami parametrů (druhý parametr má výchozí hodnotu 1) 3. Šipkovou funkci square, která přijímá číslo a vrací jeho druhou mocninu 4. Funkci calculate, která přijímá jinou funkci jako parametr a dvě čísla a aplikuje danou funkci na tato čísla 5. Ukázky volání všech funkcí s vhodnými testovacími případy Více se o agent režimu dozvíte zde. ## Po-přednáškový kvíz Po-přednáškový kvíz ## Přehled a samostudium Stojí za to si přečíst trochu víc o šipkových funkcích, protože se čím dál více používají v kódech. Procvičte si psaní funkce a pak ji přepište s touto syntaxí. ## Úkol Zábava s funkcemi --- ## 🧰 Souhrn vašeho JavaScriptového nástroje funkcí --- ## 🚀 Váš časový plán osvojení JavaScriptových funkcí ### ⚡ Co zvládnete za následujících 5 minut - [ ] Napsat jednoduchou funkci, která vrací vaše oblíbené číslo - [ ] Vytvořit funkci se dvěma parametry, která je sečte together - [ ] Zkuste převést tradiční funkci na zápis pomocí arrow funkce - [ ] Procvičte si úkol: vysvětlete rozdíl mezi funkcemi a metodami ### 🎯 Co můžete v této hodině dokázat - [ ] Dokončit kvíz po lekci a zkontrolovat si nejasné koncepty - [ ] Vytvořit knihovnu matematických utilit z výzvy GitHub Copilot - [ ] Vytvořit funkci, která používá jinou funkci jako parametr - [ ] Procvičit psaní funkcí s výchozími parametry - [ ] Experimentovat s template literály ve vracených hodnotách funkcí ### 📅 Váš týdenní mistr funkcí - [ ] Dokončit úkol "Zábava s funkcemi" s nápaditostí - [ ] Refaktorovat trochu opakujícího se kódu, který jste napsali, do znovupoužitelných funkcí - [ ] Vytvořit malou kalkulačku využívající pouze funkce (bez globálních proměnných) - [ ] Procvičovat arrow funkce se způsoby pole jako map() a filter() - [ ] Vytvořit kolekci utilitních funkcí pro běžné úkoly - [ ] Studovat funkce vyššího řádu a koncepty funkcionálního programování ### 🌟 Vaše měsíční transformace - [ ] Ovládnout pokročilé koncepty funkcí jako closure a rozsah (scope) - [ ] Vytvořit projekt, který intenzivně používá kompozici funkcí - [ ] Přispět do open source vylepšením dokumentace funkcí - [ ] Naučit někoho dalšího o funkcích a různých stylech zápisu - [ ] Prozkoumat funkcionální programovací paradigma v JavaScriptu - [ ] Vytvořit osobní knihovnu znovupoužitelných funkcí pro budoucí projekty ### 🏆 Závěrečná kontrola šampiona funkcí Oslavte své mistrovství ve funkcích: - Jaká je nejužitečnější funkce, kterou jste zatím vytvořili? - Jak vás učení o funkcích změnilo v pohledu na organizaci kódu? - Který zápis funkcí preferujete a proč? - Jaký reálný problém byste vyřešili napsáním funkce? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Prohlášení o vyloučení odpovědnosti: Tento dokument byl přeložen pomocí AI překladatelské služby Co-op Translator. Přestože usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Základy JavaScriptu: Rozhodování

Už jste někdy přemýšleli, jak aplikace dělají chytrá rozhodnutí? Třeba jak navigační systém vybírá nejrychlejší trasu, nebo jak termostat rozhoduje, kdy zapnout topení? To je základní koncept rozhodování v programování. Stejně jako byl analytický stroj Charlese Babbage navržen tak, aby prováděl různé sekvence operací na základě podmínek, moderní JavaScriptové programy potřebují dělat volby na základě proměnlivých okolností. Tato schopnost větvení a rozhodování proměňuje statický kód na reaktivní, inteligentní aplikace. V této lekci se naučíte, jak implementovat podmíněnou logiku ve svých programech. Prozkoumáme podmíněné příkazy, porovnávací operátory a logické výrazy, které umožňují vašemu kódu vyhodnocovat situace a adekvátně reagovat. ## Kvíz před lekcí Pre-lecture quiz Schopnost dělat rozhodnutí a řídit tok programu je základním aspektem programování. Tato sekce pokrývá, jak kontrolovat průběh spuštění vašich JavaScriptových programů pomocí Booleovských hodnot a podmíněné logiky. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Stručné shrnutí Booleovských hodnot Než se pustíme do rozhodování, připomeňme si Booleovské hodnoty z naší předchozí lekce. Jsou pojmenované po matematikovi Georgi Boolovi a představují binární stavy – buď true nebo false. Žádná nejednoznačnost, žádná střední cesta. Tyto binární hodnoty tvoří základ veškeré výpočetní logiky. Každé rozhodnutí, které váš program učiní, se nakonec redukuje na Booleovské vyhodnocení. Vytváření Booleovských proměnných je jednoduché: Tím se vytvoří dvě proměnné s explicitními Booleovskými hodnotami. ✅ Booleovské hodnoty jsou pojmenovány po anglickém matematikovi, filozofovi a logikovi Georgi Boolovi (1815–1864). ## Porovnávací operátory a Booleovské hodnoty V praxi zřídka nastavujete Booleovské hodnoty ručně. Místo toho je vytváříte vyhodnocením podmínek: „Je toto číslo větší než tamto?“ nebo „Jsou tyto hodnoty rovné?“ Porovnávací operátory umožňují tyto vyhodnocení. Porovnávají hodnoty a vrací Booleovský výsledek na základě vztahu mezi operandy. ✅ Ověřte si své znalosti napsáním několika porovnání v konzoli vašeho prohlížeče. Překvapí vás nějaký vrácený výsledek? ### 🧠 Kontrola zvládnutí porovnání: Pochopení Booleovské logiky Otestujte své porozumění porovnání: - Proč si myslíte, že === (přísná shoda) je obecně preferováno před == (volná shoda)? - Dokážete předpovědět, co vrátí 5 === '5'? A co 5 == '5'? - Jaký je rozdíl mezi !== a !=? ## Příkaz if Příkaz if je jako pokládat otázku ve vašem kódu. „Pokud je tato podmínka pravdivá, pak udělej toto.“ Je to pravděpodobně nejdůležitější nástroj, který při rozhodování v JavaScriptu použijete. Takto funguje: Podmínka jde do závorek a pokud je true, JavaScript spustí kód uvnitř složených závorek. Pokud je false, JavaScript celý blok přeskočí. Často použijete porovnávací operátory k vytvoření těchto podmínek. Podívejme se na praktický příklad: Protože 1000 >= 800 se vyhodnotí jako true, kód uvnitř bloku se vykoná a v konzoli se objeví „Getting a new laptop!“. ## Příkaz if..else Co když chcete, aby váš program udělal něco jiného, když podmínka není splněna? Tady přichází na řadu else – je to jako mít záložní plán. Příkaz else vám umožní říct: „pokud tato podmínka není pravdivá, udělej místo toho toto.“ Protože 500 >= 800 je false, JavaScript první blok přeskočí a vykoná blok v else. V konzoli uvidíte „Can't afford a new laptop, yet!“. ✅ Otestujte si porozumění tomuto kódu i následujícímu spuštěním v konzoli prohlížeče. Změňte hodnoty proměnných currentMoney a laptopPrice a sledujte, jak se mění výstup console.log(). ### 🎯 Kontrola logiky if-else: Rozvětvené cesty Zhodnoťte své porozumění podmíněné logice: - Co se stane, když currentMoney přesně odpovídá laptopPrice? - Můžete vymyslet reálný scénář, kde by logika if-else byla užitečná? - Jak byste to rozšířili tak, aby zpracovalo více cenových rozmezí? ## Příkaz switch Někdy potřebujete porovnat jednu hodnotu vůči více možnostem. Můžete sice spojit několik příkazů if..else, ale to se může stát nepřehledným. Příkaz switch poskytuje čistší strukturu pro práci s více specifickými hodnotami. Koncept je podobný mechanickým přepínacím systémům používaným v raných telefonních ústřednách – jedna vstupní hodnota určí, kterou konkrétní cestou se vykonávání vydá. Takto je to strukturováno: - JavaScript vyhodnotí výraz jednou - Prohledá každý case pro nalezení shody - Po nalezení shody vykoná kód v daném bloku - break říká JavaScriptu, aby přestal a ukončil switch - Pokud žádný případ neodpovídá, vykoná default blok (pokud ho máte) V tomto příkladu JavaScript vidí, že dayNumber je 2, najde odpovídající case 2, nastaví dayName na „Tuesday“ a pak přeruší switch. Výsledek? V konzoli se vypíše „Today is Tuesday“. ✅ Otestujte si porozumění tomuto kódu i následujícímu spuštěním v konzoli. Změňte hodnotu proměnné a a sledujte, jak se mění console.log(). ### 🔄 Mistrovství příkazu switch: Více možností Otestujte své znalosti switch: - Co se stane, když zapomenete na příkaz break? - Kdy byste použili switch místo více if-else větví? - Proč je užitečný default případ, i když si myslíte, že máte všechny možnosti pokryté? ## Logické operátory a Booleovské hodnoty Komplexní rozhodnutí často vyžadují vyhodnocení více podmínek zároveň. Stejně jako Booleova algebra umožňuje matematikům kombinovat logické výrazy, programování poskytuje logické operátory k propojení několika Booleovských podmínek. Tyto operátory umožňují sofistikovanou podmíněnou logiku spojením jednoduchých vyhodnocení pravda/nepravda. Tyto operátory vám umožní kombinovat podmínky užitečnými způsoby: - A (&&) znamená, že obě podmínky musí být pravdivé - NEBO (||) znamená, že musí být pravdivá alespoň jedna podmínka - NEGACE (!) převrací pravdu na nepravdu (a naopak) ## Podmínky a rozhodování s logickými operátory Podívejme se na tyto logické operátory v akci s realističtějším příkladem: V tomto příkladu: vypočítáme cenu s 20% slevou (640), pak vyhodnotíme, zda naše dostupné prostředky pokryjí buď plnou cenu NEBO cenu po slevě. Protože 600 je méně než zvýhodněná cena 640, podmínka vyhodnocuje na false. ### 🧮 Kontrola logických operátorů: Kombinování podmínek Otestujte své znalosti logických operátorů: - Ve výrazu A && B, co se stane, když je A false? Vyhodnocuje se vůbec B? - Umíte si představit situaci, kdy byste potřebovali všechny tři operátory (&&, ||, !) dohromady? - Jaký je rozdíl mezi !user.isActive a user.isActive !== true? ### Operátor negace Někdy je snazší přemýšlet o tom, kdy něco NENÍ pravda. Místo otázky „Je uživatel přihlášen?“, můžete chtít vědět „Není uživatel přihlášen?“. Operátor vykřičníku (!) pro vás převrací logiku. Operátor ! je jako byste říkali „opposite of...“ – pokud je něco true, ! změní na false, a naopak. ### Ternární výraz Pro jednoduchá podmíněná přiřazení JavaScript poskytuje ternární operátor. Tato krátká syntaxe vám umožní zapsat podmíněný výraz na jednom řádku, což je užitečné, když chcete na základě podmínky přiřadit jednu ze dvou hodnot. Čte se to jako otázka: „Je tato podmínka pravdivá? Pokud ano, použij tuto hodnotu. Pokud ne, použij tu druhou hodnotu.“ Níže je konkrétnější příklad: ✅ Věnujte minutu tomu, abyste si tento kód několikrát přečetli. Rozumíte, jak tyto operátory fungují? Tato řádka říká: „Je firstNumber větší než secondNumber? Pokud ano, dej firstNumber do biggestNumber. Pokud ne, dej tam secondNumber.“ Ternární operátor je jen kratší způsob, jak napsat tradiční příkaz if..else: Obě varianty dávají stejné výsledky. Ternární operátor nabízí stručnost, zatímco tradiční if-else je možná čitelnější při složitějších podmínkách. --- ## 🚀 Výzva Vytvořte program, který nejprve napíšete pomocí logických operátorů a pak přepište pomocí ternárního výrazu. Kterou syntaxi preferujete? --- ## Výzva GitHub Copilot Agent 🚀 Použijte režim Agent, abyste dokončili následující výzvu: Popis: Vytvořte komplexní kalkulačku známek, která demonstruje různé koncepty rozhodování z této lekce, včetně příkazů if-else, switch příkazů, logických operátorů a ternárních výrazů. Zadání: Napište JavaScriptový program, který vezme číselné skóre studenta (0-100) a určí jeho hodnocení podle následujících kritérií: - A: 90–100 - B: 80–89 - C: 70–79 - D: 60–69 - F: Pod 60 Požadavky: 1. Použijte příkaz if-else pro určení hodnocení 2. Použijte logické operátory pro kontrolu, jestli student splnil (známka >= 60) A má vyznamenání (známka >= 90) 3. Použijte příkaz switch pro poskytnutí specifické zpětné vazby pro každou písmenovou známku 4. Použijte ternární operátor k určení, zda je student způsobilý pro další kurz (známka >= 70) 5. Zahrňte ověření vstupu, aby bylo zajištěno, že skóre je mezi 0 a 100 Otestujte svůj program s různými skóre včetně hraničních případů jako 59, 60, 89, 90 a neplatných vstupů. Více informací o agent módu najdete zde. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Přečtěte si více o mnoha operátorech dostupných uživatelům na MDN. Projďěte si skvělý operator lookup od Joshe Comeaua! ## Assignment Operators --- ## 🧠 Souhrn vašeho nástroje pro rozhodování --- ## 🚀 Časová osa vašeho mistrovství v rozhodování v JavaScriptu ### ⚡ Co můžete zvládnout během příštích 5 minut - [ ] Procvičujte operátory porovnání ve vaší konzoli prohlížeče - [ ] Napište jednoduchý příkaz if-else, který kontroluje váš věk - [ ] Vyzkoušejte výzvu: přepište if-else pomocí ternárního operátoru - [ ] Otestujte, co se stane s různými hodnotami „truthy“ a „falsy“ ### 🎯 Co můžete zvládnout během této hodiny - [ ] Dokončete kvíz po lekci a zopakujte si nejasné pojmy - [ ] Vytvořte komplexní kalkulačku známek z GitHub Copilot výzvy - [ ] Vytvořte jednoduchý rozhodovací strom pro reálný scénář (např. výběr oblečení) - [ ] Procvičujte kombinování více podmínek s logickými operátory - [ ] Experimentujte s příkazy switch pro různé případy použití ### 📅 Vaše týdenní mistrovství logiky - [ ] Dokončete úkol s operátory s kreativními příklady - [ ] Vytvořte mini kvízovou aplikaci s různými podmíněnými strukturami - [ ] Vytvořte validátor formuláře, který kontroluje více vstupních podmínek - [ ] Procvičujte úkoly z Josh Comeau operator lookup - [ ] Refaktorujte existující kód, aby používal vhodnější podmíněné struktury - [ ] Studujte vyhodnocování zkrácených výrazů a jejich dopad na výkon ### 🌟 Vaše měsíční proměna - [ ] Ovládněte složité vnořené podmínky a udržujte čitelnost kódu - [ ] Vytvořte aplikaci s pokročilou logikou rozhodování - [ ] Přispějte do open source projektů zlepšením podmíněné logiky - [ ] Naučte někoho jiného o různých podmíněných strukturách a kdy je použít - [ ] Prozkoumejte funkcionální programovací přístupy k podmíněné logice - [ ] Vytvořte si osobní referenční příručku pro nejlepší praxe podmíněného kódu ### 🏆 Kontrola mistrovství rozhodování Oslavte své mistrovství v logickém myšlení: - Jakou nejkomplexnější rozhodovací logiku jste úspěšně implementovali? - Která podmíněná struktura vám přijde nejpřirozenější a proč? - Jak vám znalost logických operátorů změnila přístup k řešení problémů? - Která reálná aplikace by těžila z pokročilé rozhodovací logiky? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Prohlášení o vyloučení odpovědnosti: Tento dokument byl přeložen pomocí AI překladatelské služby Co-op Translator. Přestože usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědni za jakékoli nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Základy JavaScriptu: Pole a smyčky

## Přednáškový kvíz Přednáškový kvíz Zajímalo vás někdy, jak webové stránky sledují položky v nákupním košíku nebo zobrazují seznam přátel? Právě zde přicházejí na řadu pole a smyčky. Pole jsou jako digitální kontejnery, které drží více informací najednou, zatímco smyčky vám umožní efektivně pracovat se všemi těmito daty bez nutnosti opakovat kód. Tyto dva koncepty dohromady tvoří základ pro práci s informacemi ve vašich programech. Naučíte se, jak přejít od ručního psaní každého kroku k vytváření chytrého a efektivního kódu, který dokáže rychle zpracovat stovky nebo dokonce tisíce položek. Na konci této lekce pochopíte, jak dosáhnout složitých datových úkolů jen s několika řádky kódu. Pojďme prozkoumat tyto nezbytné programovací koncepty. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Pole Přemýšlejte o polích jako o digitálním archivu – místo ukládání jednoho dokumentu do jedné zásuvky můžete uspořádat více souvisejících položek do jednoho strukturovaného kontejneru. V programování pole umožňují uložit více kousků informací do jednoho uspořádaného balíčku. Ať už tvoříte fotogalerii, spravujete seznam úkolů nebo sledujete nejlepší skóre ve hře, pole poskytují základ pro organizaci dat. Podívejme se, jak fungují. ✅ Pole jsou všude kolem nás! Můžete si vzpomenout na nějaký příklad pole z reálného života, například pole solárních panelů? ### Vytváření polí Vytvoření pole je super jednoduché – stačí použít hranaté závorky! Co se zde děje? Právě jste vytvořili prázdný kontejner pomocí těchto hranatých závorek []. Představte si to jako prázdnou knihovní polici – je připravená držet jakékoliv knihy, které tam chcete uspořádat. Pole můžete také hned na začátku naplnit počátečními hodnotami: Zajímavosti k poznání: - Můžete v poli uchovávat text, čísla nebo i pravdivostní hodnoty (true/false) - Stačí jen oddělit každou položku čárkou – jednoduché! - Pole jsou ideální pro uchování propojených informací pohromadě ### Indexování polí Tady je něco, co může zpočátku přijít divné: pole číslují své položky začínajíce od 0, ne 1. Toto indexování od nuly má kořeny ve způsobu, jakým funguje počítačová paměť – jde o programátorský zvyk od dob jazyků jako C. Každé místo v poli dostane své vlastní adresní číslo nazývané index. ✅ Překvapuje vás, že pole začínají s indexem nula? V některých programovacích jazycích indexy začínají na jedničce. Zajímavou historii k tomu naleznete na Wikipedia. Přístup k prvkům pole: Co se zde děje: - Používá notaci s hranatými závorkami a číslem indexu pro přístup k prvkům - Vrací hodnotu uloženou na dané pozici v poli - Čítá od 0, takže první prvek má index 0 Úprava prvků pole: V předchozím příkladu jsme: - Změnili prvek na indexu 4 z "Rocky Road" na "Butter Pecan" - Přidali nový prvek "Cookie Dough" na index 5 - Automaticky zvětšili délku pole při přidání mimo aktuální rozsah ### Délka pole a běžné metody Pole mají zabudované vlastnosti a metody, které práci s daty výrazně usnadňují. Zjistit délku pole: Klíčové body: - Vrací celkový počet prvků v poli - Aktualizuje se automaticky při přidání nebo odebrání prvků - Poskytuje dynamický počet užitečný pro smyčky a validace Základní metody polí: Co tyto metody dělají: - Přidávají prvky pomocí push() (na konec) a unshift() (na začátek) - Odebírají prvky metodami pop() (z konce) a shift() (ze začátku) - Vyhledávají prvky pomocí indexOf() a kontrolují existenci s includes() - Vrací užitečné hodnoty jako odebrané prvky nebo indexy ✅ Vyzkoušejte sami! Použijte konzoli ve vašem prohlížeči a vytvořte své vlastní pole, které budete upravovat a manipulovat. ### 🧠 Ověření znalostí polí: Organizace vašich dat Otestujte své porozumění polím: - Proč myslíte, že pole začínají počítat od 0 místo od 1? - Co se stane, když se pokusíte přistoupit k indexu, který neexistuje (např. arr[100] v poli se 5 prvky)? - Dokážete uvést tři reálné situace, kde by bylo pole užitečné? ## Smyčky Představte si známý trest z románů Charlese Dickense, kdy studenti museli opakovaně psát věty na tabulku. Představte si, že můžete někdo jen říct „napiš tuto větu 100x“ a ono se to udělá automaticky. Přesně to dělají smyčky ve vašem kódu. Smyčky jsou jako vytrvalý pomocník, který opakuje úkoly bez chyby. Ať už potřebujete projít každou položku v nákupním košíku nebo zobrazit všechny fotografie v albu, smyčky zvládnou opakování efektivně. JavaScript nabízí několik typů smyček. Pojďme si je postupně prohlédnout a pochopit, kdy je použít. ### Smyčka for Smyčka for je jako nastavení časovače – přesně víte, kolikrát se má něco stát. Je velmi organizovaná a předvídatelná, což ji činí ideální, když pracujete s poli nebo potřebujete něco počítat. Struktura smyčky for: Krok za krokem, co se děje: - Inicializuje čítačovou proměnnou i na 0 na začátku - Kontroluje podmínku i < 10 před každou iterací - Provádí kód pokud je podmínka pravdivá - Zvyšuje hodnotu i o 1 po každé iteraci pomocí i++ - Zastaví když podmínka přestane platit (když i dosáhne 10) ✅ Spusťte tento kód v konzoli prohlížeče. Co se stane, když malinko změníte čítač, podmínku nebo výraz pro inkrementaci? Dokážete ho pustit zpětně a vytvořit odpočet? ### 🗓️ Ověření zvládnutí smyčky for: Řízené opakování Zhodnoťte své znalosti smyčky for: - Jaké jsou tři části smyčky for a k čemu každá slouží? - Jak byste procházeli pole pozpátku? - Co se stane, když zapomenete inkrementaci (i++)? ### Smyčka while Smyčka while je jako říct „pokračuj, dokud...“ – nemusíte přesně vědět, kolikrát se vykoná, ale víte, kdy má skončit. Je ideální pro věci jako dotazování uživatele, dokud nedostanete požadovaný vstup, nebo prohledávání dat, dokud nenajdete, co hledáte. Charakteristiky smyčky while: - Pokračuje dokud je podmínka pravdivá - Vyžaduje ruční správu čítačových proměnných - Kontroluje podmínku před každou iterací - Hrozí nekonečná smyčka, pokud podmínka nikdy nezhyne (nepřestane platit) Co vidíme v těchto příkladech: - Řídí čítačovou proměnnou i manuálně uvnitř těla smyčky - Zvětšují čítač k zabránění nekonečné smyčky - Ukazují praktický případ s uživatelským vstupem a limitem pokusů - Obsahují bezpečnostní mechanismy k předejití nekonečného běhu ### ♾️ Ověření moudrosti while smyčky: Opakování založené na podmínce Otestujte své porozumění while smyčce: - Jaké je hlavní nebezpečí při používání while smyček? - Kdy byste zvolili while smyčku místo for smyčky? - Jak můžete zabránit nekonečným smyčkám? ### Moderní alternativy smyček JavaScript nabízí moderní syntaxe smyček, které váš kód činí čitelnějším a méně náchylným k chybám. Smyčka For...of (ES6+): Hlavní výhody for...of: - Odstraňuje potřebu spravovat indexy a chyby s off-by-one - Umožňuje přímý přístup k prvkům pole - Zvyšuje čitelnost kódu a snižuje syntaktickou složitost Metoda forEach: Co potřebujete vědět o forEach: - Spustí funkci pro každý prvek v poli - Poskytuje hodnotu prvku i jeho index jako parametry - Nelze ji předčasně ukončit (na rozdíl od tradičních smyček) - Vrací undefined (nevytváří nové pole) ✅ Proč byste zvolili for smyčku oproti while smyčce? 17 tisíc diváků na StackOverflow mělo stejnou otázku a některé názory by vás mohly zajímat. ### 🎨 Ověření moderní syntaxe smyček: Přijetí ES6+ Zhodnoťte své znalosti moderního JavaScriptu: - Jaké jsou výhody for...of oproti tradičním for smyčkám? - Kdy byste stále preferovali tradiční for smyčky? - V čem se liší forEach a map? ## Smyčky a pole Kombinace polí a smyček vytváří silné možnosti pro zpracování dat. Toto spojení je základem mnoha programátorských úkolů, od zobrazování seznamů po výpočty statistik. Tradiční zpracování polí: Pochopení každého přístupu: - Používá délku pole pro určení hranice smyčky - Přistupuje k prvkům podle indexu v tradičních for smyčkách - Umožňuje přímý přístup k prvkům v for...of smyčkách - Zpracovává každý prvek pole přesně jednou Praktický příklad zpracování dat: Jak tento kód funguje: - Iniciuje proměnné pro sledování součtu a extrémů - Zpracovává každou známku pomocí jedné efektivní smyčky - Kumuluje celkový součet pro výpočet průměru - Sleduje nejvyšší a nejnižší hodnoty během průchodu - Vypočítává konečné statistiky po dokončení smyčky ✅ Vyzkoušejte si smyčku nad polem vlastního vytvoření v konzoli vašeho prohlížeče. --- ## Výzva GitHub Copilot Agent 🚀 Použijte agentní režim k dokončení následující výzvy: Popis: Vytvořte komplexní funkci pro zpracování dat, která kombinuje pole a smyčky k analýze datové sady a generování smysluplných přehledů. Úkol: Vytvořte funkci s názvem analyzeGrades, která přijme pole objektů s hodnocením studentů (každý obsahuje vlastnosti jméno a skóre) a vrátí objekt se statistikami včetně nejvyššího skóre, nejnižšího skóre, průměrného skóre, počtu studentů, kteří prošli (skóre >= 70), a pole jmen studentů, kteří dosáhli nadprůměrného skóre. Ve svém řešení použijte alespoň dva různé typy smyček. Více o agentním režimu se dozvíte zde. ## 🚀 Výzva JavaScript nabízí několik moderních metod pro pole, které mohou nahradit tradiční smyčky pro konkrétní úkoly. Prozkoumejte forEach, for-of, map, filter a reduce. Vaše výzva: Refaktorujte příklad s hodnocením studentů pomocí alespoň tří různých metod polí. Všimněte si, jak mnohem čistější a čitelnější kód se stane s moderní syntaxí JavaScriptu. ## Kvíz po přednášce Kvíz po přednášce ## Přehled a samostudium Pole v JavaScriptu mají mnoho metod, které jsou mimořádně užitečné pro manipulaci s daty. Přečtěte si o těchto metodách a vyzkoušejte si některé z nich (například push, pop, slice a splice) na poli, které si vytvoříte. ## Zadání Procházení pole --- ## 📊 Shrnutí vašeho nástroje pro pole a smyčky --- ## 🚀 Časová osa vašeho mistrovství v polích a smyčkách ### ⚡ Co zvládnete za dalších 5 minut - [ ] Vytvořit pole vašich oblíbených filmů a přistupovat k vybraným prvkům - [ ] Napsat for smyčku, která počítá od 1 do 10 - [ ] Vyzkoušet výzvu s moderními metodami polí z lekce - [ ] Procvičit indexování polí ve vaší konzoli prohlížeče ### 🎯 Co zvládnete během této hodiny - [ ] Dokončit kvíz po lekci a zopakovat si náročnější koncepty - [ ] Vytvořit komplexní analyzátor známek podle výzvy GitHub Copilot - [ ] Vytvořit jednoduchý nákupní košík, který přidává a odebírá položky - [ ] Procvičit převody mezi různými typy smyček - [ ] Experimentovat s metodami polí jako push, pop, slice a splice ### 📅 Vaše týdenní cesta zpracováním dat - [ ] Dokončit zadání "Procházení pole" s kreativními vylepšeními - [ ] Vytvořit aplikaci seznam úkolů pomocí polí a smyček - [ ] Vytvořit jednoduchý kalkulátor statistik pro číselná data - [ ] Procvičovat metody polí z MDN - [ ] Vytvořit rozhraní pro foto galerii nebo playlist hudby - [ ] Prozkoumat funkcionální programování pomocí map, filter a reduce ### 🌟 Vaše měsíční proměna - [ ] Ovládnout pokročilé operace s poli a optimalizaci výkonu - [ ] Vytvořit kompletní dashboard pro vizualizaci dat - [ ] Přispívat do open-source projektů zaměřených na zpracování dat - [ ] Naučit někoho jiného o polích a smyčkách s praktickými příklady - [ ] Vytvořit osobní knihovnu znovupoužitelných funkcí pro zpracování dat - [ ] Prozkoumat algoritmy a datové struktury založené na polích ### 🏆 Závěrečný check-in šampiona zpracování dat Oslavte své mistrovství v polích a smyčkách: - Jaká operace s poli je podle vás nejvíce užitečná pro reálné aplikace? - Který typ smyčky vám přijde nejpřirozenější a proč? - Jak vám porozumění polím a smyčkám změnilo přístup k organizaci dat? - Jaký složitý úkol zpracování dat byste rádi vyřešili příště? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Prohlášení o vyloučení odpovědnosti: Tento dokument byl přeložen za použití AI překladatelské služby Co-op Translator. I když usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace je doporučen profesionální lidský překlad. Nejsme odpovědni za jakékoliv nedorozumění nebo špatné výklady vyplývající z použití tohoto překladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Introduktion til JavaScript

JavaScript er sproget på nettet. I disse fire lektioner vil du lære dets grundlæggende elementer. ### Emner 1. Variabler og Datatyper 2. Funktioner og Metoder 3. At træffe beslutninger med JavaScript 4. Arrays og Løkker ### Kreditering Disse lektioner er skrevet med ♥️ af Jasmine Greenaway, Christopher Harrison og Chris Noring --- Ansvarsfraskrivelse: Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.

javascript

JavaScript Grundlæggende: Datatyper

Datatyper er et af de grundlæggende begreber i JavaScript, som du vil støde på i hvert program, du skriver. Tænk på datatyper som filsystemet brugt af gamle bibliotekarer i Alexandria – de havde specifikke steder til ruller med poesi, matematik og historiske optegnelser. JavaScript organiserer information på en lignende måde med forskellige kategorier til forskellige slags data. I denne lektion vil vi udforske de kerne-datatyper, der får JavaScript til at fungere. Du vil lære at håndtere tal, tekst, sand/falsk-værdier og forstå, hvorfor det er vigtigt at vælge den rette type til dine programmer. Disse koncepter kan virke abstrakte i starten, men med øvelse bliver de en anden natur. At forstå datatyper vil gøre alt andet i JavaScript meget klarere. Ligesom arkitekter skal forstå forskellige byggematerialer, før de bygger en katedral, vil disse grundprincipper støtte alt, hvad du bygger fremover. ## Forud-forelæsning Quiz Forud-forelæsning quiz Denne lektion dækker det grundlæggende i JavaScript, sproget der skaber interaktivitet på nettet. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Lad os starte med variabler og de datatyper, der udfylder dem! ## Variabler Variabler er grundlæggende byggesten i programmering. Ligesom de mærkede krukker, som middelalderlige alkymister brugte til at opbevare forskellige stoffer, tillader variabler dig at gemme information og give den et beskrivende navn, så du kan referere til det senere. Skal du huske en persons alder? Gem den i en variabel kaldet age. Vil du holde styr på en brugers navn? Gem det i en variabel kaldet userName. Vi vil fokusere på den moderne tilgang til at oprette variabler i JavaScript. De teknikker, du lærer her, repræsenterer års sprogets udvikling og bedste praksis udviklet af programmeringsfællesskabet. Oprettelse og deklarering af en variabel har følgende syntaks [keyword] [name]. Det består af to dele: - Nøgleord. Brug let til variabler, der kan ændres, eller const til værdier, der forbliver den samme. - Variabelnavnet, dette er et beskrivende navn, du vælger selv. ✅ Nøgleordet let blev introduceret i ES6 og giver din variabel et såkaldt _blokscope_. Det anbefales, at du bruger let eller const i stedet for det ældre var-nøgleord. Vi vil dække blokscope mere detaljeret i fremtidige dele. ### Opgave - arbejde med variabler 1. Deklarer en variabel. Lad os starte med at oprette vores første variabel: ```javascript let myVariable; ``` Hvad dette opnår: - Dette fortæller JavaScript at oprette et lagersted kaldet myVariable - JavaScript tildeler plads i hukommelsen til denne variabel - Variablen har i øjeblikket ingen værdi (undefined) 2. Giv den en værdi. Lad os nu putte noget i vores variabel: ```javascript myVariable = 123; ``` Sådan fungerer tildeling: - Operatoren = tildeler værdien 123 til vores variabel - Variablen indeholder nu denne værdi i stedet for værende undefined - Du kan referere til denne værdi i hele din kode ved at bruge myVariable > Bemærk: brugen af = i denne lektion betyder, at vi bruger en "tildelingsoperator", som bruges til at sætte en værdi til en variabel. Det betyder ikke lighed. 3. Gør det den smarte måde. Faktisk, lad os kombinere de to trin: ```javascript let myVariable = 123; ``` Denne tilgang er mere effektiv: - Du deklarerer variablen og tildeler en værdi i en enkelt erklæring - Dette er standardpraksis blandt udviklere - Det reducerer kodelængden samtidig med at klarheden bevares 4. Skift mening. Hvad hvis vi vil gemme et andet tal? ```javascript myVariable = 321; ``` Forståelse af gen-tildeling: - Variablen indeholder nu 321 i stedet for 123 - Den tidligere værdi erstattes – variabler gemmer kun én værdi ad gangen - Denne mutabilitet er den vigtigste egenskab ved variabler erklæret med let ✅ Prøv det! Du kan skrive JavaScript direkte i din browser. Åbn et browservindue og naviger til Udviklerværktøjer. I konsollen finder du en prompt; skriv let myVariable = 123, tryk enter, og skriv derefter myVariable. Hvad sker der? Du vil lære mere om disse koncepter i efterfølgende lektioner. ### 🧠 Master Check af Variabler: Bliv Fortrolig Lad os se, hvordan du har det med variabler: - Kan du forklare forskellen mellem at deklarere og tildele en variabel? - Hvad sker der, hvis du prøver at bruge en variabel, før du har erklæret den? - Hvornår vil du vælge let over const for en variabel? ## Konstanter Nogle gange skal du gemme information, der aldrig må ændres under programmets udførelse. Tænk på konstanter som de matematiske principper, som Euklid etablerede i oldtidens Grækenland – når de først var bevist og dokumenteret, forblev de faste for al fremtidig brug. Konstanter fungerer ligesom variabler, men med en vigtig begrænsning: når du først har tildelt deres værdi, kan den ikke ændres. Denne uforanderlighed hjælper med at forhindre utilsigtede ændringer af kritiske værdier i dit program. Deklaration og initialisering af en konstant følger samme koncept som for en variabel, med undtagelse af nøgleordet const. Konstanter erklæres typisk med store bogstaver. Dette er, hvad koden gør: - Opretter en konstant med navnet MY_VARIABLE med værdien 123 - Bruger store bogstaver som navngivningskonvention for konstanter - Forhindrer enhver fremtidig ændring af denne værdi Konstanter har to hovedregler: - Du skal give dem en værdi med det samme – tomme konstanter er ikke tilladt! - Du kan aldrig ændre den værdi – JavaScript vil kaste en fejl, hvis du prøver. Lad os se, hvad jeg mener: Simpel værdi – Følgende er IKKE tilladt: ```javascript const PI = 3; PI = 4; // ikke tilladt ``` Husk dette: - Forsøg på at gen-tildele en konstant vil forårsage en fejl - Beskytter vigtige værdier mod utilsigtede ændringer - Sikrer at værdien forbliver konsistent gennem hele dit program Objektreferencen er beskyttet – Følgende er IKKE tilladt: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ikke tilladt ``` Forstå disse koncepter: - Forhindrer at hele objektet bliver erstattet med et nyt - Beskytter referencen til det oprindelige objekt - Opholder objektets identitet i hukommelsen Objektets værdi er ikke beskyttet – Følgende ER tilladt: ```javascript const obj = { a: 3 }; obj.a = 5; // tilladt ``` Her er, hvad der sker: - Ændrer værdien af en egenskab inde i objektet - Beholder den samme objektreference - Viser at objektets indhold kan ændres, mens referencen forbliver konstant > Bemærk, en const betyder, at referencen er beskyttet mod gen-tildeling. Værdien er dog ikke _uforanderlig_ og kan ændre sig, især hvis det er en kompleks konstruktion som et objekt. ## Datatyper JavaScript organiserer information i forskellige kategorier kaldet datatyper. Dette koncept spejler, hvordan gamle lærde kategoriserede viden – Aristoteles skelnede mellem forskellige typer af ræsonnement, vel vidende, at logiske principper ikke kunne anvendes ensartet på poesi, matematik og naturfilosofi. Datatyper er vigtige, fordi forskellige operationer arbejder med forskellige slags information. Ligesom du ikke kan udføre aritmetik på en persons navn eller alfabetisere en matematisk ligning, kræver JavaScript den passende datatype til hver operation. At forstå dette forhindrer fejl og gør din kode mere pålidelig. Variabler kan gemme mange forskellige typer værdier, som tal og tekst. Disse forskellige værdityper kaldes for datatyper. Datatyper er en vigtig del af softwareudvikling, fordi de hjælper udviklere med at træffe beslutninger om, hvordan koden skal skrives, og hvordan softwaren skal køre. Derudover har nogle datatyper unikke egenskaber, der hjælper med at transformere eller udvinde yderligere information fra en værdi. ✅ Datatyper kaldes også JavaScript data-primitiver, da de er de lavest-niveau datatyper, som sproget tilbyder. Der er 7 primitive datatyper: string, number, bigint, boolean, undefined, null og symbol. Brug et øjeblik på at visualisere, hvad hver af disse primitive kunne repræsentere. Hvad er en zebra? Hvad med 0? true? ### Tal Tal er den mest ligetil datatype i JavaScript. Uanset om du arbejder med heltal som 42, decimaltal som 3.14, eller negative tal som -5, håndterer JavaScript dem ensartet. Kan du huske vores variabel fra tidligere? Det 123, vi gemte, var faktisk en tal-datatype: Nøglekarakteristika: - JavaScript genkender automatisk numeriske værdier - Du kan udføre matematiske operationer med disse variabler - Ingen eksplicit typeangivelse er nødvendig Variabler kan gemme alle typer tal, inklusive decimaltal eller negative tal. Tal kan også bruges med aritmetiske operatorer, som dækkes i næste sektion. ### Aritmetiske Operatorer Aritmetiske operatorer giver dig mulighed for at udføre matematiske beregninger i JavaScript. Disse operatorer følger de samme principper som matematikere har brugt i århundreder – de samme symboler, der optrådte i værker af lærde som Al-Khwarizmi, som udviklede algebraisk notation. Operatorerne fungerer som forventet fra traditionel matematik: plus for addition, minus for subtraktion, osv. Der er flere typer operatorer, som du kan bruge til aritmetiske funktioner, og nogle er her listet: ✅ Prøv det! Prøv en aritmetisk operation i din browsers konsol. Overrasker resultaterne dig? ### 🧮 Matematikfærdighedscheck: Regn med Selvsikkerhed Test din aritmetiske forståelse: - Hvad er forskellen mellem / (division) og % (rest)? - Kan du forudsige, hvad 10 % 3 er? (Hint: det er ikke 3,33...) - Hvorfor kunne restoperatoren være nyttig i programmering? ### Strenge I JavaScript repræsenteres tekstdata som strenge. Begrebet "streng" kommer fra idéen om tegn sat sammen i sekvens, ligesom skribenter i middelalderlige klostre ville forbinde bogstaver for at danne ord og sætninger i deres manuskripter. Strenge er grundlæggende for webudvikling. Hver tekst, der vises på et website – brugernavne, knap-etiketter, fejlmeddelelser, indhold – håndteres som strengdata. At forstå strenge er essentielt for at skabe funktionelle brugerflader. Strenge er sæt af tegn, der befinder sig mellem enkelt- eller dobbeltanførselstegn. Forstå disse koncepter: - Bruger enten enkeltanførselstegn ' eller dobbeltanførselstegn " til at definere strenge - Gemmer tekstdata, som kan inkludere bogstaver, tal og symboler - Tildeler strengværdier til variabler til senere brug - Kræver anførselstegn for at skelne tekst fra variabelnavne Husk at bruge anførselstegn, når du skriver en streng, ellers vil JavaScript antage, det er et variabelnavn. ### Formatering af Strenge Strengmanipulation giver dig mulighed for at kombinere tekstdele, inkorporere variabler og skabe dynamisk indhold, der reagerer på programmets tilstand. Denne teknik gør det muligt at konstruere tekst programmatisk. Ofte skal du sammenkæde flere strenge – denne proces kaldes konkatenering. For at sammenkæde to eller flere strenge, eller forbinde dem sammen, brug + operatoren. Trin for trin, her er hvad der sker: - Kombinerer flere strenge ved brug af + operatoren - Forbinder strenge direkte sammen uden mellemrum i det første eksempel - Tilføjer mellemrumstegn " " mellem strenge for læsbarhed - Indsætter tegnsætning som kommaer for at skabe korrekt formatering ✅ Hvorfor er 1 + 1 = 2 i JavaScript, men '1' + '1' = 11? Tænk over det. Hvad med '1' + 1? Template literals er en anden måde at formatere strenge på, bortset fra at backtick bruges i stedet for citationstegn. Alt der ikke er almindelig tekst, skal placeres inden i pladsholdere ${ }. Dette inkluderer eventuelle variable, som kan være strenge. Lad os forstå hver del: - Bruger backticks ` `` i stedet for almindelige citationstegn til at lave template literals - Indlejrer variable direkte ved brug af ${} pladsholder-syntaks - Bevarer mellemrum og formatering nøjagtigt som skrevet - Tilbyder en renere måde at skabe komplekse strenge med variable på Du kan opnå dine formateringsmål med begge metoder, men template literals vil respektere ethvert mellemrum og linjeskift. ✅ Hvornår ville du bruge en template literal kontra en almindelig streng? ### 🔤 Kontrol af strengfærdigheder: Tillid til tekstopredigering Evaluer dine strengfærdigheder: - Kan du forklare, hvorfor '1' + '1' er lig med '11' i stedet for 2? - Hvilken strengmetode synes du er mest læsbar: sammenkædning eller template literals? - Hvad sker der, hvis du glemmer citaterne omkring en streng? ### Booleans Booleans repræsenterer den simpleste form for data: de kan kun indeholde en af to værdier – true eller false. Dette binære logiksystem kan føres tilbage til George Boole, en matematiker fra det 19. århundrede, som udviklede boolsk algebra. På trods af deres enkelhed er booleans essentielle for programlogikken. De gør det muligt for din kode at træffe beslutninger baseret på betingelser – om en bruger er logget ind, om en knap blev klikket, eller om bestemte kriterier er opfyldt. Booleans kan kun have to værdier: true eller false. Booleans kan hjælpe med at træffe beslutninger om, hvilke kode linjer der skal køre, når visse betingelser opfyldes. I mange tilfælde hjælper operatorer med at sætte værdien af en Boolean, og du vil ofte bemærke og skrive variable, der initialiseres eller får opdateret deres værdier med en operator. I ovenstående har vi: - Oprettet en variabel, der gemmer den boolske værdi true - Demonstreret hvordan man gemmer den boolske værdi false - Brugt de præcise nøgleord true og false (ingen citationstegn nødvendig) - Forberedt disse variable til brug i betingede udsagn ✅ En variabel kan betragtes som 'truthy', hvis den evalueres til en boolsk true. Interessant nok er alle værdier truthy undtagen dem, der er defineret som falsy i JavaScript. ### 🎯 Boolean logik test: Beslutningstagningsevner Test din forståelse af booleans: - Hvorfor tror du, JavaScript har "truthy" og "falsy" værdier ud over blot true og false? - Kan du forudsige, hvilken af disse er falsy: 0, "0", [], "false"? - Hvordan kan booleans være nyttige til at kontrollere programflow? --- ## 📊 Dit data-type værktøjssæt - resume ## GitHub Copilot Agent Udfordring 🚀 Brug Agent-tilstand til at fuldføre den følgende udfordring: Beskrivelse: Opret en personlig informationsmanager, der demonstrerer alle de JavaScript-datatyper, du har lært i denne lektion, mens den håndterer virkelige data scenarier. Prompt: Byg et JavaScript-program, der opretter et brugerprofilobjekt med: en persons navn (streng), alder (nummer), status som studerende (boolean), yndlingsfarver som et array og et adresseobjekt med gade, by og postnummer-egenskaber. Inkluder funktioner til at vise profilinformationen og opdatere individuelle felter. Sørg for at demonstrere strengsammenkædning, template literals, aritmetiske operationer med alder og boolean-logik for studerendes status. Lær mere om agent mode her. ## 🚀 Udfordring JavaScript har nogle adfærdsmønstre, som kan overraske udviklere. Her er et klassisk eksempel at udforske: prøv at skrive dette i din browserkonsol: let age = 1; let Age = 2; age == Age og observer resultatet. Det returnerer false – kan du afgøre hvorfor? Dette repræsenterer en af de mange JavaScript-adfærd, det er værd at forstå. Fortrolighed med disse finurligheder vil hjælpe dig med at skrive mere pålidelig kode og fejlfinde mere effektivt. ## Quiz efter lektionen Post-lecture quiz ## Gennemgang og Selvstudie Tag et kig på denne liste med JavaScript øvelser og prøv en. Hvad lærte du? ## Opgave Data Types Practice ## 🚀 Din JavaScript Data Types Mestringstidslinje ### ⚡ Hvad du kan gøre inden for de næste 5 minutter - [ ] Åbn din browserkonsol og opret 3 variable med forskellige datatyper - [ ] Prøv udfordringen: let age = 1; let Age = 2; age == Age og find ud af hvorfor det er falsk - [ ] Øv sammenkædning af strenge med dit navn og yndlingstal - [ ] Test hvad der sker, når du lægger et tal til en streng ### 🎯 Hvad du kan opnå i denne time - [ ] Færdiggør quizzen efter lektionen og gennemgå eventuelle forvirrende koncepter - [ ] Opret en mini lommeregner, der lægger sammen, trækker fra, ganger og dividerer to tal - [ ] Byg en simpel navneformatterer ved hjælp af template literals - [ ] Udforsk forskellene mellem == og === sammenligningsoperatorer - [ ] Øv dig i at konvertere mellem forskellige datatyper ### 📅 Din ugelange JavaScript Grundlæggende - [ ] Færdiggør opgaven med selvtillid og kreativitet - [ ] Opret et personligt profilobjekt ved brug af alle lærte datatyper - [ ] Øv dig med JavaScript-øvelser fra CSS-Tricks - [ ] Byg en simpel formular-valideringsfunktion ved hjælp af boolean-logik - [ ] Eksperimenter med array- og objekt-datatyper (forhåndsvisning af kommende lektioner) - [ ] Deltag i et JavaScript-community og stil spørgsmål om datatyper ### 🌟 Din månedlange transformation - [ ] Integrer datatypologiforståelse i større programmeringsprojekter - [ ] Forstå hvornår og hvorfor man bruger hver datatype i virkelige applikationer - [ ] Hjælp andre begyndere med at forstå JavaScript-grundlæggende - [ ] Byg en lille applikation, der håndterer forskellige typer brugerdata - [ ] Udforsk avancerede datatypebegreber som typecoercion og streng lighed - [ ] Bidrag til open source JavaScript-projekter med dokumentationsforbedringer ### 🧠 Afsluttende Mestringskontrol af Datatyper Fejr din JavaScript-grundlæggende: - Hvilken datatype overraskede dig mest med sin opførsel? - Hvor tryg føler du dig ved at forklare variable versus konstanter til en ven? - Hvad er det mest interessante, du har opdaget om JavaScripts typesystem? - Hvilken virkelighedsnær applikation kan du forestille dig at bygge med disse grundlæggende koncepter? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på originalsproget bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,data

JavaScript Grundlæggende: Metoder og Funktioner

## For-forelæsning Quiz For-forelæsning quiz At skrive den samme kode igen og igen er en af programmeringens mest almindelige frustrationer. Funktioner løser dette problem ved at lade dig pakke kode ind i genanvendelige blokke. Tænk på funktioner som de standardiserede dele, der gjorde Henry Fords samlebånd revolutionerende – når du først har skabt en pålidelig komponent, kan du bruge den, hvor det end er nødvendigt uden at bygge den fra bunden. Funktioner giver dig mulighed for at samle kode stykker, så du kan genbruge dem gennem hele dit program. I stedet for at kopiere og indsætte den samme logik alle steder, kan du oprette en funktion en gang og kalde den, når det er nødvendigt. Denne tilgang holder din kode organiseret og gør opdateringer meget nemmere. I denne lektion lærer du, hvordan du opretter dine egne funktioner, sender information til dem og får nyttige resultater retur. Du vil opdage forskellen mellem funktioner og metoder, lære moderne syntaksmetoder og se, hvordan funktioner kan arbejde sammen med andre funktioner. Vi bygger disse koncepter trin for trin. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funktioner En funktion er en selvstændig kodeblok, der udfører en specifik opgave. Den indkapsler logik, som du kan køre, når det er nødvendigt. I stedet for at skrive den samme kode flere gange i dit program, kan du pakke den ind i en funktion og kalde denne funktion, når du har brug for det. Denne tilgang holder din kode ren og gør opdateringer meget nemmere. Overvej hvor svært det ville være at vedligeholde, hvis du skulle ændre logik spredt over 20 forskellige steder i din kodebase. Det er vigtigt at navngive dine funktioner beskrivende. En godt navngivet funktion kommunikerer sit formål klart – når du ser cancelTimer(), forstår du straks, hvad den gør, ligesom en klart mærket knap fortæller dig præcis, hvad der sker, når du klikker på den. ## Oprettelse og kald af en funktion Lad os se på, hvordan man opretter en funktion. Syntaksen følger et konsekvent mønster: Lad os bryde det ned: - function nøgleordet fortæller JavaScript "Hey, jeg laver en funktion!" - nameOfFunction er, hvor du giver din funktion et beskrivende navn - Parentesserne () er, hvor du kan tilføje parametre (det vender vi tilbage til snart) - Krøllede parenteser {} indeholder den faktiske kode, der kører, når du kalder funktionen Lad os lave en simpel hilsensfunktion for at se det i praksis: Denne funktion udskriver "Hello, world!" til konsollen. Når du har defineret den, kan du bruge den så mange gange, som du har brug for. For at udføre (eller "kalde") din funktion, skriv dens navn efterfulgt af parenteser. JavaScript tillader dig at definere din funktion før eller efter du kalder den – JavaScript motoren håndterer udførelsesrækkefølgen. Når du kører denne linje, eksekveres al koden inde i din displayGreeting funktion, og "Hello, world!" vises i browserens konsol. Du kan kalde denne funktion gentagne gange. ### 🧠 Grundlæggende Funktionstjek: Byg Dine Første Funktioner Lad os se, hvordan du føler dig med grundlæggende funktioner: - Kan du forklare, hvorfor vi bruger krøllede parenteser {} i funktionsdefinitioner? - Hvad sker der, hvis du skriver displayGreeting uden parenteserne? - Hvorfor kan det være nyttigt at kalde den samme funktion flere gange? ### Bedste praksis for funktioner Her er et par tips til at hjælpe dig med at skrive gode funktioner: - Giv dine funktioner klare, beskrivende navne – din fremtidige version vil takke dig! - Brug camelCase til flersprogede navne (f.eks. calculateTotal i stedet for calculate_total) - Hold hver funktion fokuseret på at gøre én ting godt ## At sende information til en funktion Vores displayGreeting funktion er begrænset – den kan kun vise "Hello, world!" til alle. Parametre tillader os at gøre funktioner mere fleksible og nyttige. Parametre fungerer som pladsholdere, hvor du kan indsætte forskellige værdier hver gang, du bruger funktionen. På den måde kan den samme funktion arbejde med forskellig information ved hvert kald. Du opremser parametre inde i parenteserne, når du definerer din funktion, adskilt med kommaer, hvis der er flere: Hver parameter fungerer som en pladsholder – når nogen kalder din funktion, giver de egentlige værdier, der sættes ind i disse pladsholdere. Lad os opdatere vores hilsensfunktion, så den tager imod et navn: Bemærk hvordan vi bruger backticks (` `) og ${}` til at indsætte navnet direkte i vores besked – dette kaldes en template literal, og det er en rigtig praktisk måde at bygge strenge med variable blandet ind. Nu kan vi, når vi kalder vores funktion, sende et hvilket som helst navn: JavaScript tager strengen 'Christopher', tildeler den til name parameteren og skaber den personlige besked "Hello, Christopher!" ## Standardværdier Hvad hvis vi vil gøre nogle parametre valgfrie? Det er her standardværdier kommer ind i billedet! Lad os sige, at vi vil lade folk tilpasse hilsens ord, men hvis de ikke angiver noget, bruger vi bare "Hello" som en standard. Du kan opsætte standardværdier ved at bruge lighedstegn, ligesom når du sætter en variabel: Her er name stadig påkrævet, men salutation har en backup værdi på 'Hello', hvis ingen giver en anden hilsen. Nu kan vi kalde denne funktion på to forskellige måder: Ved det første kald bruger JavaScript standarden "Hello", da vi ikke har angivet en hilsen. Ved det andet kald bruger den vores brugerdefinerede "Hi" i stedet. Denne fleksibilitet gør funktioner tilpasningsdygtige til forskellige scenarier. ### 🎛️ Parametre Mester Check: Gør Funktioner Fleksible Test din forståelse af parametre: - Hvad er forskellen mellem en parameter og et argument? - Hvorfor er standardværdier nyttige i programmering i den virkelige verden? - Kan du forudsige, hvad der sker, hvis du sender flere argumenter end parametre? ## Returnerede værdier Vores funktioner hidtil har bare udskrevet beskeder til konsollen, men hvad hvis du ønsker, at en funktion skal beregne noget og give dig resultatet tilbage? Det er her returnerede værdier kommer ind i billedet. I stedet for bare at vise noget, kan en funktion give dig en værdi tilbage, som du kan gemme i en variabel eller bruge andre steder i din kode. For at sende en værdi tilbage bruger du nøgleordet return efterfulgt af det, du ønsker at returnere: Her er noget vigtigt: Når en funktion rammer en return erklæring, stopper den øjeblikkeligt med at køre og sender den værdi tilbage til den, som kaldte den. Lad os ændre vores hilsensfunktion, så den returnerer beskeden i stedet for at udskrive den: Nu skaber denne funktion beskeden og sender den tilbage til os i stedet for at udskrive den. For at bruge den returnerede værdi kan vi gemme den i en variabel ligesom enhver anden værdi: Nu indeholder greetingMessage "Hello, Christopher" og vi kan bruge den hvor som helst i vores kode – til at vise den på en webside, inkludere den i en email eller sende den til en anden funktion. ### 🔄 Returnerede Værdier Check: Få Resultater Tilbage Evaluer din forståelse af returnerede værdier: - Hvad sker der med kode efter en return erklæring i en funktion? - Hvorfor er det ofte bedre at returnere værdier end bare at udskrive til konsollen? - Kan en funktion returnere forskellige typer værdier (streng, tal, boolsk)? ## Funktioner som parametre for funktioner Funktioner kan sendes som parametre til andre funktioner. Selvom dette koncept kan virke komplekst til at starte med, er det en kraftfuld funktion, der muliggør fleksible programmeringsmønstre. Dette mønster er super almindeligt, når du vil sige "når noget sker, gør dette andet." For eksempel "når timeren slutter, kør denne kode" eller "når brugeren klikker på knappen, kald denne funktion." Lad os se på setTimeout, som er en indbygget funktion, der venter et bestemt tidsrum og så kører noget kode. Vi skal fortælle den, hvilken kode den skal køre – perfekt brug af at sende en funktion! Prøv denne kode – efter 3 sekunder ser du en besked: Bemærk hvordan vi sender displayDone (uden parenteser) til setTimeout. Vi kalder ikke funktionen selv – vi overgiver den til setTimeout og siger "kald denne om 3 sekunder." ### Anonyme funktioner Nogle gange har du brug for en funktion til bare én ting og vil ikke give den et navn. Tænk over det – hvis du kun bruger en funktion én gang, hvorfor så fylde din kode med et ekstra navn? JavaScript lader dig oprette anonyme funktioner – funktioner uden navne, som du kan definere lige dér, hvor du har brug for dem. Sådan kan vi omskrive vores timer-eksempel med en anonym funktion: Dette opnår det samme resultat, men funktionen er defineret direkte inden i setTimeout kaldet, hvilket eliminerer behovet for en separat funktionsdeklaration. ### Fat arrow funktioner Moderne JavaScript har en endnu kortere måde at skrive funktioner på kaldet arrow functions. De bruger => (som ligner en pil – forstår du?) og er super populære blandt udviklere. Arrow-funktioner lader dig springe function nøgleordet over og skrive mere koncis kode. Her er vores timer-eksempel med en arrow-funktion: () er hvor parametrene går (tomt i dette tilfælde), derefter kommer pilen =>, og til sidst funktionskroppen i krøllede parenteser. Dette giver den samme funktionalitet med en mere koncis syntaks. ### Hvornår skal man bruge hvilken strategi Hvornår skal du bruge hvilken tilgang? En praktisk tommelfingerregel: Hvis du vil bruge funktionen flere gange, giv den et navn og definer den separat. Hvis det er til ét specifikt formål, kan du overveje en anonym funktion. Både arrow-funktioner og traditionel syntaks er gyldige valg, selvom arrow-funktioner er udbredte i moderne JavaScript-kodebaser. ### 🎨 Funktion Styles Mester Check: Vælg den Rigtige Syntaks Test din syntaksforståelse: - Hvornår foretrækker du måske arrow functions fremfor traditionel funktionssyntaks? - Hvad er hovedfordelen ved anonyme funktioner? - Kan du tænke på en situation, hvor en navngivet funktion er bedre end en anonym? --- ## 🚀 Udfordring Kan du formulere forskellen på funktioner og metoder i én sætning? Giv det et forsøg! ## GitHub Copilot Agent Udfordring 🚀 Brug Agent-tilstand til at løse følgende udfordring: Beskrivelse: Opret et hjælpemiddel bibliotek af matematiske funktioner, der demonstrerer forskellige funktionskoncepter dækket i denne lektion, inklusive parametre, standardværdier, returnerede værdier og arrow funktioner. Prompt: Opret en JavaScript-fil kaldet mathUtils.js, som indeholder følgende funktioner: 1. En funktion add der tager to parametre og returnerer summen 2. En funktion multiply med standard parameter værdier (anden parameter standard til 1) 3. En arrow funktion square, der tager et tal og returnerer dets kvadrat 4. En funktion calculate som accepterer en anden funktion som parameter og to tal, og derefter anvender funktionen på tallene 5. Demonstrer kald af hver funktion med passende testcases Læs mere om agent mode her. ## Efter-forelæsning Quiz Efter-forelæsning quiz ## Gennemgang & Selvstudium Det er værd at læse lidt mere om arrow-funktioner, da de i stigende grad bruges i kodebaser. Øv dig i at skrive en funktion og derefter omskrive den med denne syntaks. ## Opgave Sjov med Funktioner --- ## 🧰 Dit JavaScript Funktionsværktøjssæt Resumé --- ## 🚀 Din JavaScript Funktionsmester Tidslinje ### ⚡ Hvad du kan gøre i de næste 5 minutter - [ ] Skriv en simpel funktion, der returnerer dit yndlingstal - [ ] Opret en funktion med to parametre, der lægger dem sammen - [ ] Prøv at konvertere en traditionel funktion til arrow function-syntaks - [ ] Øv udfordringen: forklar forskellen mellem funktioner og metoder ### 🎯 Hvad du kan nå denne time - [ ] Færdiggør quizzen efter lektionen og gennemgå eventuelle forvirrende begreber - [ ] Byg matematikværktøjsbiblioteket fra GitHub Copilot-udfordringen - [ ] Opret en funktion, der bruger en anden funktion som parameter - [ ] Øv dig i at skrive funktioner med standardparametre - [ ] Eksperimenter med template literals i funktionsreturværdier ### 📅 Din uge-lange funktionsmestring - [ ] Færdiggør opgaven "Sjov med funktioner" med kreativitet - [ ] Refaktorer noget gentaget kode, du har skrevet, til genanvendelige funktioner - [ ] Byg en lille lommeregner kun ved hjælp af funktioner (ingen globale variabler) - [ ] Øv arrow functions med array-metoder som map() og filter() - [ ] Opret en samling af hjælpefunktioner til almindelige opgaver - [ ] Studer højereordensfunktioner og funktionelle programmeringskoncepter ### 🌟 Din månedslange transformation - [ ] Mestre avancerede funktionskoncepter som closures og scope - [ ] Byg et projekt, der i høj grad bruger funktionskomposition - [ ] Bidrag til open source ved at forbedre funktionsdokumentation - [ ] Lær en anden om funktioner og forskellige syntaksstile - [ ] Udforsk funktionelle programmeringsparadigmer i JavaScript - [ ] Opret et personligt bibliotek af genanvendelige funktioner til fremtidige projekter ### 🏆 Endelig funktionsmester tjek-ind Fejr din funktionsmestring: - Hvad er den mest nyttige funktion, du har skabt indtil nu? - Hvordan har det at lære om funktioner ændret din måde at tænke på kodeorganisation? - Hvilken funktionssyntaks foretrækker du og hvorfor? - Hvilket virkeligt problem ville du løse ved at skrive en funktion? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For vigtig information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

At træffe beslutninger

Har du nogensinde spekuleret på, hvordan applikationer træffer smarte beslutninger? Som hvordan et navigationssystem vælger den hurtigste rute, eller hvordan en termostat beslutter, hvornår varmen skal tændes? Dette er det grundlæggende koncept bag beslutningstagning i programmering. Ligesom Charles Babbages Analytical Engine var designet til at følge forskellige sekvenser af operationer baseret på betingelser, skal moderne JavaScript-programmer træffe valg baseret på varierende omstændigheder. Denne evne til at forgrene sig og træffe beslutninger er, hvad der forvandler statisk kode til responsive, intelligente applikationer. I denne lektion lærer du, hvordan du implementerer betinget logik i dine programmer. Vi vil udforske betingede udsagn, sammenligningsoperatorer og logiske udtryk, der giver din kode mulighed for at evaluere situationer og reagere passende. ## For-forelæsning quiz For-forelæsning quiz Evnen til at træffe beslutninger og styre programflow er en grundlæggende del af programmering. Dette afsnit dækker, hvordan du styrer udførelsesvejen for dine JavaScript-programmer ved hjælp af booleske værdier og betinget logik. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## En kort opsummering af Booleans Før vi udforsker beslutningstagning, lad os genbesøge booleske værdier fra vores tidligere lektion. Navngivet efter matematikeren George Boole, repræsenterer disse værdier binære tilstande – enten true eller false. Der er ingen tvetydighed, intet midtpunkt. Disse binære værdier danner fundamentet for al beregningslogik. Hver beslutning, dit program træffer, reduceres til sidst til en boolesk evaluering. At oprette booleske variable er ligetil: Dette opretter to variable med eksplicitte booleske værdier. ✅ Booleans er opkaldt efter den engelske matematiker, filosof og logiker George Boole (1815–1864). ## Sammenligningsoperatorer og Booleans I praksis vil du sjældent sætte booleske værdier manuelt. I stedet genererer du dem ved at evaluere betingelser: "Er dette tal større end det andet?" eller "Er disse værdier ens?" Sammenligningsoperatorer muliggør disse evalueringer. De sammenligner værdier og returnerer booleske resultater baseret på forholdet mellem operanderne. ✅ Test din viden ved at skrive nogle sammenligninger i din browsers konsol. Overrasker nogen af de returnerede værdier dig? ### 🧠 Sammenligningsmesterskab: Forståelse af boolesk logik Test din forståelse af sammenligninger: - Hvorfor tror du, at === (streng lighed) generelt foretrækkes frem for == (løs lighed)? - Kan du forudsige, hvad 5 === '5' returnerer? Hvad med 5 == '5'? - Hvad er forskellen mellem !== og !=? ## If-udsagn if-udsagnet er som at stille et spørgsmål i din kode. "Hvis denne betingelse er sand, så gør dette." Det er sandsynligvis det vigtigste værktøj, du vil bruge til at træffe beslutninger i JavaScript. Sådan fungerer det: Betingelsen kommer inden i parenteserne, og hvis den er true, kører JavaScript koden inden i de krøllede parenteser. Hvis den er false, springer JavaScript hele blokken over. Du vil ofte bruge sammenligningsoperatorer til at skabe disse betingelser. Lad os se et praktisk eksempel: Da 1000 >= 800 evaluerer til true, kører koden inden i blokken og viser "Getting a new laptop!" i konsollen. ## If..Else-udsagn Men hvad hvis du vil have dit program til at gøre noget andet, når betingelsen er falsk? Det er her, else kommer ind – det er som at have en backupplan. else-udsagnet giver dig en måde at sige "hvis denne betingelse ikke er sand, så gør dette i stedet." Nu da 500 >= 800 er false, springer JavaScript den første blok over og kører else-blokken i stedet. Du vil se "Can't afford a new laptop, yet!" i konsollen. ✅ Test din forståelse af denne kode og følgende kode ved at køre den i en browserkonsol. Ændr værdierne af variablerne currentMoney og laptopPrice for at ændre den returnerede console.log(). ### 🎯 If-Else-logik Check: Forgreningsveje Evaluer din forståelse af betinget logik: - Hvad sker der, hvis currentMoney præcis er lig med laptopPrice? - Kan du komme i tanke om et scenarie fra den virkelige verden, hvor if-else-logik ville være nyttig? - Hvordan kunne du udvide dette til at håndtere flere prisniveauer? ## Switch-udsagn Nogle gange skal du sammenligne én værdi med flere muligheder. Selvom du kunne kæde flere if..else-udsagn sammen, bliver denne tilgang hurtigt uhåndterlig. switch-udsagnet giver en renere struktur til at håndtere flere diskrete værdier. Konceptet minder om de mekaniske koblingssystemer, der blev brugt i tidlige telefoncentraler – én inputværdi bestemmer, hvilken specifik vej udførelsen følger. Sådan er det struktureret: - JavaScript evaluerer udtrykket én gang - Den gennemgår hver case for at finde et match - Når den finder et match, kører den den kodeblok - break fortæller JavaScript at stoppe og forlade switch - Hvis ingen cases matcher, kører den default-blokken (hvis du har en) I dette eksempel ser JavaScript, at dayNumber er 2, finder det matchende case 2, sætter dayName til "Tuesday" og bryder derefter ud af switch. Resultatet? "Today is Tuesday" bliver logget til konsollen. ✅ Test din forståelse af denne kode og følgende kode ved at køre dem i en browserkonsol. Ændr værdien af variablen a for at ændre det returnerede console.log(). ### 🔄 Switch-udsagnsmesterskab: Flere muligheder Test din forståelse af switch: - Hvad sker der, hvis du glemmer et break-udsagn? - Hvornår bruger du switch i stedet for flere if-else-udsagn? - Hvorfor er default-casen nyttig, selvom du tror, du har dækket alle muligheder? ## Logiske operatorer og Booleans Komplekse beslutninger kræver ofte, at flere betingelser evalueres samtidigt. Ligesom boolsk algebra giver matematikere mulighed for at kombinere logiske udtryk, giver programmering logiske operatorer til at forbinde flere booleske betingelser. Disse operatorer muliggør sofistikeret betinget logik ved at kombinere simple sande/falske evalueringer. Disse operatorer lader dig kombinere betingelser på nyttige måder: - OG (&&) betyder, at begge betingelser skal være sande - ELLER (||) betyder, at mindst én betingelse skal være sand - IKKE (!) vender sandt til falsk (og omvendt) ## Betingelser og beslutninger med logiske operatorer Lad os se disse logiske operatorer i aktion med et mere realistisk eksempel: I dette eksempel: beregner vi en 20% rabatpris (640), og evaluerer derefter, om vores tilgængelige midler dækker enten fuld pris ELLER rabatprisen. Da 600 opfylder rabatprisens tærskel på 640, evalueres betingelsen til sand. ### 🧮 Logiske operatorer Check: Kombinere betingelser Test din forståelse af logiske operatorer: - I udtrykket A && B, hvad sker der, hvis A er falsk? Bliver B overhovedet evalueret? - Kan du tænke på en situation, hvor du ville bruge alle tre operatorer (&&, ||, !) sammen? - Hvad er forskellen på !user.isActive og user.isActive !== true? ### Negationsoperator Nogle gange er det lettere at tænke i, hvornår noget IKKE er sandt. Som i stedet for at spørge "Er brugeren logget ind?", vil du måske spørge "Er brugeren IKKE logget ind?" Udråbstegnsoperatoren (!) vender logikken for dig. !-operatoren er som at sige "det modsatte af..." – hvis noget er true, gør ! det til false, og omvendt. ### Ternære udtryk Til simple betingede tildelinger tilbyder JavaScript ternæroperatoren. Denne korte syntaks tillader dig at skrive et betinget udtryk på én linje, nyttigt når du skal tildele én af to værdier baseret på en betingelse. Det læses som et spørgsmål: "Er denne betingelse sand? Hvis ja, brug denne værdi. Hvis nej, brug den værdi." Nedenfor er et mere håndgribeligt eksempel: ✅ Tag et øjeblik til at læse denne kode et par gange. Forstår du, hvordan disse operatorer virker? Denne linje siger: "Er firstNumber større end secondNumber? Hvis ja, sæt firstNumber i biggestNumber. Hvis nej, sæt secondNumber i biggestNumber." Den ternære operator er bare en kortere måde at skrive det traditionelle if..else-udsagn på: Begge tilgange giver identiske resultater. Den ternære operator tilbyder kortfattethed, mens den traditionelle if-else-struktur kan være mere læsbar ved komplekse betingelser. --- ## 🚀 Udfordring Lav et program, der først er skrevet med logiske operatorer, og omskriv det derefter ved brug af et ternært udtryk. Hvad foretrækker du som syntaks? --- ## GitHub Copilot Agent Udfordring 🚀 Brug Agent-tilstand til at løse følgende udfordring: Beskrivelse: Opret en omfattende karakterberegner, som demonstrerer flere beslutningstagningselementer fra denne lektion, inklusive if-else-udsagn, switch-udsagn, logiske operatorer og ternære udtryk. Prompt: Skriv et JavaScript-program, der tager en elevs numeriske score (0-100) og bestemmer den tilsvarende karakter efter følgende kriterier: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Under 60 Krav: 1. Brug et if-else-udsagn til at bestemme karakteren 2. Brug logiske operatorer til at tjekke, om den studerende består (karakter >= 60) OG har udmærkelse (karakter >= 90) 3. Brug en switch-sætning til at give specifik feedback for hver bogstavkarakter 4. Brug en ternær operator til at afgøre, om den studerende er berettiget til næste kursus (karakter >= 70) 5. Inkluder inputvalidering for at sikre, at scoren er mellem 0 og 100 Test dit program med forskellige scores, inklusive grænsetilfælde som 59, 60, 89, 90 og ugyldige input. Lær mere om agent mode her. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Læs mere om de mange tilgængelige operatorer for brugeren på MDN. Gå igennem Josh Comeaus vidunderlige operator lookup! ## Assignment Operators --- ## 🧠 Din beslutningstagning værktøjskasse - Resumé --- ## 🚀 Din JavaScript beslutningstagning mesterskab tidslinje ### ⚡ Hvad du kan gøre de næste 5 minutter - [ ] Øv sammenligningsoperatorer i din browserkonsol - [ ] Skriv en simpel if-else sætning, der tjekker din alder - [ ] Prøv udfordringen: omskriv en if-else med en ternær operator - [ ] Test hvad der sker med forskellige "truthy" og "falsy" værdier ### 🎯 Hvad du kan opnå denne time - [ ] Fuldfør post-lektion quizzen og gennemgå forvirrende koncepter - [ ] Byg den omfattende karakterberegner fra GitHub Copilot-udfordringen - [ ] Skab et simpelt beslutningstræ til et virkeligt scenarie (som at vælge hvad du skal have på) - [ ] Øv dig i at kombinere flere betingelser med logiske operatorer - [ ] Eksperimentér med switch-sætninger til forskellige brugstilfælde ### 📅 Din uge-lange logik-mesterskab - [ ] Fuldfør operators-opgaven med kreative eksempler - [ ] Byg en mini quiz-applikation med forskellige betingede strukturer - [ ] Skab en formularvalidator, der tjekker flere inputbetingelser - [ ] Øv Josh Comeaus operator lookup øvelser - [ ] Refaktor eksisterende kode til at bruge mere passende betingede strukturer - [ ] Studér short-circuit evaluering og performance-implikationer ### 🌟 Din månedslange transformation - [ ] Mestre komplekse indlejrede betingelser og bevare kode-læselighed - [ ] Byg en applikation med sofistikeret beslutningstagning logik - [ ] Bidrag til open source ved at forbedre betinget logik i eksisterende projekter - [ ] Lær en anden om forskellige betingede strukturer og hvornår hver skal bruges - [ ] Udforsk funktionelle programmeringsmetoder til betinget logik - [ ] Skab en personlig referenceguide for bedste praksis i betingelser ### 🏆 Endelig beslutningstagning mester Check-in Fejr dit logiske tankemesterværk: - Hvad er den mest komplekse beslutningslogik, du med succes har implementeret? - Hvilken betinget struktur føles mest naturlig for dig og hvorfor? - Hvordan har det at lære om logiske operatorer ændret din problemløsnings-tilgang? - Hvilken virkelighedsbaseret applikation ville have fordel af sofistikeret beslutningstagning logik? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. Ved kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Arrays and Loops

## Pre-Lecture Quiz Pre-lecture quiz Har du nogensinde spekuleret på, hvordan hjemmesider holder styr på varer i indkøbskurven eller viser din venneoversigt? Det er her arrays og løkker kommer ind i billedet. Arrays er som digitale beholdere, der rummer flere stykker information, mens løkker giver dig mulighed for at arbejde med alle disse data effektivt uden gentagende kode. Sammen danner disse to begreber fundamentet for håndtering af information i dine programmer. Du vil lære at bevæge dig fra manuelt at skrive hvert enkelt trin til at skabe smart, effektiv kode, der hurtigt kan behandle hundredvis eller endda tusindvis af elementer. Ved slutningen af denne lektion vil du forstå, hvordan du kan udføre komplekse databehandlingsopgaver med bare få linjer kode. Lad os udforske disse essentielle programmeringskoncepter. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Tænk på arrays som et digitalt arkivskab – i stedet for at opbevare ét dokument pr. skuffe, kan du organisere flere relaterede elementer i en enkelt, struktureret beholder. I programmering giver arrays dig mulighed for at gemme flere stykker information i én organiseret pakke. Uanset om du bygger et fotogalleri, administrerer en opgaveliste eller holder styr på high scores i et spil, giver arrays fundamentet for dataorganisering. Lad os se, hvordan de fungerer. ✅ Arrays er overalt omkring os! Kan du tænke på et eksempel fra virkeligheden på et array, som f.eks. et solcellepanel-array? ### Oprettelse af Arrays At oprette et array er super nemt – brug bare firkantede parenteser! Hvad sker der her? Du har lige oprettet en tom beholder ved hjælp af de firkantede parenteser []. Tænk på det som en tom bibliotekshylde – den er klar til at indeholde de bøger, du vil organisere der. Du kan også udfylde dit array med startværdier med det samme: Seje ting at bemærke: - Du kan gemme tekst, tal eller endda sand/falsk-værdier i samme array - Bare adskil hvert element med et komma – nemt! - Arrays er perfekte til at holde relaterede oplysninger samlet ### Array-indeksering Her er noget, der kan virke usædvanligt i starten: arrays nummererer deres elementer begyndende fra 0, ikke 1. Denne nul-baserede indeksering stammer fra, hvordan computerhukommelse fungerer – det har været en programmeringskonvention siden de tidlige dage med programmeringssprog som C. Hver plads i arrayet får sit eget adressenummer kaldet et indeks. ✅ Overrasker det dig, at arrays starter ved nul-indekset? I nogle programmeringssprog starter indekser ved 1. Der er en interessant historie omkring dette, som du kan læse om på Wikipedia. Tilgang til array-elementer: Nedbrydning af, hvad der sker her: - Bruger firkantet parentesnotation med indeksnummer for at få adgang til elementer - Returnerer værdien, der er gemt på den specifikke position i arrayet - Begynder tælling fra 0, hvilket gør det første element til indeks 0 Ændring af array-elementer: I ovenstående har vi: - Ændret elementet ved indeks 4 fra "Rocky Road" til "Butter Pecan" - Tilføjet et nyt element "Cookie Dough" ved indeks 5 - Udvidet arrayets længde automatisk, når der tilføjes ud over de nuværende grænser ### Array-længde og almindelige metoder Arrays kommer med indbyggede egenskaber og metoder, der gør det meget nemmere at arbejde med data. Find array-længde: Vigtige ting at huske: - Returnerer det samlede antal elementer i arrayet - Opdateres automatisk, når elementer tilføjes eller fjernes - Giver en dynamisk optælling, der er nyttig til løkker og validering Væsentlige array-metoder: Forstå disse metoder: - Tilføjer elementer med push() (til slutningen) og unshift() (til begyndelsen) - Fjerner elementer med pop() (fra slutningen) og shift() (fra begyndelsen) - Finder elementer med indexOf() og tjekker eksistens med includes() - Returnerer nyttige værdier som fjernede elementer eller positionsindekser ✅ Prøv det selv! Brug din browsers konsol til at oprette og manipulere dit eget array. ### 🧠 Grundlæggende om Arrays: Organisering af dine data Test din forståelse af arrays: - Hvorfor tror du, arrays tæller fra 0 i stedet for 1? - Hvad sker der, hvis du prøver at tilgå et indeks, der ikke findes (som arr[100] i et 5-element array)? - Kan du tænke på tre virkelige situationer, hvor arrays ville være nyttige? ## Løkker Tænk på den berømte straf i Charles Dickens’ romaner, hvor elever skulle skrive linjer gentagne gange på en tavle. Forestil dig, at du kunne instruere nogen bare at "skriv denne sætning 100 gange" og få det gjort automatisk. Det er præcis, hvad løkker gør for din kode. Løkker er som at have en utrættelig assistent, der kan gentage opgaver uden fejl. Uanset om du skal tjekke hver vare i en indkøbskurv eller vise alle billeder i et album, håndterer løkker gentagelsen effektivt. JavaScript tilbyder flere typer løkker at vælge imellem. Lad os undersøge hver enkelt og forstå, hvornår de skal bruges. ### For Løkke for-løkke er som at sætte et ur – du ved præcis, hvor mange gange du vil have noget til at ske. Den er super organiseret og forudsigelig, hvilket gør den perfekt, når du arbejder med arrays eller har brug for at tælle ting. Struktur for For Løkke: Trin for trin, hvad der sker: - Initialiserer tællervariablen i til 0 i starten - Tjekker betingelsen i < 10 før hver gennemkørsel - Udfører kodeblokken, når betingelsen er sand - Forøger i med 1 efter hver gennemkørsel med i++ - Stopper når betingelsen bliver falsk (når i når 10) ✅ Kør denne kode i en browserkonsol. Hvad sker der, hvis du laver små ændringer i tælleren, betingelsen eller inkrement-udtrykket? Kan du få den til at køre baglæns og lave en nedtælling? ### 🗓️ For Løkke Færdighedstest: Kontrolleret Gentagelse Vurdér din forståelse af for-løkken: - Hvad er de tre dele af en for-løkke, og hvad gør hver del? - Hvordan ville du løbe gennem et array baglæns? - Hvad sker der, hvis du glemmer inkrement-delen (i++)? ### While Løkke while-løkke er som at sige "bliv ved med at gøre dette indtil..." – du ved måske ikke præcist, hvor mange gange den kører, men du ved, hvornår den skal stoppe. Den er perfekt til ting som at bede en bruger om input, indtil de giver det, du har brug for, eller søge gennem data, indtil du finder det, du leder efter. Karakteristika for While Løkke: - Fortsætter med at køre så længe betingelsen er sand - Kræver manuel styring af eventuelle tællervariabler - Tjekker betingelsen før hver iteration - Risikerer uendelige løkker, hvis betingelsen aldrig bliver falsk Forstå disse eksempler: - Håndterer tællervariablen i manuelt inde i løkkens krop - Forøger tælleren for at forhindre uendelige løkker - Demonstrerer praktisk brug med brugerinput og forsøg-begrænsning - Inkluderer sikkerhedsforanstaltninger for at forhindre uendelig udførelse ### ♾️ While Løkke Visdomstest: Betingelsesbaseret Gentagelse Test din forståelse af while-løkker: - Hvad er hovedfaren ved at bruge while-løkker? - Hvornår ville du vælge en while-løkke frem for en for-løkke? - Hvordan kan du forhindre uendelige løkker? ### Moderne Loop-alternativer JavaScript tilbyder moderne løkkesyntakser, der kan gøre din kode mere læsbar og mindre fejlbehæftet. For...of Løkke (ES6+): Vigtige fordele ved for...of: - Eliminerer indekshåndtering og potentielle off-by-one fejl - Giver direkte adgang til array-elementer - Forbedrer kode-læsbarhed og reducerer syntaks-kompleksitet forEach Metode: Det du skal vide om forEach: - Udfører en funktion for hvert array-element - Giver både elementværdien og indekset som parametre - Kan ikke afbrydes tidligt (i modsætning til traditionelle løkker) - Returnerer undefined (opretter ikke et nyt array) ✅ Hvorfor ville du vælge en for-løkke fremfor en while-løkke? 17K seere havde det samme spørgsmål på StackOverflow, og nogle af meningene kan være interessante for dig. ### 🎨 Moderne Løkkesyntaks Test: Omfavn ES6+ Vurder din moderne JavaScript-forståelse: - Hvad er fordelene ved for...of i forhold til traditionelle for-løkker? - Hvornår ville du stadig foretrække traditionelle for-løkker? - Hvad er forskellen mellem forEach og map? ## Løkker og Arrays Kombinationen af arrays med løkker skaber kraftfulde muligheder for databehandling. Dette par er fundamentalt for mange programmeringsopgaver, fra at vise lister til at beregne statistikker. Traditionel Array-behandling: Lad os forstå hver tilgang: - Bruger array-længde egenskaben til at bestemme løkkens grænser - Tilgår elementer via indeks i traditionelle for-løkker - Giver direkte elementadgang i for...of løkker - Behandler hvert array-element præcist én gang Praktisk eksempel på databehandling: Sådan fungerer denne kode: - Initialiserer sporingsvariabler for sum og yderpunkter - Behandler hver karakter med en enkelt effektiv løkke - Akkumulerer totalen til gennemsnitsberegning - Sporer højeste og laveste værdier under iterationen - Beregner endelige statistikker efter løkkens afslutning ✅ Eksperimentér med at løbe gennem et array, du selv har lavet, i din browsers konsol. --- ## GitHub Copilot Agent Challenge 🚀 Brug Agent-tilstanden til at løse følgende udfordring: Beskrivelse: Byg en omfattende databehandlingsfunktion, der kombinerer arrays og løkker til at analysere et datasæt og generere meningsfulde indsigter. Prompt: Opret en funktion kaldet analyzeGrades, som tager et array af elevkarakterobjekter (hver indeholder navn- og score-egenskaber) og returnerer et objekt med statistik inklusive højeste score, laveste score, gennemsnitsscore, antallet af elever, der bestod (score >= 70), og et array med navne på elever, der har scoret over gennemsnittet. Brug mindst to forskellige løkketyper i din løsning. Læs mere om agent mode her. ## 🚀 Udfordring JavaScript tilbyder flere moderne array-metoder, der kan erstatte traditionelle løkker til specifikke opgaver. Udforsk forEach, for-of, map, filter og reduce. Din udfordring: Refaktorér eksemplet med elevkarakterer ved hjælp af mindst tre forskellige array-metoder. Bemærk, hvor meget renere og mere læselig koden bliver med moderne JavaScript-syntaks. ## Quiz efter forelæsning Quiz efter forelæsning ## Gennemgang & Selvstudium Arrays i JavaScript har mange metoder knyttet til sig, som er ekstremt nyttige til datamanipulation. Læs om disse metoder og prøv nogle af dem (som push, pop, slice og splice) på et array, du selv opretter. ## Opgave Loop an Array --- ## 📊 Din oversigt over Arrays & Loops værktøjer --- ## 🚀 Din tidslinje for mestring af Arrays & Loops ### ⚡ Hvad du kan nå de næste 5 minutter - [ ] Opret et array med dine yndlingsfilm og få adgang til specifikke elementer - [ ] Skriv en for-løkke, der tæller fra 1 til 10 - [ ] Prøv udfordringen med moderne array-metoder fra lektionen - [ ] Øv array-indeksering i din browser-konsol ### 🎯 Hvad du kan opnå denne time - [ ] Fuldfør quizzen efter lektionen og gennemgå eventuelle udfordrende koncepter - [ ] Byg den omfattende karakteranalysator fra GitHub Copilot-udfordringen - [ ] Opret en simpel indkøbskurv, der tilføjer og fjerner varer - [ ] Øv dig i at konvertere mellem forskellige løkke-typer - [ ] Eksperimenter med array-metoder som push, pop, slice og splice ### 📅 Din en-ugers rejse i databehandling - [ ] Fuldfør opgaven "Loop an Array" med kreative forbedringer - [ ] Byg en to-do-liste applikation ved hjælp af arrays og loops - [ ] Opret en simpel statistikberegner til numeriske data - [ ] Øv dig med MDN array-metoder - [ ] Byg en fotogalleri- eller musikafspilningsliste-grænseflade - [ ] Udforsk funktionel programmering med map, filter og reduce ### 🌟 Din månedslange transformation - [ ] Mestring af avancerede array-operationer og performanceoptimering - [ ] Byg et komplet dashboard til datavisualisering - [ ] Bidrag til open source-projekter inden for databehandling - [ ] Lær en anden om arrays og loops med praktiske eksempler - [ ] Opret et personligt bibliotek med genanvendelige data-behandlingsfunktioner - [ ] Udforsk algoritmer og datastrukturer baseret på arrays ### 🏆 Endelig check-in for mester i databehandling Fejr din mestring af arrays og loops: - Hvad er den mest nyttige array-operation, du har lært til virkelige anvendelser? - Hvilken type løkke føles mest naturlig for dig, og hvorfor? - Hvordan har forståelsen af arrays og loops ændret din tilgang til organisering af data? - Hvilken kompleks databehandlingsopgave vil du gerne tage fat på næste gang? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Mens vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

array,loop

Einführung in JavaScript

JavaScript ist die Sprache des Webs. In diesen vier Lektionen lernst du die Grundlagen. ### Themen 1. Variablen und Datentypen 2. Funktionen und Methoden 3. Entscheidungen treffen mit JavaScript 4. Arrays und Schleifen ### Credits Diese Lektionen wurden mit ♥️ geschrieben von Jasmine Greenaway, Christopher Harrison und Chris Noring Haftungsausschluss: Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.

javascript

JavaScript Grundlagen: Datentypen

Datentypen sind eines der grundlegenden Konzepte in JavaScript, auf das du in jedem Programm stößt, das du schreibst. Denk an Datentypen wie das Ablagesystem, das antike Bibliothekare in Alexandria benutzten – sie hatten spezielle Plätze für Schriftrollen mit Poesie, Mathematik und historischen Aufzeichnungen. JavaScript organisiert Informationen auf ähnliche Weise mit verschiedenen Kategorien für unterschiedliche Arten von Daten. In dieser Lektion erkunden wir die Kern-Datentypen, die JavaScript zum Laufen bringen. Du lernst, wie man mit Zahlen, Text, Wahr/Falsch-Werten umgeht und verstehst, warum die Wahl des richtigen Typs für deine Programme essenziell ist. Diese Konzepte mögen zunächst abstrakt erscheinen, aber mit Übung werden sie zur zweiten Natur. Das Verständnis von Datentypen wird alles andere in JavaScript viel klarer machen. So wie Architekten unterschiedliche Baustoffe verstehen müssen, bevor sie eine Kathedrale bauen, werden diese Grundlagen alles unterstützen, was du in Zukunft baust. ## Quiz vor der Vorlesung Quiz vor der Vorlesung Diese Lektion behandelt die Grundlagen von JavaScript, der Sprache, die Interaktivität im Web bereitstellt. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variablen in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Datentypen in JavaScript") Fangen wir mit Variablen und den Datentypen an, die sie befüllen! ## Variablen Variablen sind grundlegende Bausteine in der Programmierung. Wie beschriftete Gläser, die mittelalterliche Alchemisten zur Aufbewahrung verschiedener Substanzen nutzten, erlauben Variablen es dir, Informationen zu speichern und ihnen einen beschreibenden Namen zu geben, damit du später darauf zugreifen kannst. Möchtest du das Alter einer Person speichern? Bewahre es in einer Variablen namens age auf. Willst du den Namen eines Nutzers verfolgen? Speichere ihn in der Variablen userName. Wir konzentrieren uns auf den modernen Ansatz zur Variablenerstellung in JavaScript. Die hier gelernten Techniken repräsentieren jahrelange Sprachentwicklung und Best Practices der Programmiergemeinschaft. Die Erstellung und Deklaration einer Variable hat folgende Syntax [Schlüsselwort] [Name]. Sie besteht aus zwei Teilen: - Schlüsselwort. Verwende let für Variablen, die sich ändern können, oder const für Werte, die gleich bleiben. - Der Variablenname, ein beschreibender Name, den du selbst auswählst. ✅ Das Schlüsselwort let wurde mit ES6 eingeführt und verleiht deiner Variablen einen sogenannten _Block-Scope_. Es wird empfohlen, let oder const anstelle des älteren var-Schlüsselworts zu verwenden. Wir werden uns in zukünftigen Teilen intensiver mit Block-Scopes befassen. ### Aufgabe – Arbeiten mit Variablen 1. Deklariere eine Variable. Fangen wir damit an, unsere erste Variable zu erstellen: ```javascript let myVariable; ``` Was dies bewirkt: - Es sagt JavaScript, einen Speicherort namens myVariable zu erstellen - JavaScript reserviert Speicherplatz für diese Variable - Die Variable hat aktuell keinen Wert (undefined) 2. Gib ihr einen Wert. Jetzt setzen wir etwas in unsere Variable: ```javascript myVariable = 123; ``` Wie Zuweisung funktioniert: - Der = Operator weist den Wert 123 unserer Variable zu - Die Variable enthält jetzt diesen Wert statt undefined - Du kannst diesen Wert im Code mit myVariable referenzieren > Hinweis: Das = in dieser Lektion bedeutet, dass wir den „Zuweisungsoperator“ verwenden, um einen Wert einer Variable zuzuweisen. Es bezeichnet keine Gleichheit. 3. Mach es gleich richtig. Kombinieren wir diese beiden Schritte: ```javascript let myVariable = 123; ``` Dieser Ansatz ist effizienter: - Du deklarierst die Variable und weist gleich einen Wert zu - Das ist die Standardpraxis unter Entwicklern - Es verkürzt den Code bei gleichbleibender Klarheit 4. Ändere deine Meinung. Was, wenn wir eine andere Zahl speichern wollen? ```javascript myVariable = 321; ``` Verständnis von Neu-Zuweisung: - Die Variable enthält jetzt 321 statt 123 - Der vorherige Wert wird ersetzt – Variablen speichern immer nur einen Wert - Diese Änderbarkeit ist das Hauptmerkmal von Variablen, die mit let deklariert wurden ✅ Probiere es aus! Du kannst JavaScript direkt im Browser schreiben. Öffne die Entwicklertools in deinem Browser. Im Konsolenfenster findest du eine Eingabeaufforderung; tippe let myVariable = 123, drücke Enter, und gib dann myVariable ein. Was passiert? Diese Konzepte wirst du in späteren Lektionen noch besser verstehen. ### 🧠 Variablen Meisterschafts-Check: Wohlfühlen mit Variablen Sehen wir nach, wie es dir mit Variablen geht: - Kannst du den Unterschied zwischen Deklaration und Zuweisung einer Variable erklären? - Was passiert, wenn du versuchst, eine Variable zu verwenden, bevor du sie deklarierst? - Wann würdest du let anstelle von const für eine Variable wählen? ## Konstanten Manchmal musst du Informationen speichern, die sich während der Programmausführung niemals ändern sollten. Denk an Konstanten wie die mathematischen Prinzipien, die Euklid im antiken Griechenland formulierte – einmal bewiesen und dokumentiert, blieben sie für immer unverändert. Konstanten funktionieren ähnlich wie Variablen, aber mit einer wichtigen Einschränkung: Sobald du ihnen einen Wert gegeben hast, kann dieser nicht mehr geändert werden. Diese Unveränderlichkeit schützt vor versehentlichen Änderungen kritischer Werte in deinem Programm. Die Deklaration und Initialisierung einer Konstante folgt den gleichen Konzepten wie bei einer Variable, mit Ausnahme des Schlüsselworts const. Konstanten werden üblicherweise in Großbuchstaben benannt. Das macht dieser Code: - Erstellt eine Konstante namens MY_VARIABLE mit dem Wert 123 - Verwendet Großschreibweise als Namenskonvention für Konstanten - Verhindert jegliche zukünftigen Änderungen dieses Werts Konstanten haben zwei Hauptregeln: - Sie müssen sofort einen Wert bekommen – leere Konstanten sind nicht erlaubt! - Du kannst diesen Wert niemals ändern – JavaScript wirft einen Fehler, wenn du es versuchst. Sieh dir an, was ich meine: Einfacher Wert – Das Folgende ist NICHT erlaubt: ```javascript const PI = 3; PI = 4; // nicht erlaubt ``` Was du dir merken musst: - Versuche, eine Konstante neu zuzuweisen, führen zu einem Fehler - Schützt wichtige Werte vor versehentlichen Änderungen - Gewährleistet, dass der Wert im Programm immer gleich bleibt Objektreferenz ist geschützt – Das Folgende ist NICHT erlaubt: ```javascript const obj = { a: 3 }; obj = { b: 5 } // nicht erlaubt ``` Verständnis dieser Konzepte: - Verhindert das Ersetzen des gesamten Objekts durch ein neues - Schützt die Referenz auf das ursprüngliche Objekt - Erhält die Identität des Objekts im Speicher Objektwert ist nicht geschützt – Das Folgende ist ERLAUBT: ```javascript const obj = { a: 3 }; obj.a = 5; // erlaubt ``` Erläuterung was hier passiert: - Ändert den Eigenschaftswert innerhalb des Objekts - Behält dieselbe Objekt-Referenz bei - Zeigt, dass der Inhalt eines Objekts geändert werden kann, während die Referenz unverändert bleibt > Hinweis: const bedeutet, dass die Referenz gegen Neu-Zuweisung geschützt ist. Der Wert ist aber nicht _unveränderlich_ und kann sich ändern, besonders wenn es sich um komplexe Konstrukte wie Objekte handelt. ## Datentypen JavaScript organisiert Informationen in unterschiedliche Kategorien, sogenannte Datentypen. Dieses Konzept spiegelt wider, wie antike Gelehrte Wissen kategorisierten – Aristoteles unterschied verschiedene Arten des Denkens, da logische Prinzipien nicht einheitlich auf Poesie, Mathematik und Naturphilosophie angewendet werden können. Datentypen sind wichtig, weil verschiedene Operationen mit unterschiedlichen Arten von Informationen arbeiten. So wie du nicht mit dem Namen einer Person rechnen oder eine mathematische Gleichung alphabetisch ordnen kannst, benötigt JavaScript für jede Operation den passenden Datentyp. Dieses Verständnis verhindert Fehler und macht deinen Code zuverlässiger. Variablen können viele verschiedene Wertetypen speichern, wie Zahlen oder Text. Diese verschiedenen Arten von Werten werden als Datentypen bezeichnet. Datentypen sind ein wichtiger Teil der Softwareentwicklung, weil sie Entwicklern helfen zu entscheiden, wie Code geschrieben und ausgeführt wird. Außerdem haben manche Datentypen einzigartige Eigenschaften, mit denen sich zusätzliche Informationen aus einem Wert extrahieren oder transformieren lassen. ✅ Datentypen werden auch als JavaScript-Datenprimitiven bezeichnet, da sie die grundlegenden Datentypen sind, die von der Sprache bereitgestellt werden. Es gibt 7 primitive Datentypen: string, number, bigint, boolean, undefined, null und symbol. Nimm dir einen Moment Zeit, um dir vorzustellen, wofür jeder dieser Primitiven stehen könnte. Was ist ein zebra? Wie sieht 0 aus? true? ### Zahlen Zahlen sind der einfachste Datentyp in JavaScript. Egal, ob du ganze Zahlen wie 42, Dezimalzahlen wie 3.14 oder negative Zahlen wie -5 verwendest, JavaScript behandelt sie einheitlich. Erinnerst du dich an unsere Variable von früher? Die 123, die wir gespeichert haben, war tatsächlich vom Typ Zahl: Wesentliche Merkmale: - JavaScript erkennt numerische Werte automatisch - Du kannst mit diesen Variablen mathematische Operationen durchführen - Es ist keine explizite Typdeklaration nötig Variablen können alle Arten von Zahlen speichern, einschließlich Dezimalzahlen und negative Werte. Zahlen können auch mit arithmetischen Operatoren verwendet werden, die im nächsten Abschnitt behandelt werden. ### Arithmetische Operatoren Arithmetische Operatoren ermöglichen es dir, mathematische Berechnungen in JavaScript durchzuführen. Diese Operatoren folgen denselben Prinzipien, die Mathematiker seit Jahrhunderten verwenden – dieselben Symbole, die in den Werken von Gelehrten wie Al-Chwarizmi auftauchten, der die algebraische Notation entwickelte. Die Operatoren funktionieren so, wie man es aus der traditionellen Mathematik erwartet: Plus für Addition, Minus für Subtraktion, und so weiter. Es gibt mehrere Operatoren, die du bei arithmetischen Funktionen nutzen kannst, einige davon sind hier aufgelistet: ✅ Probiere es aus! Versuche eine arithmetische Operation in der Konsole deines Browsers. Überraschen dich die Ergebnisse? ### 🧮 Mathe-Fähigkeiten Check: Berechnen mit Selbstvertrauen Teste dein Verständnis arithmetischer Operatoren: - Was ist der Unterschied zwischen / (Division) und % (Rest)? - Kannst du vorhersagen, was 10 % 3 ergibt? (Tipp: es ist nicht 3,33...) - Warum könnte der Rest-Operator in der Programmierung nützlich sein? ### Strings In JavaScript werden Textdaten als Strings dargestellt. Der Begriff „String“ kommt aus dem Konzept von aneinandergereihten Zeichen, ähnlich wie mittelalterliche Schreiber in Klöstern Buchstaben aneinanderfügten, um Wörter und Sätze zu bilden. Strings sind grundlegend für die Webentwicklung. Jeder Text, der auf einer Webseite angezeigt wird – Benutzernamen, Beschriftungen von Schaltflächen, Fehlermeldungen, Inhalte – wird als String verarbeitet. Das Verständnis von Strings ist essenziell für die Erstellung funktionaler Benutzeroberflächen. Strings sind Zeichenketten, die zwischen einfachen oder doppelten Anführungszeichen stehen. Verständnis dieser Konzepte: - Verwendet entweder einfache ' oder doppelte " Anführungszeichen zur Definition von Strings - Speichert Textdaten, die Buchstaben, Zahlen und Symbole enthalten können - Weist Stringwerte Variablen für eine spätere Verwendung zu - Erfordert Anführungszeichen, um Text von Variablennamen zu unterscheiden Denke daran, Anführungszeichen zu setzen, wenn du einen String schreibst, sonst nimmt JavaScript an, dass es sich um einen Variablennamen handelt. ### Strings formatieren Die String-Manipulation ermöglicht dir, Textelemente zu kombinieren, Variablen einzubauen und dynamischen Inhalt zu erzeugen, der auf den Zustand des Programms reagiert. Mit dieser Technik kannst du Texte programmatisch zusammensetzen. Oft musst du mehrere Strings zusammenfügen – dieser Vorgang wird Konkatenation genannt. Um zwei oder mehr Zeichenketten zu konkatenieren oder zusammenzufügen, verwenden Sie den +-Operator. Schritt für Schritt passiert Folgendes: - Kombiniert mehrere Zeichenketten mit dem +-Operator - Fügt im ersten Beispiel Zeichenketten direkt ohne Leerzeichen zusammen - Fügt Leerzeichen " " zwischen die Zeichenketten für bessere Lesbarkeit ein - Setzt Satzzeichen wie Kommas ein, um eine korrekte Formatierung zu erreichen ✅ Warum ist in JavaScript 1 + 1 = 2, aber '1' + '1' = 11? Denken Sie darüber nach. Wie sieht es mit '1' + 1 aus? Template-Literale sind eine weitere Möglichkeit, Zeichenketten zu formatieren, wobei statt Anführungszeichen der Backtick verwendet wird. Alles, was kein einfacher Text ist, muss in Platzhalter ${ } eingefügt werden. Dies umfasst auch Variablen, die Zeichenketten sein können. Lassen Sie uns jeden Teil verstehen: - Verwendet Backticks ` `` statt regulärer Anführungszeichen, um Template-Literale zu erstellen - Bettet Variablen direkt mit der ${}-Platzhalter-Syntax ein - Erhält Leerzeichen und Formatierung genau so, wie sie geschrieben sind - Bietet eine sauberere Möglichkeit, komplexe Zeichenketten mit Variablen zu erstellen Beide Methoden können Ihre Formatierungsziele erreichen, aber Template-Literale respektieren alle Leerzeichen und Zeilenumbrüche. ✅ Wann würden Sie ein Template-Literal anstelle einer einfachen Zeichenkette verwenden? ### 🔤 Zeichenketten-Meisterschaftscheck: Textmanipulations-Selbstvertrauen Bewerten Sie Ihre Zeichenketten-Fähigkeiten: - Können Sie erklären, warum '1' + '1' '11' ergibt und nicht 2? - Welche Zeichenketten-Methode finden Sie lesbarer: Konkatenation oder Template-Literale? - Was passiert, wenn Sie die Anführungszeichen um eine Zeichenkette vergessen? ### Booleans Booleans repräsentieren die einfachste Form von Daten: Sie können nur einen von zwei Werten halten – true oder false. Dieses Binärlogiksystem stammt von George Boole, einem Mathematiker des 19. Jahrhunderts, der die Boole'sche Algebra entwickelte. Trotz ihrer Einfachheit sind Booleans für die Programmlogik unverzichtbar. Sie ermöglichen es Ihrem Code, Entscheidungen basierend auf Bedingungen zu treffen – ob ein Benutzer angemeldet ist, ob ein Button geklickt wurde oder ob bestimmte Kriterien erfüllt sind. Booleans können nur zwei Werte annehmen: true oder false. Booleans helfen dabei zu entscheiden, welche Codezeilen ausgeführt werden, wenn bestimmte Bedingungen erfüllt sind. In vielen Fällen unterstützen Operatoren die Festlegung des Wertes eines Booleans und Sie werden oft Variablen sehen und schreiben, die mit einem Operator initialisiert oder deren Werte aktualisiert werden. Oben haben wir: - Eine Variable erstellt, die den Boolean-Wert true speichert - Zeigt, wie der Boolean-Wert false gespeichert wird - Die exakten Schlüsselwörter true und false verwendet (keine Anführungszeichen nötig) - Diese Variablen für die Verwendung in bedingten Anweisungen vorbereitet ✅ Eine Variable kann als 'truthy' angesehen werden, wenn sie zu dem Boolean true evaluiert. Interessanterweise sind in JavaScript alle Werte truthy, sofern sie nicht als falsy definiert sind. ### 🎯 Boolean-Logik Check: Entscheidungsfindungskompetenz Testen Sie Ihr Verständnis von Booleans: - Warum glauben Sie, hat JavaScript neben true und false noch „truthy“ und „falsy“-Werte? - Können Sie vorhersagen, welche dieser Werte falsy sind: 0, "0", [], "false"? - Wie können Booleans nützlich sein, um den Programmfluss zu steuern? --- ## 📊 Zusammenfassung Ihres Werkzeugkastens für Datentypen ## GitHub Copilot Agent Challenge 🚀 Verwenden Sie den Agent-Modus, um die folgende Herausforderung zu meistern: Beschreibung: Erstellen Sie einen persönlichen Informationsmanager, der alle in dieser Lektion gelernten JavaScript-Datentypen demonstriert und realweltliche Datenszenarien verarbeitet. Aufgabe: Schreiben Sie ein JavaScript-Programm, das ein Benutzerprofilobjekt mit folgendem Inhalt erstellt: Name einer Person (String), Alter (Number), Studentenstatus (Boolean), Lieblingsfarben als Array und ein Adressobjekt mit Straße, Stadt und Postleitzahl. Fügen Sie Funktionen hinzu, um die Profildaten anzuzeigen und einzelne Felder zu aktualisieren. Demonstrieren Sie Zeichenketten-Konkatenation, Template-Literale, arithmetische Operationen mit dem Alter und Boolean-Logik für den Studentenstatus. Erfahren Sie mehr über den Agent-Modus. ## 🚀 Herausforderung JavaScript hat einige Verhaltensweisen, die Entwickler überraschen können. Hier ein klassisches Beispiel: Geben Sie das Folgende in Ihrer Browser-Konsole ein: let age = 1; let Age = 2; age == Age und beobachten Sie das Ergebnis. Es gibt false zurück – können Sie bestimmen, warum? Dies ist nur eines von vielen JavaScript-Verhalten, die es zu verstehen gilt. Vertrautheit mit diesen Besonderheiten hilft Ihnen, zuverlässiger zu programmieren und Fehler besser zu beheben. ## Post-Lecture Quiz Post-Lecture Quiz ## Überprüfung & Selbststudium Schauen Sie sich diese Liste mit JavaScript-Übungen an und probieren Sie eine aus. Was haben Sie gelernt? ## Aufgabe Datentypen Übung ## 🚀 Ihre JavaScript-Datentyp-Meisterschafts-Zeitleiste ### ⚡ Was Sie in den nächsten 5 Minuten tun können - [ ] Öffnen Sie Ihre Browser-Konsole und erstellen Sie 3 Variablen mit unterschiedlichen Datentypen - [ ] Versuchen Sie die Herausforderung: let age = 1; let Age = 2; age == Age und finden Sie heraus, warum es false ist - [ ] Üben Sie die Zeichenketten-Konkatenation mit Ihrem Namen und Ihrer Lieblingszahl - [ ] Testen Sie, was passiert, wenn Sie eine Zahl einer Zeichenkette hinzufügen ### 🎯 Was Sie in dieser Stunde erreichen können - [ ] Machen Sie das Post-Lesson-Quiz und überprüfen Sie verwirrende Konzepte - [ ] Erstellen Sie einen Mini-Rechner, der zwei Zahlen addiert, subtrahiert, multipliziert und dividiert - [ ] Bauen Sie einen einfachen Namensformatierer mit Template-Literalen - [ ] Erkunden Sie die Unterschiede zwischen den Vergleichsoperatoren == und === - [ ] Üben Sie das Konvertieren zwischen verschiedenen Datentypen ### 📅 Ihre wöchentliche JavaScript-Basis - [ ] Schließen Sie die Aufgabe mit Selbstvertrauen und Kreativität ab - [ ] Erstellen Sie ein persönliches Profilobjekt unter Verwendung aller gelernten Datentypen - [ ] Üben Sie mit JavaScript-Übungen von CSS-Tricks - [ ] Erstellen Sie einen einfachen Formularvalidierer mit Boolean-Logik - [ ] Experimentieren Sie mit Array- und Objekt-Datentypen (Vorschau kommender Lektionen) - [ ] Treten Sie einer JavaScript-Community bei und stellen Sie Fragen zu Datentypen ### 🌟 Ihre monatliche Transformation - [ ] Integrieren Sie Datentypwissen in größere Programmierprojekte - [ ] Verstehen Sie, wann und warum Sie jeden Datentyp in realen Anwendungen verwenden - [ ] Helfen Sie anderen Anfängern, die JavaScript-Grundlagen zu verstehen - [ ] Erstellen Sie eine kleine Anwendung, die verschiedene Arten von Benutzerdaten verwaltet - [ ] Erkunden Sie fortgeschrittene Datentypkonzepte wie Typumwandlung und strikte Gleichheit - [ ] Tragen Sie zur Open-Source-JavaScript-Projekten mit Dokumentationsverbesserungen bei ### 🧠 Abschließender Datentypen-Meisterschafts-Check-in Feiern Sie Ihre JavaScript-Basis: - Welcher Datentyp hat Sie am meisten durch sein Verhalten überrascht? - Wie sicher fühlen Sie sich, wenn Sie Variablen vs. Konstanten einem Freund erklären? - Was war das Interessanteste, das Sie über das Typsystem von JavaScript entdeckt haben? - Welche reale Anwendung können Sie sich vorstellen, die Sie mit diesen Grundlagen bauen können? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Haftungsausschluss: Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir auf Genauigkeit achten, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle anzusehen. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Nutzung dieser Übersetzung entstehen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript-Grundlagen: Methoden und Funktionen

## Vor-Vorlesungs-Quiz Vor-Vorlesungs-Quiz Den gleichen Code immer wieder zu schreiben, ist eine der häufigsten Frustrationen beim Programmieren. Funktionen lösen dieses Problem, indem sie dir erlauben, Code in wiederverwendbare Blöcke zu verpacken. Denk an Funktionen wie die standardisierten Teile, die Henry Fords Fließband revolutionierten – sobald du eine zuverlässige Komponente erstellt hast, kannst du sie überall verwenden, ohne sie neu bauen zu müssen. Funktionen ermöglichen es dir, Codeabschnitte zu bündeln, sodass du sie im gesamten Programm wiederverwenden kannst. Anstatt dieselbe Logik überall zu kopieren und einzufügen, kannst du eine Funktion einmal erstellen und sie bei Bedarf aufrufen. Dieser Ansatz hält deinen Code organisiert und macht Aktualisierungen viel einfacher. In dieser Lektion lernst du, wie du eigene Funktionen erstellst, Informationen an sie übergibst und nützliche Ergebnisse zurückbekommst. Du entdeckst den Unterschied zwischen Funktionen und Methoden, lernst moderne Syntaxansätze kennen und siehst, wie Funktionen mit anderen Funktionen zusammenarbeiten können. Wir bauen diese Konzepte Schritt für Schritt auf. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funktionen Eine Funktion ist ein eigenständiger Codeblock, der eine bestimmte Aufgabe ausführt. Sie kapselt Logik ein, die du bei Bedarf ausführen kannst. Anstatt denselben Code mehrfach im Programm zu schreiben, kannst du ihn in einer Funktion verpacken und diese Funktion immer dann aufrufen, wenn du sie brauchst. Dieser Ansatz hält deinen Code sauber und erleichtert Updates erheblich. Stell dir vor, du müsstest Logik ändern, die über 20 verschiedene Stellen in deinem Code verstreut ist – das wäre sehr aufwändig. Es ist wichtig, deinen Funktionen beschreibende Namen zu geben. Eine gut benannte Funktion kommuniziert ihren Zweck klar – wenn du cancelTimer() siehst, verstehst du sofort, was sie macht, genau wie ein klar beschrifteter Knopf dir genau sagt, was passiert, wenn du ihn klickst. ## Eine Funktion erstellen und aufrufen Schauen wir uns an, wie man eine Funktion erstellt. Die Syntax folgt einem einheitlichen Muster: Schauen wir uns das genauer an: - Das Schlüsselwort function sagt JavaScript: "Hey, ich erstelle eine Funktion!" - nameOfFunction ist der Platz, wo du deiner Funktion einen beschreibenden Namen gibst - Die runden Klammern () sind der Ort, um Parameter hinzuzufügen (dazu gleich mehr) - Die geschweiften Klammern {} enthalten den eigentlichen Code, der ausgeführt wird, wenn du die Funktion aufrufst Lasst uns eine einfache Begrüßungsfunktion erstellen, um das in Aktion zu sehen: Diese Funktion gibt "Hello, world!" in der Konsole aus. Sobald du sie definiert hast, kannst du sie so oft aufrufen, wie du möchtest. Um deine Funktion auszuführen (oder „aufzurufen“), schreibst du ihren Namen gefolgt von runden Klammern. JavaScript erlaubt dir, deine Funktion vor oder nach dem Aufruf zu definieren – die JavaScript-Engine kümmert sich um die Ausführungsreihenfolge. Wenn du diese Zeile ausführst, wird der gesamte Code innerhalb deiner Funktion displayGreeting ausgeführt und zeigt „Hello, world!“ in der Browser-Konsole an. Du kannst diese Funktion mehrfach aufrufen. ### 🧠 Grundlagenprüfung Funktionen: Deine ersten Funktionen bauen Wie fühlst du dich bei den Grundlagen zu Funktionen? - Kannst du erklären, warum wir geschweifte Klammern {} in Funktionsdefinitionen verwenden? - Was passiert, wenn du displayGreeting ohne die Klammern schreibst? - Warum möchtest du dieselbe Funktion vielleicht mehrfach aufrufen? ### Best Practices für Funktionen Hier sind einige Tipps, die dir helfen, tolle Funktionen zu schreiben: - Gib deinen Funktionen klare, beschreibende Namen – dein zukünftiges Ich wird es dir danken! - Verwende camelCasing für mehrteilige Namen (wie calculateTotal statt calculate_total) - Halte jede Funktion fokussiert auf eine Aufgabe, die sie gut erledigen soll ## Informationen an eine Funktion übergeben Unsere Funktion displayGreeting ist eingeschränkt – sie kann nur „Hello, world!“ für alle anzeigen. Parameter erlauben es uns, Funktionen flexibler und nützlicher zu machen. Parameter fungieren wie Platzhalter, in die du bei jedem Funktionsaufruf unterschiedliche Werte einfügen kannst. So kann dieselbe Funktion mit verschiedenen Informationen arbeiten. Du listest Parameter in den runden Klammern bei der Funktionsdefinition auf, und trennst mehrere Parameter mit Kommas: Jeder Parameter funktioniert wie ein Platzhalter – wenn jemand deine Funktion aufruft, gibt er tatsächliche Werte an, die an diese Stellen eingesetzt werden. Aktualisieren wir unsere Begrüßungsfunktion, damit sie den Namen einer Person entgegennimmt: Beachte, wie wir Backticks (` `) und ${}` verwenden, um den Namen direkt in unsere Nachricht einzufügen – das nennt man template literal und ist eine sehr praktische Methode, um Strings mit Variablen zu bauen. Nun können wir der Funktion bei jedem Aufruf einen Namen übergeben: JavaScript nimmt den String 'Christopher', weist ihn dem Parameter name zu und erzeugt die personalisierte Nachricht „Hello, Christopher!“ ## Standardwerte Was, wenn wir einige Parameter optional machen wollen? Hier helfen Standardwerte! Nehmen wir an, wir wollen es ermöglichen, den Begrüßungswort individuell anzupassen, aber falls keiner was angibt, verwenden wir als Standard „Hello“. Du kannst Standardwerte festlegen, indem du das Gleichheitszeichen benutzt, genau wie bei Variablen: Hier ist name weiterhin erforderlich, aber salutation hat als Backup den Wert 'Hello', falls niemand eine andere Begrüßung angibt. Jetzt können wir diese Funktion auf zwei Arten aufrufen: Beim ersten Aufruf verwendet JavaScript den Standardwert „Hello“, weil wir keine Begrüßung angegeben haben. Beim zweiten Aufruf wird stattdessen unser eigenes „Hi“ verwendet. Diese Flexibilität macht Funktionen an unterschiedliche Situationen anpassbar. ### 🎛️ Parameterprüfung: Funktionen flexibel machen Teste dein Verständnis von Parametern: - Was ist der Unterschied zwischen einem Parameter und einem Argument? - Warum sind Standardwerte in der realen Programmierung nützlich? - Kannst du vorhersagen, was passiert, wenn du mehr Argumente übergibst als Parameter definiert sind? ## Rückgabewerte Bisher haben unsere Funktionen nur Nachrichten in der Konsole ausgegeben, aber was, wenn eine Funktion etwas berechnen und das Ergebnis zurückgeben soll? Dafür gibt es Rückgabewerte. Statt einfach nur etwas anzuzeigen, kann eine Funktion dir einen Wert zurückgeben, den du in einer Variablen speichern oder an anderer Stelle im Code verwenden kannst. Um einen Wert zurückzugeben, verwendest du das Schlüsselwort return gefolgt von dem Wert, den du zurückgeben möchtest: Wichtig: Wenn eine Funktion auf eine return-Anweisung trifft, hört sie sofort auf zu laufen und sendet den Wert zurück an den Aufrufer. Passen wir unsere Begrüßungsfunktion so an, dass sie die Nachricht zurückgibt anstatt sie auszugeben: Jetzt erzeugt die Funktion die Nachricht und gibt sie zurück, anstatt sie auszugeben. Um den Rückgabewert zu verwenden, können wir ihn in einer Variablen speichern – wie jeden anderen Wert auch: Jetzt enthält greetingMessage „Hello, Christopher“ und wir können diese Nachricht überall im Code verwenden – um sie auf einer Webseite anzuzeigen, in eine E-Mail einzufügen oder an eine andere Funktion zu übergeben. ### 🔄 Rückgabewerte testen: Ergebnisse zurückbekommen Bewerte dein Verständnis von Rückgabewerten: - Was passiert mit Code nach einer return-Anweisung in einer Funktion? - Warum ist das Zurückgeben von Werten oft besser als nur die Ausgabe in die Konsole? - Kann eine Funktion verschiedene Werttypen zurückgeben (String, Zahl, Boolean)? ## Funktionen als Parameter für Funktionen Funktionen können als Parameter an andere Funktionen übergeben werden. Dieses Konzept mag anfangs kompliziert erscheinen, ist aber eine mächtige Eigenschaft, die flexible Programmiermuster ermöglicht. Dieses Muster ist sehr verbreitet, wenn du sagen willst „wenn etwas passiert, mach dies andere“. Zum Beispiel „wenn der Timer fertig ist, führe diesen Code aus“ oder „wenn der Nutzer den Button klickt, rufe diese Funktion auf“. Schauen wir uns setTimeout an, eine eingebaute Funktion, die nach einer bestimmten Zeit etwas Code ausführt. Wir müssen ihr sagen, welchen Code sie ausführen soll – da ist das Übergeben einer Funktion genau richtig! Probier diesen Code aus – nach 3 Sekunden erscheint eine Nachricht: Beachte, dass wir displayDone (ohne Klammern) an setTimeout übergeben. Wir rufen die Funktion nicht selbst auf – wir übergeben sie an setTimeout und sagen „ruf das in 3 Sekunden auf“. ### Anonyme Funktionen Manchmal brauchst du eine Funktion nur für eine Sache und möchtest ihr keinen Namen geben. Überleg mal: Wenn du eine Funktion nur einmal nutzt, warum solltest du deinen Code mit einem extra Namen überfrachten? JavaScript erlaubt dir, anonyme Funktionen zu erstellen – Funktionen ohne Namen, die du genau dort definierst, wo du sie brauchst. So kann man unser Timer-Beispiel mit einer anonymen Funktion schreiben: Das erzielt dasselbe Ergebnis, aber die Funktion wird direkt im Aufruf von setTimeout definiert, sodass keine separate Funktionsdeklaration nötig ist. ### Fat Arrow Functions Modernes JavaScript hat eine noch kürzere Art, Funktionen zu schreiben, die sogenannten Arrow Functions. Sie nutzen => (was wie ein Pfeil aussieht – clever, oder?) und sind bei Entwicklern sehr beliebt. Arrow Functions sparen dir das Schlüsselwort function und machen den Code kürzer und klarer. Hier unser Timer-Beispiel mit einer Arrow Function: Die () sind der Platz für Parameter (hier leer), dann folgt der Pfeil => und schließlich der Funktionskörper in geschweiften Klammern. Das bietet dieselbe Funktionalität mit kompakter Syntax. ### Wann welchen Ansatz verwenden Wann solltest du welchen Ansatz wählen? Eine praktische Faustregel: Wenn du die Funktion mehrfach brauchst, gib ihr einen Namen und definiere sie separat. Für einen einmaligen Einsatz kannst du eine anonyme Funktion nutzen. Sowohl Arrow Functions als auch die traditionelle Syntax sind gültige Optionen, wobei Arrow Functions in modernen JavaScript-Codebasen häufiger verwendet werden. ### 🎨 Funktionsstile testen: Die richtige Syntax wählen Teste dein Syntaxwissen: - Wann würdest du Arrow Functions gegenüber traditioneller Funktionssyntax bevorzugen? - Was ist der Hauptvorteil von anonymen Funktionen? - Kannst du dir eine Situation vorstellen, in der eine benannte Funktion besser als eine anonyme ist? --- ## 🚀 Herausforderung Kannst du in einem Satz den Unterschied zwischen Funktionen und Methoden beschreiben? Versuch es mal! ## GitHub Copilot Agent Challenge 🚀 Nutze den Agent-Modus, um folgende Herausforderung zu lösen: Beschreibung: Erstelle eine Hilfsbibliothek mit mathematischen Funktionen, die verschiedene in dieser Lektion behandelte Funktionenkonzepte demonstriert, einschließlich Parameter, Standardwerte, Rückgabewerte und Arrow Functions. Aufgabe: Erstelle eine JavaScript-Datei namens mathUtils.js mit folgenden Funktionen: 1. Eine Funktion add, die zwei Parameter nimmt und deren Summe zurückgibt 2. Eine Funktion multiply mit Standardwerten für Parameter (zweiter Parameter standardmäßig 1) 3. Eine Arrow Function square, die eine Zahl nimmt und deren Quadrat zurückgibt 4. Eine Funktion calculate, die eine andere Funktion als Parameter sowie zwei Zahlen akzeptiert und dann die Funktion auf diese Zahlen anwendet 5. Demonstriere den Aufruf jeder Funktion mit passenden Testfällen Mehr Infos zum Agent-Modus findest du hier. ## Nach-Vorlesungs-Quiz Nach-Vorlesungs-Quiz ## Wiederholung & Selbststudium Es lohnt sich, noch etwas mehr über Arrow Functions zu lesen, da sie immer häufiger in Codebasen verwendet werden. Übe, eine Funktion zu schreiben und dann mit dieser Syntax neu zu formulieren. ## Aufgabe Fun with Functions --- ## 🧰 Dein JavaScript Funktions-Werkzeugkasten Übersicht --- ## 🚀 Deine Mastery-Zeitleiste für JavaScript-Funktionen ### ⚡ Was du in den nächsten 5 Minuten tun kannst - [ ] Schreibe eine einfache Funktion, die deine Lieblingszahl zurückgibt - [ ] Erstelle eine Funktion mit zwei Parametern, die diese zusammenaddiert - [ ] Versuche, eine traditionelle Funktion in Pfeilfunktionssyntax umzuwandeln - [ ] Übe die Herausforderung: Erkläre den Unterschied zwischen Funktionen und Methoden ### 🎯 Was du in dieser Stunde erreichen kannst - [ ] Beende das Quiz nach der Lektion und überprüfe alle verwirrenden Konzepte - [ ] Erstelle die Mathe-Utility-Bibliothek aus der GitHub Copilot-Herausforderung - [ ] Erstelle eine Funktion, die eine andere Funktion als Parameter verwendet - [ ] Übe das Schreiben von Funktionen mit Standardparametern - [ ] Experimentiere mit Template-Literalen in Rückgabewerten von Funktionen ### 📅 Dein einwöchiges Funktions-Meisterprogramm - [ ] Schließe die Aufgabe "Spaß mit Funktionen" kreativ ab - [ ] Refaktoriere wiederholten Code, den du geschrieben hast, in wiederverwendbare Funktionen - [ ] Baue einen kleinen Taschenrechner, der nur Funktionen verwendet (keine globalen Variablen) - [ ] Übe Pfeilfunktionen mit Array-Methoden wie map() und filter() - [ ] Erstelle eine Sammlung von Hilfsfunktionen für häufige Aufgaben - [ ] Studiere Higher-Order-Funktionen und Konzepte des funktionalen Programmierens ### 🌟 Deine einmonatige Transformation - [ ] Beherrsche fortgeschrittene Funktionskonzepte wie Closures und Scope - [ ] Baue ein Projekt, das stark auf Funktionskomposition setzt - [ ] Trage zur Open Source bei, indem du Funktionsdokumentationen verbesserst - [ ] Bringe jemandem anderes Funktionen und verschiedene Syntaxstile bei - [ ] Erkunde Paradigmen des funktionalen Programmierens in JavaScript - [ ] Erstelle eine persönliche Bibliothek wiederverwendbarer Funktionen für zukünftige Projekte ### 🏆 Finaler Funktions-Champion Check-in Feiere dein Funktions-Meistersein: - Welche Funktion hast du bisher als am nützlichsten empfunden? - Wie hat das Lernen über Funktionen deine Denkweise zur Codeorganisation verändert? - Welche Funktionssyntax bevorzugst du und warum? - Welches realweltliche Problem würdest du durch das Schreiben einer Funktion lösen? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Haftungsausschluss: Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir Genauigkeit anstreben, möchten wir darauf hinweisen, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle zu betrachten. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript-Grundlagen: Treffen von Entscheidungen

Hast du dich jemals gefragt, wie Anwendungen kluge Entscheidungen treffen? Zum Beispiel, wie ein Navigationssystem die schnellste Route wählt oder wie ein Thermostat entscheidet, wann die Heizung eingeschaltet wird? Dies ist das grundlegende Konzept des Entscheidens in der Programmierung. So wie Charles Babbages Analytical Engine entwickelt wurde, um basierend auf Bedingungen unterschiedliche Operationen auszuführen, müssen moderne JavaScript-Programme Entscheidungen basierend auf verschiedenen Umständen treffen. Diese Fähigkeit zu verzweigen und Entscheidungen zu treffen, verwandelt statischen Code in reaktionsfähige, intelligente Anwendungen. In dieser Lektion lernst du, wie du bedingte Logik in deinen Programmen implementierst. Wir werden bedingte Anweisungen, Vergleichsoperatoren und logische Ausdrücke erkunden, die es deinem Code ermöglichen, Situationen zu bewerten und angemessen zu reagieren. ## Vor der Vorlesung Quiz Vor der Vorlesung Quiz Die Fähigkeit, Entscheidungen zu treffen und den Programmfluss zu steuern, ist ein grundlegender Aspekt der Programmierung. Dieser Abschnitt behandelt, wie du den Ausführungspfad deiner JavaScript-Programme mit Boolean-Werten und bedingter Logik kontrollierst. [](https://youtube.com/watch?v=SxTp8j-fMMY "Entscheidungen treffen") ## Eine kurze Wiederholung der Booleans Bevor wir uns dem Treffen von Entscheidungen widmen, lass uns die Boolean-Werte aus unserer vorherigen Lektion noch einmal betrachten. Benannt nach dem Mathematiker George Boole, repräsentieren diese Werte binäre Zustände – entweder true oder false. Es gibt keine Zweideutigkeit, keinen Mittelweg. Diese binären Werte bilden die Grundlage aller rechnerischen Logik. Jede Entscheidung, die dein Programm trifft, reduziert sich letztlich auf eine Boolean-Auswertung. Boolean-Variablen zu erstellen ist einfach: Dies erstellt zwei Variablen mit expliziten Boolean-Werten. ✅ Booleans sind nach dem englischen Mathematiker, Philosophen und Logiker George Boole (1815–1864) benannt. ## Vergleichsoperatoren und Booleans In der Praxis wirst du selten Boolean-Werte manuell setzen. Stattdessen erzeugst du sie, indem du Bedingungen bewertest: „Ist diese Zahl größer als jene?“ oder „Sind diese Werte gleich?“ Vergleichsoperatoren ermöglichen diese Auswertungen. Sie vergleichen Werte und geben als Ergebnis einen Boolean zurück, der von der Beziehung zwischen den Operanden abhängt. ✅ Prüfe dein Wissen, indem du einige Vergleiche in der Konsole deines Browsers eingibst. Überrascht dich ein Ergebnis? ### 🧠 Vergleichsbeherrschung: Verständnis der Boolean-Logik Teste dein Verständnis von Vergleichen: - Warum denkst du, dass === (strikte Gleichheit) allgemein == (lose Gleichheit) vorgezogen wird? - Kannst du vorhersagen, was 5 === '5' zurückgibt? Und 5 == '5'? - Was ist der Unterschied zwischen !== und !=? ## If-Anweisung Die if-Anweisung ist wie eine Frage in deinem Code: „Wenn diese Bedingung wahr ist, dann führe das hier aus.“ Sie ist wohl das wichtigste Werkzeug, das du zum Treffen von Entscheidungen in JavaScript verwendest. So funktioniert sie: Die Bedingung steht in den Klammern, und wenn sie true ist, führt JavaScript den Code im geschweiften Block aus. Wenn sie false ist, überspringt JavaScript diesen Block einfach. Du wirst oft Vergleichsoperatoren verwenden, um solche Bedingungen zu erzeugen. Hier ein praktisches Beispiel: Da 1000 >= 800 zu true ausgewertet wird, wird der Code im Block ausgeführt und „Getting a new laptop!“ in der Konsole angezeigt. ## If..Else-Anweisung Aber was, wenn dein Programm etwas anderes machen soll, wenn die Bedingung falsch ist? Hier kommt else ins Spiel – eine Art Backup-Plan. Die else-Anweisung gibt dir die Möglichkeit zu sagen: „Wenn diese Bedingung nicht wahr ist, mach stattdessen das hier.“ Da 500 >= 800 false ist, überspringt JavaScript den ersten Block und führt stattdessen den else-Block aus. Du wirst „Can't afford a new laptop, yet!“ in der Konsole sehen. ✅ Teste dein Verständnis dieses Codes und des folgenden Codes, indem du sie in einer Browser-Konsole ausführst. Ändere die Werte der Variablen currentMoney und laptopPrice, um die ausgegebenen console.log()-Meldungen zu ändern. ### 🎯 If-Else Logiktest: Verzweigungspfade Bewerte dein Verständnis bedingter Logik: - Was passiert, wenn currentMoney genau laptopPrice entspricht? - Kannst du dir ein reales Szenario vorstellen, in dem If-Else-Logik nützlich ist? - Wie könntest du das erweitern, um mehrere Preisbereiche abzudecken? ## Switch-Anweisung Manchmal musst du einen Wert mit mehreren Optionen vergleichen. Zwar könnte man mehrere if..else-Statements aneinanderreihen, doch das wird schnell unübersichtlich. Die switch-Anweisung bietet eine sauberere Struktur für den Umgang mit mehreren diskreten Werten. Das Konzept ähnelt den mechanischen Vermittlungssystemen, die in frühen Telefonzentralen verwendet wurden – ein Eingabewert bestimmt den spezifischen Ausführungspfad. So ist sie aufgebaut: - JavaScript wertet den Ausdruck einmal aus - Es durchsucht jeden case nach einer Übereinstimmung - Findet es eine Übereinstimmung, wird der entsprechende Codeblock ausgeführt - break sagt JavaScript, dass es stoppen und den switch verlassen soll - Wenn keine Fälle passen, wird der default-Block ausgeführt (wenn vorhanden) In diesem Beispiel sieht JavaScript, dass dayNumber gleich 2 ist, findet case 2 und setzt dayName auf „Tuesday“. Danach wird der switch verlassen. Das Ergebnis? „Today is Tuesday“ wird in der Konsole ausgegeben. ✅ Teste dein Verständnis dieses Codes und des folgenden Codes, indem du sie in einer Browser-Konsole ausführst. Ändere den Wert der Variablen a, um die zurückgegebene console.log() zu verändern. ### 🔄 Switch-Anweisung Beherrschung: Mehrere Optionen Teste dein Verständnis von switch: - Was passiert, wenn du eine break-Anweisung vergisst? - Wann solltest du switch statt mehrerer if-else-Statements verwenden? - Warum ist der default-Fall nützlich, auch wenn du denkst, alle Möglichkeiten abgedeckt zu haben? ## Logische Operatoren und Booleans Komplexe Entscheidungen erfordern oft, dass mehrere Bedingungen gleichzeitig bewertet werden. So wie Boolesche Algebra es Mathematikern erlaubt, logische Ausdrücke zu kombinieren, stellt die Programmierung logische Operatoren bereit, um mehrere Boolean-Bedingungen zu verknüpfen. Diese Operatoren ermöglichen ausgefeilte bedingte Logik, indem sie einfache true/false-Auswertungen kombinieren. Diese Operatoren erlauben es dir, Bedingungen auf nützliche Weise zu kombinieren: - UND (&&) bedeutet, beide Bedingungen müssen wahr sein - ODER (||) bedeutet, mindestens eine Bedingung muss wahr sein - NICHT (!) kehrt true in false (und umgekehrt) um ## Bedingungen und Entscheidungen mit logischen Operatoren Sieh dir diese logischen Operatoren mit einem realistischeren Beispiel an: In diesem Beispiel: Wir berechnen einen 20%-Rabattpreis (640), prüfen dann, ob unsere verfügbaren Mittel entweder den vollen Preis ODER den rabattierten Preis abdecken. Da 600 dem Schwellenwert 640 entspricht, wertet die Bedingung zu true aus. ### 🧮 Logische Operatoren Test: Bedingungen kombinieren Teste dein Verständnis der logischen Operatoren: - Was passiert im Ausdruck A && B, wenn A falsch ist? Wird B überhaupt ausgewertet? - Kannst du dir eine Situation vorstellen, in der du alle drei Operatoren (&&, ||, !) zusammen benötigst? - Was ist der Unterschied zwischen !user.isActive und user.isActive !== true? ### Negationsoperator Manchmal ist es einfacher zu fragen, wann etwas NICHT wahr ist. Anstatt zu fragen „Ist der Benutzer eingeloggt?“, möchtest du vielleicht fragen „Ist der Benutzer NICHT eingeloggt?“ Der Ausrufezeichen-Operator (!) kehrt die Logik für dich um. Der !-Operator ist wie „das Gegenteil von…“ – wenn etwas true ist, macht ! daraus false und umgekehrt. ### Ternäre Ausdrücke Für einfache bedingte Zuweisungen bietet JavaScript den ternären Operator. Diese kompakte Syntax erlaubt es dir, einen bedingten Ausdruck in einer einzigen Zeile zu schreiben, nützlich wenn du basierend auf einer Bedingung einen von zwei Werten zuweisen willst. Es liest sich wie eine Frage: „Ist diese Bedingung wahr? Wenn ja, benutze diesen Wert. Wenn nein, benutze jenen Wert.“ Hier ein greifbareres Beispiel: ✅ Nimm dir eine Minute und lese diesen Code mehrmals. Verstehst du, wie diese Operatoren funktionieren? Diese Zeile sagt: „Ist firstNumber größer als secondNumber? Wenn ja, setze firstNumber in biggestNumber. Wenn nein, setze secondNumber in biggestNumber.“ Der ternäre Operator ist nur eine kürzere Form der traditionellen if..else-Anweisung: Beide Ansätze erzeugen identische Ergebnisse. Der ternäre Operator ist kompakter, während die traditionelle if-else-Struktur bei komplexen Bedingungen vielleicht besser lesbar ist. --- ## 🚀 Herausforderung Erstelle ein Programm, das zuerst mit logischen Operatoren geschrieben ist und schreibe es dann mit einem ternären Ausdruck um. Welche Syntax bevorzugst du? --- ## GitHub Copilot Agent Challenge 🚀 Nutze den Agentenmodus, um die folgende Herausforderung zu meistern: Beschreibung: Erstelle einen umfassenden Notenrechner, der mehrere Konzepte des Entscheidens aus dieser Lektion zeigt, einschließlich if-else-Anweisungen, switch-Anweisungen, logischen Operatoren und ternären Ausdrücken. Anforderung: Schreibe ein JavaScript-Programm, das die numerische Punktzahl eines Schülers (0-100) entgegennimmt und anhand folgender Kriterien die Buchstabennote bestimmt: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Unter 60 Anforderungen: 1. Verwende eine if-else-Anweisung, um die Buchstabennote zu bestimmen 2. Verwenden Sie logische Operatoren, um zu prüfen, ob der Schüler bestanden hat (Note >= 60) UND Auszeichnungen erhalten hat (Note >= 90) 3. Verwenden Sie eine switch-Anweisung, um für jede Buchstabennote spezifisches Feedback zu geben 4. Verwenden Sie einen ternären Operator, um festzustellen, ob der Schüler für den nächsten Kurs berechtigt ist (Note >= 70) 5. Fügen Sie eine Eingabevalidierung hinzu, um sicherzustellen, dass die Punktzahl zwischen 0 und 100 liegt Testen Sie Ihr Programm mit verschiedenen Noten, einschließlich Grenzfällen wie 59, 60, 89, 90 und ungültigen Eingaben. Erfahren Sie mehr über den Agentenmodus hier. ## Post-Vorlesungs-Quiz Post-Vorlesungs-Quiz ## Rückblick & Selbststudium Lesen Sie mehr über die vielen für den Benutzer verfügbaren Operatoren auf MDN. Gehen Sie Joshs Comeaus wunderbare Operatoren-Übersicht durch! ## Aufgabe Operatoren --- ## 🧠 Zusammenfassung Ihres Entscheidungstools --- ## 🚀 Ihre Zeitachse zur Beherrschung der Entscheidungsfindung in JavaScript ### ⚡ Was Sie in den nächsten 5 Minuten tun können - [ ] Üben Sie Vergleichsoperatoren in Ihrer Browser-Konsole - [ ] Schreiben Sie eine einfache if-else-Anweisung, die Ihr Alter prüft - [ ] Probieren Sie die Herausforderung: Schreiben Sie eine if-else-Anweisung mit einem ternären Operator um - [ ] Testen Sie, was mit verschiedenen "truthy" und "falsy" Werten passiert ### 🎯 Was Sie in dieser Stunde erreichen können - [ ] Absolvieren Sie das Post-Lektion-Quiz und überprüfen Sie verwirrende Konzepte - [ ] Bauen Sie den umfassenden Notenrechner aus der GitHub Copilot-Herausforderung - [ ] Erstellen Sie einen einfachen Entscheidungsbaum für ein reales Szenario (z. B. Entscheidung zur Kleidung) - [ ] Üben Sie die Kombination mehrerer Bedingungen mit logischen Operatoren - [ ] Experimentieren Sie mit switch-Anweisungen für verschiedene Anwendungsfälle ### 📅 Ihre einwöchige Logik-Meisterschaft - [ ] Schließen Sie die Operatoren-Aufgabe mit kreativen Beispielen ab - [ ] Erstellen Sie eine Mini-Quiz-Anwendung unter Verwendung verschiedener bedingter Strukturen - [ ] Erstellen Sie einen Formular-Validator, der mehrere Eingabebedingungen prüft - [ ] Üben Sie Joshs Comeaus Operatoren-Übungen - [ ] Refaktorieren Sie bestehenden Code, um passendere bedingte Strukturen zu verwenden - [ ] Studieren Sie Kurzschlussauswertung und Performance-Auswirkungen ### 🌟 Ihre einmonatige Transformation - [ ] Meistern Sie komplexe verschachtelte Bedingungen und erhalten Sie die Lesbarkeit des Codes - [ ] Bauen Sie eine Anwendung mit ausgefeilter Entscheidungslogik - [ ] Tragen Sie zur Open Source bei, indem Sie die bedingte Logik in bestehenden Projekten verbessern - [ ] Bringen Sie jemand anderem verschiedene bedingte Strukturen und deren Einsatz näher - [ ] Erkunden Sie funktionale Programmieransätze zur bedingten Logik - [ ] Erstellen Sie eine persönliche Referenzanleitung für Best Practices bei Bedingungen ### 🏆 Abschluss-Check-in des Entscheidungs-Champions Feiern Sie Ihre Beherrschung des logischen Denkens: - Was ist die komplexeste Entscheidungslogik, die Sie erfolgreich implementiert haben? - Welche bedingte Struktur fühlt sich für Sie am natürlichsten an und warum? - Wie hat das Lernen über logische Operatoren Ihren Problemlösungsansatz verändert? - Welche reale Anwendung würde von ausgefeilter Entscheidungslogik profitieren? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Haftungsausschluss: Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes Co-op Translator übersetzt. Obwohl wir auf Genauigkeit achten, kann es bei automatischen Übersetzungen zu Fehlern oder Ungenauigkeiten kommen. Das Originaldokument in seiner ursprünglichen Sprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Grundlagen: Arrays und Schleifen

## Vor-Vorlesungs-Quiz Vor-Vorlesungs-Quiz Haben Sie sich schon einmal gefragt, wie Websites die Artikel im Warenkorb verfolgen oder Ihre Freundesliste anzeigen? Genau hier kommen Arrays und Schleifen ins Spiel. Arrays sind wie digitale Behälter, die mehrere Informationsstücke aufnehmen, während Schleifen es Ihnen ermöglichen, all diese Daten effizient ohne sich wiederholenden Code zu verarbeiten. Gemeinsam bilden diese beiden Konzepte die Grundlage für den Umgang mit Informationen in Ihren Programmen. Sie lernen, von der manuellen Auflistung jeden einzelnen Schritts zu klugem, effizientem Code überzugehen, der Hunderte oder sogar Tausende von Elementen schnell verarbeiten kann. Am Ende dieser Lektion werden Sie verstehen, wie man komplexe Datenaufgaben mit nur wenigen Zeilen Code bewältigen kann. Lassen Sie uns diese wesentlichen Programmierkonzepte erkunden. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Schleifen") ## Arrays Denken Sie an Arrays wie an einen digitalen Aktenschrank - statt ein Dokument pro Schublade zu speichern, können Sie mehrere verwandte Elemente in einem einzigen strukturierten Behälter organisieren. In Programmierbegriffen ermöglichen Arrays es, mehrere Informationsstücke in einem organisierten Paket zu speichern. Egal ob Sie eine Fotogalerie erstellen, eine To-Do-Liste verwalten oder Highscores in einem Spiel verfolgen, Arrays bilden die Grundlage für die Datenorganisation. Schauen wir uns an, wie sie funktionieren. ✅ Arrays sind überall um uns herum! Können Sie an ein reales Beispiel eines Arrays denken, wie z.B. ein Solarpanel-Array? ### Arrays erstellen Ein Array zu erstellen ist super einfach – verwenden Sie einfach eckige Klammern! Was passiert hier? Sie haben gerade einen leeren Behälter mit diesen eckigen Klammern [] erstellt. Denken Sie daran wie ein leeres Bücherregal – es ist bereit, die Bücher, die Sie dort organisieren möchten, aufzunehmen. Sie können Ihr Array auch von Anfang an mit Anfangswerten füllen: Coole Dinge zu beachten: - Sie können Text, Zahlen oder sogar Wahr/Falsch-Werte im gleichen Array speichern - Trennen Sie einfach jedes Element mit einem Komma – ganz einfach! - Arrays sind perfekt, um zusammengehörige Informationen zusammenzuhalten ### Array-Indizierung Hier ist etwas, das auf den ersten Blick ungewöhnlich erscheinen mag: Arrays nummerieren ihre Elemente ab 0, nicht ab 1. Diese Null-basierte Indizierung hat ihren Ursprung darin, wie Computerspeicher funktioniert – sie ist eine Programmierkonvention seit den frühen Tagen von Programmiersprachen wie C. Jeder Platz im Array erhält eine eigene Adressnummer, den Index. ✅ Überraschend, dass Arrays bei Index 0 starten? In einigen Programmiersprachen beginnen Indizes bei 1. Es gibt eine interessante Geschichte dazu, die Sie auf Wikipedia nachlesen können. Zugriff auf Array-Elemente: Den Ablauf hier erklärt: - Verwendet eckige Klammern mit der Indexnummer, um auf Elemente zuzugreifen - Gibt den Wert zurück, der an dieser spezifischen Position im Array gespeichert ist - Beginnt bei 0 zu zählen, somit hat das erste Element den Index 0 Ändern von Array-Elementen: Im obigen Beispiel haben wir: - Das Element an Index 4 von "Rocky Road" zu "Butter Pecan" geändert - Ein neues Element "Cookie Dough" an Index 5 hinzugefügt - Die Array-Länge automatisch erweitert, wenn Elemente außerhalb der aktuellen Grenzen hinzugefügt werden ### Array-Länge und häufige Methoden Arrays bringen eingebaute Eigenschaften und Methoden mit, die das Arbeiten mit Daten wesentlich erleichtern. Array-Länge ermitteln: Wichtig zu merken: - Gibt die Gesamtanzahl der Elemente im Array zurück - Aktualisiert sich automatisch, wenn Elemente hinzugefügt oder entfernt werden - Bietet eine dynamische Zählung, nützlich für Schleifen und Validierung Essentielle Array-Methoden: Diese Methoden verstehen: - Fügt Elemente mit push() (Ende) und unshift() (Anfang) hinzu - Entfernt Elemente mit pop() (Ende) und shift() (Anfang) - Findet Elemente mit indexOf() und prüft Existenz mit includes() - Gibt nützliche Werte zurück wie entfernte Elemente oder Positionsindizes ✅ Probieren Sie es selbst! Verwenden Sie die Konsole Ihres Browsers, um ein eigenes Array zu erstellen und zu manipulieren. ### 🧠 Array-Grundlagen-Check: Organisieren Sie Ihre Daten Testen Sie Ihr Verständnis von Arrays: - Warum glauben Sie, dass Arrays bei 0 statt bei 1 zu zählen beginnen? - Was passiert, wenn Sie versuchen, einen Index zuzugreifen, der nicht existiert (z.B. arr[100] in einem 5-Element-Array)? - Können Sie drei reale Anwendungsszenarien nennen, in denen Arrays nützlich sind? ## Schleifen Denken Sie an die berühmte Strafe aus Charles Dickens’ Romanen, bei der Schüler wiederholt Sätze auf eine Tafel schreiben mussten. Stellen Sie sich vor, Sie könnten einfach jemandem sagen „Schreibe diesen Satz 100 Mal“ und es würde automatisch erledigt werden. Genau das tun Schleifen für Ihren Code. Schleifen sind wie ein unermüdlicher Assistent, der Aufgaben fehlerfrei wiederholen kann. Egal ob Sie jedes Element in einem Warenkorb prüfen oder alle Fotos in einem Album anzeigen müssen – Schleifen erledigen die Wiederholung effizient. JavaScript bietet mehrere Arten von Schleifen zur Auswahl. Lassen Sie uns jede untersuchen und verstehen, wann man sie einsetzt. ### For-Schleife Die for-Schleife ist wie ein Timer – Sie wissen genau, wie oft etwas passieren soll. Sie ist super organisiert und vorhersehbar, was sie perfekt macht, wenn Sie mit Arrays arbeiten oder Dinge zählen müssen. Aufbau einer For-Schleife: Schritt für Schritt, das passiert hier: - Initialisiert die Zählvariable i mit 0 am Anfang - Prüft vor jeder Iteration die Bedingung i < 10 - Führt den Codeblock aus, wenn die Bedingung wahr ist - Erhöht i nach jeder Iteration um 1 mit i++ - Stoppt, wenn die Bedingung falsch wird (wenn i 10 erreicht) ✅ Führen Sie diesen Code in der Browser-Konsole aus. Was passiert, wenn Sie kleine Änderungen an Zähler, Bedingung oder Iterationsausdruck vornehmen? Können Sie ihn rückwärts laufen lassen und einen Countdown erstellen? ### 🗓️ For-Schleifen-Mastery-Check: Kontrollierte Wiederholung Überprüfen Sie Ihr Verständnis der for-Schleife: - Was sind die drei Teile einer for-Schleife und was macht jeder Teil? - Wie können Sie ein Array rückwärts durchlaufen? - Was passiert, wenn Sie die Inkrementierung (i++) vergessen? ### While-Schleife Die while-Schleife ist wie „mach weiter, bis...“ – Sie wissen vielleicht nicht genau, wie oft sie läuft, aber Sie wissen, wann sie aufhören soll. Sie ist perfekt, um z.B. Benutzereingaben zu erfragen, bis der Benutzer liefert, was Sie brauchen, oder Daten zu durchsuchen, bis Sie gefunden haben, was Sie suchen. Merkmale der While-Schleife: - Führt aus, solange die Bedingung wahr ist - Erfordert manuelle Verwaltung von Zählvariablen - Prüft die Bedingung vor jeder Iteration - Risiko von Endlosschleifen, wenn die Bedingung nie falsch wird Verstehen Sie diese Beispiele: - Verwaltet die Zählvariable i manuell im Schleifenkörper - Erhöht den Zähler, um Endlosschleifen zu verhindern - Demonstriert den praktischen Einsatz mit Benutzereingabe und Limitierung der Versuche - Enthält Sicherheitsmechanismen, um endlose Ausführungen zu vermeiden ### ♾️ While-Schleifen-Weisheits-Check: Bedingungsbasierte Wiederholung Testen Sie Ihr Verständnis der while-Schleife: - Was ist die größte Gefahr bei der Verwendung von while-Schleifen? - Wann würden Sie eine while-Schleife einer for-Schleife vorziehen? - Wie kann man Endlosschleifen verhindern? ### Moderne Alternativen zu Schleifen JavaScript bietet moderne Schleifensyntax, die Ihren Code lesbarer und weniger fehleranfällig macht. For...of-Schleife (ES6+): Wichtige Vorteile von for...of: - Eliminiert die Indexverwaltung und potenzielle Off-by-One-Fehler - Bietet direkten Zugriff auf Array-Elemente - Verbessert die Lesbarkeit und reduziert Syntaxkomplexität forEach-Methode: Was Sie über forEach wissen sollten: - Führt eine Funktion für jedes Array-Element aus - Bietet sowohl Elementwert als auch Index als Parameter - Kann nicht vorzeitig abgebrochen werden (im Gegensatz zu traditionellen Schleifen) - Gibt undefined zurück (erstellt kein neues Array) ✅ Warum würden Sie eine for-Schleife anstelle einer while-Schleife wählen? 17.000 Nutzer auf StackOverflow hatten dieselbe Frage, und einige Meinungen könnten für Sie interessant sein. ### 🎨 Moderner Schleifen-Syntax-Check: ES6+ annehmen Bewerten Sie Ihr modernes JavaScript-Verständnis: - Was sind die Vorteile von for...of gegenüber traditionellen for-Schleifen? - Wann würden Sie trotzdem traditionelle for-Schleifen bevorzugen? - Was ist der Unterschied zwischen forEach und map? ## Schleifen und Arrays Kombinieren Sie Arrays mit Schleifen, schaffen Sie leistungsstarke Möglichkeiten zur Datenverarbeitung. Dieses Paar ist grundlegend für viele Programmieraufgaben, vom Anzeigen von Listen bis zur Berechnung von Statistiken. Traditionelle Array-Verarbeitung: So funktioniert dieser Ansatz: - Verwendet die Array-Länge, um die Schleifengrenze zu bestimmen - Greift auf Elemente per Index in traditionellen for-Schleifen zu - Bietet direkten Elementzugriff in for...of-Schleifen - Verarbeitet jedes Array-Element genau einmal Praktisches Beispiel zur Datenverarbeitung: So funktioniert dieser Code: - Initialisiert Variablen zur Verfolgung von Summe und Extremen - Verarbeitet jede Note in einer einzigen effizienten Schleife - Summiert zur Berechnung des Durchschnitts - Verfolgt höchste und niedrigste Werte während der Iteration - Berechnet abschließende Statistiken nach Schleifenende ✅ Experimentieren Sie mit dem Durchlaufen eines eigenen Arrays in der Konsole Ihres Browsers. --- ## GitHub Copilot Agent Challenge 🚀 Verwenden Sie den Agentenmodus, um die folgende Herausforderung zu lösen: Beschreibung: Erstellen Sie eine umfassende Datenverarbeitungsfunktion, die Arrays und Schleifen kombiniert, um einen Datensatz zu analysieren und aussagekräftige Erkenntnisse zu generieren. Aufgabe: Erstellen Sie eine Funktion namens analyzeGrades, die ein Array von Studenten-Notenobjekten (jedes mit den Eigenschaften name und score) entgegennimmt und ein Objekt mit Statistiken zurückgibt, darunter höchste Punktzahl, niedrigste Punktzahl, Durchschnittspunktzahl, Anzahl der Studenten, die bestanden haben (Punktzahl >= 70), und ein Array der Namen der Studenten, die über dem Durchschnitt liegen. Verwenden Sie in Ihrer Lösung mindestens zwei verschiedene Schleifentypen. Erfahren Sie mehr über den Agentenmodus. ## 🚀 Herausforderung JavaScript bietet mehrere moderne Array-Methoden, die traditionelle Schleifen für bestimmte Aufgaben ersetzen können. Erkunde forEach, for-of, map, filter und reduce. Deine Herausforderung: Überarbeite das Beispiel der Schülernoten mit mindestens drei verschiedenen Array-Methoden. Achte darauf, wie viel sauberer und lesbarer der Code mit modernem JavaScript-Syntax wird. ## Quiz nach der Vorlesung Quiz nach der Vorlesung ## Wiederholung & Selbststudium Arrays in JavaScript haben viele Methoden, die extrem nützlich für die Datenmanipulation sind. Lies diese Methoden nach und probiere einige davon aus (wie push, pop, slice und splice) an einem selbst erstellten Array. ## Aufgabe Loop an Array --- ## 📊 Deine Zusammenfassung zum Arrays- & Loops-Werkzeugkasten --- ## 🚀 Deine Timeline zur Arrays- & Loops-Meisterschaft ### ⚡ Das kannst du in den nächsten 5 Minuten tun - [ ] Erstelle ein Array deiner Lieblingsfilme und greife auf spezifische Elemente zu - [ ] Schreibe eine for-Schleife, die von 1 bis 10 zählt - [ ] Probiere die Herausforderung mit modernen Array-Methoden aus der Lektion - [ ] Übe Array-Indexierung in deiner Browser-Konsole ### 🎯 Das kannst du in dieser Stunde erreichen - [ ] Beende das Quiz nach der Lektion und wiederhole schwierige Konzepte - [ ] Baue den umfassenden Notenanalysator aus der GitHub Copilot-Herausforderung - [ ] Erstelle einen einfachen Warenkorb, der Artikel hinzufügt und entfernt - [ ] Übe das Konvertieren zwischen verschiedenen Schleifentypen - [ ] Experimentiere mit Array-Methoden wie push, pop, slice und splice ### 📅 Deine einwöchige Reise zur Datenverarbeitung - [ ] Beende die Aufgabe „Loop an Array“ mit kreativen Erweiterungen - [ ] Erstelle eine To-Do-Liste-App mit Arrays und Schleifen - [ ] Baue einen einfachen Statistikrechner für numerische Daten - [ ] Übe mit MDN Array-Methoden - [ ] Baue eine Fotogalerie- oder Musik-Playlist-Oberfläche - [ ] Erkunde funktionale Programmierung mit map, filter und reduce ### 🌟 Deine einmonatige Transformation - [ ] Meistere fortgeschrittene Array-Operationen und Performance-Optimierung - [ ] Baue ein vollständiges Dashboard zur Datenvisualisierung - [ ] Trage zu Open-Source-Projekten im Bereich Datenverarbeitung bei - [ ] Bringe jemand anderem Arrays und Schleifen mit praktischen Beispielen bei - [ ] Erstelle eine persönliche Bibliothek wiederverwendbarer Datenverarbeitungsfunktionen - [ ] Erkunde Algorithmen und Datenstrukturen, die auf Arrays basieren ### 🏆 Endgültiger Check-in für Datenverarbeitungs-Champions Feiere deine Arrays- und Schleifen-Meisterschaft: - Was ist die nützlichste Array-Operation, die du für reale Anwendungen gelernt hast? - Welcher Schleifentyp fühlt sich für dich am natürlichsten an und warum? - Wie hat das Verständnis von Arrays und Schleifen deinen Umgang mit der Organisation von Daten verändert? - Welche komplexe Datenverarbeitungsaufgabe möchtest du als nächstes angehen? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Haftungsausschluss: Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir um Genauigkeit bemüht sind, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle zu betrachten. Bei wichtigen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Für Missverständnisse oder Fehlinterpretationen, die durch die Nutzung dieser Übersetzung entstehen, übernehmen wir keine Haftung. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array

Εισαγωγή στη JavaScript

Η JavaScript είναι η γλώσσα του διαδικτύου. Σε αυτά τα τέσσερα μαθήματα, θα μάθετε τα βασικά της. ### Θέματα 1. Μεταβλητές και Τύποι Δεδομένων 2. Συναρτήσεις και Μέθοδοι 3. Λήψη Αποφάσεων με JavaScript 4. Πίνακες και Βρόχοι ### Συντελεστές Αυτά τα μαθήματα γράφτηκαν με ♥️ από τους Jasmine Greenaway, Christopher Harrison και Chris Noring --- Αποποίηση ευθύνης: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.

javascript

Βασικά στοιχεία JavaScript: Τύποι Δεδομένων

Οι τύποι δεδομένων είναι μία από τις βασικές έννοιες στην JavaScript που θα συναντάτε σε κάθε πρόγραμμα που γράφετε. Σκεφτείτε τους τύπους δεδομένων σαν το σύστημα αρχειοθέτησης που χρησιμοποιούσαν οι αρχαίοι βιβλιοθηκάριοι στην Αλεξάνδρεια – είχαν συγκεκριμένες θέσεις για παπύρους που περιείχαν ποίηση, μαθηματικά και ιστορικά αρχεία. Η JavaScript οργανώνει τις πληροφορίες με παρόμοιο τρόπο, με διαφορετικές κατηγορίες για διαφορετικούς τύπους δεδομένων. Σε αυτό το μάθημα, θα εξερευνήσουμε τους βασικούς τύπους δεδομένων που κάνουν την JavaScript να λειτουργεί. Θα μάθετε πώς να χειρίζεστε αριθμούς, κείμενο, τιμές true/false, και θα καταλάβετε γιατί η σωστή επιλογή τύπου είναι ουσιώδης για τα προγράμματά σας. Αυτές οι έννοιες μπορεί να φαίνονται αφηρημένες στην αρχή, αλλά με την εξάσκηση θα γίνουν δεύτερη φύση. Η κατανόηση των τύπων δεδομένων θα κάνει τα πάντα στην JavaScript πολύ πιο κατανοητά. Όπως οι αρχιτέκτονες χρειάζεται να καταλάβουν τα διαφορετικά υλικά πριν χτίσουν έναν καθεδρικό ναό, έτσι και αυτές οι βασικές αρχές θα στηρίξουν ό,τι κατασκευάσετε στο μέλλον. ## Προ-διάλεξη κουίζ Προ-διάλεξη κουίζ Αυτό το μάθημα καλύπτει τα βασικά της JavaScript, της γλώσσας που παρέχει διαδραστικότητα στο διαδίκτυο. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Ας ξεκινήσουμε με τις μεταβλητές και τους τύπους δεδομένων που τις γεμίζουν! ## Μεταβλητές Οι μεταβλητές είναι βασικά δομικά στοιχεία στον προγραμματισμό. Όπως τα βαζάκια με ετικέτες που χρησιμοποιούσαν οι μεσαιωνικοί αλχημιστές για να φυλάσσουν διαφορετικές ουσίες, οι μεταβλητές σας επιτρέπουν να αποθηκεύετε πληροφορίες και να τους δίνετε ένα περιγραφικό όνομα για να τις αναφέρετε αργότερα. Θέλετε να θυμάστε την ηλικία κάποιου; Αποθηκεύστε την σε μια μεταβλητή που ονομάζεται age. Θέλετε να παρακολουθείτε το όνομα ενός χρήστη; Κρατήστε το σε μια μεταβλητή που ονομάζεται userName. Θα επικεντρωθούμε στη σύγχρονη προσέγγιση δημιουργίας μεταβλητών στην JavaScript. Οι τεχνικές που θα μάθετε εδώ εκπροσωπούν χρόνια εξέλιξης της γλώσσας και βέλτιστες πρακτικές που ανέπτυξε η κοινότητα προγραμματιστών. Η δημιουργία και δήλωση μιας μεταβλητής ακολουθεί την εξής σύνταξη [λέξη-κλειδί] [όνομα]. Αποτελείται από δύο μέρη: - Λέξη-κλειδί. Χρησιμοποιήστε let για μεταβλητές που μπορούν να αλλάξουν, ή const για τιμές που παραμένουν σταθερές. - Το όνομα της μεταβλητής, αυτό είναι ένα περιγραφικό όνομα που επιλέγετε εσείς. ✅ Η λέξη-κλειδί let εισήχθη στην ES6 και δίνει στη μεταβλητή σας ένα λεγόμενο _block scope_ (πεδίο ορατότητας μπλοκ). Συνιστάται να χρησιμοποιείτε let ή const αντί της παλαιότερης λέξης-κλειδί var. Θα καλύψουμε τα block scopes πιο αναλυτικά σε επόμενα μέρη. ### Άσκηση - εργασία με μεταβλητές 1. Δηλώστε μια μεταβλητή. Ας ξεκινήσουμε δημιουργώντας την πρώτη μας μεταβλητή: ```javascript let myVariable; ``` Τι επιτυγχάνει αυτό: - Ενημερώνει τη JavaScript να δημιουργήσει μια θέση αποθήκευσης που ονομάζεται myVariable - Η JavaScript δεσμεύει μνήμη για αυτή τη μεταβλητή - Η μεταβλητή αυτή τη στιγμή δεν έχει τιμή (undefined) 2. Δώστε της μια τιμή. Τώρα βάλτε κάτι μέσα στη μεταβλητή μας: ```javascript myVariable = 123; ``` Πώς λειτουργεί η ανάθεση: - Ο τελεστής = αναθέτει την τιμή 123 στη μεταβλητή μας - Η μεταβλητή πλέον περιέχει αυτή την τιμή αντί για undefined - Μπορείτε να αναφερθείτε σε αυτή την τιμή σε όλο τον κώδικα χρησιμοποιώντας myVariable > Σημείωση: Η χρήση του = σε αυτό το μάθημα σημαίνει ότι χρησιμοποιούμε έναν "τελεστή ανάθεσης", που χρησιμοποιείται για να ορίσουμε μια τιμή σε μια μεταβλητή. Δεν δηλώνει ισότητα. 3. Κάντε το έξυπνα. Στην πραγματικότητα, ας συνδυάσουμε τα δύο αυτά βήματα: ```javascript let myVariable = 123; ``` Αυτή η προσέγγιση είναι πιο αποτελεσματική: - Δηλώνετε τη μεταβλητή και αναθέτετε τιμή σε μία δήλωση - Αυτή είναι η συνήθης πρακτική μεταξύ των προγραμματιστών - Μειώνει το μήκος του κώδικα ενώ διατηρεί την σαφήνεια 4. Αλλάξτε γνώμη. Τι γίνεται αν θέλουμε να αποθηκεύσουμε έναν διαφορετικό αριθμό; ```javascript myVariable = 321; ``` Κατανόηση της επαναανάθεσης: - Η μεταβλητή τώρα περιέχει 321 αντί για 123 - Η προηγούμενη τιμή αντικαθίσταται – οι μεταβλητές αποθηκεύουν μόνο μία τιμή κάθε φορά - Αυτή η μεταβλητότητα είναι το κύριο χαρακτηριστικό των μεταβλητών που δηλώνονται με let ✅ Δοκιμάστε το! Μπορείτε να γράψετε JavaScript απευθείας στον browser σας. Ανοίξτε το παράθυρο Developer Tools. Στην κονσόλα, θα βρείτε ένα prompt· πληκτρολογήστε let myVariable = 123, πατήστε enter, και μετά πληκτρολογήστε myVariable. Τι συμβαίνει; Σημειώστε ότι θα μάθετε περισσότερα για αυτές τις έννοιες σε επόμενα μαθήματα. ### 🧠 Εξέταση Επάρκειας στις Μεταβλητές: Να νιώσετε άνεση Ας δούμε πώς νιώθετε για τις μεταβλητές: - Μπορείτε να εξηγήσετε τη διαφορά μεταξύ δήλωσης και ανάθεσης σε μια μεταβλητή; - Τι συμβαίνει αν προσπαθήσετε να χρησιμοποιήσετε μια μεταβλητή πριν την δηλώσετε; - Πότε θα επιλέγατε let αντί για const για μια μεταβλητή; ## Σταθερές Μερικές φορές χρειάζεται να αποθηκεύσετε πληροφορίες που δεν πρέπει ποτέ να αλλάξουν κατά την εκτέλεση του προγράμματος. Σκεφτείτε τις σταθερές σαν τις μαθηματικές αρχές που καθιέρωσε ο Ευκλείδης στην αρχαία Ελλάδα – μόλις αποδειχθούν και καταγραφούν, παρέμεναν σταθερές για πάντα. Οι σταθερές λειτουργούν παρόμοια με τις μεταβλητές, αλλά με έναν σημαντικό περιορισμό: μόλις τους ανατεθεί μια τιμή, δεν μπορεί να αλλάξει. Αυτή η αμεταβλητότητα βοηθά στην αποφυγή τυχαίων αλλαγών σε κρίσιμες τιμές μέσα στο πρόγραμμα σας. Η δήλωση και η αρχικοποίηση μιας σταθεράς ακολουθεί τις ίδιες αρχές με μια μεταβλητή, με εξαίρεση τη λέξη-κλειδί const. Οι σταθερές συνήθως δηλώνονται με κεφαλαία γράμματα. Αυτό που κάνει ο κώδικας: - Δημιουργεί μια σταθερά με όνομα MY_VARIABLE με τιμή 123 - Χρησιμοποιεί σύμβαση ονοματοδοσίας με κεφαλαία αναφορικά με τις σταθερές - Αποτρέπει μελλοντικές αλλαγές σε αυτή την τιμή Οι σταθερές έχουν δύο βασικούς κανόνες: - Πρέπει να τους δώσετε τιμή αμέσως – δεν επιτρέπονται κενές σταθερές! - Δεν μπορείτε ποτέ να αλλάξετε αυτή την τιμή – η JavaScript θα εκτοξεύσει σφάλμα αν το προσπαθήσετε. Ας δούμε τι εννοώ: Απλή τιμή - Το παρακάτω ΔΕΝ επιτρέπεται: ```javascript const PI = 3; PI = 4; // δεν επιτρέπεται ``` Τι να θυμάστε: - Οι προσπάθειες για ανακαθορισμό μίας σταθεράς προκαλούν σφάλμα - Προστατεύει σημαντικές τιμές από τυχαίες αλλαγές - Εξασφαλίζει ότι η τιμή παραμένει σταθερή σε όλο το πρόγραμμα Προστασία αναφοράς αντικειμένου - Το παρακάτω ΔΕΝ επιτρέπεται: ```javascript const obj = { a: 3 }; obj = { b: 5 } // δεν επιτρέπεται ``` Κατανόηση αυτών των εννοιών: - Αποτρέπει την αντικατάσταση ολόκληρου του αντικειμένου με ένα νέο - Προστατεύει την αναφορά στο αρχικό αντικείμενο - Διατηρεί την ταυτότητα του αντικειμένου στη μνήμη Η τιμή του αντικειμένου δεν προστατεύεται - Το παρακάτω ΕΠΙΤΡΕΠΕΤΑΙ: ```javascript const obj = { a: 3 }; obj.a = 5; // επιτρέπεται ``` Ανάλυση των γεγονότων: - Τροποποιεί την τιμή ιδιότητας μέσα στο αντικείμενο - Διατηρεί την ίδια αναφορά αντικειμένου - Δείχνει ότι το περιεχόμενο ενός αντικειμένου μπορεί να αλλάξει ενώ η αναφορά παραμένει σταθερή > Σημειώστε ότι το const σημαίνει ότι η αναφορά προστατεύεται από ανακαθορισμό. Η τιμή δεν είναι απαραίτητα _αμετάβλητη_ και μπορεί να αλλάξει, ειδικά αν πρόκειται για σύνθετη δομή όπως ένα αντικείμενο. ## Τύποι Δεδομένων Η JavaScript οργανώνει τις πληροφορίες σε διαφορετικές κατηγορίες που ονομάζονται τύποι δεδομένων. Αυτή η έννοια αντανακλά το πώς οι αρχαίοι λόγιοι κατηγοριοποιούσαν τη γνώση – ο Αριστοτέλης διέκρινε μεταξύ διαφόρων τύπων λογικής σκέψης, γνωρίζοντας ότι οι λογικές αρχές δεν μπορούν να εφαρμοστούν ομοιόμορφα σε ποίηση, μαθηματικά και φυσική φιλοσοφία. Οι τύποι δεδομένων έχουν σημασία επειδή διαφορετικές λειτουργίες λειτουργούν με διαφορετικά είδη πληροφοριών. Όπως δεν μπορείτε να κάνετε αριθμητικές πράξεις στο όνομα ενός ατόμου ή να ταξινομήσετε αλφαβητικά μια μαθηματική εξίσωση, έτσι και η JavaScript απαιτεί τον κατάλληλο τύπο δεδομένων για κάθε λειτουργία. Η κατανόηση αυτού αποτρέπει λάθη και καθιστά τον κώδικά σας πιο αξιόπιστο. Οι μεταβλητές μπορούν να αποθηκεύσουν πολλά διαφορετικά είδη τιμών, όπως αριθμούς και κείμενο. Αυτοί οι διάφοροι τύποι τιμών είναι γνωστοί ως τύποι δεδομένων. Οι τύποι δεδομένων είναι σημαντικό μέρος της ανάπτυξης λογισμικού επειδή βοηθούν τους προγραμματιστές να λαμβάνουν αποφάσεις σχετικά με το πώς πρέπει να γράφεται ο κώδικας και πώς πρέπει να εκτελείται το λογισμικό. Επιπλέον, ορισμένοι τύποι δεδομένων έχουν μοναδικά χαρακτηριστικά που βοηθούν στη μετατροπή ή εξαγωγή επιπλέον πληροφορίας μέσα από μια τιμή. ✅ Οι Τύποι Δεδομένων αναφέρονται επίσης ως πρωτόγονοι τύποι δεδομένων της JavaScript, καθώς είναι οι πιο χαμηλού επιπέδου τύποι που παρέχει η γλώσσα. Υπάρχουν 7 πρωτόγονοι τύποι: string, number, bigint, boolean, undefined, null και symbol. Πάρτε ένα λεπτό να οπτικοποιήσετε τι μπορεί να αναπαριστά ο καθένας από αυτούς τους πρωτόγονους. Τι είναι ένα zebra; Τι γίνεται με το 0; Το true; ### Αριθμοί Οι αριθμοί είναι ο πιο άμεσος τύπος δεδομένων στην JavaScript. Είτε εργάζεστε με ακέραιους αριθμούς όπως το 42, δεκαδικούς όπως το 3.14, είτε με αρνητικούς αριθμούς όπως το -5, η JavaScript τους χειρίζεται ομοιόμορφα. Θυμάστε τη μεταβλητή μας από πριν; Το 123 που αποθηκεύσαμε ήταν στην πραγματικότητα ένας τύπος δεδομένων αριθμού: Κύρια χαρακτηριστικά: - Η JavaScript αναγνωρίζει αυτόματα τις αριθμητικές τιμές - Μπορείτε να εκτελέσετε μαθηματικές πράξεις με αυτές τις μεταβλητές - Δεν απαιτείται ρητή δήλωση τύπου Οι μεταβλητές μπορούν να αποθηκεύουν όλους τους τύπους αριθμών, συμπεριλαμβανομένων δεκαδικών ή αρνητικών αριθμών. Οι αριθμοί μπορούν επίσης να χρησιμοποιηθούν με αριθμητικούς τελεστές, που καλύπτονται στην επόμενη ενότητα. ### Αριθμητικοί Τελεστές Οι αριθμητικοί τελεστές σας επιτρέπουν να εκτελείτε μαθηματικούς υπολογισμούς στην JavaScript. Αυτοί οι τελεστές ακολουθούν τις ίδιες αρχές που χρησιμοποιούν οι μαθηματικοί εδώ και αιώνες – τα ίδια σύμβολα που εμφανίστηκαν στα έργα λόγιων όπως ο Αλ-Χουαρισμί, που ανέπτυξε τη συμβολική αναπαράσταση της άλγεβρας. Οι τελεστές λειτουργούν όπως θα περιμένατε από τα παραδοσιακά μαθηματικά: το συν για πρόσθεση, το μείον για αφαίρεση, και ούτω καθεξής. Υπάρχουν διάφοροι τύποι τελεστών που μπορείτε να χρησιμοποιήσετε όταν εκτελείτε αριθμητικές λειτουργίες, μερικοί από αυτούς παρατίθενται παρακάτω: ✅ Δοκιμάστε το! Δοκιμάστε μια αριθμητική πράξη στην κονσόλα του browser σας. Τα αποτελέσματα σας εκπλήσσουν; ### 🧮 Έλεγχος Μαθηματικών Ικανοτήτων: Υπολογίζοντας με Αυτοπεποίθηση Δοκιμάστε την κατανόησή σας στα μαθηματικά: - Ποια είναι η διαφορά μεταξύ του / (διαίρεση) και του % (υπόλοιπο); - Μπορείτε να προβλέψετε ποιο είναι το αποτέλεσμα του 10 % 3; (Υπόδειξη: δεν είναι 3,33...) - Γιατί μπορεί να είναι χρήσιμος ο τελεστής υπολοίπου στον προγραμματισμό; ### Συμβολοσειρές (Strings) Στην JavaScript, τα δεδομένα κειμένου αναπαριστώνται ως συμβολοσειρές. Ο όρος "string" προέρχεται από την έννοια χαρακτήρων που συνδέονται διαδοχικά, όπως οι γραφείς στα μεσαιωνικά μοναστήρια, που ένωναν γράμματα για να σχηματίσουν λέξεις και προτάσεις στα χειρόγραφά τους. Οι συμβολοσειρές είναι θεμελιώδεις για την ανάπτυξη ιστοσελίδων. Κάθε κομμάτι κειμένου που εμφανίζεται σε μια ιστοσελίδα – ονόματα χρηστών, ετικέτες κουμπιών, μηνύματα λάθους, περιεχόμενο – χειρίζεται ως δεδομένα τύπου συμβολοσειράς. Η κατανόηση των συμβολοσειρών είναι απαραίτητη για τη δημιουργία λειτουργικών διεπαφών χρήστη. Οι συμβολοσειρές είναι σύνολα χαρακτήρων που περικλείονται μέσα σε μονά ' ή διπλά " εισαγωγικά. Κατανόηση αυτών των εννοιών: - Χρησιμοποιεί είτε απλά εισαγωγικά ' είτε διπλά εισαγωγικά " για να ορίσει συμβολοσειρές - Αποθηκεύει κείμενο που μπορεί να περιλαμβάνει γράμματα, αριθμούς και σύμβολα - Αναθέτει τιμές συμβολοσειρών σε μεταβλητές για μελλοντική χρήση - Απαιτεί εισαγωγικά για να διαχωρίσει το κείμενο από ονόματα μεταβλητών Θυμηθείτε να χρησιμοποιείτε εισαγωγικά όταν γράφετε μια συμβολοσειρά, διαφορετικά η JavaScript θα υποθέσει ότι πρόκειται για όνομα μεταβλητής. ### Μορφοποίηση Συμβολοσειρών Η χειραγώγηση συμβολοσειρών σας επιτρέπει να συνδυάζετε στοιχεία κειμένου, να ενσωματώνετε μεταβλητές και να δημιουργείτε δυναμικό περιεχόμενο που αντιδρά στην κατάσταση του προγράμματος. Αυτή η τεχνική σας δίνει τη δυνατότητα να δημιουργείτε κείμενο προγραμματιστικά. Συχνά χρειάζεται να ενώσετε πολλές συμβολοσειρές μεταξύ τους – αυτή η διαδικασία ονομάζεται συνένωση (concatenation). Για να συνδυάσετε δύο ή περισσότερες συμβολοσειρές, ή να τις ενώσετε μαζί, χρησιμοποιήστε τον τελεστή +. Βήμα προς βήμα, να τι συμβαίνει: - Συνδυάζει πολλαπλές συμβολοσειρές χρησιμοποιώντας τον τελεστή + - Ενώνει τις συμβολοσειρές απευθείας χωρίς κενά στο πρώτο παράδειγμα - Προσθέτει χαρακτήρες κενών " " μεταξύ συμβολοσειρών για ευαναγνωσιμότητα - Εισάγει σημεία στίξης όπως κόμματα για σωστή μορφοποίηση ✅ Γιατί το 1 + 1 = 2 στη JavaScript, αλλά '1' + '1' = 11; Σκέψου το. Τι γίνεται με το '1' + 1; Τα template literals είναι ένας άλλος τρόπος μορφοποίησης συμβολοσειρών, εκτός από τα εισαγωγικά χρησιμοποιείται το backtick. Οτιδήποτε δεν είναι απλό κείμενο πρέπει να τοποθετείται μέσα σε δείκτες ${ }. Αυτό περιλαμβάνει και μεταβλητές που μπορεί να είναι συμβολοσειρές. Ας κατανοήσουμε κάθε μέρος: - Χρησιμοποιεί backticks ` `` αντί για κανονικά εισαγωγικά για τη δημιουργία template literals - Ενσωματώνει μεταβλητές απευθείας χρησιμοποιώντας τη σύνταξη ${} - Διατηρεί ακριβώς τα κενά και τη μορφοποίηση όπως έχουν γραφτεί - Παρέχει έναν πιο καθαρό τρόπο δημιουργίας σύνθετων συμβολοσειρών με μεταβλητές Μπορείτε να πετύχετε τους στόχους μορφοποίησής σας με οποιαδήποτε μέθοδο, αλλά τα template literals σέβονται οποιαδήποτε κενά και αλλαγές γραμμών. ✅ Πότε θα χρησιμοποιούσατε ένα template literal αντί για μια απλή συμβολοσειρά; ### 🔤 Έλεγχος Επάρκειας Συμβολοσειρών: Αυτοπεποίθηση στην Επεξεργασία Κειμένου Αξιολογήστε τις δεξιότητές σας στις συμβολοσειρές: - Μπορείτε να εξηγήσετε γιατί '1' + '1' ισούται με '11' αντί για 2; - Ποια μέθοδο συμβολοσειράς βρίσκετε πιο κατανοητή: η συγκόλληση ή τα template literals; - Τι συμβαίνει αν ξεχάσετε τα εισαγωγικά γύρω από μια συμβολοσειρά; ### Booleans Οι Booleans αντιπροσωπεύουν την απλούστερη μορφή δεδομένων: μπορούν να έχουν μόνο δύο τιμές – true ή false. Αυτό το δυαδικό σύστημα λογικής προέρχεται από το έργο του George Boole, μαθηματικού του 19ου αιώνα που ανέπτυξε τη Boolean άλγεβρα. Παρά την απλότητά τους, οι boolean είναι απαραίτητοι για τη λογική προγράμματος. Δίνουν στον κώδικά σας τη δυνατότητα να παίρνει αποφάσεις βάσει συνθηκών – αν ένας χρήστης έχει συνδεθεί, αν πατήθηκε ένα κουμπί, ή αν πληρούνται ορισμένα κριτήρια. Οι Booleans μπορούν να έχουν μόνο δύο τιμές: true ή false. Μπορούν να βοηθήσουν στο να γίνονται αποφάσεις για το ποιοι κώδικες πρέπει να εκτελεστούν όταν πληρούνται συγκεκριμένες συνθήκες. Σε πολλές περιπτώσεις, οι τελεστές βοηθούν στον καθορισμό της τιμής ενός Boolean και συχνά θα παρατηρήσετε ή θα γράψετε μεταβλητές να αρχικοποιούνται ή να ενημερώνουν τις τιμές τους με έναν τελεστή. Στο παραπάνω, έχουμε: - Δημιουργήσει μια μεταβλητή που αποθηκεύει την Boolean τιμή true - Επιδείξει πώς να αποθηκεύσουμε την Boolean τιμή false - Χρησιμοποιήσει τις ακριβείς λέξεις-κλειδιά true και false (χωρίς εισαγωγικά) - Προετοιμάσει αυτές τις μεταβλητές για χρήση σε συνθήκες ✅ Μια μεταβλητή θεωρείται 'truthy' αν αξιολογηθεί ως boolean true. Είναι ενδιαφέρον ότι στη JavaScript όλες οι τιμές είναι truthy εκτός αν οριστούν ως falsy. ### 🎯 Έλεγχος Λογικής Booleans: Δεξιότητες Λήψης Αποφάσεων Δοκιμάστε την κατανόησή σας στα booleans: - Γιατί νομίζετε ότι η JavaScript έχει "truthy" και "falsy" τιμές πέρα από το απλό true και false; - Μπορείτε να προβλέψετε ποια από τις παρακάτω είναι falsy: 0, "0", [], "false"; - Πώς μπορεί να βοηθήσουν οι booleans στον έλεγχο ροής προγράμματος; --- ## 📊 Σύνοψη Εργαλειοθήκης Τύπων Δεδομένων ## Πρόκληση GitHub Copilot Agent 🚀 Χρησιμοποιήστε τη λειτουργία Agent για να ολοκληρώσετε την παρακάτω πρόκληση: Περιγραφή: Δημιουργήστε έναν διαχειριστή προσωπικών πληροφοριών που να επιδεικνύει όλους τους τύπους δεδομένων της JavaScript που μάθατε σε αυτό το μάθημα, διαχειριζόμενος πραγματικά σενάρια δεδομένων. Οδηγία: Δημιουργήστε ένα πρόγραμμα JavaScript που δημιουργεί ένα αντικείμενο προφίλ χρήστη που περιέχει: το όνομα του ατόμου (συμβολοσειρά), ηλικία (αριθμός), κατάσταση φοιτητή (boolean), αγαπημένα χρώματα ως πίνακα, και ένα αντικείμενο διεύθυνσης με ιδιότητες δρόμο, πόλη και ταχυδρομικό κώδικα. Συμπεριλάβετε συναρτήσεις εμφάνισης των πληροφοριών προφίλ και ενημέρωσης ξεχωριστών πεδίων. Βεβαιωθείτε ότι επιδεικνύετε συγκόλληση συμβολοσειρών, template literals, αριθμητικές πράξεις με την ηλικία, και λογική boolean για την κατάσταση φοιτητή. Μάθετε περισσότερα για τη λειτουργία agent εδώ. ## 🚀 Πρόκληση Η JavaScript έχει ορισμένες συμπεριφορές που μπορούν να εκπλήξουν τους προγραμματιστές. Εδώ είναι ένα κλασικό παράδειγμα για διερεύνηση: δοκιμάστε να γράψετε στην κονσόλα του browser: let age = 1; let Age = 2; age == Age και παρατηρήστε το αποτέλεσμα. Επιστρέφει false – μπορείτε να προσδιορίσετε γιατί; Αυτή είναι μία από τις πολλές συμπεριφορές της JavaScript που αξίζει να κατανοήσετε. Η γνώση αυτών των ιδιαιτεροτήτων θα σας βοηθήσει να γράφετε πιο αξιόπιστο κώδικα και να εντοπίζετε σφάλματα πιο αποτελεσματικά. ## Τεστ Μετά το Μάθημα Τεστ μετά το μάθημα ## Ανασκόπηση & Αυτοεκπαίδευση Δείτε αυτήν τη λίστα με ασκήσεις JavaScript και δοκιμάστε μία. Τι μάθατε; ## Εργασία Εξάσκηση Τύπων Δεδομένων ## 🚀 Χρονοδιάγραμμα Επάρκειας Τύπων Δεδομένων JavaScript ### ⚡ Τι Μπορείτε να Κάνετε στα Επόμενα 5 Λεπτά - [ ] Ανοίξτε την κονσόλα του browser και δημιουργήστε 3 μεταβλητές με διαφορετικούς τύπους δεδομένων - [ ] Δοκιμάστε την πρόκληση: let age = 1; let Age = 2; age == Age και βρείτε γιατί είναι ψευδής - [ ] Πρακτική στη συγκόλληση συμβολοσειρών με το όνομά σας και αγαπημένο αριθμό - [ ] Δοκιμάστε τι συμβαίνει όταν προσθέτετε έναν αριθμό σε μια συμβολοσειρά ### 🎯 Τι Μπορείτε να Πετύχετε Αυτήν την Ώρα - [ ] Ολοκληρώστε το τεστ με τις ερωτήσεις μετά το μάθημα και ανασκοπήστε όποια συγκεχυμένα θέματα - [ ] Δημιουργήστε έναν μίνι υπολογιστή που προσθέτει, αφαιρεί, πολλαπλασιάζει και διαιρεί δύο αριθμούς - [ ] Φτιάξτε έναν απλό μορφοποιητή ονόματος χρησιμοποιώντας template literals - [ ] Εξερευνήστε τις διαφορές μεταξύ τελεστών σύγκρισης == και === - [ ] Πρακτική στη μετατροπή μεταξύ διαφορετικών τύπων δεδομένων ### 📅 Η Εβδομάδα σας με Βάση τη JavaScript - [ ] Ολοκληρώστε την εργασία με αυτοπεποίθηση και δημιουργικότητα - [ ] Δημιουργήστε ένα αντικείμενο προσωπικού προφίλ χρησιμοποιώντας όλους τους τύπους δεδομένων που μάθατε - [ ] Πρακτική με ασκήσεις JavaScript από το CSS-Tricks - [ ] Φτιάξτε έναν απλό έλεγχο εγκυρότητας φόρμας χρησιμοποιώντας λογική boolean - [ ] Πειραματιστείτε με τύπους δεδομένων πίνακα και αντικειμένου (προεπισκόπηση των επόμενων μαθημάτων) - [ ] Ενταχθείτε σε μια κοινότητα JavaScript και ρωτήστε ερωτήσεις σχετικά με τύπους δεδομένων ### 🌟 Η Μεταμόρφωσή σας μέσα σε Ένα Μήνα - [ ] Ενσωματώστε τις γνώσεις τύπων δεδομένων σε μεγαλύτερα προγραμματιστικά έργα - [ ] Κατανοήστε πότε και γιατί να χρησιμοποιείτε κάθε τύπο δεδομένων σε πραγματικές εφαρμογές - [ ] Βοηθήστε άλλους αρχάριους να καταλάβουν τα θεμελιώδη της JavaScript - [ ] Δημιουργήστε μια μικρή εφαρμογή που διαχειρίζεται διαφορετικούς τύπους δεδομένων χρήστη - [ ] Εξερευνήστε προχωρημένες έννοιες τύπων δεδομένων όπως μετατροπή τύπων και αυστηρή ισότητα - [ ] Συνεισφέρετε σε έργα ανοιχτού κώδικα JavaScript με βελτιώσεις στην τεκμηρίωση ### 🧠 Τελικός Έλεγχος Επάρκειας Τύπων Δεδομένων Γιορτάστε τα θεμέλια της JavaScript: - Ποιος τύπος δεδομένων σας εξέπληξε περισσότερο όσον αφορά τη συμπεριφορά του; - Πόσο άνετα νιώθετε να εξηγείτε μεταβλητές έναντι σταθερών σε έναν φίλο; - Ποιο είναι το πιο ενδιαφέρον πράγμα που ανακαλύψατε για το σύστημα τύπων της JavaScript; - Ποια πραγματική εφαρμογή μπορείτε να φανταστείτε να δημιουργείτε με αυτά τα θεμελιώδη; --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Αποποίηση ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης με τεχνητή νοημοσύνη Co-op Translator. Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται η επαγγελματική μετάφραση από ανθρώπινο μεταφραστή. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρεξηγήσεις ή λανθασμένες ερμηνείες προκύψουν από τη χρήση αυτής της μετάφρασης. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Μέθοδοι και Συναρτήσεις

## Προ-Διάλεξη Κουίζ Προ-διάλεξη κουίζ Η επανάληψη του ίδιου κώδικα ξανά και ξανά είναι μία από τις πιο συχνές απογοητεύσεις στον προγραμματισμό. Οι συναρτήσεις λύουν αυτό το πρόβλημα επιτρέποντάς σας να πακετάρετε τον κώδικα σε επαναχρησιμοποιούμενες μονάδες. Σκεφτείτε τις συναρτήσεις σαν τα τυποποιημένα μέρη που έκαναν τη γραμμή συναρμολόγησης του Henry Ford επαναστατική – μόλις δημιουργήσετε ένα αξιόπιστο συστατικό, μπορείτε να το χρησιμοποιήσετε όπου χρειάζεται χωρίς να το ξαναδημιουργήσετε από την αρχή. Οι συναρτήσεις σας επιτρέπουν να δένετε κομμάτια κώδικα ώστε να μπορείτε να τα χρησιμοποιείτε ξανά και ξανά σε όλο το πρόγραμμα σας. Αντί να αντιγράφετε και να επικολλάτε την ίδια λογική παντού, μπορείτε να δημιουργήσετε μια συνάρτηση μία φορά και να την καλείτε όποτε χρειάζεται. Αυτή η προσέγγιση κρατάει τον κώδικά σας οργανωμένο και κάνει τις ενημερώσεις πολύ πιο εύκολες. Σε αυτό το μάθημα, θα μάθετε πώς να δημιουργείτε τις δικές σας συναρτήσεις, να περνάτε πληροφορίες σε αυτές και να παίρνετε χρήσιμα αποτελέσματα πίσω. Θα ανακαλύψετε τη διαφορά μεταξύ συναρτήσεων και μεθόδων, θα μάθετε σύγχρονες συντακτικές προσεγγίσεις, και θα δείτε πώς οι συναρτήσεις μπορούν να λειτουργούν με άλλες συναρτήσεις. Θα χτίσουμε αυτές τις έννοιες βήμα προς βήμα. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Συναρτήσεις Μια συνάρτηση είναι ένα αυτόνομο μπλοκ κώδικα που εκτελεί μια συγκεκριμένη εργασία. Περιλαμβάνει λογική που μπορείτε να εκτελέσετε όποτε χρειάζεται. Αντί να γράφετε τον ίδιο κώδικα πολλές φορές σε όλο το πρόγραμμα σας, μπορείτε να τον πακετάρετε σε μια συνάρτηση και να την καλείτε όποτε τη χρειάζεστε. Αυτή η προσέγγιση κρατάει τον κώδικά σας καθαρό και κάνει τις ενημερώσεις πιο εύκολες. Σκεφτείτε την πρόκληση συντήρησης αν έπρεπε να αλλάξετε λογική που εκτείνεται σε 20 διαφορετικές θέσεις στη βάση κώδικά σας. Η ονομασία των συναρτήσεών σας με περιγραφικό τρόπο είναι κρίσιμη. Μια καλοορισμένη συνάρτηση επικοινωνεί καθαρά τον σκοπό της – όταν βλέπετε cancelTimer(), καταλαβαίνετε αμέσως τι κάνει, ακριβώς όπως ένα κουμπί με ξεκάθαρη ετικέτα σας δείχνει τι ακριβώς θα συμβεί όταν το πατήσετε. ## Δημιουργία και κλήση μιας συνάρτησης Ας εξετάσουμε πώς να δημιουργήσουμε μια συνάρτηση. Η σύνταξη ακολουθεί ένα σταθερό μοτίβο: Αναλύοντας: - Η λέξη-κλειδί function λέει στη JavaScript "Ε, δημιουργώ μια συνάρτηση!" - Το nameOfFunction είναι όπου δίνετε στη συνάρτηση σας ένα περιγραφικό όνομα - Οι παρενθέσεις () είναι εκεί όπου μπορείτε να προσθέσετε παραμέτρους (θα φτάσουμε σε αυτό σύντομα) - Οι αγκύλες {} περιέχουν τον κώδικα που εκτελείται όταν καλείτε τη συνάρτηση Ας δημιουργήσουμε μια απλή συνάρτηση χαιρετισμού για να το δούμε στην πράξη: Αυτή η συνάρτηση τυπώνει "Hello, world!" στην κονσόλα. Μόλις την ορίσετε, μπορείτε να τη χρησιμοποιήσετε όσες φορές χρειάζεται. Για να εκτελέσετε (ή να "καλέσετε") τη συνάρτηση σας, γράψτε το όνομά της ακολουθούμενο από παρενθέσεις. Η JavaScript επιτρέπει να ορίσετε τη συνάρτηση πριν ή μετά την κλήση της – η μηχανή της JavaScript θα χειριστεί τη σειρά εκτέλεσης. Όταν τρέχετε αυτή τη γραμμή, εκτελεί όλο τον κώδικα μέσα στη συνάρτηση displayGreeting, εμφανίζοντας "Hello, world!" στην κονσόλα του browser σας. Μπορείτε να καλέσετε αυτή τη συνάρτηση επανειλημμένα. ### 🧠 Έλεγχος Βασικών Συναρτήσεων: Δημιουργία Πρώτων Συναρτήσεων Ας δούμε πώς νιώθετε σχετικά με τις βασικές συναρτήσεις: - Μπορείτε να εξηγήσετε γιατί χρησιμοποιούμε αγκύλες {} στον ορισμό συναρτήσεων; - Τι συμβαίνει αν γράψετε displayGreeting χωρίς τις παρενθέσεις; - Γιατί μπορεί να θέλετε να καλέσετε την ίδια συνάρτηση πολλές φορές; ### Καλές πρακτικές για συναρτήσεις Εδώ είναι μερικές συμβουλές για να γράφετε καλές συναρτήσεις: - Δώστε στις συναρτήσεις σας σαφή, περιγραφικά ονόματα – το μελλοντικό σας εγώ θα σας ευχαριστεί! - Χρησιμοποιήστε camelCase για ονόματα πολλών λέξεων (π.χ., calculateTotal αντί για calculate_total) - Κρατήστε κάθε συνάρτηση εστιασμένη στο να κάνει καλά ένα πράγμα ## Περνώντας πληροφορίες σε μια συνάρτηση Η συνάρτηση displayGreeting μας είναι περιορισμένη – μπορεί μόνο να εμφανίζει "Hello, world!" για όλους. Οι παράμετροι μας επιτρέπουν να κάνουμε τις συναρτήσεις πιο ευέλικτες και χρήσιμες. Οι παράμετροι λειτουργούν σαν θέσεις όπου μπορείτε να εισάγετε διαφορετικές τιμές κάθε φορά που χρησιμοποιείτε τη συνάρτηση. Έτσι, η ίδια συνάρτηση μπορεί να δουλεύει με διαφορετικές πληροφορίες σε κάθε κλήση. Καταχωρείτε τις παραμέτρους μέσα στις παρενθέσεις όταν ορίζετε τη συνάρτηση, χωρίζοντας πολλαπλές παραμέτρους με κόμμα: Κάθε παράμετρος λειτουργεί σαν θέση – όταν κάποιος καλεί τη συνάρτησή σας, παρέχει πραγματικές τιμές που τοποθετούνται σε αυτές τις θέσεις. Ας ενημερώσουμε τη συνάρτηση χαιρετισμού ώστε να δέχεται ένα όνομα: Παρατηρήστε πώς χρησιμοποιούμε το χαρακτήρα backticks (` `) και ${}` για να εισάγουμε το όνομα κατευθείαν στο μήνυμα – αυτό ονομάζεται πρότυπο συμβολοσειράς (template literal) και είναι πολύ βολικός τρόπος να δημιουργείτε συμβολοσειρές με μεταβλητές ενωμένες. Τώρα όταν καλούμε τη συνάρτηση, μπορούμε να περάσουμε οποιοδήποτε όνομα: Η JavaScript παίρνει τη συμβολοσειρά 'Christopher', την αναθέτει στην παράμετρο name, και δημιουργεί το προσωποποιημένο μήνυμα "Hello, Christopher!" ## Προεπιλεγμένες τιμές Τι γίνεται αν θέλουμε μερικές παραμέτρους να είναι προαιρετικές; Εκεί έρχονται οι προεπιλεγμένες τιμές! Ας πούμε ότι θέλουμε οι χρήστες να μπορούν να προσαρμόζουν τον χαιρετισμό, αλλά αν δεν καθορίσουν κάποιο, θα χρησιμοποιούμε το "Hello" ως εναλλακτική λύση. Μπορείτε να ορίσετε προεπιλεγμένες τιμές με το σύμβολο ισότητας, ακριβώς όπως καθορίζετε μια μεταβλητή: Εδώ, το name είναι ακόμα απαιτούμενο, αλλά το salutation έχει εφεδρική τιμή 'Hello' αν κανείς δεν δώσει διαφορετικό χαιρετισμό. Τώρα μπορούμε να καλέσουμε τη συνάρτηση με δύο τρόπους: Στην πρώτη κλήση, η JavaScript χρησιμοποιεί το προεπιλεγμένο "Hello" αφού δεν καθορίσαμε χαιρετισμό. Στη δεύτερη κλήση, χρησιμοποιεί το δικό μας "Hi" αντί γι’ αυτό. Αυτή η ευελιξία κάνει τις συναρτήσεις προσαρμόσιμες σε διαφορετικά σενάρια. ### 🎛️ Έλεγχος Παραμέτρων: Κάνοντας τις Συναρτήσεις Ευέλικτες Δοκιμάστε την κατανόηση σας για τις παραμέτρους: - Ποια είναι η διαφορά μεταξύ παραμέτρου και ορίσματος; - Γιατί οι προεπιλεγμένες τιμές είναι χρήσιμες στον πραγματικό προγραμματισμό; - Μπορείτε να προβλέψετε τι συμβαίνει αν δώσετε περισσότερα ορίσματα από παραμέτρους; ## Τιμές επιστροφής Μέχρι τώρα οι συναρτήσεις μας απλώς τύπωναν μηνύματα στην κονσόλα, αλλά τι γίνεται αν θέλετε μια συνάρτηση να υπολογίζει κάτι και να σας επιστρέφει το αποτέλεσμα; Εκεί έρχονται οι τιμές επιστροφής. Αντί να εμφανίζει κάτι απλά, μια συνάρτηση μπορεί να σας δώσει πίσω μια τιμή που μπορείτε να αποθηκεύσετε σε μια μεταβλητή ή να χρησιμοποιήσετε σε άλλα μέρη του κώδικα. Για να επιστρέψετε μια τιμή, χρησιμοποιείτε τη λέξη-κλειδί return, ακολουθούμενη από ό,τι θέλετε να επιστρέψετε: Να κάτι σημαντικό: όταν μια συνάρτηση φτάσει σε μια δήλωση return, σταματά άμεσα την εκτέλεση και στέλνει αυτή την τιμή πίσω σε όποιον την κάλεσε. Ας τροποποιήσουμε τη συνάρτηση χαιρετισμού ώστε να επιστρέφει το μήνυμα αντί να το τυπώνει: Τώρα αντί να εκτυπώνει τον χαιρετισμό, αυτή η συνάρτηση δημιουργεί το μήνυμα και το επιστρέφει σε εμάς. Για να χρησιμοποιήσουμε την επιστρεφόμενη τιμή, μπορούμε να την αποθηκεύσουμε σε μια μεταβλητή όπως οποιαδήποτε άλλη τιμή: Τώρα η greetingMessage περιέχει το "Hello, Christopher" και μπορούμε να το χρησιμοποιήσουμε οπουδήποτε στον κώδικα – για να το εμφανίσουμε σε μια ιστοσελίδα, να το συμπεριλάβουμε σε ένα email ή να το περάσουμε σε άλλη συνάρτηση. ### 🔄 Έλεγχος Τιμών Επιστροφής: Λαμβάνοντας Αποτελέσματα Αξιολογήστε την κατανόηση σας στις τιμές επιστροφής: - Τι συμβαίνει στον κώδικα μετά από μια δήλωση return σε μια συνάρτηση; - Γιατί η επιστροφή τιμών συχνά είναι καλύτερη από το απλό τύπωμα στην κονσόλα; - Μπορεί μια συνάρτηση να επιστρέφει διαφορετικούς τύπους τιμών (συμβολοσειρά, αριθμό, boolean); ## Συναρτήσεις ως παράμετροι σε συναρτήσεις Μπορείτε να περάσετε συναρτήσεις ως παραμέτρους σε άλλες συναρτήσεις. Αν και αυτή η ιδέα μπορεί αρχικά να φαίνεται περίπλοκη, είναι μια ισχυρή δυνατότητα που επιτρέπει ευέλικτα προγραμματιστικά πρότυπα. Αυτή η μορφή είναι πολύ συνήθης όταν θέλετε να πείτε "όταν κάτι συμβεί, κάνε αυτό το άλλο πράγμα". Για παράδειγμα, "όταν τελειώσει ο χρονοδιακόπτης, εκτέλεσε αυτόν τον κώδικα" ή "όταν ο χρήστης πατήσει το κουμπί, κάλεσε αυτή τη συνάρτηση." Ας δούμε το setTimeout, μια ενσωματωμένη συνάρτηση που περιμένει ένα χρονικό διάστημα και στη συνέχεια εκτελεί έναν κώδικα. Πρέπει να της πούμε ποιον κώδικα να τρέξει – τέλειο παράδειγμα για να περάσουμε μια συνάρτηση! Δοκιμάστε αυτόν τον κώδικα – μετά από 3 δευτερόλεπτα, θα δείτε ένα μήνυμα: Παρατηρήστε πως περνάμε τη displayDone (χωρίς παρενθέσεις) στο setTimeout. Δεν καλούμε εμείς τη συνάρτηση – την παραδίδουμε στο setTimeout και του λέμε "κάνε κλήση σε 3 δευτερόλεπτα." ### Ανώνυμες συναρτήσεις Μερικές φορές χρειάζεστε μια συνάρτηση για ένα και μόνο πράγμα και δεν θέλετε να της δώσετε όνομα. Σκεφτείτε το – αν χρησιμοποιείτε μια συνάρτηση μόνο μία φορά, γιατί να γεμίσετε τον κώδικά σας με ένα επιπλέον όνομα; Η JavaScript σας επιτρέπει να δημιουργήσετε ανώνυμες συναρτήσεις – συναρτήσεις χωρίς όνομα που μπορείτε να ορίσετε ακριβώς εκεί που τις χρειάζεστε. Ας ξαναγράψουμε το παράδειγμα με το χρονόμετρο χρησιμοποιώντας ανώνυμη συνάρτηση: Αυτό πετυχαίνει το ίδιο αποτέλεσμα, αλλά η συνάρτηση ορίζεται απευθείας μέσα στην κλήση του setTimeout, εξαλείφοντας την ανάγκη για ξεχωριστή δήλωση συνάρτησης. ### Συναρτήσεις βέλους (arrow functions) Η σύγχρονη JavaScript έχει έναν ακόμη πιο σύντομο τρόπο να γράφετε συναρτήσεις που ονομάζονται συναρτήσεις βέλους. Χρησιμοποιούν το => (που μοιάζει με βέλος – καταλαβαίνετε;) και είναι πολύ δημοφιλείς στους προγραμματιστές. Οι συναρτήσεις βέλους σας επιτρέπουν να παραλείψετε τη λέξη-κλειδί function και να γράψετε πιο συμπαγή κώδικα. Εδώ είναι το παράδειγμά μας με το χρονόμετρο χρησιμοποιώντας συνάρτηση βέλους: Οι () είναι το σημείο όπου θα πήγαιναν οι παράμετροι (άδειο σε αυτή την περίπτωση), ακολουθεί το βέλος =>, και τέλος το σώμα της συνάρτησης μέσα σε αγκύλες. Αυτό παρέχει την ίδια λειτουργικότητα με πιο συνοπτική σύνταξη. ### Πότε να χρησιμοποιείτε κάθε στρατηγική Πότε πρέπει να χρησιμοποιείτε κάθε προσέγγιση; Μια πρακτική οδηγία: αν πρόκειται να χρησιμοποιήσετε τη συνάρτηση πολλές φορές, δώστε της όνομα και ορίστε την ξεχωριστά. Αν είναι για μια συγκεκριμένη χρήση, σκεφτείτε ανώνυμη συνάρτηση. Και οι δύο – οι συναρτήσεις βέλους και η παραδοσιακή σύνταξη – είναι έγκυρες επιλογές, αν και οι συναρτήσεις βέλους είναι διαδεδομένες σε σύγχρονα codebases JavaScript. ### 🎨 Έλεγχος Στυλ Συναρτήσεων: Επιλογή της Κατάλληλης Σύνταξης Εξετάστε την κατανόηση σας στη σύνταξη: - Πότε μπορεί να προτιμάτε τις συναρτήσεις βέλους έναντι της παραδοσιακής σύνταξης; - Ποιο είναι το βασικό πλεονέκτημα των ανώνυμων συναρτήσεων; - Μπορείτε να σκεφτείτε μια κατάσταση όπου μια ονοματισμένη συνάρτηση είναι καλύτερη από μια ανώνυμη; --- ## 🚀 Πρόκληση Μπορείτε να αποτυπώσετε με μια πρόταση τη διαφορά μεταξύ συναρτήσεων και μεθόδων; Δοκιμάστε το! ## Πρόκληση GitHub Copilot Agent 🚀 Χρησιμοποιήστε τη λειτουργία Agent για ολοκλήρωση της παρακάτω πρόκλησης: Περιγραφή: Δημιουργήστε μια βιβλιοθήκη βοηθητικών μαθηματικών συναρτήσεων που να δείχνει διάφορες έννοιες συναρτήσεων που καλύφθηκαν σε αυτό το μάθημα, συμπεριλαμβανομένων των παραμέτρων, προεπιλεγμένων τιμών, τιμών επιστροφής και συναρτήσεων βέλους. Πρόταση: Δημιουργήστε ένα αρχείο JavaScript με όνομα mathUtils.js που περιέχει τις ακόλουθες συναρτήσεις: 1. Μια συνάρτηση add που παίρνει δύο παραμέτρους και επιστρέφει το άθροισμά τους 2. Μια συνάρτηση multiply με προεπιλεγμένες παραμέτρους (δεύτερη παράμετρος με προεπιλογή την 1) 3. Μια συνάρτηση βέλους square που παίρνει έναν αριθμό και επιστρέφει το τετράγωνό του 4. Μια συνάρτηση calculate που δέχεται μια άλλη συνάρτηση ως παράμετρο και δύο αριθμούς, και εφαρμόζει τη συνάρτηση σε αυτούς τους αριθμούς 5. Επιδείξτε κλήσεις κάθε συνάρτησης με κατάλληλες δοκιμαστικές περιπτώσεις Μάθετε περισσότερα για τη λειτουργία agent εδώ. ## Μετά-Διάλεξη Κουίζ Μετά-διάλεξη κουίζ ## Ανασκόπηση & Αυτο-Μελέτη Αξίζει να διαβάσετε λίγο παραπάνω για τις συναρτήσεις βέλους, καθώς χρησιμοποιούνται όλο και περισσότερο στα codebases. Πρακτική στη σύνταξη μιας συνάρτησης και στη συνέχεια ξαναγράψτε την χρησιμοποιώντας αυτή τη σύνταξη. ## Εργασία Διασκέδαση με Συναρτήσεις --- ## 🧰 Περίληψη Εργαλείων για τις JavaScript Συναρτήσεις σας --- ## 🚀 Χρονοδιάγραμμα Εξοικείωσής σας με τις Συναρτήσεις JavaScript ### ⚡ Τι μπορείτε να κάνετε στα επόμενα 5 λεπτά - [ ] Γράψτε μια απλή συνάρτηση που επιστρέφει τον αγαπημένο σας αριθμό - [ ] Δημιουργήστε μια συνάρτηση με δύο παραμέτρους που τις προσθέτει μαζί - [ ] Δοκίμασε να μετατρέψεις μια παραδοσιακή συνάρτηση σε σύνταξη arrow function - [ ] Πρακτική στην πρόκληση: εξήγησε τη διαφορά μεταξύ συναρτήσεων και μεθόδων ### 🎯 Τι Μπορείς να Πετύχεις αυτή την Ώρα - [ ] Ολοκλήρωσε το κουίζ μετά το μάθημα και ανασκόπησε οποιεσδήποτε συγκεχυμένες έννοιες - [ ] Δημιούργησε τη βιβλιοθήκη μαθηματικών βοηθητικών από την πρόκληση GitHub Copilot - [ ] Δημιούργησε μια συνάρτηση που χρησιμοποιεί άλλη συνάρτηση ως παράμετρο - [ ] Πρακτική στη συγγραφή συναρτήσεων με προεπιλεγμένες παραμέτρους - [ ] Πειραματίσου με template literals στις τιμές επιστροφής των συναρτήσεων ### 📅 Η Εβδομάδα σου για Κυριαρχία στις Συναρτήσεις - [ ] Ολοκλήρωσε την εργασία "Διασκέδαση με Συναρτήσεις" με δημιουργικότητα - [ ] Αναδιάρθρωσε κομμάτια επαναλαμβανόμενου κώδικα που έχεις γράψει σε επαναχρησιμοποιήσιμες συναρτήσεις - [ ] Δημιούργησε έναν μικρό υπολογιστή χρησιμοποιώντας μόνο συναρτήσεις (χωρίς παγκόσμιες μεταβλητές) - [ ] Πρακτική στις arrow functions με μεθόδους πίνακα όπως map() και filter() - [ ] Δημιούργησε μια συλλογή βοηθητικών συναρτήσεων για κοινές εργασίες - [ ] Μελέτησε συναρτήσεις υψηλότερης τάξης και έννοιες λειτουργικού προγραμματισμού ### 🌟 Η Μεταμόρφωσή σου Μέσα στον Μήνα - [ ] Κατάκτησε προχωρημένες έννοιες συναρτήσεων όπως οι κλεισίματα και το scope - [ ] Δημιούργησε ένα έργο που χρησιμοποιεί έντονα τη σύνθεση συναρτήσεων - [ ] Συνεισέφερε σε open source βελτιώνοντας την τεκμηρίωση συναρτήσεων - [ ] Δίδαξε κάποιον άλλον για τις συναρτήσεις και τις διαφορετικές συντακτικές μορφές - [ ] Εξέρευνησε παραδείγματα λειτουργικού προγραμματισμού σε JavaScript - [ ] Δημιούργησε μια προσωπική βιβλιοθήκη επαναχρησιμοποιήσιμων συναρτήσεων για μελλοντικά έργα ### 🏆 Τελικός Έλεγχος Πρωταθλητή Συναρτήσεων Γιόρτασε την κυριαρχία σου στις συναρτήσεις: - Ποια είναι η πιο χρήσιμη συνάρτηση που έχεις δημιουργήσει μέχρι τώρα; - Πώς έχει αλλάξει ο τρόπος που σκέφτεσαι για την οργάνωση του κώδικα η εκμάθηση για τις συναρτήσεις; - Ποια σύνταξη συναρτήσεων προτιμάς και γιατί; - Ποιο πραγματικό πρόβλημα θα έλυνες γράφοντας μια συνάρτηση; --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Αποποίηση Ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να έχετε υπόψη πως οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται ως η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρεξηγήσεις ή λανθασμένες ερμηνείες προκύψουν από τη χρήση αυτής της μετάφρασης. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Βασικά JavaScript: Λήψη Αποφάσεων

Έχετε αναρωτηθεί πώς οι εφαρμογές παίρνουν έξυπνες αποφάσεις; Όπως πώς ένα σύστημα πλοήγησης επιλέγει τη γρηγορότερη διαδρομή, ή πώς ένας θερμοστάτης αποφασίζει πότε να ανάψει τη θέρμανση; Αυτή είναι η βασική έννοια της λήψης αποφάσεων στον προγραμματισμό. Όπως η Αναλυτική Μηχανή του Charles Babbage σχεδιάστηκε να ακολουθεί διαφορετικές ακολουθίες λειτουργιών βάσει συνθηκών, έτσι και τα σύγχρονα προγράμματα JavaScript πρέπει να παίρνουν επιλογές βάσει μεταβαλλόμενων περιστάσεων. Αυτή η ικανότητα να διακλαδίζονται και να παίρνουν αποφάσεις είναι που μετατρέπει τον στατικό κώδικα σε ευέλικτες, έξυπνες εφαρμογές. Σε αυτό το μάθημα, θα μάθετε πώς να υλοποιείτε λογική υπό συνθήκες στα προγράμματά σας. Θα εξερευνήσουμε τις συνθήκες, τους τελεστές σύγκρισης και τις λογικές εκφράσεις που επιτρέπουν στον κώδικά σας να αξιολογεί καταστάσεις και να αντιδρά κατάλληλα. ## Πρότυπο Quiz πριν το Μάθημα Πρότυπο quiz πριν το μάθημα Η ικανότητα να παίρνεις αποφάσεις και να ελέγχεις τη ροή του προγράμματος είναι ένα θεμελιώδες στοιχείο του προγραμματισμού. Αυτή η ενότητα καλύπτει πώς να ελέγχεις τη διαδρομή εκτέλεσης των προγραμμάτων JavaScript χρησιμοποιώντας λογικές τιμές και λογική υπό συνθήκη. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Μια Σύντομη Επανεξέταση των Booleans Πριν εξερευνήσουμε τη λήψη αποφάσεων, ας επανεξετάσουμε τις λογικές τιμές από το προηγούμενο μάθημά μας. Ονομάζονται από τον μαθηματικό George Boole και αυτές οι τιμές αντιπροσωπεύουν δυαδικές καταστάσεις - είτε true είτε false. Δεν υπάρχει ασάφεια, ούτε ενδιάμεση κατάσταση. Αυτές οι δυαδικές τιμές αποτελούν τη βάση όλων των υπολογιστικών λογικών. Κάθε απόφαση που παίρνει το πρόγραμμα σας τελικά καταλήγει σε αξιολόγηση Boolean. Η δημιουργία Boolean μεταβλητών είναι απλή: Αυτό δημιουργεί δύο μεταβλητές με ρητές λογικές τιμές. ✅ Τα Booleans πήραν το όνομά τους από τον Άγγλο μαθηματικό, φιλόσοφο και λογικό George Boole (1815–1864). ## Τελεστές Σύγκρισης και Booleans Στην πράξη, σπάνια θα ορίσετε χειροκίνητα τιμές Boolean. Αντίθετα, θα τις παράγετε αξιολογώντας συνθήκες: "Είναι αυτός ο αριθμός μεγαλύτερος από εκείνον;" ή "Είναι αυτές οι τιμές ίσες;" Οι τελεστές σύγκρισης επιτρέπουν αυτές τις αξιολογήσεις. Συγκρίνουν τιμές και επιστρέφουν λογικά αποτελέσματα με βάση τη σχέση μεταξύ των τελεστέων. ✅ Ελέγξτε τις γνώσεις σας γράφοντας μερικές συγκρίσεις στην κονσόλα του προγράμματος περιήγησής σας. Σας εκπλήσσει κάποιο από τα επιστρεφόμενα δεδομένα; ### 🧠 Έλεγχος Επάρκειας στη Σύγκριση: Κατανόηση της Λογικής Boolean Δοκιμάστε την κατανόησή σας στις συγκρίσεις: - Γιατί νομίζετε ότι το === (αυστηρή ισότητα) προτιμάται γενικά από το == (χαλαρή ισότητα); - Μπορείτε να προβλέψετε τι επιστρέφει το 5 === '5'; Τι γίνεται με το 5 == '5'; - Ποια είναι η διαφορά μεταξύ !== και !=; ## Δήλωση If Η δήλωση if είναι σαν να κάνετε μια ερώτηση στον κώδικά σας. "Αν αυτή η συνθήκη είναι αληθής, τότε κάνε αυτό το πράγμα." Είναι πιθανώς το πιο σημαντικό εργαλείο που θα χρησιμοποιήσετε για να παίρνετε αποφάσεις στο JavaScript. Δείτε πώς λειτουργεί: Η συνθήκη μπαίνει μέσα στις παρενθέσεις, και αν είναι true, το JavaScript εκτελεί τον κώδικα μέσα στις αγκύλες. Αν είναι false, το JavaScript παρακάμπτει ολόκληρο αυτό το μπλοκ. Θα χρησιμοποιείτε συχνά τους τελεστές σύγκρισης για να δημιουργήσετε αυτές τις συνθήκες. Ας δούμε ένα πρακτικό παράδειγμα: Καθώς το 1000 >= 800 αξιολογείται ως true, ο κώδικας μέσα στο μπλοκ εκτελείται, εμφανίζοντας "Getting a new laptop!" στην κονσόλα. ## Δήλωση If..Else Αλλά τι γίνεται αν θέλετε το πρόγραμμα να κάνει κάτι διαφορετικό όταν η συνθήκη είναι ψευδής; Εκεί μπαίνει το else - είναι σαν να έχετε εναλλακτικό σχέδιο. Η δήλωση else σας δίνει έναν τρόπο να πείτε "αν αυτή η συνθήκη δεν είναι αληθής, κάνε αυτό το άλλο πράγμα αντί γι' αυτό." Τώρα, επειδή το 500 >= 800 είναι false, το JavaScript παρακάμπτει το πρώτο μπλοκ και εκτελεί το μπλοκ else αντί γι' αυτό. Θα δείτε "Can't afford a new laptop, yet!" στην κονσόλα. ✅ Δοκιμάστε να κατανοήσετε αυτόν τον κώδικα και τον επόμενο τρέχοντάς τους στην κονσόλα ενός προγράμματος περιήγησης. Αλλάξτε τις τιμές των μεταβλητών currentMoney και laptopPrice για να δείτε την αλλαγή στο console.log() που επιστρέφεται. ### 🎯 Έλεγχος Λογικής If-Else: Διακλαδώσεις Αξιολογήστε την κατανόηση της λογικής υπό συνθήκη: - Τι συμβαίνει αν το currentMoney ισούται ακριβώς με το laptopPrice; - Μπορείτε να σκεφτείτε ένα ρεαλιστικό σενάριο όπου η λογική if-else θα ήταν χρήσιμη; - Πώς θα μπορούσατε να το επεκτείνετε για να διαχειρίζεται πολλαπλές τιμές τιμών; ## Δήλωση Switch Μερικές φορές χρειάζεται να συγκρίνουμε μία τιμή με πολλαπλές επιλογές. Αν και θα μπορούσατε να αλυσιδωθείτε με πολλές δηλώσεις if..else, αυτή η προσέγγιση γίνεται δύσκολη στη διαχείριση. Η δήλωση switch παρέχει καθαρότερη δομή για την διαχείριση πολλαπλών διακριτών τιμών. Η έννοια είναι παρόμοια με τα μηχανικά συστήματα εναλλαγής που χρησιμοποιούνταν στις πρώτες τηλεφωνικές κέντρα - μια τιμή εισόδου καθορίζει ποια συγκεκριμένη διαδρομή ακολουθεί η εκτέλεση. Δείτε πώς είναι δομημένο: - Η JavaScript αξιολογεί την έκφραση μία φορά - Ψάχνει κάθε case για να βρει μια αντιστοιχία - Όταν βρίσκει αντιστοιχία, εκτελεί αυτόν τον κώδικα - Το break λέει στη JavaScript να σταματήσει και να βγει από το switch - Αν δεν ταιριάζει κανένα case, εκτελεί το μπλοκ default (αν υπάρχει) Σε αυτό το παράδειγμα, η JavaScript βλέπει ότι το dayNumber είναι 2, βρίσκει το κατάλληλο case 2, ορίζει το dayName σε "Tuesday" και μετά διακόπτει το switch. Το αποτέλεσμα; "Today is Tuesday" εμφανίζεται στην κονσόλα. ✅ Δοκιμάστε να κατανοήσετε αυτόν τον κώδικα και τον επόμενο τρέχοντάς τον στην κονσόλα ενός προγράμματος περιήγησης. Αλλάξτε την τιμή της μεταβλητής a για να δείτε την αλλαγή στο console.log() που επιστρέφεται. ### 🔄 Αριστεία στη Δήλωση Switch: Πολλαπλές Επιλογές Δοκιμάστε την κατανόηση του switch: - Τι συμβαίνει αν ξεχάσετε μια δήλωση break; - Πότε θα χρησιμοποιούσατε switch αντί για πολλαπλές δηλώσεις if-else; - Γιατί είναι χρήσιμο το case default ακόμα κι αν φαίνεται ότι έχετε καλύψει όλες τις πιθανότητες; ## Λογικοί Τελεστές και Booleans Σύνθετες αποφάσεις συχνά απαιτούν την αξιολόγηση πολλαπλών συνθηκών ταυτόχρονα. Όπως η λογική άλγεβρα επιτρέπει στους μαθηματικούς να συνδυάζουν λογικές εκφράσεις, έτσι και ο προγραμματισμός προσφέρει λογικούς τελεστές για να συνδέσετε πολλαπλές λογικές συνθήκες. Αυτοί οι τελεστές επιτρέπουν την προχωρημένη λογική υπό συνθήκη, συνδυάζοντας απλές αξιολογήσεις αληθούς/ψευδούς. Αυτοί οι τελεστές σας επιτρέπουν να συνδυάζετε συνθήκες με χρήσιμους τρόπους: - AND (&&) σημαίνει και οι δύο συνθήκες πρέπει να είναι αληθείς - OR (||) σημαίνει η τουλάχιστον μία συνθήκη πρέπει να είναι αληθής - NOT (!) αντιστρέφει το true σε false (και το αντίστροφο) ## Συνθήκες και Αποφάσεις με Λογικούς Τελεστές Ας δούμε αυτούς τους λογικούς τελεστές σε δράση με ένα πιο ρεαλιστικό παράδειγμα: Σε αυτό το παράδειγμα: υπολογίζουμε μια τιμή έκπτωσης 20% (640), έπειτα αξιολογούμε αν τα διαθέσιμα χρήματά μας καλύπτουν είτε την πλήρη τιμή Ή την τιμή με έκπτωση. Καθώς τα 600 πληρούν το όριο της τιμής με έκπτωση των 640, η συνθήκη αξιολογείται ως αληθής. ### 🧮 Έλεγχος Λογικών Τελεστών: Συνδυασμός Συνθηκών Δοκιμάστε την κατανόησή σας στους λογικούς τελεστές: - Στην έκφραση A && B, τι συμβαίνει αν το A είναι false; Αξιολογείται καν το B; - Μπορείτε να σκεφτείτε σενάριο όπου θα χρειαστείτε τους τρεις τελεστές (&&, ||, !) μαζί; - Ποια είναι η διαφορά μεταξύ !user.isActive και user.isActive !== true; ### Τελεστής Άρνησης Μερικές φορές είναι πιο εύκολο να σκεφτείτε πότε κάτι δεν είναι αληθές. Όπως αντί να ρωτήσετε "Είναι ο χρήστης συνδεδεμένος;", μπορεί να θέλετε να ρωτήσετε "Δεν είναι ο χρήστης συνδεδεμένος;" Ο τελεστής θαυμαστικού (!) αντιστρέφει για εσάς τη λογική. Ο τελεστής ! είναι σαν να λέτε "το αντίθετο του..." – αν κάτι είναι true, το ! το κάνει false, και το αντίστροφο. ### Τριμερής Έκφραση (Ternary Expressions) Για απλές συνθήκες ανάθεσης τιμής, το JavaScript παρέχει τον τριμερή τελεστή. Αυτή η συνοπτική σύνταξη σας επιτρέπει να γράψετε μια λογική υπό συνθήκη σε μία γραμμή, χρήσιμη όταν χρειάζεται να αναθέσετε μία από δύο τιμές βάσει μιας συνθήκης. Διαβάζεται σαν ερώτηση: "Είναι αυτή η συνθήκη αληθής; Αν ναι, χρησιμοποίησε αυτή την τιμή. Αν όχι, χρησιμοποίησε εκείνη την τιμή." Παρακάτω υπάρχει ένα πιο απτό παράδειγμα: ✅ Πάρτε λίγο χρόνο να διαβάσετε αυτόν τον κώδικα μερικές φορές. Καταλαβαίνετε πώς λειτουργούν αυτοί οι τελεστές; Αυτή η γραμμή λέει: "Είναι ο firstNumber μεγαλύτερος από τον secondNumber; Αν ναι, βάλε το firstNumber στο biggestNumber. Αν όχι, βάλε το secondNumber στο biggestNumber." Ο τριμερής τελεστής είναι απλά ένας πιο σύντομος τρόπος να γράψετε την παραδοσιακή δήλωση if..else: Και οι δύο προσεγγίσεις παράγουν τα ίδια αποτελέσματα. Ο τριμερής τελεστής προσφέρει συνοπτικότητα, ενώ η παραδοσιακή δομή if-else μπορεί να είναι πιο ευανάγνωστη για πολύπλοκες συνθήκες. --- ## 🚀 Πρόκληση Δημιουργήστε ένα πρόγραμμα που γράφεται πρώτα με λογικούς τελεστές, και στη συνέχεια ξαναγράψτε το χρησιμοποιώντας μια τριμερή έκφραση. Ποια σύνταξη προτιμάτε; --- ## Πρόκληση GitHub Copilot Agent 🚀 Χρησιμοποιήστε τη λειτουργία Agent για να ολοκληρώσετε την παρακάτω πρόκληση: Περιγραφή: Δημιουργήστε έναν ολοκληρωμένο υπολογιστή βαθμολογίας που να δείχνει πολλαπλές έννοιες λήψης αποφάσεων από αυτό το μάθημα, συμπεριλαμβανομένων των δηλώσεων if-else, των δηλώσεων switch, των λογικών τελεστών και των τριμερών εκφράσεων. Προτροπή: Γράψτε ένα πρόγραμμα JavaScript που παίρνει τον αριθμητικό βαθμό ενός μαθητή (0-100) και καθορίζει το γράμμα βαθμού σύμφωνα με τα ακόλουθα κριτήρια: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Κάτω από 60 Απαιτήσεις: 1. Χρησιμοποιήστε μια δήλωση if-else για να καθορίσετε το γράμμα βαθμού 2. Χρησιμοποιήστε λογικούς τελεστές για να ελέγξετε εάν ο μαθητής περνάει (βαθμός >= 60) ΚΑΙ έχει τιμητική διάκριση (βαθμός >= 90) 3. Χρησιμοποιήστε μια δήλωση switch για να παρέχετε συγκεκριμένη ανατροφοδότηση για κάθε γράμμα βαθμού 4. Χρησιμοποιήστε έναν τριαδικό τελεστή για να καθορίσετε αν ο μαθητής είναι επιλέξιμος για το επόμενο μάθημα (βαθμός >= 70) 5. Συμπεριλάβετε έλεγχο εισόδου για να βεβαιωθείτε ότι η βαθμολογία είναι μεταξύ 0 και 100 Δοκιμάστε το πρόγραμμά σας με διάφορες βαθμολογίες, συμπεριλαμβανομένων ακραίων περιπτώσεων όπως 59, 60, 89, 90, και μη έγκυρης εισόδου. Μάθετε περισσότερα για το agent mode εδώ. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Διαβάστε περισσότερα για τους πολλούς τελεστές που είναι διαθέσιμοι στον χρήστη στο MDN. Περιηγηθείτε στην υπέροχη αναζήτηση τελεστών του Josh Comeau! ## Assignment Operators --- ## 🧠 Περίληψη του Εργαλείου Λήψης Αποφάσεων Σας --- ## 🚀 Η Χρονογραμμή Εμπειρίας σας στη Λήψη Αποφάσεων με JavaScript ### ⚡ Τι Μπορείτε να Κάνετε στα Επόμενα 5 Λεπτά - [ ] Εξασκηθείτε στους τελεστές σύγκρισης στην κονσόλα του προγράμματος περιήγησής σας - [ ] Γράψτε μια απλή δήλωση if-else που ελέγχει την ηλικία σας - [ ] Δοκιμάστε την πρόκληση: ξαναγράψτε ένα if-else χρησιμοποιώντας έναν τριαδικό τελεστή - [ ] Δοκιμάστε τι συμβαίνει με διαφορετικές "αληθείς" και "ψευδείς" τιμές ### 🎯 Τι Μπορείτε να Επιτύχετε Αυτήν την Ώρα - [ ] Ολοκληρώστε το κουίζ μετά το μάθημα και αναθεωρήστε τυχόν συγκεχυμένες έννοιες - [ ] Δημιουργήστε τον ολοκληρωμένο υπολογιστή βαθμολογίας από την πρόκληση GitHub Copilot - [ ] Δημιουργήστε ένα απλό δέντρο αποφάσεων για ένα πραγματικό σενάριο (όπως να επιλέξετε τι να φορέσετε) - [ ] Εξασκηθείτε στον συνδυασμό πολλαπλών συνθηκών με λογικούς τελεστές - [ ] Πειραματιστείτε με δηλώσεις switch για διαφορετικές περιπτώσεις χρήσης ### 📅 Η Εβδομαδιαία Μάστερ Λογικής Σας - [ ] Ολοκληρώστε την ανάθεση για τους τελεστές με δημιουργικά παραδείγματα - [ ] Κατασκευάστε μια μικρή εφαρμογή κουίζ χρησιμοποιώντας διάφορες δομές συνθηκών - [ ] Δημιουργήστε έναν επικυρωτή φόρμας που ελέγχει πολλαπλές συνθήκες εισόδου - [ ] Εξασκηθείτε στις ασκήσεις του Josh Comeau για αναζήτηση τελεστών - [ ] Αναδιαρθρώστε υπάρχοντα κώδικα για να χρησιμοποιεί πιο κατάλληλες δομές συνθηκών - [ ] Μελετήστε την εκτίμηση βραχυκυκλωμάτων και τις επιπτώσεις στην απόδοση ### 🌟 Η Μηνιαία Μεταμόρφωσή σας - [ ] Κυριαρχήστε σε σύνθετες εμφωλευμένες συνθήκες και διατηρήστε την αναγνωσιμότητα του κώδικα - [ ] Δημιουργήστε μια εφαρμογή με εξελιγμένη λογική λήψης αποφάσεων - [ ] Συμβάλετε στο ανοιχτό λογισμικό βελτιώνοντας τη λογική συνθηκών σε υπάρχοντα έργα - [ ] Διδάξτε κάποιον άλλο για τις διαφορετικές δομές συνθηκών και πότε να χρησιμοποιούνται - [ ] Εξερευνήστε τις λειτουργικές προσεγγίσεις στη λογική συνθηκών - [ ] Δημιουργήστε έναν προσωπικό οδηγό αναφοράς για τις βέλτιστες πρακτικές συνθηκών ### 🏆 Έλεγχος Τελικού Πρωταθλητή στη Λήψη Αποφάσεων Γιορτάστε την κυριαρχία της λογικής σας σκέψης: - Ποια είναι η πιο σύνθετη λογική απόφασης που έχετε υλοποιήσει επιτυχώς; - Ποια δομή συνθηκών σας φαίνεται πιο φυσική και γιατί; - Πώς η εκμάθηση των λογικών τελεστών άλλαξε τον τρόπο επίλυσης προβλημάτων σας; - Ποια πραγματική εφαρμογή θα ωφελούνταν από εξελιγμένη λογική λήψης αποφάσεων; --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Αποποίηση ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρότι καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η επίσημη πηγή. Για κρίσιμες πληροφορίες συνιστάται επαγγελματική ανθρωπογενής μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Βασικά JavaScript: Πίνακες και Βρόχοι

## Quiz πριν την Διάλεξη Quiz πριν την διάλεξη Έχετε αναρωτηθεί ποτέ πώς οι ιστοσελίδες παρακολουθούν τα αντικείμενα στο καλάθι αγορών ή εμφανίζουν τη λίστα των φίλων σας; Εδώ είναι που μπαίνουν οι πίνακες και οι βρόχοι. Οι πίνακες είναι σαν ψηφιακά δοχεία που κρατούν πολλά κομμάτια πληροφορίας, ενώ οι βρόχοι σας επιτρέπουν να εργάζεστε με όλα αυτά τα δεδομένα αποδοτικά χωρίς επαναλαμβανόμενο κώδικα. Μαζί, αυτές οι δύο έννοιες σχηματίζουν τα θεμέλια για τη διαχείριση των πληροφοριών στα προγράμματά σας. Θα μάθετε να περνάτε από το να γράφετε χειροκίνητα κάθε βήμα στο να δημιουργείτε έξυπνο, αποδοτικό κώδικα που μπορεί να επεξεργάζεται εκατοντάδες ή ακόμα και χιλιάδες αντικείμενα γρήγορα. Μέχρι το τέλος αυτού του μαθήματος, θα κατανοείτε πώς να εκτελείτε σύνθετες εργασίες δεδομένων με μερικές μόνο γραμμές κώδικα. Ας εξερευνήσουμε αυτές τις βασικές έννοιες προγραμματισμού. [](https://youtube.com/watch?v=1U4qTyq02Xw "Πίνακες") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Βρόχοι") ## Πίνακες Σκεφτείτε τους πίνακες σαν ένα ψηφιακό ντουλάπι αρχειοθέτησης - αντί να αποθηκεύετε ένα έγγραφο ανά συρτάρι, μπορείτε να οργανώσετε πολλά σχετικά αντικείμενα σε ένα μόνο, δομημένο δοχείο. Σε όρους προγραμματισμού, οι πίνακες σας επιτρέπουν να αποθηκεύετε πολλά κομμάτια πληροφορίας σε ένα οργανωμένο πακέτο. Είτε δημιουργείτε μια γκαλερί φωτογραφιών, διαχειρίζεστε μια λίστα εργασιών, είτε παρακολουθείτε υψηλές βαθμολογίες σε ένα παιχνίδι, οι πίνακες παρέχουν τη βάση για την οργάνωση δεδομένων. Ας δούμε πώς λειτουργούν. ✅ Οι πίνακες είναι παντού γύρω μας! Μπορείτε να σκεφτείτε ένα πραγματικό παράδειγμα πίνακα, όπως μια σειρά ηλιακών πάνελ; ### Δημιουργία Πινάκων Η δημιουργία ενός πίνακα είναι πολύ απλή - απλώς χρησιμοποιήστε αγκύλες! Τι συμβαίνει εδώ; Έχετε μόλις δημιουργήσει ένα άδειο δοχείο χρησιμοποιώντας αυτές τις αγκύλες []. Σκεφτείτε το σαν ένα άδειο ράφι βιβλιοθήκης - είναι έτοιμο να κρατήσει ό,τι βιβλία θέλετε να οργανώσετε εκεί. Μπορείτε επίσης να γεμίσετε τον πίνακά σας με αρχικές τιμές από την αρχή: Κουλ πράγματα που πρέπει να προσέξετε: - Μπορείτε να αποθηκεύσετε κείμενο, αριθμούς ή ακόμα και τιμές αληθούς/ψευδούς στον ίδιο πίνακα - Απλώς χωρίστε κάθε στοιχείο με κόμμα - εύκολο! - Οι πίνακες είναι τέλειοι για να κρατούν σχετικές πληροφορίες μαζί ### Δεικτοδότηση Πινάκων Αυτό που μπορεί να φαίνεται ασυνήθιστο στην αρχή: οι πίνακες αριθμούν τα στοιχεία τους ξεκινώντας από το 0, όχι το 1. Αυτή η δεικτοδότηση που ξεκινά από το μηδέν έχει τις ρίζες της στον τρόπο λειτουργίας της μνήμης του υπολογιστή - είναι μια σύμβαση προγραμματισμού από τις πρώτες μέρες των γλωσσών προγραμματισμού όπως η C. Κάθε θέση στον πίνακα έχει τον δικό της αριθμό διεύθυνσης που ονομάζεται δείκτης. ✅ Σας εκπλήσσει που οι πίνακες ξεκινούν από το μηδενικό δείκτη; Σε μερικές γλώσσες προγραμματισμού, οι δείκτες ξεκινούν από το 1. Υπάρχει μια ενδιαφέρουσα ιστορία γύρω από αυτό, την οποία μπορείτε να διαβάσετε στη Wikipedia. Πρόσβαση σε Στοιχεία Πίνακα: Ανάλυση του τι συμβαίνει εδώ: - Χρησιμοποιεί σημειογραφία με αγκύλες και τον αριθμό δείκτη για πρόσβαση στα στοιχεία - Επιστρέφει την τιμή που έχει αποθηκευτεί στη συγκεκριμένη θέση του πίνακα - Ξεκινά την αρίθμηση από 0, καθιστώντας το πρώτο στοιχείο στον δείκτη 0 Τροποποίηση Στοιχείων Πίνακα: Στο παραπάνω έχουμε: - Τροποποιήσει το στοιχείο στον δείκτη 4 από "Rocky Road" σε "Butter Pecan" - Προσθέσει ένα νέο στοιχείο "Cookie Dough" στον δείκτη 5 - Επεκτείνει αυτόματα το μήκος του πίνακα όταν προστίθεται πέρα από τα τωρινά όρια ### Μήκος Πίνακα και Συχνές Μέθοδοι Οι πίνακες φέρουν ενσωματωμένες ιδιότητες και μεθόδους που κάνουν την εργασία με δεδομένα πολύ πιο εύκολη. Εύρεση Μήκους Πίνακα: Κύρια σημεία που πρέπει να θυμάστε: - Επιστρέφει τον συνολικό αριθμό των στοιχείων στον πίνακα - Ενημερώνεται αυτόματα όταν προστίθενται ή αφαιρούνται στοιχεία - Παρέχει δυναμικό μετρητή χρήσιμο για βρόχους και επικύρωση Βασικές Μέθοδοι Πινάκων: Κατανόηση αυτών των μεθόδων: - Προσθέτει στοιχεία με push() (στο τέλος) και unshift() (στην αρχή) - Αφαιρεί στοιχεία με pop() (στο τέλος) και shift() (στην αρχή) - Εντοπίζει στοιχεία με indexOf() και ελέγχει την ύπαρξη με includes() - Επιστρέφει χρήσιμες τιμές όπως τα αφαιρούμενα στοιχεία ή τους δείκτες θέσης ✅ Δοκιμάστε το μόνοι σας! Χρησιμοποιήστε την κονσόλα του φυλλομετρητή σας για να δημιουργήσετε και να διαχειριστείτε έναν πίνακα της δικής σας δημιουργίας. ### 🧠 Έλεγχος Θεμελιωδών Πινάκων: Οργάνωση των Δεδομένων σας Εξετάστε την κατανόησή σας για τους πίνακες: - Γιατί νομίζετε ότι οι πίνακες ξεκινούν την αρίθμηση από το 0 αντί για το 1; - Τι συμβαίνει αν προσπαθήσετε να αποκτήσετε πρόσβαση σε δείκτη που δεν υπάρχει (όπως arr[100] σε πίνακα 5 στοιχείων); - Μπορείτε να σκεφτείτε τρία πραγματικά σενάρια όπου οι πίνακες θα ήταν χρήσιμοι; ## Βρόχοι Σκεφτείτε τη διάσημη τιμωρία από τα μυθιστορήματα του Charles Dickens, όπου οι μαθητές έπρεπε να γράφουν στίχους επανειλημμένα σε μια τάβλα. Φανταστείτε αν μπορούσατε απλά να πείτε σε κάποιον "γράψε αυτή τη φράση 100 φορές" και να γίνει αυτόματα. Αυτό ακριβώς κάνουν οι βρόχοι για τον κώδικά σας. Οι βρόχοι είναι σαν να έχετε έναν ακούραστο βοηθό που μπορεί να επαναλαμβάνει εργασίες χωρίς λάθος. Είτε χρειάζεται να ελέγξετε κάθε αντικείμενο σε ένα καλάθι αγορών είτε να εμφανίσετε όλες τις φωτογραφίες σε ένα άλμπουμ, οι βρόχοι χειρίζονται την επανάληψη αποτελεσματικά. Η JavaScript παρέχει διάφορους τύπους βρόχων για να επιλέξετε. Ας εξετάσουμε τον καθένα και να κατανοήσουμε πότε να τους χρησιμοποιούμε. ### Βρόχος For Ο βρόχος for είναι σαν να θέτετε ένα χρονόμετρο - ξέρετε ακριβώς πόσες φορές θέλετε κάτι να συμβεί. Είναι πολύ οργανωμένος και προβλέψιμος, κάνοντάς τον τέλειο όταν εργάζεστε με πίνακες ή χρειάζεται να μετρήσετε πράγματα. Δομή Βρόχου For: Βήμα προς βήμα, εδώ τι συμβαίνει: - Αρχικοποιεί τη μεταβλητή μετρητή i στο 0 στην αρχή - Ελέγχει τη συνθήκη i < 10 πριν από κάθε επανάληψη - Εκτελεί το μπλοκ κώδικα όταν η συνθήκη είναι αληθής - Αυξάνει το i κατά 1 μετά από κάθε επανάληψη με i++ - Σταματά όταν η συνθήκη γίνει ψευδής (όταν το i φτάσει το 10) ✅ Τρέξτε αυτόν τον κώδικα στην κονσόλα του φυλλομετρητή. Τι συμβαίνει όταν κάνετε μικρές αλλαγές στον μετρητή, τη συνθήκη ή την έκφραση αύξησης; Μπορείτε να το κάνετε να τρέχει αντίστροφα, δημιουργώντας αντίστροφη μέτρηση; ### 🗓️ Έλεγχος Επάρκειας Βρόχου For: Ελεγχόμενη Επανάληψη Αξιολογήστε την κατανόησή σας για τον βρόχο for: - Ποια είναι τα τρία μέρη ενός βρόχου for και τι κάνει το καθένα; - Πώς θα κάνατε βρόχο σε έναν πίνακα αντίστροφα; - Τι συμβαίνει αν ξεχάσετε το μέρος της αύξησης (i++); ### Βρόχος While Ο βρόχος while είναι σαν να λέτε "συνέχισε να το κάνεις μέχρι..." - μπορεί να μη ξέρετε ακριβώς πόσες φορές θα τρέξει, αλλά ξέρετε πότε να σταματήσει. Είναι ιδανικός για πράγματα όπως να ζητάτε είσοδο από έναν χρήστη μέχρι να σας δώσει αυτό που χρειάζεστε ή να ψάχνετε δεδομένα μέχρι να βρείτε αυτό που αναζητάτε. Χαρακτηριστικά Βρόχου While: - Συνεχίζει την εκτέλεση όσο η συνθήκη είναι αληθής - Απαιτεί χειροκίνητο χειρισμό κάθε μεταβλητής μετρητή - Ελέγχει τη συνθήκη πριν από κάθε επανάληψη - Κινδυνεύει με άπειρους βρόχους αν η συνθήκη δεν γίνει ποτέ ψευδής Κατανόηση των παραδειγμάτων: - Χειρίζεται χειροκίνητα τη μεταβλητή μετρητή i μέσα στο σώμα του βρόχου - Αυξάνει τον μετρητή για να αποφευχθούν ατέρμονες βρόχοι - Δείχνει πρακτική χρήση με είσοδο χρήστη και περιορισμό προσπαθειών - Περιλαμβάνει μηχανισμούς ασφαλείας για αποφυγή ανεξέλεγκτης εκτέλεσης ### ♾️ Έλεγχος Σοφίας Βρόχου While: Επανάληψη με Βάση Συνθήκη Δοκιμάστε την κατανόησή σας για τον βρόχο while: - Ποιος είναι ο κύριος κίνδυνος με τη χρήση βρόχων while; - Πότε θα προτιμούσατε βρόχο while αντί για for; - Πώς μπορείτε να αποτρέψετε ατέρμονους βρόχους; ### Σύγχρονες Εναλλακτικές Βρόχων Η JavaScript προσφέρει σύγχρονη σύνταξη βρόχων που μπορεί να κάνει τον κώδικά σας πιο ευανάγνωστο και λιγότερο επιρρεπή σε λάθη. For...of Βρόχος (ES6+): Βασικά πλεονεκτήματα του for...of: - Καταργεί τη διαχείριση δεικτών και πιθανά λάθη off-by-one - Παρέχει άμεση πρόσβαση στα στοιχεία του πίνακα - Βελτιώνει την αναγνωσιμότητα του κώδικα και μειώνει τη σύνταξη Μέθοδος forEach: Τι πρέπει να ξέρετε για το forEach: - Εκτελεί μια συνάρτηση για κάθε στοιχείο του πίνακα - Παρέχει τόσο την τιμή στοιχείου όσο και τον δείκτη ως παραμέτρους - Δεν μπορεί να σταματήσει νωρίτερα (σε αντίθεση με τους παραδοσιακούς βρόχους) - Επιστρέφει undefined (δεν δημιουργεί νέο πίνακα) ✅ Γιατί θα επιλέγατε βρόχο for αντί για while; 17.000 θεατές είχαν την ίδια απορία στο StackOverflow, και μερικές απόψεις μπορεί να σας φανούν ενδιαφέρουσες. ### 🎨 Έλεγχος Σύγχρονης Σύνταξης Βρόχων: Υιοθετώντας το ES6+ Αξιολογήστε την κατανόησή σας για τη σύγχρονη JavaScript: - Ποια είναι τα πλεονεκτήματα του for...of έναντι των παραδοσιακών for βρόχων; - Πότε μπορεί να προτιμάτε ακόμα παραδοσιακούς for βρόχους; - Ποια είναι η διαφορά μεταξύ forEach και map; ## Βρόχοι και Πίνακες Ο συνδυασμός πινάκων με βρόχους δημιουργεί ισχυρές δυνατότητες επεξεργασίας δεδομένων. Αυτός ο συνδυασμός είναι θεμελιώδης για πολλές εργασίες προγραμματισμού, από την εμφάνιση λιστών μέχρι τον υπολογισμό στατιστικών. Παραδοσιακή Επεξεργασία Πίνακα: Κατανοούμε κάθε προσέγγιση: - Χρησιμοποιεί την ιδιότητα μήκους του πίνακα για να ορίσει τα όρια του βρόχου - Πρόσβαση στα στοιχεία με δείκτη σε παραδοσιακούς for βρόχους - Παρέχει άμεση πρόσβαση σε στοιχεία σε for...of βρόχους - Επεξεργάζεται κάθε στοιχείο του πίνακα ακριβώς μία φορά Πρακτικό Παράδειγμα Επεξεργασίας Δεδομένων: Πώς λειτουργεί αυτός ο κώδικας: - Αρχικοποιεί μεταβλητές παρακολούθησης για άθροισμα και ακραίες τιμές - Επεξεργάζεται κάθε βαθμό με έναν αποδοτικό βρόχο - Συσσωρεύει το σύνολο για τον υπολογισμό μέσου όρου - Παρακολουθεί τις υψηλότερες και χαμηλότερες τιμές κατά την επανάληψη - Υπολογίζει τα τελικά στατιστικά μετά το πέρας του βρόχου ✅ Πειραματιστείτε με βρόχο σε έναν πίνακα δικής σας δημιουργίας στην κονσόλα του φυλλομετρητή. --- ## Πρόκληση GitHub Copilot Agent 🚀 Χρησιμοποιήστε τη λειτουργία Agent για να ολοκληρώσετε την ακόλουθη πρόκληση: Περιγραφή: Δημιουργήστε μια ολοκληρωμένη συνάρτηση επεξεργασίας δεδομένων που συνδυάζει πίνακες και βρόχους για να αναλύσει ένα σύνολο δεδομένων και να παράγει ουσιαστικά συμπεράσματα. Εντολή: Δημιουργήστε μια συνάρτηση με όνομα analyzeGrades που λαμβάνει έναν πίνακα αντικειμένων βαθμολογιών μαθητών (το καθένα περιέχει ιδιότητες όνομα και βαθμός) και επιστρέφει ένα αντικείμενο με στατιστικά όπως η υψηλότερη βαθμολογία, η χαμηλότερη βαθμολογία, ο μέσος όρος, ο αριθμός των μαθητών που πέρασαν (βαθμός >= 70), και έναν πίνακα με τα ονόματα των μαθητών που πέτυχαν πάνω από το μέσο όρο. Χρησιμοποιήστε τουλάχιστον δύο διαφορετικούς τύπους βρόχων στη λύση σας. Μάθετε περισσότερα για τη λειτουργία agent εδώ. ## 🚀 Πρόκληση Η JavaScript προσφέρει πολλές σύγχρονες μεθόδους για πίνακες που μπορούν να αντικαταστήσουν τους παραδοσιακούς βρόχους για συγκεκριμένες εργασίες. Εξερευνήστε τις forEach, for-of, map, filter και reduce. Η πρόκλησή σας: Ανασχεδιάστε το παράδειγμα με τους βαθμούς των φοιτητών χρησιμοποιώντας τουλάχιστον τρεις διαφορετικές μεθόδους πινάκων. Παρατηρήστε πόσο πιο καθαρός και πιο ευανάγνωστος γίνεται ο κώδικας με τη σύγχρονη σύνταξη της JavaScript. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Οι πίνακες στην JavaScript έχουν πολλές ενσωματωμένες μεθόδους, που είναι εξαιρετικά χρήσιμες για χειρισμό δεδομένων. Διαβάστε για αυτές τις μεθόδους και δοκιμάστε μερικές (όπως push, pop, slice και splice) σε έναν πίνακα που θα δημιουργήσετε. ## Assignment Loop an Array --- ## 📊 Σύνοψη Εργαλείων για Πίνακες & Βρόχους --- ## 🚀 Χρονοδιάγραμμα Εξοικείωσης με Πίνακες & Βρόχους ### ⚡ Τι Μπορείτε να Κάνετε στα Επόμενα 5 Λεπτά - [ ] Δημιουργήστε έναν πίνακα με τις αγαπημένες σας ταινίες και αποκτήστε πρόσβαση σε συγκεκριμένα στοιχεία - [ ] Γράψτε έναν for βρόχο που μετράει από το 1 ως το 10 - [ ] Δοκιμάστε την πρόκληση με τις σύγχρονες μεθόδους πινάκων από το μάθημα - [ ] Εξασκηθείτε στον δείκτη πινάκων στην κονσόλα του φυλλομετρητή σας ### 🎯 Τι Μπορείτε να Καταφέρετε μέσα σε Αυτήν την Ώρα - [ ] Ολοκληρώστε το post-lesson quiz και ανασκοπήστε όποιες έννοιες βρείτε δυσκολότερες - [ ] Δημιουργήστε τον αναλυτή βαθμολογιών από την πρόκληση GitHub Copilot - [ ] Φτιάξτε ένα απλό καλάθι αγορών που προσθέτει και αφαιρεί αντικείμενα - [ ] Εξασκηθείτε στη μετατροπή μεταξύ διαφόρων τύπων βρόχων - [ ] Πειραματιστείτε με μεθόδους πινάκων όπως push, pop, slice και splice ### 📅 Το Ταξίδι Επεξεργασίας Δεδομένων Μιας Εβδομάδας - [ ] Ολοκληρώστε την εργασία "Loop an Array" με δημιουργικές βελτιώσεις - [ ] Δημιουργήστε μια εφαρμογή λίστας εργασιών χρησιμοποιώντας πίνακες και βρόχους - [ ] Φτιάξτε έναν απλό στατιστικό υπολογιστή για αριθμητικά δεδομένα - [ ] Εξασκηθείτε με MDN μεθόδους πινάκων - [ ] Δημιουργήστε μια γκαλερί φωτογραφιών ή μια διεπαφή λίστας μουσικής - [ ] Εξερευνήστε τον λειτουργικό προγραμματισμό με map, filter, και reduce ### 🌟 Ο Μετασχηματισμός ενός Μήνα - [ ] Κατακτήστε προχωρημένες λειτουργίες πινάκων και βελτιστοποίηση επιδόσεων - [ ] Δημιουργήστε έναν πλήρη πίνακα οπτικοποίησης δεδομένων - [ ] Συνεισφέρετε σε έργα ανοιχτού κώδικα που αφορούν επεξεργασία δεδομένων - [ ] Διδάξτε σε άλλους για πίνακες και βρόχους με πρακτικά παραδείγματα - [ ] Δημιουργήστε μια προσωπική βιβλιοθήκη λειτουργιών επεξεργασίας δεδομένων για επαναχρησιμοποίηση - [ ] Εξερευνήστε αλγορίθμους και δομές δεδομένων βασισμένες σε πίνακες ### 🏆 Τελικός Έλεγχος Πρωταθλητή Επεξεργασίας Δεδομένων Γιορτάστε τις γνώσεις σας σε πίνακες και βρόχους: - Ποια είναι η πιο χρήσιμη λειτουργία πινάκα που μάθατε για εφαρμογές στον πραγματικό κόσμο; - Ποιος τύπος βρόχου σας φαίνεται πιο φυσικός και γιατί; - Πώς έχει αλλάξει η κατανόησή σας για τους πίνακες και τους βρόχους τον τρόπο που οργανώνετε δεδομένα; - Ποια πολύπλοκη εργασία επεξεργασίας δεδομένων θέλετε να αντιμετωπίσετε στη συνέχεια; --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Αποποίηση Ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του αποτελεί την αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Introduction to JavaScript

JavaScript is the language of the web. In these four lessons, you'll learn the basics. ### Topics 1. Variables and Data Types 2. Functions and Methods 3. Making Decisions with JavaScript 4. Arrays and Loops ### Credits These lessons were created with ♥️ by Jasmine Greenaway, Christopher Harrison, and Chris Noring --- Disclaimer: This document has been translated using the AI translation service Co-op Translator. While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation.

javascript

Data Types

Data types are one of the fundamental concepts in JavaScript that you'll encounter in every program you write. Think of data types like the filing system used by ancient librarians in Alexandria – they had specific places for scrolls containing poetry, mathematics, and historical records. JavaScript organizes information in a similar way with different categories for different kinds of data. In this lesson, we'll explore the core data types that make JavaScript work. You'll learn how to handle numbers, text, true/false values, and understand why choosing the correct type is essential for your programs. These concepts might seem abstract at first, but with practice, they'll become second nature. Understanding data types will make everything else in JavaScript much clearer. Just as architects need to understand different building materials before constructing a cathedral, these fundamentals will support everything you build going forward. ## Pre-Lecture Quiz Pre-lecture quiz This lesson covers the basics of JavaScript, the language that provides interactivity on the web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Let's start with variables and the data types that populate them! ## Variables Variables are fundamental building blocks in programming. Like the labeled jars that medieval alchemists used to store different substances, variables let you store information and give it a descriptive name so you can reference it later. Need to remember someone's age? Store it in a variable called age. Want to track a user's name? Keep it in a variable called userName. We'll focus on the modern approach to creating variables in JavaScript. The techniques you'll learn here represent years of language evolution and best practices developed by the programming community. Creating and declaring a variable has the following syntax [keyword] [name]. It's made up of the two parts: - Keyword. Use let for variables that can change, or const for values that stay the same. - The variable name, this is a descriptive name you choose yourself. ✅ The keyword let was introduced in ES6 and gives your variable a so called _block scope_. It's recommended that you use let or const instead of the older var keyword. We will cover block scopes more in depth in future parts. ### Task - working with variables 1. Declare a variable. Let's start by creating our first variable: ```javascript let myVariable; ``` What this accomplishes: - This tells JavaScript to create a storage location called myVariable - JavaScript allocates space in memory for this variable - The variable currently has no value (undefined) 2. Give it a value. Now let's put something in our variable: ```javascript myVariable = 123; ``` How assignment works: - The = operator assigns the value 123 to our variable - The variable now contains this value instead of being undefined - You can reference this value throughout your code using myVariable > Note: the use of = in this lesson means we make use of an "assignment operator", used to set a value to a variable. It doesn't denote equality. 3. Do it the smart way. Actually, let's combine those two steps: ```javascript let myVariable = 123; ``` This approach is more efficient: - You're declaring the variable and assigning a value in one statement - This is the standard practice among developers - It reduces code length while maintaining clarity 4. Change your mind. What if we want to store a different number? ```javascript myVariable = 321; ``` Understanding reassignment: - The variable now contains 321 instead of 123 - The previous value is replaced – variables store only one value at a time - This mutability is the key characteristic of variables declared with let ✅ Try it! You can write JavaScript right in your browser. Open a browser window and navigate to Developer Tools. In the console, you will find a prompt; type let myVariable = 123, press return, then type myVariable. What happens? Note, you'll learn more about these concepts in subsequent lessons. ### 🧠 Variables Mastery Check: Getting Comfortable Let's see how you're feeling about variables: - Can you explain the difference between declaring and assigning a variable? - What happens if you try to use a variable before you declare it? - When would you choose let over const for a variable? ## Constants Sometimes you need to store information that should never change during program execution. Think of constants like the mathematical principles that Euclid established in ancient Greece – once proven and documented, they remained fixed for all future reference. Constants work similarly to variables, but with an important restriction: once you assign their value, it cannot be changed. This immutability helps prevent accidental modifications to critical values in your program. Declaration and initialization of a constant follows the same concepts as a variable, with the exception of the const keyword. Constants are typically declared with all uppercase letters. Here's what this code does: - Creates a constant named MY_VARIABLE with the value 123 - Uses uppercase naming convention for constants - Prevents any future changes to this value Constants have two main rules: - You must give them a value right away – no empty constants allowed! - You can never change that value – JavaScript will throw an error if you try. Let's see what I mean: Simple value - The following is NOT allowed: ```javascript const PI = 3; PI = 4; // not allowed ``` What you need to remember: - Attempts to reassign a constant will cause an error - Protects important values from accidental changes - Ensures the value remains consistent throughout your program Object reference is protected - The following is NOT allowed: ```javascript const obj = { a: 3 }; obj = { b: 5 } // not allowed ``` Understanding these concepts: - Prevents replacing the entire object with a new one - Protects the reference to the original object - Maintains the object's identity in memory Object value is not protected - The following IS allowed: ```javascript const obj = { a: 3 }; obj.a = 5; // allowed ``` Breaking down what happens here: - Modifies the property value inside the object - Keeps the same object reference - Demonstrates that object contents can change while the reference stays constant > Note, a const means the reference is protected from reassignment. The value is not _immutable_ though and can change, especially if it's a complex construct like an object. ## Data Types JavaScript organizes information into different categories called data types. This concept mirrors how ancient scholars categorized knowledge – Aristotle distinguished between different types of reasoning, knowing that logical principles couldn't be applied uniformly to poetry, mathematics, and natural philosophy. Data types matter because different operations work with different kinds of information. Just as you can't perform arithmetic on a person's name or alphabetize a mathematical equation, JavaScript requires the appropriate data type for each operation. Understanding this prevents errors and makes your code more reliable. Variables can store many different types of values, like numbers and text. These various types of values are known as the data type. Data types are an important part of software development because it helps developers make decisions on how the code should be written and how the software should run. Furthermore, some data types have unique features that help transform or extract additional information in a value. ✅ Data Types are also referred to as JavaScript data primitives, as they are the lowest-level data types that are provided by the language. There are 7 primitive data types: string, number, bigint, boolean, undefined, null and symbol. Take a minute to visualize what each of these primitives might represent. What is a zebra? How about 0? true? ### Numbers Numbers are the most straightforward data type in JavaScript. Whether you're working with whole numbers like 42, decimals like 3.14, or negative numbers like -5, JavaScript handles them uniformly. Remember our variable from earlier? That 123 we stored was actually a number data type: Key characteristics: - JavaScript automatically recognizes numeric values - You can perform mathematical operations with these variables - No explicit type declaration is required Variables can store all types of numbers, including decimals or negative numbers. Numbers also can be used with arithmetic operators, covered in the next section. ### Arithmetic Operators Arithmetic operators allow you to perform mathematical calculations in JavaScript. These operators follow the same principles mathematicians have used for centuries – the same symbols that appeared in the works of scholars like Al-Khwarizmi, who developed algebraic notation. The operators work as you would expect from traditional mathematics: plus for addition, minus for subtraction, and so forth. There are several types of operators to use when performing arithmetic functions, and some are listed here: ✅ Try it! Try an arithmetic operation in your browser's console. Do the results surprise you? ### 🧮 Math Skills Check: Calculating with Confidence Test your arithmetic understanding: - What's the difference between / (division) and % (remainder)? - Can you predict what 10 % 3 equals? (Hint: it's not 3.33...) - Why might the remainder operator be useful in programming? ### Strings In JavaScript, textual data is represented as strings. The term "string" comes from the concept of characters strung together in sequence, much like the way scribes in medieval monasteries would connect letters to form words and sentences in their manuscripts. Strings are fundamental to web development. Every piece of text displayed on a website – usernames, button labels, error messages, content – is handled as string data. Understanding strings is essential for creating functional user interfaces. Strings are sets of characters that reside between single or double quotes. Understanding these concepts: - Uses either single quotes ' or double quotes " to define strings - Stores text data that can include letters, numbers, and symbols - Assigns string values to variables for later use - Requires quotes to distinguish text from variable names Remember to use quotes when writing a string, or else JavaScript will assume it's a variable name. ### Formatting Strings String manipulation allows you to combine text elements, incorporate variables, and create dynamic content that responds to program state. This technique enables you to construct text programmatically. Often you need to join multiple strings together – this process is called concatenation. To concatenate two or more strings, or join them together, use the + operator. Step by step, here's what's happening: - Combines multiple strings using the + operator - Joins strings directly together without spaces in the first example - Adds space characters " " between strings for readability - Inserts punctuation like commas to create proper formatting ✅ Why does 1 + 1 = 2 in JavaScript, but '1' + '1' = 11? Think about it. What about '1' + 1? Template literals are another way to format strings, except instead of quotes, the backtick is used. Anything that is not plain text must be placed inside placeholders ${ }. This includes any variables that may be strings. Let's understand each part: - Uses backticks ` `` instead of regular quotes to create template literals - Embeds variables directly using ${} placeholder syntax - Preserves spaces and formatting exactly as written - Provides a cleaner way to create complex strings with variables You can achieve your formatting goals with either method, but template literals will respect any spaces and line breaks. ✅ When would you use a template literal vs. a plain string? ### 🔤 String Mastery Check: Text Manipulation Confidence Evaluate your string skills: - Can you explain why '1' + '1' equals '11' instead of 2? - Which string method do you find more readable: concatenation or template literals? - What happens if you forget the quotes around a string? ### Booleans Booleans represent the simplest form of data: they can only hold one of two values – true or false. This binary logic system traces back to the work of George Boole, a 19th-century mathematician who developed Boolean algebra. Despite their simplicity, booleans are essential for program logic. They enable your code to make decisions based on conditions – whether a user is logged in, if a button was clicked, or if certain criteria are met. Booleans can be only two values: true or false. Booleans can help make decisions on which lines of code should run when certain conditions are met. In many cases, operators assist with setting the value of a Boolean and you will often notice and write variables being initialized or their values being updated with an operator. In the above, we've: - Created a variable that stores the Boolean value true - Demonstrated how to store the Boolean value false - Used the exact keywords true and false (no quotes needed) - Prepared these variables for use in conditional statements ✅ A variable can be considered 'truthy' if it evaluates to a boolean true. Interestingly, in JavaScript, all values are truthy unless defined as falsy. ### 🎯 Boolean Logic Check: Decision Making Skills Test your boolean understanding: - Why do you think JavaScript has "truthy" and "falsy" values beyond just true and false? - Can you predict which of these is falsy: 0, "0", [], "false"? - How might booleans be useful in controlling program flow? --- ## 📊 Your Data Types Toolkit Summary ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a personal information manager that demonstrates all the JavaScript data types you've learned in this lesson while handling real-world data scenarios. Prompt: Build a JavaScript program that creates a user profile object containing: a person's name (string), age (number), is a student status (boolean), favorite colors as an array, and an address object with street, city, and zip code properties. Include functions to display the profile information and update individual fields. Make sure to demonstrate string concatenation, template literals, arithmetic operations with the age, and boolean logic for the student status. Learn more about agent mode here. ## 🚀 Challenge JavaScript has some behaviors that can catch developers off guard. Here's a classic example to explore: try typing this in your browser console: let age = 1; let Age = 2; age == Age and observe the result. It returns false – can you determine why? This represents one of many JavaScript behaviors worth understanding. Familiarity with these quirks will help you write more reliable code and debug issues more effectively. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Take a look at this list of JavaScript exercises and try one. What did you learn? ## Assignment Data Types Practice ## 🚀 Your JavaScript Data Types Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Open your browser console and create 3 variables with different data types - [ ] Try the challenge: let age = 1; let Age = 2; age == Age and figure out why it's false - [ ] Practice string concatenation with your name and favorite number - [ ] Test what happens when you add a number to a string ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Create a mini calculator that adds, subtracts, multiplies, and divides two numbers - [ ] Build a simple name formatter using template literals - [ ] Explore the differences between == and === comparison operators - [ ] Practice converting between different data types ### 📅 Your Week-Long JavaScript Foundation - [ ] Complete the assignment with confidence and creativity - [ ] Create a personal profile object using all data types learned - [ ] Practice with JavaScript exercises from CSS-Tricks - [ ] Build a simple form validator using boolean logic - [ ] Experiment with array and object data types (preview of coming lessons) - [ ] Join a JavaScript community and ask questions about data types ### 🌟 Your Month-Long Transformation - [ ] Integrate data type knowledge into larger programming projects - [ ] Understand when and why to use each data type in real applications - [ ] Help other beginners understand JavaScript fundamentals - [ ] Build a small application that manages different types of user data - [ ] Explore advanced data type concepts like type coercion and strict equality - [ ] Contribute to open source JavaScript projects with documentation improvements ### 🧠 Final Data Types Mastery Check-in Celebrate your JavaScript foundation: - Which data type surprised you the most in terms of its behavior? - How comfortable do you feel explaining variables vs. constants to a friend? - What's the most interesting thing you discovered about JavaScript's type system? - Which real-world application can you imagine building with these fundamentals? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: This document has been translated using the AI translation service Co-op Translator. While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

data

Methods and Functions

## Pre-Lecture Quiz Pre-lecture quiz Writing the same code repeatedly is one of programming's most common frustrations. Functions solve this problem by letting you package code into reusable blocks. Think of functions like the standardized parts that made Henry Ford's assembly line revolutionary – once you create a reliable component, you can use it wherever needed without rebuilding from scratch. Functions allow you to bundle pieces of code so you can reuse them throughout your program. Instead of copying and pasting the same logic everywhere, you can create a function once and call it whenever needed. This approach keeps your code organized and makes updates much easier. In this lesson, you'll learn how to create your own functions, pass information to them, and get useful results back. You'll discover the difference between functions and methods, learn modern syntax approaches, and see how functions can work with other functions. We'll build these concepts step by step. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Functions A function is a self-contained block of code that performs a specific task. It encapsulates logic that you can execute whenever needed. Instead of writing the same code multiple times throughout your program, you can package it in a function and call that function whenever you need it. This approach keeps your code clean and makes updates much easier. Consider the maintenance challenge if you needed to change logic that was scattered across 20 different locations in your codebase. Naming your functions descriptively is essential. A well-named function communicates its purpose clearly – when you see cancelTimer(), you immediately understand what it does, just as a clearly labeled button tells you exactly what will happen when you click it. ## Creating and calling a function Let's examine how to create a function. The syntax follows a consistent pattern: Let's break this down: - The function keyword tells JavaScript "Hey, I'm creating a function!" - nameOfFunction is where you give your function a descriptive name - The parentheses () are where you can add parameters (we'll get to that soon) - The curly braces {} contain the actual code that runs when you call the function Let's create a simple greeting function to see this in action: This function prints "Hello, world!" to the console. Once you've defined it, you can use it as many times as needed. To execute (or "call") your function, write its name followed by parentheses. JavaScript allows you to define your function before or after you call it – the JavaScript engine will handle the execution order. When you run this line, it executes all the code inside your displayGreeting function, displaying "Hello, world!" in your browser's console. You can call this function repeatedly. ### 🧠 Function Fundamentals Check: Building Your First Functions Let's see how you're feeling about basic functions: - Can you explain why we use curly braces {} in function definitions? - What happens if you write displayGreeting without the parentheses? - Why might you want to call the same function multiple times? ### Function best practices Here are a few tips to help you write great functions: - Give your functions clear, descriptive names – your future self will thank you! - Use camelCasing for multi-word names (like calculateTotal instead of calculate_total) - Keep each function focused on doing one thing well ## Passing information to a function Our displayGreeting function is limited – it can only display "Hello, world!" for everyone. Parameters allow us to make functions more flexible and useful. Parameters act like placeholders where you can insert different values each time you use the function. This way, the same function can work with different information on each call. You list parameters inside the parentheses when you define your function, separating multiple parameters with commas: Each parameter acts like a placeholder – when someone calls your function, they'll provide actual values that get plugged into these spots. Let's update our greeting function to accept someone's name: Notice how we're using backticks (` `) and ${}` to insert the name directly into our message – this is called a template literal, and it's a really handy way to build strings with variables mixed in. Now when we call our function, we can pass in any name: JavaScript takes the string 'Christopher', assigns it to the name parameter, and creates the personalized message "Hello, Christopher!" ## Default values What if we want to make some parameters optional? That's where default values come in handy! Let's say we want people to be able to customize the greeting word, but if they don't specify one, we'll just use "Hello" as a fallback. You can set up default values by using the equals sign, just like setting a variable: Here, name is still required, but salutation has a backup value of 'Hello' if no one provides a different greeting. Now we can call this function in two different ways: In the first call, JavaScript uses the default "Hello" since we didn't specify a salutation. In the second call, it uses our custom "Hi" instead. This flexibility makes functions adaptable to different scenarios. ### 🎛️ Parameters Mastery Check: Making Functions Flexible Test your parameter understanding: - What's the difference between a parameter and an argument? - Why are default values useful in real-world programming? - Can you predict what happens if you pass more arguments than parameters? ## Return values Our functions so far have just been printing messages to the console, but what if you want a function to calculate something and give you back the result? That's where return values come in. Instead of just displaying something, a function can hand you back a value that you can store in a variable or use in other parts of your code. To send a value back, you use the return keyword followed by whatever you want to return: Here's something important: when a function hits a return statement, it immediately stops running and sends that value back to whoever called it. Let's modify our greeting function to return the message instead of printing it: Now instead of printing the greeting, this function creates the message and hands it back to us. To use the returned value, we can store it in a variable just like any other value: Now greetingMessage contains "Hello, Christopher" and we can use it anywhere in our code – to display it on a webpage, include it in an email, or pass it to another function. ### 🔄 Return Values Check: Getting Results Back Evaluate your return value understanding: - What happens to code after a return statement in a function? - Why is returning values often better than just printing to console? - Can a function return different types of values (string, number, boolean)? ## Functions as parameters for functions Functions can be passed as parameters to other functions. While this concept may seem complex initially, it's a powerful feature that enables flexible programming patterns. This pattern is super common when you want to say "when something happens, do this other thing." For example, "when the timer finishes, run this code" or "when the user clicks the button, call this function." Let's look at setTimeout, which is a built-in function that waits a certain amount of time and then runs some code. We need to tell it what code to run – perfect use case for passing a function! Try this code – after 3 seconds, you'll see a message: Notice how we pass displayDone (without parentheses) to setTimeout. We're not calling the function ourselves – we're handing it over to setTimeout and saying "call this in 3 seconds." ### Anonymous functions Sometimes you need a function for just one thing and don't want to give it a name. Think about it – if you're only using a function once, why clutter up your code with an extra name? JavaScript lets you create anonymous functions – functions without names that you can define right where you need them. Here's how we can rewrite our timer example using an anonymous function: This achieves the same result, but the function is defined directly within the setTimeout call, eliminating the need for a separate function declaration. ### Fat arrow functions Modern JavaScript has an even shorter way to write functions called arrow functions. They use => (which looks like an arrow – get it?) and are super popular with developers. Arrow functions let you skip the function keyword and write more concise code. Here's our timer example using an arrow function: The () is where parameters would go (empty in this case), then comes the arrow =>, and finally the function body in curly braces. This provides the same functionality with more concise syntax. ### When to use each strategy When should you use each approach? A practical guideline: if you'll use the function multiple times, give it a name and define it separately. If it's for one specific use, consider an anonymous function. Both arrow functions and traditional syntax are valid choices, though arrow functions are prevalent in modern JavaScript codebases. ### 🎨 Function Styles Mastery Check: Choosing the Right Syntax Test your syntax understanding: - When might you prefer arrow functions over traditional function syntax? - What's the main advantage of anonymous functions? - Can you think of a situation where a named function is better than an anonymous one? --- ## 🚀 Challenge Can you articulate in one sentence the difference between functions and methods? Give it a try! ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a utility library of mathematical functions that demonstrates different function concepts covered in this lesson, including parameters, default values, return values, and arrow functions. Prompt: Create a JavaScript file called mathUtils.js that contains the following functions: 1. A function add that takes two parameters and returns their sum 2. A function multiply with default parameter values (second parameter defaults to 1) 3. An arrow function square that takes a number and returns its square 4. A function calculate that accepts another function as a parameter and two numbers, then applies the function to those numbers 5. Demonstrate calling each function with appropriate test cases Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study It's worth reading up a little more on arrow functions, as they are increasingly used in code bases. Practice writing a function, and then rewriting it with this syntax. ## Assignment Fun with Functions --- ## 🧰 Your JavaScript Functions Toolkit Summary --- ## 🚀 Your JavaScript Functions Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Write a simple function that returns your favorite number - [ ] Create a function with two parameters that adds them together - [ ] Try converting a traditional function to arrow function syntax - [ ] Practice the challenge: explain the difference between functions and methods ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Build the math utilities library from the GitHub Copilot challenge - [ ] Create a function that uses another function as a parameter - [ ] Practice writing functions with default parameters - [ ] Experiment with template literals in function return values ### 📅 Your Week-Long Function Mastery - [ ] Complete the "Fun with Functions" assignment with creativity - [ ] Refactor some repetitive code you've written into reusable functions - [ ] Build a small calculator using only functions (no global variables) - [ ] Practice arrow functions with array methods like map() and filter() - [ ] Create a collection of utility functions for common tasks - [ ] Study higher-order functions and functional programming concepts ### 🌟 Your Month-Long Transformation - [ ] Master advanced function concepts like closures and scope - [ ] Build a project that heavily uses function composition - [ ] Contribute to open source by improving function documentation - [ ] Teach someone else about functions and different syntax styles - [ ] Explore functional programming paradigms in JavaScript - [ ] Create a personal library of reusable functions for future projects ### 🏆 Final Functions Champion Check-in Celebrate your function mastery: - What's the most useful function you've created so far? - How has learning about functions changed the way you think about code organization? - Which function syntax do you prefer and why? - What real-world problem would you solve by writing a function? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: This document has been translated using AI translation service Co-op Translator. While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

function

Making Decisions

Have you ever wondered how applications make smart decisions? Like how a navigation system chooses the fastest route, or how a thermostat decides when to turn on the heat? This is the fundamental concept of decision-making in programming. Just as Charles Babbage's Analytical Engine was designed to follow different sequences of operations based on conditions, modern JavaScript programs need to make choices based on varying circumstances. This ability to branch and make decisions is what transforms static code into responsive, intelligent applications. In this lesson, you'll learn how to implement conditional logic in your programs. We'll explore conditional statements, comparison operators, and logical expressions that allow your code to evaluate situations and respond appropriately. ## Pre-Lecture Quiz Pre-lecture quiz The ability to make decisions and control program flow is a fundamental aspect of programming. This section covers how to control the execution path of your JavaScript programs using Boolean values and conditional logic. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## A Brief Recap on Booleans Before exploring decision-making, let's revisit Boolean values from our previous lesson. Named after mathematician George Boole, these values represent binary states – either true or false. There's no ambiguity, no middle ground. These binary values form the foundation of all computational logic. Every decision your program makes ultimately reduces to a Boolean evaluation. Creating Boolean variables is straightforward: This creates two variables with explicit Boolean values. ✅ Booleans are named after the English mathematician, philosopher and logician George Boole (1815–1864). ## Comparison Operators and Booleans In practice, you'll rarely set Boolean values manually. Instead, you'll generate them by evaluating conditions: "Is this number greater than that one?" or "Are these values equal?" Comparison operators enable these evaluations. They compare values and return Boolean results based on the relationship between the operands. ✅ Check your knowledge by writing some comparisons in your browser's console. Does any returned data surprise you? ### 🧠 Comparison Mastery Check: Understanding Boolean Logic Test your comparison understanding: - Why do you think === (strict equality) is generally preferred over == (loose equality)? - Can you predict what 5 === '5' returns? How about 5 == '5'? - What's the difference between !== and !=? ## If Statement The if statement is like asking a question in your code. "If this condition is true, then do this thing." It's probably the most important tool you'll use for making decisions in JavaScript. Here's how it works: The condition goes inside the parentheses, and if it's true, JavaScript runs the code inside the curly braces. If it's false, JavaScript just skips that whole block. You'll often use comparison operators to create these conditions. Let's see a practical example: Since 1000 >= 800 evaluates to true, the code inside the block executes, displaying "Getting a new laptop!" in the console. ## If..Else Statement But what if you want your program to do something different when the condition is false? That's where else comes in – it's like having a backup plan. The else statement gives you a way to say "if this condition isn't true, do this other thing instead." Now since 500 >= 800 is false, JavaScript skips the first block and runs the else block instead. You'll see "Can't afford a new laptop, yet!" in the console. ✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the currentMoney and laptopPrice variables to change the returned console.log(). ### 🎯 If-Else Logic Check: Branching Paths Evaluate your conditional logic understanding: - What happens if currentMoney exactly equals laptopPrice? - Can you think of a real-world scenario where if-else logic would be useful? - How might you extend this to handle multiple price ranges? ## Switch Statement Sometimes you need to compare one value against multiple options. While you could chain several if..else statements, this approach becomes unwieldy. The switch statement provides a cleaner structure for handling multiple discrete values. The concept resembles the mechanical switching systems used in early telephone exchanges – one input value determines which specific path the execution follows. Here's how it's structured: - JavaScript evaluates the expression once - It looks through each case to find a match - When it finds a match, it runs that code block - The break tells JavaScript to stop and exit the switch - If no cases match, it runs the default block (if you have one) In this example, JavaScript sees that dayNumber is 2, finds the matching case 2, sets dayName to "Tuesday", and then breaks out of the switch. The result? "Today is Tuesday" gets logged to the console. ✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the variable a to change the returned console.log(). ### 🔄 Switch Statement Mastery: Multiple Options Test your switch understanding: - What happens if you forget a break statement? - When would you use switch instead of multiple if-else statements? - Why is the default case useful even if you think you've covered all possibilities? ## Logical Operators and Booleans Complex decisions often require evaluating multiple conditions simultaneously. Just as Boolean algebra allows mathematicians to combine logical expressions, programming provides logical operators to connect multiple Boolean conditions. These operators enable sophisticated conditional logic by combining simple true/false evaluations. These operators let you combine conditions in useful ways: - AND (&&) means both conditions must be true - OR (||) means at least one condition must be true - NOT (!) flips true to false (and vice versa) ## Conditions and Decisions with Logical Operators Let's see these logical operators in action with a more realistic example: In this example: we calculate a 20% discount price (640), then evaluate whether our available funds cover either the full price OR the discounted price. Since 600 meets the discounted price threshold of 640, the condition evaluates to true. ### 🧮 Logical Operators Check: Combining Conditions Test your logical operator understanding: - In the expression A && B, what happens if A is false? Does B even get evaluated? - Can you think of a situation where you'd need all three operators (&&, ||, !) together? - What's the difference between !user.isActive and user.isActive !== true? ### Negation Operator Sometimes it's easier to think about when something is NOT true. Like instead of asking "Is the user logged in?", you might want to ask "Is the user NOT logged in?" The exclamation mark (!) operator flips the logic for you. The ! operator is like saying "the opposite of..." – if something is true, ! makes it false, and vice versa. ### Ternary Expressions For simple conditional assignments, JavaScript provides the ternary operator. This concise syntax allows you to write a conditional expression in a single line, useful when you need to assign one of two values based on a condition. It reads like a question: "Is this condition true? If yes, use this value. If no, use that value." Below is a more tangible example: ✅ Take a minute to read this code a few times. Do you understand how these operators are working? Here's what this line is saying: "Is firstNumber greater than secondNumber? If yes, put firstNumber in biggestNumber. If no, put secondNumber in biggestNumber." The ternary operator is just a shorter way to write this traditional if..else statement: Both approaches produce identical results. The ternary operator offers conciseness, while the traditional if-else structure may be more readable for complex conditions. --- ## 🚀 Challenge Create a program that is written first with logical operators, and then rewrite it using a ternary expression. What's your preferred syntax? --- ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Create a comprehensive grade calculator that demonstrates multiple decision-making concepts from this lesson, including if-else statements, switch statements, logical operators, and ternary expressions. Prompt: Write a JavaScript program that takes a student's numerical score (0-100) and determines their letter grade using the following criteria: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Below 60 Requirements: 1. Use an if-else statement to determine the letter grade 2. Use logical operators to check if the student passes (grade >= 60) AND has honors (grade >= 90) 3. Use a switch statement to provide specific feedback for each letter grade 4. Use a ternary operator to determine if the student is eligible for the next course (grade >= 70) 5. Include input validation to ensure the score is between 0 and 100 Test your program with various scores including edge cases like 59, 60, 89, 90, and invalid inputs. Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Read more about the many operators available to the user on MDN. Go through Josh Comeau's wonderful operator lookup! ## Assignment Operators --- ## 🧠 Your Decision-Making Toolkit Summary --- ## 🚀 Your JavaScript Decision-Making Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Practice comparison operators in your browser console - [ ] Write a simple if-else statement that checks your age - [ ] Try the challenge: rewrite an if-else using a ternary operator - [ ] Test what happens with different "truthy" and "falsy" values ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any confusing concepts - [ ] Build the comprehensive grade calculator from the GitHub Copilot challenge - [ ] Create a simple decision tree for a real-world scenario (like choosing what to wear) - [ ] Practice combining multiple conditions with logical operators - [ ] Experiment with switch statements for different use cases ### 📅 Your Week-Long Logic Mastery - [ ] Complete the operators assignment with creative examples - [ ] Build a mini quiz application using various conditional structures - [ ] Create a form validator that checks multiple input conditions - [ ] Practice Josh Comeau's operator lookup exercises - [ ] Refactor existing code to use more appropriate conditional structures - [ ] Study short-circuit evaluation and performance implications ### 🌟 Your Month-Long Transformation - [ ] Master complex nested conditions and maintain code readability - [ ] Build an application with sophisticated decision-making logic - [ ] Contribute to open source by improving conditional logic in existing projects - [ ] Teach someone else about different conditional structures and when to use each - [ ] Explore functional programming approaches to conditional logic - [ ] Create a personal reference guide for conditional best practices ### 🏆 Final Decision-Making Champion Check-in Celebrate your logical thinking mastery: - What's the most complex decision logic you've successfully implemented? - Which conditional structure feels most natural to you and why? - How has learning about logical operators changed your problem-solving approach? - What real-world application would benefit from sophisticated decision-making logic? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: This document has been translated using the AI translation service Co-op Translator. While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Arrays and Loops

## Pre-Lecture Quiz Pre-lecture quiz Ever wondered how websites keep track of shopping cart items or display your friend list? That's where arrays and loops come in. Arrays are like digital containers that hold multiple pieces of information, while loops let you work with all that data efficiently without repetitive code. Together, these two concepts form the foundation for handling information in your programs. You'll learn to move from manually writing out every single step to creating smart, efficient code that can process hundreds or even thousands of items quickly. By the end of this lesson, you'll understand how to accomplish complex data tasks with just a few lines of code. Let's explore these essential programming concepts. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Think of arrays as a digital filing cabinet - instead of storing one document per drawer, you can organize multiple related items in a single, structured container. In programming terms, arrays let you store multiple pieces of information in one organized package. Whether you're building a photo gallery, managing a to-do list, or keeping track of high scores in a game, arrays provide the foundation for data organization. Let's see how they work. ✅ Arrays are all around us! Can you think of a real-life example of an array, such as a solar panel array? ### Creating Arrays Creating an array is super simple - just use square brackets! What's happening here? You've just created an empty container using those square brackets []. Think of it like an empty library shelf - it's ready to hold whatever books you want to organize there. You can also fill your array with initial values right from the start: Cool things to notice: - You can store text, numbers, or even true/false values in the same array - Just separate each item with a comma - easy! - Arrays are perfect for keeping related information together ### Array Indexing Here's something that might seem unusual at first: arrays number their items starting from 0, not 1. This zero-based indexing has its roots in how computer memory works - it's been a programming convention since the early days of computing languages like C. Each spot in the array gets its own address number called an index. ✅ Does it surprise you that arrays start at the zero index? In some programming languages, indexes start at 1. There's an interesting history around this, which you can read on Wikipedia. Accessing Array Elements: Breaking down what happens here: - Uses square bracket notation with the index number to access elements - Returns the value stored at that specific position in the array - Starts counting from 0, making the first element index 0 Modifying Array Elements: In the above, we've: - Modified the element at index 4 from "Rocky Road" to "Butter Pecan" - Added a new element "Cookie Dough" at index 5 - Expanded the array length automatically when adding beyond current bounds ### Array Length and Common Methods Arrays come with built-in properties and methods that make working with data much easier. Finding Array Length: Key points to remember: - Returns the total number of elements in the array - Updates automatically when elements are added or removed - Provides a dynamic count useful for loops and validation Essential Array Methods: Understanding these methods: - Adds elements with push() (end) and unshift() (beginning) - Removes elements with pop() (end) and shift() (beginning) - Locates elements with indexOf() and checks existence with includes() - Returns useful values like removed elements or position indexes ✅ Try it yourself! Use your browser's console to create and manipulate an array of your own creation. ### 🧠 Array Fundamentals Check: Organizing Your Data Test your array understanding: - Why do you think arrays start counting from 0 instead of 1? - What happens if you try to access an index that doesn't exist (like arr[100] in a 5-element array)? - Can you think of three real-world scenarios where arrays would be useful? ## Loops Think of the famous punishment from Charles Dickens' novels where students had to write lines repeatedly on a slate. Imagine if you could simply instruct someone to "write this sentence 100 times" and have it done automatically. That's exactly what loops do for your code. Loops are like having a tireless assistant who can repeat tasks without error. Whether you need to check every item in a shopping cart or display all the photos in an album, loops handle the repetition efficiently. JavaScript provides several types of loops to choose from. Let's examine each one and understand when to use them. ### For Loop The for loop is like setting a timer - you know exactly how many times you want something to happen. It's super organized and predictable, which makes it perfect when you're working with arrays or need to count things. For Loop Structure: Step by step, here's what's happening: - Initializes the counter variable i to 0 at the start - Checks the condition i < 10 before each iteration - Executes the code block when the condition is true - Increments i by 1 after each iteration with i++ - Stops when the condition becomes false (when i reaches 10) ✅ Run this code in a browser console. What happens when you make small changes to the counter, condition, or iteration expression? Can you make it run backwards, creating a countdown? ### 🗓️ For Loop Mastery Check: Controlled Repetition Evaluate your for loop understanding: - What are the three parts of a for loop, and what does each one do? - How would you loop through an array backwards? - What happens if you forget the increment part (i++)? ### While Loop The while loop is like saying "keep doing this until..." - you might not know exactly how many times it'll run, but you know when to stop. It's perfect for things like asking a user for input until they give you what you need, or searching through data until you find what you're looking for. While Loop Characteristics: - Continues executing as long as the condition is true - Requires manual management of any counter variables - Checks the condition before each iteration - Risks infinite loops if the condition never becomes false Understanding these examples: - Manages the counter variable i manually inside the loop body - Increments the counter to prevent infinite loops - Demonstrates practical use case with user input and attempt limiting - Includes safety mechanisms to prevent endless execution ### ♾️ While Loop Wisdom Check: Condition-Based Repetition Test your while loop comprehension: - What's the main danger when using while loops? - When would you choose a while loop over a for loop? - How can you prevent infinite loops? ### Modern Loop Alternatives JavaScript offers modern loop syntax that can make your code more readable and less error-prone. For...of Loop (ES6+): Key advantages of for...of: - Eliminates index management and potential off-by-one errors - Provides direct access to array elements - Improves code readability and reduces syntax complexity forEach Method: What you need to know about forEach: - Executes a function for each array element - Provides both element value and index as parameters - Cannot be stopped early (unlike traditional loops) - Returns undefined (doesn't create a new array) ✅ Why would you choose a for loop vs. a while loop? 17K viewers had the same question on StackOverflow, and some of the opinions might be interesting to you. ### 🎨 Modern Loop Syntax Check: Embracing ES6+ Assess your modern JavaScript understanding: - What are the advantages of for...of over traditional for loops? - When might you still prefer traditional for loops? - What's the difference between forEach and map? ## Loops and Arrays Combining arrays with loops creates powerful data processing capabilities. This pairing is fundamental to many programming tasks, from displaying lists to calculating statistics. Traditional Array Processing: Let's understand each approach: - Uses array length property to determine loop boundary - Accesses elements by index in traditional for loops - Provides direct element access in for...of loops - Processes each array element exactly once Practical Data Processing Example: Here's how this code works: - Initializes tracking variables for sum and extremes - Processes each grade with a single efficient loop - Accumulates the total for average calculation - Tracks highest and lowest values during iteration - Calculates final statistics after loop completion ✅ Experiment with looping over an array of your own making in your browser's console. --- ## GitHub Copilot Agent Challenge 🚀 Use the Agent mode to complete the following challenge: Description: Build a comprehensive data processing function that combines arrays and loops to analyze a dataset and generate meaningful insights. Prompt: Create a function called analyzeGrades that takes an array of student grade objects (each containing name and score properties) and returns an object with statistics including the highest score, lowest score, average score, count of students who passed (score >= 70), and an array of student names who scored above average. Use at least two different loop types in your solution. Learn more about agent mode here. ## 🚀 Challenge JavaScript offers several modern array methods that can replace traditional loops for specific tasks. Explore forEach, for-of, map, filter, and reduce. Your challenge: Refactor the student grades example using at least three different array methods. Notice how much cleaner and more readable the code becomes with modern JavaScript syntax. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Arrays in JavaScript have many methods attached to them, that are extremely useful for data manipulation. Read up on these methods and try some of them out (like push, pop, slice and splice) on an array of your creation. ## Assignment Loop an Array --- ## 📊 Your Arrays & Loops Toolkit Summary --- ## 🚀 Your Arrays & Loops Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Create an array of your favorite movies and access specific elements - [ ] Write a for loop that counts from 1 to 10 - [ ] Try the modern array methods challenge from the lesson - [ ] Practice array indexing in your browser console ### 🎯 What You Can Accomplish This Hour - [ ] Complete the post-lesson quiz and review any challenging concepts - [ ] Build the comprehensive grade analyzer from the GitHub Copilot challenge - [ ] Create a simple shopping cart that adds and removes items - [ ] Practice converting between different loop types - [ ] Experiment with array methods like push, pop, slice, and splice ### 📅 Your Week-Long Data Processing Journey - [ ] Complete the "Loop an Array" assignment with creative enhancements - [ ] Build a to-do list application using arrays and loops - [ ] Create a simple statistics calculator for numerical data - [ ] Practice with MDN array methods - [ ] Build a photo gallery or music playlist interface - [ ] Explore functional programming with map, filter, and reduce ### 🌟 Your Month-Long Transformation - [ ] Master advanced array operations and performance optimization - [ ] Build a complete data visualization dashboard - [ ] Contribute to open source projects involving data processing - [ ] Teach someone else about arrays and loops with practical examples - [ ] Create a personal library of reusable data processing functions - [ ] Explore algorithms and data structures built on arrays ### 🏆 Final Data Processing Champion Check-in Celebrate your array and loop mastery: - What's the most useful array operation you've learned for real-world applications? - Which loop type feels most natural to you and why? - How has understanding arrays and loops changed your approach to organizing data? - What complex data processing task would you like to tackle next? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: This document has been translated using the AI translation service Co-op Translator. While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

array,loop

Introducción a JavaScript

JavaScript es el lenguaje de la web. En estas cuatro lecciones, aprenderás sus conceptos básicos. ### Temas 1. Variables y Tipos de Datos 2. Funciones y Métodos 3. Tomando Decisiones con JavaScript 4. Arrays y Bucles ### Créditos Estas lecciones fueron escritas con ♥️ por Jasmine Greenaway, Christopher Harrison y Chris Noring Descargo de responsabilidad: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.

javascript

Fundamentos de JavaScript: Tipos de Datos

Los tipos de datos son uno de los conceptos fundamentales en JavaScript que encontrarás en cada programa que escribas. Piensa en los tipos de datos como el sistema de archivo que usaban los antiguos bibliotecarios en Alejandría: tenían lugares específicos para pergaminos que contenían poesía, matemáticas y registros históricos. JavaScript organiza la información de manera similar con diferentes categorías para distintos tipos de datos. En esta lección, exploraremos los tipos de datos principales que hacen que JavaScript funcione. Aprenderás cómo manejar números, texto, valores verdadero/falso y entenderás por qué elegir el tipo correcto es esencial para tus programas. Estos conceptos pueden parecer abstractos al principio, pero con práctica, se volverán naturales. Comprender los tipos de datos aclarará todo lo demás en JavaScript. Así como los arquitectos necesitan entender diferentes materiales antes de construir una catedral, estos fundamentos sostendrán todo lo que construyas en adelante. ## Cuestionario previo a la lección Cuestionario previo a la lección Esta lección cubre los conceptos básicos de JavaScript, el lenguaje que proporciona interactividad en la web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables en JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Tipos de datos en JavaScript") ¡Comencemos con las variables y los tipos de datos que las llenan! ## Variables Las variables son bloques de construcción fundamentales en la programación. Como los frascos etiquetados que los alquimistas medievales usaban para guardar diferentes sustancias, las variables te permiten almacenar información y darle un nombre descriptivo para que puedas referenciarla después. ¿Necesitas recordar la edad de alguien? Almacénala en una variable llamada age. ¿Quieres rastrear el nombre de un usuario? Guárdalo en una variable llamada userName. Nos enfocaremos en el enfoque moderno para crear variables en JavaScript. Las técnicas que aprenderás aquí representan años de evolución del lenguaje y mejores prácticas desarrolladas por la comunidad de programación. Crear y declarar una variable tiene la siguiente sintaxis [keyword] [name]. Se compone de dos partes: - Palabra clave (Keyword). Usa let para variables que pueden cambiar, o const para valores que permanecen iguales. - El nombre de la variable, este es un nombre descriptivo que eliges tú mismo. ✅ La palabra clave let fue introducida en ES6 y da a tu variable un llamado _alcance de bloque_. Se recomienda usar let o const en lugar de la antigua palabra clave var. Cubriremos los alcances de bloque con más profundidad en partes futuras. ### Tarea - trabajando con variables 1. Declara una variable. Comencemos creando nuestra primera variable: ```javascript let myVariable; ``` Lo que esto logra: - Esto indica a JavaScript que cree una ubicación de almacenamiento llamada myVariable - JavaScript asigna espacio en memoria para esta variable - La variable actualmente no tiene valor (undefined) 2. Asígnale un valor. Ahora pongamos algo en nuestra variable: ```javascript myVariable = 123; ``` Cómo funciona la asignación: - El operador = asigna el valor 123 a nuestra variable - La variable ahora contiene este valor en lugar de estar indefinida - Puedes referenciar este valor en todo tu código usando myVariable > Nota: el uso de = en esta lección significa que utilizamos un "operador de asignación", usado para establecer un valor a una variable. No denota igualdad. 3. Hazlo de la manera inteligente. En realidad, combinemos esos dos pasos: ```javascript let myVariable = 123; ``` Este enfoque es más eficiente: - Estás declarando la variable y asignando un valor en una sola declaración - Esta es la práctica estándar entre desarrolladores - Reduce la longitud del código mientras mantiene la claridad 4. Cambia de opinión. ¿Y si queremos almacenar un número diferente? ```javascript myVariable = 321; ``` Entendiendo la re-asignación: - La variable ahora contiene 321 en lugar de 123 - El valor anterior es reemplazado – las variables almacenan solo un valor a la vez - Esta mutabilidad es la característica clave de las variables declaradas con let ✅ ¡Pruébalo! Puedes escribir JavaScript directamente en tu navegador. Abre una ventana del navegador y navega a Herramientas de desarrollador. En la consola, encontrarás un prompt; escribe let myVariable = 123, presiona enter, luego escribe myVariable. ¿Qué pasa? Nota, aprenderás más sobre estos conceptos en lecciones siguientes. ### 🧠 Chequeo de dominio sobre variables: Sentirse cómodo Veamos cómo te sientes acerca de las variables: - ¿Puedes explicar la diferencia entre declarar y asignar una variable? - ¿Qué sucede si intentas usar una variable antes de declararla? - ¿Cuándo elegirías let en lugar de const para una variable? ## Constantes A veces necesitas almacenar información que nunca debería cambiar durante la ejecución del programa. Piensa en las constantes como los principios matemáticos que Euclides estableció en la antigua Grecia – una vez probados y documentados, permanecieron fijos para referencia futura. Las constantes funcionan de manera similar a las variables, pero con una restricción importante: una vez que asignas su valor, no puede cambiar. Esta inmutabilidad ayuda a prevenir modificaciones accidentales a valores críticos en tu programa. La declaración e inicialización de una constante sigue los mismos conceptos que una variable, salvo que se usa la palabra clave const. Normalmente las constantes se declaran con todas las letras en mayúsculas. Esto es lo que hace este código: - Crea una constante llamada MY_VARIABLE con el valor 123 - Usa la convención de nombres en mayúsculas para constantes - Impide cualquier cambio futuro a este valor Las constantes tienen dos reglas principales: - Debes darle un valor de inmediato – no se permiten constantes vacías - Nunca puedes cambiar ese valor – JavaScript lanzará un error si lo intentas. Veamos a qué me refiero: Valor simple - Lo siguiente NO está permitido: ```javascript const PI = 3; PI = 4; // no permitido ``` Lo que necesitas recordar: - Los intentos de re-asignar una constante causarán un error - Protege valores importantes de cambios accidentales - Garantiza que el valor permanezca consistente en tu programa Referencia a objeto protegida - Lo siguiente NO está permitido: ```javascript const obj = { a: 3 }; obj = { b: 5 } // no permitido ``` Entendiendo estos conceptos: - Evita reemplazar el objeto entero por uno nuevo - Protege la referencia al objeto original - Mantiene la identidad del objeto en memoria El valor dentro del objeto no está protegido - Lo siguiente SÍ está permitido: ```javascript const obj = { a: 3 }; obj.a = 5; // permitido ``` Desglosando lo que pasa aquí: - Modifica el valor de la propiedad dentro del objeto - Mantiene la misma referencia al objeto - Demuestra que el contenido del objeto puede cambiar mientras la referencia permanece constante > Nota, un const significa que la referencia está protegida de re-asignación. El valor no es _inmutable_ y puede cambiar, especialmente si es una estructura compleja como un objeto. ## Tipos de datos JavaScript organiza la información en diferentes categorías llamadas tipos de datos. Este concepto es paralelo a cómo los antiguos eruditos categorizaban el conocimiento – Aristóteles distinguía entre diferentes tipos de razonamiento, sabiendo que los principios lógicos no podían aplicarse uniformemente a la poesía, las matemáticas y la filosofía natural. Los tipos de datos importan porque diferentes operaciones funcionan con diferentes tipos de información. Así como no puedes hacer aritmética con el nombre de una persona o alfabetizar una ecuación matemática, JavaScript requiere el tipo de dato apropiado para cada operación. Entender esto previene errores y hace tu código más fiable. Las variables pueden almacenar muchos tipos diferentes de valores, como números y texto. Estos diversos tipos de valores se conocen como tipo de dato. Los tipos de datos son una parte importante del desarrollo de software porque ayudan a los desarrolladores a decidir cómo se debe escribir el código y cómo debe funcionar el software. Además, algunos tipos de datos tienen características únicas que ayudan a transformar o extraer información adicional de un valor. ✅ Los tipos de datos también son referidos como primitivas de datos de JavaScript, ya que son los tipos de datos de nivel más bajo proporcionados por el lenguaje. Hay 7 tipos de datos primitivos: string, number, bigint, boolean, undefined, null y symbol. Tómate un minuto para visualizar qué podría representar cada uno de estos primitivos. ¿Qué es una cebra? ¿Y 0? ¿true? ### Números Los números son el tipo de dato más directo en JavaScript. Ya sea que estés trabajando con números enteros como 42, decimales como 3.14 o números negativos como -5, JavaScript los maneja de forma uniforme. ¿Recuerdas nuestra variable de antes? Ese 123 que almacenamos era en realidad del tipo número: Características clave: - JavaScript reconoce automáticamente los valores numéricos - Puedes realizar operaciones matemáticas con estas variables - No se requiere declarar el tipo explícitamente Las variables pueden almacenar todo tipo de números, incluyendo decimales o negativos. Los números también pueden usarse con operadores aritméticos, cubiertos en la sección siguiente. ### Operadores aritméticos Los operadores aritméticos te permiten realizar cálculos matemáticos en JavaScript. Estos operadores siguen los mismos principios que los matemáticos han usado por siglos – los mismos símbolos que aparecieron en las obras de eruditos como Al-Juarismi, quien desarrolló la notación algebraica. Los operadores funcionan como esperarías en la matemática tradicional: más para suma, menos para resta, y así sucesivamente. Hay varios tipos de operadores para usar al realizar funciones aritméticas, y algunos son listados aquí: ✅ ¡Pruébalo! Intenta una operación aritmética en la consola de tu navegador. ¿Te sorprenden los resultados? ### 🧮 Chequeo de habilidades matemáticas: Calculando con confianza Pon a prueba tu comprensión aritmética: - ¿Cuál es la diferencia entre / (división) y % (residuo)? - ¿Puedes predecir qué valor tiene 10 % 3? (Pista: no es 3.33...) - ¿Por qué podría ser útil el operador residuo en programación? ### Cadenas (Strings) En JavaScript, los datos textuales se representan como cadenas. El término "string" proviene del concepto de caracteres enlazados en secuencia, muy parecido a cómo los escribas en monasterios medievales unían letras para formar palabras y oraciones en sus manuscritos. Las cadenas son fundamentales para el desarrollo web. Cada pieza de texto mostrada en un sitio web – nombres de usuario, etiquetas de botones, mensajes de error, contenido – se maneja como datos de tipo string. Entender las cadenas es esencial para crear interfaces funcionales. Las cadenas son conjuntos de caracteres que residen entre comillas simples o dobles. Entendiendo estos conceptos: - Usa comillas simples ' o dobles " para definir cadenas - Almacena datos de texto que pueden incluir letras, números y símbolos - Asigna valores string a variables para uso posterior - Requiere comillas para distinguir texto de nombres de variables Recuerda usar comillas al escribir una cadena, o de lo contrario JavaScript asumirá que es un nombre de variable. ### Formateando cadenas La manipulación de cadenas te permite combinar elementos de texto, incorporar variables y crear contenido dinámico que responde al estado del programa. Esta técnica te permite construir texto programáticamente. A menudo necesitas unir varias cadenas juntas – este proceso se llama concatenación. Para concatenar dos o más cadenas, o unirlas, usa el operador +. Paso a paso, esto es lo que sucede: - Combina múltiples cadenas usando el operador + - Une cadenas directamente sin espacios en el primer ejemplo - Agrega caracteres de espacio " " entre cadenas para legibilidad - Inserta puntuación como comas para crear un formato apropiado ✅ ¿Por qué 1 + 1 = 2 en JavaScript, pero '1' + '1' = 11? Piénsalo. ¿Y '1' + 1? Los literales de plantilla son otra forma de formatear cadenas, excepto que en lugar de comillas se utilizan las comillas invertidas (backticks). Cualquier cosa que no sea texto plano debe ir dentro de los marcadores ${ }. Esto incluye cualquier variable que pueda ser una cadena. Entendamos cada parte: - Usa comillas invertidas ` `` en lugar de comillas normales para crear literales de plantilla - Inserta variables directamente usando la sintaxis ${} - Preserva espacios y formato exactamente como se escribe - Proporciona una forma más limpia de crear cadenas complejas con variables Puedes lograr tus objetivos de formato con cualquiera de los dos métodos, pero los literales de plantilla respetarán cualquier espacio y salto de línea. ✅ ¿Cuándo usarías un literal de plantilla frente a una cadena simple? ### 🔤 Chequeo de Maestría de Cadenas: Confianza en Manipulación de Texto Evalúa tus habilidades con cadenas: - ¿Puedes explicar por qué '1' + '1' es igual a '11' en lugar de 2? - ¿Qué método de cadenas te parece más legible: concatenación o literales de plantilla? - ¿Qué pasa si olvidas las comillas alrededor de una cadena? ### Booleanos Los booleanos representan la forma más simple de datos: solo pueden tener uno de dos valores – true o false. Este sistema de lógica binaria se remonta al trabajo de George Boole, un matemático del siglo XIX que desarrolló el álgebra booleana. A pesar de su simplicidad, los booleanos son esenciales para la lógica de los programas. Permiten que tu código tome decisiones basadas en condiciones – si un usuario ha iniciado sesión, si se hizo clic en un botón o si ciertos criterios se cumplen. Los booleanos solo pueden tener dos valores: true o false. Los booleanos pueden ayudar a decidir qué líneas de código deben ejecutarse cuando se cumplen ciertas condiciones. En muchos casos, los operadores ayudan a establecer el valor de un booleano y a menudo notarás y escribirás variables que se inicializan o actualizan con un operador. En lo anterior, hemos: - Creado una variable que almacena el valor booleano true - Demostrado cómo almacenar el valor booleano false - Usado las palabras clave exactas true y false (sin comillas) - Preparado estas variables para usarse en declaraciones condicionales ✅ Una variable puede considerarse ‘truthy’ si se evalúa como booleano true. Curiosamente, en JavaScript, todos los valores son truthy a menos que se definan como falsy. ### 🎯 Chequeo de Lógica Booleana: Habilidades para Tomar Decisiones Pon a prueba tu comprensión de booleanos: - ¿Por qué crees que JavaScript tiene valores “truthy” y “falsy” además de solo true y false? - ¿Puedes predecir cuál de estos es falsy: 0, "0", [], "false"? - ¿Cómo podrían ser útiles los booleanos para controlar el flujo del programa? --- ## 📊 Resumen de tu Kit de Herramientas de Tipos de Datos ## Desafío de Agente GitHub Copilot 🚀 Usa el modo Agente para completar el siguiente desafío: Descripción: Crea un administrador de información personal que demuestre todos los tipos de datos de JavaScript que has aprendido en esta lección manejando escenarios de datos del mundo real. Enunciado: Construye un programa JavaScript que cree un objeto de perfil de usuario que contenga: el nombre de una persona (cadena), edad (número), estado de estudiante (booleano), colores favoritos como arreglo, y un objeto de dirección con propiedades de calle, ciudad y código postal. Incluye funciones para mostrar la información del perfil y actualizar campos individuales. Asegúrate de demostrar concatenación de cadenas, literales de plantilla, operaciones aritméticas con la edad y lógica booleana para el estado de estudiante. Aprende más sobre el modo agente aquí. ## 🚀 Desafío JavaScript tiene ciertos comportamientos que pueden sorprender a los desarrolladores. Aquí hay un ejemplo clásico para explorar: intenta escribir esto en la consola de tu navegador: let age = 1; let Age = 2; age == Age y observa el resultado. Devuelve false – ¿puedes determinar por qué? Esto representa uno de muchos comportamientos de JavaScript que vale la pena entender. La familiaridad con estas peculiaridades te ayudará a escribir código más confiable y a depurar problemas con mayor eficacia. ## Examen Post-Lección Examen post-lección ## Repaso y Autoestudio Consulta esta lista de ejercicios de JavaScript y prueba uno. ¿Qué aprendiste? ## Tarea Práctica de Tipos de Datos ## 🚀 Tu Cronograma de Maestría en Tipos de Datos de JavaScript ### ⚡ Qué puedes hacer en los próximos 5 minutos - [ ] Abre la consola de tu navegador y crea 3 variables con diferentes tipos de datos - [ ] Intenta el desafío: let age = 1; let Age = 2; age == Age y descubre por qué es falso - [ ] Practica la concatenación de cadenas con tu nombre y número favorito - [ ] Prueba qué pasa cuando sumas un número a una cadena ### 🎯 Qué puedes lograr en esta hora - [ ] Completa el examen post-lección y repasa cualquier concepto confuso - [ ] Crea una mini calculadora que sume, reste, multiplique y divida dos números - [ ] Construye un formato simple de nombre usando literales de plantilla - [ ] Explora las diferencias entre los operadores de comparación == y === - [ ] Practica la conversión entre diferentes tipos de datos ### 📅 Tu Fundamento de JavaScript para Toda la Semana - [ ] Completa la tarea con confianza y creatividad - [ ] Crea un objeto de perfil personal usando todos los tipos de datos aprendidos - [ ] Practica con ejercicios de JavaScript de CSS-Tricks - [ ] Crea un validador de formularios simple usando lógica booleana - [ ] Experimenta con tipos de datos arreglo y objeto (vista previa de próximas lecciones) - [ ] Únete a una comunidad de JavaScript y haz preguntas sobre tipos de datos ### 🌟 Tu Transformación Mensual - [ ] Integra el conocimiento de tipos de datos en proyectos de programación más grandes - [ ] Entiende cuándo y por qué usar cada tipo de dato en aplicaciones reales - [ ] Ayuda a otros principiantes a comprender los fundamentos de JavaScript - [ ] Construye una pequeña aplicación que administre diferentes tipos de datos del usuario - [ ] Explora conceptos avanzados de tipos de datos como coerción de tipos y igualdad estricta - [ ] Contribuye a proyectos JavaScript de código abierto mejorando la documentación ### 🧠 Chequeo Final de Maestría en Tipos de Datos Celebra tu base en JavaScript: - ¿Qué tipo de dato te sorprendió más por su comportamiento? - ¿Qué tan cómodo te sientes explicando variables versus constantes a un amigo? - ¿Cuál es la cosa más interesante que descubriste sobre el sistema de tipos de JavaScript? - ¿Qué aplicación del mundo real imaginas construir con estos fundamentos? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas derivadas del uso de esta traducción. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Fundamentos de JavaScript: Métodos y Funciones

## Cuestionario Pre-Clase Cuestionario pre-clase Escribir el mismo código repetidamente es una de las frustraciones más comunes de la programación. Las funciones resuelven este problema al permitirte empaquetar código en bloques reutilizables. Piensa en las funciones como las partes estandarizadas que hicieron revolucionaria la línea de ensamblaje de Henry Ford: una vez que creas un componente confiable, puedes usarlo donde sea necesario sin reconstruir desde cero. Las funciones te permiten agrupar fragmentos de código para que puedas reutilizarlos a lo largo de tu programa. En lugar de copiar y pegar la misma lógica en todas partes, puedes crear una función una vez y llamarla cuando la necesites. Este enfoque mantiene tu código organizado y facilita mucho las actualizaciones. En esta lección, aprenderás a crear tus propias funciones, pasarles información y obtener resultados útiles. Descubrirás la diferencia entre funciones y métodos, conocerás enfoques modernos de sintaxis y verás cómo las funciones pueden trabajar con otras funciones. Construiremos estos conceptos paso a paso. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funciones Una función es un bloque de código autónomo que realiza una tarea específica. Encapsula lógica que puedes ejecutar cuando sea necesario. En lugar de escribir el mismo código múltiples veces a lo largo de tu programa, puedes empaquetarlo en una función y llamar a esa función cuando la necesites. Este enfoque mantiene tu código limpio y facilita mucho las actualizaciones. Considera el desafío que sería mantener la lógica si tuvieras que cambiarla en 20 lugares diferentes de tu base de código. Nombrar tus funciones de forma descriptiva es esencial. Una función bien nombrada comunica su propósito claramente: cuando ves cancelTimer(), entiendes inmediatamente lo que hace, así como un botón claramente etiquetado te dice exactamente qué sucederá cuando lo presiones. ## Crear y llamar a una función Examinemos cómo crear una función. La sintaxis sigue un patrón consistente: Desglosemos esto: - La palabra clave function le dice a JavaScript "¡Oye, estoy creando una función!" - nameOfFunction es donde le das a tu función un nombre descriptivo - Los paréntesis () son donde puedes agregar parámetros (luego veremos esto) - Las llaves {} contienen el código real que se ejecuta cuando llamas a la función Vamos a crear una función simple de saludo para ver esto en acción: Esta función imprime "Hello, world!" en la consola. Una vez que la defines, puedes usarla tantas veces como necesites. Para ejecutar (o "llamar") tu función, escribe su nombre seguido de paréntesis. JavaScript te permite definir tu función antes o después de llamarla; el motor de JavaScript manejará el orden de ejecución. Cuando ejecutas esta línea, se ejecuta todo el código dentro de tu función displayGreeting, mostrando "Hello, world!" en la consola de tu navegador. Puedes llamar esta función repetidamente. ### 🧠 Chequeo de Fundamentos de Funciones: Construyendo tus Primeras Funciones Veamos cómo te sientes respecto a funciones básicas: - ¿Puedes explicar por qué usamos llaves {} en las definiciones de funciones? - ¿Qué sucede si escribes displayGreeting sin los paréntesis? - ¿Por qué podrías querer llamar a la misma función varias veces? ### Buenas prácticas para funciones Aquí tienes algunos consejos para ayudarte a escribir funciones excelentes: - Dale a tus funciones nombres claros y descriptivos; tu yo futuro te lo agradecerá. - Usa camelCase para nombres de varias palabras (como calculateTotal en lugar de calculate_total) - Mantén cada función enfocada en hacer una sola cosa bien ## Pasar información a una función Nuestra función displayGreeting es limitada, solo puede mostrar "Hello, world!" para todos. Los parámetros nos permiten hacer que las funciones sean más flexibles y útiles. Los parámetros actúan como marcadores de posición donde puedes insertar diferentes valores cada vez que usas la función. De esta forma, la misma función puede funcionar con información diferente en cada llamada. Listas los parámetros dentro de los paréntesis al definir tu función, separando múltiples parámetros con comas: Cada parámetro actúa como un marcador de posición: cuando alguien llama a tu función, proporciona valores reales que se insertan en esos lugares. Actualicemos nuestra función de saludo para aceptar el nombre de alguien: Fíjate cómo estamos usando las comillas invertidas (` `) y ${}` para insertar el nombre directamente en nuestro mensaje; esto se llama literal de plantilla, y es una forma muy útil de construir cadenas con variables mezcladas. Ahora, cuando llamamos a nuestra función, podemos pasar cualquier nombre: JavaScript toma la cadena 'Christopher', la asigna al parámetro name y crea el mensaje personalizado "Hello, Christopher!" ## Valores predeterminados ¿Qué pasa si queremos hacer que algunos parámetros sean opcionales? ¡Ahí es donde los valores predeterminados son útiles! Digamos que queremos que las personas puedan personalizar la palabra de saludo, pero si no especifican una, simplemente usaremos "Hello" como valor por defecto. Puedes establecer valores predeterminados usando el signo igual, igual que al definir una variable: Aquí, name sigue siendo obligatorio, pero salutation tiene un valor de respaldo 'Hello' si nadie provee un saludo diferente. Ahora podemos llamar a esta función de dos formas diferentes: En la primera llamada, JavaScript usa el "Hello" predeterminado porque no especificamos un saludo. En la segunda llamada, usa nuestro "Hi" personalizado. Esta flexibilidad hace que las funciones sean adaptables a diferentes escenarios. ### 🎛️ Chequeo de Maestría en Parámetros: Haciendo Funciones Flexibles Pon a prueba tu comprensión sobre parámetros: - ¿Cuál es la diferencia entre un parámetro y un argumento? - ¿Por qué los valores predeterminados son útiles en programación real? - ¿Puedes predecir qué ocurre si pasas más argumentos que parámetros? ## Valores de retorno Nuestras funciones hasta ahora solo imprimían mensajes en la consola, pero ¿qué pasa si quieres que una función calcule algo y te devuelva el resultado? Ahí es donde entran los valores de retorno. En lugar de solo mostrar algo, una función puede entregarte un valor que puedes almacenar en una variable o usar en otras partes de tu código. Para enviar un valor de vuelta, usas la palabra clave return seguida de lo que quieres devolver: Esto es algo importante: cuando una función encuentra una instrucción return, inmediatamente deja de ejecutarse y envía ese valor a quien la llamó. Modifiquemos nuestra función de saludo para que devuelva el mensaje en lugar de imprimirlo: Ahora, en lugar de imprimir el saludo, esta función crea el mensaje y lo devuelve. Para usar el valor devuelto, podemos almacenarlo en una variable igual que cualquier otro valor: Ahora greetingMessage contiene "Hello, Christopher" y podemos usarlo en cualquier lugar de nuestro código: mostrarlo en una página web, incluirlo en un correo o pasarlo a otra función. ### 🔄 Chequeo de Valores de Retorno: Obtener Resultados Evalúa tu comprensión sobre valores de retorno: - ¿Qué pasa con el código después de una instrucción return en una función? - ¿Por qué es mejor retornar valores en lugar de solo imprimir en consola? - ¿Puede una función devolver diferentes tipos de valores (cadena, número, booleano)? ## Funciones como parámetros para funciones Las funciones pueden ser pasadas como parámetros a otras funciones. Aunque este concepto puede parecer complejo al principio, es una característica poderosa que permite patrones de programación flexibles. Este patrón es muy común cuando quieres decir "cuando algo suceda, haz esta otra cosa". Por ejemplo, "cuando el temporizador termine, ejecuta este código" o "cuando el usuario haga clic en el botón, llama a esta función". Veamos setTimeout, que es una función integrada que espera un cierto tiempo y luego ejecuta algún código. Tenemos que decirle qué código ejecutar, ¡perfecto para pasar una función! Prueba este código: después de 3 segundos, verás un mensaje: Fíjate cómo pasamos displayDone (sin paréntesis) a setTimeout. No estamos llamando a la función nosotros mismos, estamos entregándola a setTimeout y diciendo "llama a esto en 3 segundos". ### Funciones anónimas A veces necesitas una función para una sola cosa y no quieres darle un nombre. Piénsalo: si solo vas a usar una función una vez, ¿por qué saturar tu código con un nombre extra? JavaScript te permite crear funciones anónimas: funciones sin nombre que puedes definir justo donde las necesitas. Así podemos reescribir nuestro ejemplo del temporizador usando una función anónima: Esto logra el mismo resultado, pero la función está definida directamente dentro de la llamada setTimeout, eliminando la necesidad de una declaración de función separada. ### Funciones flecha JavaScript moderno tiene una forma aún más corta de escribir funciones llamada funciones flecha. Usan => (que parece una flecha – ¿ves?) y son muy populares entre los desarrolladores. Las funciones flecha te permiten omitir la palabra clave function y escribir código más conciso. Aquí nuestro ejemplo del temporizador usando una función flecha: Los () son donde irían los parámetros (vacíos en este caso), luego viene la flecha => y finalmente el cuerpo de la función entre llaves. Esto proporciona la misma funcionalidad con una sintaxis más concisa. ### Cuándo usar cada estrategia ¿Cuándo deberías usar cada enfoque? Una regla práctica: si vas a usar la función varias veces, dale un nombre y defínela por separado. Si es para un uso específico, considera una función anónima. Ambas, funciones flecha y la sintaxis tradicional, son opciones válidas, aunque las funciones flecha predominan en las bases de código modernas de JavaScript. ### 🎨 Chequeo de Maestría en Estilos de Funciones: Elegir la Sintaxis Correcta Pon a prueba tu comprensión de sintaxis: - ¿Cuándo podrías preferir funciones flecha sobre la sintaxis tradicional? - ¿Cuál es la principal ventaja de las funciones anónimas? - ¿Puedes pensar en una situación donde una función nombrada es mejor que una anónima? --- ## 🚀 Desafío ¿Puedes articular en una oración la diferencia entre funciones y métodos? ¡Inténtalo! ## Desafío del Agente GitHub Copilot 🚀 Usa el modo Agente para completar el siguiente desafío: Descripción: Crea una biblioteca de utilidades matemáticas que demuestre diferentes conceptos de funciones cubiertos en esta lección, incluyendo parámetros, valores predeterminados, valores de retorno y funciones flecha. Indicaciones: Crea un archivo JavaScript llamado mathUtils.js que contenga las siguientes funciones: 1. Una función add que tome dos parámetros y devuelva su suma 2. Una función multiply con valores de parámetro predeterminados (el segundo parámetro predeterminado a 1) 3. Una función flecha square que tome un número y devuelva su cuadrado 4. Una función calculate que acepte otra función como parámetro y dos números, luego aplique la función a esos números 5. Demuestra la llamada a cada función con casos de prueba apropiados Aprende más sobre modo agente aquí. ## Cuestionario Post-Clase Cuestionario post-clase ## Repaso y Autoestudio Vale la pena leer un poco más sobre funciones flecha, ya que se usan cada vez más en las bases de código. Practica escribir una función y luego reescribirla con esta sintaxis. ## Tarea Diviértete con las Funciones --- ## 🧰 Resumen de tu Kit de Herramientas de Funciones en JavaScript --- ## 🚀 Tu Cronograma de Maestría en Funciones de JavaScript ### ⚡ Lo que Puedes Hacer en los Próximos 5 Minutos - [ ] Escribir una función simple que devuelva tu número favorito - [ ] Crear una función con dos parámetros que los sume juntos - [ ] Intenta convertir una función tradicional a la sintaxis de función flecha - [ ] Practica el desafío: explica la diferencia entre funciones y métodos ### 🎯 Lo que puedes lograr en esta hora - [ ] Completa el cuestionario posterior a la lección y revisa cualquier concepto confuso - [ ] Construye la biblioteca de utilidades matemáticas del desafío de GitHub Copilot - [ ] Crea una función que use otra función como parámetro - [ ] Practica escribir funciones con parámetros por defecto - [ ] Experimenta con literales de plantilla en valores de retorno de funciones ### 📅 Tu dominio de funciones en una semana - [ ] Completa la tarea "Diversión con funciones" con creatividad - [ ] Refactoriza algún código repetitivo que hayas escrito en funciones reutilizables - [ ] Construye una calculadora pequeña usando solo funciones (sin variables globales) - [ ] Practica funciones flecha con métodos de arreglos como map() y filter() - [ ] Crea una colección de funciones utilitarias para tareas comunes - [ ] Estudia funciones de orden superior y conceptos de programación funcional ### 🌟 Tu transformación en un mes - [ ] Domina conceptos avanzados de funciones como cierres y alcance - [ ] Construye un proyecto que use fuertemente la composición de funciones - [ ] Contribuye al código abierto mejorando la documentación de funciones - [ ] Enseña a alguien más sobre funciones y diferentes estilos de sintaxis - [ ] Explora paradigmas de programación funcional en JavaScript - [ ] Crea una biblioteca personal de funciones reutilizables para futuros proyectos ### 🏆 Revisión final del campeón de funciones Celebra tu dominio de las funciones: - ¿Cuál es la función más útil que has creado hasta ahora? - ¿Cómo ha cambiado tu forma de pensar sobre la organización del código el aprendizaje sobre funciones? - ¿Qué sintaxis de función prefieres y por qué? - ¿Qué problema del mundo real resolverías escribiendo una función? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables por malentendidos o interpretaciones erróneas derivadas del uso de esta traducción. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Conceptos Básicos de JavaScript: Tomando Decisiones

¿Alguna vez te has preguntado cómo las aplicaciones toman decisiones inteligentes? Como cómo un sistema de navegación elige la ruta más rápida, o cómo un termostato decide cuándo encender la calefacción. Este es el concepto fundamental de toma de decisiones en programación. Así como la Máquina Analítica de Charles Babbage fue diseñada para seguir diferentes secuencias de operaciones basadas en condiciones, los programas modernos de JavaScript necesitan tomar decisiones basadas en circunstancias cambiantes. Esta capacidad de ramificar y tomar decisiones es lo que transforma el código estático en aplicaciones inteligentes y sensibles. En esta lección, aprenderás cómo implementar lógica condicional en tus programas. Exploraremos sentencias condicionales, operadores de comparación y expresiones lógicas que permiten a tu código evaluar situaciones y responder adecuadamente. ## Cuestionario Previo a la Lección Cuestionario previo a la lección La capacidad de tomar decisiones y controlar el flujo del programa es un aspecto fundamental de la programación. Esta sección cubre cómo controlar la ruta de ejecución de tus programas JavaScript usando valores Booleanos y lógica condicional. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Un Breve Repaso sobre Booleanos Antes de explorar la toma de decisiones, repasemos los valores Booleanos de nuestra lección anterior. Llamados así por el matemático George Boole, estos valores representan estados binarios – o true o false. No hay ambigüedad, no hay un término medio. Estos valores binarios forman la base de toda lógica computacional. Cada decisión que toma tu programa en última instancia se reduce a una evaluación Booleana. Crear variables Booleanas es sencillo: Esto crea dos variables con valores Booleanos explícitos. ✅ Los booleanos llevan el nombre del matemático, filósofo y lógico inglés George Boole (1815–1864). ## Operadores de Comparación y Booleanos En la práctica, rara vez asignarás manualmente valores Booleanos. En su lugar, los generarás evaluando condiciones: "¿Es este número mayor que aquel?" o "¿Son estos valores iguales?" Los operadores de comparación permiten estas evaluaciones. Comparan valores y devuelven resultados Booleanos basados en la relación entre los operandos. ✅ Comprueba tu conocimiento escribiendo algunas comparaciones en la consola de tu navegador. ¿Te sorprende alguno de los valores devueltos? ### 🧠 Chequeo de Dominio de Comparaciones: Entendiendo la Lógica Booleana Pon a prueba tu comprensión de comparaciones: - ¿Por qué crees que === (igualdad estricta) se prefiere generalmente sobre == (igualdad laxa)? - ¿Puedes predecir qué devuelve 5 === '5'? ¿Y 5 == '5'? - ¿Cuál es la diferencia entre !== y !=? ## Sentencia If La sentencia if es como hacer una pregunta en tu código. "Si esta condición es verdadera, entonces haz esto." Probablemente es la herramienta más importante que usarás para tomar decisiones en JavaScript. Así funciona: La condición va dentro de los paréntesis, y si es true, JavaScript ejecuta el código dentro de las llaves. Si es false, JavaScript simplemente salta ese bloque completo. A menudo usarás operadores de comparación para crear estas condiciones. Veamos un ejemplo práctico: Como 1000 >= 800 se evalúa a true, el código dentro del bloque se ejecuta, mostrando "¡Consiguiendo una laptop nueva!" en la consola. ## Sentencia If..Else ¿Pero qué pasa si quieres que tu programa haga algo diferente cuando la condición es falsa? Ahí es donde entra else – es como tener un plan de respaldo. La sentencia else te da una forma de decir "si esta condición no es verdadera, haz esta otra cosa en su lugar." Ahora, dado que 500 >= 800 es false, JavaScript salta el primer bloque y ejecuta el bloque else en su lugar. Verás "¡No puedo permitirme una laptop nueva, todavía!" en la consola. ✅ Prueba tu comprensión de este código y el siguiente ejecutándolos en la consola de un navegador. Cambia los valores de las variables currentMoney y laptopPrice para modificar la salida de console.log(). ### 🎯 Chequeo de Lógica If-Else: Caminos Ramificados Evalúa tu comprensión de lógica condicional: - ¿Qué pasa si currentMoney es exactamente igual a laptopPrice? - ¿Puedes pensar en un escenario del mundo real donde la lógica if-else sería útil? - ¿Cómo podrías extender esto para manejar múltiples rangos de precio? ## Sentencia Switch A veces necesitas comparar un valor contra múltiples opciones. Mientras podrías encadenar varias sentencias if..else, este enfoque se vuelve difícil de manejar. La sentencia switch proporciona una estructura más limpia para manejar múltiples valores discretos. El concepto se asemeja a los sistemas mecánicos de conmutación usados en los primeros intercambios telefónicos – un valor de entrada determina qué ruta específica seguirá la ejecución. Está estructurado así: - JavaScript evalúa la expresión una vez - Busca en cada case para encontrar una coincidencia - Cuando encuentra una coincidencia, ejecuta ese bloque de código - El break le dice a JavaScript que pare y salga del switch - Si ningún caso coincide, ejecuta el bloque default (si tienes uno) En este ejemplo, JavaScript ve que dayNumber es 2, encuentra el case 2 correspondiente, asigna "Tuesday" a dayName, y luego sale del switch. El resultado? "Today is Tuesday" se muestra en la consola. ✅ Prueba tu comprensión de este código y el siguiente ejecutándolos en la consola de un navegador. Cambia el valor de la variable a para modificar la salida de console.log(). ### 🔄 Dominio de la Sentencia Switch: Múltiples Opciones Pon a prueba tu comprensión del switch: - ¿Qué pasa si olvidas un break? - ¿Cuándo usarías switch en lugar de múltiples sentencias if-else? - ¿Por qué es útil el caso default incluso si piensas que cubriste todas las posibilidades? ## Operadores Lógicos y Booleanos Las decisiones complejas a menudo requieren evaluar múltiples condiciones simultáneamente. Así como el álgebra Booleana permite a los matemáticos combinar expresiones lógicas, la programación proporciona operadores lógicos para conectar múltiples condiciones Booleanas. Estos operadores permiten lógica condicional sofisticada combinando evaluaciones simples de verdadero/falso. Estos operadores te permiten combinar condiciones de maneras útiles: - AND (&&) significa que ambas condiciones deben ser verdaderas - OR (||) significa que al menos una condición debe ser verdadera - NOT (!) invierte true a false (y viceversa) ## Condiciones y Decisiones con Operadores Lógicos Veamos estos operadores lógicos en acción con un ejemplo más realista: En este ejemplo: calculamos un precio con descuento del 20% (640), luego evaluamos si nuestros fondos disponibles cubren el precio completo O el precio descontado. Como 600 no alcanza el umbral de precio descontado de 640, la condición se evalúa como falsa. ### 🧮 Chequeo de Operadores Lógicos: Combinando Condiciones Pon a prueba tu comprensión de operadores lógicos: - En la expresión A && B, ¿qué pasa si A es falso? ¿Se evalúa B? - ¿Puedes pensar en una situación donde necesites usar los tres operadores (&&, ||, !) juntos? - ¿Cuál es la diferencia entre !user.isActive y user.isActive !== true? ### Operador de Negación A veces es más fácil pensar en cuándo algo NO es verdadero. En vez de preguntar "¿El usuario está conectado?", podrías querer preguntar "¿El usuario NO está conectado?" El operador de exclamación (!) invierte la lógica por ti. El operador ! es como decir "lo opuesto de..." – si algo es true, ! lo convierte en false, y viceversa. ### Expresiones Ternarias Para asignaciones condicionales simples, JavaScript provee el operador ternario. Esta sintaxis concisa te permite escribir una expresión condicional en una sola línea, útil cuando necesitas asignar uno de dos valores según una condición. Se lee como una pregunta: "¿Esta condición es verdadera? Si sí, usa este valor. Si no, usa aquel valor." A continuación un ejemplo más tangible: ✅ Tómate un minuto para leer este código varias veces. ¿Entiendes cómo funcionan estos operadores? Esto es lo que dice esta línea: "¿firstNumber es mayor que secondNumber? Si sí, pon firstNumber en biggestNumber. Si no, pon secondNumber en biggestNumber." El operador ternario es solo una forma más corta de escribir esta declaración tradicional if..else: Ambos enfoques producen resultados idénticos. El operador ternario ofrece concisión, mientras que la estructura if-else tradicional puede ser más legible para condiciones complejas. --- ## 🚀 Desafío Crea un programa que primero esté escrito con operadores lógicos, y luego réescribelo usando una expresión ternaria. ¿Cuál es tu sintaxis preferida? --- ## Desafío GitHub Copilot Agent 🚀 Usa el modo Agente para completar el siguiente desafío: Descripción: Crea una calculadora de calificaciones completa que demuestre múltiples conceptos de toma de decisiones de esta lección, incluyendo sentencias if-else, sentencias switch, operadores lógicos y expresiones ternarias. Prompt: Escribe un programa en JavaScript que tome la puntuación numérica de un estudiante (0-100) y determine su calificación letra usando los siguientes criterios: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Menor a 60 Requisitos: 1. Usa una sentencia if-else para determinar la calificación letra 2. Usa operadores lógicos para verificar si el estudiante aprueba (grade >= 60) Y tiene honores (grade >= 90) 3. Usa una sentencia switch para proporcionar retroalimentación específica para cada calificación en letra 4. Usa un operador ternario para determinar si el estudiante es elegible para el siguiente curso (grade >= 70) 5. Incluye validación de entrada para asegurar que la puntuación esté entre 0 y 100 Prueba tu programa con varias puntuaciones, incluyendo casos límite como 59, 60, 89, 90, y entradas inválidas. Aprende más sobre el modo agente aquí. ## Examen posterior a la clase Examen posterior a la clase ## Revisión y autoestudio Lee más sobre los muchos operadores disponibles para el usuario en MDN. ¡Revisa el maravilloso buscador de operadores de Josh Comeau! ## Tarea Operadores --- ## 🧠 Resumen de tu kit de herramientas para la toma de decisiones --- ## 🚀 Tu línea de tiempo para dominar la toma de decisiones en JavaScript ### ⚡ Lo que puedes hacer en los próximos 5 minutos - [ ] Practica operadores de comparación en la consola de tu navegador - [ ] Escribe una declaración if-else simple que verifique tu edad - [ ] Intenta el desafío: reescribe un if-else usando un operador ternario - [ ] Prueba qué sucede con diferentes valores "truthy" y "falsy" ### 🎯 Lo que puedes lograr en esta hora - [ ] Completa el examen posterior a la lección y repasa los conceptos confusos - [ ] Construye el calculador de notas completo del desafío de GitHub Copilot - [ ] Crea un árbol de decisiones simple para un escenario del mundo real (como elegir qué ropa usar) - [ ] Practica combinando múltiples condiciones con operadores lógicos - [ ] Experimenta con sentencias switch para diferentes casos de uso ### 📅 Tu dominio lógico para toda la semana - [ ] Completa la tarea de operadores con ejemplos creativos - [ ] Construye una mini aplicación de cuestionario usando varias estructuras condicionales - [ ] Crea un validador de formularios que verifique múltiples condiciones de entrada - [ ] Practica los ejercicios del buscador de operadores de Josh Comeau - [ ] Refactoriza código existente para usar estructuras condicionales más apropiadas - [ ] Estudia la evaluación de corto circuito y las implicaciones en rendimiento ### 🌟 Tu transformación durante el mes - [ ] Domina condiciones anidadas complejas y mantiene la legibilidad del código - [ ] Construye una aplicación con lógica de toma de decisiones sofisticada - [ ] Contribuye al código abierto mejorando la lógica condicional en proyectos existentes - [ ] Enseña a alguien más sobre las diferentes estructuras condicionales y cuándo usar cada una - [ ] Explora enfoques de programación funcional para lógica condicional - [ ] Crea una guía de referencia personal para las mejores prácticas condicionales ### 🏆 Chequeo final para campeón de la toma de decisiones Celebra tu dominio del pensamiento lógico: - ¿Cuál es la lógica de decisión más compleja que has implementado con éxito? - ¿Qué estructura condicional te resulta más natural y por qué? - ¿Cómo ha cambiado tu enfoque para resolver problemas tras aprender sobre operadores lógicos? - ¿Qué aplicación del mundo real se beneficiaría de una lógica de toma de decisiones sofisticada? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso legal: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la exactitud, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea derivada del uso de esta traducción. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Conceptos Básicos de JavaScript: Arrays y Bucles

## Cuestionario Preclase Cuestionario preclase ¿Alguna vez te has preguntado cómo las páginas web llevan la cuenta de los artículos en un carrito de compras o muestran tu lista de amigos? Ahí es donde entran en juego los arrays y los bucles. Los arrays son como contenedores digitales que almacenan múltiples piezas de información, mientras que los bucles te permiten trabajar con todos esos datos de manera eficiente sin tener que escribir código repetitivo. Juntos, estos dos conceptos forman la base para manejar información en tus programas. Aprenderás a pasar de escribir manualmente cada paso a crear código inteligente y eficiente que pueda procesar cientos o incluso miles de elementos rápidamente. Al final de esta lección, entenderás cómo realizar tareas complejas con datos usando sólo unas pocas líneas de código. Exploremos estos conceptos esenciales de programación. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Bucles") ## Arrays Piensa en los arrays como un archivador digital: en lugar de almacenar un documento por cajón, puedes organizar múltiples elementos relacionados en un solo contenedor estructurado. En términos de programación, los arrays te permiten guardar múltiples piezas de información en un paquete organizado. Ya sea que estés construyendo una galería de fotos, gestionando una lista de tareas o llevando la cuenta de puntajes altos en un juego, los arrays proporcionan la base para la organización de datos. Veamos cómo funcionan. ✅ ¡Los arrays están por todas partes! ¿Puedes pensar en un ejemplo real de un array, como una matriz de paneles solares? ### Creando Arrays Crear un array es súper sencillo: ¡solo usa corchetes! ¿Qué está pasando aquí? Acabas de crear un contenedor vacío usando esos corchetes []. Piensa que es como una estantería vacía en una biblioteca: está lista para contener los libros que quieras organizar allí. También puedes llenar tu array con valores iniciales desde el principio: Cosas interesantes a notar: - Puedes almacenar texto, números o incluso valores verdadero/falso en un mismo array - Solo separa cada ítem con una coma, ¡fácil! - Los arrays son perfectos para mantener información relacionada junta ### Indexación de Arrays Aquí hay algo que puede parecer inusual al principio: los arrays numeran sus elementos empezando desde 0, no desde 1. Esta indexación basada en cero tiene su raíz en cómo funciona la memoria de la computadora, y ha sido una convención en la programación desde los primeros días de lenguajes como C. Cada posición en el array recibe su propio número de dirección llamado índice. ✅ ¿Te sorprende que los arrays comiencen en el índice cero? En algunos lenguajes de programación, los índices empiezan en 1. Hay una historia interesante sobre esto, que puedes leer en Wikipedia. Accediendo a Elementos del Array: Desglosando lo que sucede aquí: - Utiliza la notación de corchetes con el número de índice para acceder a elementos - Devuelve el valor almacenado en esa posición específica del array - Cuenta comenzando desde 0, haciendo que el primer elemento sea el índice 0 Modificando Elementos del Array: En lo anterior hemos: - Modificado el elemento en el índice 4 de "Rocky Road" a "Butter Pecan" - Añadido un nuevo elemento "Cookie Dough" en el índice 5 - Expandido la longitud del array automáticamente al añadir elementos fuera de los límites actuales ### Longitud del Array y Métodos Comunes Los arrays vienen con propiedades y métodos incorporados que facilitan mucho el trabajo con datos. Encontrar la Longitud del Array: Puntos clave para recordar: - Devuelve el número total de elementos en el array - Se actualiza automáticamente cuando se añaden o eliminan elementos - Proporciona un conteo dinámico útil para bucles y validación Métodos Esenciales de Array: Comprendiendo estos métodos: - Añade elementos con push() (al final) y unshift() (al principio) - Elimina elementos con pop() (al final) y shift() (al principio) - Ubica elementos con indexOf() y verifica existencia con includes() - Devuelve valores útiles como elementos removidos o índices de posición ✅ ¡Pruébalo tú mismo! Usa la consola de tu navegador para crear y manipular un array de creación propia. ### 🧠 Chequeo de Fundamentos de Array: Organizando tus Datos Pon a prueba tu comprensión de arrays: - ¿Por qué crees que los arrays comienzan a contar desde 0 en lugar de 1? - ¿Qué sucede si intentas acceder a un índice que no existe (como arr[100] en un array de 5 elementos)? - ¿Puedes pensar en tres escenarios del mundo real donde los arrays serían útiles? ## Bucles Piensa en el famoso castigo de las novelas de Charles Dickens donde los estudiantes tenían que escribir líneas repetidamente en una pizarra. Imagina si pudieras simplemente decirle a alguien "escribe esta frase 100 veces" y que se hiciera automáticamente. Eso es exactamente lo que hacen los bucles para tu código. Los bucles son como tener un asistente incansable que puede repetir tareas sin error. Ya sea que necesites revisar cada artículo en un carrito de compras o mostrar todas las fotos de un álbum, los bucles manejan la repetición de manera eficiente. JavaScript ofrece varios tipos de bucles para elegir. Analicemos cada uno y entendamos cuándo usarlos. ### Bucle For El bucle for es como poner un temporizador: sabes exactamente cuántas veces quieres que algo suceda. Es súper organizado y predecible, lo que lo hace perfecto cuando trabajas con arrays o necesitas contar cosas. Estructura del bucle For: Paso a paso, esto es lo que sucede: - Inicializa la variable contador i en 0 al inicio - Verifica la condición i < 10 antes de cada iteración - Ejecuta el bloque de código cuando la condición es verdadera - Incrementa i en 1 después de cada iteración con i++ - Se detiene cuando la condición se vuelve falsa (cuando i alcanza 10) ✅ Ejecuta este código en la consola de un navegador. ¿Qué sucede cuando haces pequeños cambios al contador, la condición o la expresión de iteración? ¿Puedes hacer que funcione hacia atrás, creando una cuenta regresiva? ### 🗓️ Chequeo de Maestría en For: Repetición Controlada Evalúa tu comprensión del bucle for: - ¿Cuáles son las tres partes de un bucle for, y qué hace cada una? - ¿Cómo recorrerías un array de atrás hacia adelante? - ¿Qué pasa si olvidas la parte de incremento (i++)? ### Bucle While El bucle while es como decir "sigue haciendo esto hasta que..." - puede que no sepas exactamente cuántas veces se ejecutará, pero sabes cuándo detenerlo. Es perfecto para cosas como pedir entrada al usuario hasta que proporcione lo necesario, o buscar datos hasta encontrar lo que buscas. Características del bucle While: - Continúa ejecutando mientras la condición sea verdadera - Requiere manejar manualmente las variables contador - Verifica la condición antes de cada iteración - Riesgo de bucles infinitos si la condición nunca se vuelve falsa Comprendiendo estos ejemplos: - Gestiona la variable contador i manualmente dentro del cuerpo del bucle - Incrementa el contador para evitar bucles infinitos - Demuestra un caso práctico con entrada del usuario y límite de intentos - Incluye mecanismos de seguridad para prevenir ejecuciones interminables ### ♾️ Chequeo de Sabiduría en While: Repetición Basada en Condición Pon a prueba tu comprensión del bucle while: - ¿Cuál es el principal peligro al usar bucles while? - ¿Cuándo elegirías un bucle while en lugar de un for? - ¿Cómo puedes prevenir bucles infinitos? ### Alternativas Modernas de Bucles JavaScript ofrece sintaxis moderna de bucles que puede hacer tu código más legible y menos propenso a errores. Bucle For...of (ES6+): Ventajas clave de for...of: - Elimina la gestión de índices y posibles errores de off-by-one - Proporciona acceso directo a los elementos del array - Mejora la legibilidad del código y reduce la complejidad sintáctica Método forEach: Lo que necesitas saber sobre forEach: - Ejecuta una función para cada elemento del array - Proporciona tanto el valor del elemento como el índice como parámetros - No puede ser detenido anticipadamente (a diferencia de bucles tradicionales) - Devuelve undefined (no crea un nuevo array) ✅ ¿Por qué elegirías un bucle for en lugar de un bucle while? 17 mil espectadores tuvieron la misma pregunta en StackOverflow, y algunas de las opiniones podrían interesarte. ### 🎨 Chequeo de Sintaxis Moderna: Adoptando ES6+ Evalúa tu comprensión del JavaScript moderno: - ¿Cuáles son las ventajas de for...of sobre los bucles for tradicionales? - ¿Cuándo podrías preferir bucles for tradicionales? - ¿Cuál es la diferencia entre forEach y map? ## Bucles y Arrays Combinar arrays con bucles crea potentes capacidades para procesar datos. Esta combinación es fundamental para muchas tareas de programación, desde mostrar listas hasta calcular estadísticas. Procesamiento Tradicional de Arrays: Entendamos cada enfoque: - Utiliza la propiedad de longitud del array para determinar el límite del bucle - Accede a elementos por índice en bucles for tradicionales - Proporciona acceso directo a elementos en bucles for...of - Procesa cada elemento del array exactamente una vez Ejemplo Práctico de Procesamiento de Datos: Así funciona este código: - Inicializa variables para el seguimiento de suma y extremos - Procesa cada nota con un único bucle eficiente - Acumula el total para calcular el promedio - Sigue el valor más alto y más bajo durante la iteración - Calcula estadísticas finales después de completar el bucle ✅ Experimenta haciendo un bucle sobre un array de tu propia creación en la consola de tu navegador. --- ## Desafío del Agente GitHub Copilot 🚀 Usa el modo Agente para completar el siguiente desafío: Descripción: Construye una función integral de procesamiento de datos que combine arrays y bucles para analizar un conjunto de datos y generar conclusiones significativas. Prompt: Crea una función llamada analyzeGrades que reciba un array de objetos de notas de estudiantes (cada uno con propiedades nombre y puntuación) y devuelva un objeto con estadísticas incluyendo la puntuación más alta, la más baja, el promedio, el conteo de estudiantes aprobados (puntuación >= 70) y un array con los nombres de los estudiantes que obtuvieron una puntuación superior al promedio. Usa al menos dos tipos diferentes de bucles en tu solución. Aprende más sobre modo agente aquí. ## 🚀 Desafío JavaScript ofrece varios métodos modernos de arrays que pueden reemplazar los bucles tradicionales para tareas específicas. Explora forEach, for-of, map, filter y reduce. Tu desafío: Refactoriza el ejemplo de calificaciones de estudiantes usando al menos tres métodos diferentes de arrays. Observa lo mucho más limpio y legible que se vuelve el código con la sintaxis moderna de JavaScript. ## Examen posterior a la clase Examen posterior a la clase ## Revisión y autoestudio Los arrays en JavaScript tienen muchos métodos asociados que son extremadamente útiles para la manipulación de datos. Lee sobre estos métodos y prueba algunos de ellos (como push, pop, slice y splice) en un array de tu creación. ## Tarea Loop an Array --- ## 📊 Resumen de tu Kit de Herramientas de Arrays y Bucles --- ## 🚀 Línea de tiempo de tu dominio de Arrays y Bucles ### ⚡ Lo que puedes hacer en los próximos 5 minutos - [ ] Crea un array de tus películas favoritas y accede a elementos específicos - [ ] Escribe un bucle for que cuente del 1 al 10 - [ ] Intenta el desafío de métodos modernos de arrays de la lección - [ ] Practica el indexado de arrays en la consola de tu navegador ### 🎯 Lo que puedes lograr en esta hora - [ ] Completa el examen posterior a la lección y repasa los conceptos difíciles - [ ] Construye el analizador completo de calificaciones del desafío GitHub Copilot - [ ] Crea un carrito de compras simple que añada y elimine artículos - [ ] Practica la conversión entre diferentes tipos de bucles - [ ] Experimenta con métodos de arrays como push, pop, slice y splice ### 📅 Tu recorrido de procesamiento de datos durante la semana - [ ] Completa la tarea "Loop an Array" con mejoras creativas - [ ] Construye una aplicación de lista de tareas usando arrays y bucles - [ ] Crea una calculadora simple de estadísticas para datos numéricos - [ ] Practica con métodos de arrays MDN - [ ] Construye una galería de fotos o interfaz de lista de reproducción musical - [ ] Explora la programación funcional con map, filter y reduce ### 🌟 Tu transformación durante el mes - [ ] Domina operaciones avanzadas de arrays y optimización de rendimiento - [ ] Crea un panel completo de visualización de datos - [ ] Contribuye a proyectos de código abierto relacionados con procesamiento de datos - [ ] Enseña a alguien más sobre arrays y bucles con ejemplos prácticos - [ ] Crea una biblioteca personal de funciones reutilizables para procesamiento de datos - [ ] Explora algoritmos y estructuras de datos basadas en arrays ### 🏆 Chequeo final del campeón en procesamiento de datos Celebra tu dominio de arrays y bucles: - ¿Cuál es la operación con arrays más útil que has aprendido para aplicaciones del mundo real? - ¿Qué tipo de bucle te resulta más natural y por qué? - ¿Cómo ha cambiado tu enfoque para organizar datos al entender arrays y bucles? - ¿Qué tarea compleja de procesamiento de datos te gustaría abordar a continuación? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array

Sissejuhatus JavaScripti

JavaScript on veebi keel. Nendes neljas õppetükis õpid selle põhitõdesid. ### Teemad 1. Muutujad ja andmetüübid 2. Funktsioonid ja meetodid 3. Otsuste tegemine JavaScriptis 4. Massiivid ja tsüklid ### Autorid Need õppetükid on kirjutatud ♥️ poolt Jasmine Greenaway, Christopher Harrison ja Chris Noring --- Lahtiütlus: See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.

javascript

JavaScripti põhialused: andmetüübid

Andmetüübid on üks JavaScripti põhikontseptsioone, millega kohtud igas programmis, mida kirjutad. Mõtle andmetüüpidele nagu Alexandria iidsete raamatukoguhoidjate kasutatud arhiveerimissüsteemile – nad omasid kindlaid kohti rullraamatutele, mis sisaldasid luulet, matemaatikat ja ajaloolisi andmeid. JavaScript korraldab teavet sarnaselt, erinevate kategooriate kaupa erinevate andmetüüpide jaoks. Selles tunnis uurime JavaScripti tööd võimaldavaid põhianumitreid. Õpid, kuidas käsitleda numbreid, teksti, tõeväärtusi ning mõistad, miks õige tüübi valimine on sinu programmide jaoks oluline. Need mõisted võivad alguses tunduda abstraktsed, kuid praktiseerides saavad neist sinu teine loomus. Andmetüüpide mõistmine teeb kõike muud JavaScriptis märksa selgemaks. Nii nagu arhitektid peavad enne katedraali ehitamist tundma erinevaid ehitusmaterjale, toetavad need alused kõike, mida edaspidi ehitad. ## Loengu-eelne viktoriin Loengu-eelne viktoriin See tund katab JavaScripti aluseid, mis on veebis interaktiivsuse võimaldamise keel. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Muutujad JavaScriptis") [](https://youtube.com/watch?v=AWfA95eLdq8 "Andmetüübid JavaScriptis") Alustame muutujatest ja andmetüüpidest, mis neid täidavad! ## Muutujad Muutujad on programmeerimise põhielemendid. Nagu märgistatud purgid, mida keskaegsed alkeemikud kasutasid erinevate ainete talletamiseks, võimaldavad muutujad sul hoida teavet ja anda sellele kirjeldav nimi, et saaksid sellele hiljem viidata. Pead kellegi vanust meeles pidama? Säilita see muutujas nimega age. Tahad kasutaja nime jälgida? Hoia seda muutujas nimega userName. Keskendume JavaScriptis muutujate loomise kaasaegsele lähenemisele. Siin õpitavad tehnikad põhinevad aastaid kestnud keele arengul ja programmeerimiskogukonnas välja kujunenud parimatel tavadel. Muuttuja loomisel ja deklareerimisel on süntaks järgmine: [võti] [nimi]. See koosneb kahest osast: - Võti. Kasuta let muutujate jaoks, mis võivad muutuda, või const väärtuste jaoks, mis püsivad samadena. - Muuttuja nimi, see on kirjeldav nimi, mille valid ise. ✅ Võti let toodi sisse ES6-s ja annab muutujale nn _plokiruumi ulatuse_. Soovitatav on kasutada let või const vanema var asemel. Plokiruume käsitleme tulevastes osades põhjalikumalt. ### Ülesanne – muutujatega töötamine 1. Dekleeri muutuja. Alustame esimese muutuja loomisega: ```javascript let myVariable; ``` Mida see teeb: - See ütleb JavaScriptile, et luua muutujale nimetusega myVariable salvestuskoht - JavaScript reserveerib muutujale ruumi mälus - Muutujal pole praegu väärtust (undefined) 2. Anna väärtus. Paneme nüüd muutujasse midagi: ```javascript myVariable = 123; ``` Kuidas väärtuse määramine töötab: - Operaator = määrab muutujale väärtuseks 123 - Muutuja sisaldab nüüd seda väärtust, mitte enam undefined - Saad kogu koodis sellele väärtusele viidata nimega myVariable > Märkus: tšunksis = tähendab, et kasutame "määramisoperaatorit", mis määrab muutujale väärtuse. See ei tähista võrdust. 3. Tee seda targalt. Kombineerime need kaks sammu: ```javascript let myVariable = 123; ``` See lähenemine on tõhusam: - Deklareerid muutujad ja määrad väärtuse ühes lauses - See on tavapraktika arendajate seas - Vähendab koodi pikkust ja säilitab selguse 4. Muuda meelt. Mis siis, kui tahame talletada teise numbri? ```javascript myVariable = 321; ``` Taasesituse mõistmine: - Muutuja hoiab nüüd väärtust 321, varasema 123 asemel - Varasem väärtus asendatakse – muutujad hoiavad korraga ainult ühte väärtust - See muutuvus on let-ga deklareeritud muutujate võtmetunnus ✅ Proovi! Saad kirjutada JavaScripti otse oma brauseris. Ava arendaja tööriistad ja mine konsooli. Kirjuta let myVariable = 123, vajuta Enter, siis kirjuta myVariable. Mis juhtub? Mõisted saavad sulle selgemaks järgnevate tundide jooksul. ### 🧠 Muutujate valdamise kontroll: mugavuse saavutamine Vaatame, kuidas sul muutujatega läheb: - Kas oskad selgitada muutujate deklareerimise ja väärtuse määramise vahet? - Mis juhtub, kui püüad kasutada muutujat enne selle deklareerimist? - Millal valid muutuja jaoks let asemel const? ## Konstandid Mõnikord tuleb talletada teavet, mis programmi jooksutamise ajal ei tohiks muutuda. Mõtle konstandidele nagu matemaatilised printsiibid, mille Eukleides iidse Kreeka ajal kehtestas – kui need on tõestatud ja dokumenteeritud, püsivad need muutumatuna igaveseks. Konstandid töötavad sarnaselt muutujatega, kuid olulise piiranguga: kui väärtus on määratud, ei saa seda enam muuta. See muutumatuse omadus aitab vältida kriitiliste väärtuste tahtmatut muutmist programmis. Konstandi deklareerimine ja initsialiseerimine järgib samu põhimõtteid nagu muutujal, ainult et kasutatakse võtmesõna const. Konstande kirjutatakse tavaliselt suurte tähtedega. See kood teeb järgmist: - Loomine konstandile nimega MY_VARIABLE väärtusega 123 - Suurtähtede kasutamine konstandi nimena - Keelamine tulevastel väärtuse muutmistel Konstandidel on kaks peamist reeglit: - Nendele tuleb kohe anda väärtus – tühjad konstandid pole lubatud! - Väärtust ei tohi kunagi muuta – JavaScript viskab vea, kui proovid. Vaata, mida ma mõtlen: Lihtne väärtus - Alljärgnev EI OLE lubatud: ```javascript const PI = 3; PI = 4; // ei ole lubatud ``` Mida meeles pidada: - Püüdlused konstanti uuesti määrata põhjustavad vea - Kaitseb olulisi väärtusi juhuslike muutuste eest - Tagab, et väärtus on kogu programmi jooksul püsiv Objekti viide on kaitstud - Alljärgnev EI OLE lubatud: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ei ole lubatud ``` Neid mõisteid mõistes: - Takistab kogu objekti asendamist uuega - Kaitseb algse objekti viidet - Säilitab objekti identiteedi mälus Objekti väärtus ei ole kaitstud - Alljärgnev ON lubatud: ```javascript const obj = { a: 3 }; obj.a = 5; // lubatud ``` Mis siin juhtub: - Muudab objekti sees olevaid omaduse väärtusi - Hoiab sama objekti viide - Näitab, et objekti sisu võib muutuda, kuigi viide jääb samaks > Märkus: const tähendab, et viide on kaitstud uuesti määramise eest. Väärtus ei ole aga _muutumatu_ ja võib muutuda, eriti kui tegemist on keeruka konstruktsiooniga nagu objekt. ## Andmetüübid JavaScript korraldab info erinevatesse kategooriatesse, mida nimetatakse andmetüüpideks. See mõiste peegeldab seda, kuidas iidsetel teadlastel oli teadmiste liigistamine – Aristoteles eristas erinevaid mõtlemise liike, teades, et loogilisi põhimõtteid ei saa ühtemoodi rakendada luulele, matemaatikale ja loodusteadustele. Andmetüübid on olulised, sest erinevad operatsioonid töötavad eri tüüpi informatsiooniga. Nagu ei saa kellegi nime kallal aritmeetikat teha ega matemaatilist võrrandit tähestikulises järjekorras paigutada, nõuab JavaScript iga operatsiooni jaoks sobival andmetüübil põhinevat lähenemist. Selle mõistmine aitab vältida vigu ja muudab koodi usaldusväärsemaks. Muutujad võivad hoida erinevat tüüpi väärtusi nagu numbrid ja tekst. Neid erinevaid väärtuste tüüpe nimetatakse andmetüüpideks. Andmetüübid on tarkvaraarenduse oluline osa, kuna aitavad arendajatel otsuseid vastu võtta, kuidas koodi kirjutada ja kuidas tarkvara töö peab käituma. Lisaks on mõnel andmetüübil unikaalsed omadused, mis aitavad väärtuses teisendada või ekstraheerida täiendavat teavet. ✅ Andmetüübid on tuntud ka kui JavaScripti andmeprimitiivid, kuna need on keele pakutavad madalaima taseme andmetüübid. On 7 primitiivset andmetüüpi: string, number, bigint, boolean, undefined, null ja symbol. Võta hetk ja kujutle, mida iga primitiiv võiks kujutada. Mis on sebra? Kuidas oleks 0? true? ### Numbrid Numbrid on JavaScriptis kõige lihtsam andmetüüp. Olgu tegemist täisarvudega nagu 42, komakohalistega nagu 3.14 või negatiivsete arvudega nagu -5, JavaScript käsitleb neid kõiki ühtsel viisil. Pea meeles meie varasemat muutujat? See 123, mille seal hoidsime, oli tegelikult numbri andmetüüp: Peamised omadused: - JavaScript tunneb numbrilise väärtuse automaatselt ära - Nendega saad teha matemaatilisi tehteid - Tüüpi ei ole vaja eksplicitseerida Muutujad võivad hoida kõiki arvutüüpe, kaasa arvatud komad ja negatiivsed numbrid. Numbreid saab kasutada ka aritmeetiliste operaatoritega, mida käsitleme järgmises jaos. ### Aritmeetilised operaatorid Aritmeetilised operaatorid võimaldavad teha matemaatilisi arvutusi JavaScriptis. Need operaatorid järgivad samu põhimõtteid, mida matemaatikud on sajandeid kasutanud – samu märke, mis esinesid teadlaste nagu Al-Hvārazmī kirjutistes, kes töötas välja algebra notatsiooni. Operaatorid toimivad nii, nagu traditsiooniline matemaatika eeldab: pluss liitmiseks, miinus lahutamiseks jne. Siin on mõned aritmeetilised operaatorid: ✅ Proovi! Tee aritmeetiline tehe oma brauseri konsoolis. Kas tulemused üllatavad? ### 🧮 Matemaatikatest: arvutamiskindlus Testi oma arvutusteadmisi: - Mis vahe on operaatoritel / (jagamine) ja % (jääk)? - Kas suudad ennustada, mis on 10 % 3? (Vihje: see ei ole 3.33...) - Milleks võiks programmeerimises jääkoperattor kasulik olla? ### Stringid JavaScriptis esitatakse tekstilist andmestikku stringidena. Mõiste "string" tuleb sellest, et tähemärke on järjestikku ritta pandud, nagu keskaegsete kloostrite kirjanikud ühendasid tähti sõnadeks ja lauseteks oma käsikirjades. Stringid on veebiarenduse aluseks. Kõik veebisaidil kuvatav tekst – kasutajanimed, nupusildid, veateated, sisu – käsitletakse stringandmetena. Stringide mõistmine on funktsionaalsete kasutajaliideste loomisel hädavajalik. Stringid on tähemärkide kogumid, mis on ümbritsetud ühekordsete või kahekordsete jutumärkidega. Põhimõistete selgitus: - Kasutab kas ühekordseid ' või kahekordseid " jutumärke stringide määramiseks - Säilitab tekstilist andmestikku, mis võib sisaldada tähti, numbreid ja sümboleid - Määrab muutujatele stringväärtusi edasiseks kasutamiseks - Nõuab jutumärkide kasutamist, et tekst eristuks muutuja nimest Mäleta jutumärke kasutada stringi kirjutamisel, vastasel juhul võtab JavaScript seda muutujanimena. ### Stringide vormindamine Stringide manipuleerimisega saad kombineerida tekstielemente, lisada muutujad ja luua dünaamilist sisu, mis reageerib programmi olekule. See võimaldab teksti programmeeritult koostada. Tihti tuleb kokku liita mitu stringi – seda nimetatakse konkateneerimiseks. Kahe või enama stringi ühendamiseks või kokku liitmiseks kasuta operaatorit +. Samm-sammult, siin toimub: - Ühendab mitut stringi operaatoriga + - Liidab stringid otse kokku ilma tühikuteta esimeses näites - Lisab lugemise hõlbustamiseks stringide vahele tühikuid " " - Sisestab kirjavahemärke nagu komad, et luua korrektne vormindus ✅ Miks on JavaScriptis 1 + 1 = 2, kuid '1' + '1' = 11? Mõtle sellele. Aga mis juhtub, kui '1' + 1? Malliliteraalid on teine viis stringide vormindamiseks, välja arvatud see, et jutumärkide asemel kasutatakse tagurpidi kriipse. Kõik, mis ei ole tava tekst, peab olema paigutatud kohatäitjate ${ } sisse. See hõlmab ka kõiki muutujaid, mis võivad olla stringid. Mõistame iga osa: - Kasutab malliliteraalide loomiseks tavapäraste jutumärkide asemel tagurpidi kriipse ` `` - Sisestab muutujaid otse kasutades kohatäitjat ${} - Säilitab tühikud ja vormingu täpselt nagu kirjutatud - Pakku puhast viisi keerukate stringide loomisel koos muutujatega Sa võid saavutada oma vorminduse eesmärgid mõlemal meetodil, kuid malliliteraalid austavad kõiki tühikuid ja reavahetusi. ✅ Millal kasutaksid malliliteraali ja millal tavalist stringi? ### 🔤 Stringi valdamise kontroll: Teksti manipuleerimise kindlus Hinda oma stringioskusi: - Kas oskad selgitada, miks '1' + '1' võrdub '11', mitte 2? - Millist stringimeetodit pead lugemise hõlbustamiseks paremaks: järjestamine või malliliteraalid? - Mis juhtub, kui unustad stringi ümber jutumärgid? ### Boole’id Boole’id esindavad andmete kõige lihtsamat vormi: nad saavad võtta vaid kahte väärtust – true (tõene) või false (valeh). See binaarlogika süsteem viitab 19. sajandi matemaatiku George Boole tööle, kes töötas välja Boole algebra. Vaatamata nende lihtsusele on boole’id olulised programmi loogikas. Nad võimaldavad koodil teha otsuseid tingimuste alusel – kas kasutaja on sisse logitud, kas nuppu vajutati, või kas teatud tingimused on täidetud. Boole’id võivad olla vaid kaks väärtust: true või false. Boole’id aitavad teha otsuseid, milliseid koodiridu täita, kui mattud tingimused on täidetud. Paljudel juhtudel aitavad operaatorid boole väärtust määrata ning sul on tihti märgata ja kirjutada muutujaid, millele väärtused on operaatoriga määratud või uuendatud. Ülaltoodud näites oleme: - Loonud muutuja, mis salvestab boole väärtuse true - Näidanud kuidas salvestada boole väärtuse false - Kasutanud täpseid võtmesõnu true ja false (jutumärke ei ole vaja) - Valmistanud need muutujad tingimuslauseteks kasutamiseks ✅ Muutujat võib pidada 'tõeseks', kui see hindamisel annab boole true. Huvitaval kombel on JavaScriptis kõik väärtused tõesed, välja arvatud need, mida on defineeritud valetena. ### 🎯 Boole loogika test: Otsuste tegemise oskused Testi oma boole arusaamist: - Miks arvad, et JavaScriptil on "tõed" ja "valed" väärtused lisaks ainult true ja false? - Kas saad ennustada, milline neist on vale: 0, "0", [], "false"? - Kuidas võivad boole’id olla kasulikud programmi töökorra juhtimisel? --- ## 📊 Sinu andmetüüpide tööriistakasti kokkuvõte ## GitHub Copilot Agendi väljakutse 🚀 Kasuta Agendi režiimi järgneva väljakutse lõpetamiseks: Kirjeldus: Loo isikuandmete haldur, mis demonstreerib kõiki selle õppetunni jooksul JavaScripti andmetüüpe, käsitledes pärismaailma andmejuhtumeid. Ülesanne: Koosta JavaScript programm, mis loob kasutajaprofiili objekti sisaldades: inimese nime (string), vanust (number), õpilase staatust (boolean), lemmikvärvide loendit ja aadressi objekti, mis sisaldab tänavat, linna ja postiindeksit. Lisa funktsioonid profiili kuvamiseks ja üksikute väljade uuendamiseks. Näita kindlasti stringide ühendamist, malliliteraale, aritmeetilisi operatsioone vanusega ning boole loogikat õpilase staatuse kohta. Loe rohkem agent mode’i kohta. ## 🚀 Väljakutse JavaScriptil on mitmeid käitumisviise, mis võivad arendajaid ootamatult tabada. Siin on klassikaline näide uurimiseks: proovi oma brauseri konsoolis sisestada: let age = 1; let Age = 2; age == Age ja vaata tulemust. See annab false – suudad välja selgitada, miks? See on üks paljudest JavaScripti käitumistest, mida tasub mõista. Nende eripärade tundmine aitab sul kirjutada kindlamat koodi ja tõrkeid paremini lahendada. ## Loengujärgne test Loengujärgne test ## Kordamine ja iseseisev õpe Vaata seda JavaScripti harjutuste nimekirja ja proovi midagi. Mida sa õppisid? ## Kodune ülesanne Andmetüüpide harjutus ## 🚀 Sinu JavaScripti andmetüüpide valdamise ajakava ### ⚡ Mida saad teha järgmise 5 minutiga - [ ] Ava oma brauseri konsool ja loo 3 muutujat eri andmetüüpidega - [ ] Proovi väljakutset: let age = 1; let Age = 2; age == Age ja leia, miks tulemus on false - [ ] Harjuta stringide ühendamist oma nime ja lemmiknumbriga - [ ] Testi, mis juhtub, kui lisad numbrile stringi ### 🎯 Mida saad selle tunni jooksul saavutada - [ ] Täida loengujärgne test ja korda ebamääraseid kontseptsioone - [ ] Koosta mini-kalkulaator, mis liidab, lahutab, korrutab ja jagab kahte arvu - [ ] Loo lihtne nimenormeerija kasutades malliliteraale - [ ] Uuri == ja === võrdlusoperaatorite erinevusi - [ ] Harjuta andmetüüpide vahel teisendamist ### 📅 Sinu nädala pikkune JavaScripti põhioskete programm - [ ] Täida ülesanne kindlusega ja loovusega - [ ] Loo isikuprofiili objekt kõigi õpitud andmetüüpidega - [ ] Harjuta JavaScripti harjutustega CSS-Tricksist https://css-tricks.com/snippets/javascript/ - [ ] Loo lihtne vormikontroll kasutades boole loogikat - [ ] Katseta massiivide ja objektide andmetüüpe (tulevaste õppetükkide eelvaade) - [ ] Liitu JavaScripti kogukonnaga ja küsi andmetüüpide kohta ### 🌟 Sinu kuuajaline areng - [ ] Integreeri andmetüüpide teadmised suurematesse programmeerimisprojektidesse - [ ] Mõista, millal ja miks kasutada iga andmetüüpi pärismaailma rakendustes - [ ] Aita teisi algajaid JavaScripti aluste mõistmisel - [ ] Loo väike rakendus, mis haldab erinevaid kasutajaandmetüüpe - [ ] Uuri täpsemaid andmetüüpide kontseptsioone nagu tüübisundimine ja range võrdus - [ ] Panusta avatud lähtekoodiga JavaScripti projektidesse dokumentatsiooni täiustamisega ### 🧠 Lõplik andmetüüpide valdamise kontroll Tähista oma JavaScripti alust: - Milline andmetüüp üllatas sind kõige rohkem oma käitumise poolest? - Kui kindlalt tunned end muutujate ja konstantide seletamisel sõbrale? - Mis on kõige huvitavam asi, mida sa avastasid JavaScripti tüübiesüsteemi kohta? - Millise pärismaailma rakenduse suudaksid nende alustega ehitada? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Vastutusest loobumine: See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, tuleb arvestada, et automaatsetes tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Kriitilise tähtsusega teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta tõlke kasutamisest tulenevate arusaamatuste ega valesti mõistmiste eest. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScripti alused: meetodid ja funktsioonid

## Eel-loengu viktoriin Eel-loengu viktoriin Sama koodi korduvalt kirjutamine on programmeerimise üks levinumaid frustratsioone. Funktsioonid lahendavad selle probleemi, võimaldades sul pakendada koodi taaskasutatavatesse plokkidesse. Mõtle funktsioonidele nagu Henry Fordi liinikesksetele standardsetele osadele – kui sa lood usaldusväärse komponendi, saad seda kasutada kõikjal, ilma et peaksid iga kord nullist ehitama. Funktsioonid võimaldavad sul grupeerida koodiosi, et saaksid neid oma programmis korduvalt kasutada. Selle asemel, et iga kord sama loogikat kopeerida ja kleepida, saad luua funktsiooni ühe korra ja kutsuda seda välja siis, kui vaja. See lähenemine hoiab su koodi organiseerituna ja muudab uuendamise palju lihtsamaks. Selles õppetükis õpid, kuidas luua oma funktsioone, saata neile infot ja saada kasulikke tulemusi tagasi. Saad teada erinevuse funktsioonide ja meetodite vahel, õpid kaasaegseid süntaksipraktikaid ning näed, kuidas funktsioonid saavad töötada koos teiste funktsioonidega. Need kontseptsioonid ehitame samm-sammult üles. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Meetodid ja funktsioonid") ## Funktsioonid Funktsioon on iseseisev koodiplokk, mis täidab konkreetset ülesannet. See kapseldab loogika, mida saad käivitada alati, kui vaja. Selle asemel, et kirjutada sama koodi mitmel korral kogu oma programmis, saad selle panna funktsiooni ja kutsuda seda välja siis, kui vaja. See muudab su koodi puhtamaks ja uuendamine palju lihtsamaks. Mõtle ainult sellele hooldusprobleemile, kui peaksid muutma loogikat, mis on laiali 20 erinevas kohas koodibaasis. Funktsioonide nimed peaksid olema kirjeldavad. Hästi nimetatud funktsioon ütleb kohe, mis selle eesmärk on – kui näed cancelTimer(), mõistad kohe, mida see teeb, just nagu märgistatud nupp ütleb täpselt, mis juhtub, kui sellele klõpsad. ## Funktsiooni loomine ja kutsumine Vaadakem, kuidas funktsiooni luua. Süntaks järgib ühtset mustrit: Selgitame seda: - Märksõna function ütleb JavaScriptile: "Hei, ma loon funktsiooni!" - nameOfFunction on koht, kus annad oma funktsioonile kirjeldava nime - Sulud () on kohad, kuhu saad lisada parameetrid (siinkohal varsti sellest räägime) - Kõverad sulud {} sisaldavad tegelikku koodi, mis jooksutab funktsiooni väljakutsumisel Loome lihtsa tervitusfunktsiooni, et näha seda praktikas: See funktsioon prindib konsooli "Hello, world!" Kui oled selle määratlenud, saad seda kasutada nii sagedasti kui soovid. Funktsiooni käivitamiseks (ehk "väljakutsumiseks") kirjuta selle nimi koos sulgudega. JavaScript laseb sul defineerida funktsiooni enne või pärast selle kutsumist – JavaScripti mootor korraldab täitmise järjekorra ise. Kui jooksutad selle rea, täidab see kogu koodi funktsioonis displayGreeting, kuvades brauseri konsoolis "Hello, world!". Sa võid seda funktsiooni kutsuda korduvalt. ### 🧠 Funktsioonide põhitõed: esimeste funktsioonide loomine Vaata, kuidas sul funktsioonidega läheb: - Miks kasutame funktsioonide määratluses kõveraid sulgusid {}? - Mis juhtub, kui kirjutad displayGreeting ilma sulgudeta? - Miks võiks soovida kutsuda sama funktsiooni mitu korda? ### Parimad tavad funktsioonidega Siin on mõned nipid, mis aitavad sul kirjutada häid funktsioone: - Anna funktsioonidele selged, kirjeldavad nimed – su tulevane mina tänab sind! - Kasuta mitmesõnalistes nimedes camelCase stiili (nt calculateTotal asemel calculate_total) - Hoia iga funktsioon keskendunud ühe asja korraldamisele hästi ## Info edastamine funktsioonile Meie displayGreeting funktsioon on piiratud – ta suudab kuvada alati ainult "Hello, world!" Parameetrid võimaldavad funktsioone paindlikumaks ja kasulikumaks muuta. Parameetrid toimivad nagu kohatäited, kuhu saad iga funktsiooni kutsumise korral erinevad väärtused panna. Nii saab üks ja seesama funktsioon töötada erineva infoga sõltuvalt kutsest. Kirjutad parameetrid sulgude vahele funktsiooni definitsioonis, mitmed parameetrid eraldatakse komadega: Iga parameeter toimib kohatäitjana – kui keegi sinu funktsiooni kutsub, annab ta tegelikud väärtused, mis asetuvad nendele kohtadele. Värskendame meie tervitusfunktsiooni, et see võtaks vastu nime: Pane tähele, et kasutame tagurpidi jutumärke (` `) ja ${}` süntaksit, et panna nimi otse sõnumisse – seda nimetatakse mallitekstiks, ja see on väga mugav viis stringidesse muutujaid lisada. Nüüd, kui kutsume funktsiooni, võime anda suvalise nime: JavaScript võtab stringi 'Christopher', määrab selle name parameetrile ja loob personaalse sõnumi "Hello, Christopher!" ## Vaikesätted Mis saab siis, kui tahame teha mõningad parameetrid vabatahtlikuks? Just siin tulevad mängu vaikeväärtused! Oletame, et tahame lubada inimestel tervitusvormingut muuta, aga kui nad seda ei määra, kasutame lihtsalt vaikimisi "Hello". Saad vaikeväärtuseid määrata võrdusmärgiga, nagu muutuja määramisel: Siin on name endiselt kohustuslik, aga salutation on varuväärtuseks 'Hello', kui keegi ei määra teist tervitust. Nüüd võime seda funktsiooni kutsuda kahel erineval viisil: Esimesel kutsumisel kasutab JavaScript vaikeväärtust "Hello", kuna ei määra tervitust. Teisel kutsumisel kasutab meie kohandatud "Hi" tervitust. See paindlikkus muudab funktsioonid kohanemisvõimeliseks erinevate stsenaariumide jaoks. ### 🎛️ Parameetrite valdamise kontroll: funktsioonide kohandamine Testi oma teadmisi parameetritest: - Mis vahe on parameetril ja argumendil? - Miks on vaikeväärtused reaalses programmeerimises kasulikud? - Mida arvad, mis juhtub, kui anda argumendid rohkem kui parameetreid? ## Tagastatavad väärtused Senini on meie funktsioonid ainult sõnumeid konsoolis kuvavd, aga mis siis, kui tahad, et funktsioon arvutab midagi välja ja annab tulemuse tagasi? Siin tulevad mängu tagastatavad väärtused. Funktsioon võib sulle väärtuse anda, mida saad hiljem muutuja sees hoida või kasutada muudes osades oma koodi. Tagastamiseks kasutad märksõna return, millele järgneb tagastatav väärtus: Oluline asi: kui funktsioon jõuab return lausesse, peatab ta kohe täitmise ja saadab selle väärtuse üle funktsiooni välja kutsujale. Muudame meie tervitusfunktsiooni nii, et see tagastaks sõnumi mitte ei trükiks seda: Nüüd selle asemel, et sõnumit kuvada, loob funktsioon selle ja annab meile tagasi. Tagastatud väärtust saab hoida muutuja sees nagu mis tahes teist väärtust: Nüüd sisaldab greetingMessage stringi "Hello, Christopher" ja me saame seda kasutada kus iganes oma koodis – kuvada veebilehel, lisada e-kirja või anda teisele funktsioonile. ### 🔄 Tagastatavate väärtuste kontroll: tulemuste saamine Hinda oma arusaamist tagastustest: - Mis juhtub funktsioonis olevate ridadega pärast return lauset? - Miks on tihti parem väärtused tagasi tagastada, mitte lihtsalt konsooli printida? - Kas funktsioon saab tagastada erinevat tüüpi väärtusi (string, number, boolean)? ## Funktsioonid parameetritena teiste funktsioonide jaoks Funktsioone saab edasi anda parameetritena teistele funktsioonidele. See võiks esmapilgul tunduda keeruline, aga see on võimas omadus, mis võimaldab paindliku programmeerimisstiili. See muster on väga levinud, kui tahad öelda "kui midagi juhtub, tee seda teist asja". Näiteks "kui taimer lõpeb, käivita see kood" või "kui kasutaja vajutab nuppu, kutsu see funktsioon". Vaatame setTimeouti, mis on sisseehitatud funktsioon, mis ootab kindla aja ja siis täidab mingit koodi. Me peame ütlema, millist koodi täita – selleks ongi funktsiooni edasiandmine ideaalne! Proovi seda koodi – 3 sekundi pärast näed sõnumit: Pane tähele, et anname setTimeoutile edasi displayDone (ilma sulgudeta). Me ei kutsu seda funktsiooni ise, vaid anname selle setTimeoutile ja ütleme: "käivita see 3 sekundi pärast." ### Anonüümsed funktsioonid Mõnikord vajad funktsiooni ainult ühe asja jaoks ja sa ei taha sellele nime anda. Mõtle sellele – kui kasutad funktsiooni ainult kord, miks segada oma kood nimedega? JavaScript lubab luua anonüümseid funktsioone – funktsioonid ilma nimesideta, mida saad defineerida seal, kus neid vajad. Siin on, kuidas võiksime muuta meie taimerinäite anonüümseks funktsiooniks: See annab sama tulemuse, aga funktsioon on defineeritud otse setTimeout kutses, ilma eraldi funktsiooni deklaratsioonita. ### Ümarnoole funktsioonid Kaasaegses JavaScriptis on olemas veelgi lühem viis funktsioonide kirjutamiseks – noolefunktsioonid. Need kasutavad => sümbolit (mis näeb välja nagu nool) ja on arendajate seas väga populaarsed. Noolefunktsioonid võimaldavad jätta ära sõna function ja kirjutada koodi palju kompaktsemalt. Siin on meie taimeri näide noolefunktsiooni kasutades: Tühjad sulud () tähistavad parameetreid (siin tühjad), seejärel tuleb nool => ja lõpuks funktsiooni keha kõverates sulgudes. See annab sama funktsionaalsuse lühema süntaksiga. ### Millal kasutada millist lähenemist Millal siis kumbagi kasutada? Praktiline reegel: kui kutsud funktsiooni mitu korda, anna sellele nimi ja defineeri see eraldi. Kui kasutad funktsiooni ainult korra, kaalu anonüümset funktsiooni. Nii noolefunktsioonid kui traditsiooniline süntaks on kehtivad valikud, kuigi noolefunktsioonid on tänapäeva koodibaasides domineerivad. ### 🎨 Funktsioonistiilide valdamise kontroll: õige süntaksi valimine Testi oma süntaksiteadmisi: - Millal eelistad noolefunktsioone traditsioonilise funktsioonisüntaksi asemel? - Mis on anonüümsete funktsioonide suurim eelis? - Kas oskad mõelda olukorda, kus nimetatud funktsioon on anonüümse asemel parem? --- ## 🚀 Väljakutse Kas suudad ühes lauses sõnastada funktsioonide ja meetodite erinevuse? Proovi järele! ## GitHub Copilot Agent'i väljakutse 🚀 Kasuta Agent režiimi, et täita järgmine väljakutse: Kirjeldus: Loo matemaatiliste funktsioonide abiteek, mis demonstreerib selle õppetüki käsitletud funktsioonide kontseptsioone, sealhulgas parameetreid, vaikeväärtusi, tagastusi ja noolefunktsioone. Prompt: Loo JavaScripti fail nimega mathUtils.js, mis sisaldab järgmisi funktsioone: 1. Funktsioon add, mis võtab kaks parameetrit ja tagastab nende summa 2. Funktsioon multiply vaikeväärtustega parameetritel (teine parameeter vaikimisi 1) 3. Noolefunktsioon square, mis võtab numbri ja tagastab selle ruudu 4. Funktsioon calculate, mis võtab parameetrina teise funktsiooni ja kaks numbrit, seejärel rakendab seda funktsiooni nendele numbritele 5. Näita iga funktsiooni kutsumist sobivate testjuhtudega Loe agent režiimi kohta rohkem siit: agent mode. ## Pärast loengut viktoriin Pärast loengut viktoriin ## Ülevaade ja iseseisev õppimine Tasub lugeda natuke rohkem noolefunktsioonide kohta, kuna neid kasutatakse üha rohkem koodibaasides. Harjuta funktsiooni kirjutamist ja seejärel sama funktsiooni ümberkirjutamist selle süntaksi abil. ## Kodune ülesanne Fun with Functions --- ## 🧰 Sinu JavaScripti funktsioonide tööriistakasti kokkuvõte --- ## 🚀 Sinu JavaScripti funktsioonide meistriaja ajakava ### ⚡ Mida saad teha järgmise 5 minutiga - [ ] Kirjuta lihtne funktsioon, mis tagastab su lemmiknumbri - [ ] Loo funktsioon kahel parameetril, mis liidab need kokku - [ ] Proovi traditsioonilise funktsiooni teisendamist noolefunktsiooni süntaksiks - [ ] Harjuta ülesannet: selgita, mis vahe on funktsioonidel ja meetoditel ### 🎯 Mida saad selle tunni jooksul saavutada - [ ] Lõpeta õppetunni järgne viktoriin ja vaata üle kõik segased teemad - [ ] Ehita matemaatika utiliitide teek GitHub Copilot väljakutse põhjal - [ ] Loo funktsioon, mis kasutab teist funktsiooni parameetrina - [ ] Harjuta funktsioonide kirjutamist vaikimisi parameetritega - [ ] Katseta mallstringe funktsioonide tagastatavates väärtustes ### 📅 Sinu nädalane funktsioonide meisterlikkus - [ ] Täida loominguliselt ülesanne „Põnevad funktsioonid“ - [ ] Refaktoreeri mõni korduv kood, mille oled kirjutanud, taaskasutatavateks funktsioonideks - [ ] Ehita väike kalkulaator, kasutades ainult funktsioone (ilma globaalseid muutujaid) - [ ] Harjuta noolefunktsioone massiivimeetoditega nagu map() ja filter() - [ ] Loo kogu kasulikke funktsioone tavapäraste ülesannete jaoks - [ ] Õpi kõrgema taseme funktsioone ja funktsionaalset programmeerimist ### 🌟 Sinu kuu pikkune muutus - [ ] Valda keerukamaid funktsioonide kontseptsioone nagu sulgemine ja ulatus - [ ] Ehita projekt, mis tugevalt kasutab funktsioonide kompositsiooni - [ ] Panusta avatud lähtekoodile, parandades funktsioonide dokumentatsiooni - [ ] Õpeta kedagi teist funktsioonidest ja erinevatest süntaksistiilidest - [ ] Uuri JavaScripti funktsionaalse programmeerimise paradigmasid - [ ] Loo isiklik teek taaskasutatavatest funktsioonidest tulevasteks projektideks ### 🏆 Lõplik funktsioonide meistrivõistluse kokkuvõte Tähista oma funktsioonide valdamist: - Milline on kõige kasulikum funktsioon, mida oled seni loonud? - Kuidas on funktsioonidest õppimine muutnud sinu mõtlemist koodi organiseerimise kohta? - Millist funktsiooni süntaksit eelistad ja miks? - Millise päriselu probleemi lahendaksid funktsiooni kirjutamisega? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Tähelepanek: See dokument on tõlgitud tehisintellekti tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, pidage meeles, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle emakeeles tuleks võtta autoriteetse allikana. Kriitilise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta käesoleva tõlke kasutamisest tingitud arusaamatuste või valesti tõlgenduste eest. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScripti alused: otsuste tegemine

Kas oled kunagi mõelnud, kuidas rakendused teevad nutikaid otsuseid? Näiteks kuidas navigatsioonisüsteem valib kiireima marsruudi või kuidas termostaat otsustab, millal kütte sisse lülitada? See on programmeerimise otsustamise põhikontseptsioon. Nii nagu Charles Babbage’i Analüütiline Masin oli loodud erinevaid toimingujadasid tingimustest lähtuvalt järgnema, peavad ka tänapäeva JavaScripti programmid tegema valikuid erinevate olukordade põhjal. See võime haruneda ja teha otsuseid muudab staatilise koodi vastutulelikeks ja intelligentseteks rakendusteks. Selles õppetükis õpid, kuidas oma programmidesse tingimusloogikat rakendada. Uurime tingimuslauseid, võrdlusoperaatoreid ja loogilisi avaldisi, mis lubavad su koodil olukordi hinnata ja sobivalt reageerida. ## Enne loengut test Enne loengut test Võime otsuseid teha ja programmi voogu juhtida on programmeerimise aluseks. Selles osas käsitletakse, kuidas juhtida oma JavaScripti programmide täitmisteed, kasutades Boole väärtusi ja tingimusloogikat. [](https://youtube.com/watch?v=SxTp8j-fMMY "Otsuste tegemine") ## Lühike ülevaade Boole'idest Enne kui otsustamise juurde asume, meenutame eelmise õppetüki Boolean-väärtusi. Need väärtused, mille nimes on mõjuva matemaatik George Boole’i järgi, esindavad binaarseid olekuid – kas true ehk tõene või false ehk väär. Pole mingit kahtlust ega keskteed. Need binaarsed väärtused on kogu arvutusloogika aluseks. Iga otsus, mida su programm teeb, lõppeb Boolean-hinnanguga. Boolean-muutuja loomine on lihtne: See loob kaks muutujat, millel on selgelt määratud Boolean-väärtused. ✅ Boole'id on nimetatud inglise matemaatiku, filosoofi ja loogiku George Boole’i (1815–1864) järgi. ## Võrdlusoperaatorid ja Boole’id Praktikas ei määra Boolean-väärtusi tavaliselt käsitsi, vaid loome need tingimusi hinnates: „Kas see number on suurem kui see?“ või „Kas need väärtused on võrdsed?“ Võrdlusoperaatorid võimaldavad neid hinnanguid teha. Nad võrdlevad väärtusi ja tagastavad Boolean-tulemuse, tuginedes operandide omavahelisele suhtele. ✅ Kontrolli oma teadmisi kirjutades brauseri konsoolis mõningaid võrdlusi. Kas mõni tagastatud tulemus üllatab sind? ### 🧠 Võrdluse valdamise kontroll: Boolean-loogika mõistmine Testi oma võrdlusoskust: - Miks arvad, et === (range võrdsus) on üldiselt eelistatum == (ülevalt leebem võrdsus) asemel? - Mida teeb 5 === '5'? Ent 5 == '5'? - Milline on vahe !== ja != vahel? ## If lause if lause on nagu koodis küsimuse esitamist: „Kui see tingimus on tõene, siis tee seda.“ See on ilmselt kõige olulisem vahend otsuste tegemisel JavaScriptis. Näide, kuidas see töötab: Tingimus pannakse sulgudes, ja kui see on true, täidab JavaScript koodi koolonite sees. Kui see on false, siis see plokk jäetakse vahele. Tingimuste loomiseks kasutatakse tihti võrdlusoperaatoreid. Praktikas näeb see välja nii: Kuna 1000 >= 800 on true, täidetakse ploki sees olev kood ja konsooli kuvatakse "Getting a new laptop!". ## If..Else lause Aga mis sa teed, kui soovid programmi lasta teha midagi muud, kui tingimus on väär? Täpselt selle jaoks ongi else – see on nagu varuplaan. else lause lubab öelda: „kui see tingimus ei pea paika, tee hoopis see teine asi.“ Kuna 500 >= 800 on false, siis esimene plokk jäetakse vahele ja käivitatakse else plokk. Konsoolis kuvatakse "Can't afford a new laptop, yet!". ✅ Testi selle ja järgneva koodi toimimist brauseri konsoolis. Muuda muutuja currentMoney ja laptopPrice väärtusi, et muuta konsooli poolt tagastatud console.log() sõnumit. ### 🎯 If-Else loogika kontroll: harunemisteed Hinda oma tingimusloogika mõistmist: - Mis juhtub, kui currentMoney on täpselt laptopPrice võrdne? - Kas oskad välja mõelda mõne reaalse stsenaariumi, kus if-else loogika oleks kasulik? - Kuidas võiksid laiendada seda, et katta mitu hinnaklassi? ## Switch lause Mõnikord pead võrdlema ühte väärtust mitme võimalusega. Kuigi võiksid kasutada mitut if..else lauset, muutub see kiiresti keeruliseks. switch lause pakub puhtamat struktuuri mitme konkreetse väärtuse käsitlemiseks. See kontseptsioon meenutab varasemaid mehaanilisi vahetussüsteeme telefonikeskustes – üks sisendväärtus määrab, millist konkreetset teed täitmine järgib. Struktuur näeb välja järgmiselt: - JavaScript hindab avaldist ühe korra - Otsib kõikidest case-idest sobivat juhust - Kui sobiv leitakse, täidetakse selle plokk - break käsib JavaScriptil switch lausest väljuda - Kui ühtki sobivat pole, täidetakse default plokk (kui see on olemas) Selles näites näeb JavaScript, et dayNumber on 2, leiab sobiva case 2, määrab dayName väärtuseks "Tuesday" ning katkestab switch-lausendi. Tulemuseks logitakse konsooli "Today is Tuesday". ✅ Testi selle ja järgnevate koodide toimimist brauseri konsoolis. Muuda muutuja a väärtust, et muuta konsoolis välja toodud console.log(). ### 🔄 Switch-lausendi valdamise kontroll: mitu valikut Testi switch-lausendi mõistmist: - Mis juhtub, kui unustad break? - Millal kasutaksid switch lauset mitme if-else asemel? - Miks on default plokk kasulik ka siis, kui arvad, et kõik juhtumid on kaetud? ## Loogilised operaatorid ja Boole’id Keerulised otsused nõuavad tihti mitme tingimuse samaaegset hindamist. Nii nagu Boole algebra võimaldab matemaatikutel loogilisi avaldisi kombineerida, pakub programmeerimine loogilisi operaatorid mitme Boolean-tingimuse ühendamiseks. Need operaatorid lubavad keerukat tingimusloogikat, ühendades lihtsaid tõeväärtuste hinnanguid. Need operaatorid võimaldavad tingimusi kasulikult ühendada: - JA (&&) tähendab, et mõlemad tingimused peavad olema tõesed - VÕI (||) tähendab, et vähemalt üks tingimus peab olema tõene - MITTE (!) pöörab tõeväärtuse ümber ## Tingimused ja otsused loogiliste operaatoritega Vaatame neid loogilisi operaatorid praktilises näites: Selles näites arvutatakse 20% soodushinnaga hind (640), seejärel kontrollitakse, kas meil on kas täielikult või soodushinnaga piisavalt raha katmiseks. Kuna 600 täidab soodushinna künnise 640 (st tingimus on tõene), hinnatakse tingimus tõeseks. ### 🧮 Loogika operaatoreid kontroll: tingimuste kombineerimine Testi enda arvamist loogiliste operaatorite kohta: - Avaldises A && B, mis juhtub, kui A on väär? Kas B-d hinnatakse üldse? - Kas oskad mõelda olukorrale, kus kõik kolm operaatorit (&&, ||, !) on korraga vajalikud? - Milline on vahe !user.isActive ja user.isActive !== true vahel? ### Negatsiooni operaator Mõnikord on lihtsam mõelda, millal midagi EI OLE tõene. Näiteks selle asemel, et küsida „Kas kasutaja on sisse logitud?“, võiks küsida „Kas kasutaja EI OLE sisse logitud?“ Kutseis (!) pöörab loogika ümber. ! operaator tähendab "vastand...“ – kui midagi on true, teeb ! selle false ja vastupidi. ### Tingimusavaldised (ternary) Lihtsate tingimuslike väärtuste määramiseks pakub JavaScript ternary operaatorit. See lühike süntaks võimaldab ükskord tingimusavaldis kirjutada ühel real, mis sobib hästi olukordadesse, kus tuleb valida kahe väärtuse vahel. See loeb nagu küsimus: „Kas see tingimus kehtib? Jah? Kasuta seda väärtust. Ei? Kasuta teist väärtust.“ Järgnevalt on konkreetsem näide: ✅ Võta hetk, et seda koodi mõne korra lugeda. Kas mõistad, kuidas need operaatorid töötavad? See rida ütleb: „Kas firstNumber on suurem kui secondNumber? Kui jah, paneb firstNumber muutujasse biggestNumber. Kui ei, siis paneb sinna secondNumber." Ternary operaator on lihtsalt lühem klassikalisest if..else lausest: Mõlemad meetodid annavad identse tulemuse. Ternary operaator on lühem ja kompaktsem, samas tavapärane if-else struktuur võib keerukamate tingimuste puhul olla loetavam. --- ## 🚀 Väljakutse Loo programm, mis on esmalt kirjutatud loogiliste operaatoritega, seejärel kirjuta see ümber, kasutades ternary avaldist. Milline süntaks meeldib sulle rohkem? --- ## GitHub Copilot Agent väljakutse 🚀 Kasuta Agent režiimi, et järgmist ülesannet lahendada: Kirjeldus: Loo põhjalik hindekuulaja, mis demonstreerib mitmeid selle õppetüki otsustusmõisteid, sealhulgas if-else lauseid, switch lauseid, loogilisi operaatorid ja ternary avaldisi. Sisend: Kirjuta JavaScripti programm, mis võtab õpilase numbrilise skoori (0-100) ja määrab tema tähthinde järgmisel alusel: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Alla 60 Nõuded: 1. Kasuta tähthinde määramiseks if-else lauset 2. Kasuta loogilisi operaatorid, et kontrollida, kas õpilane läbib (hinne >= 60) JA omab kiitust (hinne >= 90) 3. Kasuta switch-lauset, et anda konkreetset tagasisidet iga tähehinde kohta 4. Kasuta ternaarset operaatorit, et määrata, kas õpilane on järgmise kursuse jaoks sobilik (hinne >= 70) 5. Lisa sisendi valideerimine, et veenduda, et hinne jääb vahemikku 0 kuni 100 Testeeri oma programmi erinevate hinnetega, kaasa arvatud äärmuslikud juhtumid nagu 59, 60, 89, 90 ja väärad sisendid. Lisateavet leiad siit: agent mode. ## Loengu järel test Loengu järel test ## Kordamine ja iseseisev õpe Loe rohkem kasutajale kättesaadavate operaatorite kohta MDN-is. Tutvu Josh Comeau imelise operaatorite ülevaatega! ## Kodutöö Operaatorid --- ## 🧠 Sinu otsustusvahendite tööriistakasti kokkuvõte --- ## 🚀 Sinu JavaScripti otsustusoskuse ajatelg ### ⚡ Mida saad teha järgmise 5 minutiga - [ ] Harjuta võrdlusoperaatoreid oma brauseri konsoolis - [ ] Kirjuta lihtne if-else lause, mis kontrollib sinu vanust - [ ] Proovi väljakutset: kirjuta if-else ümber kasutades ternaarset operaatorit - [ ] Testi, mis juhtub erinevate "tõeväärtuslike" ja "ebatõeväärtuslike" väärtustega ### 🎯 Mida saad selle tunni jooksul saavutada - [ ] Täida järeltest ja vaata üle segased kontseptsioonid - [ ] Ehita täielik hinde arvutaja GitHub Copiloti väljakutse põhjal - [ ] Loo lihtne otsustuspuu reaalse maailma stsenaariumile (näiteks riietuse valik) - [ ] Harjuta mitme tingimuse ühendamist loogiliste operaatoritega - [ ] Katseta erinevaid kasutusjuhtumeid switch-lausetega ### 📅 Sinu nädalane loogika meisterlikkus - [ ] Täida operaatorite kodutöö loovate näidetega - [ ] Loo väike testirakendus, kasutades erinevaid tingimusstruktuure - [ ] Loo vormi valideerija, mis kontrollib mitut sisendtingimust - [ ] Harjuta Josh Comeau operaatorite otsingut - [ ] Refaktoreeri olemasolevat koodi sobivamate tingimusstruktuuride kasutamiseks - [ ] Õpi lühitsükli hindamist ja selle mõju jõudlusele ### 🌟 Sinu kuu pikkune areng - [ ] Valda keerukaid pesastatud tingimusi ja hoia koodi loetavus - [ ] Ehita rakendus keeruka otsustusloogikaga - [ ] Panusta avatud lähtekoodi, parandades tingimusloogikat olemasolevates projektides - [ ] Õpeta kedagi teist erinevate tingimusstruktuuride kohta ja nende kasutusajal - [ ] Uuri funktsionaalprogrammeerimise lähenemisi tingimusloogikale - [ ] Loo isiklik viide tingimuste parimatele praktikatele ### 🏆 Lõplik otsustusoskuse meistrikontroll Tähista oma loogilise mõtlemise valdamist: - Millise kõige keerukama otsustusloogika oled edukalt rakendanud? - Milline tingimusstruktuur tundub sulle kõige loomulikum ja miks? - Kuidas on õppimine loogiliste operaatorite kohta muutnud sinu probleemide lahendamise lähenemist? - Milline reaalmaailma rakendus võiks kasu saada keerukast otsustusloogikast? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Vastutusest loobumine: See dokument on tõlgitud tehisintellekti tõlketeenuse Co-op Translator abil. Kuigi me püüame täpsust, tuleb arvestada, et automaatsetes tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle algkeeles tuleb pidada autoriteetseks allikaks. Kriitilise informatsiooni puhul soovitatakse professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tingitud arusaamatuste või väärinterpreteerimiste eest. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Põhitõed: Massiivid ja Tsüklid

## Eel-loengu viktoriin Eel-loengu viktoriin Kas oled kunagi mõelnud, kuidas veebilehed hoiavad ostukorvi üksusi või kuvavad sinu sõprade nimekirja? Siin tulevad mängu massiivid ja tsüklid. Massiivid on nagu digitaalsed anumad, mis hoiavad mitut informatsioonitükki, samas kui tsüklid võimaldavad sul kõigi nende andmetega tõhusalt töötada ilma korduvalt koodi kirjutamata. Need kaks kontseptsiooni moodustavad koos aluse info haldamiseks sinu programmides. Õpid liiguma käsitsi iga sammu välja kirjutamisest nutika ja tõhusa koodi loomisele, mis suudab kiiresti töödelda sadu või isegi tuhandeid elemente. Selle tunni lõpuks mõistad, kuidas saavutada keerukaid andmetöötlusi vaid mõne koodireaga. Avastame need olulised programmeerimise mõisted. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Massiivid Mõtle massiive kui digitaalsele dokumendikapisüsteemile - selle asemel, et hoida ühte dokumenti ühes sahtlis, saad paigutada mitu seotud eset ühte struktureeritud anumasse. Programmeerimise seisukohast võimaldab massiiv sul talletada mitmeid informatsiooni tükke ühes organiseeritud pakendis. Olgu tegemist fotogaleriiga, ülesannete nimekirja haldamise või mängu kõrgete tulemuste jälgimisega – massiivid annavad andmete organiseerimise aluse. Vaatame, kuidas need töötavad. ✅ Massiivid on kõikjal meie ümber! Kas suudad mõelda reaalset näidet massiivile, nagu näiteks päikesepaneelide ansambel? ### Massiivide loomine Massiivi loomine on väga lihtne – kasuta lihtsalt nurksulgusid! Mis siin toimub? Oled just loonud tühja anuma, kasutades neid nurksulgusid []. Mõtle sellele nagu tühjale raamatukapi riiulile – see on valmis hoidma kõiki raamatuid, mida soovid seal organiseerida. Samuti võid algväärtustega massiivi täita kohe alguses: Huviäratavad punktid: - Saad hoida samas massiivis teksti, numbreid või isegi tõene/väär väärtusi - Eralda iga element koma abil – lihtne! - Massiivid on ideaalsed seotud info kokkuhoidmiseks ### Massiivi indeksimine Siin on miskit, mis esialgu võib tunduda ebatavaline: massiivid nummerdavad oma elemendid alates nullist, mitte ühest. See nullipõhine indekseerimine tuleneb sellest, kuidas arvutimälu töötab – see on olnud programmeerimiskonventsioon juba arvutikeelte algusaegadest, nagu C keel. Iga massiivi koht saab enda aadressi numbri, mida nimetatakse indeksiks. ✅ Kas sind üllatab, et massiivid algavad nullindeksist? Mõnes programmeerimiskeeles algavad indeksid ühest. Sellel on joon päris huvitavat ajalugu, mille kohta saad lugeda Wikipedia artiklist. Massiivi elementidele ligipääs: Mis siin toimub: - Kasutab nurksulgusid koos indeksi numbriga elementide kättesaamiseks - Tagastab selle konkreetse positsiooniga seotud väärtuse - Loendab algusest nullist, muutes esimese elemendi indeksiks 0 Massiivi elementide muutmine: Ülaltoodud näites: - Muudeti 4. indeksil olev element "Rocky Road" -> "Butter Pecan" - Lisati uus element "Cookie Dough" 5. indeksile - Pikendas automaatselt massiivi pikkust, kui lisada väljaspool praegust vahemikku ### Massiivi pikkus ja sagedased meetodid Massiivid sisaldavad sisseehitatud omadusi ja meetodeid, mis aitavad andmetega tööd palju lihtsamaks teha. Massiivi pikkuse leidmine: Olulised punktid: - Tagastab massiivi elementide koguarvu - Uuendab automaatselt elementide lisamisel või eemaldamisel - Pakkub dünaamilist arvu, mis sobib tsüklite ja kontrollide jaoks Olulised massiivi meetodid: Nende meetodite mõistmine: - Lisa elemente push() (lõppu) ja unshift() (alguses) - Eemalda elemente pop() (lõpp) ja shift() (algus) - Leia elemente indexOf() abil ja kontrolli olemasolu includes() abil - Tagastab kasulikke väärtusi, nagu eemaldatud elemendid või positsioonide indeksid ✅ Proovi ise! Kasuta oma brauseri konsooli, et luua ja muuta oma massiivi. ### 🧠 Massiivi põhiteadmiste kontroll: Andmete organiseerimine Testi oma massiivi mõistmist: - Miks, sinu arvates, loendavad massiivid elemente nullist, mitte ühest? - Mis juhtub, kui püüad juurde pääseda indeksile, mis puudub (nt arr[100] 5-elemendilises massiivis)? - Kas suudad välja mõelda kolm päriselulist olukorda, kus massiivid on kasulikud? ## Tsüklid Mõtle Charles Dickensi romaanidesse tuntud karistusele, kus õpilased pidid korduvalt tahvlile lauseid kirjutama. Kujuta ette, et saaksid lihtsalt käsu anda: "kirjuta see lause 100 korda," ja see saab automaatselt tehtud. Just nii töötavad tsüklid sinu koodis. Tsüklid on nagu väsimatu assistent, kes saab ülesandeid korduvalt ja veatult täita. Olgu vajadus vaadata üle iga ostukorvi element või kuvada kõik albumi pildid – tsüklid juhivad korduval tegevusel tõhusalt. JavaScript pakub mitu erinevat tsükli tüüpi. Vaatame igaüht ja mõistame, millal neid kasutada. ### For-tsükkel for tsükkel on nagu taimeri sisselülitamine – sa tead täpselt, mitu korda midagi teha tahad. See on väga organiseeritud ja ettearvatav, mis teeb selle ideaalseks massiividega töötamisel või kui pead midagi lugema. For-tsükli struktuur: Samm-sammult, siin toimub: - Initsialiseerib loendurimuutuja i väärtusega 0 alguses - Kontrollib tingimust i < 10 iga iteratsiooni eel - Täidab koodiploki, kui tingimus on tõene - Suurendab i ühe võrra pärast iga iteratsiooni i++ abil - Lõpetab, kui tingimus muutub vääraks (kui i jõuab 10-ni) ✅ Käivita see kood brauseri konsoolis. Mis juhtub, kui teed väikseid muudatusi loenduris, tingimuses või iteratsiooniväljendis? Kas saad panna tsükli töötama tagurpidi, luues loendamise allapoole? ### 🗓️ For-tsükli oskuslikkus: Kontrollitud kordused Hinda oma for-tsükli arusaamist: - Millest koosneb for-tsükkel ja mida iga osa teeb? - Kuidas teha tagurpidi massiivilist läbitöötamist? - Mis juhtub, kui unustad inkrementosa (i++)? ### While-tsükkel while tsükkel on nagu öelda "tee seda seni, kuni…" – sa ei pruugi täpselt teada, mitu korda see toimub, aga tead, millal lõpetada. Sobib hästi olukordadeks, kus kasutajalt küsitakse sisendit seni, kuni õige vastus saab, või otsitakse andmeid kuni vajalik leitakse. While-tsükli omadused: - Jätkab täitmist seni, kuni tingimus on tõene - Nõuab käsitsi loendurimuutujate haldamist - Kontrollib tingimust enne iga iteratsiooni - Oht lõpmatute tsüklite tekkeks, kui tingimus ei muutu vääraks Näidete mõistmine: - Halda loendurimuutujat i käsitsi tsükli sees - Suurendab loendurit, et vältida lõpmatuid tsükleid - Näitab praktilist kasutust kasutaja sisendi ja katsete piiranguga - Sisaldab ohutusmehhanisme, et vältida lõpmatut täitmist ### ♾️ While-tsükli tarkuse kontroll: Tingimusel põhinev kordus Testi oma while-tsükli mõistmist: - Mis on peamine oht while-tsüklite kasutamisel? - Millal eelistad while-tsüklit for-tsüklile? - Kuidas saab vältida lõpmatuid tsükleid? ### Moodsa tsükli alternatiivid JavaScript pakub moodsat tsükli süntaksit, mis teeb koodi lugemise lihtsamaks ja vigade tekkimise vähem tõenäoliseks. For...of tsükkel (ES6+): Peamised eelised for...of: - Vabastab indeksi haldamisest ja võimaliku ühe võrra valesti lugemise vigadest - Tagab otsese ligipääsu massiivi elementidele - Parandab koodi loetavust ja vähendab süntaksivigu forEach meetod: Mida forEach kohta teada: - Täidab funktsiooni iga massiivi elemendi jaoks - Annetab väärtuse ja indeksi parameetritena - Ei saa tsüklit keset katkestada (erinevalt tavapärastest tsüklitest) - Tagastab undefined (ei loo uut massiivi) ✅ Miks eelistaksid for tsüklit while-tsüklile? 17 000 inimest küsis sama StackOverflow’s ja mõned arvamused võivad olla huvitavad sulle. ### 🎨 Moodsa tsükli süntaksi kontroll: ES6+ omaksvõtt Hinda oma kaasaegse JavaScripti mõistmist: - Millised on for...of eelised tavapäraste for-tsüklite ees? - Millal eelistaksid ikka tavapäraseid for-tsükleid? - Mis vahe on forEach ja map vahel? ## Tsüklid ja massiivid Massiivide ja tsüklite kombineerimine loob võimsad andmetöötluse võimalused. See paar on paljude programmeerimiste ülesannete alus, alates nimekirjade kuvamisest kuni statistika arvutamiseni. Traditsiooniline massiivide töötlemine: Mõistame iga lähenemist: - Kasutab massiivi pikkuse omadust tsükli piiri määramiseks - Ligipääseb elementidele indeksi kaudu tavapärastes for-tsüklites - Tagab otsese ligipääsu for...of tsüklites - Töötab iga massiivi elemendiga täpselt üks kord Praktiline andmetöötluse näide: Kuidas see kood töötab: - Initsialiseerib muutujad summa ja ekstreemidega jälgimiseks - Töötleb iga hinnet ühe efektiivse tsükliga - Kogub kokku summa keskmise arvutamiseks - Jälgib tsükli käigus kõrgeimat ja madalaimat väärtust - Arvutab lõplikud statistilised näitajad pärast tsükli lõppu ✅ Proovi oma brauseri konsoolis tsüklit kohandada enda loodud massiiviga. --- ## GitHub Copilot Agendi Väljakutse 🚀 Kasuta Agendi režiimi, et lahendada järgmine ülesanne: Kirjeldus: Loo terviklik andmetöötluse funktsioon, mis ühendab massiivid ja tsüklid andmestiku analüüsimiseks ning mõtestatud järelduste tegemiseks. Üleskutse: Loo funktsioon nimega analyzeGrades, mis võtab sisendiks massiivi õpilaste hinnetest objektidega (igaühel omadused name ja score) ning tagastab objekti statistikaga, sealhulgas kõrgeim hinne, madalaim hinne, keskmine hinne, sooritajate arv (hinded >=70) ning massiivi õpilaste nimedega, kes jäid keskmisest kõrgemale. Kasuta kindlasti kahte erinevat tsükli tüüpi lahenduses. Lisainfo agenti režiimi kohta leiad siit: agent mode. ## 🚀 Väljakutse JavaScript pakub mitmeid kaasaegseid massiivimeetodeid, mis võivad asendada traditsioonilisi tsükleid konkreetsete ülesannete jaoks. Uurige forEach, for-of, map, filter ja reduce. Teie väljakutse: Parandage üliõpilaste hinnete näidet, kasutades vähemalt kolme erinevat massiivimeetodit. Pange tähele, kui palju puhtam ja loetavam kood kaasajastatud JavaScripti süntaksiga muutub. ## Loengu järgse test Loengu järgse testi link ## Kordamine ja iseseisev õppimine JavaScripti massiividel on palju meetodeid, mis on väga kasulikud andmete manipuleerimiseks. Lugege neist meetoditest ja proovige mõnda neist (nagu push, pop, slice ja splice) oma loodud massiivil. ## Kodune ülesanne Massiivi tsüklisse võtmine --- ## 📊 Teie massiivide ja tsüklite tööriistakasti kokkuvõte --- ## 🚀 Teie massiivide ja tsüklite valdamise ajajoon ### ⚡ Mida saate järgmise 5 minutiga teha - [ ] Looge massiiv oma lemmikfilmidega ja hankige konkreetseid elemente - [ ] Kirjutage for-tsükkel, mis loendab 1-st kuni 10-ni - [ ] Proovige õppetunni kaasaegseid massiivimeetodeid - [ ] Harjutage massiivi indeksite kasutamist brauseri konsoolis ### 🎯 Mida saate selle tunni jooksul saavutada - [ ] Täitke pärast õppetundi test ja vaadake üle raskemad mõisted - [ ] Koostage põhjalik hindeanalüsaator GitHub Copiloti väljakutse põhjal - [ ] Looge lihtne ostukorv, kuhu lisate ja kustutate tooteid - [ ] Harjutage konverteerimist erinevate tsükli tüüpide vahel - [ ] Katsetage massiivimeetodeid nagu push, pop, slice ja splice ### 📅 Teie nädalakestev andmetöötluse teekond - [ ] Täitke "Massiivi tsüklisse võtmine" ülesanne loovate täiustustega - [ ] Koostage ülesannete nimekirja rakendus, kasutades massiive ja tsükleid - [ ] Looge lihtne statistika kalkulaator numbrilistele andmetele - [ ] Harjutage MDN massiivimeetoditega - [ ] Koostage fotogalerii või muusikapleieri liides - [ ] Avastage funktsionaalset programmeerimist map, filter ja reduce abil ### 🌟 Teie kuuajaline areng - [ ] Valdage edasijõudnud massiivitegevusi ja jõudluse optimeerimist - [ ] Koostage täielik andmete visualiseerimise juhtpaneel - [ ] Panustage avatud lähtekoodiga andmetöötlusprojektidesse - [ ] Õpetage kedagi teist massiive ja tsükleid praktiliste näidetega - [ ] Looge isiklik kogu taaskasutatavatest andmetöötluse funktsioonidest - [ ] Avastage algoritme ja andmestruktuure massiivide põhjal ### 🏆 Lõplik andmetöötluse meistri kontroll Tähistage oma massiivide ja tsüklite valdamist: - Milline massiivitehe on teie arvates reaalmaailma rakendustes kõige kasulikum? - Milline tsüklitüüp tundub teile kõige loomulikum ja miks? - Kuidas on massiivide ja tsüklite mõistmine muutnud teie lähenemist andmete korraldamisele? - Millist keerukat andmetöötluse ülesannet soovite järgmiseks lahendada? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Vastutusest loobumine: See dokument on tõlgitud AI-tõlketeenuse Co-op Translator abil. Kuigi püüame täpsust, tuleb arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Tähtsa teabe puhul soovitame kasutada professionaalse inimtõlke teenust. Me ei vastuta võimalike arusaamatuste või tõlgenduste eest, mis võivad tekkida selle tõlke kasutamise tõttu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

مقدمه‌ای بر جاوااسکریپت

جاوااسکریپت زبان وب است. در این چهار درس، با اصول اولیه آن آشنا خواهید شد. ### موضوعات 1. متغیرها و انواع داده 2. توابع و متدها 3. تصمیم‌گیری با جاوااسکریپت 4. آرایه‌ها و حلقه‌ها ### نویسندگان این درس‌ها با ♥️ توسط جاسمین گرین‌اوی، کریستوفر هریسون و کریس نورینگ نوشته شده‌اند. سلب مسئولیت: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است حاوی خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.

web,development

مبانی جاوااسکریپت: نوع داده‌ها

نوع داده‌ها یکی از مفاهیم پایه‌ای در جاوااسکریپت هستند که در هر برنامه‌ای که می‌نویسید با آن‌ها مواجه خواهید شد. نوع داده‌ها را مانند سیستم بایگانی‌ای در نظر بگیرید که کتابداران قدیمی در اسکندریه استفاده می‌کردند – آن‌ها جای خاصی برای طومارهای حاوی شعر، ریاضیات و اسناد تاریخی داشتند. جاوااسکریپت هم اطلاعات را به همین صورت با دسته‌بندی‌های مختلف برای انواع متفاوت داده‌ها سازماندهی می‌کند. در این درس، نوع‌های داده اصلی که جاوااسکریپت را کارا می‌کند بررسی خواهیم کرد. شما یاد می‌گیرید چگونه با اعداد، متن، مقادیر درست/نادرست کار کنید و بفهمید چرا انتخاب نوع درست برای برنامه‌هایتان ضروری است. این مفاهیم ممکن است ابتدا انتزاعی به نظر برسند، اما با تمرین، به صورت طبیعی برایتان تبدیل خواهند شد. درک نوع داده‌ها باعث می‌شود همه چیز در جاوااسکریپت خیلی واضح‌تر شود. همانطور که معماران باید مواد مختلف ساختمانی را قبل از ساخت یک کلیسا بشناسند، این مفاهیم پایه از همه چیزهایی که در ادامه می‌سازید حمایت خواهند کرد. ## آزمون پیش‌درس آزمون پیش‌درس این درس مبانی جاوااسکریپت را پوشش می‌دهد، زبانی که تعاملی بودن وب را فراهم می‌کند. [](https://youtube.com/watch?v=JNIXfGiDWM8 "متغیرها در جاوااسکریپت") [](https://youtube.com/watch?v=AWfA95eLdq8 "نوع داده‌ها در جاوااسکریپت") بیایید با متغیرها و نوع داده‌هایی که آنها را پر می‌کنند شروع کنیم! ## متغیرها متغیرها بلوک‌های سازنده اساسی در برنامه‌نویسی هستند. مثل شیشه‌های برچسب‌خورده که کیمیاگران قرون وسطی برای نگهداری مواد مختلف استفاده می‌کردند، متغیرها به شما اجازه می‌دهند اطلاعات ذخیره کرده و نامی توصیفی به آن بدهید تا بعدا بتوانید به آن ارجاع دهید. می‌خواهید سن کسی را به یاد داشته باشید؟ آن را در متغیری به نام age ذخیره کنید. می‌خواهید نام کاربر را پیگیری کنید؟ آن را در متغیری به نام userName ذخیره کنید. ما روی روش مدرن ساخت متغیرها در جاوااسکریپت تمرکز خواهیم کرد. تکنیک‌هایی که اینجا یاد می‌گیرید نمایانگر سال‌ها تکامل زبان و بهترین شیوه‌هایی است که توسط جامعه برنامه‌نویسی توسعه یافته‌اند. ساخت و اعلام یک متغیر به صورت [کلمه کلیدی] [نام] است. این تا دو قسمت تشکیل شده است: - کلمه کلیدی. از let برای متغیرهایی که ممکن است تغییر کنند استفاده کنید، یا از const برای مقادیری که ثابت می‌مانند. - نام متغیر، که نامی توصیفی است که خودتان انتخاب می‌کنید. ✅ کلمه کلیدی let در ES6 معرفی شد و به متغیر شما دامنه بلوکی می‌دهد. توصیه می‌شود به جای کلمه کلیدی قدیمی‌تر var از let یا const استفاده کنید. در بخش‌های آینده محدودیت‌های دامنه بلوکی را بیشتر بررسی خواهیم کرد. ### وظیفه - کار با متغیرها 1. اعلام یک متغیر. بیایید با ساخت اولین متغیرمان شروع کنیم: ```javascript let myVariable; ``` این کار چه نتیجه‌ای دارد: - این به جاوااسکریپت می‌گوید یک محل ذخیره به نام myVariable ایجاد کند - جاوااسکریپت فضای حافظه‌ای برای این متغیر اختصاص می‌دهد - متغیر در حال حاضر مقداری ندارد (تعریف نشده) 2. مقداری به آن بدهید. حالا بیایید چیزی داخل متغیر قرار دهیم: ```javascript myVariable = 123; ``` نحوه کار تخصیص: - عملگر = مقدار 123 را به متغیر ما اختصاص می‌دهد - متغیر اکنون این مقدار را به جای تعریف نشده دارد - شما می‌توانید در سراسر کدتان به این مقدار با استفاده از myVariable ارجاع دهید > نکته: استفاده از = در این درس یعنی استفاده از "عملگر تخصیص"، که برای دادن مقدار به یک متغیر به کار می‌رود. این به معنی برابری نیست. 3. آن را به شیوه هوشمندانه انجام دهید. بهتر است این دو مرحله را با هم ترکیب کنیم: ```javascript let myVariable = 123; ``` این رویکرد بهینه‌تر است: - شما متغیر را اعلام کرده و یک مقدار در همان جمله اختصاص می‌دهید - این روش استاندارد بین توسعه‌دهندگان است - طول کد را کاهش می‌دهد و در عین حال وضوح را حفظ می‌کند 4. نظرتان تغییر کند. اگر بخواهیم عدد دیگری ذخیره کنیم چه؟ ```javascript myVariable = 321; ``` درک تخصیص مجدد: - متغیر اکنون مقدار 321 به جای 123 دارد - مقدار قبلی جایگزین شده است – متغیرها تنها یک مقدار را در هر زمان ذخیره می‌کنند - این قابلیت تغییر، ویژگی کلیدی متغیرهایی است که با let اعلام می‌شوند ✅ امتحان کنید! می‌توانید جاوااسکریپت را مستقیماً در مرورگر خود بنویسید. یک پنجره مرورگر باز کرده و به ابزارهای توسعه‌دهنده بروید. در کنسول، پرامپتی خواهید دید؛ تایپ کنید let myVariable = 123، کلید برگشت را بزنید، سپس myVariable را وارد کنید. چه اتفاقی می‌افتد؟ توجه داشته باشید، در درس‌های بعدی بیشتر با این مفاهیم آشنا خواهید شد. ### 🧠 ارزیابی تسلط بر متغیرها: راحت بودن با آنها بیایید ببینیم نسبت به متغیرها چگونه احساس می‌کنید: - می‌توانید تفاوت بین اعلام و تخصیص متغیر را توضیح دهید؟ - چه اتفاقی می‌افتد اگر قبل از اعلام متغیر سعی کنید از آن استفاده کنید؟ - کی برای متغیری let را به جای const انتخاب می‌کنید؟ ## ثابت‌ها گاهی نیاز دارید اطلاعاتی را ذخیره کنید که در طول اجرای برنامه نباید تغییر کنند. ثابت‌ها را مانند اصول ریاضی که اقلیدس در یونان باستان بنا نهاد در نظر بگیرید – پس از اثبات و مستندسازی آن‌ها، برای همیشه ثابت باقی ماندند. ثابت‌ها مشابه متغیرها هستند، اما با محدودیت مهمی: وقتی مقدارشان را اختصاص دادید، نمی‌توانید آن را تغییر دهید. این تغییرناپذیری به جلوگیری از تغییرات تصادفی مقادیر حیاتی در برنامه شما کمک می‌کند. اعلام و مقداردهی اولیه یک ثابت همان مفاهیمی را دنبال می‌کند که برای متغیرهاست، با این تفاوت که از کلمه کلیدی const استفاده می‌شود. ثابت‌ها معمولاً با حروف بزرگ نوشته می‌شوند. کد بالا چه کاری انجام می‌دهد: - ساختن یک ثابت به نام MY_VARIABLE با مقدار 123 - استفاده از قرارداد نامگذاری با حروف بزرگ برای ثابت‌ها - جلوگیری از تغییرات آتی این مقدار ثابت‌ها دو قانون اصلی دارند: - باید بلافاصله مقدار داشته باشند – ثابت خالی مجاز نیست! - هرگز نمی‌توانید آن مقدار را تغییر دهید – اگر تلاش کنید جاوااسکریپت خطا می‌دهد. ببینید چه می‌شود: مقدار ساده - موارد زیر اجازه داده نمی‌شود: ```javascript const PI = 3; PI = 4; // مجاز نیست ``` مواردی که باید به خاطر بسپارید: - تلاش‌ها برای تخصیص دوباره به یک ثابت باعث خطا می‌شوند - محافظت از مقادیر مهم در برابر تغییرات تصادفی - اطمینان از اینکه مقدار در طول اجرای برنامه ثابت می‌ماند ارجاع شیء محافظت شده است - موارد زیر اجازه داده نمی‌شود: ```javascript const obj = { a: 3 }; obj = { b: 5 } // مجاز نیست ``` درک این مفاهیم: - جلوگیری از جایگزینی کل شیء با شیء جدید - محافظت از ارجاع به شیء اصلی - حفظ هویت شیء در حافظه مقدار شیء محافظت نمی‌شود - موارد زیر مجاز است: ```javascript const obj = { a: 3 }; obj.a = 5; // مجاز است ``` شرح آنچه اتفاق می‌افتد: - تغییر مقدار ویژگی داخل شیء - حفظ ارجاع همان شیء - نشان می‌دهد که محتوای شیء می‌تواند تغییر کند در حالی که ارجاع ثابت می‌ماند > توجه داشته باشید، const به این معنی است که ارجاع از تخصیص مجدد محافظت شده است. مقدار خود _تغییرناپذیر_ نیست و می‌تواند تغییر کند، به ویژه اگر ساختار پیچیده‌ای مانند شیء باشد. ## نوع داده‌ها جاوااسکریپت اطلاعات را به دسته‌بندی‌هایی به نام نوع داده تقسیم می‌کند. این مفهوم بازتابی از نحوه دسته‌بندی دانش در بین دانشمندان قدیمی است – ارسطو بین انواع مختلف استدلال تمایز قائل شد، با این آگاهی که اصول منطقی نمی‌توانند به صورت یکنواخت بر شعر، ریاضیات و فلسفه طبیعی اعمال شوند. نوع داده اهمیت دارد چون عملیات مختلف با انواع مختلف اطلاعات کار می‌کنند. همانطور که نمی‌توانید عملیات حسابی روی نام یک شخص انجام دهید یا یک معادله ریاضی را به صورت الفبا مرتب کنید، جاوااسکریپت نیز نیاز به نوع داده مناسب برای هر عملیات دارد. درک این موضوع از بروز خطا جلوگیری می‌کند و کد شما را قابل اطمینان‌تر می‌سازد. متغیرها می‌توانند انواع گوناگونی از مقادیر را ذخیره کنند، مانند اعداد و متن. این انواع مختلف داده‌ها به عنوان نوع داده شناخته می‌شوند. نوع داده‌ها بخش مهمی از توسعه نرم‌افزار هستند چون به توسعه‌دهندگان کمک می‌کنند تصمیم بگیرند کد چگونه نوشته شود و نرم‌افزار چگونه اجرا شود. علاوه بر این، برخی انواع داده ویژگی‌های منحصر به فردی دارند که به تبدیل یا استخراج اطلاعات بیشتر در یک مقدار کمک می‌کنند. ✅ نوع داده‌ها همچنین داده‌های اولیه جاوااسکریپت نامیده می‌شوند، زیرا پایین‌ترین سطح نوع داده‌ها هستند که توسط زبان ارائه می‌شوند. 7 نوع داده اولیه وجود دارد: رشته (string)، عدد (number)، عدد بزرگ (bigint)، بولین (boolean)، تعریف نشده (undefined)، تهی (null) و نماد (symbol). یک دقیقه زمان بگذارید و تصور کنید هر کدام از این داده‌های اولیه چه چیزی را ممکن است نشان دهند. مثلاً zebra چیست؟ عدد 0 چیست؟ true چه معنایی دارد؟ ### اعداد اعداد ساده‌ترین نوع داده در جاوااسکریپت هستند. چه با اعداد صحیح مانند 42، اعداد اعشاری مانند 3.14، یا اعداد منفی مانند -5 کار کنید، جاوااسکریپت همه آنها را یکسان مدیریت می‌کند. یادتان است متغیری که قبلاً داشتیم؟ آن 123 که ذخیره کردیم در واقع از نوع داده عددی بود: ویژگی‌های کلیدی: - جاوااسکریپت به طور خودکار مقادیری عددی را تشخیص می‌دهد - می‌توانید با این متغیرها عملیات ریاضی انجام دهید - نیازی به اعلام نوع صریح نیست متغیرها می‌توانند انواع مختلف اعداد، از جمله اعداد اعشاری یا منفی را ذخیره کنند. اعداد همچنین می‌توانند با عملگرهای ریاضی که در بخش بعدی بررسی می‌شود، استفاده شوند. ### عملگرهای حسابی عملگرهای حسابی به شما اجازه می‌دهند عملیات ریاضی را در جاوااسکریپت انجام دهید. این عملگرها همان اصولی را دنبال می‌کنند که ریاضی‌دانان برای قرن‌ها استفاده کرده‌اند – نمادهایی که در آثار دانشمندانی مانند خوارزمی ظاهر شدند که علامت‌گذاری جبری را توسعه داد. عملگرها همانطور که از ریاضیات سنتی انتظار می‌رود عمل می‌کنند: جمع برای افزودن، تفریق برای کم کردن و غیره. چند نوع عملگر برای انجام عملیات حسابی وجود دارد که برخی از آن‌ها در اینجا آمده است: ✅ امتحان کنید! یک عملیات حسابی را در کنسول مرورگرتان انجام دهید. آیا نتایج شما را شگفت‌زده می‌کند؟ ### 🧮 آزمون مهارت ریاضی: محاسبات با اطمینان دانش حسابی خود را بسنجید: - تفاوت بین / (تقسیم) و % (باقیمانده) چیست؟ - می‌توانید پیش‌بینی کنید 10 % 3 چه مقداری می‌دهد؟ (راهنما: این عدد 3.33... نیست) - چرا عملگر باقیمانده ممکن است در برنامه‌نویسی مفید باشد؟ ### رشته‌ها در جاوااسکریپت، داده‌های متنی به صورت رشته‌ها نمایش داده می‌شوند. واژه "رشته" از مفهوم اتصال کاراکترها به صورت دنباله‌ای گرفته شده است، درست مانند روشی که نویسندگان در صومعه‌های قرون وسطی حروف را به هم وصل می‌کردند تا کلمات و جملات را در دست‌نوشته‌های خود بسازند. رشته‌ها برای توسعه وب بسیار بنیادی هستند. هر قطعه متنی که در یک وبسایت نمایش داده می‌شود – نام کاربری، برچسب دکمه‌ها، پیام‌های خطا، محتوا – به عنوان داده رشته‌ای اداره می‌شود. درک رشته‌ها برای ایجاد رابط‌های کاربر کاربردی ضروری است. رشته‌ها مجموعه‌ای از کاراکترها هستند که بین علامت‌های نقل قول تکی یا دوتایی قرار دارند. درک این مفاهیم: - از علامت نقل قول تک ' یا نقل قول دوتایی " برای تعریف رشته‌ها استفاده می‌کند - داده متنی شامل حروف، اعداد، و نمادها را ذخیره می‌کند - مقادیر رشته‌ای را به متغیرها اختصاص می‌دهد برای استفاده بعدی - نیازمند نقل قول برای تمایز متن از نام متغیرها است یادتان باشد هنگام نوشتن رشته از نقل قول‌ها استفاده کنید، در غیر این صورت جاوااسکریپت آن را نام متغیر فرض می‌کند. ### قالب‌بندی رشته‌ها دستکاری رشته به شما اجازه می‌دهد عناصر متنی را با هم ترکیب کنید، متغیرها را وارد کنید، و محتوای داینامیکی بسازید که به وضعیت برنامه واکنش نشان می‌دهد. این تکنیک به شما امکان می‌دهد متن را به صورت برنامه‌نویسی بسازید. اغلب نیاز دارید چندین رشته را به هم وصل کنید – این فرایند به نام اتصال رشته‌ها (concatenation) شناخته می‌شود. برای ادغام دو یا چند رشته، یا اتصال آنها به هم، از عملگر + استفاده کنید. گام به گام، آنچه اتفاق می‌افتد این است: - ترکیب رشته‌های متعدد با استفاده از عملگر + - اتصال رشته‌ها مستقیماً به هم بدون فاصله در مثال اول - افزودن کاراکترهای فاصله " " میان رشته‌ها برای خوانایی بهتر - قرار دادن علامت‌های نگارشی مانند کاما برای ایجاد قالب‌بندی صحیح ✅ چرا 1 + 1 = 2 در جاوااسکریپت است، اما '1' + '1' = 11؟ به آن فکر کنید. در مورد '1' + 1 چه می‌گویید؟ قالب‌های رشته‌ای (template literals) روش دیگری برای قالب‌بندی رشته‌ها هستند، با این تفاوت که به جای کوتیشن، از بک‌تیک استفاده می‌شود. هر چیزی که متن عادی نباشد باید داخل جایگزین‌های ${ } قرار بگیرد. این شامل هر متغیری که ممکن است رشته باشد نیز می‌شود. هر بخش را درک کنیم: - استفاده از بک‌تیک ` `` به جای کوتیشن‌های معمولی برای ایجاد قالب‌های رشته‌ای - درج مستقیم متغیرها با استفاده از سینتکس جایگزین ${} - حفظ فاصله‌ها و قالب‌بندی دقیقاً همانطور که نوشته شده - ارائه روشی تمیزتر برای ایجاد رشته‌های پیچیده با متغیرها شما می‌توانید با هر دو روش به اهداف قالب‌بندی خود برسید، اما قالب‌های رشته‌ای به فاصله‌ها و شکستن خط‌ها احترام می‌گذارند. ✅ چه زمانی قالب رشته‌ای را به جای رشته ساده استفاده می‌کنید؟ ### 🔤 چک مهارت رشته: اطمینان از دستکاری متن مهارت‌های رشته‌ای خود را ارزیابی کنید: - می‌توانید توضیح دهید چرا '1' + '1' برابر '11' است نه ۲؟ - کدام متد رشته‌ای را خواناتر می‌یابید: عمل ادغام یا قالب‌های رشته‌ای؟ - اگر کوتیشن‌ها را دور یک رشته فراموش کنید چه اتفاقی می‌افتد؟ ### بولی‌ها بولی‌ها ساده‌ترین نوع داده را نشان می‌دهند: آنها فقط می‌توانند یکی از دو مقدار را داشته باشند – true یا false. این سیستم منطق دودویی به کار جورج بول، ریاضی‌دان قرن ۱۹ برمی‌گردد که جبر بولی را توسعه داد. با وجود سادگی‌شان، بولی‌ها برای منطق برنامه ضروری هستند. آنها به کد شما امکان می‌دهند بر اساس شرایط تصمیم بگیرد – آیا یک کاربر وارد شده است، آیا یک دکمه کلیک شده یا آیا معیارهای خاصی برآورده شده‌اند. بولی‌ها فقط دو مقدار می‌توانند داشته باشند: true یا false. بولی‌ها می‌توانند به شما کمک کنند تصمیم بگیرید کدام خطوط کد هنگام برآورده شدن شرایط خاص اجرا شوند. در بسیاری از موارد، عملگرها به تعیین مقدار بولی کمک می‌کنند و شما غالباً متغیرهایی را می‌بینید که مقداردهی اولیه شده یا مقادیرشان با عملگر به‌روزرسانی می‌شود. در مثال بالا ما: - یک متغیر ساختیم که مقدار بولی true را ذخیره می‌کند - نشان دادیم چگونه مقدار بولی false ذخیره شود - از کلیدواژه‌های دقیق true و false استفاده کردیم (بدون نیاز به کوتیشن) - این متغیرها را برای استفاده در عبارات شرطی آماده کردیم ✅ یک متغیر زمانی به عنوان 'truthy' در نظر گرفته می‌شود که به بولی true ارزیابی شود. جالب است بدانید که در جاوااسکریپت، همه مقادیر truthy هستند مگر اینکه به عنوان falsy تعریف شوند. ### 🎯 چک منطق بولی: مهارت‌های تصمیم‌گیری درک بولی خود را امتحان کنید: - چرا فکر می‌کنید جاوااسکریپت فراتر از فقط true و false، مقادیر "truthy" و "falsy" دارد؟ - می‌توانید پیش‌بینی کنید کدام یک از این‌ها falsy است: 0، "0"، []، "false"؟ - چطور بولی‌ها می‌توانند برای کنترل جریان برنامه مفید باشند؟ --- ## 📊 خلاصه جعبه ابزار نوع داده‌های شما ## چالش GitHub Copilot Agent 🚀 از حالت Agent برای تکمیل چالش زیر استفاده کنید: توضیح: یک مدیر اطلاعات شخصی ایجاد کنید که تمامی نوع داده‌های جاوااسکریپتی را که در این درس آموخته‌اید نشان دهد در حالی که سناریوهای داده دنیای واقعی را پردازش می‌کند. دستور: برنامه‌ای در جاوااسکریپت بنویسید که یک شی پروفایل کاربر بسازد که شامل: نام فرد (رشته)، سن (عدد)، وضعیت دانشجویی (بولی)، رنگ‌های مورد علاقه به صورت آرایه، و یک شی آدرس با خصوصیات خیابان، شهر و کدپستی باشد. توابعی را برای نمایش اطلاعات پروفایل و به‌روزرسانی فیلدهای جداگانه اضافه کنید. اطمینان حاصل کنید که ترکیب رشته‌ای، قالب‌های رشته‌ای، عملیات حسابی با سن، و منطق بولی برای وضعیت دانشجویی را نشان دهید. بیشتر درباره حالت agent اینجا یاد بگیرید. ## 🚀 چالش جاوااسکریپت رفتارهایی دارد که ممکن است توسعه‌دهندگان را غافلگیر کند. این یک مثال کلاسیک برای کاوش است: این را در کنسول مرورگر خود تایپ کنید: let age = 1; let Age = 2; age == Age و نتیجه را مشاهده کنید. وجود خود را برمی‌گرداند false – می‌توانید بفهمید چرا؟ این یکی از بسیاری از رفتارهای جاوااسکریپت است که ارزش فهمیدن دارد. آشنایی با این ویژگی‌ها به شما کمک می‌کند کد قابل اعتمادتری بنویسید و مشکلات را بهتر عیب‌یابی کنید. ## آزمون پس از درس آزمون پس از درس ## مرور و مطالعه خودآموز به این فهرست تمرین‌های جاوااسکریپت نگاهی بیندازید و یکی را امتحان کنید. چه چیزی یاد گرفتید؟ ## تمرین تمرین نوع داده‌ها ## 🚀 جدول زمانی تسلط شما بر نوع داده‌های جاوااسکریپت ### ⚡ چه کاری می‌توانید در ۵ دقیقه آینده انجام دهید - [ ] کنسول مرورگر خود را باز کنید و ۳ متغیر با نوع داده مختلف ایجاد کنید - [ ] چالش را امتحان کنید: let age = 1; let Age = 2; age == Age و بفهمید چرا false است - [ ] تمرین ترکیب رشته‌ای با نام و عدد مورد علاقه خود - [ ] تست کنید چه اتفاقی می‌افتد وقتی یک عدد به رشته اضافه می‌کنید ### 🎯 چه در این ساعت می‌توانید به دست آورید - [ ] آزمون پس از درس را کامل کنید و هر مفهوم ابهام‌آمیزی را مرور کنید - [ ] یک ماشین حساب کوچک بسازید که دو عدد را جمع، تفریق، ضرب و تقسیم کند - [ ] یک فرمت‌کننده ساده نام با استفاده از قالب‌های رشته‌ای بسازید - [ ] تفاوت عملگرهای مقایسه == و === را بررسی کنید - [ ] تمرین تبدیل بین انواع داده‌های مختلف ### 📅 پایه هفتگی جاوااسکریپت شما - [ ] تمرین را با اطمینان و خلاقیت کامل کنید - [ ] یک شی پروفایل شخصی با استفاده از تمام نوع داده‌های آموخته شده بسازید - [ ] با تمرین‌های جاوااسکریپت از CSS-Tricks تمرین کنید - [ ] یک اعتبارسنج ساده فرم با منطق بولی بسازید - [ ] با نوع داده‌های آرایه و شیء کار کنید (پیش‌نمایش درس‌های آینده) - [ ] به یک جامعه جاوااسکریپت بپیوندید و درباره نوع داده‌ها سوال بپرسید ### 🌟 تحول ماهانه شما - [ ] دانش نوع داده‌ها را در پروژه‌های بزرگ‌تر برنامه‌نویسی ادغام کنید - [ ] بفهمید چه زمانی و چرا هر نوع داده را در برنامه‌های واقعی استفاده کنید - [ ] به دیگر مبتدیان در درک اصول جاوااسکریپت کمک کنید - [ ] یک برنامه کوچک بسازید که انواع مختلف داده‌های کاربر را مدیریت کند - [ ] مفاهیم پیشرفته نوع داده مانند تبدیل نوع و برابری سخت را کاوش کنید - [ ] به پروژه‌های متن باز جاوااسکریپت با بهبود مستندات کمک کنید ### 🧠 بررسی نهایی تسلط بر نوع داده‌ها بنیاد جاوااسکریپت خود را جشن بگیرید: - کدام نوع داده شما را بیش از همه در رفتار خود شگفت‌زده کرد؟ - چقدر راحت هستید که متغیرها را نسبت به ثوابت برای یک دوست توضیح دهید؟ - جالب‌ترین چیزی که درباره سیستم نوع جاوااسکریپت کشف کردید چیست؟ - چه برنامه واقعی را می‌توانید با این اصول بسازید؟ --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> توضیح مهم: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های ماشینی ممکن است حاوی خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان بومی خود باید منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما مسئول سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نیستیم. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

اصول جاوااسکریپت: متدها و توابع

## آزمون پیش از درس آزمون پیش از درس نوشتن مکرر همان کد یکی از رایج‌ترین ناراحتی‌های برنامه‌نویسی است. توابع این مشکل را با اجازه دادن به بسته‌بندی کد در بلوک‌های قابل استفاده مجدد حل می‌کنند. توابع را مانند قطعات استانداردی که خط مونتاژ هنری فورد را انقلابی کرد تصور کنید – وقتی یک قطعه قابل اطمینان ایجاد کنید، می‌توانید آن را هر جا که لازم است بدون بازسازی از ابتدا استفاده کنید. توابع به شما امکان می‌دهند قطعات کد را بسته‌بندی کنید تا بتوانید آن‌ها را در سراسر برنامه خود دوباره استفاده کنید. به جای کپی و پیست کردن همان منطق در همه جا، می‌توانید یکبار یک تابع ایجاد کرده و هر زمان که لازم بود آن را فراخوانی کنید. این رویکرد کد شما را سازمان یافته نگه می‌دارد و به‌روزرسانی‌ها را بسیار آسان‌تر می‌کند. در این درس، می‌آموزید چگونه توابع خود را ایجاد کنید، اطلاعات را به آنها منتقل کنید و نتایج مفید دریافت کنید. تفاوت بین توابع و متدها را کشف می‌کنید، روش‌های نحو مدرن را می‌آموزید و می‌بینید چگونه توابع می‌توانند با توابع دیگر کار کنند. این مفاهیم را گام به گام خواهیم ساخت. [](https://youtube.com/watch?v=XgKsD6Zwvlc "متدها و توابع") ## توابع یک تابع بلوکی مستقل از کد است که یک کار خاص را انجام می‌دهد. این منطق را کپسوله می‌کند که می‌توانید هر زمان لازم باشد اجرا کنید. به جای نوشتن همان کد چندین بار در سراسر برنامه، می‌توانید آن را در یک تابع بسته‌بندی کرده و هر زمان که نیاز داشتید آن را فراخوانی کنید. این رویکرد کد شما را تمیز نگه می‌دارد و به‌روزرسانی‌ها را بسیار ساده‌تر می‌کند. تصور کنید اگر لازم بود منطق پراکنده در ۲۰ مکان مختلف در کد خود را تغییر دهید، نگهداری چقدر دشوار می‌شد. نام‌گذاری توابع به صورت توصیفی حیاتی است. یک تابع با نام خوب هدف خود را به وضوح منتقل می‌کند – وقتی cancelTimer() را می‌بینید، بلافاصله می‌فهمید چه کاری انجام می‌دهد، درست مانند دکمه‌ای که به وضوح برچسب خورده و دقیقاً می‌فهمید که با کلیک کردنش چه اتفاقی خواهد افتاد. ## ایجاد و فراخوانی یک تابع بیایید ببینیم چگونه می‌توان یک تابع ساخت. نحو به یک الگوی ثابت پیروی می‌کند: بیایید این را بشکنیم: - کلمه کلیدی function به جاوااسکریپت می‌گوید "هی، من دارم یک تابع ایجاد می‌کنم!" - nameOfFunction جایی است که نام توصیفی برای تابع خود می‌دهید - پرانتزهای () جایی است که می‌توانید پارامترها را اضافه کنید (بزودی درباره آن صحبت می‌کنیم) - آکولادهای {} شامل کدی است که هنگام فراخوانی تابع اجرا می‌شود بیایید یک تابع ساده برای سلام دادن بسازیم تا این را عملی ببینیم: این تابع عبارت "Hello, world!" را در کنسول چاپ می‌کند. وقتی آن را تعریف کردید، می‌توانید به تعداد دلخواه از آن استفاده کنید. برای اجرای (یا "فراخوانی") تابع خود، نام آن را نوشته و پس از آن پرانتزها را قرار دهید. جاوااسکریپت به شما اجازه می‌دهد تابع خود را قبل یا بعد از فراخوانی تعریف کنید – موتور جاوااسکریپت ترتیب اجرا را مدیریت خواهد کرد. وقتی این خط را اجرا می‌کنید، تمام کد داخل تابع displayGreeting شما اجرا می‌شود و عبارت "Hello, world!" را در کنسول مرورگر شما نشان می‌دهد. می‌توانید این تابع را چندین بار فراخوانی کنید. ### 🧠 بررسی اصول توابع: ساخت اولین توابع شما بیایید ببینیم در مورد توابع پایه چه احساسی دارید: - چرا در تعریف توابع از آکولاد {} استفاده می‌کنیم؟ - اگر displayGreeting را بدون پرانتزها بنویسید چه اتفاقی می‌افتد؟ - چرا ممکن است بخواهید همان تابع را چندین بار فراخوانی کنید؟ ### بهترین روش‌ها برای نوشتن توابع چند نکته برای کمک به شما در نوشتن توابع عالی: - به توابع خود نام‌های واضح و توصیفی بدهید – خود آیندۀ شما بابت این کار از شما قدردانی خواهد کرد! - برای نام‌های چندکلمه‌ای از camelCase استفاده کنید (مثل calculateTotal به جای calculate_total) - هر تابع را روی انجام یک کار خاص متمرکز نگه دارید ## ارسال اطلاعات به یک تابع تابع displayGreeting ما محدود است – فقط می‌تواند برای همه "Hello, world!" را نمایش دهد. پارامترها به ما اجازه می‌دهند توابع را مفیدتر و انعطاف‌پذیرتر کنیم. پارامترها مانند جایگزین‌هایی هستند که می‌توانید هر بار که تابع را استفاده می‌کنید، مقادیر مختلفی را در آن‌ها قرار دهید. به این شکل، همان تابع می‌تواند با اطلاعات متفاوتی در هر فراخوانی کار کند. پارامترها را در پرانتز هنگام تعریف تابع لیست می‌کنید و چند پارامتر را با کاما جدا می‌کنید: هر پارامتر مانند یک جایگزین عمل می‌کند – وقتی کسی تابع شما را فراخوانی می‌کند، مقادیر واقعی را که وارد این جاها می‌شود فراهم می‌کند. بیایید تابع سلام را بروزرسانی کنیم تا نام فرد را بپذیرد: متوجه می‌شوید که چگونه از بک‌تیک‌ها (` `) و ${}` استفاده می‌کنیم تا نام را مستقیماً در پیغام درج کنیم – این قالب رشته‌ای (template literal) نامیده می‌شود و راه بسیار مفیدی برای ساختن رشته‌ها با متغیرها است. حال وقتی تابع را فراخوانی می‌کنیم، می‌توانیم هر نامی را ارسال کنیم: جاوااسکریپت رشته 'Christopher' را می‌گیرد، به پارامتر name اختصاص می‌دهد و پیغام شخصی‌شده "Hello, Christopher!" را می‌سازد. ## مقادیر پیش‌فرض اگر بخواهیم برخی پارامترها اختیاری باشند چه؟ این‌جا مقادیر پیش‌فرض به کار می‌آیند! فرض کنید می‌خواهیم افراد بتوانند کلمه سلام را سفارشی کنند، اما اگر مشخص نکنند، فقط از "Hello" استفاده می‌کنیم. می‌توانید با استفاده از علامت مساوی، مانند تعریف متغیر، مقادیر پیش‌فرض تنظیم کنید: در اینجا، name هنوز مورد نیاز است، اما salutation مقدار پشتیبان 'Hello' دارد اگر کسی سلام دیگری وارد نکند. حالا می‌توانیم این تابع را به دو روش مختلف فراخوانی کنیم: در فراخوانی اول، جاوااسکریپت از مقدار پیش‌فرض "Hello" استفاده می‌کند چون سلامتی تعیین نکرده‌ایم. در فراخوانی دوم، به جای آن از "Hi" سفارشی ما استفاده می‌کند. این انعطاف‌پذیری توابع را برای سناریوهای مختلف قابل انطباق می‌کند. ### 🎛️ بررسی تسلط بر پارامترها: توابع انعطاف‌پذیر مهارت خود را در پارامترها بسنجید: - تفاوت بین پارامتر و آرگومان چیست؟ - چرا مقادیر پیش‌فرض در برنامه‌نویسی دنیای واقعی مفیدند؟ - چه اتفاقی می‌افتد اگر آرگومان بیشتری نسبت به پارامترها ارسال کنید؟ ## مقادیر بازگشتی تا الآن توابع ما فقط پیام‌ها را در کنسول چاپ کرده‌اند، اما اگر بخواهید توابع چیزی محاسبه کنند و نتیجه را به شما برگردانند چه؟ در این حالت مقادیر بازگشتی مطرح می‌شوند. به جای فقط نمایش چیزی، تابع می‌تواند مقداری را به شما برگرداند که می‌توانید در یک متغیر ذخیره کنید یا در بخش‌های دیگر کد استفاده کنید. برای ارسال مقداری به خارج، از کلمه کلیدی return به همراه مقداری که می‌خواهید بازگردانید استفاده می‌کنید: یک نکته مهم: وقتی تابع به دستور return می‌رسد، بلافاصله اجرا را متوقف می‌کند و آن مقدار را به فراخواننده می‌فرستد. بیایید تابع سلام خود را طوری تغییر دهیم که بجای چاپ، پیام را بازگرداند: حالا به جای چاپ سلام، این تابع پیام را ایجاد کرده و به ما بازمی‌گرداند. برای استفاده از مقدار بازگردانده شده، می‌توانیم آن را مانند هر مقدار دیگری در یک متغیر ذخیره کنیم: حالا greetingMessage شامل "Hello, Christopher" است و می‌توانیم آن را در هر جای کد – برای نمایش در صفحه وب، وارد کردن در ایمیل یا ارسال به تابعی دیگر – استفاده کنیم. ### 🔄 بررسی مقادیر بازگشتی: دریافت نتایج درک خود از مقادیر بازگشتی را ارزیابی کنید: - بعد از دستور return در یک تابع چه اتفاقی برای کد می‌افتد؟ - چرا بازگرداندن مقدار اغلب بهتر از فقط چاپ در کنسول است؟ - آیا یک تابع می‌تواند انواع مختلف مقادیر (رشته، عدد، بولین) را بازگرداند؟ ## توابع به عنوان پارامتر برای توابع توابع می‌توانند به عنوان پارامتر به توابع دیگر پاس داده شوند. شاید این مفهوم ابتدا پیچیده به نظر برسد، اما این یک ویژگی قدرتمند است که الگوهای برنامه‌نویسی انعطاف‌پذیر را ممکن می‌کند. این الگو بسیار رایج است وقتی می‌خواهید بگویید "وقتی چیزی اتفاق افتاد، این کار را انجام بده." مثلاً "وقتی تایمر تمام شد، این کد را اجرا کن" یا "وقتی کاربر روی دکمه کلیک کرد، این تابع را فراخوانی کن." بیایید setTimeout را بررسی کنیم که یک تابع داخلی است که پس از مدتی کد مشخصی را اجرا می‌کند. باید به آن بگوییم چه کدی اجرا شود – بهترین کاربرد برای ارسال یک تابع! این کد را امتحان کنید – پس از ۳ ثانیه، یک پیام نمایش داده می‌شود: متوجه می‌شوید که چگونه displayDone (بدون پرانتز) را به setTimeout می‌دهیم. خودمان تابع را فراخوانی نمی‌کنیم – آن را به setTimeout می‌سپاریم و می‌گوییم "این را در ۳ ثانیه بعد اجرا کن." ### توابع ناشناس گاهی اوقات شما فقط به یک تابع برای یک کار خاص نیاز دارید و نمی‌خواهید برای آن نام بگذارید. فکر کنید – اگر فقط یک بار از تابعی استفاده می‌کنید، چرا کد خود را با نام اضافی شلوغ کنید؟ جاوااسکریپت به شما اجازه می‌دهد توابع ناشناس ایجاد کنید – توابعی بدون نام که می‌توانید دقیقاً همانجا که لازم دارید تعریف کنید. این‌جا چطور می‌توانیم مثال تایمر خود را با استفاده از یک تابع ناشناس بنویسیم: این نتیجه یکسان را می‌دهد، اما تابع مستقیماً داخل فراخوانی setTimeout تعریف شده است و نیازی به تعریف جداگانه تابع نیست. ### توابع فلش (arrow functions) جاوااسکریپت مدرن روش کوتاه‌تری برای نوشتن توابع دارد که به آن توابع فلش (arrow functions) می‌گویند. آن‌ها از => استفاده می‌کنند (شبیه فلش هستند – فهمیدید؟) و بسیار محبوب برنامه‌نویسان هستند. توابع فلش به شما اجازه می‌دهند که کلمه کلیدی function را حذف کنید و کد مختصرتر بنویسید. اینجا نمونه تایمر ما با استفاده از تابع فلش است: () جایی است که پارامترها می‌آیند (در این مورد خالی است)، سپس فلش => و در نهایت بدنه تابع در آکولادها. این نحو همان کارکرد را با نوشتار مختصرتر فراهم می‌کند. ### چه زمانی از هر استراتژی استفاده کنیم چه زمانی باید از هر روش استفاده کنید؟ یک راهنمای عملی: اگر تابع را چندین بار استفاده می‌کنید، به آن نام بدهید و جداگانه تعریف کنید. اگر برای یک کاربرد خاص و یکباره است، توابع ناشناس را در نظر بگیرید. هر دو نحو فلش و بررسی سنتی معتبر هستند، اگرچه توابع فلش در کدهای جاوااسکریپت مدرن رایج‌ترند. ### 🎨 بررسی تسلط سبک توابع: انتخاب نحو مناسب درک خود از نحو را بسنجید: - چه زمانی ممکن است توابع فلش را به نحو سنتی تابع ترجیح دهید؟ - مزیت اصلی توابع ناشناس چیست؟ - می‌توانید وضعیتی را تصور کنید که تابع نام‌دار بهتر از تابع ناشناس است؟ --- ## 🚀 چالش می‌توانید در یک جمله تفاوت بین توابع و متدها را بیان کنید؟ امتحان کنید! ## چالش GitHub Copilot Agent 🚀 از حالت Agent برای انجام چالش زیر استفاده کنید: توضیح: کتابخانه‌ای از توابع ریاضی ایجاد کنید که مفاهیم مختلف تابع پوشش داده شده در این درس، از جمله پارامترها، مقادیر پیش‌فرض، مقادیر بازگشتی و توابع فلش را نشان دهد. دستور: یک فایل جاوااسکریپت به نام mathUtils.js بسازید که شامل توابع زیر باشد: 1. تابع add که دو پارامتر می‌گیرد و مجموع آن‌ها را بازمی‌گرداند 2. تابع multiply با مقادیر پیش‌فرض برای پارامترها (پارامتر دوم به طور پیش‌فرض ۱ است) 3. تابع فلش square که یک عدد می‌گیرد و توان دوم آن را بازمی‌گرداند 4. تابع calculate که یک تابع دیگر را به عنوان پارامتر می‌پذیرد و دو عدد، سپس تابع را روی آن اعداد اعمال می‌کند 5. نمایش فراخوانی هر تابع با نمونه‌های تست مناسب برای یادگیری بیشتر درباره حالت agent اینجا مراجعه کنید. ## آزمون پس از درس آزمون پس از درس ## مرور و مطالعه خودآموز خوب است کمی بیشتر درباره توابع فلش مطالعه کنید، زیرا این توابع به طور فزاینده‌ای در پایگاه‌های کد استفاده می‌شوند. نوشتن یک تابع را تمرین کنید و سپس آن را با این نحو دوباره بنویسید. ## تمرین سرگرمی با توابع --- ## 🧰 خلاصه جعبه‌ابزار توابع جاوااسکریپت شما --- ## 🚀 جدول زمانی تسلط شما بر توابع جاوااسکریپت ### ⚡ کارهایی که در ۵ دقیقه آینده می‌توانید انجام دهید - [ ] نوشتن یک تابع ساده که عدد محبوب شما را بازگرداند - [ ] ایجاد یک تابع با دو پارامتر که آن‌ها را جمع کند - [ ] تلاش کنید یک تابع سنتی را به نحوه نوشتن تابع فلش تبدیل کنید - [ ] چالش را تمرین کنید: تفاوت بین توابع و متدها را توضیح دهید ### 🎯 آنچه می‌توانید این ساعت به دست آورید - [ ] آزمون پس از درس را کامل کنید و هر مفهوم گیج‌کننده‌ای را مرور کنید - [ ] کتابخانه ابزارهای ریاضی را از چالش GitHub Copilot بسازید - [ ] تابعی ایجاد کنید که از تابع دیگری به عنوان پارامتر استفاده کند - [ ] تمرین نوشتن توابع با پارامترهای پیش‌فرض - [ ] آزمایش با قالب‌های رشته‌ای در مقادیر بازگشتی تابع ### 📅 تسلط هفتگی شما بر توابع - [ ] تکلیف "تفریح با توابع" را با خلاقیت کامل کنید - [ ] برخی کدهای تکراری که نوشته‌اید را به توابع قابل استفاده مجدد بازنویسی کنید - [ ] یک ماشین‌حساب کوچک فقط با استفاده از توابع بسازید (بدون متغیرهای سراسری) - [ ] تمرین توابع فلش با متدهای آرایه مانند map() و filter() - [ ] مجموعه‌ای از توابع کمکی برای کارهای معمولی ایجاد کنید - [ ] مفاهیم توابع Higher-Order و برنامه‌نویسی تابعی را مطالعه کنید ### 🌟 تحول ماهانه شما - [ ] تسلط بر مفاهیم پیشرفته توابع مانند closures و scope - [ ] پروژه‌ای بسازید که به طور گسترده از ترکیب توابع استفاده کند - [ ] با بهبود مستندات توابع در پروژه‌های متن‌باز مشارکت کنید - [ ] به دیگران درباره توابع و سبک‌های مختلف نوشتن آنها آموزش دهید - [ ] پارادایم‌های برنامه‌نویسی تابعی در جاوااسکریپت را کاوش کنید - [ ] کتابخانه شخصی از توابع قابل استفاده مجدد برای پروژه‌های آینده ایجاد کنید ### 🏆 بررسی نهایی قهرمان توابع تسلط خود بر توابع را جشن بگیرید: - مفیدترین تابعی که تا کنون ایجاد کرده‌اید چیست؟ - یادگیری در مورد توابع چگونه نحوه فکر کردن شما درباره سازماندهی کد را تغییر داده است؟ - کدام نحوه نوشتن تابع را ترجیح می‌دهید و چرا؟ - چه مشکلی در دنیای واقعی را با نوشتن تابع حل می‌کنید؟ --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> سلب مسئولیت: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است حاوی خطا یا نواقصی باشند. سند اصلی به زبان مبدأ باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

اصول جاوااسکریپت: گرفتن تصمیم

تا به حال فکر کرده‌اید برنامه‌ها چگونه تصمیمات هوشمندانه می‌گیرند؟ مثل اینکه یک سیستم مسیریابی چگونه سریع‌ترین مسیر را انتخاب می‌کند، یا ترموستات کی شروع به روشن کردن گرمایش می‌کند؟ این مفهوم پایه‌ای تصمیم‌گیری در برنامه‌نویسی است. همانطور که دستگاه تحلیلی چارلز بابیج بر اساس شرایط مختلف، دنباله‌های متفاوتی از عملیات را دنبال می‌کرد، برنامه‌های مدرن جاوااسکریپت نیز باید براساس شرایط متغیر انتخاب‌هایی انجام دهند. همین توانایی شاخه‌ای شدن و تصمیم‌گیری است که کد ایستا را به برنامه‌های هوشمند و پاسخگو تبدیل می‌کند. در این درس، یاد می‌گیرید چگونه منطقی شرطی را در برنامه‌هایتان پیاده‌سازی کنید. همچنین با دستورات شرطی، عملگرهای مقایسه‌ای و عبارات منطقی آشنا خواهید شد که امکان ارزیابی موقعیت‌ها و واکنش مناسب کد شما را فراهم می‌کنند. ## آزمون پیش از درس آزمون پیش از درس توانایی گرفتن تصمیم و کنترل جریان برنامه، جنبه‌ای بنیادین از برنامه‌نویسی است. این بخش چگونگی کنترل مسیر اجرای برنامه‌های جاوااسکریپت شما را با استفاده از مقادیر بولی و منطق شرطی پوشش می‌دهد. [](https://youtube.com/watch?v=SxTp8j-fMMY "گرفتن تصمیم") ## مروری بر مقادیر بولی قبل از کاوش در تصمیم‌گیری، بیایید مقادیر بولی را که در درس قبلی آموختیم مرور کنیم. این مقادیر که به افتخار ریاضیدان جورج بول نام‌گذاری شده‌اند، حالت‌های دودویی یعنی true یا false را نمایش می‌دهند. هیچ ابهامی وجود ندارد، هیچ حالت وسطی نیست. این مقادیر دودویی زیربنای تمام منطق محاسباتی هستند. هر تصمیمی که برنامه شما می‌گیرد در نهایت به ارزیابی بولی خلاصه می‌شود. ایجاد متغیرهای بولی ساده است: این دو متغیر با مقادیر بولی مشخص ایجاد می‌کند. ✅ مقادیر بولی از نام ریاضیدان، فیلسوف و منطق‌دان انگلیسی جورج بول (۱۸۱۵–۱۸۶۴) گرفته شده است. ## عملگرهای مقایسه و بولی‌ها در عمل، به ندرت خودتان به طور دستی مقادیر بولی را تنظیم می‌کنید. بلکه آنها را با ارزیابی شرایط تولید می‌کنید: «آیا این عدد بزرگتر از آن است؟» یا «آیا این مقادیر مساوی هستند؟» عملگرهای مقایسه این امکان را فراهم می‌کنند. آنها مقادیر را مقایسه کرده و نتیجه‌ی بولی بر اساس رابطه بین دو طرف برمی‌گردانند. ✅ با نوشتن چند مقایسه در کنسول مرورگرتان دانش خود را بسنجید. آیا داده‌ای برگشتی برای شما شگفت‌آور بود؟ ### 🧠 آزمون تسلط بر مقایسه: درک منطق بولی درک خود از مقایسه را بسنجید: - چرا فکر می‌کنید === (برابری سختگیرانه) عموماً نسبت به == (برابری سست) ترجیح داده می‌شود؟ - می‌توانید پیش‌بینی کنید که 5 === '5' چه نتیجه‌ای می‌دهد؟ و 5 == '5' چه؟ - تفاوت بین !== و != چیست؟ ## دستور if دستور if مثل پرسیدن یک سوال در کد شما است. «اگر این شرط درست بود، این کار را انجام بده.» احتمالاً مهم‌ترین ابزاری است که برای گرفتن تصمیم در جاوااسکریپت استفاده خواهید کرد. نحوه کار آن به این شکل است: شرط درون پرانتزها قرار می‌گیرد، و اگر true باشد، جاوااسکریپت کد داخل آکولادها را اجرا می‌کند. اگر false باشد، کل بلاک را رد می‌کند. معمولاً از عملگرهای مقایسه برای ساخت این شرایط استفاده می‌کنید. بیایید یک مثال عملی ببینیم: چون 1000 >= 800 برابر با true است، کد داخل بلاک اجرا می‌شود و پیام "خرید لپ‌تاپ جدید!" در کنسول نمایش داده می‌شود. ## دستور If..Else اما اگر بخواهید برنامه‌تان وقتی شرط false است کار متفاوتی انجام دهد چی؟ در اینجا else وارد می‌شود – مثل داشتن یک برنامه پشتیبان است. دستور else به شما امکان می‌دهد بگویید «اگر این شرط درست نبود، این کار را انجام بده.» حال چون 500 >= 800 برابر با false است، جاوااسکریپت بلاک اول را رد کرده و بلاک else را اجرا می‌کند. پیام "فعلاً به لپ‌تاپ جدید نمی‌توانم بپردازم!" در کنسول نمایش داده می‌شود. ✅ فهم خود را از این کد و کدهای بعدی با اجرای آن در کنسول مرورگر بسنجید. متغیرهای currentMoney و laptopPrice را تغییر دهید تا نتیجه‌ی تابع console.log() متفاوت شود. ### 🎯 آزمون منطق If-Else: شاخه‌های مسیر درک خود از منطق شرطی را بسنجید: - اگر currentMoney دقیقاً برابر با laptopPrice باشد چه اتفاقی می‌افتد؟ - می‌توانید یک موقعیت دنیای واقعی فکر کنید که در آن منطق if-else مفید باشد؟ - چگونه می‌توانید این را برای پوشش چند بازه قیمتی گسترش دهید؟ ## دستور switch گاهی اوقات باید یک مقدار را با گزینه‌های متعدد مقایسه کنید. در حالی که می‌توانید چندین دستور if..else به هم زنجیر کنید، این روش پیچیده و نامرتب می‌شود. دستور switch ساختاری تمیزتر برای مدیریت چند مقدار جداگانه فراهم می‌کند. این مفهوم شبیه سیستم‌های سوئیچینگ مکانیکی در مبادلات تلفنی اولیه است – یک مقدار ورودی مشخص می‌کند کدام مسیر اجرا باید دنبال شود. ساختار آن به این شکل است: - جاوااسکریپت عبارت را یک بار ارزیابی می‌کند - هر case را برای یافتن مطابقت بررسی می‌کند - وقتی مطابقت پیدا کرد، آن بلاک کد را اجرا می‌کند - break به جاوااسکریپت می‌گوید که از switch خارج شود - اگر هیچ case‌ای مطابقت نکند، بلاک default (اگر وجود داشته باشد) اجرا می‌شود در این مثال، جاوااسکریپت می‌بیند متغیر dayNumber برابر با 2 است، case 2 را پیدا کرده، dayName را به "سه‌شنبه" تنظیم می‌کند، سپس از switch خارج می‌شود. نتیجه؟ پیام "امروز سه‌شنبه است" در کنسول ثبت می‌شود. ✅ فهم خود را از این کد و کد بعدی با اجرای آن در کنسول مرورگر بسنجید. مقدار متغیر a را تغییر دهید تا نتیجه‌ی console.log() متفاوت شود. ### 🔄 آزمون تسلط بر دستور switch: گزینه‌های متعدد درک خود از switch را بسنجید: - اگر فراموش کنید break بنویسید چه اتفاقی می‌افتد؟ - چه زمانی از switch به جای چندین if-else استفاده می‌کنید؟ - چرا وجود case default حتی زمانی که فکر می‌کنید همه گزینه‌ها را پوشش داده‌اید مفید است؟ ## عملگرهای منطقی و بولی‌ها تصمیم‌گیری‌های پیچیده اغلب نیازمند ارزیابی همزمان چند شرط هستند. همان‌طور که جبر بول به ریاضیدانان اجازه می‌دهد عبارات منطقی را ترکیب کنند، برنامه‌نویسی نیز عملگرهای منطقی را برای اتصال چند شرط بولی فراهم می‌کند. این عملگرها امکان منطق شرطی پیشرفته را با ترکیب ارزیابی‌های ساده درست/نادرست فراهم می‌کنند. این عملگرها به شما امکان می‌دهند شرایط را به روش‌های مفید ترکیب کنید: - AND (&&) یعنی هر دو شرط باید درست باشند - OR (||) یعنی حداقل یکی از شرط‌ها باید درست باشد - NOT (!) درست را به نادرست (و بالعکس) تبدیل می‌کند ## شرایط و تصمیم‌ها با عملگرهای منطقی بیایید این عملگرهای منطقی را در یک مثال واقعی‌تر ببینیم: در این مثال: ابتدا قیمت ۲۰٪ تخفیف (640) محاسبه می‌شود، سپس بررسی می‌شود که آیا موجودی ما قیمت کامل یا قیمت تخفیفی را پوشش می‌دهد یا نه. چون 600 کمتر از حداقل قیمت تخفیفی 640 است، نتیجه شرط true است. ### 🧮 آزمون عملگرهای منطقی: ترکیب شرایط درک خود از عملگرهای منطقی را بسنجید: - در عبارت A && B، اگر A نادرست باشد چه اتفاقی می‌افتد؟ آیا B حتی ارزیابی می‌شود؟ - می‌توانید شرایطی فکر کنید که نیاز به هر سه عملگر (&&, ||, !) همزمان باشد؟ - تفاوت بین !user.isActive و user.isActive !== true چیست؟ ### عملگر نقیض گاهی اوقات راحت‌تر است به سراغ زمانی برویم که چیزی درست نیست. مثلا به جای پرسیدن «آیا کاربر وارد شده است؟»، می‌پرسید «آیا کاربر وارد نشده است؟» علامت تعجب (!) منطق شما را معکوس می‌کند. عملگر ! مثل این است که بگویید «برعکس...» – اگر چیزی true باشد، ! آن را به false تبدیل می‌کند و بالعکس. ### عبارات شرطی سه‌تایی برای تعیین مقدار به صورت شرطی ساده، جاوااسکریپت عملگر سه‌تایی (ternary) را ارائه می‌دهد. این نحو مختصر به شما اجازه می‌دهد یک عبارت شرطی را در یک خط بنویسید، که وقتی نیاز دارید بین دو مقدار یکی را بر اساس شرط انتخاب کنید، مفید است. این عبارت مثل یک سوال خوانده می‌شود: «آیا این شرط درست است؟ اگر بله، این مقدار را استفاده کن. اگر نه، آن مقدار را.» در زیر یک مثال ملموس‌تر است: ✅ چند لحظه وقت بگذارید و این کد را چند بار بخوانید. آیا می‌فهمید این عملگرها چگونه کار می‌کنند؟ خط زیر می‌گوید: «آیا firstNumber بزرگتر از secondNumber است؟ اگر بله، firstNumber را در biggestNumber قرار بده. اگر نه، secondNumber را در آن بگذار.» عملگر سه‌تایی فقط راهی کوتاه‌تر برای نوشتن دستور سنتی if..else است: هر دو روش نتایج یکسانی تولید می‌کنند. عملگر سه‌تایی مختصر است، اما ساختار سنتی if-else برای شرایط پیچیده‌تر ممکن است خواناتر باشد. --- ## 🚀 چالش یک برنامه بنویسید که ابتدا با عملگرهای منطقی نوشته شده باشد، سپس با استفاده از عبارت سه‌تایی آن را بازنویسی کنید. نحو مورد علاقه شما کدام است؟ --- ## چالش GitHub Copilot Agent 🚀 از حالت Agent استفاده کنید تا چالش زیر را کامل کنید: توضیح: یک ماشین حساب نمره جامع ایجاد کنید که چندین مفهوم تصمیم‌گیری از این درس را نمایش دهد، شامل دستورهای if-else، switch، عملگرهای منطقی و عبارت‌های سه‌تایی. درخواست: یک برنامه جاوااسکریپت بنویسید که نمره عددی یک دانش‌آموز (۰ تا ۱۰۰) را گرفته و درجه نامه او را با معیارهای زیر تعیین کند: - A: ۹۰ تا ۱۰۰ - B: ۸۰ تا ۸۹ - C: ۷۰ تا ۷۹ - D: ۶۰ تا ۶۹ - F: کمتر از ۶۰ الزامات: 1. برای تعیین درجه نامه از دستور if-else استفاده کنید 2. استفاده از عملگرهای منطقی برای بررسی اینکه آیا دانش‌آموز قبول شده است (نمره >= ۶۰) و همچنین دارای افتخارات است (نمره >= ۹۰) 3. استفاده از عبارت switch برای ارائه بازخورد خاص برای هر نمره حروفی 4. استفاده از عملگر سه‌تایی برای تعیین اینکه آیا دانش‌آموز واجد شرایط دوره بعدی هست (نمره >= ۷۰) 5. شامل اعتبارسنجی ورودی برای اطمینان از اینکه نمره بین ۰ تا ۱۰۰ است برنامه خود را با نمرات مختلف از جمله موارد لبه‌ای مانند ۵۹، ۶۰، ۸۹، ۹۰ و ورودی‌های نامعتبر تست کنید. بیشتر درباره حالت عامل اینجا بیاموزید. ## تست پس از درس تست پس از درس ## مرور و خودآموزی بیشتر درباره عملگرهای زیادی که برای کاربر در دسترس است در MDN بخوانید. از طریق جاش کومئو و جستجوی عالی او درباره عملگرها عبور کنید operator lookup! ## تمرین عملگرها --- ## 🧠 خلاصه جعبه‌ابزار تصمیم‌گیری شما --- ## 🚀 جدول زمانبندی تسلط شما بر تصمیم‌گیری در جاوااسکریپت ### ⚡ کارهایی که می‌توانید در ۵ دقیقه آینده انجام دهید - [ ] تمرین عملگرهای مقایسه‌ای در کنسول مرورگر خود - [ ] نوشتن یک عبارت ساده if-else که سن شما را بررسی می‌کند - [ ] چالش: بازنویسی یک if-else با استفاده از عملگر سه‌تایی - [ ] آزمایش آنچه با مقادیر "صحیح" و "غلط" مختلف اتفاق می‌افتد ### 🎯 کارهایی که می‌توانید در این ساعت به انجام برسانید - [ ] تکمیل تست پس از درس و مرور مفاهیم مبهم - [ ] ساخت ماشین حساب جامع نمره از چالش GitHub Copilot - [ ] ایجاد یک درخت تصمیم ساده برای یک سناریوی واقعی (مثل انتخاب لباس) - [ ] تمرین ترکیب چندین شرط با عملگرهای منطقی - [ ] آزمایش با عبارت‌های switch برای موارد مختلف ### 📅 تسلط هفتگی شما بر منطق - [ ] انجام تمرین عملگرها با مثال‌های خلاقانه - [ ] ساخت یک نرم‌افزار تست کوچک با استفاده از ساختارهای شرطی مختلف - [ ] ایجاد یک اعتبارسنج فرم که چندین شرط ورودی را بررسی می‌کند - [ ] تمرین تمرین‌های جاش کومئو در operator lookup - [ ] بازسازی کد موجود برای استفاده از ساختارهای شرطی مناسب‌تر - [ ] مطالعه ارزیابی کوتاه‌مدت و پیامدهای عملکردی ### 🌟 تحول ماهانه شما - [ ] تسلط بر شرایط پیچیده تو در تو و حفظ خوانایی کد - [ ] ساخت برنامه‌ای با منطق تصمیم‌گیری پیشرفته - [ ] کمک به منبع باز با بهبود منطق شرطی در پروژه‌های موجود - [ ] آموزش به دیگران درباره ساختارهای شرطی مختلف و زمان استفاده از هر یک - [ ] کاوش در رویکردهای برنامه‌نویسی تابعی برای منطق شرطی - [ ] ایجاد یک راهنمای مرجع شخصی برای بهترین شیوه‌های شرطی ### 🏆 بررسی قهرمان نهایی تصمیم‌گیری تسلط خود بر تفکر منطقی را جشن بگیرید: - پیچیده‌ترین منطق تصمیم‌گیری که با موفقیت پیاده‌سازی کرده‌اید چیست؟ - کدام ساختار شرطی برای شما طبیعی‌تر به نظر می‌رسد و چرا؟ - یادگیری درباره عملگرهای منطقی چگونه روش حل مسئله شما را تغییر داده است؟ - کدام کاربرد واقعی از منطق تصمیم‌گیری پیشرفته سود خواهد برد؟ --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> سلب مسؤولیت: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

مبانی جاوااسکریپت: آرایه‌ها و حلقه‌ها

## آزمون پیش از درس آزمون پیش از درس کسی تا به حال فکر کرده چگونه وب‌سایت‌ها اقلام سبد خرید را پیگیری می‌کنند یا فهرست دوستان شما را نمایش می‌دهند؟ اینجاست که آرایه‌ها و حلقه‌ها وارد میدان می‌شوند. آرایه‌ها مانند مخازن دیجیتال هستند که چندین قطعه اطلاعات را در خود نگه می‌دارند، در حالی که حلقه‌ها به شما امکان می‌دهند با همه آن داده‌ها به طور مؤثر و بدون کد تکراری کار کنید. این دو مفهوم در کنار هم پایه‌ای برای مدیریت اطلاعات در برنامه‌های شما هستند. شما یاد خواهید گرفت که چگونه از نوشتن دستی هر مرحله به ساخت کدی هوشمند و کارآمد که می‌تواند صدها یا حتی هزاران مورد را سریع پردازش کند، حرکت کنید. تا پایان این درس، خواهید فهمید که چگونه کارهای پیچیده داده‌ای را تنها با چند خط کد انجام دهید. بیایید این مفاهیم اساسی برنامه‌نویسی را کشف کنیم. [](https://youtube.com/watch?v=1U4qTyq02Xw "آرایه‌ها") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "حلقه‌ها") ## آرایه‌ها آرایه‌ها را مانند یک کشوی فایل دیجیتال تصور کنید - به جای ذخیره یک سند در هر کشو، می‌توانید چندین مورد مرتبط را در یک مخزن سازمان‌یافته نگه دارید. به زبان برنامه‌نویسی، آرایه‌ها به شما اجازه می‌دهند چندین قطعه اطلاعات را در یک بسته بندی منظم ذخیره کنید. چه در حال ساخت یک گالری عکس باشید، چه مدیریت یک لیست کارها یا پیگیری امتیازات بالا در بازی، آرایه‌ها پایه‌ای برای سازماندهی داده‌ها فراهم می‌کنند. بیایید ببینیم چگونه کار می‌کنند. ✅ آرایه‌ها همه جا هستند! می‌توانید یک مثال واقعی از آرایه را مثال بزنید، مثل آرایه پنل‌های خورشیدی؟ ### ایجاد آرایه‌ها ایجاد یک آرایه بسیار ساده است - فقط کافی است از کروشه‌های مربعی استفاده کنید! چه اتفاقی اینجا می‌افتد؟ شما همین الان یک مخزن خالی با استفاده از آن کروشه‌های مربعی [] ساخته‌اید. تصور کنید مثل یک قفسه کتابخانه خالی است - آماده است تا هر کتابی که می‌خواهید آنجا سازمان‌دهی کنید را در خود نگه دارد. همچنین می‌توانید آرایه خود را با مقادیر اولیه از همان ابتدا پر کنید: نکات جالب برای توجه: - می‌توانید متن، اعداد، یا حتی مقادیر درست/نادرست را در همان آرایه ذخیره کنید - فقط هر مورد را با کاما جدا کنید - ساده است! - آرایه‌ها برای نگهداری اطلاعات مرتبط با هم فوق‌العاده‌اند ### ایندکس‌گذاری آرایه یک نکته‌ای که شاید اول کمی غیرعادی به نظر برسد: آرایه‌ها اقلام خود را از شماره ۰ شمارش می‌کنند، نه ۱. این شماره‌گذاری از صفر منشأ در نحوه کار حافظه کامپیوتر دارد - و یک قرارداد برنامه‌نویسی از زمان‌های ابتدایی زبان‌هایی مانند C است. هر خانه در آرایه یک شماره آدرس مخصوص به خود به نام ایندکس دارد. ✅ آیا تعجب می‌کنید که آرایه‌ها از ایندکس صفر شروع می‌شوند؟ در برخی زبان‌های برنامه‌نویسی، ایندکس‌ها از ۱ شروع می‌شوند. تاریخچه جالبی درباره این موضوع وجود دارد که می‌توانید در ویکی‌پدیا بخوانید. دسترسی به عناصر آرایه: تجزیه و تحلیل آنچه اینجا رخ می‌دهد: - استفاده از علامت کروشه با شماره ایندکس برای دسترسی به عناصر - بازگرداندن مقدار ذخیره شده در آن موقعیت خاص آرایه - شروع شمارش از ۰ به طوری که اولین عنصر ایندکس ۰ دارد تغییر عناصر آرایه: در نمونه بالا، ما: - عنصر ایندکس ۴ را از "راک رود" به "باتر پیکان" تغییر دادیم - یک عنصر جدید "کاکی دو" را در ایندکس ۵ اضافه کردیم - اندازه آرایه را هنگام اضافه کردن فراتر از محدودیت‌های فعلی به طور خودکار افزایش دادیم ### طول آرایه و روش‌های رایج آرایه‌ها با خصوصیات و روش‌های داخلی می‌آیند که کار با داده‌ها را بسیار آسان‌تر می‌کنند. یافتن طول آرایه: نکات کلیدی برای به خاطر سپردن: - تعداد کل عناصر موجود در آرایه را بازمی‌گرداند - به صورت خودکار هنگام اضافه یا حذف عناصر به‌روزرسانی می‌شود - ارائه شمارش پویا که در حلقه‌ها و اعتبارسنجی‌ها استفاده می‌شود روش‌های مهم آرایه: درک این روش‌ها: - اضافه کردن عناصر با push() (پایان) و unshift() (شروع) - حذف عناصر با pop() (پایان) و shift() (شروع) - یافتن عناصر با indexOf() و بررسی وجود با includes() - بازگرداندن مقادیری مثل عناصر حذف شده یا ایندکس محل‌ها ✅ خودتان امتحان کنید! در کنسول مرورگر خود آرایه‌ای بسازید و آن را دستکاری کنید. ### 🧠 بررسی اصول آرایه: سازماندهی داده‌های شما درک خود را از آرایه تست کنید: - چرا فکر می‌کنید آرایه‌ها شمارش را از ۰ شروع می‌کنند نه ۱؟ - اگر تلاش کنید به ایندکسی دسترسی پیدا کنید که وجود ندارد (مانند arr[100] در آرایه‌ای با ۵ عنصر)، چه اتفاقی می‌افتد؟ - می‌توانید سه مثال دنیای واقعی که آرایه‌ها در آنها مفید هستند، بیاورید؟ ## حلقه‌ها حلقه‌ها را مانند مجازات مشهور در رمان‌های چارلز دیکنز تصور کنید که دانش‌آموزان مجبور بودند خطوطی را بارها و بارها روی تخته بنویسند. تصور کنید اگر بتوانید به سادگی به کسی بگویید «این جمله را ۱۰۰ بار بنویس» و آن به طور خودکار انجام شود. این دقیقاً همان کاری است که حلقه‌ها برای کد شما انجام می‌دهند. حلقه‌ها مانند داشتن یک دستیار بی‌وقفه‌اند که می‌تواند وظایف را بدون خطا تکرار کند. چه لازم باشد همه آیتم‌های سبد خرید را بررسی کنید یا تمام عکس‌ها را در یک آلبوم نمایش دهید، حلقه‌ها تکرار را به طور مؤثری مدیریت می‌کنند. جاوااسکریپت انواع مختلفی از حلقه‌ها را ارائه می‌دهد. بیایید هر کدام را بررسی کنیم و بفهمیم چه زمانی از آنها استفاده کنیم. ### حلقه For حلقه for مانند تنظیم تایمر است - شما دقیقاً می‌دانید چند بار می‌خواهید چیزی اتفاق بیفتد. بسیار منظم و قابل پیش‌بینی است، که آن را برای کار با آرایه‌ها یا شمارش چیزها ایده‌آل می‌کند. ساختار حلقه For: گام به گام، اینجا چه اتفاقی می‌افتد: - مقداردهی اولیه متغیر شمارنده i برابر ۰ در ابتدا - بررسی شرط i < 10 قبل از هر تکرار - اجرای بلوک کد وقتی که شرط صحیح باشد - افزایش مقدار i به اندازه ۱ بعد از هر تکرار با i++ - توقف هنگامی که شرط نادرست می‌شود (وقتی i به ۱۰ می‌رسد) ✅ این کد را در کنسول مرورگر اجرا کنید. وقتی تغییرات کوچکی در شمارنده، شرط یا قسمت افزایش ایجاد می‌کنید، چه اتفاقی می‌افتد؟ می‌توانید آن را طوری اجرا کنید که عقبگرد کند و شمارش معکوس ایجاد کند؟ ### 🗓️ بررسی تسلط بر حلقه For: تکرار کنترل‌شده درک خود از حلقه for را ارزیابی کنید: - سه قسمت حلقه For کدامند و هرکدام چه کاری انجام می‌دهند؟ - چگونه می‌توانید به صورت معکوس روی آرایه حلقه بزنید؟ - اگر قسمت افزایش (i++) را فراموش کنید چه اتفاقی می‌افتد؟ ### حلقه While حلقه while مانند گفتن «ادامه بده تا زمانی که...» است - ممکن است دقیقاً ندانید چند بار اجرا می‌شود، ولی می‌دانید چه زمانی باید متوقف شود. این برای کارهایی مانند گرفتن ورودی از کاربر تا دریافت داده مورد نظر یا جستجو در داده‌ها برای یافتن چیزی، ایده‌آل است. ویژگی‌های حلقه While: - تا زمانی که شرط درست باشد ادامه می‌دهد - مدیریت دستی متغیرهای شمارنده را نیاز دارد - شرط را قبل از هر تکرار بررسی می‌کند - ریسک حلقه بی‌نهایت اگر شرط هرگز نادرست نشود درک این مثال‌ها: - مدیریت دستی متغیر شمارنده i داخل بدنه حلقه - افزایش شمارنده برای جلوگیری از حلقه بی‌نهایت - نمایش کاربرد عملی با ورودی کاربر و محدود کردن تعداد تلاش‌ها - شامل مکانیزم‌های ایمنی برای جلوگیری از اجرای بی‌پایان ### ♾️ بررسی حکمت حلقه While: تکرار مبتنی بر شرط درک خود از حلقه while را امتحان کنید: - خطر اصلی هنگام استفاده از حلقه‌های while چیست؟ - چه زمانی حلقه while را به حلقه for ترجیح می‌دهید؟ - چگونه می‌توان از حلقه‌های بی‌نهایت جلوگیری کرد؟ ### جایگزین‌های حلقه مدرن جاوااسکریپت آجهای حلقه مدرنی ارائه می‌دهد که می‌توانند کد شما را خواناتر و کم‌خطاتر کنند. حلقه For...of (از ES6 به بعد): مزایای کلیدی for...of: - حذف مدیریت ایندکس و خطاهای احتمالی در شماره‌گذاری - دسترسی مستقیم به عناصر آرایه - افزایش خوانایی کد و کاهش پیچیدگی سینتکس روش forEach: چیزهایی که باید درباره forEach بدانید: - اجرای تابعی برای هر عنصر آرایه - ارائه مقدار عنصر و ایندکس به عنوان پارامتر - قادر به توقف زودهنگام نیست (برخلاف حلقه‌های سنتی) - بازگرداندن مقدار undefined (آرایه جدید ایجاد نمی‌کند) ✅ چرا ممکن است حلقه for را به حلقه while ترجیح دهید؟ ۱۷ هزار نفر این سؤال را در StackOverflow داشتند و برخی نظرات ممکن است برای شما جالب باشد. ### 🎨 بررسی سینتکس حلقه مدرن: پذیرش ES6+ درک خود را از جاوااسکریپت مدرن ارزیابی کنید: - مزایای for...of نسبت به حلقه‌های for سنتی چیست؟ - چه زمانی ممکن است هنوز حلقه‌های for سنتی را ترجیح دهید؟ - تفاوت forEach و map چیست؟ ## حلقه‌ها و آرایه‌ها ترکیب آرایه‌ها با حلقه‌ها قابلیت‌های قدرتمندی برای پردازش داده ایجاد می‌کند. این زوج‌بندی پایه‌ای برای بسیاری از وظایف برنامه‌نویسی است، از نمایش فهرست‌ها گرفته تا محاسبات آماری. پردازش سنتی آرایه: بیایید هر روش را درک کنیم: - استفاده از خاصیت طول آرایه برای تعیین مرز حلقه - دسترسی به عناصر توسط ایندکس در حلقه‌های for سنتی - دسترسی مستقیم به عناصر در حلقه‌های for...of - پردازش هر عنصر آرایه دقیقاً یک بار مثال عملی پردازش داده: چگونگی کارکرد این کد: - مقداردهی اولیه متغیرهای پی‌گیری مجموع و مقادیر حداکثر و حداقل - پردازش هر نمره با یک حلقه کارآمد تنها - انباشتن جمع برای محاسبه میانگین - پیگیری مقادیر بیشینه و کمینه در طول تکرار - محاسبه آمار نهایی پس از اتمام حلقه ✅ با حلقه زدن روی آرایه‌ای که خودتان ساخته‌اید در کنسول مرورگر خود آزمایش کنید. --- ## چالش GitHub Copilot Agent 🚀 از حالت Agent استفاده کنید برای کامل کردن چالش زیر: شرح: ساخت یک تابع جامع پردازش داده که آرایه‌ها و حلقه‌ها را ترکیب کند تا مجموعه داده‌ای را تحلیل کرده و بینش‌های معناداری تولید کند. دستور: تابعی به نام analyzeGrades بسازید که یک آرایه از اشیای نمرات دانش‌آموزان (هر کدام شامل نام و امتیاز) بگیرد و یک شیء با آمارهایی مانند بالاترین نمره، پایین‌ترین نمره، میانگین نمرات، تعداد دانش‌آموزانی که قبول شده‌اند (امتیاز >= ۷۰) و آرایه‌ای از نام‌های دانش‌آموزان بالاتر از میانگین را بازگرداند. در راه‌حل خود از حداقل دو نوع حلقه مختلف استفاده کنید. برای اطلاعات بیشتر درباره حالت Agent اینجا را ببینید. ## 🚀 چالش جاوااسکریپت چندین متد مدرن آرایه‌ای ارائه می‌دهد که می‌توانند جایگزین حلقه‌های سنتی برای وظایف خاص شوند. forEach، for-of، map، filter و reduce را بررسی کنید. چالش شما: مثال نمرات دانش‌آموزان را با استفاده از حداقل سه متد مختلف آرایه بازنویسی کنید. توجه کنید که چقدر کد با نحو مدرن جاوااسکریپت تمیزتر و خواناتر می‌شود. ## آزمون پس از سخنرانی آزمون پس از سخنرانی ## مرور و مطالعه خودآموز آرایه‌ها در جاوااسکریپت متدهای زیادی دارند که برای دستکاری داده‌ها بسیار مفید هستند. در مورد این متدها مطالعه کنید و چندتا از آن‌ها (مثل push، pop، slice و splice) را روی آرایه‌ای که ساخته‌اید امتحان کنید. ## تکلیف حلقه زدن روی یک آرایه --- ## 📊 خلاصه ابزارهای آرایه‌ها و حلقه‌های شما --- ## 🚀 جدول زمانی تسلط شما بر آرایه‌ها و حلقه‌ها ### ⚡ کاری که در ۵ دقیقه آینده می‌توانید انجام دهید - [ ] یک آرایه از فیلم‌های مورد علاقه‌تان بسازید و به عناصر خاص آن دسترسی پیدا کنید - [ ] یک حلقه for بنویسید که از ۱ تا ۱۰ بشمرد - [ ] چالش متدهای مدرن آرایه را که در درس بود امتحان کنید - [ ] تمرین ایندکس‌گذاری آرایه را در کنسول مرورگرتان انجام دهید ### 🎯 کاری که در این ساعت می‌توانید به انجام برسانید - [ ] آزمون پس از درس را کامل کنید و مفاهیم دشوار را مرور کنید - [ ] تحلیل‌گر نمره جامع از چالش GitHub Copilot بسازید - [ ] یک سبد خرید ساده بسازید که آیتم اضافه و حذف کند - [ ] تمرین تبدیل بین انواع مختلف حلقه‌ها - [ ] آزمایش با متدهای آرایه مانند push، pop، slice و splice ### 📅 سفر پردازش داده یک هفته‌ای شما - [ ] تکلیف "حلقه زدن روی یک آرایه" را با بهبودهای خلاقانه به پایان برسانید - [ ] یک برنامه فهرست انجام کار با استفاده از آرایه‌ها و حلقه‌ها بسازید - [ ] یک ماشین‌حساب ساده آمار برای داده‌های عددی بسازید - [ ] تمرین با متدهای آرایه MDN - [ ] یک گالری عکس یا رابط لیست پخش موسیقی بسازید - [ ] برنامه‌نویسی تابعی را با map، filter و reduce کاوش کنید ### 🌟 تحول یک ماهه شما - [ ] تسلط بر عملیات پیشرفته آرایه و بهینه‌سازی عملکرد - [ ] ساخت داشبورد کامل تجسم داده - [ ] مشارکت در پروژه‌های متن‌باز در حوزه پردازش داده‌ها - [ ] آموزش به دیگران درباره آرایه‌ها و حلقه‌ها با مثال‌های عملی - [ ] ساخت کتابخانه شخصی از توابع قابل استفاده مجدد پردازش داده - [ ] کاوش الگوریتم‌ها و ساختار داده‌های مبتنی بر آرایه ### 🏆 چک‌این قهرمان نهایی پردازش داده مهارت خود در آرایه‌ها و حلقه‌ها را جشن بگیرید: - مفیدترین عملیات آرایه‌ای که برای کاربردهای دنیای واقعی یاد گرفته‌اید چیست؟ - کدام نوع حلقه برای شما طبیعی‌تر است و چرا؟ - درک آرایه‌ها و حلقه‌ها چگونه رویکرد شما را در سازماندهی داده تغییر داده است؟ - دوست دارید بعداً چه کار پیچیده پردازش داده‌ای را انجام دهید؟ --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> سلب مسئولیت: این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. هرچند ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است دارای خطا یا نواقصی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما مسئول هیچ گونه سوءتفاهم یا برداشت نادرستی که از استفاده این ترجمه به وجود آید نیستیم. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Johdanto JavaScriptiin

JavaScript on verkon kieli. Näissä neljässä oppitunnissa opit sen perusteet. ### Aihealueet 1. Muuttujat ja tietotyypit 2. Funktiot ja metodit 3. Päätöksenteko JavaScriptillä 4. Taulukot ja silmukat ### Tekijät Nämä oppitunnit on kirjoitettu ♥️:lla Jasmine Greenaway, Christopher Harrison ja Chris Noring. --- Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.

javascript

JavaScriptin perusteet: Tietotyypit

Tietotyypit ovat yksi JavaScriptin peruskäsitteistä, joita kohtaat jokaisessa kirjoittamassasi ohjelmassa. Ajattele tietotyyppejä kuin muinaisten Aleksandrian kirjastonhoitajien käyttämää arkistointijärjestelmää – heillä oli omat paikkansa runoudelle, matematiikalle ja historiallisille asiakirjoille. JavaScript järjestää tietoa samalla tavalla eri kategorioihin eri tyyppisille datalle. Tässä oppitunnissa tutustumme JavaScriptin toiminnan ydinosa-alueisiin eli tietotyyppeihin. Opit käsittelemään numeroita, tekstiä, tosi/epätosi-arvoja ja ymmärrät, miksi oikean tyypin valinta on tärkeää ohjelmiesi kannalta. Nämä käsitteet saattavat aluksi tuntua abstrakteilta, mutta harjoittelun myötä ne muuttuvat luonnollisiksi. Tietotyyppien ymmärtäminen tekee kaikesta muusta JavaScriptissä paljon selkeämpää. Aivan kuten arkkitehtien täytyy ymmärtää eri rakennusmateriaalit ennen katedraalin rakentamista, nämä perusteet tukevat kaikkea, mitä rakennat jatkossa. ## Ennakkokysely Ennakkokysely Tämä oppitunti kattaa JavaScriptin perusteet, kielen, joka tuo interaktiivisuutta verkkoon. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Muuttujat JavaScriptissä") [](https://youtube.com/watch?v=AWfA95eLdq8 "Tietotyypit JavaScriptissä") Aloitetaan muuttujista ja tietotyypeistä, jotka täyttävät ne! ## Muuttujat Muuttujat ovat ohjelmoinnin perusrakennuspalikoita. Kuten keskiaikaiset alkemistit käyttivät nimikoituja purkkeja eri aineiden säilyttämiseen, muuttujat antavat sinun tallentaa tietoa ja antaa sille kuvaavan nimen, jotta voit viitata siihen myöhemmin. Tarvitsetko jonkun iän muistamista? Tallenna se muuttujaan nimeltä age. Haluatko seurata käyttäjän nimeä? Säilytä se muuttujassa nimeltä userName. Keskitymme moderniin tapaan luoda muuttujia JavaScriptissä. Tekniikat, joita opit täällä, edustavat vuosien kielen kehitystä ja ohjelmointiyhteisön parhaita käytäntöjä. Muuttujan luominen ja määrittäminen tapahtuu seuraavalla syntaksilla [avainsana] [nimi]. Se koostuu kahdesta osasta: - Avainsana. Käytä let muuttujille, jotka voivat muuttua, tai const arvoille, jotka pysyvät samoina. - Muuttujan nimi, tämä on kuvaava nimi, jonka valitset itse. ✅ Avainsana let esiteltiin ES6:ssa ja antaa muuttujallesi niin sanotun _lohkon scope_:n. Suositellaan käyttämään let tai const vanhemman var-avainsanan sijaan. Käsittelemme lohkon scope:a tarkemmin myöhemmissä osissa. ### Tehtävä - työskentely muuttujien kanssa 1. Määritä muuttuja. Aloitetaan luomalla ensimmäinen muuttujamme: ```javascript let myVariable; ``` Mitä tämä tekee: - Tämä kertoo JavaScriptille, että luodaan tallennuspaikka nimeltä myVariable - JavaScript varaa muistista tilaa tälle muuttujalle - Muuttujalla ei tällä hetkellä ole arvoa (undefined) 2. Anna sille arvo. Nyt laitetaan jotain muuttujaan: ```javascript myVariable = 123; ``` Kuinka arvon asettaminen toimii: - =-operaattori asettaa arvon 123 muuttujalle - Muuttuja sisältää nyt tämän arvon sen sijaan, että se olisi määrittelemätön - Voit viitata tähän arvoon koodissasi käyttämällä myVariable > Huom: = tässä oppitunnissa tarkoittaa "asetusoperaattoria", jota käytetään arvon asettamiseen muuttujalle. Se ei tarkoita yhtäsuuruutta. 3. Tee se fiksusti. Itse asiassa yhdistetään nämä kaksi vaihetta: ```javascript let myVariable = 123; ``` Tämä tapa on tehokkaampi: - Määrität muuttujan ja asetat arvon yhdellä lauseella - Tämä on kehittäjien yleinen käytäntö - Se lyhentää koodia säilyttäen selkeyden 4. Muuta mielesi. Entä jos haluamme tallentaa eri numeron? ```javascript myVariable = 321; ``` Ymmärrä uudelleenmäärittely: - Muuttuja sisältää nyt arvon 321 sen sijaan, että se olisi 123 - Edellinen arvo korvataan – muuttujat tallentavat vain yhden arvon kerrallaan - Tämä muokattavuus on avainominaisuus muuttujille, jotka on määritelty let-avainsanalla ✅ Kokeile! Voit kirjoittaa JavaScriptiä suoraan selaimessasi. Avaa selainikkuna ja siirry kehittäjätyökaluihin. Konsolissa löydät kehotteen; kirjoita let myVariable = 123, paina enteriä, ja kirjoita sitten myVariable. Mitä tapahtuu? Huomaa, että opit lisää näistä käsitteistä seuraavissa oppitunneissa. ### 🧠 Muuttujien hallinnan tarkistus: Mukavuuden saavuttaminen Katsotaan, kuinka hyvin ymmärrät muuttujat: - Voitko selittää eron muuttujan määrittämisen ja arvon asettamisen välillä? - Mitä tapahtuu, jos yrität käyttää muuttujaa ennen sen määrittämistä? - Milloin valitsisit let-avainsanan const-avainsanan sijaan muuttujalle? ## Vakiot Joskus sinun täytyy tallentaa tietoa, joka ei saa muuttua ohjelman suorituksen aikana. Ajattele vakioita kuin matemaattisia periaatteita, jotka Eukleides määritti muinaisessa Kreikassa – kerran todistettuina ja dokumentoituina ne pysyivät muuttumattomina tulevaisuudessa. Vakiot toimivat samalla tavalla kuin muuttujat, mutta tärkeällä rajoituksella: kun niiden arvo on asetettu, sitä ei voi muuttaa. Tämä muuttumattomuus auttaa estämään kriittisten arvojen tahattomia muutoksia ohjelmassasi. Vakion määrittäminen ja alustaminen noudattaa samoja periaatteita kuin muuttujan, mutta const-avainsanalla. Vakiot määritetään yleensä kokonaan isoilla kirjaimilla. Mitä tämä koodi tekee: - Luo vakion nimeltä MY_VARIABLE arvolla 123 - Käyttää isojen kirjainten nimeämiskäytäntöä vakioille - Estää tulevat muutokset tähän arvoon Vakioilla on kaksi pääsääntöä: - Sinun täytyy antaa niille arvo heti – tyhjiä vakioita ei sallita! - Et voi koskaan muuttaa sitä arvoa – JavaScript heittää virheen, jos yrität. Katsotaan, mitä tarkoitan: Yksinkertainen arvo - Seuraava EI ole sallittua: ```javascript const PI = 3; PI = 4; // ei sallittu ``` Mitä sinun täytyy muistaa: - Yritykset määrittää vakio uudelleen aiheuttavat virheen - Suojaa tärkeät arvot tahattomilta muutoksilta - Varmistaa, että arvo pysyy johdonmukaisena ohjelman aikana Objektiviittaus on suojattu - Seuraava EI ole sallittua: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ei sallittu ``` Näiden käsitteiden ymmärtäminen: - Estää koko objektin korvaamisen uudella - Suojaa alkuperäisen objektin viittauksen - Säilyttää objektin identiteetin muistissa Objektin arvo ei ole suojattu - Seuraava ON sallittua: ```javascript const obj = { a: 3 }; obj.a = 5; // sallittu ``` Mitä tässä tapahtuu: - Muokkaa objektin sisällä olevan ominaisuuden arvoa - Säilyttää saman objektiviittauksen - Osoittaa, että objektin sisältö voi muuttua, vaikka viittaus pysyy vakiona > Huomaa, että const tarkoittaa, että viittaus on suojattu uudelleenmäärittelyltä. Arvo ei kuitenkaan ole _muuttumaton_ ja voi muuttua, erityisesti jos kyseessä on monimutkainen rakenne, kuten objekti. ## Tietotyypit JavaScript järjestää tiedon eri kategorioihin, joita kutsutaan tietotyypeiksi. Tämä käsite muistuttaa, kuinka muinaiset oppineet luokittelivat tietoa – Aristoteles erotti eri päättelytyypit, tietäen, että loogisia periaatteita ei voitu soveltaa yhtenäisesti runouteen, matematiikkaan ja luonnonfilosofiaan. Tietotyypeillä on merkitystä, koska eri operaatiot toimivat eri tyyppisen tiedon kanssa. Aivan kuten et voi suorittaa laskutoimituksia henkilön nimellä tai aakkostaa matemaattista yhtälöä, JavaScript vaatii sopivan tietotyypin kutakin operaatiota varten. Tämän ymmärtäminen estää virheitä ja tekee koodistasi luotettavampaa. Muuttujat voivat tallentaa monenlaisia arvoja, kuten numeroita ja tekstiä. Näitä erilaisia arvoja kutsutaan tietotyypeiksi. Tietotyypit ovat tärkeä osa ohjelmistokehitystä, koska ne auttavat kehittäjiä tekemään päätöksiä siitä, miten koodi tulisi kirjoittaa ja miten ohjelmisto toimii. Lisäksi joillakin tietotyypeillä on ainutlaatuisia ominaisuuksia, jotka auttavat muuntamaan tai poimimaan lisätietoa arvosta. ✅ Tietotyyppejä kutsutaan myös JavaScriptin datan primitiiveiksi, koska ne ovat kielen tarjoamia matalimman tason tietotyyppejä. Primitiivejä on seitsemän: string, number, bigint, boolean, undefined, null ja symbol. Käytä hetki visualisoidaksesi, mitä kukin näistä primitiiveistä voisi edustaa. Mikä on zebra? Entä 0? true? ### Numerot Numerot ovat JavaScriptin yksinkertaisin tietotyyppi. Olipa kyseessä kokonaisluvut kuten 42, desimaalit kuten 3.14 tai negatiiviset luvut kuten -5, JavaScript käsittelee niitä yhtenäisesti. Muistatko aiemman muuttujamme? Tuo 123, jonka tallensimme, oli itse asiassa numerotietotyyppi: Keskeiset ominaisuudet: - JavaScript tunnistaa automaattisesti numeeriset arvot - Voit suorittaa matemaattisia operaatioita näillä muuttujilla - Ei vaadi eksplisiittistä tyypin määrittelyä Muuttujat voivat tallentaa kaikenlaisia numeroita, mukaan lukien desimaaleja tai negatiivisia lukuja. Numeroita voidaan myös käyttää aritmeettisten operaattoreiden kanssa, joita käsitellään seuraavassa osiossa. ### Aritmeettiset operaattorit Aritmeettiset operaattorit mahdollistavat matemaattisten laskutoimitusten tekemisen JavaScriptissä. Nämä operaattorit noudattavat samoja periaatteita, joita matemaatikot ovat käyttäneet vuosisatojen ajan – samoja symboleja, jotka esiintyivät oppineiden kuten Al-Khwarizmin teoksissa, jotka kehittivät algebrallista merkintätapaa. Operaattorit toimivat kuten perinteisessä matematiikassa: plus yhteenlaskuun, miinus vähennykseen ja niin edelleen. Aritmeettisia toimintoja suoritettaessa on käytettävissä useita operaattoreita, joista osa on lueteltu tässä: ✅ Kokeile! Kokeile aritmeettista operaatiota selaimesi konsolissa. Yllättävätkö tulokset sinut? ### 🧮 Matematiikkataitojen tarkistus: Laskeminen luottavaisesti Testaa aritmeettista ymmärrystäsi: - Mikä ero on / (jakolasku) ja % (jakojäännös) välillä? - Osaatko ennustaa, mitä 10 % 3 on? (Vihje: se ei ole 3.33...) - Miksi jakojäännösoperaattori voisi olla hyödyllinen ohjelmoinnissa? ### Merkkijonot JavaScriptissä tekstuaalinen data esitetään merkkijonoina. Termi "merkkijono" tulee käsitteestä, jossa merkkejä yhdistetään peräkkäin, aivan kuten keskiaikaiset kirjurit yhdistivät kirjaimia muodostaakseen sanoja ja lauseita käsikirjoituksissaan. Merkkijonot ovat keskeisiä verkkokehityksessä. Jokainen verkkosivustolla näkyvä tekstinpätkä – käyttäjänimet, painikkeiden tekstit, virheilmoitukset, sisältö – käsitellään merkkijonodatana. Merkkijonojen ymmärtäminen on olennaista toimivien käyttöliittymien luomisessa. Merkkijonot ovat merkkejä, jotka sijaitsevat yksinkertaisten tai kaksinkertaisten lainausmerkkien välissä. Näiden käsitteiden ymmärtäminen: - Käyttää joko yksinkertaisia ' tai kaksinkertaisia " lainausmerkkejä merkkijonojen määrittämiseen - Tallettaa tekstidataa, joka voi sisältää kirjaimia, numeroita ja symboleja - Asettaa merkkijonoarvoja muuttujille myöhempää käyttöä varten - Vaatii lainausmerkit erottamaan tekstin muuttujien nimistä Muista käyttää lainausmerkkejä kirjoittaessasi merkkijonoa, muuten JavaScript olettaa sen olevan muuttujan nimi. ### Merkkijonojen muotoilu Merkkijonojen käsittely mahdollistaa tekstielementtien yhdistämisen, muuttujien sisällyttämisen ja dynaamisen sisällön luomisen, joka reag Kahden tai useamman merkkijonon yhdistämiseen tai niiden liittämiseen yhteen käytä +-operaattoria. Vaihe vaiheelta, tässä tapahtuu: - Yhdistää useita merkkijonoja käyttäen +-operaattoria - Liittää merkkijonot suoraan yhteen ilman välilyöntejä ensimmäisessä esimerkissä - Lisää välilyöntejä " " merkkijonojen väliin luettavuuden parantamiseksi - Lisää välimerkkejä, kuten pilkkuja, oikean muotoilun luomiseksi ✅ Miksi 1 + 1 = 2 JavaScriptissä, mutta '1' + '1' = 11? Mieti asiaa. Entä '1' + 1? Template literals ovat toinen tapa muotoilla merkkijonoja, mutta lainausmerkkien sijaan käytetään backtick-merkkiä. Kaikki, mikä ei ole pelkkää tekstiä, tulee sijoittaa paikkamerkkien ${ } sisään. Tämä koskee myös muuttujia, jotka voivat olla merkkijonoja. Ymmärretään jokainen osa: - Käyttää backtick-merkkejä ` `` tavallisten lainausmerkkien sijaan template literalien luomiseen - Upottaa muuttujat suoraan ${}-paikkamerkkien avulla - Säilyttää välilyönnit ja muotoilun juuri sellaisena kuin ne on kirjoitettu - Tarjoaa siistimmän tavan luoda monimutkaisia merkkijonoja muuttujien kanssa Voit saavuttaa muotoilutavoitteesi kummalla tahansa menetelmällä, mutta template literalit kunnioittavat kaikkia välilyöntejä ja rivinvaihtoja. ✅ Milloin käyttäisit template literalia tavallisen merkkijonon sijaan? ### 🔤 Merkkijonojen hallinnan tarkistus: Tekstin käsittelyn varmuus Arvioi merkkijonotaitosi: - Voitko selittää, miksi '1' + '1' on '11' eikä 2? - Kumpi merkkijonomenetelmä on mielestäsi luettavampi: yhdistäminen vai template literalit? - Mitä tapahtuu, jos unohdat lainausmerkit merkkijonon ympäriltä? ### Booleanit Booleanit edustavat yksinkertaisinta datamuotoa: ne voivat sisältää vain yhden kahdesta arvosta – true tai false. Tämä binäärilogiikkajärjestelmä juontaa juurensa George Boolen, 1800-luvun matemaatikon, työhön, joka kehitti Boolean-algebran. Yksinkertaisuudestaan huolimatta booleanit ovat välttämättömiä ohjelmalogiikassa. Ne mahdollistavat koodisi tekemään päätöksiä ehtojen perusteella – onko käyttäjä kirjautunut sisään, onko painiketta klikattu tai täyttyvätkö tietyt kriteerit. Booleanit voivat olla vain kaksi arvoa: true tai false. Booleanit auttavat päättämään, mitkä koodirivit suoritetaan, kun tietyt ehdot täyttyvät. Monissa tapauksissa operaattorit auttavat boolean-arvon asettamisessa, ja usein huomaat muuttujien alustamisen tai niiden arvojen päivittämisen operaattorin avulla. Yllä olevassa olemme: - Luoneet muuttujan, joka tallentaa boolean-arvon true - Näyttäneet, miten tallennetaan boolean-arvo false - Käyttäneet tarkalleen avainsanoja true ja false (ei lainausmerkkejä) - Valmistelleet nämä muuttujat käytettäväksi ehtolauseissa ✅ Muuttujaa voidaan pitää 'truthy'-arvoisena, jos se arvioituu boolean-arvoksi true. Mielenkiintoista on, että JavaScriptissä kaikki arvot ovat truthy, ellei niitä ole määritelty falsyksi. ### 🎯 Boolean-logiikan tarkistus: Päätöksentekotaidot Testaa boolean-ymmärrystäsi: - Miksi luulet, että JavaScriptissä on "truthy"- ja "falsy"-arvoja pelkkien true ja false lisäksi? - Voitko ennustaa, mikä näistä on falsy: 0, "0", [], "false"? - Miten booleanit voivat olla hyödyllisiä ohjelman kulun ohjaamisessa? --- ## 📊 Tietotyyppien työkalupakin yhteenveto ## GitHub Copilot Agent -haaste 🚀 Käytä Agent-tilaa suorittaaksesi seuraavan haasteen: Kuvaus: Luo henkilökohtainen tietojenhallintaohjelma, joka esittelee kaikki JavaScriptin tietotyypit, joita olet oppinut tässä oppitunnissa, samalla kun käsittelet todellisia dataskenaarioita. Tehtävä: Rakenna JavaScript-ohjelma, joka luo käyttäjäprofiiliobjektin sisältäen: henkilön nimen (merkkijono), iän (numero), opiskelijastatuksen (boolean), suosikkivärit taulukkona ja osoiteobjektin, jossa on katu, kaupunki ja postinumero. Sisällytä funktioita profiilitietojen näyttämiseen ja yksittäisten kenttien päivittämiseen. Varmista, että esittelet merkkijonojen yhdistämistä, template literaleja, aritmeettisia operaatioita iän kanssa ja boolean-logiikkaa opiskelijastatuksen osalta. Lisätietoja agent-tilasta täällä. ## 🚀 Haaste JavaScriptillä on joitakin käyttäytymisiä, jotka voivat yllättää kehittäjät. Tässä klassinen esimerkki tutkittavaksi: kokeile kirjoittaa selaimesi konsoliin: let age = 1; let Age = 2; age == Age ja tarkkaile tulosta. Se palauttaa false – voitko selvittää miksi? Tämä edustaa yhtä monista JavaScriptin käyttäytymismalleista, jotka kannattaa ymmärtää. Näiden erikoisuuksien tunteminen auttaa sinua kirjoittamaan luotettavampaa koodia ja korjaamaan ongelmia tehokkaammin. ## Oppitunnin jälkeinen kysely Oppitunnin jälkeinen kysely ## Kertaus ja itseopiskelu Tutustu tähän JavaScript-harjoitusten listaan ja kokeile yhtä. Mitä opit? ## Tehtävä Data Types Practice ## 🚀 JavaScript-tietotyyppien hallinnan aikajana ### ⚡ Mitä voit tehdä seuraavan 5 minuutin aikana - [ ] Avaa selaimesi konsoli ja luo 3 muuttujaa eri tietotyypeillä - [ ] Kokeile haastetta: let age = 1; let Age = 2; age == Age ja selvitä, miksi se on false - [ ] Harjoittele merkkijonojen yhdistämistä nimelläsi ja suosikkinumerollasi - [ ] Testaa, mitä tapahtuu, kun lisäät numeron merkkijonoon ### 🎯 Mitä voit saavuttaa tämän tunnin aikana - [ ] Suorita oppitunnin jälkeinen kysely ja kertaa epäselvät käsitteet - [ ] Luo minilaskin, joka laskee yhteen, vähentää, kertoo ja jakaa kaksi numeroa - [ ] Rakenna yksinkertainen nimimuotoilija käyttäen template literaleja - [ ] Tutki eroja == ja ===-vertailuoperaattoreiden välillä - [ ] Harjoittele eri tietotyyppien välillä muuntamista ### 📅 Viikon mittainen JavaScript-perusta - [ ] Suorita tehtävä itsevarmasti ja luovasti - [ ] Luo henkilökohtainen profiiliobjekti käyttäen kaikkia opittuja tietotyyppejä - [ ] Harjoittele JavaScript-harjoituksilla CSS-Tricksistä - [ ] Rakenna yksinkertainen lomakevalidaattori käyttäen boolean-logiikkaa - [ ] Kokeile taulukko- ja objektitietotyyppejä (tulevien oppituntien esikatselu) - [ ] Liity JavaScript-yhteisöön ja kysy kysymyksiä tietotyypeistä ### 🌟 Kuukauden mittainen muutos - [ ] Integroi tietotyyppitieto suurempiin ohjelmointiprojekteihin - [ ] Ymmärrä, milloin ja miksi käyttää kutakin tietotyyppiä todellisissa sovelluksissa - [ ] Auta muita aloittelijoita ymmärtämään JavaScriptin perusteet - [ ] Rakenna pieni sovellus, joka hallitsee erilaisia käyttäjätietoja - [ ] Tutki edistyneitä tietotyyppikonsepteja, kuten tyyppimuunnosta ja tiukkaa yhtäläisyyttä - [ ] Osallistu avoimen lähdekoodin JavaScript-projekteihin parantamalla dokumentaatiota ### 🧠 Lopullinen tietotyyppien hallinnan tarkistus Juhlista JavaScript-perustasi: - Mikä tietotyyppi yllätti sinut eniten käyttäytymisensä suhteen? - Kuinka mukavalta tuntuu selittää muuttujat vs. vakio ystävälle? - Mikä oli mielenkiintoisin asia, jonka löysit JavaScriptin tyyppijärjestelmästä? - Minkä todellisen sovelluksen voit kuvitella rakentavasi näillä perusteilla? --- Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Tärkeissä tiedoissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.

javascript

JavaScriptin perusteet: metodit ja funktiot

## Ennen luentoa - Kysely Ennen luentoa - kysely Saman koodin kirjoittaminen toistuvasti on yksi ohjelmoinnin yleisimmistä turhautumisen aiheista. Funktiot ratkaisevat tämän ongelman antamalla mahdollisuuden paketoida koodia uudelleenkäytettäviin lohkoihin. Ajattele funktioita kuin standardoituja osia, jotka tekivät Henry Fordin kokoonpanolinjasta vallankumouksellisen – kun luot luotettavan komponentin, voit käyttää sitä missä tahansa ilman, että sinun tarvitsee rakentaa sitä uudelleen. Funktiot mahdollistavat koodin osien niputtamisen, jotta voit käyttää niitä uudelleen ohjelmassasi. Sen sijaan, että kopioisit ja liittäisit samaa logiikkaa kaikkialle, voit luoda funktion kerran ja kutsua sitä aina tarvittaessa. Tämä lähestymistapa pitää koodisi järjestyksessä ja helpottaa päivityksiä. Tässä oppitunnissa opit luomaan omia funktioita, välittämään niille tietoa ja saamaan hyödyllisiä tuloksia takaisin. Opit eron funktioiden ja metodien välillä, nykyaikaisia syntaksitapoja ja näet, miten funktiot voivat toimia yhdessä muiden funktioiden kanssa. Rakennamme nämä käsitteet askel askeleelta. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funktiot Funktio on itsenäinen koodilohko, joka suorittaa tietyn tehtävän. Se kapseloi logiikan, jonka voit suorittaa aina tarvittaessa. Sen sijaan, että kirjoittaisit samaa koodia useita kertoja ohjelmassasi, voit paketoida sen funktioon ja kutsua sitä aina tarvittaessa. Tämä lähestymistapa pitää koodisi siistinä ja helpottaa päivityksiä. Mieti, kuinka haastavaa olisi ylläpitää logiikkaa, joka on hajautettu 20 eri paikkaan koodissasi. On tärkeää nimetä funktiot kuvaavasti. Hyvin nimetty funktio viestii tarkoituksensa selkeästi – kun näet cancelTimer(), ymmärrät heti, mitä se tekee, aivan kuten selkeästi merkitty painike kertoo, mitä tapahtuu, kun sitä painetaan. ## Funktion luominen ja kutsuminen Tarkastellaan, miten funktio luodaan. Syntaksi noudattaa johdonmukaista kaavaa: Puretaan tämä osiin: - function-avainsana kertoo JavaScriptille "Hei, olen luomassa funktiota!" - nameOfFunction on paikka, jossa annat funktiollesi kuvaavan nimen - Sulut () ovat paikka, jossa voit lisätä parametreja (palaamme tähän pian) - Kaarevat sulkeet {} sisältävät varsinaisen koodin, joka suoritetaan, kun kutsut funktiota Luodaan yksinkertainen tervehdysfunktio, jotta näemme tämän toiminnassa: Tämä funktio tulostaa "Hello, world!" konsoliin. Kun olet määritellyt sen, voit käyttää sitä niin monta kertaa kuin tarvitset. Funktion suorittamiseksi (tai "kutsumiseksi") kirjoita sen nimi ja lisää sulut perään. JavaScript sallii funktion määrittämisen ennen tai jälkeen sen kutsumisen – JavaScript-moottori hoitaa suoritusjärjestyksen. Kun suoritat tämän rivin, se suorittaa kaiken koodin displayGreeting-funktion sisällä ja näyttää "Hello, world!" selaimesi konsolissa. Voit kutsua tätä funktiota toistuvasti. ### 🧠 Funktioiden perusteet: Ensimmäisten funktioiden rakentaminen Katsotaan, miten ymmärrät perusfunktiot: - Voitko selittää, miksi käytämme kaarevia sulkeita {} funktion määrittelyssä? - Mitä tapahtuu, jos kirjoitat displayGreeting ilman sulkeita? - Miksi haluaisit kutsua samaa funktiota useita kertoja? ### Funktioiden parhaat käytännöt Tässä muutama vinkki, jotka auttavat sinua kirjoittamaan hyviä funktioita: - Anna funktioillesi selkeät, kuvaavat nimet – tuleva itsesi kiittää sinua! - Käytä camelCase-tyyliä monisanaisissa nimissä (kuten calculateTotal eikä calculate_total) - Pidä jokainen funktio keskittyneenä yhteen asiaan ja tee se hyvin ## Tiedon välittäminen funktiolle Meidän displayGreeting-funktiomme on rajoittunut – se voi näyttää "Hello, world!" kaikille. Parametrit antavat meille mahdollisuuden tehdä funktioista joustavampia ja hyödyllisempiä. Parametrit toimivat kuin paikkamerkit, joihin voit lisätä erilaisia arvoja joka kerta, kun käytät funktiota. Näin sama funktio voi toimia eri tiedoilla jokaisella kutsulla. Luettele parametrit sulkeiden sisällä, kun määrittelet funktiota, ja erota useat parametrit pilkuilla: Jokainen parametri toimii paikkamerkkinä – kun joku kutsuu funktiotasi, hän antaa todellisia arvoja, jotka sijoitetaan näihin kohtiin. Päivitetään tervehdysfunktiomme hyväksymään jonkun nimi: Huomaa, kuinka käytämme heittomerkkejä (` `) ja ${}` lisätäksemme nimen suoraan viestiimme – tätä kutsutaan mallilitteraaliksi, ja se on todella kätevä tapa rakentaa merkkijonoja, joissa on sekoitettuja muuttujia. Nyt kun kutsumme funktiotamme, voimme välittää minkä tahansa nimen: JavaScript ottaa merkkijonon 'Christopher', liittää sen name-parametriin ja luo henkilökohtaisen viestin "Hello, Christopher!" ## Oletusarvot Entä jos haluamme tehdä joistakin parametreista valinnaisia? Tässä kohtaa oletusarvot ovat käteviä! Oletetaan, että haluamme ihmisten voivan mukauttaa tervehdystä, mutta jos he eivät määrittele sellaista, käytämme varmuuden vuoksi "Hello". Voit määrittää oletusarvot käyttämällä yhtäläisyysmerkkiä, aivan kuten muuttujan määrittämisessä: Tässä name on edelleen pakollinen, mutta salutation-parametrilla on varmuuskopioarvo 'Hello', jos kukaan ei anna erilaista tervehdystä. Nyt voimme kutsua tätä funktiota kahdella eri tavalla: Ensimmäisessä kutsussa JavaScript käyttää oletusarvoa "Hello", koska emme määritelleet tervehdystä. Toisessa kutsussa se käyttää mukautettua "Hi"-tervehdystä. Tämä joustavuus tekee funktioista mukautuvia eri tilanteisiin. ### 🎛️ Parametrien hallinta: Funktioiden joustavuuden lisääminen Testaa parametrien ymmärrystäsi: - Mikä ero on parametrilla ja argumentilla? - Miksi oletusarvot ovat hyödyllisiä tosielämän ohjelmoinnissa? - Voitko ennustaa, mitä tapahtuu, jos välität enemmän argumentteja kuin parametreja? ## Palautusarvot Funktiomme ovat tähän mennessä vain tulostaneet viestejä konsoliin, mutta entä jos haluat funktion laskevan jotain ja antavan tuloksen takaisin? Tässä kohtaa palautusarvot tulevat mukaan. Sen sijaan, että vain näyttäisit jotain, funktio voi antaa sinulle arvon, jonka voit tallentaa muuttujaan tai käyttää muualla koodissasi. Palauttaaksesi arvon käytä return-avainsanaa ja sen jälkeen mitä haluat palauttaa: Tässä on tärkeää: kun funktio kohtaa return-lauseen, se lopettaa välittömästi suorittamisen ja lähettää arvon takaisin sille, joka kutsui sitä. Muokataan tervehdysfunktiotamme palauttamaan viesti sen sijaan, että se tulostaisi sen: Nyt sen sijaan, että funktio tulostaisi tervehdyksen, se luo viestin ja antaa sen meille. Palautetun arvon käyttämiseksi voimme tallentaa sen muuttujaan kuten minkä tahansa muun arvon: Nyt greetingMessage sisältää "Hello, Christopher", ja voimme käyttää sitä missä tahansa koodissamme – näyttääksesi sen verkkosivulla, sisällyttääksesi sen sähköpostiin tai välittääksesi sen toiselle funktiolle. ### 🔄 Palautusarvojen tarkistus: Tulosten saaminen takaisin Arvioi palautusarvojen ymmärrystäsi: - Mitä tapahtuu koodille funktion return-lauseen jälkeen? - Miksi palautusarvojen käyttö on usein parempi kuin pelkkä konsoliin tulostaminen? - Voiko funktio palauttaa eri tyyppisiä arvoja (merkkijono, numero, totuusarvo)? ## Funktiot funktioiden parametreina Funktioita voidaan välittää parametreina toisille funktioille. Vaikka tämä konsepti saattaa aluksi tuntua monimutkaiselta, se on tehokas ominaisuus, joka mahdollistaa joustavat ohjelmointimallit. Tämä malli on erittäin yleinen, kun haluat sanoa "kun jotain tapahtuu, tee tämä toinen asia." Esimerkiksi "kun ajastin päättyy, suorita tämä koodi" tai "kun käyttäjä klikkaa painiketta, kutsu tämä funktio." Tarkastellaan setTimeout-funktiota, joka on sisäänrakennettu funktio, joka odottaa tietyn ajan ja sitten suorittaa jonkin koodin. Meidän täytyy kertoa sille, mitä koodia suorittaa – täydellinen tapaus funktion välittämiseen! Kokeile tätä koodia – 3 sekunnin kuluttua näet viestin: Huomaa, kuinka välitämme displayDone-funktion (ilman sulkeita) setTimeout-funktiolle. Emme kutsu funktiota itse – annamme sen setTimeout-funktiolle ja sanomme "kutsu tämä 3 sekunnin kuluttua." ### Nimettömät funktiot Joskus tarvitset funktiota vain yhteen asiaan etkä halua antaa sille nimeä. Mieti – jos käytät funktiota vain kerran, miksi lisätä koodiin ylimääräinen nimi? JavaScript antaa sinun luoda nimettömiä funktioita – funktioita ilman nimiä, jotka voit määritellä juuri siellä, missä niitä tarvitset. Näin voimme kirjoittaa ajastinesimerkkimme uudelleen nimettömän funktion avulla: Tämä saavuttaa saman tuloksen, mutta funktio määritellään suoraan setTimeout-kutsun sisällä, mikä poistaa tarpeen erilliselle funktion määrittelylle. ### Lyhyet nuolifunktiot Nykyaikaisessa JavaScriptissa on vielä lyhyempi tapa kirjoittaa funktioita, joita kutsutaan nuolifunktioiksi. Ne käyttävät =>-merkkiä (joka näyttää nuolelta – ymmärrätkö?) ja ovat erittäin suosittuja kehittäjien keskuudessa. Nuolifunktiot antavat sinun ohittaa function-avainsanan ja kirjoittaa tiiviimpää koodia. Tässä ajastinesimerkkimme nuolifunktion avulla: Sulut () ovat paikka, jossa parametrit olisivat (tässä tapauksessa tyhjät), sitten tulee nuoli =>, ja lopuksi funktion runko kaarevissa sulkeissa. Tämä tarjoaa saman toiminnallisuuden tiiviimmällä syntaksilla. ### Milloin käyttää mitäkin strategiaa Milloin käyttää mitäkin lähestymistapaa? Käytännöllinen ohje: jos käytät funktiota useita kertoja, anna sille nimi ja määrittele se erikseen. Jos se on tarkoitettu yhteen tiettyyn käyttöön, harkitse nimetöntä funktiota. Sekä nuolifunktiot että perinteinen syntaksi ovat päteviä valintoja, vaikka nuolifunktiot ovat yleisiä nykyaikaisissa JavaScript-koodipohjissa. ### 🎨 Funktiotyylien hallinta: Oikean syntaksin valinta Testaa syntaksin ymmärrystäsi: - Milloin saattaisit suosia nuolifunktioita perinteisen funktion syntaksin sijaan? - Mikä on nimettömien funktioiden pääasiallinen etu? - Voitko keksiä tilanteen, jossa nimetty funktio on parempi kuin nimetön? --- ## 🚀 Haaste Voitko tiivistää yhdessä lauseessa eron funktioiden ja metodien välillä? Kokeile! ## GitHub Copilot Agent -haaste 🚀 Käytä Agent-tilaa suorittaaksesi seuraavan haasteen: Kuvaus: Luo matemaattisten funktioiden apukirjasto, joka havainnollistaa tämän oppitunnin eri funktiokonsepteja, mukaan lukien parametrit, oletusarvot, palautusarvot ja nuolifunktiot. Ohje: Luo JavaScript-tiedosto nimeltä mathUtils.js, joka sisältää seuraavat funktiot: 1. Funktio add, joka ottaa kaksi parametria ja palauttaa niiden summan 2. Funktio multiply, jossa on oletusarvot parametreille (toinen parametri oletuksena 1) 3. Nuolifunktio square, joka ottaa numeron ja palauttaa sen neliön 4. Funktio calculate, joka hyväksyy toisen funktion parametrina ja kaksi numeroa, ja sitten soveltaa funktiota näihin numeroihin 5. Näytä jokaisen funktion kutsuminen sopivilla testitapauksilla Lisätietoja agent-tilasta täällä. ## Luentojälkeinen kysely Luentojälkeinen kysely ## Kertaus ja itseopiskelu Kannattaa lukea hieman lisää nuolifunktioista, sillä niitä käytetään yhä enemmän koodipohjissa. Harjoittele funktion kirjoittamista ja sitten sen uudelleenkirjoittamista tällä syntaksilla. ## Tehtävä Hauskaa funktioiden parissa --- ## 🧰 JavaScript-funktioiden työkalupakki - yhteenveto --- ## 🚀 JavaScript-funktioiden hallinnan aikajana ### ⚡ Mitä voit tehdä seuraavan 5 minuutin aikana - [ ] Kirjoita yksinkertainen funktio, joka palauttaa suosikkinumerosi - [ ] Luo funktio, jossa on kaksi parametria, jotka lisäävät ne yhteen - [ ] Kokeile muuntaa perinteinen funktio nuolifunktion syntaksiin - [ ] Harjoittele haastetta: selitä ero funktioiden ja metodien välillä ### 🎯 Mitä voit saavuttaa tämän tunnin aikana - [ ] Suorita oppitunnin jälkeinen testi ja käy läpi epäselvät käsitteet - [ ] Rakenna matemaattisten apuvälineiden kirjasto GitHub Copilot -haasteen avulla - [ ] Luo funktio, joka käyttää toista funktiota parametrina - [ ] Harjoittele funktioiden kirjoittamista oletusparametreilla - [ ] Kokeile mallimerkkijonoja funktioiden palautusarvoissa ### 📅 Viikon mittainen funktioiden hallinta - [ ] Suorita "Hauskaa funktioiden parissa" -tehtävä luovasti - [ ] Refaktoroi aiemmin kirjoittamaasi toistuvaa koodia uudelleenkäytettäviksi funktioiksi - [ ] Rakenna pieni laskin käyttäen vain funktioita (ei globaaleja muuttujia) - [ ] Harjoittele nuolifunktioita taulukkometodeilla kuten map() ja filter() - [ ] Luo kokoelma apufunktioita yleisiin tehtäviin - [ ] Tutki korkeamman tason funktioita ja funktionaalisen ohjelmoinnin käsitteitä ### 🌟 Kuukauden mittainen muutos - [ ] Hallitse edistyneitä funktiokäsitteitä, kuten sulkeumat ja näkyvyysalueet - [ ] Rakenna projekti, joka hyödyntää vahvasti funktiokompositiota - [ ] Osallistu avoimen lähdekoodin projekteihin parantamalla funktiodokumentaatiota - [ ] Opeta jollekin toiselle funktioista ja eri syntaksityyleistä - [ ] Tutki funktionaalisen ohjelmoinnin paradigmoja JavaScriptissä - [ ] Luo henkilökohtainen kirjasto uudelleenkäytettäviä funktioita tulevia projekteja varten ### 🏆 Lopullinen funktioiden mestaruuden tarkistus Juhlista funktioiden hallintaasi: - Mikä on hyödyllisin funktio, jonka olet tähän mennessä luonut? - Miten funktioiden oppiminen on muuttanut tapaasi ajatella koodin organisointia? - Mikä funktiosyntaksi on suosikkisi ja miksi? - Minkä todellisen ongelman ratkaisisit kirjoittamalla funktion? --- Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.

javascript

JavaScriptin perusteet: Päätöksenteko

Oletko koskaan miettinyt, miten sovellukset tekevät älykkäitä päätöksiä? Esimerkiksi miten navigointijärjestelmä valitsee nopeimman reitin tai miten termostaatti päättää, milloin lämmitys kytketään päälle? Tämä on ohjelmoinnin päätöksenteon perusajatus. Samoin kuin Charles Babbagen Analyyttinen kone oli suunniteltu suorittamaan erilaisia operaatioita ehtojen perusteella, modernit JavaScript-ohjelmat tekevät valintoja vaihtelevien olosuhteiden mukaan. Tämä kyky haarautua ja tehdä päätöksiä muuttaa staattisen koodin reagoiviksi ja älykkäiksi sovelluksiksi. Tässä oppitunnissa opit toteuttamaan ehdollista logiikkaa ohjelmissasi. Tutustumme ehdollisiin lauseisiin, vertailuoperaattoreihin ja loogisiin ilmaisuihin, jotka mahdollistavat tilanteiden arvioinnin ja niihin sopivan reagoinnin. ## Ennakkokysely Ennakkokysely Päätöksentekokyky ja ohjelman kulun hallinta ovat ohjelmoinnin perusasioita. Tässä osiossa käsitellään, miten JavaScript-ohjelmien suorituspolkua hallitaan Boolean-arvojen ja ehdollisen logiikan avulla. [](https://youtube.com/watch?v=SxTp8j-fMMY "Päätöksenteko") ## Lyhyt kertaus Booleaneista Ennen kuin sukellamme päätöksentekoon, kerrataan edellisestä oppitunnista tutut Boolean-arvot. Matemaatikko George Boolen mukaan nimettynä nämä arvot edustavat binäärisiä tiloja – joko true tai false. Ei epäselvyyksiä, ei harmaata aluetta. Nämä binääriset arvot muodostavat kaiken laskennallisen logiikan perustan. Jokainen päätös, jonka ohjelmasi tekee, palautuu lopulta Boolean-arvoon. Boolean-muuttujien luominen on yksinkertaista: Tämä luo kaksi muuttujaa, joilla on selkeät Boolean-arvot. ✅ Booleanit on nimetty englantilaisen matemaatikon, filosofin ja loogikon George Boolen (1815–1864) mukaan. ## Vertailuoperaattorit ja Booleanit Käytännössä harvoin asetat Boolean-arvoja manuaalisesti. Sen sijaan luot niitä arvioimalla ehtoja: "Onko tämä luku suurempi kuin tuo?" tai "Ovatko nämä arvot yhtä suuret?" Vertailuoperaattorit mahdollistavat nämä arvioinnit. Ne vertailevat arvoja ja palauttavat Boolean-tuloksia operandien välisen suhteen perusteella. ✅ Testaa tietosi kirjoittamalla joitakin vertailuja selaimesi konsoliin. Yllättääkö mikään palautettu tieto sinut? ### 🧠 Vertailujen hallinta: Boolean-logiikan ymmärtäminen Testaa vertailujen ymmärrystäsi: - Miksi luulet, että === (tarkka yhtäsuuruus) on yleensä suositeltavampi kuin == (löyhä yhtäsuuruus)? - Voitko ennustaa, mitä 5 === '5' palauttaa? Entä 5 == '5'? - Mikä ero on !== ja != välillä? ## If-lause if-lause on kuin kysymyksen esittäminen koodissasi. "Jos tämä ehto on tosi, tee tämä asia." Se on luultavasti tärkein työkalu, jota käytät päätöksenteossa JavaScriptissä. Näin se toimii: Ehto menee sulkeiden sisään, ja jos se on true, JavaScript suorittaa koodin aaltosulkeiden sisällä. Jos se on false, JavaScript ohittaa koko lohkon. Käytät usein vertailuoperaattoreita luodaksesi näitä ehtoja. Katsotaan käytännön esimerkki: Koska 1000 >= 800 arvioituu true:ksi, lohkon sisällä oleva koodi suoritetaan, ja konsoliin tulostuu "Getting a new laptop!" ## If..Else-lause Mutta entä jos haluat ohjelmasi tekevän jotain muuta, kun ehto on epätosi? Silloin else tulee apuun – se on kuin varasuunnitelma. else-lause antaa sinulle tavan sanoa "jos tämä ehto ei ole tosi, tee sen sijaan tämä toinen asia." Nyt, koska 500 >= 800 on false, JavaScript ohittaa ensimmäisen lohkon ja suorittaa else-lohkon. Konsoliin tulostuu "Can't afford a new laptop, yet!" ✅ Testaa ymmärrystäsi tästä koodista ja seuraavasta koodista suorittamalla se selaimen konsolissa. Muuta currentMoney- ja laptopPrice-muuttujien arvoja muuttaaksesi palautettua console.log()-tulosta. ### 🎯 If-Else-logiikan tarkistus: Haarautuvat polut Arvioi ehdollisen logiikan ymmärrystäsi: - Mitä tapahtuu, jos currentMoney on täsmälleen yhtä suuri kuin laptopPrice? - Voitko keksiä todellisen maailman tilanteen, jossa if-else-logiikka olisi hyödyllinen? - Miten voisit laajentaa tätä käsittelemään useita hintaluokkia? ## Switch-lause Joskus sinun täytyy verrata yhtä arvoa useisiin vaihtoehtoihin. Vaikka voisit ketjuttaa useita if..else-lauseita, tämä lähestymistapa muuttuu hankalaksi. switch-lause tarjoaa siistimmän rakenteen useiden erillisten arvojen käsittelyyn. Konsepti muistuttaa mekaanisia kytkentäjärjestelmiä, joita käytettiin varhaisissa puhelinkeskuksissa – yksi syötearvo määrittää, mitä polkua suoritus seuraa. Näin se on rakennettu: - JavaScript arvioi ilmaisun kerran - Se käy läpi jokaisen case:n löytääkseen osuman - Kun se löytää osuman, se suorittaa kyseisen koodilohkon - break kertoo JavaScriptille lopettaa ja poistua switchistä - Jos mikään case ei täsmää, se suorittaa default-lohkon (jos sellainen on) Tässä esimerkissä JavaScript näkee, että dayNumber on 2, löytää vastaavan case 2:n, asettaa dayName:n arvoksi "Tuesday" ja sitten poistuu switchistä. Tuloksena konsoliin tulostuu "Today is Tuesday". ✅ Testaa ymmärrystäsi tästä koodista ja seuraavasta koodista suorittamalla se selaimen konsolissa. Muuta muuttujan a arvoja muuttaaksesi palautettua console.log()-tulosta. ### 🔄 Switch-lauseen hallinta: Useita vaihtoehtoja Testaa switch-lauseen ymmärrystäsi: - Mitä tapahtuu, jos unohdat break-lauseen? - Milloin käyttäisit switch-lausetta useiden if-else-lauseiden sijaan? - Miksi default-case on hyödyllinen, vaikka luulet kattaneesi kaikki mahdollisuudet? ## Loogiset operaattorit ja Booleanit Monimutkaiset päätökset vaativat usein useiden ehtojen arviointia samanaikaisesti. Samoin kuin Boolean-algebra mahdollistaa loogisten ilmaisujen yhdistämisen matemaatikoille, ohjelmointi tarjoaa loogisia operaattoreita useiden Boolean-ehtojen yhdistämiseen. Nämä operaattorit mahdollistavat kehittyneen ehdollisen logiikan yhdistämällä yksinkertaisia tosi/epätosi-arviointeja. Nämä operaattorit antavat mahdollisuuden yhdistää ehtoja hyödyllisillä tavoilla: - AND (&&) tarkoittaa, että molempien ehtojen on oltava tosi - OR (||) tarkoittaa, että vähintään yhden ehdon on oltava tosi - NOT (!) kääntää tosi epätosiksi (ja päinvastoin) ## Ehdot ja päätökset loogisilla operaattoreilla Katsotaan, miten nämä loogiset operaattorit toimivat käytännössä realistisessa esimerkissä: Tässä esimerkissä: laskemme 20 % alennushinnan (640), sitten arvioimme, riittävätkö käytettävissä olevat varat joko täyteen hintaan TAI alennettuun hintaan. Koska 600 täyttää alennushinnan rajan 640, ehto arvioituu tosi:ksi. ### 🧮 Loogisten operaattoreiden tarkistus: Ehtojen yhdistäminen Testaa loogisten operaattoreiden ymmärrystäsi: - Ilmaisussa A && B, mitä tapahtuu, jos A on epätosi? Arvioidaanko B edes? - Voitko keksiä tilanteen, jossa tarvitsisit kaikki kolme operaattoria (&&, ||, !)? - Mikä ero on !user.isActive ja user.isActive !== true välillä? ### Kielto-operaattori Joskus on helpompi ajatella, milloin jokin ei ole totta. Esimerkiksi sen sijaan, että kysyisit "Onko käyttäjä kirjautunut sisään?", saatat haluta kysyä "Eikö käyttäjä ole kirjautunut sisään?" Huutomerkki (!) kääntää logiikan puolestasi. !-operaattori on kuin sanoisi "päinvastoin kuin..." – jos jokin on true, ! tekee siitä false, ja päinvastoin. ### Ternäärilauseet Yksinkertaisiin ehdollisiin sijoituksiin JavaScript tarjoaa ternäärisen operaattorin. Tämä tiivis syntaksi mahdollistaa ehdollisen ilmaisun kirjoittamisen yhdelle riville, mikä on hyödyllistä, kun sinun täytyy valita kahdesta arvosta ehdon perusteella. Se luetaan kuin kysymys: "Onko tämä ehto tosi? Jos kyllä, käytä tätä arvoa. Jos ei, käytä tuota arvoa." Alla on konkreettisempi esimerkki: ✅ Käytä hetki tämän koodin lukemiseen muutaman kerran. Ymmärrätkö, miten nämä operaattorit toimivat? Tämä rivi sanoo: "Onko firstNumber suurempi kuin secondNumber? Jos kyllä, laita firstNumber muuttujaan biggestNumber. Jos ei, laita secondNumber muuttujaan biggestNumber." Ternäärinen operaattori on vain lyhyempi tapa kirjoittaa perinteinen if..else-lause: Molemmat lähestymistavat tuottavat samat tulokset. Ternäärinen operaattori tarjoaa tiiviyttä, kun taas perinteinen if-else-rakenne voi olla luettavampi monimutkaisille ehdoille. --- ## 🚀 Haaste Luo ohjelma, joka kirjoitetaan ensin loogisilla operaattoreilla ja sitten uudelleen ternäärisellä ilmaisulla. Mikä syntaksi on mielestäsi parempi? --- ## GitHub Copilot Agent -haaste 🚀 Käytä Agent-tilaa suorittaaksesi seuraavan haasteen: Kuvaus: Luo kattava arvosanalaskuri, joka havainnollistaa tämän oppitunnin useita päätöksentekokonsepteja, mukaan lukien if-else-lauseet, switch-lauseet, loogiset operaattorit ja ternääriset ilmaisut. Tehtävä: Kirjoita JavaScript-ohjelma, joka ottaa opiskelijan numeerisen pistemäärän (0-100) ja määrittää heidän kirjainarvosanansa seuraavien kriteerien mukaan: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Alle 60 Vaatimukset: 1. Käytä if-else-lauseita määrittääksesi kirjainarvosanan 2. Käytä loogisia operaattoreita tarkistaaksesi, läpäiseekö opiskelija (arvosana >= 60) JA saako kunniamaininnan (arvosana >= 90). 3. Käytä switch-lausetta antaaksesi tarkkaa palautetta kullekin arvosanakirjaimelle. 4. Käytä ternääristä operaattoria määrittääksesi, onko opiskelija oikeutettu seuraavaan kurssiin (arvosana >= 70). 5. Sisällytä syötteen validointi varmistaaksesi, että pisteet ovat välillä 0 ja 100. Testaa ohjelmaasi erilaisilla pisteillä, mukaan lukien rajatapaukset, kuten 59, 60, 89, 90 ja virheelliset syötteet. Lue lisää agent mode -tilasta täältä. ## Luentojälkeinen kysely Luentojälkeinen kysely ## Kertaus & Itseopiskelu Lue lisää käyttäjän käytettävissä olevista operaattoreista MDN:ssä. Tutustu Josh Comeaun upeaan operaattorihakemistoon! ## Tehtävä Operaattorit --- ## 🧠 Päätöksentekotyökalusi yhteenveto --- ## 🚀 JavaScript-päätöksentekotaitojen kehitysaikataulu ### ⚡ Mitä voit tehdä seuraavan 5 minuutin aikana - [ ] Harjoittele vertailuoperaattoreita selaimesi konsolissa - [ ] Kirjoita yksinkertainen if-else-lause, joka tarkistaa ikäsi - [ ] Kokeile haastetta: kirjoita if-else uudelleen ternäärisellä operaattorilla - [ ] Testaa, mitä tapahtuu eri "truthy"- ja "falsy"-arvoilla ### 🎯 Mitä voit saavuttaa tämän tunnin aikana - [ ] Suorita luennon jälkeinen kysely ja kertaa epäselvät käsitteet - [ ] Rakenna kattava arvosanalaskuri GitHub Copilot -haasteen avulla - [ ] Luo yksinkertainen päätöspuu todellista tilannetta varten (esim. mitä pukea päälle) - [ ] Harjoittele useiden ehtojen yhdistämistä loogisilla operaattoreilla - [ ] Kokeile switch-lausetta eri käyttötarkoituksiin ### 📅 Viikon mittainen logiikan hallinta - [ ] Suorita operaattoritehtävä luovilla esimerkeillä - [ ] Rakenna mini-kyselysovellus käyttäen erilaisia ehdollisia rakenteita - [ ] Luo lomakevalidaattori, joka tarkistaa useita syöte-ehtoja - [ ] Harjoittele Josh Comeaun operaattorihakemiston tehtäviä - [ ] Refaktoroi olemassa olevaa koodia käyttämään sopivampia ehdollisia rakenteita - [ ] Tutki lyhytpiirtoarviointia ja sen suorituskykyvaikutuksia ### 🌟 Kuukauden mittainen muutos - [ ] Hallitse monimutkaiset sisäkkäiset ehdot ja säilytä koodin luettavuus - [ ] Rakenna sovellus, jossa on kehittynyt päätöksentekologiikka - [ ] Osallistu avoimeen lähdekoodiin parantamalla olemassa olevien projektien ehdollista logiikkaa - [ ] Opeta jollekin toiselle erilaisista ehdollisista rakenteista ja niiden käyttötarkoituksista - [ ] Tutki funktionaalisen ohjelmoinnin lähestymistapoja ehdolliseen logiikkaan - [ ] Luo henkilökohtainen viiteopas ehdollisten rakenteiden parhaista käytännöistä ### 🏆 Lopullinen päätöksentekotaitojen mestaruuden tarkistus Juhlista loogisen ajattelun hallintaasi: - Mikä on monimutkaisin päätöksentekologiikka, jonka olet onnistuneesti toteuttanut? - Mikä ehdollinen rakenne tuntuu sinulle luonnollisimmalta ja miksi? - Miten loogisten operaattoreiden oppiminen on muuttanut ongelmanratkaisulähestymistapaasi? - Mikä todellinen sovellus hyötyisi kehittyneestä päätöksentekologiikasta? --- Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.

javascript

JavaScriptin perusteet: Taulukot ja silmukat

## Ennakkokysely Ennakkokysely Oletko koskaan miettinyt, miten verkkosivustot pitävät kirjaa ostoskorin tuotteista tai näyttävät ystävälistasi? Tässä tulevat taulukot ja silmukat apuun. Taulukot ovat kuin digitaalisia säiliöitä, jotka sisältävät useita tietoja, kun taas silmukat auttavat käsittelemään näitä tietoja tehokkaasti ilman toistuvaa koodia. Yhdessä nämä kaksi käsitettä muodostavat perustan tietojen käsittelyyn ohjelmissasi. Opit siirtymään vaihe vaiheelta kirjoittamisesta älykkääseen ja tehokkaaseen koodiin, joka voi käsitellä satoja tai jopa tuhansia kohteita nopeasti. Tämän oppitunnin lopussa ymmärrät, kuinka monimutkaisia tietotehtäviä voidaan suorittaa vain muutamalla koodirivillä. Tutkitaan näitä olennaisia ohjelmointikäsitteitä. [](https://youtube.com/watch?v=1U4qTyq02Xw "Taulukot") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Silmukat") ## Taulukot Ajattele taulukoita digitaalisena arkistokaappina - sen sijaan, että säilyttäisit yhden asiakirjan per laatikko, voit järjestää useita liittyviä kohteita yhteen, rakenteelliseen säiliöön. Ohjelmoinnissa taulukot antavat mahdollisuuden tallentaa useita tietoja yhteen järjestettyyn pakettiin. Olipa kyseessä valokuvagallerian rakentaminen, tehtävälistan hallinta tai pelin korkeimpien pisteiden seuraaminen, taulukot tarjoavat perustan tietojen järjestämiseen. Katsotaanpa, miten ne toimivat. ✅ Taulukot ovat kaikkialla! Voitko keksiä tosielämän esimerkin taulukosta, kuten aurinkopaneelijärjestelmästä? ### Taulukoiden luominen Taulukon luominen on todella helppoa - käytä vain hakasulkeita! Mitä tässä tapahtuu? Olet juuri luonut tyhjän säiliön käyttämällä hakasulkeita []. Ajattele sitä kuin tyhjää kirjahyllyä - se on valmis säilyttämään mitä tahansa kirjoja, joita haluat sinne järjestää. Voit myös täyttää taulukon alkuarvoilla heti alussa: Huomionarvoisia asioita: - Voit tallentaa tekstiä, numeroita tai jopa tosi/epätosi-arvoja samaan taulukkoon - Erota jokainen kohde pilkulla - helppoa! - Taulukot ovat täydellisiä liittyvien tietojen säilyttämiseen yhdessä ### Taulukon indeksointi Tässä on jotain, mikä saattaa aluksi tuntua oudolta: taulukot numeroivat kohteensa alkaen nollasta, ei yhdestä. Tämä nollapohjainen indeksointi juontaa juurensa tietokoneen muistin toiminnasta - se on ollut ohjelmointikonventio jo varhaisista kielistä, kuten C. Jokainen paikka taulukossa saa oman osoitenumeronsa, jota kutsutaan indeksiksi. ✅ Yllättääkö sinua, että taulukot alkavat nollaindeksistä? Joissakin ohjelmointikielissä indeksit alkavat yhdestä. Tästä on mielenkiintoinen historia, jonka voit lukea Wikipediasta. Taulukon elementtien käsittely: Mitä tässä tapahtuu: - Käyttää hakasulkumerkintää indeksinumeron kanssa elementtien käsittelyyn - Palauttaa arvon, joka on tallennettu kyseiseen taulukon kohtaan - Aloittaa laskemisen nollasta, jolloin ensimmäisen elementin indeksi on 0 Taulukon elementtien muokkaaminen: Tässä olemme: - Muokanneet elementtiä indeksissä 4 "Rocky Roadista" "Butter Pecaniin" - Lisänneet uuden elementin "Cookie Dough" indeksiin 5 - Laajentaneet taulukon pituutta automaattisesti, kun lisätään nykyisten rajojen ulkopuolelle ### Taulukon pituus ja yleiset metodit Taulukoilla on sisäänrakennettuja ominaisuuksia ja metodeja, jotka helpottavat tietojen käsittelyä. Taulukon pituuden selvittäminen: Tärkeät asiat muistaa: - Palauttaa taulukon elementtien kokonaismäärän - Päivittyy automaattisesti, kun elementtejä lisätään tai poistetaan - Tarjoaa dynaamisen laskennan, joka on hyödyllinen silmukoille ja validoinnille Keskeiset taulukkometodit: Näiden metodien ymmärtäminen: - Lisää elementtejä push() (loppuun) ja unshift() (alkuun) - Poistaa elementtejä pop() (loppu) ja shift() (alku) - Etsii elementtejä indexOf() ja tarkistaa olemassaolon includes() - Palauttaa hyödyllisiä arvoja, kuten poistettuja elementtejä tai sijainti-indeksejä ✅ Kokeile itse! Käytä selaimesi konsolia luodaksesi ja muokataksesi omaa taulukkoa. ### 🧠 Taulukon perusteiden tarkistus: Tietojen järjestäminen Testaa taulukko-osaamistasi: - Miksi luulet, että taulukot alkavat laskemisen nollasta eikä yhdestä? - Mitä tapahtuu, jos yrität käyttää indeksiä, jota ei ole olemassa (kuten arr[100] 5-elementtisessä taulukossa)? - Voitko keksiä kolme tosielämän tilannetta, joissa taulukot olisivat hyödyllisiä? ## Silmukat Ajattele Charles Dickensin romaaneista kuuluisaa rangaistusta, jossa oppilaat joutuivat kirjoittamaan lauseita toistuvasti liitutaululle. Kuvittele, että voisit yksinkertaisesti käskeä jotakuta "kirjoita tämä lause 100 kertaa" ja se tehtäisiin automaattisesti. Juuri tätä silmukat tekevät koodillesi. Silmukat ovat kuin väsymätön apulainen, joka voi toistaa tehtäviä virheettömästi. Olipa kyseessä ostoskorin jokaisen kohteen tarkistaminen tai albumin kaikkien valokuvien näyttäminen, silmukat hoitavat toiston tehokkaasti. JavaScript tarjoaa useita silmukkatyyppejä, joista voit valita. Tarkastellaan kutakin ja ymmärretään, milloin niitä kannattaa käyttää. ### For-silmukka for-silmukka on kuin ajastimen asettaminen - tiedät tarkalleen, kuinka monta kertaa haluat jonkin tapahtuvan. Se on erittäin järjestelmällinen ja ennustettavissa, mikä tekee siitä täydellisen, kun työskentelet taulukoiden kanssa tai tarvitset laskentaa. For-silmukan rakenne: Askel askeleelta, mitä tapahtuu: - Alustaa laskurimuuttujan i arvoon 0 alussa - Tarkistaa ehdon i < 10 ennen jokaista iteraatiota - Suorittaa koodilohkon, kun ehto on tosi - Kasvattaa i arvoa yhdellä jokaisen iteraation jälkeen i++ - Lopettaa, kun ehto muuttuu epätodeksi (kun i saavuttaa 10) ✅ Suorita tämä koodi selaimen konsolissa. Mitä tapahtuu, kun teet pieniä muutoksia laskuriin, ehtoon tai iteraatioilmaisuun? Voitko saada sen toimimaan taaksepäin, luoden lähtölaskennan? ### 🗓️ For-silmukan hallinnan tarkistus: Kontrolloitu toisto Arvioi for-silmukkaosaamistasi: - Mitkä ovat for-silmukan kolme osaa ja mitä kukin tekee? - Kuinka silmukoisit taulukon taaksepäin? - Mitä tapahtuu, jos unohdat kasvatusosan (i++)? ### While-silmukka while-silmukka on kuin sanoisi "jatka tämän tekemistä, kunnes..." - et ehkä tiedä tarkalleen, kuinka monta kertaa se suoritetaan, mutta tiedät, milloin lopettaa. Se on täydellinen esimerkiksi käyttäjän syötteen pyytämiseen, kunnes saat haluamasi, tai tietojen etsimiseen, kunnes löydät etsimäsi. While-silmukan ominaisuudet: - Jatkaa suorittamista niin kauan kuin ehto on tosi - Vaatii laskurimuuttujien manuaalista hallintaa - Tarkistaa ehdon ennen jokaista iteraatiota - Riski loputtomista silmukoista, jos ehto ei koskaan muutu epätodeksi Näiden esimerkkien ymmärtäminen: - Hallinnoi laskurimuuttujaa i manuaalisesti silmukan sisällä - Kasvattaa laskuria estääkseen loputtomat silmukat - Näyttää käytännön esimerkin käyttäjän syötteestä ja yritysrajoituksesta - Sisältää turvamekanismeja loputtoman suorittamisen estämiseksi ### ♾️ While-silmukan viisauden tarkistus: Ehtopohjainen toisto Testaa while-silmukkaosaamistasi: - Mikä on suurin vaara while-silmukoita käytettäessä? - Milloin valitsisit while-silmukan for-silmukan sijaan? - Kuinka voit estää loputtomat silmukat? ### Modernit silmukkavaihtoehdot JavaScript tarjoaa moderneja silmukkasyntakseja, jotka voivat tehdä koodistasi luettavampaa ja vähemmän virhealtista. For...of-silmukka (ES6+): For...of-silmukan tärkeimmät edut: - Poistaa indeksinhallinnan ja mahdolliset yhden virheet - Tarjoaa suoran pääsyn taulukon elementteihin - Parantaa koodin luettavuutta ja vähentää syntaksin monimutkaisuutta forEach-metodi: Mitä sinun tulee tietää forEachista: - Suorittaa funktion jokaiselle taulukon elementille - Tarjoaa sekä elementin arvon että indeksin parametreina - Ei voi pysähtyä aikaisin (toisin kuin perinteiset silmukat) - Palauttaa undefined (ei luo uutta taulukkoa) ✅ Miksi valitsisit for-silmukan vs. while-silmukan? 17 000 katsojaa pohti samaa kysymystä StackOverflow'ssa, ja jotkut mielipiteet voivat olla mielenkiintoisia sinulle. ### 🎨 Modernin silmukkasyntaksin tarkistus: ES6+:n omaksuminen Arvioi modernin JavaScriptin ymmärrystäsi: - Mitkä ovat for...of-silmukan edut perinteisiin for-silmukoihin verrattuna? - Milloin saattaisit silti suosia perinteisiä for-silmukoita? - Mikä ero on forEach- ja map-metodien välillä? ## Silmukat ja taulukot Taulukoiden yhdistäminen silmukoihin luo tehokkaita tietojen käsittelymahdollisuuksia. Tämä yhdistelmä on olennainen monille ohjelmointitehtäville, kuten listojen näyttämiselle tai tilastojen laskemiselle. Perinteinen taulukon käsittely: Ymmärretään jokainen lähestymistapa: - Käyttää taulukon pituusominaisuutta silmukan rajojen määrittämiseen - Käsittelee elementtejä indeksin avulla perinteisissä for-silmukoissa - Tarjoaa suoran pääsyn elementteihin for...of-silmukoissa - Käsittelee jokaisen taulukon elementin täsmälleen kerran Käytännön tietojen käsittelyesimerkki: Näin tämä koodi toimii: - Alustaa seurantalaskurit summalle ja ääripäille - Käsittelee jokaisen arvosanan yhdellä tehokkaalla silmukalla - Kertyy kokonaismäärä keskiarvon laskemista varten - Seuraa korkeimpia ja matalimpia arvoja iteraation aikana - Laskee lopulliset tilastot silmukan päätyttyä ✅ Kokeile silmukoida omaa taulukkoasi selaimesi konsolissa. --- ## GitHub Copilot Agent -haaste 🚀 Käytä Agent-tilaa suorittaaksesi seuraavan haasteen: Kuvaus: Rakenna kattava tietojen käsittelyfunktio, joka yhdistää taulukot ja silmukat analysoidakseen datasetin ja tuottaakseen merkityksellisiä oivalluksia. Tehtävä: Luo funktio nimeltä analyzeGrades, joka ottaa taulukon opiskelijoiden arvosanaobjekteja (joista jokaisella on nimi- ja pistemääräominaisuudet) ja palauttaa objektin, joka sisältää tilastoja, kuten korkein pistemäärä, matalin pistemäärä, keskiarvo, läpäisseiden opiskelijoiden määrä (pistemäärä >= 70) ja taulukon opiskelijoiden nimistä, jotka saivat keskiarvon yläpuolella. Käytä ratkaisussasi vähintään kahta erilaista silmukkatyyppiä. Lisätietoja Agent-tilasta täällä. ## 🚀 Haaste JavaScript tarjoaa useita moderneja taulukkometodeja, jotka voivat korvata perinteiset silmukat tietyissä tehtävissä. Tutustu forEach, for-of, map, filter ja reduce. Haasteesi: Refaktoroi opiskelijoiden arvosanaesimerkki käyttämällä vähintään kolmea eri taulukkometodia. Huomaa, kuinka paljon siistimmäksi ja luettavammaksi koodi muuttuu modernilla JavaScript-syntaksilla. ## Luentojälkeinen kysely Luentojälkeinen kysely ## Kertaus ja itseopiskelu JavaScript-taulukoilla on monia hyödyllisiä metodeja, jotka ovat erittäin käteviä datan käsittelyssä. Lue lisää näistä metodeista ja kokeile joitakin niistä (kuten push, pop, slice ja splice) luomallasi taulukolla. ## Tehtävä Silmukoi taulukko --- ## 📊 Yhteenveto taulukoista ja silmukoista --- ## 🚀 Taulukkojen ja silmukoiden hallinnan aikajana ### ⚡ Mitä voit tehdä seuraavan 5 minuutin aikana - [ ] Luo taulukko suosikkielokuvistasi ja käytä tiettyjä elementtejä - [ ] Kirjoita for-silmukka, joka laskee luvut 1–10 - [ ] Kokeile modernien taulukkometodien haastetta oppitunnilta - [ ] Harjoittele taulukkoindeksointia selaimen konsolissa ### 🎯 Mitä voit saavuttaa tämän tunnin aikana - [ ] Suorita luentojälkeinen kysely ja kertaa haastavat käsitteet - [ ] Rakenna kattava arvosanaanalysoija GitHub Copilot -haasteesta - [ ] Luo yksinkertainen ostoskori, joka lisää ja poistaa tuotteita - [ ] Harjoittele eri silmukkatyyppeihin siirtymistä - [ ] Kokeile taulukkometodeja kuten push, pop, slice ja splice ### 📅 Viikon mittainen datankäsittelymatka - [ ] Suorita "Silmukoi taulukko" -tehtävä luovilla lisäyksillä - [ ] Rakenna tehtävälistasovellus käyttäen taulukoita ja silmukoita - [ ] Luo yksinkertainen tilastolaskin numeeriselle datalle - [ ] Harjoittele MDN:n taulukkometodeilla - [ ] Rakenna valokuvagalleria tai musiikkisoittolistan käyttöliittymä - [ ] Tutustu funktionaaliseen ohjelmointiin map, filter ja reduce avulla ### 🌟 Kuukauden mittainen muutos - [ ] Hallitse edistyneet taulukko-operaatiot ja suorituskyvyn optimointi - [ ] Rakenna täydellinen datavisualisointipaneeli - [ ] Osallistu avoimen lähdekoodin projekteihin, jotka käsittelevät dataa - [ ] Opeta jollekin toiselle taulukoista ja silmukoista käytännön esimerkkien avulla - [ ] Luo henkilökohtainen kirjasto uudelleenkäytettäviä datankäsittelyfunktioita varten - [ ] Tutustu algoritmeihin ja tietorakenteisiin, jotka perustuvat taulukoihin ### 🏆 Lopullinen datankäsittelyn mestaruuden tarkistus Juhlista taulukoiden ja silmukoiden hallintaa: - Mikä on hyödyllisin taulukko-operaatio, jonka olet oppinut käytännön sovelluksiin? - Mikä silmukkatyyppi tuntuu sinulle luonnollisimmalta ja miksi? - Kuinka taulukoiden ja silmukoiden ymmärtäminen on muuttanut lähestymistapaasi datan järjestämiseen? - Minkä monimutkaisen datankäsittelytehtävän haluaisit seuraavaksi ratkaista? --- Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.

javascript

Introduction à JavaScript

JavaScript est la langue du web. Dans ces quatre leçons, vous apprendrez ses bases. ### Sujets 1. Variables et Types de Données 2. Fonctions et Méthodes 3. Prendre des Décisions avec JavaScript 4. Tableaux et Boucles ### Crédits Ces leçons ont été écrites avec ♥️ par Jasmine Greenaway, Christopher Harrison et Chris Noring Avertissement : Ce document a été traduit à l'aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

javascript

Notions de base en JavaScript : Types de données

Les types de données sont l’un des concepts fondamentaux en JavaScript que vous rencontrerez dans chaque programme que vous écrivez. Pensez aux types de données comme au système de classement utilisé par les bibliothécaires anciens d’Alexandrie – ils avaient des places spécifiques pour les rouleaux contenant de la poésie, des mathématiques et des archives historiques. JavaScript organise les informations de manière similaire avec différentes catégories pour différents types de données. Dans cette leçon, nous explorerons les types de données de base qui font fonctionner JavaScript. Vous apprendrez à manipuler des nombres, du texte, des valeurs vrai/faux, et comprendrez pourquoi choisir le bon type est essentiel pour vos programmes. Ces concepts peuvent sembler abstraits au début, mais avec la pratique, ils deviendront une seconde nature. Comprendre les types de données rendra tout le reste en JavaScript beaucoup plus clair. Tout comme les architectes doivent comprendre les différents matériaux de construction avant de bâtir une cathédrale, ces fondamentaux soutiendront tout ce que vous construirez par la suite. ## Quiz avant la leçon Quiz avant la leçon Cette leçon couvre les bases de JavaScript, le langage qui offre l’interactivité sur le web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables en JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Types de données en JavaScript") Commençons par les variables et les types de données qui les remplissent ! ## Variables Les variables sont des blocs de construction fondamentaux en programmation. Comme les pots étiquetés que les alchimistes médiévaux utilisaient pour stocker différentes substances, les variables vous permettent de stocker des informations et de leur donner un nom descriptif pour pouvoir y faire référence plus tard. Besoin de retenir l’âge de quelqu’un ? Stockez-le dans une variable appelée age. Vous voulez suivre le nom d’un utilisateur ? Gardez-le dans une variable appelée userName. Nous nous concentrerons sur l’approche moderne pour créer des variables en JavaScript. Les techniques que vous apprendrez ici représentent des années d’évolution du langage et les meilleures pratiques développées par la communauté des programmeurs. Créer et déclarer une variable suit la syntaxe suivante [mot-clé] [nom]. Elle se compose de deux parties : - Mot-clé. Utilisez let pour les variables qui peuvent changer, ou const pour les valeurs qui restent les mêmes. - Le nom de la variable, c’est un nom descriptif que vous choisissez vous-même. ✅ Le mot-clé let a été introduit dans ES6 et donne à votre variable ce qu’on appelle une _portée de bloc_ (block scope). Il est recommandé d’utiliser let ou const plutôt que l’ancien mot-clé var. Nous aborderons plus en détail les portées de bloc dans les futures parties. ### Tâche – travailler avec les variables 1. Déclarez une variable. Commençons par créer notre première variable : ```javascript let myVariable; ``` Ce que cela accomplit : - Cela indique à JavaScript de créer un emplacement de stockage appelé myVariable - JavaScript alloue de l’espace en mémoire pour cette variable - La variable n’a actuellement aucune valeur (non définie) 2. Donnez-lui une valeur. Maintenant, mettons quelque chose dans notre variable : ```javascript myVariable = 123; ``` Comment fonctionne l’assignation : - L’opérateur = assigne la valeur 123 à notre variable - La variable contient maintenant cette valeur au lieu d’être indéfinie - Vous pouvez référencer cette valeur dans tout votre code en utilisant myVariable > Remarque : l’utilisation de = dans cette leçon signifie que nous utilisons un « opérateur d’assignation », utilisé pour donner une valeur à une variable. Cela ne signifie pas d’égalité. 3. Faites-le de manière intelligente. En fait, combinons ces deux étapes : ```javascript let myVariable = 123; ``` Cette approche est plus efficace : - Vous déclarez la variable et lui assignez une valeur dans une seule instruction - C’est la pratique standard parmi les développeurs - Cela réduit la longueur du code tout en maintenant la clarté 4. Changez d’avis. Que faire si l’on veut stocker un nombre différent ? ```javascript myVariable = 321; ``` Comprendre la réassignation : - La variable contient maintenant 321 au lieu de 123 - La valeur précédente est remplacée – les variables ne stockent qu’une valeur à la fois - Cette mutabilité est la caractéristique clé des variables déclarées avec let ✅ Essayez ! Vous pouvez écrire du JavaScript directement dans votre navigateur. Ouvrez une fenêtre de navigateur et accédez aux outils développeur. Dans la console, vous trouverez une invite ; tapez let myVariable = 123, appuyez sur entrée, puis tapez myVariable. Que se passe-t-il ? Notez que vous en apprendrez davantage sur ces concepts dans les leçons suivantes. ### 🧠 Vérification de maîtrise : se familiariser avec les variables Voyons comment vous vous sentez avec les variables : - Pouvez-vous expliquer la différence entre déclarer et assigner une variable ? - Que se passe-t-il si vous essayez d’utiliser une variable avant de la déclarer ? - Quand choisiriez-vous let plutôt que const pour une variable ? ## Constantes Parfois, vous devez stocker des informations qui ne doivent jamais changer pendant l’exécution du programme. Pensez aux constantes comme aux principes mathématiques que Euclide a établis dans la Grèce antique – une fois prouvés et documentés, ils sont restés fixes pour toutes références futures. Les constantes fonctionnent de manière similaire aux variables, mais avec une restriction importante : une fois leur valeur assignée, elle ne peut pas être modifiée. Cette immutabilité aide à prévenir les modifications accidentelles de valeurs critiques dans votre programme. La déclaration et l’initialisation d’une constante suivent les mêmes concepts qu’une variable, à l’exception du mot-clé const. Les constantes sont généralement déclarées en lettres majuscules. Voici ce que fait ce code : - Crée une constante nommée MY_VARIABLE avec la valeur 123 - Utilise une convention de nommage en majuscules pour les constantes - Empêche toute modification future de cette valeur Les constantes ont deux règles principales : - Vous devez leur donner une valeur tout de suite – pas de constantes vides autorisées ! - Vous ne pouvez jamais changer cette valeur – JavaScript générera une erreur si vous essayez. Voyons ce que cela signifie : Valeur simple – Ce qui suit N’EST PAS autorisé : ```javascript const PI = 3; PI = 4; // non autorisé ``` À retenir : - Les tentatives de réassignation d’une constante provoquent une erreur - Protège les valeurs importantes des modifications accidentelles - Garantit que la valeur reste constante dans tout votre programme La référence à l’objet est protégée – Ce qui suit N’EST PAS autorisé : ```javascript const obj = { a: 3 }; obj = { b: 5 } // non autorisé ``` Comprendre ces concepts : - Empêche de remplacer l’objet entier par un nouveau - Protège la référence à l’objet original - Maintient l’identité de l’objet en mémoire La valeur de l’objet n’est pas protégée – Ce qui suit EST autorisé : ```javascript const obj = { a: 3 }; obj.a = 5; // autorisé ``` Décomposer ce qui se passe ici : - Modifie la valeur de la propriété dans l’objet - Garde la même référence d’objet - Montre que le contenu de l’objet peut changer alors que la référence reste constante > Notez qu’un const signifie que la référence est protégée de la réassignation. La valeur n’est pas _immuable_ cependant et peut changer, surtout s’il s’agit d’une structure complexe comme un objet. ## Types de données JavaScript organise les informations en différentes catégories appelées types de données. Ce concept reflète la façon dont les savants anciens classaient la connaissance – Aristote distinguait entre différents types de raisonnements, sachant que les principes logiques ne pouvaient pas s’appliquer uniformément à la poésie, aux mathématiques et à la philosophie naturelle. Les types de données sont importants car différentes opérations fonctionnent avec différents types d’informations. Tout comme vous ne pouvez pas faire des opérations arithmétiques sur le nom d’une personne ou alphabétiser une équation mathématique, JavaScript exige le type de donnée approprié pour chaque opération. Comprendre cela évite les erreurs et rend votre code plus fiable. Les variables peuvent contenir de nombreux types différents de valeurs, comme des nombres et du texte. Ces différents types de valeurs sont connus sous le nom de type de données. Les types de données sont une partie importante du développement logiciel car ils aident les développeurs à prendre des décisions sur la façon dont le code doit être écrit et comment le logiciel doit fonctionner. De plus, certains types de données ont des caractéristiques uniques qui aident à transformer ou extraire des informations additionnelles d’une valeur. ✅ Les types de données sont également appelés les primitives de données JavaScript, car ce sont les types de données les plus élémentaires fournis par le langage. Il existe 7 types de primitives : string, number, bigint, boolean, undefined, null et symbol. Prenez un moment pour visualiser ce que chacun de ces primitives pourrait représenter. Qu’est-ce qu’un zebra ? Et 0 ? true ? ### Nombres Les nombres sont le type de données le plus simple en JavaScript. Que vous travailliez avec des nombres entiers comme 42, des décimales comme 3.14 ou des nombres négatifs comme -5, JavaScript les gère de manière uniforme. Vous vous souvenez de notre variable d’avant ? Ce 123 que nous avons stocké était en réalité un type de données nombre : Caractéristiques clés : - JavaScript reconnaît automatiquement les valeurs numériques - Vous pouvez effectuer des opérations mathématiques avec ces variables - Aucune déclaration de type explicite n’est nécessaire Les variables peuvent contenir tous les types de nombres, y compris les décimales ou les nombres négatifs. Les nombres peuvent aussi être utilisés avec les opérateurs arithmétiques, abordés dans la section suivante. ### Opérateurs arithmétiques Les opérateurs arithmétiques vous permettent d’effectuer des calculs mathématiques en JavaScript. Ces opérateurs suivent les mêmes principes que ceux utilisés par les mathématiciens depuis des siècles – les mêmes symboles qui apparaissaient dans les travaux des savants comme Al-Khwarizmi, qui a développé la notation algébrique. Les opérateurs fonctionnent comme vous l’attendez de la mathématique traditionnelle : plus pour l’addition, moins pour la soustraction, et ainsi de suite. Il existe plusieurs types d’opérateurs à utiliser pour effectuer des fonctions arithmétiques, et certains sont listés ici : ✅ Essayez ! Faites une opération arithmétique dans la console de votre navigateur. Les résultats vous surprennent-ils ? ### 🧮 Vérification des compétences mathématiques : calculer avec confiance Testez votre compréhension de l’arithmétique : - Quelle est la différence entre / (division) et % (reste) ? - Pouvez-vous prédire ce que vaut 10 % 3 ? (Indice : ce n’est pas 3,33...) - Pourquoi l’opérateur reste pourrait-il être utile en programmation ? ### Chaînes de caractères En JavaScript, les données textuelles sont représentées sous forme de chaînes de caractères. Le terme « chaîne » vient du concept de caractères enchaînés les uns aux autres en séquence, un peu comme les scribes des monastères médiévaux qui reliaient les lettres pour former des mots et des phrases dans leurs manuscrits. Les chaînes sont fondamentales pour le développement web. Chaque morceau de texte affiché sur un site web – noms d’utilisateur, étiquettes de boutons, messages d’erreur, contenu – est traité comme des données de chaîne. Comprendre les chaînes est essentiel pour créer des interfaces utilisateur fonctionnelles. Les chaînes sont des ensembles de caractères placés entre des guillemets simples ou doubles. Comprendre ces concepts : - Utilise des guillemets simples ' ou doubles " pour définir les chaînes - Stocke des données textuelles pouvant inclure lettres, chiffres et symboles - Assigne des valeurs de chaîne aux variables pour une utilisation ultérieure - Requiert des guillemets pour distinguer le texte des noms de variables N’oubliez pas d’utiliser des guillemets lors de l’écriture d’une chaîne, sinon JavaScript supposera qu’il s’agit d’un nom de variable. ### Formatage des chaînes La manipulation des chaînes vous permet de combiner des éléments de texte, incorporer des variables et créer un contenu dynamique qui réagit à l’état du programme. Cette technique vous permet de construire du texte de manière programmatique. Souvent, vous avez besoin de joindre plusieurs chaînes – ce processus est appelé concaténation. Pour concaténer deux chaînes ou plus, ou les joindre ensemble, utilisez l'opérateur +. Étape par étape, voici ce qui se passe : - Combine plusieurs chaînes en utilisant l'opérateur + - Joint les chaînes directement sans espaces dans le premier exemple - Ajoute des caractères d’espace " " entre les chaînes pour améliorer la lisibilité - Insère une ponctuation comme des virgules pour créer un formatage correct ✅ Pourquoi 1 + 1 = 2 en JavaScript, mais '1' + '1' = 11 ? Réfléchissez-y. Qu'en est-il de '1' + 1 ? Les littéraux de gabarits sont une autre façon de formater les chaînes, sauf qu’au lieu des guillemets, on utilise l’accent grave. Tout ce qui n'est pas du texte brut doit être placé à l'intérieur des espaces réservés ${ }. Cela inclut toutes les variables qui peuvent être des chaînes. Comprenons chaque partie : - Utilise les accents graves ` `` au lieu des guillemets ordinaires pour créer des littéraux de gabarits - Intègre directement les variables à l’aide de la syntaxe de l’espace réservé ${} - Préserve les espaces et le formatage exactement comme écrits - Fournit un moyen plus propre de créer des chaînes complexes avec des variables Vous pouvez atteindre vos objectifs de formatage avec l’une ou l’autre méthode, mais les littéraux de gabarits respecteront tous les espaces et sauts de ligne. ✅ Quand utiliseriez-vous un littéral de gabarit plutôt qu’une chaîne simple ? ### 🔤 Vérification de Maîtrise des Chaînes : Confiance en Manipulation de Texte Évaluez vos compétences avec les chaînes : - Pouvez-vous expliquer pourquoi '1' + '1' est égal à '11' au lieu de 2 ? - Quelle méthode de chaîne trouvez-vous plus lisible : la concaténation ou les littéraux de gabarits ? - Que se passe-t-il si vous oubliez les guillemets autour d’une chaîne ? ### Booléens Les booléens représentent la forme la plus simple de données : ils ne peuvent contenir que l’une des deux valeurs – true ou false. Ce système logique binaire remonte aux travaux de George Boole, un mathématicien du 19e siècle qui a développé l’algèbre booléenne. Malgré leur simplicité, les booléens sont essentiels à la logique des programmes. Ils permettent à votre code de prendre des décisions en fonction de conditions – qu’un utilisateur soit connecté, qu’un bouton ait été cliqué ou que certains critères soient remplis. Les booléens ne peuvent avoir que deux valeurs : true ou false. Ils peuvent aider à décider quelles lignes de code doivent s’exécuter lorsque certaines conditions sont remplies. Dans de nombreux cas, les opérateurs aident à définir la valeur d’un booléen et vous remarquerez souvent que des variables sont initialisées ou leurs valeurs mises à jour avec un opérateur. Dans l’exemple ci-dessus, nous avons : - Créé une variable qui stocke la valeur booléenne true - Démontré comment stocker la valeur booléenne false - Utilisé les mots-clés exacts true et false (pas besoin de guillemets) - Préparé ces variables pour les utiliser dans des instructions conditionnelles ✅ Une variable peut être considérée comme « truthy » si elle s’évalue à un booléen true. Il est intéressant de noter qu’en JavaScript, toutes les valeurs sont truthy à moins qu’elles ne soient définies comme falsy. ### 🎯 Vérification de Logique Booléenne : Compétences en Prise de Décision Testez votre compréhension des booléens : - Pourquoi pensez-vous que JavaScript a des valeurs « truthy » et « falsy » au-delà de juste true et false ? - Pouvez-vous prédire laquelle de ces valeurs est falsy : 0, "0", [], "false" ? - En quoi les booléens peuvent-ils être utiles pour contrôler le flux d’un programme ? --- ## 📊 Votre Résumé de la Boîte à Outils des Types de Données ## Défi Agent GitHub Copilot 🚀 Utilisez le mode Agent pour relever le défi suivant : Description : Créez un gestionnaire d’informations personnelles qui démontre tous les types de données JavaScript appris dans cette leçon tout en gérant des scénarios de données du monde réel. Consigne : Construisez un programme JavaScript qui crée un objet profil utilisateur contenant : le nom d’une personne (chaîne), l’âge (nombre), le statut d’étudiant (booléen), les couleurs préférées sous forme de tableau, et un objet adresse avec des propriétés rue, ville et code postal. Incluez des fonctions pour afficher les informations du profil et mettre à jour les champs individuels. Assurez-vous de démontrer la concaténation de chaînes, les littéraux de gabarits, les opérations arithmétiques sur l’âge, et la logique booléenne pour le statut étudiant. En savoir plus sur le mode agent ici. ## 🚀 Défi JavaScript a certains comportements qui peuvent surprendre les développeurs. Voici un exemple classique à explorer : essayez de taper ceci dans la console de votre navigateur : let age = 1; let Age = 2; age == Age et observez le résultat. Il retourne false – pouvez-vous déterminer pourquoi ? Cela représente l’un des nombreux comportements JavaScript qu’il vaut la peine de comprendre. Une familiarité avec ces particularités vous aidera à écrire un code plus fiable et à déboguer plus efficacement. ## Quiz post-cours Quiz post-cours ## Revue & Auto-apprentissage Jetez un œil à cette liste d’exercices JavaScript et essayez-en un. Qu’avez-vous appris ? ## Devoir Pratique des types de données ## 🚀 Votre Chronologie de Maîtrise des Types de Données JavaScript ### ⚡ Ce que vous pouvez faire dans les 5 prochaines minutes - [ ] Ouvrir la console de votre navigateur et créer 3 variables avec des types de données différents - [ ] Essayer le défi : let age = 1; let Age = 2; age == Age et comprendre pourquoi c’est faux - [ ] Pratiquer la concaténation de chaînes avec votre nom et votre nombre préféré - [ ] Tester ce qui se passe lorsque vous ajoutez un nombre à une chaîne ### 🎯 Ce que vous pouvez accomplir cette heure - [ ] Compléter le quiz post-cours et revoir les concepts confus - [ ] Créer une mini-calculatrice qui additionne, soustrait, multiplie et divise deux nombres - [ ] Construire un formateur de noms simple utilisant des littéraux de gabarits - [ ] Explorer les différences entre les opérateurs de comparaison == et === - [ ] Pratiquer la conversion entre différents types de données ### 📅 Votre fondation JavaScript sur une semaine - [ ] Compléter le devoir avec confiance et créativité - [ ] Créer un objet profil personnel utilisant tous les types de données appris - [ ] Pratiquer avec les exercices JavaScript de CSS-Tricks - [ ] Construire un validateur de formulaire simple utilisant la logique booléenne - [ ] Expérimenter avec les types de données tableau et objet (aperçu des leçons à venir) - [ ] Rejoindre une communauté JavaScript et poser des questions sur les types de données ### 🌟 Votre transformation sur un mois - [ ] Intégrer les connaissances sur les types de données dans de plus grands projets de programmation - [ ] Comprendre quand et pourquoi utiliser chaque type de données dans des applications réelles - [ ] Aider d’autres débutants à comprendre les fondamentaux de JavaScript - [ ] Construire une petite application qui gère différents types de données utilisateur - [ ] Explorer des concepts avancés de types de données comme la coercition de type et l’égalité stricte - [ ] Contribuer à des projets JavaScript open source avec des améliorations de documentation ### 🧠 Contrôle final de maîtrise des types de données Célébrez votre fondation JavaScript : - Quel type de donnée vous a le plus surpris par son comportement ? - À quel point vous sentez-vous à l’aise pour expliquer les variables vs constantes à un ami ? - Quelle est la chose la plus intéressante que vous ayez découverte sur le système de types de JavaScript ? - Quelle application réelle pouvez-vous imaginer construire avec ces fondamentaux ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Avertissement : Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforçons d’assurer l’exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour les informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne pouvons être tenus responsables des malentendus ou des interprétations erronées résultant de l’utilisation de cette traduction. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Les bases de JavaScript : Méthodes et Fonctions

## Quiz avant la leçon Quiz avant la leçon Répéter le même code plusieurs fois est l'une des frustrations les plus courantes en programmation. Les fonctions résolvent ce problème en vous permettant d'encapsuler du code dans des blocs réutilisables. Pensez aux fonctions comme aux pièces standardisées qui ont rendu la chaîne de montage de Henry Ford révolutionnaire – une fois que vous créez un composant fiable, vous pouvez l’utiliser partout où c’est nécessaire sans le reconstruire de zéro. Les fonctions vous permettent de regrouper des morceaux de code afin de pouvoir les réutiliser tout au long de votre programme. Plutôt que de copier-coller la même logique partout, vous pouvez créer une fonction une fois et l’appeler quand vous en avez besoin. Cette approche garde votre code organisé et facilite grandement les mises à jour. Dans cette leçon, vous apprendrez à créer vos propres fonctions, à leur transmettre des informations, et à récupérer des résultats utiles. Vous découvrirez la différence entre fonctions et méthodes, apprendrez des syntaxes modernes, et verrez comment les fonctions peuvent collaborer entre elles. Nous construirons ces concepts étape par étape. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Fonctions Une fonction est un bloc de code autonome qui réalise une tâche spécifique. Elle encapsule une logique que vous pouvez exécuter quand vous le souhaitez. Au lieu d’écrire plusieurs fois le même code dans votre programme, vous pouvez l’encapsuler dans une fonction et appeler cette fonction chaque fois que vous en avez besoin. Cette approche maintient votre code propre et facilite grandement les mises à jour. Imaginez la difficulté de maintenance si vous deviez modifier une logique éparpillée dans 20 endroits différents de votre base de code. Nommer vos fonctions de façon descriptive est essentiel. Une fonction bien nommée communique clairement son but – quand vous voyez cancelTimer(), vous comprenez immédiatement ce qu’elle fait, tout comme un bouton clairement étiqueté vous indique exactement ce qui se passera lorsque vous cliquez dessus. ## Créer et appeler une fonction Examinons comment créer une fonction. La syntaxe suit un modèle cohérent : Décomposons cela : - Le mot-clé function indique à JavaScript « Hé, je crée une fonction ! » - nameOfFunction est l’endroit où vous donnez un nom descriptif à votre fonction - Les parenthèses () sont là où vous pouvez ajouter des paramètres (nous y reviendrons bientôt) - Les accolades {} contiennent le code qui s’exécute quand vous appelez la fonction Créons une fonction simple de salutation pour voir cela en action : Cette fonction affiche « Hello, world! » dans la console. Une fois définie, vous pouvez l’utiliser autant de fois que nécessaire. Pour exécuter (ou « appeler ») votre fonction, écrivez son nom suivi de parenthèses. JavaScript vous permet de définir votre fonction avant ou après son appel – le moteur JavaScript gérera l’ordre d’exécution. Lorsque vous exécutez cette ligne, tout le code à l’intérieur de la fonction displayGreeting s’exécute, affichant « Hello, world! » dans la console de votre navigateur. Vous pouvez appeler cette fonction autant de fois que vous le souhaitez. ### 🧠 Vérification des fondamentaux des fonctions : Construire vos premières fonctions Voyons comment vous comprenez les fonctions de base : - Pouvez-vous expliquer pourquoi on utilise les accolades {} dans la définition des fonctions ? - Que se passe-t-il si vous écrivez displayGreeting sans les parenthèses ? - Pourquoi voudriez-vous appeler la même fonction plusieurs fois ? ### Bonnes pratiques des fonctions Voici quelques conseils pour vous aider à écrire de bonnes fonctions : - Donnez à vos fonctions des noms clairs et descriptifs – votre futur vous vous en remerciera ! - Utilisez le camelCase pour les noms composés (comme calculateTotal plutôt que calculate_total) - Gardez chaque fonction concentrée sur une seule tâche ## Passer des informations à une fonction Notre fonction displayGreeting est limitée – elle ne peut afficher que « Hello, world! » pour tout le monde. Les paramètres nous permettent de rendre les fonctions plus flexibles et utiles. Les paramètres agissent comme des espaces réservés dans lesquels vous insérez des valeurs différentes à chaque appel de la fonction. De cette manière, la même fonction peut fonctionner avec des informations différentes à chaque utilisation. Vous listez les paramètres à l’intérieur des parenthèses lors de la définition de votre fonction, en séparant plusieurs paramètres par des virgules : Chaque paramètre agit comme un espace réservé – lorsque quelqu’un appelle votre fonction, il fournit des valeurs réelles qui remplacent ces espaces. Modifions notre fonction de salutation pour qu’elle accepte le nom de quelqu’un : Remarquez comment nous utilisons les backticks (` `) et ${}` pour insérer le nom directement dans le message – cela s’appelle un template literal, et c’est un moyen très pratique de construire des chaînes de caractères avec des variables intégrées. Maintenant, lorsque nous appelons notre fonction, nous pouvons passer n’importe quel nom : JavaScript prend la chaîne 'Christopher', l’affecte au paramètre name, et crée le message personnalisé « Hello, Christopher! » ## Valeurs par défaut Que se passe-t-il si on veut rendre certains paramètres optionnels ? C’est là qu’interviennent les valeurs par défaut ! Disons que l’on veut que les gens puissent personnaliser le mot de salutation, mais si aucun n’est donné, on utilisera simplement « Hello » par défaut. Vous pouvez définir des valeurs par défaut en utilisant le signe égal, comme pour la définition d’une variable : Ici, name est toujours requis, mais salutation a une valeur de secours 'Hello' si personne ne fournit une salutation différente. Nous pouvons maintenant appeler cette fonction de deux manières différentes : Au premier appel, JavaScript utilise la valeur par défaut « Hello » puisque nous n’avons pas spécifié de salutation. Au second appel, il utilise notre salutation personnalisée « Hi ». Cette flexibilité rend les fonctions adaptables à différents cas d’usage. ### 🎛️ Vérification de maîtrise des paramètres : rendre les fonctions flexibles Testez votre compréhension des paramètres : - Quelle est la différence entre un paramètre et un argument ? - Pourquoi les valeurs par défaut sont-elles utiles en programmation réelle ? - Pouvez-vous prédire ce qui se passe si vous passez plus d’arguments que de paramètres ? ## Valeurs de retour Jusqu’à présent, nos fonctions se contentaient d’afficher des messages dans la console, mais que faire si vous voulez que la fonction calcule quelque chose et vous renvoie le résultat ? C’est là où les valeurs de retour entrent en jeu. Au lieu de simplement afficher quelque chose, une fonction peut vous rendre une valeur que vous pouvez stocker dans une variable ou utiliser dans d’autres parties de votre code. Pour retourner une valeur, vous utilisez le mot-clé return suivi de ce que vous souhaitez renvoyer : Voici un point important : quand une fonction rencontre une instruction return, elle s’arrête immédiatement et renvoie cette valeur à l’appelant. Modifions notre fonction de salutation pour qu’elle retourne le message au lieu de l’afficher : Maintenant au lieu d’afficher la salutation, cette fonction crée le message et nous le renvoie. Pour utiliser la valeur retournée, on peut la stocker dans une variable comme n’importe quelle autre valeur : Désormais, greetingMessage contient « Hello, Christopher » et nous pouvons l’utiliser partout dans notre code – l’afficher sur une page web, l’inclure dans un mail, ou la passer à une autre fonction. ### 🔄 Vérification des valeurs de retour : récupérer des résultats Évaluez votre compréhension des valeurs de retour : - Que se passe-t-il avec le code placé après une instruction return dans une fonction ? - Pourquoi retourner une valeur est souvent meilleur qu’afficher directement dans la console ? - Une fonction peut-elle retourner différents types de valeurs (chaîne, nombre, booléen) ? ## Passer des fonctions en paramètres à d’autres fonctions Les fonctions peuvent être passées comme paramètres à d’autres fonctions. Bien que ce concept puisse sembler compliqué au début, c’est une fonctionnalité puissante qui permet des schémas de programmation flexibles. Ce pattern est très courant quand vous voulez dire « quand quelque chose se produit, fais cette autre chose ». Par exemple, « quand le minuteur se termine, exécute ce code » ou « quand l’utilisateur clique sur le bouton, appelle cette fonction ». Regardons setTimeout, une fonction intégrée qui attend un certain temps puis exécute du code. Il faut lui dire quel code exécuter – parfait pour passer une fonction ! Essayez ce code – après 3 secondes, vous verrez un message : Remarquez comment nous passons displayDone (sans parenthèses) à setTimeout. Nous n’appelons pas la fonction nous-mêmes – nous la remettons à setTimeout en disant « appelle ceci dans 3 secondes ». ### Fonctions anonymes Parfois, vous avez besoin d’une fonction pour une seule chose et ne voulez pas lui donner un nom. Réfléchissez : si vous utilisez une fonction une seule fois, pourquoi encombrer votre code avec un nom supplémentaire ? JavaScript vous permet de créer des fonctions anonymes – fonctions sans nom que vous définissez directement là où elles sont nécessaires. Voici comment réécrire notre exemple de minuterie avec une fonction anonyme : Cela donne le même résultat, mais la fonction est définie directement dans l’appel à setTimeout, éliminant le besoin d’une déclaration de fonction séparée. ### Fonctions fléchées JavaScript moderne offre un moyen encore plus court d’écrire des fonctions appelé fonctions fléchées. Elles utilisent => (qui ressemble à une flèche – vous voyez ?) et sont très populaires chez les développeurs. Les fonctions fléchées vous permettent d’éviter le mot-clé function et d’écrire un code plus concis. Voici notre exemple de minuterie avec une fonction fléchée : Les () représentent l’endroit des paramètres (vide ici), puis vient la flèche =>, et enfin le corps de la fonction entre accolades. Cela fournit la même fonctionnalité avec une syntaxe plus concise. ### Quand utiliser chaque approche Quand faut-il utiliser chaque approche ? Une bonne règle pratique : si vous allez utiliser la fonction plusieurs fois, donnez-lui un nom et définissez-la séparément. Si c’est pour un usage spécifique unique, considérez une fonction anonyme. Les fonctions fléchées et la syntaxe traditionnelle sont valides, bien que les fonctions fléchées soient très répandues dans les bases de code JavaScript modernes. ### 🎨 Vérification du style des fonctions : choisir la bonne syntaxe Testez votre compréhension de la syntaxe : - Quand pourriez-vous préférer les fonctions fléchées à la syntaxe traditionnelle des fonctions ? - Quel est le principal avantage des fonctions anonymes ? - Pouvez-vous imaginer une situation où une fonction nommée est meilleure qu’une anonyme ? --- ## 🚀 Challenge Pouvez-vous formuler en une phrase la différence entre fonctions et méthodes ? Essayez ! ## Challenge GitHub Copilot Agent 🚀 Utilisez le mode Agent pour relever le défi suivant : Description : Créez une bibliothèque utilitaire de fonctions mathématiques qui illustre différents concepts de fonctions vus dans cette leçon, y compris paramètres, valeurs par défaut, valeurs de retour, et fonctions fléchées. Consigne : Créez un fichier JavaScript appelé mathUtils.js contenant les fonctions suivantes : 1. Une fonction add qui prend deux paramètres et retourne leur somme 2. Une fonction multiply avec des valeurs par défaut pour les paramètres (le second paramètre par défaut vaut 1) 3. Une fonction fléchée square qui prend un nombre et retourne son carré 4. Une fonction calculate qui accepte une autre fonction en paramètre et deux nombres, puis applique cette fonction à ces nombres 5. Montrez l’appel de chaque fonction avec des cas tests appropriés Pour en savoir plus sur le mode agent. ## Quiz après la leçon Quiz après la leçon ## Révision & Autoformation Il vaut la peine de se documenter un peu plus sur les fonctions fléchées, car elles sont de plus en plus utilisées dans les bases de code. Entraînez-vous à écrire une fonction puis à la réécrire avec cette syntaxe. ## Devoir Amusez-vous avec les fonctions --- ## 🧰 Résumé de votre boîte à outils JavaScript Functions --- ## 🚀 Votre calendrier de maîtrise des fonctions JavaScript ### ⚡ Ce que vous pouvez faire dans les 5 prochaines minutes - [ ] Écrire une fonction simple qui retourne votre nombre préféré - [ ] Créer une fonction avec deux paramètres qui les additionne - [ ] Essayez de convertir une fonction traditionnelle en syntaxe de fonction fléchée - [ ] Entraînez-vous avec le défi : expliquez la différence entre fonctions et méthodes ### 🎯 Ce que vous pouvez accomplir cette heure - [ ] Complétez le quiz post-leçon et révisez les concepts confus - [ ] Construisez la bibliothèque d'utilitaires mathématiques du défi GitHub Copilot - [ ] Créez une fonction qui utilise une autre fonction comme paramètre - [ ] Entraînez-vous à écrire des fonctions avec des paramètres par défaut - [ ] Expérimentez avec les littéraux de gabarits dans les valeurs de retour des fonctions ### 📅 Votre maîtrise des fonctions sur une semaine - [ ] Complétez la mission "Amusez-vous avec les fonctions" avec créativité - [ ] Refactorez du code répétitif que vous avez écrit en fonctions réutilisables - [ ] Créez une petite calculatrice en utilisant uniquement des fonctions (sans variables globales) - [ ] Entraînez-vous aux fonctions fléchées avec des méthodes de tableau comme map() et filter() - [ ] Créez une collection de fonctions utilitaires pour les tâches courantes - [ ] Étudiez les fonctions d'ordre supérieur et les concepts de programmation fonctionnelle ### 🌟 Votre transformation sur un mois - [ ] Maîtrisez des concepts avancés des fonctions comme les closures et les portées - [ ] Créez un projet qui utilise intensivement la composition de fonctions - [ ] Contribuez à l’open source en améliorant la documentation des fonctions - [ ] Enseignez à quelqu’un d’autre les fonctions et les différents styles de syntaxe - [ ] Explorez les paradigmes de la programmation fonctionnelle en JavaScript - [ ] Créez une bibliothèque personnelle de fonctions réutilisables pour les projets futurs ### 🏆 Bilan final du champion des fonctions Célébrez votre maîtrise des fonctions : - Quelle est la fonction la plus utile que vous ayez créée jusqu’à présent ? - Comment l’apprentissage des fonctions a-t-il changé votre façon de penser l’organisation du code ? - Quelle syntaxe de fonction préférez-vous et pourquoi ? - Quel problème réel résoudriez-vous en écrivant une fonction ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Avertissement : Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des imprécisions. Le document original dans sa langue d’origine doit être considéré comme la source faisant autorité. Pour les informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou d’interprétations erronées résultant de l’utilisation de cette traduction. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Notions de base en JavaScript : Prendre des décisions

Vous êtes-vous déjà demandé comment les applications prennent des décisions intelligentes ? Comme comment un système de navigation choisit le chemin le plus rapide, ou comment un thermostat décide quand allumer le chauffage ? C’est le concept fondamental de la prise de décision en programmation. Tout comme la machine analytique de Charles Babbage était conçue pour suivre différentes séquences d’opérations selon des conditions, les programmes modernes en JavaScript doivent faire des choix en fonction des circonstances. Cette capacité à bifurquer et à prendre des décisions transforme un code statique en applications réactives et intelligentes. Dans cette leçon, vous apprendrez à implémenter une logique conditionnelle dans vos programmes. Nous explorerons les instructions conditionnelles, les opérateurs de comparaison et les expressions logiques qui permettent à votre code d’évaluer des situations et de répondre de manière appropriée. ## Quiz pré-conférence Quiz pré-conférence La capacité à prendre des décisions et à contrôler le flux d’un programme est un aspect fondamental de la programmation. Cette section couvre comment contrôler le chemin d’exécution de vos programmes JavaScript en utilisant des valeurs booléennes et une logique conditionnelle. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Bref rappel sur les booléens Avant d’explorer la prise de décision, revenons sur les valeurs booléennes vues dans notre leçon précédente. Nommées d’après le mathématicien George Boole, ces valeurs représentent des états binaires – soit true soit false. Il n’y a pas d’ambiguïté, pas de milieu. Ces valeurs binaires forment la base de toute logique informatique. Chaque décision prise par votre programme se ramène en fin de compte à une évaluation booléenne. Créer des variables booléennes est simple : Cela crée deux variables avec des valeurs booléennes explicites. ✅ Les booléens tirent leur nom du mathématicien, philosophe et logicien anglais George Boole (1815–1864). ## Opérateurs de comparaison et booléens En pratique, vous ne levez rarement les booléens manuellement. Vous les générez plutôt en évaluant des conditions : « Ce nombre est-il plus grand que cet autre ? » ou « Ces valeurs sont-elles égales ? » Les opérateurs de comparaison permettent ces évaluations. Ils comparent des valeurs et retournent des résultats booléens selon la relation entre les opérandes. ✅ Vérifiez vos connaissances en écrivant quelques comparaisons dans la console de votre navigateur. Certains résultats vous surprennent-ils ? ### 🧠 Maîtrise de la comparaison : Comprendre la logique booléenne Testez votre compréhension des comparaisons : - Pourquoi pensez-vous que === (égalité stricte) est généralement préféré à == (égalité lâche) ? - Pouvez-vous prédire ce que retourne 5 === '5' ? Et 5 == '5' ? - Quelle est la différence entre !== et != ? ## L’instruction If L’instruction if est comme poser une question dans votre code. « Si cette condition est vraie, alors fais ceci. » C’est probablement l’outil le plus important que vous utiliserez pour prendre des décisions en JavaScript. Voici comment cela fonctionne : La condition se place entre parenthèses, et si elle vaut true, JavaScript exécute le code dans les accolades. Si elle vaut false, JavaScript saute tout ce bloc. Vous utiliserez souvent des opérateurs de comparaison pour créer ces conditions. Voyons un exemple concret : Puisque 1000 >= 800 évalue à true, le code dans le bloc s’exécute et affiche « Getting a new laptop! » dans la console. ## Instruction If..Else Mais que faire si vous voulez que votre programme fasse quelque chose de différent quand la condition est fausse ? C’est là qu’intervient else – c’est comme un plan B. L’instruction else vous permet de dire « si cette condition n’est pas vraie, fais plutôt ceci. » Ici, comme 500 >= 800 est false, JavaScript saute le premier bloc et exécute celui de else. Vous verrez dans la console « Can't afford a new laptop, yet! ». ✅ Testez votre compréhension de ce code et du code suivant en l’exécutant dans la console d’un navigateur. Modifiez les valeurs des variables currentMoney et laptopPrice pour changer le message retourné par console.log(). ### 🎯 Test de logique If-Else : chemins conditionnels Évaluez votre compréhension de la logique conditionnelle : - Que se passe-t-il si currentMoney est exactement égal à laptopPrice ? - Pouvez-vous imaginer un scénario réel où la logique if-else serait utile ? - Comment pourriez-vous étendre ceci pour gérer plusieurs plages de prix ? ## L’instruction Switch Parfois, vous devez comparer une valeur à plusieurs options. Bien que vous puissiez enchaîner plusieurs instructions if..else, cette méthode devient rapidement lourde. L’instruction switch offre une structure plus propre pour gérer plusieurs valeurs discrètes. Le concept est semblable aux systèmes de commutateurs mécaniques utilisés dans les premières centrales téléphoniques – une valeur d’entrée détermine le chemin spécifique que l’exécution doit suivre. Voici comment elle est structurée : - JavaScript évalue l’expression une fois - Il regarde chaque case pour trouver une correspondance - Lorsqu’il en trouve une, il exécute ce bloc de code - Le break ordonne à JavaScript d’arrêter et de sortir du switch - Si aucune correspondance n’est trouvée, il exécute le bloc default (s’il y en a un) Dans cet exemple, JavaScript voit que dayNumber vaut 2, trouve le case 2 correspondant, assigne « Tuesday » à dayName, puis sort du switch. Le résultat ? « Today is Tuesday » est affiché dans la console. ✅ Testez votre compréhension de ce code et du code suivant en l’exécutant dans la console du navigateur. Modifiez la valeur de la variable a pour changer la sortie du console.log(). ### 🔄 Maîtrise de l'instruction Switch : multiples options Testez votre compréhension du switch : - Que se passe-t-il si vous oubliez un break ? - Quand utiliseriez-vous switch plutôt que plusieurs if-else ? - Pourquoi le cas default est-il utile même si vous pensez avoir couvert toutes les possibilités ? ## Opérateurs logiques et booléens Les décisions complexes nécessitent souvent d’évaluer plusieurs conditions en même temps. Tout comme l’algèbre booléenne permet aux mathématiciens de combiner des expressions logiques, la programmation propose des opérateurs logiques pour connecter plusieurs conditions booléennes. Ces opérateurs permettent une logique conditionnelle sophistiquée en combinant des évaluations simples vrai/faux. Ces opérateurs vous permettent de combiner les conditions de façon utile : - ET (&&) signifie que les deux conditions doivent être vraies - OU (||) signifie qu’au moins une condition doit être vraie - NON (!) inverse vrai en faux (et vice versa) ## Conditions et décisions avec opérateurs logiques Voyons ces opérateurs logiques en action avec un exemple plus réaliste : Dans cet exemple : nous calculons un prix avec une remise de 20 % (640), puis évaluons si nos fonds disponibles couvrent soit le prix plein OU le prix remisé. Comme 600 satisfait au seuil du prix avec remise de 640, la condition évalue à vrai. ### 🧮 Test des opérateurs logiques : combiner les conditions Testez votre compréhension des opérateurs logiques : - Dans l’expression A && B, que se passe-t-il si A est faux ? Est-ce que B est même évalué ? - Pouvez-vous imaginer une situation où il faudrait les trois opérateurs (&&, ||, !) ensemble ? - Quelle est la différence entre !user.isActive et user.isActive !== true ? ### Opérateur de négation Parfois, il est plus facile de penser à quand quelque chose N’EST PAS vrai. Plutôt que demander « L’utilisateur est-il connecté ? », vous pourriez vouloir demander « L’utilisateur n’est-il PAS connecté ? ». L’opérateur point d’exclamation (!) inverse la logique pour vous. L’opérateur ! est comme dire « l’opposé de... » – si quelque chose est true, ! le rend false, et inversement. ### Expressions ternaires Pour les affectations conditionnelles simples, JavaScript propose l’opérateur ternaire. Cette syntaxe concise vous permet d’écrire une expression conditionnelle en une seule ligne, pratique quand il faut assigner une valeur parmi deux selon une condition. Cela se lit comme une question : « Cette condition est-elle vraie ? Si oui, utilise cette valeur. Sinon, utilise cette autre valeur. » Voici un exemple plus concret : ✅ Prenez un moment pour lire ce code plusieurs fois. Comprenez-vous le fonctionnement de ces opérateurs ? Cette ligne signifie : « Est-ce que firstNumber est supérieur à secondNumber ? Si oui, mets firstNumber dans biggestNumber. Sinon, mets secondNumber dans biggestNumber. » L’opérateur ternaire est juste un raccourci pour écrire cette structure traditionnelle if..else : Les deux méthodes produisent le même résultat. L’opérateur ternaire offre de la concision, tandis que la structure if-else traditionnelle peut être plus lisible pour des conditions complexes. --- ## 🚀 Challenge Créez un programme écrit d’abord avec des opérateurs logiques, puis réécrivez-le en utilisant une expression ternaire. Quelle syntaxe préférez-vous ? --- ## Défi GitHub Copilot Agent 🚀 Utilisez le mode Agent pour relever le défi suivant : Description : Créez un calculateur de notes complet qui démontre plusieurs concepts de prise de décision vus dans cette leçon, incluant les instructions if-else, switch, les opérateurs logiques et les expressions ternaires. Consigne : Écrivez un programme JavaScript qui prend la note numérique d’un étudiant (0-100) et détermine sa mention selon les critères suivants : - A : 90-100 - B : 80-89 - C : 70-79 - D : 60-69 - F : en-dessous de 60 Exigences : 1. Utilisez une instruction if-else pour déterminer la mention 2. Utilisez des opérateurs logiques pour vérifier si l’étudiant réussit (note >= 60) ET a des mentions (note >= 90) 3. Utilisez une instruction switch pour fournir des retours spécifiques pour chaque note en lettre 4. Utilisez un opérateur ternaire pour déterminer si l’étudiant est éligible au cours suivant (note >= 70) 5. Incluez une validation d’entrée pour garantir que le score est entre 0 et 100 Testez votre programme avec diverses notes incluant des cas limites comme 59, 60, 89, 90, ainsi que des entrées invalides. En savoir plus sur le mode agent ici. ## Quiz post-conférence Quiz post-conférence ## Revue & Auto-apprentissage Lisez davantage sur les nombreux opérateurs disponibles pour l’utilisateur sur MDN. Parcourez le magnifique répertoire des opérateurs de Josh Comeau ! ## Devoir Opérateurs --- ## 🧠 Résumé de votre boîte à outils de prise de décision --- ## 🚀 Votre calendrier de maîtrise de la prise de décision en JavaScript ### ⚡ Ce que vous pouvez faire dans les 5 prochaines minutes - [ ] Pratiquer les opérateurs de comparaison dans la console de votre navigateur - [ ] Écrire une simple instruction if-else qui vérifie votre âge - [ ] Essayer le défi : réécrire un if-else avec un opérateur ternaire - [ ] Tester ce qui se passe avec différentes valeurs "truthy" et "falsy" ### 🎯 Ce que vous pouvez accomplir cette heure-ci - [ ] Compléter le quiz post-leçon et revoir les concepts confus - [ ] Construire le calculateur de notes complet issu du défi GitHub Copilot - [ ] Créer un arbre décisionnel simple pour un scénario réel (comme choisir quoi porter) - [ ] Pratiquer la combinaison de plusieurs conditions avec des opérateurs logiques - [ ] Expérimenter avec des instructions switch pour différents cas d’utilisation ### 📅 Maîtrise logique sur une semaine - [ ] Compléter le devoir sur les opérateurs avec des exemples créatifs - [ ] Construire une mini-application de quiz utilisant diverses structures conditionnelles - [ ] Créer un validateur de formulaire qui vérifie plusieurs conditions d’entrée - [ ] Pratiquer les exercices de répertoire des opérateurs de Josh Comeau - [ ] Refactoriser du code existant pour utiliser des structures conditionnelles plus appropriées - [ ] Étudier l’évaluation à court-circuit et les implications sur les performances ### 🌟 Transformation sur un mois - [ ] Maîtriser les conditions imbriquées complexes tout en maintenant la lisibilité du code - [ ] Construire une application avec une logique décisionnelle sophistiquée - [ ] Contribuer à l’open source en améliorant la logique conditionnelle dans des projets existants - [ ] Enseigner à quelqu’un d’autre les différentes structures conditionnelles et leur usage approprié - [ ] Explorer les approches de programmation fonctionnelle appliquées à la logique conditionnelle - [ ] Créer un guide de référence personnel des meilleures pratiques conditionnelles ### 🏆 Vérification finale du champion de la prise de décision Célébrez votre maîtrise de la pensée logique : - Quelle est la logique décisionnelle la plus complexe que vous ayez réussie à implémenter ? - Quelle structure conditionnelle vous paraît la plus naturelle et pourquoi ? - Comment l’apprentissage des opérateurs logiques a-t-il changé votre approche de résolution de problèmes ? - Quelle application réelle bénéficierait d’une logique décisionnelle sophistiquée ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Clause de non-responsabilité : Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d’assurer l’exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source officielle. Pour les informations critiques, il est recommandé de faire appel à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Les bases de JavaScript : Tableaux et Boucles

## Quiz avant la leçon Quiz avant la leçon Vous vous êtes déjà demandé comment les sites web suivent les articles dans un panier ou affichent votre liste d'amis ? C'est là que les tableaux et les boucles interviennent. Les tableaux sont comme des conteneurs numériques qui contiennent plusieurs informations, tandis que les boucles vous permettent de travailler efficacement avec toutes ces données sans écrire un code répétitif. Ensemble, ces deux concepts forment la base pour manipuler l'information dans vos programmes. Vous apprendrez à passer de l'écriture manuelle de chaque étape à la création d'un code intelligent et efficace capable de traiter des centaines voire des milliers d'éléments rapidement. À la fin de cette leçon, vous comprendrez comment accomplir des tâches complexes avec juste quelques lignes de code. Explorons ces concepts essentiels de la programmation. [](https://youtube.com/watch?v=1U4qTyq02Xw "Tableaux") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Boucles") ## Tableaux Pensez aux tableaux comme à un classeur numérique - au lieu de ranger un document par tiroir, vous pouvez organiser plusieurs éléments liés dans un seul conteneur structuré. En termes de programmation, les tableaux vous permettent de stocker plusieurs informations dans un seul paquet organisé. Que vous construisiez une galerie photo, gériez une liste de tâches ou suiviez les meilleurs scores d'un jeu, les tableaux sont la base de l'organisation des données. Voyons comment ils fonctionnent. ✅ Les tableaux sont partout autour de nous ! Pouvez-vous penser à un exemple réel de tableau, comme une installation de panneaux solaires ? ### Création de Tableaux Créer un tableau est super simple - il suffit d'utiliser des crochets ! Que se passe-t-il ici ? Vous venez de créer un conteneur vide avec ces crochets []. Pensez-y comme à une étagère de bibliothèque vide - elle est prête à contenir les livres que vous souhaitez y organiser. Vous pouvez aussi remplir votre tableau avec des valeurs initiales dès le départ : Choses intéressantes à noter : - Vous pouvez stocker du texte, des nombres, ou même des valeurs vrai/faux dans le même tableau - Il suffit de séparer chaque élément par une virgule - facile ! - Les tableaux sont parfaits pour garder les informations liées ensemble ### Indexation dans les Tableaux Voici quelque chose qui peut sembler inhabituel au début : les tableaux numérotent leurs éléments à partir de 0, pas de 1. Cette indexation à base zéro vient de la manière dont fonctionne la mémoire informatique - c’est une convention de programmation depuis les premiers jours des langages comme le C. Chaque emplacement dans le tableau reçoit un numéro d'adresse appelé index. ✅ Cela vous surprend-il que les tableaux commencent à l’index zéro ? Dans certains langages, les index commencent à 1. Il y a une histoire intéressante à ce sujet, que vous pouvez lire sur Wikipédia. Accéder aux éléments d’un tableau : Décomposons ce qui se passe : - Utilise la notation avec crochets et l’index pour accéder aux éléments - Renvoie la valeur stockée à cette position spécifique dans le tableau - Commence à compter à partir de 0, ce qui fait que le premier élément a l’index 0 Modifier des éléments d’un tableau : Ici, nous avons : - Modifié l’élément à l’index 4 de "Rocky Road" à "Butter Pecan" - Ajouté un nouvel élément "Cookie Dough" à l’index 5 - Élargi automatiquement la longueur du tableau en ajoutant au-delà des limites actuelles ### Longueur du tableau et méthodes communes Les tableaux comportent des propriétés et méthodes intégrées qui rendent le travail avec les données bien plus facile. Trouver la longueur d’un tableau : Points clés à retenir : - Renvoie le nombre total d’éléments dans le tableau - Se met à jour automatiquement quand des éléments sont ajoutés ou supprimés - Fournit un décompte dynamique utile pour les boucles et validations Méthodes essentielles des tableaux : Comprendre ces méthodes : - Ajoute des éléments avec push() (à la fin) et unshift() (au début) - Supprime des éléments avec pop() (à la fin) et shift() (au début) - Localise des éléments avec indexOf() et vérifie l’existence avec includes() - Renvoie des valeurs utiles comme les éléments supprimés ou les positions ✅ Essayez par vous-même ! Utilisez la console de votre navigateur pour créer et manipuler un tableau de votre propre création. ### 🧠 Contrôle des fondations des tableaux : Organiser vos données Testez votre compréhension des tableaux : - Pourquoi pensez-vous que les tableaux commencent à compter à partir de 0 plutôt que 1 ? - Que se passe-t-il si vous essayez d’accéder à un index qui n’existe pas (comme arr[100] dans un tableau de 5 éléments) ? - Pouvez-vous penser à trois scénarios réels où les tableaux seraient utiles ? ## Boucles Pensez à la célèbre punition dans les romans de Charles Dickens où les élèves devaient écrire plusieurs fois la même phrase sur une ardoise. Imaginez si vous pouviez simplement ordonner à quelqu’un d’« écrire cette phrase 100 fois » et que cela soit fait automatiquement. C’est exactement ce que font les boucles pour votre code. Les boucles sont comme un assistant infatigable qui répète les tâches sans erreur. Que vous ayez besoin de vérifier chaque article dans un panier ou d’afficher toutes les photos d’un album, les boucles gèrent la répétition efficacement. JavaScript offre plusieurs types de boucles. Voyons chacune et comprenons quand les utiliser. ### Boucle For La boucle for est comme régler un minuteur - vous savez exactement combien de fois vous voulez que quelque chose se produise. Elle est super organisée et prévisible, ce qui la rend parfaite quand vous travaillez avec des tableaux ou que vous devez compter des éléments. Structure d’une boucle For : Étape par étape, voici ce qui se passe : - Initialise la variable compteur i à 0 au début - Vérifie la condition i < 10 avant chaque itération - Exécute le bloc de code lorsque la condition est vraie - Incrémente i de 1 après chaque itération avec i++ - S’arrête lorsque la condition devient fausse (quand i atteint 10) ✅ Essayez ce code dans la console d’un navigateur. Que se passe-t-il quand vous modifiez légèrement le compteur, la condition ou l’expression d’itération ? Pouvez-vous le faire tourner à l’envers, créant un compte à rebours ? ### 🗓️ Contrôle de maîtrise des boucles For : Répétition contrôlée Évaluez votre compréhension des boucles for : - Quelles sont les trois parties d’une boucle for, et que fait chacune ? - Comment parcourir un tableau à l’envers ? - Que se passe-t-il si vous oubliez la partie incrémentation (i++) ? ### Boucle While La boucle while est comme dire « continue à faire ceci tant que... » - vous ne savez peut-être pas exactement combien de fois elle tournera, mais vous savez quand arrêter. Elle est parfaite pour des choses comme demander une entrée utilisateur jusqu’à ce qu’il donne ce dont vous avez besoin, ou chercher dans des données jusqu’à trouver ce que vous cherchez. Caractéristiques de la boucle While : - Continue d’exécuter tant que la condition est vraie - Nécessite la gestion manuelle des variables compteur - Vérifie la condition avant chaque itération - Risques de boucles infinies si la condition ne devient jamais fausse Comprendre ces exemples : - Gère manuellement la variable compteur i à l’intérieur du corps de la boucle - Incrémente le compteur pour éviter les boucles infinies - Montre un cas d’usage pratique avec saisie utilisateur et limite de tentatives - Inclut des mécanismes de sécurité pour prévenir une exécution sans fin ### ♾️ Contrôle de sagesse sur la boucle While : Répétition basée sur une condition Testez votre compréhension des boucles while : - Quel est le principal danger en utilisant les boucles while ? - Quand choisiriez-vous une boucle while plutôt qu’une boucle for ? - Comment éviter les boucles infinies ? ### Alternatives modernes aux boucles JavaScript offre une syntaxe de boucles moderne qui peut rendre votre code plus lisible et moins sujet aux erreurs. Boucle For...of (ES6+) : Avantages clés de for...of : - Élimine la gestion des index et les erreurs hors limites - Donne un accès direct aux éléments du tableau - Améliore la lisibilité du code et réduit la complexité syntaxique Méthode forEach : Ce qu’il faut savoir sur forEach : - Exécute une fonction pour chaque élément du tableau - Fournit la valeur de l’élément et son index en paramètres - Ne peut pas être arrêtée prématurément (contrairement aux boucles traditionnelles) - Renvoie undefined (ne crée pas un nouveau tableau) ✅ Pourquoi choisir une boucle for plutôt qu’une boucle while ? 17 000 personnes se sont posé la même question sur StackOverflow, et certaines opinions pourraient vous intéresser. ### 🎨 Contrôle de syntaxe moderne : S’approprier ES6+ Évaluez votre compréhension moderne de JavaScript : - Quels sont les avantages de for...of par rapport aux boucles for traditionnelles ? - Quand préféreriez-vous encore les boucles for traditionnelles ? - Quelle est la différence entre forEach et map ? ## Boucles et tableaux La combinaison de tableaux avec les boucles crée des capacités puissantes de traitement des données. Ce duo est fondamental pour de nombreuses tâches en programmation, de l’affichage des listes au calcul de statistiques. Traitement traditionnel des tableaux : Comprenons chaque approche : - Utilise la propriété length du tableau pour déterminer les limites de la boucle - Accède aux éléments par index dans les boucles for traditionnelles - Fournit l’accès direct aux éléments dans les boucles for...of - Traite chaque élément du tableau une seule fois Exemple pratique de traitement des données : Voici comment fonctionne ce code : - Initialise des variables de suivi pour la somme et les extrêmes - Traite chaque note avec une seule boucle efficace - Accumule le total pour calculer la moyenne - Suit les valeurs les plus hautes et les plus basses pendant l’itération - Calcule les statistiques finales après la fin de la boucle ✅ Essayez de faire tourner une boucle sur un tableau que vous avez créé dans la console de votre navigateur. --- ## Défi GitHub Copilot Agent 🚀 Utilisez le mode Agent pour relever le défi suivant : Description : Construisez une fonction complète de traitement de données qui combine tableaux et boucles pour analyser un ensemble de données et générer des informations significatives. Consigne : Créez une fonction appelée analyzeGrades qui prend un tableau d’objets de notes d’étudiants (chacun contenant les propriétés name et score) et renvoie un objet avec des statistiques incluant le score le plus élevé, le score le plus bas, la moyenne, le nombre d’étudiants ayant réussi (score >= 70), et un tableau des noms d’étudiants ayant un score supérieur à la moyenne. Utilisez au moins deux types de boucles différents dans votre solution. Apprenez-en plus sur le mode agent ici. ## 🚀 Défi JavaScript offre plusieurs méthodes modernes de tableau qui peuvent remplacer les boucles traditionnelles pour des tâches spécifiques. Explorez forEach, for-of, map, filter et reduce. Votre défi : Refactorez l'exemple des notes des étudiants en utilisant au moins trois méthodes de tableau différentes. Remarquez à quel point le code devient plus clair et plus lisible avec la syntaxe moderne de JavaScript. ## Quiz post-cours Quiz post-cours ## Revue & Auto-étude Les tableaux en JavaScript possèdent de nombreuses méthodes qui leur sont associées et qui sont extrêmement utiles pour la manipulation des données. Informez-vous sur ces méthodes et essayez-en certaines (comme push, pop, slice et splice) sur un tableau que vous aurez créé. ## Devoir Parcourir un tableau --- ## 📊 Résumé de votre boîte à outils Tableaux & Boucles --- ## 🚀 Votre calendrier de maîtrise des Tableaux & Boucles ### ⚡ Ce que vous pouvez faire dans les 5 prochaines minutes - [ ] Créer un tableau de vos films préférés et accéder à des éléments spécifiques - [ ] Écrire une boucle for qui compte de 1 à 10 - [ ] Essayer le défi des méthodes modernes de tableau proposé dans la leçon - [ ] S'exercer à l'indexation des tableaux dans la console de votre navigateur ### 🎯 Ce que vous pouvez accomplir cette heure - [ ] Terminer le quiz post-cours et réviser les concepts difficiles - [ ] Construire l'analyseur complet de notes issu du défi GitHub Copilot - [ ] Créer un panier d'achat simple qui ajoute et supprime des articles - [ ] S'exercer à convertir différents types de boucles - [ ] Expérimenter avec des méthodes de tableau comme push, pop, slice et splice ### 📅 Votre parcours de traitement des données sur une semaine - [ ] Terminer le devoir "Parcourir un tableau" avec des améliorations créatives - [ ] Créer une application de liste de tâches utilisant des tableaux et des boucles - [ ] Créer un calculateur de statistiques simple pour des données numériques - [ ] S'exercer avec les méthodes de tableau MDN - [ ] Construire une galerie photo ou une interface de playlist musicale - [ ] Explorer la programmation fonctionnelle avec map, filter et reduce ### 🌟 Votre transformation sur un mois - [ ] Maîtriser les opérations avancées sur les tableaux et l'optimisation des performances - [ ] Construire un tableau de bord complet de visualisation de données - [ ] Contribuer à des projets open source impliquant le traitement des données - [ ] Enseigner à d'autres les tableaux et boucles avec des exemples pratiques - [ ] Créer une bibliothèque personnelle de fonctions réutilisables pour le traitement des données - [ ] Explorer des algorithmes et structures de données basés sur les tableaux ### 🏆 Bilan final du champion du traitement des données Célébrez votre maîtrise des tableaux et boucles : - Quelle est l'opération sur tableaux la plus utile que vous ayez apprise pour des applications réelles ? - Quel type de boucle vous semble le plus naturel et pourquoi ? - Comment la compréhension des tableaux et boucles a-t-elle changé votre approche de l'organisation des données ? - Quelle tâche complexe de traitement des données souhaitez-vous aborder ensuite ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Avertissement : Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforçons d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source officielle. Pour les informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

מבוא ל-JavaScript

JavaScript היא שפת האינטרנט. בארבעה שיעורים אלו תלמדו את היסודות שלה. ### נושאים 1. משתנים וסוגי נתונים 2. פונקציות ושיטות 3. קבלת החלטות עם JavaScript 4. מערכים ולולאות ### קרדיטים השיעורים נכתבו באהבה ♥️ על ידי Jasmine Greenaway, Christopher Harrison ו-Chris Noring --- כתב ויתור: מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לאי-הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.

javascript

יסודות JavaScript: סוגי נתונים

סוגי נתונים הם אחד המושגים הבסיסיים ביותר ב-JavaScript שתיתקלו בהם בכל תוכנית שתכתבו. חשבו על סוגי נתונים כמו מערכת תיוק שהשתמשו בה ספרנים עתיקים באלכסנדריה – היו להם מקומות ספציפיים למגילות המכילות שירה, מתמטיקה ורשומות היסטוריות. JavaScript מארגנת מידע בצורה דומה עם קטגוריות שונות לסוגי נתונים שונים. בשיעור זה, נחקור את סוגי הנתונים המרכזיים שמאפשרים ל-JavaScript לעבוד. תלמדו כיצד להתמודד עם מספרים, טקסט, ערכים של אמת/שקר, ותבינו מדוע בחירת הסוג הנכון חיונית לתוכניות שלכם. מושגים אלו עשויים להיראות מופשטים בהתחלה, אך עם תרגול הם יהפכו לטבע שני. הבנת סוגי נתונים תבהיר את כל השאר ב-JavaScript. בדיוק כמו שאדריכלים צריכים להבין את החומרים השונים לפני שהם בונים קתדרלה, יסודות אלו יתמכו בכל מה שתבנו בהמשך. ## שאלון לפני השיעור שאלון לפני השיעור שיעור זה מכסה את יסודות JavaScript, השפה שמספקת אינטראקטיביות באינטרנט. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") בואו נתחיל עם משתנים וסוגי הנתונים שמאכלסים אותם! ## משתנים משתנים הם אבני הבניין הבסיסיות בתכנות. כמו הצנצנות המסומנות שהשתמשו בהן אלכימאים מימי הביניים לאחסון חומרים שונים, משתנים מאפשרים לכם לאחסן מידע ולתת לו שם תיאורי כך שתוכלו להתייחס אליו מאוחר יותר. צריכים לזכור את גיל של מישהו? אחסנו אותו במשתנה בשם age. רוצים לעקוב אחרי שם משתמש? שמרו אותו במשתנה בשם userName. נתמקד בגישה המודרנית ליצירת משתנים ב-JavaScript. הטכניקות שתלמדו כאן מייצגות שנים של התפתחות השפה ופרקטיקות מומלצות שפותחו על ידי קהילת המתכנתים. יצירה והצהרה על משתנה כוללת את התחביר הבא [keyword] [name]. זה מורכב משני חלקים: - מילת מפתח. השתמשו ב-let עבור משתנים שיכולים להשתנות, או ב-const עבור ערכים שנשארים קבועים. - שם המשתנה, זהו שם תיאורי שאתם בוחרים בעצמכם. ✅ מילת המפתח let הוצגה ב-ES6 ומעניקה למשתנה שלכם מה שנקרא _block scope_. מומלץ להשתמש ב-let או const במקום מילת המפתח הישנה var. נעמיק בנושא block scopes בחלקים הבאים. ### משימה - עבודה עם משתנים 1. הצהירו על משתנה. בואו נתחיל ביצירת המשתנה הראשון שלנו: ```javascript let myVariable; ``` מה זה משיג: - זה אומר ל-JavaScript ליצור מקום אחסון בשם myVariable - JavaScript מקצה מקום בזיכרון עבור משתנה זה - למשתנה כרגע אין ערך (undefined) 2. תנו לו ערך. עכשיו נשים משהו במשתנה שלנו: ```javascript myVariable = 123; ``` איך עובד ההקצאה: - האופרטור = מקצה את הערך 123 למשתנה שלנו - המשתנה עכשיו מכיל את הערך הזה במקום להיות undefined - תוכלו להתייחס לערך הזה בכל הקוד שלכם באמצעות myVariable > הערה: השימוש ב-= בשיעור זה אומר שאנחנו משתמשים ב"אופרטור הקצאה", המשמש להקצות ערך למשתנה. זה לא מציין שוויון. 3. עשו זאת בצורה חכמה. למעשה, בואו נשלב את שני השלבים: ```javascript let myVariable = 123; ``` גישה זו יעילה יותר: - אתם מצהירים על המשתנה ומקצים ערך במשפט אחד - זו הפרקטיקה הסטנדרטית בקרב מתכנתים - זה מקצר את אורך הקוד תוך שמירה על בהירות 4. שנו את דעתכם. מה אם נרצה לאחסן מספר אחר? ```javascript myVariable = 321; ``` הבנת הקצאה מחדש: - המשתנה עכשיו מכיל 321 במקום 123 - הערך הקודם מוחלף – משתנים מאחסנים רק ערך אחד בכל פעם - תכונה זו של שינוי היא מאפיין מרכזי של משתנים שהוצהרו עם let ✅ נסו זאת! תוכלו לכתוב JavaScript ישירות בדפדפן שלכם. פתחו חלון דפדפן ועברו לכלי המפתחים. בקונסולה תמצאו שורת פקודה; הקלידו let myVariable = 123, לחצו על Enter, ואז הקלידו myVariable. מה קורה? שימו לב, תלמדו יותר על מושגים אלו בשיעורים הבאים. ### 🧠 בדיקת שליטה במשתנים: להרגיש בנוח בואו נראה איך אתם מרגישים לגבי משתנים: - האם תוכלו להסביר את ההבדל בין הצהרה על משתנה לבין הקצאת ערך למשתנה? - מה קורה אם תנסו להשתמש במשתנה לפני שהצהרתם עליו? - מתי תבחרו ב-let במקום ב-const עבור משתנה? ## קבועים לפעמים אתם צריכים לאחסן מידע שלא אמור להשתנות במהלך ביצוע התוכנית. חשבו על קבועים כמו העקרונות המתמטיים שאוקלידס קבע ביוון העתיקה – ברגע שהוכחו ותועדו, הם נשארו קבועים לעיון עתידי. קבועים עובדים באופן דומה למשתנים, אך עם הגבלה חשובה: ברגע שהקצתם להם ערך, לא ניתן לשנות אותו. תכונה זו של אי-שינוי עוזרת למנוע שינויים מקריים בערכים קריטיים בתוכנית שלכם. הצהרה ואתחול של קבוע פועלים לפי אותם עקרונות כמו משתנה, עם יוצא דופן של מילת המפתח const. קבועים בדרך כלל מוכרזים באותיות גדולות. מה הקוד הזה עושה: - יוצר קבוע בשם MY_VARIABLE עם הערך 123 - משתמש בקונבנציה של שמות באותיות גדולות עבור קבועים - מונע כל שינוי עתידי בערך זה לקבועים יש שני כללים עיקריים: - חובה לתת להם ערך מיד – לא ניתן להצהיר על קבועים ריקים! - לא ניתן לשנות את הערך שלהם – JavaScript תזרוק שגיאה אם תנסו. בואו נראה למה הכוונה: ערך פשוט - הדבר הבא אינו מותר: ```javascript const PI = 3; PI = 4; // לא מותר ``` מה שצריך לזכור: - ניסיונות להקצות מחדש לקבוע יגרמו לשגיאה - מגן על ערכים חשובים משינויים מקריים - מבטיח שהערך יישאר עקבי לאורך כל התוכנית הפניה לאובייקט מוגנת - הדבר הבא אינו מותר: ```javascript const obj = { a: 3 }; obj = { b: 5 } // לא מותר ``` הבנת מושגים אלו: - מונע החלפת האובייקט כולו באובייקט חדש - מגן על ההפניה לאובייקט המקורי - שומר על זהות האובייקט בזיכרון ערך האובייקט אינו מוגן - הדבר הבא מותר: ```javascript const obj = { a: 3 }; obj.a = 5; // מותר ``` פירוט מה קורה כאן: - משנה את ערך המאפיין בתוך האובייקט - שומר על אותה הפניה לאובייקט - מדגים שתוכן האובייקט יכול להשתנות בזמן שההפניה נשארת קבועה > שימו לב, const אומר שההפניה מוגנת מהקצאה מחדש. הערך עצמו אינו _בלתי ניתן לשינוי_ ויכול להשתנות, במיוחד אם מדובר במבנה מורכב כמו אובייקט. ## סוגי נתונים JavaScript מארגנת מידע לקטגוריות שונות הנקראות סוגי נתונים. מושג זה דומה לאופן שבו מלומדים עתיקים קטלגו ידע – אריסטו הבחין בין סוגי חשיבה שונים, מתוך הבנה שעקרונות לוגיים לא יכולים להיות מיושמים באופן אחיד על שירה, מתמטיקה ופילוסופיה טבעית. סוגי נתונים חשובים כי פעולות שונות פועלות עם סוגי מידע שונים. בדיוק כמו שלא ניתן לבצע חישובים על שם של אדם או לסדר לפי סדר אלפביתי משוואה מתמטית, JavaScript דורשת את סוג הנתונים המתאים לכל פעולה. הבנת זה מונעת שגיאות והופכת את הקוד שלכם לאמין יותר. משתנים יכולים לאחסן סוגים רבים ושונים של ערכים, כמו מספרים וטקסט. סוגי הערכים השונים הללו ידועים כ-סוגי נתונים. סוגי נתונים הם חלק חשוב בפיתוח תוכנה כי הם עוזרים למפתחים לקבל החלטות על איך הקוד צריך להיכתב ואיך התוכנה צריכה לפעול. יתר על כן, לחלק מסוגי הנתונים יש תכונות ייחודיות שעוזרות לשנות או לחלץ מידע נוסף מערך. ✅ סוגי נתונים נקראים גם פרימיטיבים של JavaScript, מכיוון שהם סוגי הנתונים ברמה הנמוכה ביותר שמספקת השפה. ישנם 7 סוגי נתונים פרימיטיביים: string, number, bigint, boolean, undefined, null ו-symbol. קחו רגע לדמיין מה כל אחד מהפרימיטיבים הללו עשוי לייצג. מה זה zebra? מה לגבי 0? true? ### מספרים מספרים הם סוג הנתונים הפשוט ביותר ב-JavaScript. בין אם אתם עובדים עם מספרים שלמים כמו 42, מספרים עשרוניים כמו 3.14, או מספרים שליליים כמו -5, JavaScript מטפלת בהם באופן אחיד. זוכרים את המשתנה שלנו מקודם? ה-123 שאחסנו היה למעשה סוג נתונים של מספר: מאפיינים מרכזיים: - JavaScript מזהה באופן אוטומטי ערכים מספריים - ניתן לבצע פעולות מתמטיות עם משתנים אלו - אין צורך בהצהרת סוג מפורשת משתנים יכולים לאחסן את כל סוגי המספרים, כולל עשרוניים או מספרים שליליים. מספרים יכולים גם לשמש עם אופרטורים אריתמטיים, מכוסים ב-החלק הבא. ### אופרטורים אריתמטיים אופרטורים אריתמטיים מאפשרים לכם לבצע חישובים מתמטיים ב-JavaScript. אופרטורים אלו פועלים כפי שהייתם מצפים מהמתמטיקה המסורתית: פלוס לחיבור, מינוס לחיסור, וכן הלאה. ישנם מספר סוגי אופרטורים לשימוש בעת ביצוע פונקציות אריתמטיות, וחלקם מפורטים כאן: ✅ נסו זאת! נסו פעולה אריתמטית בקונסולה של הדפדפן שלכם. האם התוצאות מפתיעות אתכם? ### 🧮 בדיקת מיומנויות מתמטיות: חישוב בביטחון בדקו את הבנתכם באריתמטיקה: - מה ההבדל בין / (חילוק) ל-% (שארית)? - האם תוכלו לנבא מה שווה 10 % 3? (רמז: זה לא 3.33...) - מדוע אופרטור השארית עשוי להיות שימושי בתכנות? ### מחרוזות ב-JavaScript, נתונים טקסטואליים מיוצגים כמחרוזות. המונח "מחרוזת" מגיע מהמושג של תווים המחוברים יחד ברצף, בדומה לאופן שבו סופרים במנזרים מימי הביניים חיברו אותיות ליצירת מילים ומשפטים בכתבי היד שלהם. מחרוזות הן בסיסיות לפיתוח אתרים. כל פיסת טקסט שמוצגת באתר – שמות משתמשים, תוויות כפתורים, הודעות שגיאה, תוכן – מטופלת כנתוני מחרוזת. הבנת מחרוזות חיונית ליצירת ממשקי משתמש פונקציונליים. מחרוזות הן קבוצות של תווים שנמצאות בין גרשיים יחידים או כפולים. הבנת מושגים אלו: - משתמש בגרשיים יחידים ' או כפולים " כדי להגדיר מחרוזות - מאחסן נתוני טקסט שיכולים לכלול אותיות, מספרים וסמלים - מקצה ערכי מחרוזת למשתנים לשימוש מאוחר יותר - דורש גרשיים כדי להבדיל טקסט משמות משתנים זכרו להשתמש בגרשיים כשכותבים מחרוזת, אחרת JavaScript תניח שזה שם משתנה. ### עיצוב מחרוזות מניפולציה של מחרוזות מאפשרת לכם לשלב אלמנטים טקסטואליים, לשלב משתנים וליצור תוכן דינמי שמגיב למצב התוכנית. טכניקה זו מאפשרת לכם לבנות טקסט בצורה תוכניתית. לעיתים קרובות תצטרכו לחבר מספר מחרוזות יחד – תהליך זה נקרא שרשור. כדי לשרשר שני מחרוזות או יותר, או לחבר אותן יחד, השתמשו באופרטור +. שלב אחר שלב, הנה מה שקורה: - משלב מספר מחרוזות באמצעות אופרטור + - מחבר מחרוזות ישירות ללא רווחים בדוגמה הראשונה - מוסיף רווחים " " בין המחרוזות לקריאות טובה יותר - מכניס סימני פיסוק כמו פסיקים ליצירת עיצוב נכון ✅ למה 1 + 1 = 2 ב-JavaScript, אבל '1' + '1' = 11? תחשבו על זה. ומה לגבי '1' + 1? תבניות מחרוזת הן דרך נוספת לעצב מחרוזות, אך במקום מרכאות, משתמשים ב-backtick. כל דבר שאינו טקסט רגיל חייב להיות בתוך תבניות ${ }. זה כולל כל משתנה שעשוי להיות מחרוזת. בואו נבין כל חלק: - משתמשים ב-backticks ` `` במקום מרכאות רגילות ליצירת תבניות מחרוזת - משתמשים במשתנים ישירות באמצעות תחביר התבנית ${} - שומרים על רווחים ועיצוב בדיוק כפי שנכתב - מספקים דרך נקייה יותר ליצירת מחרוזות מורכבות עם משתנים ניתן להשיג את מטרות העיצוב שלכם עם כל אחת מהשיטות, אך תבניות מחרוזת ישמרו על רווחים ושבירות שורה. ✅ מתי תשתמשו בתבנית מחרוזת לעומת מחרוזת רגילה? ### 🔤 בדיקת שליטה במחרוזות: ביטחון במניפולציות טקסט העריכו את כישורי המחרוזת שלכם: - האם אתם יכולים להסביר למה '1' + '1' שווה ל-'11' ולא ל-2? - איזו שיטה לעבודה עם מחרוזות נראית לכם קריאה יותר: שרשור או תבניות מחרוזת? - מה קורה אם שוכחים לשים מרכאות סביב מחרוזת? ### בוליאנים בוליאנים מייצגים את הצורה הפשוטה ביותר של נתונים: הם יכולים להכיל רק אחד משני ערכים – true או false. מערכת לוגיקה בינארית זו נובעת מעבודתו של ג'ורג' בול, מתמטיקאי מהמאה ה-19 שפיתח את האלגברה הבוליאנית. למרות פשטותם, בוליאנים הם חיוניים ללוגיקת תוכנה. הם מאפשרים לקוד שלכם לקבל החלטות על סמך תנאים – האם משתמש מחובר, אם כפתור נלחץ, או אם קריטריונים מסוימים מתקיימים. בוליאנים יכולים להיות רק שני ערכים: true או false. בוליאנים יכולים לעזור להחליט אילו שורות קוד ירוצו כאשר תנאים מסוימים מתקיימים. במקרים רבים, אופרטורים מסייעים בקביעת הערך של בוליאן ותבחינו לעיתים קרובות במשתנים שמאותחלים או שערכיהם מתעדכנים באמצעות אופרטור. בדוגמה למעלה, עשינו: - יצרנו משתנה שמאחסן את הערך הבוליאני true - הדגמנו איך לאחסן את הערך הבוליאני false - השתמשנו במילות המפתח המדויקות true ו-false (ללא מרכאות) - הכנו את המשתנים הללו לשימוש במשפטי תנאי ✅ משתנה יכול להיחשב 'truthy' אם הוא מוערך כבוליאן true. מעניין, ב-JavaScript, כל הערכים הם truthy אלא אם כן הוגדרו כ-falsy. ### 🎯 בדיקת לוגיקה בוליאנית: כישורי קבלת החלטות בדקו את הבנתכם בבוליאנים: - למה לדעתכם ב-JavaScript יש ערכים "truthy" ו-"falsy" מעבר ל-true ו-false? - האם אתם יכולים לנחש איזה מהבאים הוא falsy: 0, "0", [], "false"? - איך בוליאנים יכולים להיות שימושיים בשליטה על זרימת התוכנית? --- ## 📊 סיכום ערכת הכלים של סוגי הנתונים שלכם ## אתגר סוכן GitHub Copilot 🚀 השתמשו במצב סוכן כדי להשלים את האתגר הבא: תיאור: צרו מנהל מידע אישי שמדגים את כל סוגי הנתונים שלמדתם בשיעור זה תוך טיפול בתרחישי נתונים בעולם האמיתי. הנחיה: בנו תוכנית JavaScript שיוצרת אובייקט פרופיל משתמש המכיל: שם של אדם (מחרוזת), גיל (מספר), סטטוס סטודנט (בוליאני), צבעים אהובים כמערך, ואובייקט כתובת עם מאפייני רחוב, עיר ומיקוד. כללו פונקציות להצגת מידע הפרופיל ולעדכון שדות בודדים. ודאו שאתם מדגימים שרשור מחרוזות, תבניות מחרוזת, פעולות אריתמטיות עם הגיל, ולוגיקה בוליאנית עבור סטטוס הסטודנט. למדו עוד על מצב סוכן כאן. ## 🚀 אתגר ל-JavaScript יש כמה התנהגויות שיכולות להפתיע מפתחים. הנה דוגמה קלאסית לחקור: נסו להקליד זאת בקונסול של הדפדפן שלכם: let age = 1; let Age = 2; age == Age ושימו לב לתוצאה. זה מחזיר false – האם אתם יכולים להבין למה? זהו אחד מהרבה התנהגויות של JavaScript שכדאי להבין. היכרות עם הניואנסים הללו תעזור לכם לכתוב קוד אמין יותר ולפתור בעיות בצורה יעילה יותר. ## חידון לאחר השיעור חידון לאחר השיעור ## סקירה ולמידה עצמית עיינו ב-רשימת תרגילי JavaScript הזו ונסו אחד מהם. מה למדתם? ## משימה תרגול סוגי נתונים ## 🚀 ציר הזמן לשליטה בסוגי נתונים ב-JavaScript ### ⚡ מה תוכלו לעשות ב-5 הדקות הבאות - [ ] פתחו את קונסול הדפדפן וצרו 3 משתנים עם סוגי נתונים שונים - [ ] נסו את האתגר: let age = 1; let Age = 2; age == Age וגלו למה זה false - [ ] תרגלו שרשור מחרוזות עם השם שלכם והמספר האהוב עליכם - [ ] בדקו מה קורה כשמוסיפים מספר למחרוזת ### 🎯 מה תוכלו להשיג בשעה הקרובה - [ ] השלימו את החידון שלאחר השיעור וסקרו מושגים מבלבלים - [ ] צרו מחשבון קטן שמוסיף, מחסר, מכפיל ומחלק שני מספרים - [ ] בנו מעצב שמות פשוט באמצעות תבניות מחרוזת - [ ] חקרו את ההבדלים בין אופרטורים == ו-=== - [ ] תרגלו המרה בין סוגי נתונים שונים ### 📅 הבסיס שלכם ל-JavaScript בשבוע הקרוב - [ ] השלימו את המשימה בביטחון ויצירתיות - [ ] צרו אובייקט פרופיל אישי תוך שימוש בכל סוגי הנתונים שנלמדו - [ ] תרגלו עם תרגילי JavaScript מ-CSS-Tricks - [ ] בנו מאמת טפסים פשוט באמצעות לוגיקה בוליאנית - [ ] נסו לעבוד עם מערכים ואובייקטים (הצצה לשיעורים הבאים) - [ ] הצטרפו לקהילת JavaScript ושאלו שאלות על סוגי נתונים ### 🌟 הטרנספורמציה שלכם בחודש הקרוב - [ ] שלבו את הידע על סוגי נתונים בפרויקטים תכנותיים גדולים יותר - [ ] הבינו מתי ולמה להשתמש בכל סוג נתונים ביישומים אמיתיים - [ ] עזרו למתחילים אחרים להבין את יסודות JavaScript - [ ] בנו אפליקציה קטנה שמנהלת סוגי נתונים שונים של משתמשים - [ ] חקרו מושגים מתקדמים כמו coercion ו-strict equality - [ ] תרמו לפרויקטים בקוד פתוח ב-JavaScript עם שיפורי תיעוד ### 🧠 בדיקת שליטה סופית בסוגי נתונים חגגו את הבסיס שלכם ב-JavaScript: - איזה סוג נתונים הפתיע אתכם הכי הרבה מבחינת ההתנהגות שלו? - עד כמה אתם מרגישים בנוח להסביר משתנים לעומת קבועים לחבר? - מה הדבר הכי מעניין שגיליתם על מערכת סוגי הנתונים של JavaScript? - איזו אפליקציה בעולם האמיתי אתם יכולים לדמיין לבנות עם היסודות הללו? --- הצהרת אחריות: מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. איננו אחראים לאי הבנות או פירושים שגויים הנובעים משימוש בתרגום זה.

javascript

יסודות JavaScript: שיטות ופונקציות

## שאלון לפני השיעור שאלון לפני השיעור כתיבת אותו קוד שוב ושוב היא אחת התסכולים הנפוצים ביותר בתכנות. פונקציות פותרות את הבעיה הזו בכך שהן מאפשרות לך לארוז קוד לבלוקים שניתן להשתמש בהם מחדש. חשבו על פונקציות כמו החלקים הסטנדרטיים שהפכו את פס הייצור של הנרי פורד למהפכני – ברגע שיצרתם רכיב אמין, תוכלו להשתמש בו בכל מקום שצריך בלי לבנות מחדש מאפס. פונקציות מאפשרות לך לאגד חלקי קוד כך שתוכל להשתמש בהם שוב ושוב בתוכנית שלך. במקום להעתיק ולהדביק את אותה לוגיקה בכל מקום, תוכל ליצור פונקציה פעם אחת ולהפעיל אותה בכל פעם שתצטרך. גישה זו שומרת על הקוד שלך מאורגן ומקלה מאוד על עדכונים. בשיעור זה תלמדו כיצד ליצור פונקציות משלכם, להעביר להן מידע ולקבל תוצאות שימושיות בחזרה. תגלו את ההבדל בין פונקציות לשיטות, תלמדו גישות תחביר מודרניות ותראו כיצד פונקציות יכולות לעבוד עם פונקציות אחרות. נבנה את הרעיונות הללו צעד אחר צעד. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## פונקציות פונקציה היא בלוק קוד עצמאי שמבצע משימה ספציפית. היא מכילה לוגיקה שניתן להפעיל בכל פעם שצריך. במקום לכתוב את אותו קוד מספר פעמים בתוכנית שלך, תוכל לארוז אותו בפונקציה ולהפעיל אותה בכל פעם שתצטרך. גישה זו שומרת על הקוד שלך נקי ומקלה מאוד על עדכונים. חשבו על האתגר של תחזוקה אם הייתם צריכים לשנות לוגיקה שהייתה מפוזרת ב-20 מקומות שונים בקוד שלכם. מתן שמות תיאוריים לפונקציות שלכם הוא חיוני. פונקציה עם שם טוב מעבירה את מטרתה בצורה ברורה – כשאתם רואים cancelTimer(), אתם מיד מבינים מה היא עושה, בדיוק כמו שכפתור עם תווית ברורה אומר לכם בדיוק מה יקרה כשתלחצו עליו. ## יצירה והפעלה של פונקציה בואו נבחן כיצד ליצור פונקציה. התחביר עוקב אחר תבנית עקבית: בואו נפרק את זה: - מילת המפתח function אומרת ל-JavaScript "היי, אני יוצר פונקציה!" - nameOfFunction הוא המקום שבו אתם נותנים לפונקציה שלכם שם תיאורי - הסוגריים () הם המקום שבו תוכלו להוסיף פרמטרים (נגיע לזה בקרוב) - הסוגריים המסולסלים {} מכילים את הקוד בפועל שרץ כשאתם מפעילים את הפונקציה בואו ניצור פונקציה פשוטה לברכת שלום כדי לראות את זה בפעולה: הפונקציה הזו מדפיסה "Hello, world!" לקונסולה. ברגע שהגדרתם אותה, תוכלו להשתמש בה כמה פעמים שתרצו. כדי להפעיל (או "לקרוא") לפונקציה שלכם, כתבו את שמה ואחריו סוגריים. JavaScript מאפשרת לכם להגדיר את הפונקציה לפני או אחרי שאתם מפעילים אותה – מנוע ה-JavaScript יטפל בסדר ההפעלה. כשאתם מריצים את השורה הזו, היא מפעילה את כל הקוד בתוך הפונקציה displayGreeting, ומציגה "Hello, world!" בקונסולה של הדפדפן שלכם. תוכלו לקרוא לפונקציה הזו שוב ושוב. ### 🧠 בדיקת יסודות הפונקציה: בניית הפונקציות הראשונות שלכם בואו נראה איך אתם מרגישים לגבי פונקציות בסיסיות: - האם תוכלו להסביר מדוע אנו משתמשים בסוגריים מסולסלים {} בהגדרות פונקציה? - מה קורה אם אתם כותבים displayGreeting בלי הסוגריים? - מדוע ייתכן שתרצו לקרוא לאותה פונקציה מספר פעמים? ### שיטות עבודה מומלצות לפונקציות הנה כמה טיפים שיעזרו לכם לכתוב פונקציות מעולות: - תנו לפונקציות שלכם שמות ברורים ותיאוריים – העתיד שלכם יודה לכם! - השתמשו ב-camelCasing לשמות מרובי מילים (כמו calculateTotal במקום calculate_total) - שמרו על כל פונקציה ממוקדת בביצוע דבר אחד בצורה טובה ## העברת מידע לפונקציה הפונקציה שלנו displayGreeting מוגבלת – היא יכולה להציג רק "Hello, world!" לכולם. פרמטרים מאפשרים לנו להפוך את הפונקציות לגמישות ושימושיות יותר. פרמטרים פועלים כמו משתנים שמאפשרים לכם להכניס ערכים שונים בכל פעם שאתם משתמשים בפונקציה. כך, אותה פונקציה יכולה לעבוד עם מידע שונה בכל קריאה. אתם מציינים פרמטרים בתוך הסוגריים כשאתם מגדירים את הפונקציה, ומפרידים בין פרמטרים מרובים באמצעות פסיקים: כל פרמטר פועל כמו משתנה – כשמישהו קורא לפונקציה שלכם, הוא יספק ערכים אמיתיים שיתווספו למקומות הללו. בואו נעדכן את פונקציית הברכה שלנו כדי לקבל את שמו של מישהו: שימו לב איך אנחנו משתמשים בתווי חזרה (` `) וב-${}` כדי להכניס את השם ישירות להודעה שלנו – זה נקרא תבנית טקסט, וזה דרך מאוד שימושית לבנות מחרוזות עם משתנים משולבים. עכשיו כשאנחנו קוראים לפונקציה שלנו, אנחנו יכולים להעביר כל שם: JavaScript לוקחת את המחרוזת 'Christopher', מקצה אותה לפרמטר name, ויוצרת את ההודעה האישית "Hello, Christopher!" ## ערכי ברירת מחדל מה אם נרצה להפוך כמה פרמטרים לאופציונליים? כאן נכנסים לתמונה ערכי ברירת מחדל! נניח שאנחנו רוצים שאנשים יוכלו להתאים אישית את מילת הברכה, אבל אם הם לא מציינים אחת, נשתמש ב-"Hello" כברירת מחדל. תוכלו להגדיר ערכי ברירת מחדל באמצעות סימן השווה, בדיוק כמו הגדרת משתנה: כאן, name עדיין נדרש, אבל ל-salutation יש ערך גיבוי של 'Hello' אם אף אחד לא מספק ברכה אחרת. עכשיו אנחנו יכולים לקרוא לפונקציה הזו בשתי דרכים שונות: בקריאה הראשונה, JavaScript משתמשת ב-"Hello" כברירת מחדל מכיוון שלא ציינו ברכה. בקריאה השנייה, היא משתמשת ב-"Hi" המותאם שלנו במקום. גמישות זו הופכת פונקציות למתאימות לתרחישים שונים. ### 🎛️ בדיקת שליטה בפרמטרים: הפיכת פונקציות לגמישות בדקו את הבנתכם בפרמטרים: - מה ההבדל בין פרמטר לארגומנט? - מדוע ערכי ברירת מחדל שימושיים בתכנות בעולם האמיתי? - האם תוכלו לנבא מה קורה אם תעבירו יותר ארגומנטים מפרמטרים? ## ערכי החזרה הפונקציות שלנו עד כה רק הדפיסו הודעות לקונסולה, אבל מה אם תרצו שפונקציה תחשב משהו ותיתן לכם את התוצאה בחזרה? כאן נכנסים לתמונה ערכי החזרה. במקום רק להציג משהו, פונקציה יכולה להחזיר לכם ערך שתוכלו לשמור במשתנה או להשתמש בו בחלקים אחרים של הקוד שלכם. כדי לשלוח ערך בחזרה, אתם משתמשים במילת המפתח return ואחריה כל מה שתרצו להחזיר: הנה משהו חשוב: כשפונקציה מגיעה להצהרת return, היא מיד מפסיקה לרוץ ושולחת את הערך הזה בחזרה למי שקרא לה. בואו נשנה את פונקציית הברכה שלנו כדי להחזיר את ההודעה במקום להדפיס אותה: עכשיו במקום להדפיס את הברכה, הפונקציה הזו יוצרת את ההודעה ומחזירה אותה אלינו. כדי להשתמש בערך המוחזר, אנחנו יכולים לשמור אותו במשתנה בדיוק כמו כל ערך אחר: עכשיו greetingMessage מכיל "Hello, Christopher" ואנחנו יכולים להשתמש בו בכל מקום בקוד שלנו – להציג אותו בדף אינטרנט, לכלול אותו באימייל או להעביר אותו לפונקציה אחרת. ### 🔄 בדיקת ערכי החזרה: קבלת תוצאות בחזרה העריכו את הבנתכם בערכי החזרה: - מה קורה לקוד אחרי הצהרת return בפונקציה? - מדוע החזרת ערכים לעיתים קרובות עדיפה על הדפסה לקונסולה? - האם פונקציה יכולה להחזיר סוגים שונים של ערכים (מחרוזת, מספר, בוליאני)? ## פונקציות כפרמטרים לפונקציות פונקציות יכולות לעבור כפרמטרים לפונקציות אחרות. למרות שהרעיון הזה עשוי להיראות מורכב בהתחלה, זו תכונה חזקה שמאפשרת דפוסי תכנות גמישים. דפוס זה נפוץ מאוד כשאתם רוצים לומר "כשמשהו קורה, עשו את הדבר הזה." לדוגמה, "כששעון העצר מסתיים, הריצו את הקוד הזה" או "כשמשתמש לוחץ על הכפתור, קראו לפונקציה הזו." בואו נסתכל על setTimeout, שהיא פונקציה מובנית שמחכה זמן מסוים ואז מריצה קוד. אנחנו צריכים לומר לה איזה קוד להריץ – מקרה שימוש מושלם להעברת פונקציה! נסו את הקוד הזה – אחרי 3 שניות, תראו הודעה: שימו לב איך אנחנו מעבירים את displayDone (בלי סוגריים) ל-setTimeout. אנחנו לא קוראים לפונקציה בעצמנו – אנחנו מוסרים אותה ל-setTimeout ואומרים "קראו לזה בעוד 3 שניות." ### פונקציות אנונימיות לפעמים אתם צריכים פונקציה רק למשהו אחד ולא רוצים לתת לה שם. חשבו על זה – אם אתם משתמשים בפונקציה רק פעם אחת, למה להעמיס על הקוד שלכם עם שם נוסף? JavaScript מאפשרת לכם ליצור פונקציות אנונימיות – פונקציות בלי שמות שתוכלו להגדיר בדיוק במקום שבו אתם צריכים אותן. הנה איך אנחנו יכולים לשכתב את דוגמת השעון שלנו באמצעות פונקציה אנונימית: זה משיג את אותה תוצאה, אבל הפונקציה מוגדרת ישירות בתוך קריאת setTimeout, מה שמבטל את הצורך בהצהרת פונקציה נפרדת. ### פונקציות חץ JavaScript מודרנית מציעה דרך אפילו קצרה יותר לכתוב פונקציות שנקראת פונקציות חץ. הן משתמשות ב-=> (שנראה כמו חץ – הבנתם?) והן מאוד פופולריות בקרב מפתחים. פונקציות חץ מאפשרות לכם לדלג על מילת המפתח function ולכתוב קוד יותר תמציתי. הנה דוגמת השעון שלנו באמצעות פונקציית חץ: ה-() הוא המקום שבו פרמטרים היו נכנסים (ריק במקרה הזה), ואז מגיע החץ =>, ולבסוף גוף הפונקציה בסוגריים מסולסלים. זה מספק את אותה פונקציונליות עם תחביר יותר תמציתי. ### מתי להשתמש בכל אסטרטגיה מתי כדאי להשתמש בכל גישה? הנחיה מעשית: אם תשתמשו בפונקציה מספר פעמים, תנו לה שם והגדירו אותה בנפרד. אם היא מיועדת לשימוש ספציפי אחד, שקלו פונקציה אנונימית. גם פונקציות חץ וגם תחביר מסורתי הם בחירות תקפות, אם כי פונקציות חץ נפוצות בקוד JavaScript מודרני. ### 🎨 בדיקת שליטה בסגנונות פונקציה: בחירת התחביר הנכון בדקו את הבנתכם בתחביר: - מתי ייתכן שתעדיפו פונקציות חץ על פני תחביר פונקציה מסורתי? - מה היתרון העיקרי של פונקציות אנונימיות? - האם תוכלו לחשוב על מצב שבו פונקציה עם שם עדיפה על פני פונקציה אנונימית? --- ## 🚀 אתגר האם תוכלו להסביר במשפט אחד את ההבדל בין פונקציות לשיטות? נסו! ## אתגר סוכן GitHub Copilot 🚀 השתמשו במצב סוכן כדי להשלים את האתגר הבא: תיאור: צרו ספריית כלי עזר של פונקציות מתמטיות שמדגימה מושגים שונים של פונקציות שנלמדו בשיעור זה, כולל פרמטרים, ערכי ברירת מחדל, ערכי החזרה ופונקציות חץ. הנחיה: צרו קובץ JavaScript בשם mathUtils.js שמכיל את הפונקציות הבאות: 1. פונקציה add שמקבלת שני פרמטרים ומחזירה את הסכום שלהם 2. פונקציה multiply עם ערכי פרמטר ברירת מחדל (הפרמטר השני ברירת מחדל ל-1) 3. פונקציית חץ square שמקבלת מספר ומחזירה את הריבוע שלו 4. פונקציה calculate שמקבלת פונקציה אחרת כפרמטר ושני מספרים, ואז מיישמת את הפונקציה על המספרים 5. הדגימו קריאה לכל פונקציה עם מקרי בדיקה מתאימים למדו עוד על מצב סוכן כאן. ## שאלון אחרי השיעור שאלון אחרי השיעור ## סקירה ולימוד עצמי שווה לקרוא עוד על פונקציות חץ, שכן הן משמשות יותר ויותר בקוד. תרגלו כתיבת פונקציה, ואז שכתבו אותה עם התחביר הזה. ## משימה Fun with Functions --- ## 🧰 סיכום ערכת הכלים של פונקציות JavaScript שלכם --- ## 🚀 ציר הזמן לשליטה בפונקציות JavaScript שלכם ### ⚡ מה תוכלו לעשות ב-5 הדקות הבאות - [ ] כתבו פונקציה פשוטה שמחזירה את המספר האהוב עליכם - [ ] צרו פונקציה עם שני פרמטרים שמוסיפה אותם יחד - [ ] נסה להמיר פונקציה מסורתית לסינטקס של פונקציית חץ - [ ] תרגל את האתגר: הסבר את ההבדל בין פונקציות לבין שיטות ### 🎯 מה ניתן להשיג בשעה זו - [ ] השלם את המבחן שלאחר השיעור וסקור מושגים מבלבלים - [ ] בנה את ספריית כלי המתמטיקה מאתגר GitHub Copilot - [ ] צור פונקציה שמשתמשת בפונקציה אחרת כפרמטר - [ ] תרגל כתיבת פונקציות עם פרמטרים ברירת מחדל - [ ] נסה להשתמש בתבניות טקסט (template literals) בערכי החזרה של פונקציות ### 📅 שליטה בפונקציות לאורך השבוע - [ ] השלם את המשימה "כיף עם פונקציות" עם יצירתיות - [ ] בצע רפקטור לקוד שחוזר על עצמו לפונקציות שניתן לעשות בהן שימוש חוזר - [ ] בנה מחשבון קטן באמצעות פונקציות בלבד (ללא משתנים גלובליים) - [ ] תרגל פונקציות חץ עם שיטות מערך כמו map() ו-filter() - [ ] צור אוסף של פונקציות עזר למשימות נפוצות - [ ] למד על פונקציות מסדר גבוה ועל מושגים בתכנות פונקציונלי ### 🌟 השינוי שלך לאורך החודש - [ ] שלוט במושגים מתקדמים בפונקציות כמו סגירות וטווחים - [ ] בנה פרויקט שמשתמש רבות בהרכבת פונקציות - [ ] תרום לקוד פתוח על ידי שיפור תיעוד פונקציות - [ ] למד מישהו אחר על פונקציות וסגנונות סינטקס שונים - [ ] חקור פרדיגמות תכנות פונקציונלי ב-JavaScript - [ ] צור ספרייה אישית של פונקציות לשימוש חוזר בפרויקטים עתידיים ### 🏆 בדיקת אלוף הפונקציות הסופית חגוג את השליטה שלך בפונקציות: - מהי הפונקציה הכי שימושית שיצרת עד כה? - איך לימוד על פונקציות שינה את הדרך שבה אתה חושב על ארגון קוד? - איזה סינטקס של פונקציות אתה מעדיף ולמה? - איזו בעיה בעולם האמיתי היית פותר על ידי כתיבת פונקציה? --- הצהרת אחריות: מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.

javascript

יסודות JavaScript: קבלת החלטות

האם אי פעם תהיתם איך אפליקציות מקבלות החלטות חכמות? כמו איך מערכת ניווט בוחרת את המסלול המהיר ביותר, או איך תרמוסטט מחליט מתי להפעיל את החימום? זהו הרעיון הבסיסי של קבלת החלטות בתכנות. כמו שמנוע האנליטי של צ'ארלס בבאג' תוכנן לבצע רצפים שונים של פעולות בהתבסס על תנאים, תוכניות JavaScript מודרניות צריכות לקבל החלטות בהתבסס על נסיבות משתנות. היכולת הזו להתפצל ולקבל החלטות היא מה שהופך קוד סטטי לאפליקציות רספונסיביות ואינטליגנטיות. בשיעור הזה תלמדו איך ליישם לוגיקה מותנית בתוכניות שלכם. נחקור הצהרות מותנות, אופרטורים להשוואה וביטויים לוגיים שמאפשרים לקוד שלכם להעריך מצבים ולהגיב בהתאם. ## שאלון לפני השיעור שאלון לפני השיעור היכולת לקבל החלטות ולשלוט בזרימת התוכנית היא היבט בסיסי בתכנות. חלק זה מכסה איך לשלוט במסלול הביצוע של תוכניות JavaScript שלכם באמצעות ערכי בוליאן ולוגיקה מותנית. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## סקירה קצרה על בוליאנים לפני שנחקור את נושא קבלת ההחלטות, בואו נחזור לערכי בוליאן מהשיעור הקודם שלנו. ערכים אלו, שנקראים על שמו של המתמטיקאי ג'ורג' בול, מייצגים מצבים בינאריים – או true או false. אין עמימות, אין שטח ביניים. ערכים בינאריים אלו מהווים את הבסיס לכל הלוגיקה החישובית. כל החלטה שהתוכנית שלכם מקבלת בסופו של דבר מתמצה להערכה בוליאנית. יצירת משתנים בוליאניים היא פשוטה: זה יוצר שני משתנים עם ערכים בוליאניים מפורשים. ✅ בוליאנים נקראים על שמו של המתמטיקאי, הפילוסוף והלוגיקן האנגלי ג'ורג' בול (1815–1864). ## אופרטורים להשוואה ובוליאנים בפועל, לעיתים רחוקות תגדירו ערכים בוליאניים באופן ידני. במקום זאת, תייצרו אותם על ידי הערכת תנאים: "האם המספר הזה גדול מהאחר?" או "האם הערכים האלו שווים?" אופרטורים להשוואה מאפשרים את ההערכות הללו. הם משווים ערכים ומחזירים תוצאות בוליאניות בהתבסס על היחס בין האופרנדים. ✅ בדקו את הידע שלכם על ידי כתיבת כמה השוואות בקונסול של הדפדפן שלכם. האם הנתונים שהוחזרו מפתיעים אתכם? ### 🧠 בדיקת שליטה בהשוואות: הבנת לוגיקה בוליאנית בדקו את הבנתכם בהשוואות: - מדוע לדעתכם === (שוויון מוחלט) בדרך כלל מועדף על פני == (שוויון רופף)? - האם תוכלו לנבא מה 5 === '5' מחזיר? ומה לגבי 5 == '5'? - מה ההבדל בין !== ל-!=? ## הצהרת If הצהרת if היא כמו לשאול שאלה בקוד שלכם. "אם התנאי הזה נכון, אז תעשה את הדבר הזה." זה כנראה הכלי החשוב ביותר שתשתמשו בו לקבלת החלטות ב-JavaScript. כך זה עובד: התנאי נכנס בתוך הסוגריים, ואם הוא true, JavaScript מריצה את הקוד בתוך הסוגריים המסולסלים. אם הוא false, JavaScript פשוט מדלגת על כל הבלוק הזה. לעיתים קרובות תשתמשו באופרטורים להשוואה כדי ליצור את התנאים הללו. בואו נראה דוגמה מעשית: מכיוון ש-1000 >= 800 מוערך כ-true, הקוד בתוך הבלוק מבוצע ומציג "קונה מחשב נייד חדש!" בקונסול. ## הצהרת If..Else אבל מה אם אתם רוצים שהתוכנית שלכם תעשה משהו אחר כשהתנאי הוא false? כאן נכנס ה-else – זה כמו תוכנית גיבוי. הצהרת else נותנת לכם דרך לומר "אם התנאי הזה לא נכון, תעשה את הדבר האחר הזה במקום." עכשיו, מכיוון ש-500 >= 800 הוא false, JavaScript מדלגת על הבלוק הראשון ומריצה את בלוק ה-else במקום. תראו "לא יכול להרשות לעצמי מחשב נייד חדש, עדיין!" בקונסול. ✅ בדקו את הבנתכם בקוד הזה ובקוד הבא על ידי הרצתם בקונסול של הדפדפן. שנו את הערכים של המשתנים currentMoney ו-laptopPrice כדי לשנות את הפלט של console.log(). ### 🎯 בדיקת לוגיקת If-Else: מסלולי הסתעפות העריכו את הבנתכם בלוגיקה מותנית: - מה קורה אם currentMoney שווה בדיוק ל-laptopPrice? - האם תוכלו לחשוב על תרחיש בעולם האמיתי שבו לוגיקת if-else תהיה שימושית? - איך תוכלו להרחיב את זה כדי לטפל בטווחי מחירים מרובים? ## הצהרת Switch לפעמים אתם צריכים להשוות ערך אחד מול מספר אפשרויות. בעוד שתוכלו לשרשר מספר הצהרות if..else, הגישה הזו הופכת למסורבלת. הצהרת ה-switch מספקת מבנה נקי יותר לטיפול בערכים דיסקרטיים מרובים. הרעיון דומה למערכות מיתוג מכניות שהיו בשימוש במרכזיות טלפון מוקדמות – ערך קלט אחד קובע איזה מסלול ביצוע ספציפי יילקח. כך זה בנוי: - JavaScript מעריכה את הביטוי פעם אחת - היא עוברת על כל case כדי למצוא התאמה - כשהיא מוצאת התאמה, היא מריצה את בלוק הקוד הזה - ה-break אומר ל-JavaScript לעצור ולצאת מה-switch - אם אין התאמות, היא מריצה את בלוק ה-default (אם יש כזה) בדוגמה הזו, JavaScript רואה ש-dayNumber הוא 2, מוצאת את ה-case 2 המתאים, מגדירה את dayName ל-"יום שלישי", ואז יוצאת מה-switch. התוצאה? "היום יום שלישי" מוצג בקונסול. ✅ בדקו את הבנתכם בקוד הזה ובקוד הבא על ידי הרצתם בקונסול של הדפדפן. שנו את הערכים של המשתנה a כדי לשנות את הפלט של console.log(). ### 🔄 שליטה בהצהרת Switch: אפשרויות מרובות בדקו את הבנתכם ב-switch: - מה קורה אם תשכחו הצהרת break? - מתי תשתמשו ב-switch במקום במספר הצהרות if-else? - מדוע ה-default שימושי גם אם אתם חושבים שכיסיתם את כל האפשרויות? ## אופרטורים לוגיים ובוליאנים החלטות מורכבות לעיתים דורשות הערכת מספר תנאים בו זמנית. כמו שאלגברה בוליאנית מאפשרת למתמטיקאים לשלב ביטויים לוגיים, תכנות מספק אופרטורים לוגיים לחיבור מספר תנאים בוליאניים. אופרטורים אלו מאפשרים לוגיקה מותנית מתוחכמת על ידי שילוב הערכות פשוטות של true/false. אופרטורים אלו מאפשרים לכם לשלב תנאים בדרכים שימושיות: - וגם (&&) אומר ששני התנאים חייבים להיות נכונים - או (||) אומר שלפחות תנאי אחד חייב להיות נכון - לא (!) הופך נכון לשגוי (ולהיפך) ## תנאים והחלטות עם אופרטורים לוגיים בואו נראה את האופרטורים הלוגיים הללו בפעולה עם דוגמה מציאותית יותר: בדוגמה הזו: אנחנו מחשבים מחיר הנחה של 20% (640), ואז מעריכים האם הכסף הזמין שלנו מכסה את המחיר המלא או את המחיר המוזל. מכיוון ש-600 עומד בסף המחיר המוזל של 640, התנאי מוערך כנכון. ### 🧮 בדיקת אופרטורים לוגיים: שילוב תנאים בדקו את הבנתכם באופרטורים לוגיים: - בביטוי A && B, מה קורה אם A הוא שגוי? האם B בכלל מוערך? - האם תוכלו לחשוב על מצב שבו תצטרכו את כל שלושת האופרטורים (&&, ||, !)? - מה ההבדל בין !user.isActive ל-user.isActive !== true? ### אופרטור שלילה לפעמים קל יותר לחשוב על מתי משהו לא נכון. כמו במקום לשאול "האם המשתמש מחובר?", אולי תרצו לשאול "האם המשתמש לא מחובר?" אופרטור סימן הקריאה (!) הופך את הלוגיקה עבורכם. אופרטור ! הוא כמו לומר "ההפך מ..." – אם משהו הוא true, ! הופך אותו ל-false, ולהיפך. ### ביטויים תנאיים לצורך הקצאות תנאיות פשוטות, JavaScript מספקת את אופרטור התנאי. תחביר תמציתי זה מאפשר לכם לכתוב ביטוי תנאי בשורה אחת, שימושי כשאתם צריכים להקצות אחד משני ערכים בהתבסס על תנאי. זה נקרא כמו שאלה: "האם התנאי הזה נכון? אם כן, השתמש בערך הזה. אם לא, השתמש בערך ההוא." להלן דוגמה מוחשית יותר: ✅ קחו רגע לקרוא את הקוד הזה כמה פעמים. האם אתם מבינים איך האופרטורים הללו עובדים? הנה מה שהשורה הזו אומרת: "האם firstNumber גדול מ-secondNumber? אם כן, שים את firstNumber ב-biggestNumber. אם לא, שים את secondNumber ב-biggestNumber." אופרטור התנאי הוא פשוט דרך קצרה יותר לכתוב את הצהרת ה-if..else המסורתית הזו: שתי הגישות מפיקות תוצאות זהות. אופרטור התנאי מציע תמציתיות, בעוד שהמבנה המסורתי של if-else עשוי להיות קריא יותר לתנאים מורכבים. --- ## 🚀 אתגר צרו תוכנית שנכתבת תחילה עם אופרטורים לוגיים, ואז כתבו אותה מחדש באמצעות ביטוי תנאי. מה התחביר המועדף עליכם? --- ## אתגר סוכן GitHub Copilot 🚀 השתמשו במצב סוכן כדי להשלים את האתגר הבא: תיאור: צרו מחשבון ציונים מקיף שמדגים מושגים שונים של קבלת החלטות מהשיעור הזה, כולל הצהרות if-else, הצהרות switch, אופרטורים לוגיים וביטויים תנאיים. הנחיה: כתבו תוכנית JavaScript שמקבלת את הציון המספרי של תלמיד (0-100) וקובעת את הציון האותי שלו באמצעות הקריטריונים הבאים: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: מתחת ל-60 דרישות: 1. השתמשו בהצהרת if-else כדי לקבוע את הציון האותי 2. השתמש באופרטורים לוגיים כדי לבדוק אם התלמיד עובר (ציון >= 60) וגם מקבל הצטיינות (ציון >= 90) 3. השתמש בפקודת switch כדי לספק משוב ספציפי לכל ציון אות 4. השתמש באופרטור תנאי כדי לקבוע אם התלמיד זכאי לקורס הבא (ציון >= 70) 5. כלול בדיקת קלט כדי לוודא שהציון נמצא בין 0 ל-100 בדוק את התוכנית שלך עם ציונים שונים כולל מקרים גבוליים כמו 59, 60, 89, 90 וקלטים לא תקינים. למידע נוסף על מצב סוכן כאן. ## שאלון לאחר ההרצאה שאלון לאחר ההרצאה ## סקירה ולימוד עצמי קרא עוד על האופרטורים הרבים הזמינים למשתמש ב-MDN. עבור על המדריך הנהדר של ג'וש קומאו חיפוש אופרטורים! ## משימה אופרטורים --- ## 🧠 סיכום ערכת הכלים שלך לקבלת החלטות --- ## 🚀 ציר הזמן לשליטה בקבלת החלטות ב-JavaScript ### ⚡ מה ניתן לעשות ב-5 הדקות הקרובות - [ ] תרגל אופרטורים להשוואה בקונסול של הדפדפן שלך - [ ] כתוב פקודת if-else פשוטה שבודקת את גילך - [ ] נסה את האתגר: כתוב מחדש if-else באמצעות אופרטור תנאי - [ ] בדוק מה קורה עם ערכים "אמיתיים" ו"שקריים" שונים ### 🎯 מה ניתן להשיג בשעה הקרובה - [ ] השלם את שאלון לאחר השיעור וסקור מושגים מבלבלים - [ ] בנה מחשבון ציונים מקיף מאתגר GitHub Copilot - [ ] צור עץ החלטות פשוט לתרחיש מציאותי (כמו בחירת מה ללבוש) - [ ] תרגל שילוב תנאים מרובים עם אופרטורים לוגיים - [ ] נסה פקודות switch לשימושים שונים ### 📅 שליטה בלוגיקה במהלך השבוע - [ ] השלם את משימת האופרטורים עם דוגמאות יצירתיות - [ ] בנה אפליקציית שאלון קטנה באמצעות מבני תנאי שונים - [ ] צור מאמת טפסים שבודק תנאי קלט מרובים - [ ] תרגל את התרגילים של ג'וש קומאו חיפוש אופרטורים - [ ] בצע שיפוץ קוד קיים כדי להשתמש במבני תנאי מתאימים יותר - [ ] למד על הערכת קיצור דרך והשלכות ביצועים ### 🌟 השינוי שלך לאורך החודש - [ ] שלוט בתנאים מורכבים מקוננים ושמור על קריאות הקוד - [ ] בנה אפליקציה עם לוגיקת קבלת החלטות מתוחכמת - [ ] תרום לקוד פתוח על ידי שיפור לוגיקת תנאים בפרויקטים קיימים - [ ] למד מישהו אחר על מבני תנאים שונים ומתי להשתמש בכל אחד - [ ] חקור גישות תכנות פונקציונליות ללוגיקת תנאים - [ ] צור מדריך אישי לשיטות עבודה מומלצות בתנאים ### 🏆 בדיקת אלוף קבלת ההחלטות הסופית חגוג את שליטתך בחשיבה לוגית: - מהי לוגיקת ההחלטות המורכבת ביותר שהצלחת ליישם? - איזה מבנה תנאי מרגיש לך הכי טבעי ולמה? - איך לימוד על אופרטורים לוגיים שינה את הגישה שלך לפתרון בעיות? - איזו אפליקציה מציאותית תיהנה מלוגיקת קבלת החלטות מתוחכמת? --- הצהרת אחריות: מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.

javascript

יסודות JavaScript: מערכים ולולאות

## שאלון לפני השיעור שאלון לפני השיעור אי פעם תהיתם איך אתרים עוקבים אחרי פריטים בעגלת הקניות או מציגים את רשימת החברים שלכם? כאן נכנסים לתמונה מערכים ולולאות. מערכים הם כמו מיכלים דיגיטליים שמחזיקים מידע רב, בעוד שלולאות מאפשרות לכם לעבוד עם כל המידע הזה בצורה יעילה בלי לכתוב קוד חוזר. יחד, שני המושגים הללו מהווים את הבסיס לטיפול במידע בתוכניות שלכם. תלמדו לעבור מכתיבה ידנית של כל שלב ליצירת קוד חכם ויעיל שיכול לעבד מאות או אפילו אלפי פריטים במהירות. בסוף השיעור הזה, תבינו איך לבצע משימות נתונים מורכבות בכמה שורות קוד בלבד. בואו נחקור את מושגי התכנות החיוניים הללו. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## מערכים חשבו על מערכים כמו ארון תיוק דיגיטלי - במקום לאחסן מסמך אחד בכל מגירה, אפשר לארגן פריטים קשורים רבים במיכל מובנה אחד. במונחי תכנות, מערכים מאפשרים לכם לאחסן מידע רב בחבילה מאורגנת אחת. בין אם אתם בונים גלריית תמונות, מנהלים רשימת משימות או עוקבים אחרי ציונים גבוהים במשחק, מערכים מספקים את הבסיס לארגון נתונים. בואו נראה איך הם עובדים. ✅ מערכים נמצאים בכל מקום! האם תוכלו לחשוב על דוגמה אמיתית למערך, כמו מערך של פאנלים סולאריים? ### יצירת מערכים יצירת מערך היא פשוטה מאוד - פשוט השתמשו בסוגריים מרובעים! מה קורה כאן? הרגע יצרתם מיכל ריק באמצעות הסוגריים המרובעים []. חשבו על זה כמו מדף ספרים ריק - הוא מוכן להכיל כל ספר שתרצו לארגן שם. ניתן גם למלא את המערך בערכים ראשוניים כבר מההתחלה: דברים מגניבים לשים לב אליהם: - ניתן לאחסן טקסט, מספרים ואפילו ערכים של נכון/לא נכון באותו מערך - פשוט הפרידו כל פריט עם פסיק - קל! - מערכים מושלמים לשמירה על מידע קשור יחד ### אינדקסים במערכים הנה משהו שעשוי להיראות מוזר בהתחלה: מערכים ממספרים את הפריטים שלהם החל מ-0, לא מ-1. אינדקסים מבוססי אפס נובעים מאופן הפעולה של זיכרון מחשב - זהו מוסכמה תכנותית מאז ימי השפות הראשונות כמו C. כל מקום במערך מקבל מספר כתובת משלו שנקרא אינדקס. ✅ האם זה מפתיע אתכם שמערכים מתחילים באינדקס אפס? בשפות תכנות מסוימות, אינדקסים מתחילים ב-1. יש היסטוריה מעניינת סביב זה, אותה תוכלו לקרוא בויקיפדיה. גישה לפריטי מערך: פירוט מה קורה כאן: - משתמשים בסוגריים מרובעים עם מספר האינדקס כדי לגשת לפריטים - מחזירים את הערך המאוחסן במיקום הספציפי במערך - מתחילים לספור מ-0, כך שהפריט הראשון הוא באינדקס 0 שינוי פריטי מערך: בקטע הקוד למעלה: - שינינו את הפריט באינדקס 4 מ-"Rocky Road" ל-"Butter Pecan" - הוספנו פריט חדש "Cookie Dough" באינדקס 5 - הרחבנו את אורך המערך באופן אוטומטי כשמוסיפים מעבר לגבולות הנוכחיים ### אורך מערך ושיטות נפוצות למערכים יש תכונות ושיטות מובנות שמקלות על העבודה עם נתונים. מציאת אורך מערך: נקודות חשובות לזכור: - מחזיר את מספר הפריטים הכולל במערך - מתעדכן אוטומטית כשמוסיפים או מסירים פריטים - מספק ספירה דינמית שימושית ללולאות ולאימות שיטות מערך חיוניות: הבנת השיטות הללו: - מוסיפים פריטים עם push() (בסוף) ו-unshift() (בהתחלה) - מסירים פריטים עם pop() (בסוף) ו-shift() (בהתחלה) - מאתרים פריטים עם indexOf() ובודקים קיום עם includes() - מחזירים ערכים שימושיים כמו פריטים שהוסרו או מיקומי אינדקס ✅ נסו בעצמכם! השתמשו בקונסול של הדפדפן כדי ליצור ולשנות מערך משלכם. ### 🧠 בדיקת יסודות מערכים: ארגון הנתונים שלכם בדקו את הבנתכם במערכים: - למה לדעתכם מערכים מתחילים לספור מ-0 ולא מ-1? - מה קורה אם תנסו לגשת לאינדקס שלא קיים (כמו arr[100] במערך עם 5 פריטים)? - האם תוכלו לחשוב על שלושה תרחישים אמיתיים שבהם מערכים יהיו שימושיים? ## לולאות חשבו על העונש המפורסם מספרי צ'ארלס דיקנס שבו תלמידים נאלצו לכתוב שורות שוב ושוב על לוח. דמיינו אם הייתם יכולים פשוט להורות למישהו "כתוב את המשפט הזה 100 פעמים" וזה היה נעשה אוטומטית. זה בדיוק מה שלולאות עושות עבור הקוד שלכם. לולאות הן כמו עוזר בלתי נלאה שיכול לחזור על משימות ללא טעויות. בין אם אתם צריכים לבדוק כל פריט בעגלת קניות או להציג את כל התמונות באלבום, לולאות מטפלות בחזרה בצורה יעילה. JavaScript מספק מספר סוגי לולאות לבחירה. בואו נבחן כל אחת ונבין מתי להשתמש בהן. ### לולאת For לולאת for היא כמו הגדרת טיימר - אתם יודעים בדיוק כמה פעמים אתם רוצים שמשהו יקרה. היא מאוד מאורגנת וצפויה, מה שהופך אותה למושלמת כשעובדים עם מערכים או צריכים לספור דברים. מבנה לולאת For: שלב אחר שלב, הנה מה שקורה: - מאתחלים את משתנה המונה i ל-0 בתחילת הלולאה - בודקים את התנאי i < 10 לפני כל איטרציה - מבצעים את קטע הקוד כשהתנאי נכון - מגדילים את i ב-1 אחרי כל איטרציה עם i++ - עוצרים כשהתנאי הופך לשקרי (כש-i מגיע ל-10) ✅ הריצו את הקוד הזה בקונסול של הדפדפן. מה קורה כשאתם מבצעים שינויים קטנים במונה, בתנאי או בביטוי האיטרציה? האם תוכלו לגרום ללולאה לרוץ אחורה, ליצור ספירה לאחור? ### 🗓️ בדיקת שליטה בלולאת For: חזרה מבוקרת העריכו את הבנתכם בלולאת for: - מהם שלושת החלקים של לולאת for ומה תפקידו של כל אחד? - איך הייתם מבצעים לולאה על מערך אחורה? - מה קורה אם תשכחו את חלק ההגדלה (i++)? ### לולאת While לולאת while היא כמו לומר "תמשיך לעשות את זה עד ש..." - ייתכן שלא תדעו בדיוק כמה פעמים היא תפעל, אבל תדעו מתי לעצור. היא מושלמת לדברים כמו בקשת קלט מהמשתמש עד שהוא נותן לכם את מה שאתם צריכים, או חיפוש נתונים עד שתמצאו את מה שאתם מחפשים. מאפייני לולאת While: - ממשיכה לפעול כל עוד התנאי נכון - דורשת ניהול ידני של משתני מונה - בודקת את התנאי לפני כל איטרציה - מסכנת לולאות אינסופיות אם התנאי לעולם לא הופך לשקרי הבנת הדוגמאות הללו: - מנהלת את משתנה המונה i ידנית בתוך גוף הלולאה - מגדילה את המונה כדי למנוע לולאות אינסופיות - מדגימה שימוש מעשי עם קלט משתמש והגבלת ניסיונות - כוללת מנגנוני בטיחות למניעת ביצוע אינסופי ### ♾️ בדיקת חוכמת לולאת While: חזרה מבוססת תנאי בדקו את הבנתכם בלולאת while: - מהו הסיכון העיקרי בשימוש בלולאות while? - מתי הייתם בוחרים בלולאת while על פני לולאת for? - איך ניתן למנוע לולאות אינסופיות? ### חלופות מודרניות ללולאות JavaScript מציע תחביר לולאות מודרני שיכול להפוך את הקוד שלכם לקריא יותר ופחות נוטה לטעויות. לולאת For...of (ES6+): יתרונות מרכזיים של for...of: - מבטלת את הצורך בניהול אינדקסים וסיכוני טעויות - מספקת גישה ישירה לפריטי מערך - משפרת את קריאות הקוד ומפחיתה את מורכבות התחביר שיטת forEach: מה שצריך לדעת על forEach: - מבצעת פונקציה עבור כל פריט במערך - מספקת גם את ערך הפריט וגם את האינדקס כפרמטרים - לא ניתן לעצור אותה מוקדם (בניגוד ללולאות מסורתיות) - מחזירה undefined (לא יוצרת מערך חדש) ✅ למה הייתם בוחרים בלולאת for לעומת לולאת while? 17K צופים שאלו את אותה שאלה ב-StackOverflow, וחלק מהדעות עשויות לעניין אתכם. ### 🎨 בדיקת תחביר לולאות מודרני: אימוץ ES6+ העריכו את הבנתכם ב-JavaScript מודרני: - מהם היתרונות של for...of על פני לולאות for מסורתיות? - מתי עדיין תעדיפו לולאות for מסורתיות? - מה ההבדל בין forEach ל-map? ## לולאות ומערכים שילוב מערכים עם לולאות יוצר יכולות עיבוד נתונים עוצמתיות. השילוב הזה הוא בסיסי למשימות תכנות רבות, החל מהצגת רשימות ועד חישוב סטטיסטיקות. עיבוד מערכים מסורתי: בואו נבין כל גישה: - משתמשים בתכונת אורך המערך כדי לקבוע את גבול הלולאה - ניגשים לפריטים לפי אינדקס בלולאות for מסורתיות - מספקים גישה ישירה לפריטים בלולאות for...of - מעבדים כל פריט במערך בדיוק פעם אחת דוגמה לעיבוד נתונים מעשי: כך הקוד הזה עובד: - מאתחלים משתני מעקב לסכום ולערכים קיצוניים - מעבדים כל ציון בלולאה יעילה אחת - מצטברים את הסכום לחישוב ממוצע - עוקבים אחרי הערכים הגבוהים והנמוכים במהלך האיטרציה - מחשבים סטטיסטיקות סופיות לאחר סיום הלולאה ✅ נסו לבצע לולאה על מערך משלכם בקונסול של הדפדפן. --- ## אתגר סוכן GitHub Copilot 🚀 השתמשו במצב סוכן כדי להשלים את האתגר הבא: תיאור: בנו פונקציית עיבוד נתונים מקיפה שמשלבת מערכים ולולאות כדי לנתח מערך נתונים וליצור תובנות משמעותיות. הנחיה: צרו פונקציה בשם analyzeGrades שמקבלת מערך של אובייקטים עם ציוני תלמידים (כל אחד מכיל שם ותכונת ציון) ומחזירה אובייקט עם סטטיסטיקות כולל הציון הגבוה ביותר, הציון הנמוך ביותר, ציון ממוצע, מספר התלמידים שעברו (ציון >= 70), ומערך שמות התלמידים שקיבלו מעל הממוצע. השתמשו לפחות בשני סוגי לולאות שונים בפתרון שלכם. למדו עוד על מצב סוכן כאן. ## 🚀 אתגר JavaScript מציע מספר שיטות מודרניות לעבודה עם מערכים שיכולות להחליף לולאות מסורתיות עבור משימות ספציפיות. חקור את forEach, for-of, map, filter, ו-reduce. האתגר שלך: כתוב מחדש את דוגמת ציוני התלמידים תוך שימוש בלפחות שלוש שיטות מערך שונות. שים לב כמה הקוד הופך להיות נקי וקריא יותר עם תחביר מודרני של JavaScript. ## שאלון לאחר ההרצאה שאלון לאחר ההרצאה ## סקירה ולימוד עצמי למערכים ב-JavaScript יש שיטות רבות שמחוברות אליהם, והן שימושיות מאוד לעיבוד נתונים. קרא על השיטות הללו ונסה כמה מהן (כמו push, pop, slice ו-splice) על מערך שיצרת בעצמך. ## משימה לולאה על מערך --- ## 📊 סיכום ערכת הכלים שלך למערכים ולולאות --- ## 🚀 ציר הזמן שלך לשליטה במערכים ולולאות ### ⚡ מה ניתן לעשות ב-5 הדקות הקרובות - [ ] צור מערך של הסרטים האהובים עליך וגשת לאלמנטים ספציפיים - [ ] כתוב לולאת for שסופרת מ-1 עד 10 - [ ] נסה את אתגר שיטות המערכים המודרניות מהשיעור - [ ] תרגל אינדקסים של מערכים בקונסול של הדפדפן שלך ### 🎯 מה ניתן להשיג בשעה הקרובה - [ ] השלם את שאלון לאחר השיעור וסקור מושגים מאתגרים - [ ] בנה מנתח ציונים מקיף מאתגר GitHub Copilot - [ ] צור עגלת קניות פשוטה שמוסיפה ומסירה פריטים - [ ] תרגל המרה בין סוגי לולאות שונים - [ ] נסה שיטות מערכים כמו push, pop, slice, ו-splice ### 📅 מסע עיבוד הנתונים שלך לשבוע - [ ] השלם את משימת "לולאה על מערך" עם שיפורים יצירתיים - [ ] בנה אפליקציית רשימת משימות באמצעות מערכים ולולאות - [ ] צור מחשבון סטטיסטיקות פשוט עבור נתונים מספריים - [ ] תרגל עם שיטות מערכים ב-MDN - [ ] בנה ממשק גלריית תמונות או רשימת השמעה מוזיקלית - [ ] חקור תכנות פונקציונלי עם map, filter, ו-reduce ### 🌟 השינוי שלך לחודש - [ ] שלוט בפעולות מערכים מתקדמות ואופטימיזציה של ביצועים - [ ] בנה לוח מחוונים מלא לעיבוד נתונים - [ ] תרום לפרויקטים בקוד פתוח שכוללים עיבוד נתונים - [ ] למד מישהו אחר על מערכים ולולאות עם דוגמאות מעשיות - [ ] צור ספרייה אישית של פונקציות לעיבוד נתונים לשימוש חוזר - [ ] חקור אלגוריתמים ומבני נתונים המבוססים על מערכים ### 🏆 בדיקת סיום של אלוף עיבוד הנתונים חגוג את השליטה שלך במערכים ולולאות: - מהי פעולת המערך הכי שימושית שלמדת עבור יישומים בעולם האמיתי? - איזה סוג לולאה מרגיש לך הכי טבעי ולמה? - איך הבנת מערכים ולולאות שינתה את הגישה שלך לארגון נתונים? - איזה משימת עיבוד נתונים מורכבת היית רוצה להתמודד איתה בהמשך? --- כתב ויתור: מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.

javascript

जावास्क्रिप्ट का परिचय

जावास्क्रिप्ट वेब की भाषा है। इन चार पाठों में, आप इसके मूलभूत सिद्धांत सीखेंगे। ### विषय 1. वेरिएबल्स और डेटा प्रकार 2. फंक्शन्स और मेथड्स 3. जावास्क्रिप्ट के साथ निर्णय लेना 4. एरेज़ और लूप्स ### श्रेय ये पाठ ♥️ के साथ लिखे गए हैं जैस्मिन ग्रीनवे, क्रिस्टोफर हैरिसन और क्रिस नोरिंग द्वारा। अस्वीकरण: यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।

web,development

JavaScript मूल बातें: डेटा प्रकार

डेटा प्रकार JavaScript में मौलिक अवधारणाओं में से एक हैं जिन्हें आप प्रत्येक प्रोग्राम में मिलेंगे जो आप लिखते हैं। डेटा प्रकारों को आप प्राचीन अलेक्जेंड्रिया के पुस्तकालयाध्यक्षों द्वारा इस्तेमाल किए जाने वाले फ़ाइलिंग सिस्टम की तरह सोचें – उनके पास कविता, गणित और ऐतिहासिक अभिलेखों वाले स्क्रॉल्स के लिए विशिष्ट स्थान थे। JavaScript अलग-अलग प्रकार के डेटा के लिए अलग-अलग श्रेणियाँ बनाकर जानकारी को इसी तरह व्यवस्थित करता है। इस पाठ में, हम उन मूल डेटा प्रकारों की खोज करेंगे जो JavaScript को काम करते हैं। आप सीखेंगे कि संख्याओं, टेक्स्ट, सच/झूठ के मानों को कैसे संभालना है, और समझेंगे कि सही प्रकार चुनना आपके प्रोग्रामों के लिए क्यों आवश्यक है। ये अवधारणाएँ शुरू में अमूर्त लग सकती हैं, लेकिन अभ्यास के साथ, वे आपकी दूसरी प्रकृति बन जाएंगी। डेटा प्रकार को समझना JavaScript में सब कुछ बहुत स्पष्ट बना देगा। जैसे वास्तुकारों को एक कैथेड्रल बनाते समय विभिन्न निर्माण सामग्री को समझना आवश्यक होता है, वैसे ही ये मूल बातें उस सबका आधार होंगी जो आप आगे बनाएंगे। ## पूर्व-व्याख्यान क्विज़ पूर्व-व्याख्यान क्विज़ यह पाठ JavaScript की मूल बातें कवर करता है, जो कि वह भाषा है जो वेब पर इंटरैक्टिविटी प्रदान करती है। [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript में वेरिएबल") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript में डेटा टाइप") चलिए शुरू करते हैं वेरिएबल और उन्हें भरने वाले डेटा प्रकारों के साथ! ## वेरिएबल्स वेरिएबल प्रोग्रामिंग में मौलिक बिल्डिंग ब्लॉक्स होते हैं। जैसे मध्यकालीन रसायनशास्त्री विभिन्न पदार्थों को रखने के लिए लेबल वाले जारों का उपयोग करते थे, वैसे ही वेरिएबल आपको जानकारी संग्रहीत करने और उसे एक वर्णनात्मक नाम देने की अनुमति देते हैं ताकि आप बाद में उसका संदर्भ ले सकें। किसी के उम्र को याद रखना है? इसे age नामक वेरिएबल में संग्रहीत करें। उपयोगकर्ता का नाम ट्रैक करना है? इसे userName नामक वेरिएबल में रखें। हम JavaScript में वेरिएबल बनाने के आधुनिक तरीके पर ध्यान केंद्रित करेंगे। जो तकनीकें आप यहां सीखेंगे वे वर्षों के भाषा विकास और प्रोग्रामिंग समुदाय द्वारा विकसित सर्वोत्तम प्रथाओं का प्रतिनिधित्व करती हैं। वेरिएबल बनाने और घोषित करने का निम्नलिखित सिंटैक्स होता है: [keyword] [name]। यह दो भागों से बना होता है: - कीवर्ड। बदलने योग्य वेरिएबल्स के लिए let का उपयोग करें, या स्थिर मानों के लिए const का। - वेरिएबल का नाम, यह वह वर्णनात्मक नाम है जिसे आप स्वयं चुनते हैं। ✅ let कीवर्ड ES6 में पेश किया गया था और यह आपकी वेरिएबल को एक _ब्लॉक स्कोप_ प्रदान करता है। यह सुझाव दिया जाता है कि आप पुराने var की बजाय let या const का उपयोग करें। हम भविष्य के भागों में ब्लॉक स्कोप की और गहराई से चर्चा करेंगे। ### कार्य - वेरिएबल के साथ काम करना 1. एक वेरिएबल घोषित करें। चलिए अपना पहला वेरिएबल बनाकर शुरू करते हैं: ```javascript let myVariable; ``` यह क्या पूरा करता है: - यह JavaScript को myVariable नामक संग्रहण स्थान बनाने के लिए कहता है - JavaScript इस वेरिएबल के लिए मेमोरी में स्थान आवंटित करता है - वेरिएबल के पास वर्तमान में कोई मान नहीं है (undefined) 2. इसमें मान दें। अब चलिए अपने वेरिएबल में कुछ मान रखते हैं: ```javascript myVariable = 123; ``` मान सौंपने का तरीका: - = ऑपरेटर हमारे वेरिएबल को मान 123 सौंपता है - अब वेरिएबल के पास यह मान होगा, undefined नहीं - आप पूरे कोड में इस मान को myVariable का उपयोग करके संदर्भित कर सकते हैं > ध्यान दें: इस पाठ में = का उपयोग "assignment operator" के लिए किया गया है, जिसका मतलब है कि हम वेरिएबल को मान सेट कर रहे हैं। यह समता नहीं दर्शाता। 3. स्मार्ट तरीका अपनाएं। वास्तव में, चलिए इन दो चरणों को एक साथ मिला देते हैं: ```javascript let myVariable = 123; ``` यह तरीका अधिक कुशल है: - आप एक ही वक्तव्य में वेरिएबल घोषित करते हैं और मान सौंपते हैं - यह डेवलपर्स के बीच मानक अभ्यास है - यह कोड की लंबाई को कम करता है और स्पष्टता बनाए रखता है 4. अपना मन बदलें। अगर हम कोई अलग संख्या संग्रहित करना चाहें तो? ```javascript myVariable = 321; ``` पुनः सौंपने को समझना: - अब वेरिएबल के पास 321 है, न कि 123 - पिछला मान बदल जाता है – वेरिएबल एक समय में केवल एक मान संग्रहीत करता है - यह म्यूटेबल (परिवर्तनशीलता) की मुख्य विशेषता है जो let से घोषित वेरिएबल में होती है ✅ इसे आज़माएं! आप अपने ब्राउज़र में सीधे JavaScript लिख सकते हैं। एक ब्राउज़र विंडो खोलें और Developer Tools पर जाएं। कंसोल में आपको एक प्रॉम्प्ट मिलेगा; let myVariable = 123 टाइप करें, एंटर दबाएं, फिर myVariable टाइप करें। क्या होता है? ध्यान दें, आप इन अवधारणाओं के बारे में अधिक बाद के पाठों में सीखेंगे। ### 🧠 वेरिएबल्स मास्टरी चेक: सहज होने की प्रक्रिया देखते हैं कि आप वेरिएबल्स के बारे में कैसा महसूस कर रहे हैं: - क्या आप वेरिएबल घोषित करने और उसमें मान देने के बीच का फर्क समझा सकते हैं? - अगर आप वेरिएबल घोषित करने से पहले इसका उपयोग करें तो क्या होता है? - आप कब let को const पर प्राथमिकता देंगे? ## कांसटेंट्स कभी-कभी आपको ऐसी जानकारी संग्रहित करनी होती है जो प्रोग्राम चलने के दौरान कभी न बदले। ऐसा कांसटेंट को आप प्राचीन ग्रीस में यूक्लिड द्वारा स्थापित गणितीय सिद्धांतों की तरह समझें – एक बार सिद्ध और दर्ज हो जाने पर वे भविष्य के लिए स्थिर रहे। कांसटेंट्स वेरिएबल्स की तरह काम करते हैं, लेकिन एक महत्वपूर्ण प्रतिबंध के साथ: एक बार मान सौंपने के बाद, इसे बदला नहीं जा सकता। यह अपरिवर्तनीयता आपके प्रोग्राम में महत्वपूर्ण मानों को आकस्मिक परिवर्तनों से बचाने में मदद करती है। कांसटेंट की घोषणा और आरंभिकी वेरिएबल जैसी ही होती है, बस const कीवर्ड का उपयोग होता है। कांसटेंट्स आम तौर पर सभी उच्च अक्षरों में घोषित किए जाते हैं। यह कोड क्या करता है: - एक कांसटेंट बनाता है जिसका नाम MY_VARIABLE और मान 123 है - कांसटेंट्स के लिए अपरकेस नामकरण परंपरा का उपयोग करता है - इस मान में भविष्य में कोई बदलाव नहीं होने देता कांसटेंट्स के दो मुख्य नियम हैं: - आपको इन्हें तुरंत मान देना होगा – खाली कांसटेंट्स की अनुमति नहीं है! - आप इस मान को कभी बदल नहीं सकते – अगर आप ऐसा करने की कोशिश करेंगे तो JavaScript त्रुटि देगा। आइए देखें: सरल मान - नीचे दिया हुआ अनुमति नहीं है: ```javascript const PI = 3; PI = 4; // अनुमति नहीं है ``` आपको याद रखने योग्य बातें: - कांसटेंट को पुनः सौंपने का प्रयास त्रुटि उत्पन्न करेगा - महत्वपूर्ण मानों को आकस्मिक परिवर्तनों से बचाता है - आपके प्रोग्राम में मान को लगातार बनाए रखता है ऑब्जेक्ट संदर्भ सुरक्षित है - नीचे दिया गया अनुमति नहीं है: ```javascript const obj = { a: 3 }; obj = { b: 5 } // अनुमति नहीं है ``` इन अवधारणाओं को समझना: - पूरे ऑब्जेक्ट को नए ऑब्जेक्ट से बदलने से रोकता है - मूल ऑब्जेक्ट के संदर्भ की सुरक्षा करता है - मेमोरी में ऑब्जेक्ट की पहचान को बनाए रखता है ऑब्जेक्ट का मान सुरक्षित नहीं है - नीचे दिया गया अनुमति है: ```javascript const obj = { a: 3 }; obj.a = 5; // अनुमति है ``` यहाँ क्या होता है इसके बारे में: - ऑब्जेक्ट के अंदर गुण मान को बदला जाता है - उसी ऑब्जेक्ट संदर्भ को बनाए रखा जाता है - दिखाता है कि ऑब्जेक्ट की सामग्री बदल सकती है जबकि संदर्भ स्थिर रहता है > ध्यान दें, const का मतलब केवल संदर्भ पुनः सौंपने से सुरक्षित है। मान _अपरिवर्तनीय_ नहीं है और बदल सकता है, खासकर जब वह जटिल संरचना जैसे ऑब्जेक्ट हो। ## डेटा प्रकार JavaScript जानकारी को विभिन्न श्रेणियों में व्यवस्थित करता है जिन्हें डेटा प्रकार कहा जाता है। यह अवधारणा प्राचीन विद्वानों के ज्ञान को वर्गीकृत करने के तरीके का प्रतिबिंब है – अरस्तू ने विभिन्न प्रकार के तर्क को अलग किया था, यह जानते हुए कि तार्किक सिद्धांतों को कविता, गणित और प्राकृतिक दार्शनिकता पर समान रूप से लागू नहीं किया जा सकता। डेटा प्रकार महत्वपूर्ण हैं क्योंकि विभिन्न ऑपरेशन अलग-अलग प्रकार की जानकारी पर काम करते हैं। जैसे आप किसी व्यक्ति के नाम पर अंकगणित नहीं कर सकते या गणितीय समीकरण को वर्णानुक्रम में नहीं लगा सकते, वैसे ही JavaScript प्रत्येक ऑपरेशन के लिए उपयुक्त डेटा प्रकार की मांग करता है। इसे समझने से त्रुटियों से बचा जा सकता है और आपके कोड को अधिक विश्वसनीय बनाया जा सकता है। वेरिएबल्स कई प्रकार के मान रख सकते हैं, जैसे संख्याएँ और टेक्स्ट। इन विभिन्न प्रकार के मानों को डेटा प्रकार कहा जाता है। डेटा प्रकार सॉफ़्टवेयर विकास का एक महत्वपूर्ण हिस्सा हैं क्योंकि यह डेवलपर्स को यह निर्णय लेने में मदद करता है कि कोड कैसे लिखा जाए और सॉफ़्टवेयर कैसे चले। इसके अलावा, कुछ डेटा प्रकारों के विशिष्ट फ़ीचर होते हैं जो किसी मान को बदलने या अतिरिक्त जानकारी निकालने में मदद करते हैं। ✅ डेटा प्रकार को JavaScript डेटा प्रिमिटिव्स भी कहा जाता है, क्योंकि ये भाषा द्वारा प्रदान किए जाने वाले सबसे निचले स्तर के डेटा प्रकार हैं। सात प्रिमिटिव डेटा प्रकार हैं: string, number, bigint, boolean, undefined, null, और symbol। एक मिनट लें और कल्पना करें कि ये प्रिमिटिव्स क्या प्रतिनिधित्व कर सकते हैं। zebra क्या है? 0 कैसे? true? ### संख्याएँ संख्याएँ JavaScript में सबसे सहज डेटा प्रकार हैं। चाहे आप पूर्ण संख्या जैसे 42, दशमलव जैसे 3.14, या नकारात्मक संख्या जैसे -5 के साथ काम कर रहे हों, JavaScript सभी को समान रूप से संभालता है। याद रखें हमारा वेरिएबल जिसमें हमने 123 रखा था? वह वास्तव में एक संख्या डेटा प्रकार था: मुख्य विशेषताएं: - JavaScript स्वतः संख्यात्मक मान पहचान लेता है - आप इन वेरिएबल्स के साथ गणितीय ऑपरेशन कर सकते हैं - स्पष्ट प्रकार घोषणा आवश्यक नहीं है वेरिएबल्स सभी प्रकार की संख्याएँ संग्रहित कर सकते हैं, जिनमें दशमलव और नकारात्मक संख्याएँ भी शामिल हैं। संख्याएँ गणितीय ऑपरेटर्स के साथ भी इस्तेमाल की जा सकती हैं, जो अगली अनुभाग में कवर किए गए हैं। ### अंकगणितीय ऑपरेटर्स अंकगणितीय ऑपरेटर्स आपको JavaScript में गणितीय गणनाएँ करने देते हैं। ये ऑपरेटर्स उन ही सिद्धांतों का पालन करते हैं जिन्हें गणितज्ञ सदियों से उपयोग कर रहे हैं – वे ही प्रतीक जो स्कॉलर अल-ख्वारिज़्मी जैसे विद्वानों के कार्यों में देखे गए, जिन्होंने बीजगणितीय संकेतन विकसित किया। ऑपरेटर्स वैसे ही काम करते हैं जैसे पारंपरिक गणित में अपेक्षित होता है: प्लस जोड़ के लिए, माइनस घटाव के लिए, आदि। अंकगणितीय कार्य करते समय उपयोग करने वाले कुछ ऑपरेटर्स यहाँ दिए गए हैं: ✅ इसे आज़माएं! अपने ब्राउज़र के कंसोल में कोई अंकगणितीय ऑपरेशन करें। परिणामों ने आपको चौंकाया क्या? ### 🧮 गणित कौशल जांच: आत्मविश्वास के साथ गणना करना अपनी अंकगणित समझ का परीक्षण करें: - / (भाग) और % (शेषफल) में क्या अंतर है? - क्या आप अनुमान लगा सकते हैं कि 10 % 3 क्या होगा? (संकेत: यह 3.33... नहीं है) - प्रोग्रामिंग में शेषफल ऑपरेटर क्यों उपयोगी हो सकता है? ### स्ट्रिंग्स JavaScript में पाठ्य डेटा को स्ट्रिंग्स के रूप में दर्शाया जाता है। "स्ट्रिंग" शब्द का अर्थ है एक के बाद एक जुड़े हुए अक्षर, जैसे मध्यकालीन मठों में पांडुलिपियों में शब्द और वाक्य बनाने के लिए अक्षरों को जोड़ा जाता था। स्ट्रिंग्स वेब विकास के लिए मौलिक हैं। वेबसाइट पर प्रदर्शित हर टेक्स्ट – उपयोगकर्ता नाम, बटन लेबल, त्रुटि संदेश, सामग्री – को स्ट्रिंग डेटा के रूप में संभाला जाता है। स्ट्रिंग्स को समझना कार्यात्मक उपयोगकर्ता इंटरफेस बनाने के लिए महत्वपूर्ण है। स्ट्रिंग्स अक्षरों का एक सेट है जो सिंगल या डबल कोट्स के बीच रहता है। इन अवधारणाओं को समझना: - स्ट्रिंग्स को परिभाषित करने के लिए या तो सिंगल कोट ' या डबल कोट " का उपयोग करता है - टेक्स्ट डेटा संग्रहीत करता है जिसमें अक्षर, संख्या और प्रतीक शामिल हो सकते हैं - वेरिएबल्स को बाद में उपयोग के लिए स्ट्रिंग मान सौंपता है - कोट्स आवश्यक हैं ताकि टेक्स्ट को वेरिएबल नाम से अलग किया जा सके स्ट्रिंग लिखते समय कोट्स का उपयोग करना याद रखें, अन्यथा JavaScript इसे वेरिएबल नाम समझेगा। ### स्ट्रिंग्स का स्वरूपण स्ट्रिंग मैनिपुलेशन आपको टेक्स्ट तत्वों को जोड़ने, वेरिएबल्स को शामिल करने, और प्रोग्राम की स्थिति के अनुसार प्रतिक्रिया करने वाली गतिशील सामग्री बनाने की अनुमति देता है। यह तकनीक आपको प्रोग्रामेटिक रूप से टेक्स्ट बनाने की सुविधा देती है। आमतौर पर आपको कई स्ट्रिंग्स को जोड़ना होता है – इस प्रक्रिया को संकेतन (concatenation) कहा जाता है। दो या अधिक स्ट्रिंग्स को संयोजन करने के लिए, या उन्हें एक साथ जोड़ने के लिए, + ऑपरेटर का उपयोग करें। कदम दर कदम, यहाँ क्या हो रहा है: - + ऑपरेटर का उपयोग करके कई स्ट्रिंग्स को एक साथ जोड़ता है - पहले उदाहरण में स्ट्रिंग्स को सीधे बिना स्पेस के जोड़ता है - पठनीयता के लिए स्ट्रिंग्स के बीच स्पेस कैरेक्टर " " जोड़ता है - उचित फॉर्मेटिंग बनाने के लिए कॉमा जैसे विराम चिह्न सम्मिलित करता है ✅ क्यों JavaScript में 1 + 1 = 2 होता है, लेकिन '1' + '1' = 11? सोचिए। '1' + 1 के बारे में क्या कहेंगे? टेम्पलेट लिटरेल्स स्ट्रिंग्स को फॉर्मेट करने का एक और तरीका है, सिवाय इसके कि कोट्स के बजाय बैकटिक ` ` का उपयोग किया जाता है। जो भी सामान्य टेक्स्ट नहीं है, उसे प्लेसहोल्डर ${ }` के अंदर रखा जाना चाहिए। इसमें कोई भी वेरिएबल्स शामिल हो सकते हैं जो स्ट्रिंग्स हो सकते हैं। आइए प्रत्येक भाग को समझें: - टेम्पलेट लिटरेल्स बनाने के लिए सामान्य कोट्स के बजाय बैकटिक ` `` का उपयोग करता है - ${} प्लेसहोल्डर सिंटैक्स का उपयोग करके सीधे वेरिएबल्स को एम्बेड करता है - स्पेस और फॉर्मेटिंग को बिलकुल उसी तरह सहेजता है जैसा लिखा गया है - वेरिएबल्स के साथ जटिल स्ट्रिंग्स बनाने का एक साफ-सुथरा तरीका प्रदान करता है आप अपनी फॉर्मेटिंग ज़रूरतों को किसी भी विधि से पूरा कर सकते हैं, लेकिन टेम्पलेट लिटरेल्स किसी भी स्पेस और लाइन ब्रेक का सम्मान करेंगे। ✅ आप टेम्पलेट लिटरेल कब उपयोग करेंगे और साधारण स्ट्रिंग कब? ### 🔤 स्ट्रिंग दक्षता जांच: टेक्स्ट मैनिपुलेशन आत्मविश्वास अपने स्ट्रिंग कौशल का मूल्यांकन करें: - क्या आप समझा सकते हैं कि '1' + '1' 2 के बजाय '11' क्यों होता है? - आपको कौन सा स्ट्रिंग मेथड अधिक पठनीय लगता है: संयोजन या टेम्पलेट लिटरेल्स? - अगर आप स्ट्रिंग के चारों ओर कोट भूल जाते हैं तो क्या होता है? ### बुलियन (Booleans) बुलियन सबसे सरल डेटा स्वरूप का प्रतिनिधित्व करते हैं: वे केवल दो मानों में से एक को रख सकते हैं – true या false। यह बाइनरी लॉजिक सिस्टम जॉर्ज बुल (George Boole), 19वीं सदी के गणितज्ञ, जोनें बुलियन बीजगणित विकसित किया था, के कार्य से उत्पन्न हुआ है। अपनी सरलता के बावजूद, बुलियन प्रोग्राम लॉजिक के लिए आवश्यक होते हैं। वे आपके कोड को शर्तों के आधार पर निर्णय लेने में सक्षम बनाते हैं – जैसे कि उपयोगकर्ता लॉग इन है या नहीं, बटन क्लिक किया गया या नहीं, या कुछ विशेष मापदंड पूरे हुए हैं या नहीं। बुलियन केवल दो मान हो सकते हैं: true या false। बुलियन आपको यह तय करने में मदद करते हैं कि कौन सी कोड की लाइनें तब चलनी चाहिए जब कुछ शर्तें पूरी हों। कई मामलों में, ऑपरेटर बुलियन मान सेट करने में मदद करते हैं और आप अक्सर देखेंगे और लिखेंगे कि वेरिएबल्स को ऑपरेटर के साथ इनिशियलाइज़ या उनका मान अपडेट किया जा रहा हो। ऊपर हमने: - बुलियन मूल्य true रखने वाला वेरिएबल बनाया - बुलियन मूल्य false रखने का तरीका दिखाया - सटीक कीवर्ड true और false (कोट्स की जरूरत नहीं) का उपयोग किया - इन वेरिएबल्स को कंडीशनल स्टेटमेंट्स में उपयोग के लिए तैयार किया ✅ किसी वेरिएबल को 'ट्रूथी' माना जा सकता है यदि वह_BOOLEAN_ true के रूप में मूल्यांकन हो। दिलचस्प बात यह है कि, JavaScript में, सभी मान ट्रूथी होते हैं जब तक कि उन्हें फाल्सी न घोषित किया गया हो। ### 🎯 बुलियन लॉजिक जांच: निर्णय लेने के कौशल अपने बुलियन समझ का परीक्षण करें: - आपको क्यों लगता है कि JavaScript के पास केवल true और false से परे "truthy" और "falsy" मान हैं? - इनमें से कौन सा फाल्सी है, आप अनुमान लगा सकते हैं: 0, "0", [], "false"? - प्रोग्राम के फ्लो को नियंत्रित करने में बुलियन कैसे उपयोगी हो सकते हैं? --- ## 📊 आपके डेटा प्रकार टूलकिट का सारांश ## GitHub Copilot एजेंट चैलेंज 🚀 एजेंट मोड का उपयोग करके निम्नलिखित चैलेंज पूरा करें: विवरण: एक पर्सनल इन्फॉर्मेशन मैनेजर बनाएं जो इस पाठ में सीखे गए सभी JavaScript डेटा प्रकारों का प्रदर्शन करे, जबकि वास्तविक-विश्व डेटा परिदृश्यों को संभालता हो। प्रॉम्प्ट: एक JavaScript प्रोग्राम बनाएं जो एक उपयोगकर्ता प्रोफ़ाइल वस्तु बनाए जिसमें: व्यक्ति का नाम (स्ट्रिंग), आयु (नंबर), विद्यार्थी स्थिति (बुलियन), पसंदीदा रंगों की एक सूची, और एक पता वस्तु जिसमें सड़क, शहर, और ज़िप कोड के गुण शामिल हों। प्रोफ़ाइल जानकारी प्रदर्शित करने और व्यक्तिगत फ़ील्ड अपडेट करने के लिए फ़ंक्शन शामिल करें। स्ट्रिंग संयोजन, टेम्पलेट लिटरेल्स, आयु के गणितीय संचालन, और विद्यार्थी स्थिति के लिए बुलियन लॉजिक प्रदर्शित करना सुनिश्चित करें। एजेंट मोड के बारे में अधिक जानें। ## 🚀 चुनौती JavaScript में कुछ ऐसे व्यवहार हैं जो डेवलपर्स को आश्चर्यचकित कर सकते हैं। यहाँ एक क्लासिक उदाहरण है: अपने ब्राउज़र के कंसोल में यह टाइप करने का प्रयास करें: let age = 1; let Age = 2; age == Age और परिणाम देखें। यह false लौटाता है – क्या आप समझा सकते हैं क्यों? यह JavaScript के कई व्यवहारों में से एक है जिसे समझना उपयोगी है। इन अजीबताओं से परिचित होने पर आप अधिक विश्वसनीय कोड लिख पाएंगे और समस्याओं को अधिक प्रभावी ढंग से डिबग कर पाएंगे। ## लेक्चर के बाद क्विज़ Post-lecture quiz ## समीक्षा और स्वअध्ययन यहाँ JavaScript अभ्यासों की सूची देखें और एक आज़माएं। आपने क्या सीखा? ## असाइनमेंट Data Types Practice ## 🚀 आपके JavaScript डेटा प्रकारों की मास्टरी टाइमलाइन ### ⚡ अगले 5 मिनट में आप क्या कर सकते हैं - [ ] अपने ब्राउज़र के कंसोल को खोलें और विभिन्न डेटा प्रकारों के 3 वेरिएबल बनाएं - [ ] चुनौती का प्रयास करें: let age = 1; let Age = 2; age == Age और पता लगाएं कि यह false क्यों है - [ ] अपने नाम और पसंदीदा नंबर के साथ स्ट्रिंग संयोजन का अभ्यास करें - [ ] देखें कि जब आप एक संख्या स्ट्रिंग में जोड़ते हैं तो क्या होता है ### 🎯 इस घंटे में आप क्या हासिल कर सकते हैं - [ ] पोस्ट-लेसन क्विज़ पूरा करें और किसी भी भ्रमित करने वाले विषयों की समीक्षा करें - [ ] एक मिनी कैलकुलेटर बनाएं जो दो संख्याओं को जोड़, घटा, गुणा और भाग करे - [ ] टेम्पलेट लिटरेल्स का उपयोग करते हुए एक सरल नाम फॉर्मेटर बनाएं - [ ] == और === तुलना ऑपरेटरों के बीच के अंतर का अन्वेषण करें - [ ] विभिन्न डेटा प्रकारों में रूपांतरण का अभ्यास करें ### 📅 आपका सप्ताह भर का JavaScript आधार - [ ] आत्मविश्वास और रचनात्मकता के साथ असाइनमेंट पूरा करें - [ ] सभी सीखे गए डेटा प्रकारों का उपयोग करते हुए एक व्यक्तिगत प्रोफ़ाइल वस्तु बनाएं - [ ] CSS-Tricks के JavaScript अभ्यासों के साथ अभ्यास करें - [ ] बुलियन लॉजिक का उपयोग करते हुए एक सरल फॉर्म वैलिडेटर बनाएं - [ ] एरे और ऑब्जेक्ट डेटा प्रकारों के साथ प्रयोग करें (आने वाले पाठों का पूर्वावलोकन) - [ ] एक JavaScript समुदाय में शामिल हों और डेटा प्रकारों के बारे में प्रश्न पूछें ### 🌟 आपका महीने भर का परिवर्तन - [ ] बड़े प्रोग्रामिंग प्रोजेक्ट्स में डेटा प्रकार ज्ञान को एकीकृत करें - [ ] वास्तविक अनुप्रयोगों में प्रत्येक डेटा प्रकार का उपयोग कब और क्यों करना है समझें - [ ] अन्य शुरुआती लोगों को JavaScript की मूल बातें समझाने में मदद करें - [ ] एक छोटी एप्लिकेशन बनाएं जो विभिन्न प्रकार के उपयोगकर्ता डेटा का प्रबंधन करे - [ ] टाइप कोअरशन और सख्त समानता जैसे उन्नत डेटा प्रकार अवधारणाओं का अन्वेषण करें - [ ] डॉक्यूमेंटेशन सुधार के साथ ओपन सोर्स JavaScript प्रोजेक्ट्स में योगदान दें ### 🧠 अंतिम डेटा प्रकार मास्टरी जांच अपने JavaScript आधार का जश्न मनाएं: - किस डेटा प्रकार ने आपको इसके व्यवहार के संदर्भ में सबसे अधिक आश्चर्यचकित किया? - आप कितने सहज महसूस करते हैं वेरिएबल बनाम कॉन्स्टेंट को किसी मित्र को समझाने में? - JavaScript के टाइप सिस्टम के बारे में आपने सबसे रोचक क्या खोजा? - इन मूल सिद्धांतों के साथ आप कौन सा वास्तविक दुनिया का ऐप्लिकेशन बना सकते हैं? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> अस्वीकरण: इस दस्तावेज़ का अनुवाद एआई अनुवाद सेवा Co-op Translator का उपयोग करके किया गया है। यद्यपि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में विश्वसनीय स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की अनुशंसा की जाती है। हम इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए उत्तरदायी नहीं हैं। <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript बेसिक्स: मेथड्स और फंक्शन्स

## प्री-लेक्चर क्विज़ प्री-लेक्चर क्विज़ एक ही कोड को बार-बार लिखना प्रोग्रामिंग की सबसे आम निराशाओं में से एक है। फंक्शन्स इस समस्या को हल करते हैं क्योंकि ये आपको कोड को पुन: प्रयोज्य ब्लॉकों में पैकेज करने देते हैं। फंक्शन्स को ऐसे सोचें जैसे कि वे मानकीकृत भाग हैं जिन्होंने हेनरी फोर्ड की असेम्बली लाइन क्रांतिकारी बना दी – एक बार जब आप एक विश्वसनीय कंपोनेंट बनाते हैं, तो आप इसे जरूरत के अनुसार कहीं भी बिना फिर से बनाये उपयोग कर सकते हैं। फंक्शन्स आपको कोड के टुकड़ों को बंडल करने देते हैं ताकि आप उन्हें अपने प्रोग्राम में हर जगह पुनः उपयोग कर सकें। हर जगह एक ही लॉजिक को कॉपी और पेस्ट करने के बजाय, आप एक बार फंक्शन बना सकते हैं और जब भी जरूरत हो उसे कॉल कर सकते हैं। यह तरीका आपके कोड को व्यवस्थित रखता है और अपडेट करना कहीं ज्यादा आसान बनाता है। इस पाठ में, आप सीखेंगे कि खुद के फंक्शन्स कैसे बनाएं, उनमें जानकारी कैसे पास करें, और उपयोगी परिणाम कैसे वापस प्राप्त करें। आप फंक्शन्स और मेथड्स के बीच का फर्क समझेंगे, आधुनिक सिंटैक्स के तरीकों को जानेंगे, और देखेंगे कि फंक्शन्स एक दूसरे के साथ कैसे काम कर सकते हैं। हम इन अवधारणाओं को चरण-दर-चरण बनाएंगे। [](https://youtube.com/watch?v=XgKsD6Zwvlc "मेथड्स और फंक्शन्स") ## फंक्शन्स एक फंक्शन एक स्व-निहित कोड का ब्लॉक होता है जो एक विशिष्ट कार्य करता है। यह उस लॉजिक को समेटे रखता है जिसे आप जब भी जरूरत हो चला सकते हैं। अपने प्रोग्राम में एक ही कोड को कई बार लिखने के बजाय, आप उसे एक फंक्शन में पैकेज कर सकते हैं और जब भी जरूरत हो उस फंक्शन को कॉल कर सकते हैं। यह तरीका आपके कोड को साफ सुथरा रखता है और अपडेट करना कहीं आसान बना देता है। सोचिए अगर आपको अपनी कोडबेस के 20 अलग-अलग स्थानों पर फैले लॉजिक को बदलना पड़े तो कितना चुनौतीपूर्ण होगा। अपने फंक्शन्स को स्पष्ट नाम देना जरूरी है। एक अच्छा नामित फंक्शन अपने उद्देश्य को स्पष्ट रूप से संप्रेषित करता है – जब आप cancelTimer() देखते हैं, तो आप तुरंत समझ जाते हैं कि यह क्या करता है, ठीक उसी तरह जैसे एक स्पष्ट लेबल वाला बटन आपको बताता है कि क्लिक करने पर क्या होगा। ## फंक्शन बनाना और कॉल करना आइए देखें कि फंक्शन कैसे बनाते हैं। इसका सिंटैक्स एक समान पैटर्न का पालन करता है: इसे तोड़कर समझें: - function कीवर्ड जावास्क्रिप्ट को बताता है "अरे, मैं एक फंक्शन बना रहा हूँ!" - nameOfFunction वह जगह है जहाँ आप अपने फंक्शन को एक वर्णनात्मक नाम देते हैं - कर्कश ब्रैकेट्स () उन पैरामीटर को दर्शाते हैं जहाँ आप पैरामीटर जोड़ सकते हैं (हम जल्द ही इस पर आएंगे) - घुंघराले ब्रैकेट्स {} वे कोड होते हैं जो आप कॉल करने पर चलते हैं आइए एक साधारण अभिवादन फंक्शन बनाकर इसे देखें: यह फंक्शन कंसोल पर "Hello, world!" प्रिंट करता है। एक बार परिभाषित होने के बाद, आप इसे जरूरत के अनुसार कई बार उपयोग कर सकते हैं। अपने फंक्शन को चलाने (या "कॉल" करने) के लिए, उसका नाम लिखें और उसके बाद पैरेंथेसिस लगाएं। जावास्क्रिप्ट आपको अपने फंक्शन को पहले या बाद में परिभाषित करने की अनुमति देता है – जावास्क्रिप्ट इंजन निष्पादन क्रम को संभालेगा। जब आप यह लाइन चलाते हैं, तो यह आपके displayGreeting फंक्शन के अंदर सभी कोड को निष्पादित करता है, जो आपके ब्राउज़र के कंसोल में "Hello, world!" प्रदर्शित करता है। आप इस फंक्शन को कई बार कॉल कर सकते हैं। ### 🧠 फंक्शन मूल बातें जांच: अपने पहले फंक्शन्स बनाना आइए देखें कि आप बेसिक फंक्शन्स के बारे में कैसा महसूस कर रहे हैं: - फंक्शन परिभाषाओं में {} कर्कश ब्रैकेट्स का उपयोग क्यों करते हैं? - क्या होगा अगर आप displayGreeting को बिना पैरेंथेसिस के लिखें? - आप एक ही फंक्शन को कई बार क्यों कॉल करना चाहेंगे? ### फंक्शन सर्वश्रेष्ठ प्रथाएं यहाँ कुछ सुझाव हैं जो आपको बेहतर फंक्शन्स लिखने में मदद करेंगे: - अपने फंक्शन्स को स्पष्ट, वर्णनात्मक नाम दें – आपका भविष्य का खुद आप इसका आभार मानेंगे! - यदि नाम कई शब्दों का हो तो camelCasing का उपयोग करें (जैसे calculateTotal बजाय calculate_total) - हर फंक्शन को एक काम करने पर केन्द्रित रखें ## फंक्शन को जानकारी भेजना हमारा displayGreeting फंक्शन सीमित है – यह हर किसी के लिए सिर्फ "Hello, world!" दिखा सकता है। पैरामीटर हमें फंक्शन्स को अधिक लचीला और उपयोगी बनाना संभव करते हैं। पैरामीटर ऐसे प्लेसहोल्डर्स की तरह होते हैं जहाँ आप अलग-अलग कॉल पर विभिन्न मान डाल सकते हैं। इस तरह, एक ही फंक्शन हर कॉल पर अलग-अलग जानकारी के साथ काम कर सकता है। जब आप फंक्शन को परिभाषित करते हैं तो पैरेंथेसिस के अंदर पैरामीटर लिखते हैं, और यदि एक से अधिक हैं तो उन्हें कॉमा से अलग करते हैं: प्रत्येक पैरामीटर एक प्लेसहोल्डर की तरह कार्य करता है – जब कोई आपका फंक्शन कॉल करता है, तो वे वास्तविक मान प्रदान करते हैं जो इन स्थानों पर डाले जाते हैं। आइए हमारा ग्रीटिंग फंक्शन अपडेट करें ताकि वह किसी के नाम को स्वीकार कर सके: ध्यान दें कि हम बैकटिक्स (` `) और ${}` का उपयोग कर रहे हैं ताकि नाम सीधे संदेश में डाला जा सके – इसे टेम्पलेट लिटरल कहा जाता है, और यह स्ट्रिंग्स को वेरिएबल के साथ जोड़ने का एक बहुत सुविधाजनक तरीका है। अब जब हम फंक्शन को कॉल करते हैं, तो हम कोई भी नाम पास कर सकते हैं: जावास्क्रिप्ट स्ट्रिंग 'Christopher' को name पैरामीटर में असाइन कर देता है, और वैयक्तिकृत संदेश "Hello, Christopher!" बनाता है। ## डिफ़ॉल्ट मान अगर हम कुछ पैरामीटर को वैकल्पिक बनाना चाहें तो क्या होगा? तब डिफ़ॉल्ट मान काम आते हैं! मान लीजिए हम चाहते हैं कि लोग ग्रीटिंग शब्द को कस्टमाइज़ कर सकें, लेकिन अगर वे इसे निर्दिष्ट न करें तो हम "Hello" को बैकअप के रूप में उपयोग करेंगे। आप डिफ़ॉल्ट मान इस तरह सेट कर सकते हैं जैसे आप कोई वैरिएबल सेट करते हैं: यहाँ, name अभी भी आवश्यक है, लेकिन salutation के पास 'Hello' का बैकअप मान है यदि कोई अलग ग्रीटिंग निर्दिष्ट न करे। अब हम इस फंक्शन को दो अलग-अलग तरीकों से कॉल कर सकते हैं: पहली कॉल में, जावास्क्रिप्ट डिफ़ॉल्ट "Hello" का उपयोग करता है क्योंकि हमने कोई सल्यूटेशन नहीं दिया। दूसरी कॉल में, यह हमारे कस्टम "Hi" का उपयोग करता है। यह लचीलापन फंक्शन्स को विभिन्न स्थितियों के लिए उपयुक्त बनाता है। ### 🎛️ पैरामीटर मास्टरी चेक: फंक्शन्स को लचीला बनाना अपने पैरामीटर समझ को जांचें: - पैरामीटर और आर्ग्यूमेंट में क्या अंतर है? - डिफ़ॉल्ट मान वास्तविक प्रोग्रामिंग में क्यों उपयोगी हैं? - क्या आप अनुमान लगा सकते हैं कि अगर आप पैरामीटर से ज्यादा आर्ग्यूमेंट पास करें तो क्या होगा? ## रिटर्न मान अब तक हमारे फंक्शन्स ने केवल कंसोल पर संदेश प्रिंट किए हैं, लेकिन अगर आप चाहते हैं कि फंक्शन कुछ कैलकुलेट करे और परिणाम वापस दे? यही जगह है जहां रिटर्न मान आते हैं। सिर्फ कुछ दिखाने की बजाय, फंक्शन एक मान वापस कर सकता है जिसे आप किसी वैरिएबल में स्टोर कर सकते हैं या अपने कोड के अन्य भागों में उपयोग कर सकते हैं। मान वापस भेजने के लिए, आप return कीवर्ड का उपयोग करते हैं जिसके बाद आप जो भी वापस करना चाहते हैं वह लिखते हैं: यहाँ एक महत्वपूर्ण बात है: जब फंक्शन को return स्टेटमेंट मिलता है, तो वह तुरंत रुक जाता है और वह मान वापस भेज देता है जिसे कॉल किया था। आइए हमारा ग्रीटिंग फंक्शन इस तरह संशोधित करें कि वह संदेश प्रिंट करने के बजाय वापस करे: अब यह फंक्शन ग्रीटिंग प्रिंट करने के बजाय संदेश बनाता है और हमें वापस देता है। वापस प्राप्त मान को उपयोग करने के लिए, हम इसे किसी वैरिएबल में स्टोर कर सकते हैं जैसे किसी अन्य मान को करते हैं: अब greetingMessage में "Hello, Christopher" है और हम इसे कहीं भी अपने कोड में उपयोग कर सकते हैं – वेबपेज पर दिखाने, ईमेल में शामिल करने, या किसी अन्य फंक्शन को पास करने के लिए। ### 🔄 रिटर्न मान जांच: परिणाम प्राप्त करना अपने रिटर्न मान की समझ का मूल्यांकन करें: - फंक्शन में return स्टेटमेंट के बाद कोड क्या होता है? - केवल कंसोल पर प्रिंट करने से बेहतर रिटर्न मान क्यों होता है? - क्या एक फंक्शन विभिन्न प्रकार के मान (string, number, boolean) वापस कर सकता है? ## फंक्शन्स को पैरामीटर के रूप में पास करना फंक्शन्स को अन्य फंक्शन्स के पैरामीटर के रूप में पास किया जा सकता है। यह अवधारणा शुरू में जटिल लग सकती है, लेकिन यह एक शक्तिशाली फीचर है जो लचीली प्रोग्रामिंग पैटर्न सक्षम बनाता है। यह पैटर्न बहुत सामान्य है जब आप कहना चाहते हैं "जब कुछ हो, तो यह अन्य काम करो।" उदाहरण के लिए, "जब टाइमर खत्म हो जाए, तब यह कोड चलाओ" या "जब उपयोगकर्ता बटन क्लिक करे, तब यह फंक्शन कॉल करो।" आइए setTimeout देखें, जो एक बिल्ट-इन फंक्शन है जो कुछ समय इंतजार करता है और फिर कुछ कोड चलता है। हमें इसे बताना होता है कि कौन सा कोड चलाना है – फंक्शन पास करने के लिए यह एक बेहतरीन इस्तेमाल है! यह कोड आज़माएँ – 3 सेकंड बाद आपको एक संदेश दिखेगा: ध्यान दें कि हम displayDone (पैरेंथेसिस के बिना) setTimeout को पास कर रहे हैं। हम खुद फंक्शन को कॉल नहीं कर रहे हैं – हम इसे setTimeout के हाथ दे रहे हैं और कह रहे हैं "इसे 3 सेकंड में कॉल करना।" ### अनाम फंक्शन्स कभी-कभी आपको बस एक ही काम के लिए फंक्शन चाहिए और आप उसे नाम देना नहीं चाहते। सोचिए – अगर आप फंक्शन को केवल एक बार उपयोग कर रहे हैं, तो क्यों अपने कोड को एक अतिरिक्त नाम से भरें? जावास्क्रिप्ट आपको अनाम फंक्शन्स बनाने देता है – नामहीन फंक्शन्स जिन्हें आप ठीक वहीं परिभाषित कर सकते हैं जहाँ आपको जरूरत हो। यहाँ हमारा टाइमर उदाहरण अनाम फंक्शन का उपयोग कर कैसे दिखेगा: यह वही परिणाम प्राप्त करता है, लेकिन फंक्शन setTimeout कॉल के भीतर सीधे परिभाषित होता है, जिससे अलग फंक्शन डिक्लेरेशन की जरूरत खत्म हो जाती है। ### फैट ऐरो फंक्शन्स आधुनिक जावास्क्रिप्ट में फंक्शन्स लिखने का एक और भी छोटा तरीका है जिसे ऐरो फंक्शन्स कहते हैं। वे => का उपयोग करते हैं (जो एक तीर की तरह दिखता है – समझे?) और डेवलपर्स के बीच बहुत लोकप्रिय हैं। ऐरो फंक्शन्स आपको function कीवर्ड को छोड़कर अधिक संक्षिप्त कोड लिखने देते हैं। यहाँ हमारा टाइमर उदाहरण ऐरो फंक्शन के साथ है: () वह जगह है जहाँ पैरामीटर होंगे (यहाँ खाली है), फिर ऐरो => आता है, और अंत में फंक्शन शरीर घुंघराले ब्रैकेट्स में। यह समान कार्यक्षमता अधिक संक्षिप्त सिंटैक्स के साथ प्रदान करता है। ### कब कौन सी रणनीति का उपयोग करें आप कब किस approach का उपयोग करें? एक व्यावहारिक गाइडलाइन: यदि आप फंक्शन को कई बार उपयोग करेंगे तो इसे नाम दें और अलग से परिभाषित करें। यदि यह किसी एक विशेष उपयोग के लिए है, तो अनाम फंक्शन पर विचार करें। ऐरो फंक्शन्स और पारंपरिक सिंटैक्स दोनों वैध विकल्प हैं, हालांकि आधुनिक जावास्क्रिप्ट कोडबेस में ऐरो फंक्शन्स अधिक प्रचलित हैं। ### 🎨 फंक्शन स्टाइल मास्टरी चेक: सही सिंटैक्स चुनना अपने सिंटैक्स ज्ञान को जांचें: - आप कब पारंपरिक फंक्शन सिंटैक्स की तुलना में ऐरो फंक्शन्स को प्राथमिकता देंगे? - अनाम फंक्शन्स का मुख्य लाभ क्या है? - क्या आप ऐसी स्थिति सोच सकते हैं जहाँ नामित फंक्शन अनाम फंक्शन से बेहतर हो? --- ## 🚀 चुनौती क्या आप एक वाक्य में फंक्शन्स और मेथड्स के बीच का अंतर स्पष्ट कर सकते हैं? इसे आज़माएं! ## GitHub Copilot एजेंट चुनौती 🚀 एजेंट मोड का उपयोग करके निम्नलिखित चुनौती पूरा करें: विवरण: एक उपयोगिता लाइब्रेरी बनाएं जो इस पाठ में कवर किए गए विभिन्न फंक्शन कॉन्सेप्ट्स जैसे पैरामीटर, डिफ़ॉल्ट मान, रिटर्न मान, और ऐरो फंक्शन्स को प्रदर्शित करती हो। प्रांप्ट: एक जावास्क्रिप्ट फाइल mathUtils.js बनाएं जिसमें निम्नलिखित फंक्शन्स हों: 1. एक फंक्शन add जो दो पैरामीटर ले और उनका योग वापस करे 2. एक फंक्शन multiply जिसमें डिफ़ॉल्ट पैरामीटर मान हों (दूसरा पैरामीटर डिफ़ॉल्ट 1) 3. एक ऐरो फंक्शन square जो एक नंबर ले और उसका वर्ग वापस करे 4. एक फंक्शन calculate जो एक अन्य फंक्शन को पैरामीटर के रूप में स्वीकार करे और दो नंबर, फिर उस फंक्शन को उन नंबरों पर लागू करे 5. उपयुक्त टेस्ट केस के साथ प्रत्येक फंक्शन को कॉल करना प्रदर्शित करें एजेंट मोड के बारे में अधिक जानने के लिए यहाँ देखें। ## पोस्ट-लेक्चर क्विज़ पोस्ट-लेक्चर क्विज़ ## समीक्षा और आत्म-अध्ययन यह थोड़ा और पढ़ने लायक है कि ऐरो फंक्शन्स के बारे में क्योंकि इन्हें कोड बेस में बढ़ चढ़ कर उपयोग किया जा रहा है। फंक्शन्स लिखने का अभ्यास करें, और फिर इसे नए सिंटैक्स के साथ दोबारा लिखें। ## असाइनमेंट फंक्शन्स के साथ मज़ा --- ## 🧰 आपका JavaScript फंक्शन्स टूलकिट सारांश --- ## 🚀 आपकी JavaScript फंक्शन्स मास्टरी टाइमलाइन ### ⚡ आप अगले 5 मिनट में क्या कर सकते हैं - [ ] एक साधारण फंक्शन लिखें जो आपका पसंदीदा नंबर वापस करता हो - [ ] दो पैरामीटर वाला एक फंक्शन बनाएं जो उन्हें जोड़ता हो - [ ] पारंपरिक फ़ंक्शन को तीर फ़ंक्शन सिंटैक्स में बदलने का प्रयास करें - [ ] चुनौती का अभ्यास करें: फ़ंक्शन और मेथड के बीच का अंतर समझाएं ### 🎯 इस घंटे में आप क्या हासिल कर सकते हैं - [ ] पोस्ट-लीसन क्विज़ पूरा करें और किसी भी भ्रमित करने वाली अवधारणाओं की समीक्षा करें - [ ] GitHub Copilot चुनौती से गणित यूटिलिटीज़ लाइब्रेरी बनाएं - [ ] एक ऐसा फ़ंक्शन बनाएं जो पैरामीटर के रूप में एक अन्य फ़ंक्शन का उपयोग करता हो - [ ] डिफ़ॉल्ट पैरामीटर के साथ फ़ंक्शन लिखने का अभ्यास करें - [ ] फ़ंक्शन रिटर्न वैल्यूज़ में टेम्पलेट लिटरेक्स के साथ प्रयोग करें ### 📅 आपका सप्ताह भर का फ़ंक्शन मास्टरी - [ ] "फ़नों के साथ मज़ा" असाइनमेंट को रचनात्मकता के साथ पूरा करें - [ ] कुछ दोहराए जाने वाले कोड को पुनःप्रयोग योग्य फ़ंक्शनों में सुधारें - [ ] केवल फ़ंक्शनों का उपयोग करके एक छोटा कैलकुलेटर बनाएं (कोई ग्लोबल वेरिएबल नहीं) - [ ] map() और filter() जैसे एरे मेथड्स के साथ तीर फ़ंक्शनों का अभ्यास करें - [ ] आम कार्यों के लिए उपयोगिता फ़ंक्शनों का संग्रह बनाएं - [ ] उच्च-स्तरीय फ़ंक्शनों और फ़ंक्शनल प्रोग्रामिंग अवधारणाओं का अध्ययन करें ### 🌟 आपका महीने भर का परिवर्तन - [ ] क्लोज़र और स्कोप जैसे उन्नत फ़ंक्शन अवधारणाओं में महारत हासिल करें - [ ] एक ऐसा प्रोजेक्ट बनाएं जो फ़ंक्शन कम्पोज़िशन का भारी उपयोग करता हो - [ ] फ़ंक्शन दस्तावेज़ीकरण को बेहतर करके ओपन सोर्स में योगदान दें - [ ] किसी और को फ़ंक्शन्स और विभिन्न सिंटैक्स शैलियों के बारे में सिखाएं - [ ] जावास्क्रिप्ट में फ़ंक्शनल प्रोग्रामिंग तरीके खोजें - [ ] भविष्य के प्रोजेक्ट्स के लिए पुनःप्रयोग योग्य फ़ंक्शनों की व्यक्तिगत लाइब्रेरी बनाएं ### 🏆 अंतिम फ़ंक्शन्स चैंपियन चेक-इन अपनी फ़ंक्शन मास्टरी का जश्न मनाएं: - अब तक आपने सबसे उपयोगी फ़ंक्शन कौन सा बनाया है? - फ़ंक्शन्स के बारे में सीखने से आपने कोड संगठन के बारे में अपना दृष्टिकोण कैसे बदला है? - आप कौन सी फ़ंक्शन सिंटैक्स पसंद करते हैं और क्यों? - आप कौन सा वास्तविक दुनिया का समस्या फ़ंक्शन लिखकर हल करेंगे? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> अस्वीकरण: इस दस्तावेज़ का अनुवाद एआई अनुवाद सेवा Co-op Translator का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में प्राधिकारी स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफ़हमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript बुनियादी बातें: निर्णय लेना

क्या आपने कभी सोचा है कि एप्लिकेशन कैसे स्मार्ट निर्णय लेते हैं? जैसे एक नेविगेशन सिस्टम सबसे तेज रास्ता कैसे चुनता है, या एक थर्मोस्टेट गर्मी कब चालू करता है? यह प्रोग्रामिंग में निर्णय लेने की मूल अवधारणा है। जैसे कि चार्ल्स बैबेज के एनालिटिकल इंजन को विभिन्न ऑपरेशनों के क्रमों का पालन करने के लिए डिज़ाइन किया गया था, जो स्थितियों पर आधारित थे, आधुनिक जावास्क्रिप्ट प्रोग्राम को भी विभिन्न परिस्थितियों के आधार पर चयन करना होता है। इस शाखा क्षमता और निर्णय लेने की क्षमता से स्थैतिक कोड को प्रतिक्रियाशील, बुद्धिमान एप्लिकेशन में बदल दिया जाता है। इस पाठ में, आप अपने प्रोग्रामों में सशर्त लॉजिक को लागू करना सीखेंगे। हम सशर्त कथन, तुलना ऑपरेटर, और तार्किक अभिव्यक्तियों का पता लगाएंगे जो आपके कोड को स्थितियों का मूल्यांकन करने और उपयुक्त प्रतिक्रिया देने की अनुमति देते हैं। ## प्री-लेक्चर क्विज़ प्री-लेक्चर क्विज़ निर्णय लेने और प्रोग्राम फ्लो को नियंत्रित करने की क्षमता प्रोग्रामिंग का एक मूलभूत पहलू है। इस खंड में Boolean मानों और सशर्त लॉजिक का उपयोग करके अपने जावास्क्रिप्ट प्रोग्रामों के निष्पादन पथ को नियंत्रित करना शामिल है। [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## बूलियन पर संक्षिप्त पुनरावलोकन निर्णय लेने की खोज करने से पहले, चलिए पिछले पाठ से Boolean मानों को फिर से देखते हैं। गणितज्ञ जॉर्ज बूल के नाम पर, ये मान बाइनरी स्थितियों का प्रतिनिधित्व करते हैं – या तो true या false। यहां कोई अस्पष्टता नहीं है, कोई मध्य स्तर नहीं है। ये बाइनरी मान सभी कम्प्यूटेशनल लॉजिक की नींव बनाते हैं। आपके प्रोग्राम का हर निर्णय अंततः एक Boolean मूल्यांकन में संक्षिप्त हो जाता है। Boolean चर बनाना सरल है: यह स्पष्ट Boolean मानों के साथ दो चर बनाता है। ✅ बूलियन का नाम अंग्रेज़ गणितज्ञ, दार्शनिक और तर्कशास्त्री जॉर्ज बूल (1815–1864) के नाम पर रखा गया है। ## तुलना ऑपरेटर और बूलियन्स व्यवहार में, आप शायद ही कभी Boolean मान मैन्युअली सेट करते हैं। इसके बजाय, आप उन्हें शर्तों का मूल्यांकन करके उत्पन्न करेंगे: "क्या यह संख्या उस संख्या से बड़ी है?" या "क्या ये मान बराबर हैं?" तुलना ऑपरेटर ये मूल्यांकन संभव बनाते हैं। वे मानों की तुलना करते हैं और ऑपरेण्ड के बीच संबंध के आधार पर Boolean परिणाम लौटाते हैं। ✅ अपने ब्राउज़र के कंसोल में कुछ तुलना लिखकर अपनी जानकारी जांचें। क्या कोई वापस किया गया डेटा आपको आश्चर्यचकित करता है? ### 🧠 तुलना मास्टरी जांच: बूलियन लॉजिक समझना अपनी तुलना समझ का परीक्षण करें: - आप क्यों सोचते हैं कि === (सख्त समानता) आमतौर पर == (ढीली समानता) से बेहतर है? - क्या आप अनुमान लगा सकते हैं कि 5 === '5' क्या लौटाएगा? और 5 == '5'? - !== और != में क्या अंतर है? ## If स्टेटमेंट if स्टेटमेंट आपके कोड में एक प्रश्न पूछने जैसा है। "यदि यह शर्त सही है, तो यह काम करें।" यह शायद जावास्क्रिप्ट में निर्णय लेने के लिए सबसे महत्वपूर्ण उपकरण है। यह इस प्रकार काम करता है: शर्त को कोष्ठकों के अंदर रखा जाता है, और यदि यह true है, तो जावास्क्रिप्ट कर्ली ब्रेसेस के अंदर कोड चलाता है। यदि यह false है, तो जावास्क्रिप्ट पूरे ब्लॉक को छोड़ देता है। आप अक्सर इन शर्तों को बनाने के लिए तुलना ऑपरेटर का उपयोग करेंगे। चलिए एक व्यावहारिक उदाहरण देखें: चूंकि 1000 >= 800 का मूल्यांकन true होता है, ब्लॉक के अंदर का कोड निष्पादित होता है, और कंसोल में "नई लैपटॉप खरीदना!" प्रदर्शित होता है। ## If..Else स्टेटमेंट लेकिन क्या होगा यदि आप चाहते हैं कि जब शर्त गलत हो तो आपका प्रोग्राम कुछ अलग करे? यही वह जगह है जहाँ else काम आता है – यह एक बैकअप योजना की तरह है। else स्टेटमेंट आपको यह कहने का तरीका देता है कि "यदि यह शर्त सही नहीं है, तो इसके बजाय यह काम करें।" अब चूंकि 500 >= 800 गलत है, जावास्क्रिप्ट पहला ब्लॉक छोड़ देता है और उसके बजाय else ब्लॉक चलाता है। आपको कंसोल में "अभी नई लैपटॉप खरीदने का बजट नहीं है!" दिखाई देगा। ✅ इस कोड और निम्न कोड को ब्राउज़र कंसोल में चलाकर अपनी समझ जांचें। currentMoney और laptopPrice वेरिएबल के मान बदलकर console.log() के आउटपुट को परिवर्तित करें। ### 🎯 If-Else लॉजिक जांच: शाखाएं अपनी सशर्त लॉजिक समझ का मूल्यांकन करें: - अगर currentMoney ठीक laptopPrice के बराबर है तो क्या होगा? - क्या आप कोई वास्तविक जीवन का परिदृश्य सोच सकते हैं जहाँ if-else लॉजिक उपयोगी होगा? - आप इसे कैसे बढ़ा सकते हैं ताकि कई मूल्य सीमा को संभाला जा सके? ## Switch स्टेटमेंट कभी-कभी आपको एक मान की तुलना कई विकल्पों से करनी होती है। जबकि आप कई if..else स्टेटमेंट्स को कड़ी से जोड़ सकते हैं, यह तरीका बोझिल हो जाता है। switch स्टेटमेंट कई विशिष्ट मानों को संभालने के लिए एक साफ-सुथरी संरचना प्रदान करता है। यह अवधारणा प्रारंभिक टेलीफोन एक्सचेंज में इस्तेमाल होने वाले मैकेनिकल स्विचिंग सिस्टम से मिलती-जुलती है – एक इनपुट मान यह निर्धारित करता है कि निष्पादन किस विशिष्ट पथ का अनुसरण करता है। यह इस प्रकार संरचित है: - जावास्क्रिप्ट अभिव्यक्ति का एक बार मूल्यांकन करता है - यह हर case को देखता है ताकि मेल मिले - जब मेल मिलता है, तो वह कोड ब्लॉक रन करता है - break जावास्क्रिप्ट को रोकने और स्विच से बाहर निकलने का संकेत देता है - अगर कोई मेल नहीं मिलता है, तो यह default ब्लॉक चलाता है (अगर आप रखते हैं) इस उदाहरण में, जावास्क्रिप्ट देखता है कि dayNumber 2 है, मेल खाने वाला case 2 पाता है, dayName को "Tuesday" सेट करता है, और फिर स्विच से बाहर निकल जाता है। परिणाम? "Today is Tuesday" कंसोल में लॉग होता है। ✅ इस कोड और निम्नलिखित कोड को ब्राउज़र कंसोल में चलाकर अपनी समझ की जांच करें। वैरिएबल a के मान बदलकर console.log() के आउटपुट को परिवर्तित करें। ### 🔄 Switch स्टेटमेंट मास्टरी: कई विकल्प अपनी स्विच की समझ का परीक्षण करें: - क्या होता है यदि आप break स्टेटमेंट भूल जाते हैं? - आप कब कई if-else स्टेटमेंट के बजाय switch का उपयोग करेंगे? - यदि आपको लगता है कि आपने सभी संभावनाएं कवर कर ली हैं, तब भी default केस क्यों उपयोगी है? ## तार्किक ऑपरेटर और बूलियन जटिल निर्णयों के लिए अक्सर एक साथ कई शर्तों का मूल्यांकन करना पड़ता है। जिस तरह Boolean बीजगणित गणितज्ञों को तार्किक अभिव्यक्तियों को संयोजित करने की अनुमति देता है, प्रोग्रामिंग तार्किक ऑपरेटर प्रदान करता है जो कई Boolean शर्तों को जोड़ते हैं। ये ऑपरेटर सरल true/false मूल्यांकन को जोड़कर परिष्कृत सशर्त लॉजिक को सक्षम बनाते हैं। ये ऑपरेटर आपको शर्तों को उपयोगी तरीकों से जोड़ने देते हैं: - AND (&&) का मतलब है दोनों शर्तें सही होनी चाहिए - OR (||) का मतलब है कम से कम एक शर्त सही होनी चाहिए - NOT (!) true को false में और विपरीत में बदल देता है ## तार्किक ऑपरेटर के साथ स्थितियां और निर्णय आइए एक अधिक यथार्थवादी उदाहरण के साथ इन तार्किक ऑपरेटर को देखें: इस उदाहरण में: हम 20% छूट कीमत (640) की गणना करते हैं, फिर मूल्यांकन करते हैं कि क्या हमारे पास उपलब्ध धन पूरी कीमत OR छूट कीमत दोनों में से किसी एक को कवर करता है। चूंकि 600 छूट कीमत सीमा 640 से कम है, इसलिए शर्त true नहीं होती। ### 🧮 तार्किक ऑपरेटर जांच: शर्तों को संयोजित करना अपने तार्किक ऑपरेटर की समझ का परीक्षण करें: - A && B अभिव्यक्ति में यदि A गलत है तो क्या होता है? क्या B भी मूल्यांकन होता है? - क्या आप ऐसी स्थिति सोच सकते हैं जहाँ आपको तीनों ऑपरेटर (&&, ||, !) एक साथ उपयोग करने होंगे? - !user.isActive और user.isActive !== true में क्या अंतर है? ### नेगेशन ऑपरेटर कभी-कभी यह सोचना आसान होता है कि जब कोई चीज सही नहीं हो। जैसे "क्या उपयोगकर्ता लॉग इन है?" पूछने के बजाय, आप पूछना चाहते हैं "क्या उपयोगकर्ता लॉग इन नहीं है?" निषेध चिन्ह (!) ऑपरेटर आपके लिए लॉजिक उलट देता है। ! ऑपरेटर ऐसा है जैसे कहना "इसके विपरीत..." – यदि कुछ true है, तो ! इसे false बना देता है, और इसके विपरीत। ### टर्नरी एक्सप्रेशंस सरल सशर्त असाइनमेंट के लिए, जावास्क्रिप्ट टर्नरी ऑपरेटर प्रदान करता है। यह संक्षिप्त सिंटैक्स एक लाइन में सशर्त अभिव्यक्ति लिखने की अनुमति देता है, जब आपको किसी शर्त के आधार पर दो मानों में से एक असाइन करना हो तो यह उपयोगी होता है। यह ऐसा पढ़ता है: "क्या यह शर्त सही है? यदि हाँ, तो इस मान का उपयोग करें। यदि नहीं, तो उस मान का।" निम्नलिखित अधिक ठोस उदाहरण है: ✅ इस कोड को कुछ बार पढ़ें। क्या आपको समझ आता है कि ये ऑपरेटर कैसे काम कर रहे हैं? यह लाइन कह रही है: "क्या firstNumber, secondNumber से बड़ा है? यदि हाँ, तो biggestNumber में firstNumber डालो। यदि नहीं, तो secondNumber डालो।" टर्नरी ऑपरेटर पारंपरिक if..else स्टेटमेंट को लिखने का एक छोटा तरीका है: दोनों तरीकों से समान परिणाम मिलते हैं। टर्नरी ऑपरेटर संक्षिप्तता प्रदान करता है, जबकि पारंपरिक if-else संरचना जटिल स्थितियों के लिए अधिक पठनीय हो सकती है। --- ## 🚀 चुनौती एक प्रोग्राम बनाएं जो पहले तार्किक ऑपरेटरों के साथ लिखा गया हो, और फिर एक टर्नरी एक्सप्रेशन का उपयोग करके फिर से लिखें। आपकी प्राथमिकता कौन सा सिंटैक्स है? --- ## GitHub Copilot Agent चुनौती 🚀 Agent मोड का उपयोग करके निम्नलिखित चुनौती पूरी करें: विवरण: एक व्यापक ग्रेड कैल्कुलेटर बनाएं जो इस पाठ के कई निर्णय लेने की अवधारणाओं को दर्शाता हो, जिसमें if-else स्टेटमेंट, switch स्टेटमेंट, तार्किक ऑपरेटर, और टर्नरी एक्सप्रेशन शामिल हों। प्रॉम्प्ट: एक जावास्क्रिप्ट प्रोग्राम लिखें जो छात्र के संख्यात्मक स्कोर (0-100) को लेकर उनके लेटर ग्रेड का निर्धारण करता है निम्नलिखित मानदंडों के अनुसार: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 से नीचे आवश्यकताएँ: 1. लेटर ग्रेड निर्धारित करने के लिए if-else स्टेटमेंट का उपयोग करें 2. लॉजिकल ऑपरेटर का उपयोग करें ताकि यह जांचा जा सके कि छात्र पास हुआ है (ग्रेड >= 60) और सम्मान भी प्राप्त किया है (ग्रेड >= 90) 3. प्रत्येक पत्र ग्रेड के लिए विशिष्ट प्रतिक्रिया प्रदान करने के लिए स्विच स्टेटमेंट का उपयोग करें 4. यह निर्धारित करने के लिए टर्नरी ऑपरेटर का उपयोग करें कि क्या छात्र अगले कोर्स के लिए पात्र है (ग्रेड >= 70) 5. सुनिश्चित करने के लिए इनपुट सत्यापन शामिल करें कि स्कोर 0 और 100 के बीच है अपने प्रोग्राम को विभिन्न स्कोर के साथ परीक्षण करें, जिसमें 59, 60, 89, 90 जैसे किनारे के मामले और अमान्य इनपुट शामिल हैं। agent mode के बारे में अधिक जानें। ## पोस्ट-लेक्चर क्विज़ पोस्ट-लेक्चर क्विज़ ## समीक्षा और स्व-अध्ययन उपयोगकर्ता के लिए उपलब्ध कई ऑपरेटरों के बारे में अधिक पढ़ें MDN पर। Josh Comeau के अद्भुत ऑपरेटर लुकअप को देखें! ## असाइनमेंट ऑपरेटर --- ## 🧠 आपके निर्णय लेने के उपकरण किट सारांश --- ## 🚀 आपकी JavaScript निर्णय लेने की महारत की समयरेखा ### ⚡ अगले 5 मिनट में आप क्या कर सकते हैं - [ ] अपने ब्राउज़र कंसोल में तुलना ऑपरेटर्स का अभ्यास करें - [ ] एक साधारण if-else स्टेटमेंट लिखें जो आपकी उम्र जांचता है - [ ] चुनौती लें: if-else को टर्नरी ऑपरेटर का उपयोग करके पुनः लिखें - [ ] अलग-अलग "सत्य" और "असत्य" मूल्यों के साथ क्या होता है, इसका परीक्षण करें ### 🎯 इस घंटे में आप क्या हासिल कर सकते हैं - [ ] पोस्ट-लेसन क्विज़ पूरा करें और किसी भी भ्रमित करने वाली अवधारणा की समीक्षा करें - [ ] GitHub Copilot चुनौती से व्यापक ग्रेड गणक बनाएं - [ ] किसी वास्तविक दुनिया की स्थिति के लिए एक सरल निर्णय वृक्ष बनाएं (जैसे क्या पहनना है चुनना) - [ ] लॉजिकल ऑपरेटर के साथ एक से अधिक शर्तों को संयोजित करने का अभ्यास करें - [ ] विभिन्न उपयोग मामलों के लिए स्विच स्टेटमेंट के साथ प्रयोग करें ### 📅 आपके एक सप्ताह के लॉजिक कौशल - [ ] रचनात्मक उदाहरणों के साथ ऑपरेटर असाइनमेंट पूरा करें - [ ] विभिन्न कंडीशनल संरचनाओं का उपयोग करते हुए एक मिनी क्विज एप्लिकेशन बनाएं - [ ] एक फॉर्म वेलीडेटर बनाएं जो कई इनपुट शर्तों की जांच करता हो - [ ] Josh Comeau के ऑपरेटर लुकअप अभ्यास करें - [ ] मौजूदा कोड को अधिक उपयुक्त कंडीशनल संरचनाओं का उपयोग करने के लिए पुनर्गठित करें - [ ] शॉर्ट-सर्किट मूल्यांकन और प्रदर्शन प्रभाव का अध्ययन करें ### 🌟 आपका महीने भर का परिवर्तन - [ ] जटिल नेस्टेड शर्तों में महारत हासिल करें और कोड की पठनीयता बनाए रखें - [ ] परिष्कृत निर्णय लेने के तर्क के साथ एक एप्लिकेशन बनाएं - [ ] मौजूदा प्रोजेक्ट्स में conditional logic बेहतर बनाकर ओपन सोर्स में योगदान दें - [ ] किसी और को विभिन्न कंडीशनल संरचनाओं और कब किसका उपयोग करें, यह सिखाएं - [ ] कंडीशनल लॉजिक के लिए फंक्शनल प्रोग्रामिंग दृष्टिकोण खोजें - [ ] कंडीशनल सर्वोत्तम प्रथाओं के लिए एक व्यक्तिगत संदर्भ गाइड बनाएं ### 🏆 अंतिम निर्णय लेने वाले चैम्पियन चेक-इन अपने तार्किक सोच की महारत का जश्न मनाएं: - आपने अब तक सबसे जटिल निर्णय लॉजिक क्या सफलतापूर्वक लागू किया है? - कौन सी कंडीशनल संरचना आपके लिए सबसे स्वाभाविक लगती है और क्यों? - लॉजिकल ऑपरेटर के बारे में सीखने ने आपकी समस्या-समाधान विधि को कैसे बदला है? - कौन सा वास्तविक दुनिया का अनुप्रयोग परिष्कृत निर्णय लेने वाले लॉजिक से लाभान्वित होगा? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> अस्वीकरण: इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा Co-op Translator का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript मूल बातें: Arrays और Loops

## प्री-लेक्चर क्विज़ प्री-लेक्चर क्विज़ क्या आपने कभी सोचा है कि वेबसाइट्स शॉपिंग कार्ट आइटम्स को कैसे ट्रैक करती हैं या आपका फ्रेंड लिस्ट कैसे दिखाती हैं? यहीं पर arrays और loops काम में आते हैं। Arrays डिजिटल कंटेनरों की तरह होते हैं जो कई जानकारी के टुकड़े रखते हैं, जबकि loops आपको सभी डेटा के साथ कुशलता से काम करने देते हैं बिना बार-बार कोड लिखे। इन दोनों कॉन्सेप्ट्स का संयोजन आपके प्रोग्रामों में जानकारी को संभालने की नींव बनाता है। आप सीखेंगे कि कैसे हर एक स्टेप मैन्युअल रूप से लिखने से कैसे स्मार्ट और प्रभावी कोड बना सकते हैं जो सैकड़ों या हजारों आइटम्स को तेज़ी से प्रोसेस कर सकता है। इस पाठ के अंत तक, आप समझ जाएंगे कि कुछ लाइनों के कोड द्वारा कैसे जटिल डेटा टास्क किए जा सकते हैं। आइए इन आवश्यक प्रोग्रामिंग कॉन्सेप्ट्स को एक्सप्लोर करें। [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Arrays को एक डिजिटल फाइलिंग कैबिनेट की तरह सोचें - जहाँ एक ड्रॉअर में एक दस्तावेज़ संग्रहीत करने की बजाय, आप कई संबंधित आइटम को एक संरचित कंटेनर में व्यवस्थित कर सकते हैं। प्रोग्रामिंग की भाषा में, arrays आपको एक संगठित पैकेज में कई सूचनाओं को स्टोर करने देते हैं। चाहे आप एक फोटो गैलरी बना रहे हों, एक टू-डू लिस्ट मैनेज कर रहे हों, या गेम में हाई स्कोर ट्रैक कर रहे हों, arrays डेटा संगठन की नींव प्रदान करते हैं। आइए देखें वे कैसे काम करते हैं। ✅ Arrays हमारे चारों ओर हैं! क्या आप एक वास्तविक जीवन का उदाहरण सोच सकते हैं, जैसे सोलर पैनल एरे? ### Arrays बनाना Array बनाना बहुत सरल है - बस स्क्वायर ब्रैकेट्स का इस्तेमाल करें! यहाँ क्या हो रहा है? आपने बस उन स्क्वायर ब्रैकेट्स [] का उपयोग करके एक खाली कंटेनर बनाया है। इसे एक खाली पुस्तकालय की शेल्फ़ की तरह सोचें - यह उस पर आप जो भी पुस्तकें रखना चाहें, उसके लिए तैयार है। आप अपने array को शुरू से ही प्रारंभिक मानों से भी भर सकते हैं: ध्यान देने वाली अच्छी बातें: - आप टेक्स्ट, संख्याएँ, या true/false मान एक ही array में रख सकते हैं - केवल प्रत्येक आइटम को कॉमा से अलग करें - आसान! - Arrays संबंधित जानकारी को एक साथ रखने के लिए परफेक्ट हैं ### Array इंडेक्सिंग यहाँ कुछ ऐसा है जो शुरुआत में थोड़ा अजीब लग सकता है: arrays अपने आइटम्स को 0 से नंबर करते हैं, ना कि 1 से। यह शून्य-आधारित इंडेक्सिंग कंप्यूटर मेमोरी के काम करने वाले तरीके से प्रभावित है - यह कंप्यूटरिंग भाषाओं जैसे C के प्रारंभिक दिनों से एक प्रोग्रामिंग कन्वेंशन रहा है। Array का प्रत्येक स्थान अपने स्वयं के एड्रेस नंबर को प्राप्त करता है जिसे index कहते हैं। ✅ क्या यह आपको आश्चर्यचकित करता है कि arrays 0 से शुरू होते हैं? कुछ प्रोग्रामिंग भाषाओं में, इंडेक्स 1 से शुरू होते हैं। इसके पीछे एक दिलचस्प इतिहास है, जिसे आप विकिपीडिया पर पढ़ सकते हैं। Array एलिमेंट्स तक पहुँच: यहाँ क्या हो रहा है: - इस्तेमाल करता है स्क्वायर ब्रैकेट नोटेशन इंडेक्स नंबर के साथ एलिमेंट तक पहुँचने के लिए - रिटर्न करता है उस खास स्थान पर जो मान स्टोर है - गिनती शुरू करता है 0 से, जिससे पहला एलिमेंट इंडेक्स 0 होता है Array एलिमेंट्स को संशोधित करना: ऊपर दिए गए में हमने: - संशोधित किया इंडेक्स 4 पर मौजूद "Rocky Road" को "Butter Pecan" में - जोड़ा नया एलिमेंट "Cookie Dough" इंडेक्स 5 पर - स्वतः बढ़ाई array की लंबाई जब सीमा से बाहर जोड़ा गया ### Array Length और सामान्य मेथड्स Arrays में अंतर्निहित प्रॉपर्टीज़ और मेथड्स होती हैं जो डेटा के साथ काम करना बहुत आसान बनाती हैं। Array लंबाई पता करना: मुख्य बातें याद रखें: - रिटर्न करता है array के टोटल आइटम की संख्या - स्वतः अपडेट होता है जब आइटम जोड़े या हटाए जाते हैं - प्रदान करता है डायनामिक काउंट जो loops और सत्यापन के लिए उपयोगी है अत्यावश्यक Array मेथड्स: इन मेथड्स को समझना: - push() (अंत में) और unshift() (शुरुआत में) से आइटम जोड़ता है - pop() (अंत में) और shift() (शुरुआत में) से आइटम हटाता है - indexOf() से आइटम ढूंढ़ता है और includes() से अस्तित्व जांचता है - हटाए गए elements या पोजीशन इंडेक्स जैसे उपयोगी मान वापस करता है ✅ खुद आज़माइए! अपने ब्राउज़र के कंसोल में अपना खुद का एक array बनाकर उससे खेलें। ### 🧠 Array मूल बातें जांच: अपने डेटा को व्यवस्थित करना अपने array की समझ कैसे जांचें: - आप क्यों सोचते हैं कि arrays 0 से गिनती शुरू करते हैं, 1 से नहीं? - क्या होता है अगर आप किसी ऐसे इंडेक्स का एक्सेस करें जो मौजूद नहीं है (जैसे arr[100] जब array में 5 आइटम हों)? - क्या आप तीन वास्तविक दुनिया के उदाहरण सोच सकते हैं जहाँ arrays उपयोगी होंगे? ## Loops सोचिए कि चार्ल्स डिकेंस के उपन्यासों में प्रसिद्ध सजा जहाँ छात्रों को स्लेट पर बार-बार पंक्तियाँ लिखनी पड़ती थीं। कल्पना करें कि आप किसी को केवल आदेश दे सकें कि "इस वाक्य को 100 बार लिखो" और यह अपने आप हो जाए। यही loops आपके कोड के लिए करते हैं। Loops ऐसे हैं जैसे आपके पास एक थकता नहीं सहायक हो जो बिना गलती के काम दोहराता रहता है। चाहे आपको शॉपिंग कार्ट के हर आइटम को चेक करना हो या किसी एल्बम के सभी फ़ोटो दिखाने हों, loops दोहराव को कुशलतापूर्वक संभालते हैं। JavaScript कई प्रकार के loops प्रदान करता है। आइए प्रत्येक को देखें और समझें कि उन्हें कब उपयोग करना चाहिए। ### For Loop for loop ऐसा है जैसे टाइमर सेट करना - आपको पता होता है कि किसी काम को कितनी बार करना है। यह सुपर ऑर्गनाइज़्ड और प्रेडिक्टेबल होता है, जो इसके perfect बनाता है जब आप arrays के साथ काम कर रहे हों या गिनती करनी हो। For loop संरचना: कदम दर कदम, यहाँ क्या हो रहा है: - शुरुआत में काउंटर वेरिएबल i को 0 वैल्यू देता है - हर पुनरावृति से पहले शर्त i < 10 की जांच करता है - जब शर्त सही होती है तब कोड ब्लॉक को एक्सीक्यूट करता है - हर पुनरावृति के बाद i++ से i को 1 से बढ़ाता है - जब शर्त गलत हो जाती है (जब i 10 पहुँचता है) तो बंद हो जाता है ✅ इस कोड को ब्राउज़र कंसोल में चलाएं। क्या होता है जब आप काउंटर, शर्त, या पुनरावृत्ति एक्सप्रेशन में छोटे बदलाव करते हैं? क्या आप इसे उल्टा कर सकते हैं, काउंटडाउन बनाते हुए? ### 🗓️ For Loop महारत परीक्षा: नियंत्रित दोहराव अपने for loop की समझ की जाँच करें: - for loop के तीन भाग क्या हैं और प्रत्येक क्या करता है? - आप कैसे array में उल्टी दिशा से loop करेंगे? - क्या होता है अगर आप increment पार्ट (i++) भूल जाते हैं? ### While Loop while loop ऐसा है जैसे कह रहे हों "जब तक यह शर्त सही है तब तक करते रहो" - आपको नहीं पता होता कि यह कितनी बार चलेगा, लेकिन पता होता है कि कब रुकना है। यह तब परफेक्ट होता है जब आपको उपयोगकर्ता से इनपुट मांगते रहना हो या डेटा खोजते रहना हो जब तक कुछ न मिल जाए। While loop की विशेषताएँ: - शर्त सही होने तक चलता रहता है - मैन्युअल रूप से किसी भी काउंटर वेरिएबल को मैनेज करने की जरूरत होती है - हर पुनरावृति से पहले शर्त की जांच करता है - अगर शर्त कभी गलत न हो तो अनंत loops का खतरा होता है इन उदाहरणों को समझें: - काउंटर वेरिएबल i को लूप के अंदर मैन्युअल रूप से नियंत्रित करता है - असीमित loops से बचने के लिए काउंटर बढ़ाता है - उपयोगकर्ता इनपुट और प्रयास सिमित करने के व्यावहारिक उदाहरण दिखाता है - अंतहीन निष्पादन से बचाव के लिए सुरक्षा तंत्र शामिल करता है ### ♾️ While Loop ज्ञान परीक्षा: शर्त-आधारित दोहराव अपने while loop की समझ की जाँच करें: - while loops का मुख्य खतरा क्या है? - आप किस स्थिति में for loop के बजाय while loop चुनेंगे? - आप अनंत loops को कैसे रोक सकते हैं? ### आधुनिक Loop विकल्प JavaScript आधुनिक loop सिंटैक्स प्रदान करता है जो आपके कोड को अधिक पठनीय और त्रुटि-रहित बना सकता है। For...of Loop (ES6+): for...of के मुख्य फायदे: - इंडेक्स प्रबंधन और ऑफ-बाय-वन त्रुटियों को खत्म करता है - सीधे array एलिमेंट्स तक पहुंच प्रदान करता है - कोड पठनीयता में सुधार करता है और सिंटैक्स जटिलता कम करता है forEach मेथड: forEach के बारे में जानने योग्य: - हर array एलिमेंट के लिए एक फ़ंक्शन को चलाता है - एलिमेंट वैल्यू और इंडेक्स दोनों को पैरामीटर के रूप में प्रदान करता है - शुरुआत में रोकना संभव नहीं (पारंपरिक loops की तरह) - undefined रिटर्न करता है (यह नया array नहीं बनाता) ✅ आप for loop और while loop में से क्यों चुनेंगे? StackOverflow पर 17K दर्शकों ने यही सवाल किया था, और कुछ राय आपके लिए रोचक हो सकती हैं। ### 🎨 आधुनिक Loop सिंटैक्स जांच: ES6+ को अपनाना अपने आधुनिक JavaScript ज्ञान का मूल्यांकन करें: - for...of के पारंपरिक for loops पर क्या फायदे हैं? - आप कब पारंपरिक for loops को प्राथमिकता देंगे? - forEach और map में क्या अंतर है? ## Loops और Arrays Arrays को loops के साथ मिलाकर शक्तिशाली डेटा प्रोसेसिंग क्षमताएं बनती हैं। यह संयोजन कई प्रोग्रामिंग कार्यों की नींव है, जैसे सूचियाँ दिखाना या सांख्यकीय गणना करना। परंपरागत Array प्रोसेसिंग: आइए प्रत्येक दृष्टिकोण को समझें: - लूप सीमा निर्धारित करने के लिए array length प्रॉपर्टी का उपयोग करता है - पारंपरिक for loops में इंडेक्स के द्वारा एलिमेंट्स को एक्सेस करता है - for...of loops में सीधे एलिमेंट एक्सेस प्रदान करता है - प्रत्येक array एलिमेंट को ठीक एक बार प्रोसेस करता है व्यावहारिक डेटा प्रोसेसिंग उदाहरण: यह कोड इस तरह काम करता है: - योग और अत्यधिक मानों के लिए ट्रैकिंग वेरिएबल सेट करता है - एक कुशल लूप के साथ प्रत्येक ग्रेड को प्रोसेस करता है - औसत गणना के लिए कुल जमा करता है - प्रत्येक पुनरावृति में उच्चतम और निम्नतम मान ट्रैक करता है - लूप पूरा होने के बाद अंतिम सांख्यिकी गणना करता है ✅ अपने ब्राउज़र कंसोल में अपनी बनाई हुई array पर लूपिंग का प्रयोग करके देखें। --- ## GitHub Copilot एजेंट चुनौती 🚀 एजेंट मोड का उपयोग करके निम्नलिखित चुनौती पूरी करें: विवरण: Arrays और loops को मिलाकर एक व्यापक डेटा प्रोसेसिंग फ़ंक्शन बनाएं जो एक डेटा सेट का विश्लेषण करे और सार्थक अंतर्दृष्टि उत्पन्न करे। प्रॉम्प्ट: एक फ़ंक्शन analyzeGrades बनाएं जो एक array ले जो छात्र ग्रेड ऑब्जेक्ट्स (प्रत्येक में नाम और स्कोर विशेषताएँ हों) को इनपुट लेता हो और एक वस्तु लौटाए जिसमें उच्चतम स्कोर, निम्नतम स्कोर, औसत स्कोर, पास हुए छात्रों की गिनती (स्कोर >= 70), और औसत से ऊपर स्कोर करने वाले छात्रों के नाम की array शामिल हो। अपनी समाधान में कम से कम दो अलग-अलग loop प्रकारों का उपयोग करें। यहाँ agent mode के बारे में और जानें। ## 🚀 चुनौती JavaScript कई आधुनिक एरे मेथड प्रदान करता है जो विशिष्ट कार्यों के लिए परंपरागत लूप्स को बदल सकते हैं। forEach, for-of, map, filter, और reduce का अन्वेषण करें। आपकी चुनौती: कम से कम तीन अलग-अलग एरे मेथड्स का उपयोग करके छात्र ग्रेड्स का उदाहरण पुनः तैयार करें। देखें कि आधुनिक JavaScript सिंटैक्स के साथ कोड कितना साफ और अधिक पठनीय बन जाता है। ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study JavaScript में Arrays के साथ कई मेथड्स जुड़े हुए हैं, जो डेटा हेरफेर के लिए अत्यंत उपयोगी हैं। इन मेथड्स के बारे में पढ़ें और अपने बनाए गए किसी एरे पर कुछ मेथड्स जैसे push, pop, slice, और splice आज़माएँ। ## Assignment Loop an Array --- ## 📊 आपका Arrays & Loops टूलकिट सारांश --- ## 🚀 आपके Arrays & Loops मास्टरी टाइमलाइन ### ⚡ अगले 5 मिनट में आप क्या कर सकते हैं - [ ] अपनी पसंदीदा फिल्मों की एक एरे बनाएं और विशिष्ट तत्वों तक पहुँचें - [ ] 1 से 10 तक गिनने वाला for लूप लिखें - [ ] लेसन में दिए आधुनिक एरे मेथड्स की चुनौती आज़माएं - [ ] अपने ब्राउज़र कंसोल में एरे इंडेक्सिंग का अभ्यास करें ### 🎯 इस घंटे में आप क्या हासिल कर सकते हैं - [ ] पोस्ट-लेसन क्विज़ पूरा करें और कठिन अवधारणाओं की समीक्षा करें - [ ] GitHub Copilot चुनौती से व्यापक ग्रेड विश्लेषक बनाएं - [ ] एक सरल शॉपिंग कार्ट बनाएं जो आइटम जोड़ता और हटाता हो - [ ] विभिन्न लूप प्रकारों के बीच परिवर्तन का अभ्यास करें - [ ] push, pop, slice, और splice जैसे एरे मेथड्स के साथ प्रयोग करें ### 📅 आपकी सप्ताह भर की डेटा प्रोसेसिंग यात्रा - [ ] "Loop an Array" असाइन्मेंट को रचनात्मक सुधारों के साथ पूरा करें - [ ] एरे और लूप्स का उपयोग करके टू-डू लिस्ट एप्लिकेशन बनाएं - [ ] संख्यात्मक डेटा के लिए एक सरल सांख्यिकी कैलकुलेटर बनाएं - [ ] MDN एरे मेथड्स के साथ अभ्यास करें - [ ] एक फोटो गैलरी या म्यूजिक प्लेलिस्ट इंटरफ़ेस बनाएं - [ ] map, filter, और reduce के साथ फंक्शनल प्रोग्रामिंग का अन्वेषण करें ### 🌟 आपका महीने भर का परिवर्तन - [ ] उन्नत एरे ऑपरेशंस और प्रदर्शन अनुकूलन में महारत हासिल करें - [ ] पूर्ण डेटा विज़ुअलाइज़ेशन डैशबोर्ड बनाएं - [ ] डेटा प्रोसेसिंग से संबंधित ओपन सोर्स प्रोजेक्ट्स में योगदान दें - [ ] व्यावहारिक उदाहरणों के साथ दूसरों को एरे और लूप्स सिखाएं - [ ] पुन: उपयोग योग्य डेटा प्रोसेसिंग फंक्शंस की व्यक्तिगत लाइब्रेरी बनाएं - [ ] एरे पर आधारित एल्गोरिदम और डेटा संरचनाओं का अन्वेषण करें ### 🏆 अंतिम डेटा प्रोसेसिंग चैम्पियन चेक-इन अपने एरे और लूप मास्टरी का जश्न मनाएं: - आपने वास्तविक दुनिया के अनुप्रयोगों के लिए सबसे उपयोगी एरे ऑपरेशन क्या सीखा है? - कौन सा लूप प्रकार आपको सबसे प्राकृतिक लगता है और क्यों? - एरे और लूप्स को समझने से आपका डेटा व्यवस्थित करने का दृष्टिकोण कैसे बदला है? - आप अगला कौन सा जटिल डेटा प्रोसेसिंग कार्य करना चाहेंगे? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> अस्वीकरण: यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। यद्यपि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array,loop

Uvod u JavaScript

JavaScript je jezik weba. U ovim četirima lekcijama naučit ćete njegove osnove. ### Teme 1. Varijable i Tipovi Podataka 2. Funkcije i Metode 3. Donošenje Odluka s JavaScriptom 4. Nizovi i Petlje ### Zasluge Ove lekcije napisane su s ♥️ od strane Jasmine Greenaway, Christopher Harrison i Chris Noring --- Odricanje od odgovornosti: Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.

javascript

Osnove JavaScripta: Tipovi podataka

Tipovi podataka su jedan od temeljnih pojmova u JavaScriptu koje ćete susresti u svakom programu koji napišete. Zamislite tipove podataka poput sustava za arhiviranje kojeg su koristili drevni knjižničari u Aleksandriji – imali su posebna mjesta za svitke koji su sadržavali poeziju, matematiku i povijesne zapise. JavaScript organizira informacije na sličan način s različitim kategorijama za različite vrste podataka. U ovoj lekciji istražit ćemo osnovne tipove podataka koji pokreću JavaScript. Naučit ćete kako rukovati brojevima, tekstom, istinitim/neistinitim vrijednostima te zašto je odabir pravog tipa ključan za vaše programe. Ti koncepti mogu u početku djelovati apstraktno, ali s praksom postat će vam prirodni. Razumijevanje tipova podataka učinit će sve ostalo u JavaScriptu mnogo jasnijim. Baš kao što arhitekti trebaju razumjeti različite građevinske materijale prije nego što izgrade katedralu, ti temelji će podržavati sve što budete gradili u budućnosti. ## Kviz prije predavanja Pre-lecture quiz Ova lekcija pokriva osnove JavaScripta, jezika koji omogućuje interaktivnost na webu. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Počnimo s varijablama i tipovima podataka kojima se one pune! ## Varijable Varijable su temeljni građevinski blokovi u programiranju. Poput označenih staklenki koje su srednjovjekovni alkemisti koristili za pohranu različitih supstanci, varijable vam omogućuju pohranu informacija i daju im opisno ime kako biste im mogli kasnije pristupiti. Trebate zapamtiti nečiju dob? Pohranite je u varijablu nazvanu age. Želite pratiti ime korisnika? Držite ga u varijabli nazvanoj userName. Usredotočit ćemo se na suvremen pristup stvaranju varijabli u JavaScriptu. Te tehnike koje ćete ovdje naučiti predstavljaju godine evolucije jezika i najbolje prakse razvijene od strane programerske zajednice. Kreiranje i deklaracija varijable ima sljedeću sintaksu [keyword] [name]. Sastoji se od dva dijela: - Ključna riječ. Koristite let za varijable koje se mogu mijenjati ili const za vrijednosti koje ostaju iste. - Ime varijable, to je opisni naziv koji sami odaberete. ✅ Ključna riječ let uvedena je u ES6 i daje varijabli tzv. _blok opseg_. Preporučuje se da koristite let ili const umjesto starije ključne riječi var. Blok opsezi će biti detaljnije obrađeni u budućim dijelovima. ### Zadatak - rad s varijablama 1. Deklarirajte varijablu. Započnimo stvaranjem naše prve varijable: ```javascript let myVariable; ``` Što ovo postiže: - Ovo govori JavaScriptu da kreira memorijsku lokaciju nazvanu myVariable - JavaScript rezervira prostor u memoriji za ovu varijablu - Varijabla trenutno nema vrijednost (undefined) 2. Dodajte joj vrijednost. Sad ćemo staviti nešto u našu varijablu: ```javascript myVariable = 123; ``` Kako radi dodjela: - Operator = dodjeljuje vrijednost 123 našoj varijabli - Varijabla sada sadrži tu vrijednost umjesto da je neodređena - Možete referencirati ovu vrijednost kroz vaš kod koristeći myVariable > Napomena: Korištenje = u ovoj lekciji znači da koristimo "operator dodjele", koristeći ga za postavljanje vrijednosti varijabli. Ne označava jednakost. 3. Uradi to pametnije. Zapravo, spojimo ta dva koraka: ```javascript let myVariable = 123; ``` Ovaj pristup je učinkovitiji: - Deklarirate varijablu i dodjeljujete joj vrijednost u jednoj izjavi - Ovo je standardna praksa među programerima - Smanjuje duljinu koda, a zadržava jasnoću 4. Promijenite mišljenje. Što ako želimo pohraniti drugu vrijednost? ```javascript myVariable = 321; ``` Razumijevanje ponovnog dodjeljivanja: - Varijabla sada sadrži 321 umjesto 123 - Prethodna vrijednost je zamijenjena – varijable pohranjuju samo jednu vrijednost u jednom trenutku - Ova promjenjivost je ključna karakteristika varijabli deklariranih s let ✅ Isprobajte! Možete pisati JavaScript izravno u svoje pregledniku. Otvorite prozor preglednika i idite na Developer Tools. U konzoli ćete pronaći prompt; upišite let myVariable = 123, pritisnite Enter, zatim upišite myVariable. Što se događa? Više o ovim konceptima naučit ćete u narednim lekcijama. ### 🧠 Provjera znanja o varijablama: Postajete komforni Pogledajmo kako stojite s varijablama: - Možete li objasniti razliku između deklaracije i dodjele varijable? - Što se događa ako pokušate koristiti varijablu prije nego što je deklarirate? - Kada biste izabrali let umjesto const za varijablu? ## Konstantne vrijednosti Ponekad trebate pohraniti informacije koje se tijekom izvođenja programa nikad ne smiju mijenjati. Zamislite konstante poput matematičkih načela koje je Euklid utvrdio u antičkoj Grčkoj – jednom dokazana i zabilježena, ostala su fiksna za buduće generacije. Konstante funkcioniraju slično varijablama, ali s važnim ograničenjem: nakon što im dodijelite vrijednost, ona se ne može mijenjati. Ta nepromjenjivost pomaže spriječiti slučajne izmjene ključnih vrijednosti u vašem programu. Deklaracija i inicijalizacija konstante slijedi iste koncepte kao i varijable, osim što se koristi ključna riječ const. Konstante se obično deklariraju s nazivima napisanim velikim slovima. Što ovaj kod radi: - Kreira konstantu nazvanu MY_VARIABLE s vrijednošću 123 - Koristi konvenciju imenovanja velikim slovima za konstante - Sprječava buduće promjene ove vrijednosti Konstante imaju dva glavna pravila: - Morate im odmah dodijeliti vrijednost – konzistentno bez praznih konstanti! - Nikada ne smijete mijenjati tu vrijednost – JavaScript će baciti grešku ako pokušate. Pogledajmo to sad: Jednostavna vrijednost - Sljedeće NIJE dopušteno: ```javascript const PI = 3; PI = 4; // nije dopušteno ``` Što morate zapamtiti: - Pokušaji ponovne dodjele konstante uzrokovat će grešku - Štiti važne vrijednosti od slučajnih promjena - Osigurava da vrijednost ostane dosljedna kroz cijeli program Zaštita reference objekta - Sljedeće NIJE dopušteno: ```javascript const obj = { a: 3 }; obj = { b: 5 } // nije dopušteno ``` Razumijevanje ovih pojmova: - Sprječava zamjenu cijelog objekta novim - Štiti referencu na izvorni objekt - Očuva identitet objekta u memoriji Vrijednost u objektu nije zaštićena - Sljedeće JE dopušteno: ```javascript const obj = { a: 3 }; obj.a = 5; // dopušteno ``` Što se ovdje događa: - Mijenja se svojstvo unutar objekta - Zadržava istu referencu objekta - Pokazuje da se sadržaj objekta može mijenjati dok referenca ostaje konstanta > Napomena, const znači da je referenca zaštićena od ponovne dodjele. Vrijednost ipak nije _nepromjenjiva_ i može se mijenjati, osobito ako je riječ o složenim strukturama poput objekta. ## Tipovi podataka JavaScript organizira informacije u različite kategorije nazvane tipovi podataka. Ovaj koncept odražava način na koji su stari učenjaci kategorizirali znanje – Aristotel je razlikovao različite vrste rezoniranja, znajući da logička načela ne mogu se jednako primjenjivati na poeziju, matematiku i prirodnu filozofiju. Tipovi podataka su važni jer različite operacije rade s različitim vrstama informacija. Baš kao što ne možete obavljati aritmetiku nad nečijim imenom ili alfabetizirati matematičku jednadžbu, JavaScript zahtijeva odgovarajući tip podataka za svaku operaciju. Razumijevanje ovog sprječava greške i čini vaš kod pouzdanijim. Varijable mogu pohraniti mnoge različite vrste vrijednosti, poput brojeva i teksta. Ove različite vrste vrijednosti poznate su kao tip podataka. Tipovi podataka važan su dio razvoja softvera jer pomažu programerima donositi odluke o tome kako kod treba biti napisan i kako bi softver trebao raditi. Nadalje, neki tipovi podataka imaju jedinstvene značajke koje pomažu pri transformaciji ili izdvajaju dodatne informacije iz vrijednosti. ✅ Tipovi podataka se također nazivaju JavaScript primitivima jer su najnižeg nivoa tipovi podataka koje jezik pruža. Postoji 7 primitivnih tipova podataka: string, number, bigint, boolean, undefined, null i symbol. Odvojite trenutak da vizualizirate što svaki od ovih primitiva može predstavljati. Što je zebra? A 0? true? ### Brojevi Brojevi su najjednostavniji tip podataka u JavaScriptu. Bilo da radite s cijelim brojevima poput 42, decimalnim poput 3.14 ili negativnim kao -5, JavaScript ih obrađuje uniformno. Sjećate li se naše varijable od prije? Taj 123 koji smo pohranili zapravo je tip podatka broj: Ključne karakteristike: - JavaScript automatski prepoznaje numeričke vrijednosti - Možete s njima izvoditi matematičke operacije - Nije potrebna eksplicitna deklaracija tipa Varijable mogu pohraniti sve vrste brojeva, uključujući decimale ili negativne brojeve. Brojevi se također mogu koristiti s aritmetičkim operatorima, koji će biti obrađeni u sljedećem odjeljku. ### Aritmetički operatori Aritmetički operatori omogućuju izvođenje matematičkih izračuna u JavaScriptu. Ti operatori slijede ista pravila koja su matematičari koristili stoljećima – isti simboli koji su se pojavljivali u radovima učenjaka poput Al-Khwarizmija, koji je razvio algebarsku notaciju. Operatori rade onako kako biste očekivali iz tradicionalne matematike: plus za zbrajanje, minus za oduzimanje i tako dalje. Postoji nekoliko vrsta operatora koje možete koristiti pri izvođenju aritmetičkih funkcija, neki su navedeni ovdje: ✅ Isprobajte! Pokušajte napraviti aritmetičku operaciju u konzoli vašeg preglednika. Jesu li rezultati iznenađujući? ### 🧮 Provjera matematičkih sposobnosti: Računanje s povjerenjem Testirajte svoje aritmetičko razumijevanje: - Koja je razlika između / (dijeljenje) i % (ostatak)? - Možete li predvidjeti što je 10 % 3 jednako? (Pomoć: nije 3.33...) - Zašto bi operator ostatka mogao biti koristan u programiranju? ### Stringovi U JavaScriptu, tekstualni podaci predstavljeni su kao stringovi. Termin "string" dolazi od koncepta znakova povezanih u niz, kao što su prepisi u srednjovjekovnim samostanima gdje su pisari povezivali slova da bi oblikovali riječi i rečenice u svojim rukopisima. Stringovi su temeljni za web razvoj. Svaki tekst prikazan na web stranici – korisnička imena, oznake na gumbima, poruke o pogreškama, sadržaj – obrađuje se kao string podatak. Razumijevanje stringova neophodno je za kreiranje funkcionalnih korisničkih sučelja. Stringovi su skupovi znakova smještenih između jednostrukih ili dvostrukih navodnika. Razumijevanje ovih pojmova: - Koristi ili jednostruke ' ili dvostruke " navodnike za definiranje stringova - Pohranjuje tekstualne podatke koji mogu uključivati slova, brojeve i simbole - Dodjeljuje string vrijednosti varijablama za naknadnu upotrebu - Zahtijeva navodnike za razlikovanje teksta od imena varijabli Zapamtite koristiti navodnike pri pisanju stringa ili će JavaScript pretpostaviti da je riječ o imenu varijable. ### Formatiranje stringova Manipulacija stringovima omogućuje vam da kombinirate tekstualne elemente, unesete varijable i stvarate dinamički sadržaj koji odgovara stanju programa. Ova tehnika vam omogućuje da programatski gradite tekst. Često trebate spojiti više stringova zajedno – taj proces naziva se konkatenacija. Za spajanje dva ili više nizova, ili njihovo povezivanje zajedno, koristi operator +. Korak po korak, evo što se događa: - Spaja više nizova koristeći operator + - Povezuje nizove izravno jedan za drugim bez razmaka u prvom primjeru - Dodaje znakove razmaka " " između nizova radi čitljivosti - Umeće interpunkcijske znakove poput zareza za pravilno oblikovanje ✅ Zašto je 1 + 1 = 2 u JavaScriptu, ali '1' + '1' = 11? Razmisli o tome. A što kažeš na '1' + 1? Predlošci nizova (template literals) su još jedan način formatiranja nizova, osim umjesto navodnika koriste se naglašeni akcenti (backtick). Sve što nije običan tekst mora se staviti unutar rezerviranih mjesta ${ }. To uključuje i bilo koje varijable koje mogu biti nizovi. Razumimo svaki dio: - Koristi naglašene akcente ` `` umjesto običnih navodnika za stvaranje predložaka nizova - Ugrađuje varijable izravno koristeći sintaksu rezerviranih mjesta ${} - Čuva razmake i oblikovanje točno kako su napisani - Nudi čišći način za stvaranje složenih nizova s varijablama Možete postići svoje ciljeve oblikovanja na oba načina, ali predlošci nizova poštuju sve razmake i prijelome redaka. ✅ Kada biste koristili predložak niza umjesto običnog niza? ### 🔤 Provjera Majstorstva Nizova: Povjerenje u Manipulaciju Tekstom Procijenite svoje vještine sa nizovima: - Možete li objasniti zašto '1' + '1' daje '11' umjesto 2? - Koju metodu za nizove smatrate čitljivijom: spajanje ili predloške nizova? - Što se događa ako zaboravite navodnike oko niza? ### Booleovi tipovi Booleovi tipovi predstavljaju najjednostavniji oblik podataka: mogu imati samo jednu od dvije vrijednosti – true ili false. Ovaj binarni logički sustav potječe iz rada Georgea Boolea, matematičara iz 19. stoljeća koji je razvio Booleovu algebru. Unatoč jednostavnosti, booleovi su ključni za logiku programa. Omogućuju vašem kodu donošenje odluka na temelju uvjeta – je li korisnik prijavljen, je li gumb kliknut, ili jesu li ispunjeni neki kriteriji. Boolean može imati samo dvije vrijednosti: true ili false. Booleovi mogu pomoći u odlučivanju koje će se linije koda izvršiti kada su ispunjeni određeni uvjeti. U mnogim slučajevima, operatori pomažu u postavljanju vrijednosti Boolean tipa, a često ćete primijetiti i pisati varijable koje se inicijaliziraju ili im se vrijednosti ažuriraju operatorom. U gornjem primjeru smo: - Stvorili varijablu koja pohranjuje Boolean vrijednost true - Demonstrirali kako pohraniti Boolean vrijednost false - Koristili točne ključne riječi true i false (ne trebaju navodnici) - Pripremili te varijable za korištenje u uvjetnim izrazima ✅ Varijabla se može smatrati 'truthy' ako se evaluira kao boolean true. Zanimljivo je da u JavaScriptu sve vrijednosti su truthy osim onih definirano kao falsy. ### 🎯 Provjera Boolean Logike: Vještine donošenja odluka Testirajte svoje razumijevanje Boolean tipa: - Zašto mislite da JavaScript ima "truthy" i "falsy" vrijednosti osim samo true i false? - Možete li predvidjeti koja od ovih je falsy: 0, "0", [], "false"? - Kako bi booleovi mogli biti korisni u kontroli tijeka programa? --- ## 📊 Sažetak Vašeg Alata za Tipove Podataka ## Izazov GitHub Copilot Agent-a 🚀 Koristite Agent način rada da biste dovršili sljedeći izazov: Opis: Kreirajte upravitelj osobnim informacijama koji demonstrira sve JavaScript tipove podataka koje ste naučili u ovoj lekciji dok rukujete scenarijima stvarnih podataka. Zadatak: Izradite JavaScript program koji kreira objekt korisničkog profila koji sadrži: ime osobe (string), godine (broj), status studenta (boolean), omiljene boje kao niz, te objekt adrese s ulicom, gradom i poštanskim brojem. Uključite funkcije za prikazivanje podataka profila i ažuriranje pojedinačnih polja. Obavezno pokažite spajanje nizova, predloške nizova, aritmetičke operacije s dobi, te Boolean logiku za status studenta. Saznajte više o agent načinu rada ovdje. ## 🚀 Izazov JavaScript ima ponašanja koja mogu iznenaditi developere. Evo klasičnog primjera za istraživanje: pokušajte upisati ovo u konzolu preglednika: let age = 1; let Age = 2; age == Age i promatrajte rezultat. Vraća false – možete li ustanoviti zašto? Ovo predstavlja jedan od mnogih JavaScript ponašanja koje vrijedi razumjeti. Upoznavanje s ovim nejasnoćama pomoći će vam pisati pouzdaniji kod i učinkovitije rješavati pogreške. ## Kviz nakon predavanja Kviz nakon predavanja ## Pregled i Samostalan Rad Pogledajte ovu listu JavaScript vježbi i pokušajte neku. Što ste naučili? ## Zadatak Vježbe za tipove podataka ## 🚀 Vaš vremenski plan za usavršavanje JavaScript tipova podataka ### ⚡ Što možete napraviti u sljedećih 5 minuta - [ ] Otvorite konzolu preglednika i napravite 3 varijable različitih tipova podataka - [ ] Isprobajte izazov: let age = 1; let Age = 2; age == Age i shvatite zašto je false - [ ] Vježbajte spajanje nizova s vašim imenom i omiljenim brojem - [ ] Testirajte što se događa kada zbrojite broj i niz ### 🎯 Što možete postići u ovom satu - [ ] Dovršite kviz nakon lekcije i pregledajte bilo koje zbunjujuće koncepte - [ ] Izradite mini kalkulator koji zbraja, oduzima, množi i dijeli dva broja - [ ] Napravite jednostavan formatir za ime koristeći predloške nizova - [ ] Istražite razlike između operatora usporedbe == i === - [ ] Vježbajte pretvaranje između različitih tipova podataka ### 📅 Vaša tjedna osnova JavaScript-a - [ ] S pouzdanjem i kreativnošću dovršite zadatak - [ ] Napravite osobni profil koristeći sve naučene tipove podataka - [ ] Vježbajte s JavaScript vježbama s CSS-Tricks - [ ] Izradite jednostavan validator forme koristeći Boolean logiku - [ ] Eksperimentirajte s nizovima i objektima (najava za buduće lekcije) - [ ] Pridružite se JavaScript zajednici i postavljajte pitanja o tipovima podataka ### 🌟 Vaša mjesečna transformacija - [ ] Integrirajte znanje o tipovima podataka u veće programske projekte - [ ] Razumite kada i zašto koristiti svaki tip podataka u stvarnim aplikacijama - [ ] Pomozite drugim početnicima da shvate osnove JavaScript-a - [ ] Izradite malu aplikaciju koja upravlja različitim vrstama korisničkih podataka - [ ] Istražite napredne koncepte tipova podataka poput prisiljene konverzije i stroge jednakosti - [ ] Doprinesite open source JavaScript projektima poboljšanjem dokumentacije ### 🧠 Završna provjera znanja o tipovima podataka Proslavite svoje JavaScript temelje: - Koji vas je tip podataka najviše iznenadio u pogledu svog ponašanja? - Koliko se udobno osjećate objašnjavajući varijable nasuprot konstantama prijatelju? - Koja je najzanimljivija stvar koju ste otkrili o JavaScript sustavu tipova? - Koju aplikaciju iz stvarnog svijeta možete zamisliti da izgradite s ovim osnovama? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Odricanje od odgovornosti: Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa Co-op Translator. Iako nastojimo postići točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba se smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nerazumijevanja ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,data

Osnove JavaScripta: Metode i funkcije

## Pred-predavanje kviz Pred-predavanje kviz Pisanje istog koda iznova jedna je od najčešćih frustracija u programiranju. Funkcije rješavaju taj problem dopuštajući vam da upakirate kod u višekratno uporabljive blokove. Zamislite funkcije kao standardizirane dijelove koji su revolucionalizirali Henry Fordovu montažnu liniju – jednom kad napravite pouzdani komad, možete ga koristiti gdje god je potrebno bez ponovnog izgradnje od nule. Funkcije vam omogućuju da grupirate dijelove koda kako biste ih mogli ponovno koristiti kroz svoj program. Umjesto da svaki put kopirate i lijepite istu logiku, možete jednom stvoriti funkciju i pozvati je kad god vam zatreba. Ovakav pristup održava vaš kod urednim i znatno olakšava ažuriranja. U ovom ćemo se satu naučiti kako kreirati vlastite funkcije, kako im predavati informacije i kako dobiti korisne rezultate natrag. Otkrit ćete razliku između funkcija i metoda, naučiti moderne sintakse i vidjeti kako funkcije mogu raditi s drugim funkcijama. Izgradit ćemo ove koncepte korak po korak. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metode i Funkcije") ## Funkcije Funkcija je samostalni blok koda koji izvršava određeni zadatak. Ona enkapsulira logiku koju možete pokrenuti kad god zatrebate. Umjesto da pišete isti kod više puta kroz program, možete ga upakirati u funkciju i pozvati tu funkciju kad vam zatreba. Ovaj pristup održava vaš kod čistim i znatno olakšava ažuriranja. Zamislite izazov održavanja ako trebate promijeniti logiku raspršenu na 20 različitih mjesta u vašem kodnom bazenu. Važno je imenovati vaše funkcije opisno. Dobro imenovana funkcija jasno komunicira svoju svrhu – kad vidite cancelTimer(), odmah shvaćate što radi, baš kao što jasno označeno dugme govori točno što će se dogoditi kad ga kliknete. ## Kreiranje i pozivanje funkcije Pogledajmo kako stvoriti funkciju. Sintaksa slijedi dosljedan obrazac: Raspakirajmo ovo: - Ključna riječ function govori JavaScriptu "Hej, stvaram funkciju!" - nameOfFunction je mjesto gdje funkciji dajete opisno ime - Zagrade () su mjesto gdje možete dodati parametre (o tome uskoro) - Vitičaste zagrade {} sadrže stvarni kod koji se izvršava kada pozovete funkciju Napravimo jednostavnu funkciju pozdrava da to vidimo u praksi: Ova funkcija ispisuje "Hello, world!" u konzolu. Nakon što ju definirate, možete je koristiti onoliko puta koliko vam treba. Da biste izvršili (ili "pozvali") funkciju, napišite njeno ime praćeno zagradama. JavaScript vam dopušta definirati funkciju prije ili poslije njezinog poziva – JavaScriptov engine će se pobrinuti za redoslijed izvršenja. Kad pokrenete ovaj redak, izvršava se sav kod unutar vaše funkcije displayGreeting, prikazujući "Hello, world!" u konzoli vašeg preglednika. Ovu funkciju možete pozivati više puta. ### 🧠 Provjera osnova funkcija: Izgradnja prvih funkcija Pogledajmo kako stojite s osnovama funkcija: - Možete li objasniti zašto koristimo vitičaste zagrade {} u definicijama funkcija? - Što se događa ako napišete displayGreeting bez zagrada? - Zašto biste željeli pozvati istu funkciju više puta? ### Najbolje prakse za funkcije Evo nekoliko savjeta kako napisati odlične funkcije: - Dajte funkcijama jasna i opisna imena – vaš budući ja će vam biti zahvalan! - Koristite camelCase za višerječena imena (npr. calculateTotal umjesto calculate_total) - Neka svaka funkcija bude fokusirana na jedan zadatak koji radi dobro ## Predavanje informacija funkciji Naša funkcija displayGreeting je ograničena – može samo prikazati "Hello, world!" svima. Parametri nam omogućavaju da funkcije učinimo fleksibilnijima i korisnijima. Parametri djeluju kao rezervirana mjesta u koje možete ubaciti različite vrijednosti svaki put kad koristite funkciju. Na taj način ista funkcija može raditi s različitim informacijama pri svakom pozivu. Parametre navodite unutar zagrada kad definirate funkciju, odvajajući ih zarezima: Svaki parametar djeluje kao rezervirano mjesto – kad netko pozove vašu funkciju, on/ona predaje stvarne vrijednosti koje se stavljaju u ta mjesta. Ažurirajmo našu funkciju pozdrava da prihvati ime: Primijetite kako koristimo znakove za navodnike unatrag (` `) i ${}` za umetanje imena direktno u našu poruku – ovo se zove predložak stringa i vrlo je zgodan način za sastavljanje stringova s varijablama. Sad kad pozovemo funkciju, možemo predati bilo koje ime: JavaScript uzima string 'Christopher', dodjeljuje ga parametru name i stvara personaliziranu poruku "Hello, Christopher!" ## Zadane vrijednosti Što ako želimo neke parametre učiniti opcionalnima? Evo koristi zadanih vrijednosti! Recimo da želimo omogućiti korisnicima da prilagode pozdravnu riječ, ali ako je ne navedu, koristit ćemo "Hello" kao zadanu vrijednost. Zadne vrijednosti postavljate koristeći znak jednakosti, baš kao kod postavljanja varijable: Ovdje je name i dalje obavezan, ali salutation ima rezervnu vrijednost 'Hello' ako netko ne navede drugačiji pozdrav. Sada možemo pozvati ovu funkciju na dva različita načina: U prvom pozivu JavaScript koristi zadano "Hello" jer nismo naveli pozdrav. U drugom pozivu koristi naš prilagođeni "Hi". Ova fleksibilnost čini funkcije prilagodljivima različitim situacijama. ### 🎛️ Provjera razumijevanja parametara: Čineći funkcije fleksibilnima Testirajte svoje razumijevanje parametara: - Koja je razlika između parametra i argumenta? - Zašto su zadane vrijednosti korisne u stvarnom programiranju? - Možete li predvidjeti što se događa ako proslijedite više argumenata nego parametara? ## Povratne vrijednosti Dosad su naše funkcije samo ispisivale poruke u konzolu, ali što ako želite da funkcija nešto izračuna i vrati rezultat? Tu na scenu stupaju povratne vrijednosti. Umjesto da samo nešto prikaže, funkcija može vratiti vrijednost koju možete spremiti u varijablu ili koristiti u drugim dijelovima koda. Da biste poslali vrijednost natrag, koristite ključnu riječ return praćenu vrijednošću koju želite vratiti: Evo važne stvari: kad funkcija dosegne return naredbu, odmah prestaje s radom i šalje tu vrijednost natrag onome tko ju je pozvao. Promijenimo našu funkciju pozdrava da vraća poruku umjesto da je ispisuje: Sad ta funkcija umjesto ispisa poruke stvara poruku i vraća ju nama. Da bismo koristili vraćenu vrijednost, možemo ju spremiti u varijablu poput bilo koje druge vrijednosti: Sada greetingMessage sadrži "Hello, Christopher" i možemo je koristiti bilo gdje u kodu – prikazati na web stranici, uključiti u email ili predati drugoj funkciji. ### 🔄 Provjera povratnih vrijednosti: Dobivanje rezultata natrag Procijenite svoje razumijevanje povratnih vrijednosti: - Što se događa s kodom nakon return naredbe u funkciji? - Zašto je povrat vrijednosti često bolji od ispisivanja u konzolu? - Može li funkcija vratiti različite tipove vrijednosti (string, broj, boolean)? ## Funkcije kao parametri funkcijama Funkcije se mogu predavati kao parametri drugim funkcijama. Iako ovaj koncept može djelovati složeno na početku, to je moćna značajka koja omogućava fleksibilne programske obrasce. Ovaj uzorak je vrlo čest kad želite reći "kada se nešto dogodi, napravi ovo drugo." Na primjer, "kada tajmer završi, pokreni ovaj kod" ili "kada korisnik klikne gumb, pozovi ovu funkciju." Pogledajmo setTimeout, što je ugrađena funkcija koja čeka određeno vrijeme, a zatim izvršava neki kod. Moramo joj reći koji kod pokrenuti – savršen slučaj za predavanje funkcije! Isprobajte ovaj kod – nakon 3 sekunde vidjet ćete poruku: Primijetite kako predajemo displayDone (bez zagrada) funkciji setTimeout. Mi ne pozivamo funkciju sami – predajemo ju setTimeout i kažemo "pozovi ovo za 3 sekunde." ### Anonimne funkcije Ponekad trebate funkciju za samo jednu stvar i ne želite joj dati ime. Razmislite – ako funkciju koristite samo jednom, zašto nepotrebno zatrpavati kod imenom? JavaScript vam omogućuje stvaranje anonimnih funkcija – funkcije bez imena koje možete definirati točno tamo gdje ih trebate. Evo kako možemo prepisati naš primjer s tajmerom koristeći anonimnu funkciju: Time se postiže isti rezultat, ali funkcija je definirana direktno unutar poziva setTimeout, uklanjajući potrebu za zasebnom deklaracijom funkcije. ### Funkcije s "debela strelica" Moderni JavaScript ima još kraći način pisanja funkcija zvane arrow functions (funkcije sa strelicom). Koriste => (izgleda kao strelica – shvatili ste?) i vrlo su popularne kod developera. Funkcije sa strelicom omogućuju preskakanje ključne riječi function i pisanje sažetijeg koda. Evo našeg primjera s tajmerom koristeći funkciju sa strelicom: Prazne zagrade () su mjesto za parametre (ovdje prazne), zatim dolazi strelica =>, i na kraju tijelo funkcije u vitičastim zagradama. Ovo pruža istu funkcionalnost s konciznijom sintaksom. ### Kada koristiti koju strategiju Kada biste trebali koristiti koji pristup? Praktično pravilo je: ako ćete funkciju koristiti više puta, dajte joj ime i definirajte je odvojeno. Ako je za specifičnu, jednokratnu upotrebu, razmislite o anonimnoj funkciji. Oba pristupa, strelične funkcije i tradicionalna sintaksa, su valjani izbori, iako su strelične funkcije češće u modernim JavaScript kodnim bazama. ### 🎨 Provjera stilova funkcija: Odabir pravog sintaksisa Testirajte svoje razumijevanje sintakse: - Kada biste radije koristili strelične funkcije umjesto tradicionalne sintakse funkcija? - Koja je glavna prednost anonimnih funkcija? - Možete li zamisliti situaciju u kojoj je imenovana funkcija bolja od anonimne? --- ## 🚀 Izazov Možete li jednim rečenicom izreći razliku između funkcija i metoda? Probajte! ## GitHub Copilot Agent Izazov 🚀 Koristite Agent način rada za dovršetak sljedećeg izazova: Opis: Napravite pomoćnu biblioteku matematičkih funkcija koja demonstrira različite koncepte funkcija obrađene u ovoj lekciji, uključujući parametre, zadane vrijednosti, povratne vrijednosti i strelične funkcije. Zadatak: Kreirajte JavaScript datoteku pod nazivom mathUtils.js koja sadrži sljedeće funkcije: 1. Funkciju add koja prima dva parametra i vraća njihov zbroj 2. Funkciju multiply sa zadanim vrijednostima parametara (drugi parametar zadano 1) 3. Streličnu funkciju square koja prima broj i vraća njegov kvadrat 4. Funkciju calculate koja prima drugu funkciju kao parametar i dva broja te primjenjuje tu funkciju na ta dva broja 5. Prikažite pozivanje svake funkcije s odgovarajućim testnim primjerima Više o agent načinu rada saznajte ovdje. ## Post-predavanje kviz Post-predavanje kviz ## Pregled i samostalno učenje Vrijedi pročitati malo više o streličnim funkcijama jer se sve više koriste u kodnim bazama. Prakticirajte pisanje funkcije, a zatim je prepišite koristeći ovaj sintaksis. ## Zadatak Zabava s funkcijama --- ## 🧰 Vaš JavaScript alatni set funkcija - Sažetak --- ## 🚀 Vaš vremenski okvir za savladavanje JavaScript funkcija ### ⚡ Što možete napraviti u sljedećih 5 minuta - [ ] Napišite jednostavnu funkciju koja vraća vaš omiljeni broj - [ ] Kreirajte funkciju s dva parametra koja ih zbraja zajedno - [ ] Pokušaj pretvoriti tradicionalnu funkciju u sintaksu streličaste funkcije - [ ] Vježbaj izazov: objasni razliku između funkcija i metoda ### 🎯 Što možeš postići u ovom satu - [ ] Dovrši kviz nakon lekcije i pregledaj zbunjujuće koncepte - [ ] Izgradi biblioteku matematičkih utiliteta iz GitHub Copilot izazova - [ ] Kreiraj funkciju koja koristi drugu funkciju kao parametar - [ ] Vježbaj pisanje funkcija s zadanim parametrima - [ ] Eksperimentiraj s predlošcima nizova u vrijednostima koje funkcije vraćaju ### 📅 Tvoj tjedan za usavršavanje funkcija - [ ] Dovrši zadatak "Zabava s funkcijama" s kreativnošću - [ ] Refaktoriraj neke ponavljajuće dijelove koda koje si napisao u višekratno upotrebljive funkcije - [ ] Izgradi mali kalkulator koristeći samo funkcije (bez globalnih varijabli) - [ ] Vježbaj streličaste funkcije s metodama nizova poput map() i filter() - [ ] Kreiraj zbirku utilitarnih funkcija za uobičajene zadatke - [ ] Prouči funkcije višeg reda i koncepte funkcionalnog programiranja ### 🌟 Tvoja mjesečna transformacija - [ ] Ovladavanje naprednim konceptima funkcija poput zatvaranja i opsega - [ ] Izgradi projekt koji intenzivno koristi kompoziciju funkcija - [ ] Sudjeluj u open source projektima poboljšavajući dokumentaciju funkcija - [ ] Poduči nekoga drugoga o funkcijama i različitim stilovima sintakse - [ ] Istraži paradigme funkcionalnog programiranja u JavaScriptu - [ ] Kreiraj osobnu biblioteku višekratno upotrebljivih funkcija za buduće projekte ### 🏆 Zaključna provjera tvog majstorstva funkcija Proslavi svoje ovladavanje funkcijama: - Koja je najučinkovitija funkcija koju si do sada stvorio? - Kako je učenje o funkcijama promijenilo tvoj pogled na organizaciju koda? - Koju sintaksu funkcija preferiraš i zašto? - Koji stvarni problem bi riješio pisanjem funkcije? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Izjava o odricanju od odgovornosti: Ovaj dokument je preveden korištenjem AI usluge za prevođenje Co-op Translator. Iako nastojimo postići točnost, molimo imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja proizašla iz korištenja ovog prijevoda. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Osnove JavaScripta: Donošenje odluka

Jeste li se ikada pitali kako aplikacije donose pametne odluke? Kao što navigacijski sustav bira najbržu rutu, ili kako termostat odlučuje kada uključiti grijanje? Ovo je osnovni koncept donošenja odluka u programiranju. Baš kao što je Charles Babbageov Analitički stroj zamišljen da slijedi različite nizove operacija ovisno o uvjetima, moderni JavaScript programi trebaju donositi odluke na temelju različitih okolnosti. Ta sposobnost grananja i donošenja odluka je ono što statični kod pretvara u responzivne, inteligentne aplikacije. U ovoj lekciji naučit ćete kako implementirati uvjetnu logiku u svoje programe. Istražit ćemo uvjetne izjave, operatore usporedbe i logičke izraze koji omogućuju vašem kodu da procijeni situaciju i odgovori prikladno. ## Pred-ispitni kviz Pred-ispitni kviz Sposobnost donošenja odluka i kontroliranja toka programa temeljni je aspekt programiranja. Ovaj odjeljak pokriva kako kontrolirati izvršni put vaših JavaScript programa koristeći Boolean vrijednosti i uvjetnu logiku. [](https://youtube.com/watch?v=SxTp8j-fMMY "Donošenje odluka") ## Kratki podsjetnik na Booleove vrijednosti Prije nego što krenemo u donošenje odluka, vratimo se na Booleove vrijednosti iz naše prethodne lekcije. Nazvane po matematičaru Georgu Booleu, ove vrijednosti predstavljaju binarne statuse – ili true ili false. Nema nejasnoća, nema sredine. Ove binarne vrijednosti čine temelj cjelokupne računalne logike. Svaka odluka koju vaš program donese na kraju se svodi na Boolean evaluaciju. Kreiranje Boolean varijabli je jednostavno: Ovo stvara dvije varijable s eksplicitnim Boolean vrijednostima. ✅ Booleovi su nazvani po engleskom matematičaru, filozofu i logičaru Georgu Booleu (1815.–1864.). ## Operatori usporedbe i Booleovi U praksi rijetko ručno postavljate Boolean vrijednosti. Umjesto toga, generirat ćete ih procjenom uvjeta: "Je li ovaj broj veći od onog?" ili "Jesu li ove vrijednosti jednake?" Operateri usporedbe omogućuju ove procjene. Oni uspoređuju vrijednosti i vraćaju Boolean rezultate ovisno o odnosu između operanada. ✅ Provjerite svoje znanje tako da napišete neke usporedbe u konzolu vašeg preglednika. Iznenađuju li vas neki rezultati? ### 🧠 Provjera majstorstva u usporedbi: Razumijevanje Booleove logike Testirajte svoje razumijevanje usporedbe: - Zašto mislite da je === (stroga jednakost) općenito poželjniji od == (labave jednakosti)? - Možete li predvidjeti što 5 === '5' vraća? A što 5 == '5'? - Koja je razlika između !== i !=? ## If izjava if izjava je kao postaviti pitanje u svom kodu. „Ako je ovaj uvjet istinit, onda učini ovo.“ Vjerojatno je najvažniji alat koji ćete koristiti za donošenje odluka u JavaScriptu. Evo kako to funkcionira: Uvjet je unutar zagrada, i ako je true, JavaScript izvršava kod unutar vitičastih zagrada. Ako je false, JavaScript preskače cijeli blok. Češće ćete koristiti operatore usporedbe za stvaranje ovih uvjeta. Pogledajmo praktičan primjer: Budući da 1000 >= 800 evaluira u true, kod unutar bloka se izvršava i u konzoli se prikazuje "Kupujem novi laptop!". ## If..Else izjava Ali što ako želite da vaš program učini nešto drugo kad je uvjet lažan? Tu dolazi else – kao rezervni plan. else izjava vam daje način reći "ako ovaj uvjet nije istinit, onda učini nešto drugo". Sada, budući da je 500 >= 800 false, JavaScript preskače prvi blok i izvršava else blok. U konzoli ćete vidjeti "Još ne mogu priuštiti novi laptop!". ✅ Testirajte svoje razumijevanje ovog koda i sljedećeg tako što ćete ga pokrenuti u konzoli preglednika. Promijenite vrijednosti varijabli currentMoney i laptopPrice da promijenite ispis u console.log(). ### 🎯 Provjera if-else logike: Grane izbora Procijenite svoje razumijevanje uvjetne logike: - Što se događa ako currentMoney točno odgovara laptopPrice? - Možete li smisliti stvarni scenarij gdje bi if-else logika bila korisna? - Kako biste mogli proširiti ovo da pokriva više cjenovnih razreda? ## Switch izjava Ponekad trebate usporediti jednu vrijednost s više opcija. Iako možete ugnijezditi nekoliko if..else izjava, taj pristup postaje nezgrapan. switch izjava nudi čišću strukturu za rukovanje višestrukim diskretnim vrijednostima. Koncept podsjeća na mehaničke sklopke koje su se koristile u ranim telefonskim centrima – jedna ulazna vrijednost određuje koji specifični put izvođenje slijedi. Evo kako je strukturirano: - JavaScript evaluira izraz jednom - Pregleda svaki case da pronađe podudaranje - Kad nađe podudaranje, izvršava taj blok koda - break govori JavaScriptu da prekine i izađe iz switcha - Ako nijedan slučaj ne odgovara, izvršava se default blok (ako postoji) U ovom primjeru, JavaScript vidi da je dayNumber 2, nalazi poklapanje s case 2, postavlja dayName na "Tuesday", i zatim izlazi iz switcha. Rezultat? "Today is Tuesday" se ispisuje u konzolu. ✅ Testirajte svoje razumijevanje ovog i sljedećeg koda tako da ga pokrenete u konzoli preglednika. Promijenite vrijednost varijable a da biste promijenili ispis u console.log(). ### 🔄 Majstorija switch izjave: Više opcija Testirajte razumijevanje switcha: - Što se događa ako zaboravite break izjavu? - Kada biste koristili switch umjesto više if-else izjava? - Zašto je default slučaj koristan čak i ako mislite da ste pokrili sve mogućnosti? ## Logički operatori i Booleovi Složene odluke često zahtijevaju evaluaciju više uvjeta istodobno. Baš kao što Booleova algebra omogućuje matematičarima kombiniranje logičkih izraza, programiranje pruža logičke operatore za povezivanje više Boolean uvjeta. Ovi operatori omogućuju sofisticiranu uvjetnu logiku spajajući jednostavne true/false evaluacije. Ovi operatori vam omogućuju korisno spajanje uvjeta: - AND (&&) znači da oba uvjeta moraju biti istinita - OR (||) znači da bar jedan uvjet mora biti istinit - NOT (!) mijenja istinitost u neistinitost (i obratno) ## Uvjeti i odluke s logičkim operatorima Pogledajmo ove logičke operatore u praksi s realističnijim primjerom: U ovom primjeru: računamo 20% popusta (640), zatim procjenjujemo pokrivaju li naša dostupna sredstva ili puni iznos ILI sniženi iznos. Budući da 600 nije dostatan za umanjeni iznos od 640, uvjet evaluira u false. ### 🧮 Provjera logičkih operatora: Kombiniranje uvjeta Testirajte svoje razumijevanje logičkih operatora: - U izrazu A && B, što se događa ako je A lažno? Da li se B uopće procjenjuje? - Možete li zamisliti situaciju gdje biste trebali koristiti sva tri operatora (&&, ||, !) zajedno? - Koja je razlika između !user.isActive i user.isActive !== true? ### Operator negacije Ponekad je lakše razmišljati o tome kada nešto NIJE istinito. Kao umjesto da pitate "Je li korisnik prijavljen?", možda ćete htjeti pitati "Nije li korisnik prijavljen?" Operator uskličnika (!) okreće logiku za vas. Operator ! je kao da kažete "suprotno od..." – ako je nešto true, ! ga čini false, i obratno. ### Ternarni izrazi Za jednostavne uvjetne dodjele, JavaScript pruža ternarni operator. Ovaj sažeti zapis omogućuje pisanje uvjetnog izraza u jednoj liniji, korisno kada trebate dodijeliti jednu od dvije vrijednosti ovisno o uvjetu. Čita se kao pitanje: "Je li ovaj uvjet istinit? Ako jest, koristi ovu vrijednost. Ako nije, koristi onu vrijednost." Ispod je konkretniji primjer: ✅ Provedite minutu čitajući ovaj kod nekoliko puta. Razumijete li kako ovi operatori rade? Ova linija kaže: "Je li firstNumber veći od secondNumber? Ako jest, stavi firstNumber u biggestNumber. Ako nije, stavi secondNumber u biggestNumber." Ternarni operator je samo kraći način pisanja ove tradicionalne if..else izjave: Oba pristupa daju identične rezultate. Ternarni operator nudi sažetost, dok tradicionalna struktura if-else može biti čitljivija za složenije uvjete. --- ## 🚀 Izazov Napišite program koji je prvo napisan s logičkim operatorima, a zatim ga prepišite koristeći ternarni izraz. Koji je sintaksni oblik vaš favorit? --- ## Izazov GitHub Copilot Agenta 🚀 Koristite Agent mod za dovršetak sljedećeg izazova: Opis: Kreirajte opsežni kalkulator ocjena koji demonstrira višestruke koncepte donošenja odluka iz ove lekcije, uključujući if-else izjave, switch izjave, logičke operatore i ternarne izraze. Zadatak: Napišite JavaScript program koji prima numeričku ocjenu učenika (0-100) i određuje njegovu slovnu ocjenu prema sljedećim kriterijima: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: ispod 60 Zahtjevi: 1. Koristite if-else izjavu za određivanje slovne ocjene 2. Koristite logičke operatore da provjerite je li student prošao (ocjena >= 60) I ima li pohvale (ocjena >= 90) 3. Koristite switch izraz za davanje specifične povratne informacije za svaku ocjenu 4. Koristite ternarni operator da utvrdite je li student podoban za sljedeći kolegij (ocjena >= 70) 5. Uključite provjeru valjanosti unosa kako biste osigurali da je rezultat između 0 i 100 Testirajte svoj program s različitim ocjenama uključujući granične slučajeve poput 59, 60, 89, 90 i nevažeće unose. Saznajte više o agent mode ovdje. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Pročitajte više o mnogim dostupnim operatorima na MDN-u. Prođite kroz sjajni Josh Comeau-ov pregled operatora! ## Assignment Operators --- ## 🧠 Sažetak Vašeg Alata za Donošenje Odluka --- ## 🚀 Vaš vremenski okvir usavršavanja donošenja odluka u JavaScriptu ### ⚡ Što možete napraviti u sljedećih 5 minuta - [ ] Vježbajte operatore usporedbe u konzoli preglednika - [ ] Napišite jednostavnu if-else izjavu koja provjerava vašu dob - [ ] Isprobajte izazov: prepišite if-else koristeći ternarni operator - [ ] Testirajte što se događa s različitim "truthy" i "falsy" vrijednostima ### 🎯 Što možete postići u ovom satu - [ ] Završite kviz nakon lekcije i pregledajte sve nejasne koncepte - [ ] Izradite sveobuhvatni kalkulator ocjena iz GitHub Copilot izazova - [ ] Kreirajte jednostavno stablo odluka za stvarni scenarij (poput odabira što odjenuti) - [ ] Vježbajte kombiniranje više uvjeta s logičkim operatorima - [ ] Eksperimentirajte sa switch izrazima za različite slučajeve upotrebe ### 📅 Vaše tjedno usavršavanje logike - [ ] Dovršite zadatak o operatorima s kreativnim primjerima - [ ] Izradite mini kviz aplikaciju koristeći različite uvjetne strukture - [ ] Kreirajte validator formulara koji provjerava višestruke uvjete unosa - [ ] Vježbajte Josh Comeau-ove vježbe pregleda operatora - [ ] Refaktorirajte postojeći kod da koristi prikladnije uvjetne strukture - [ ] Proučite kratkocirkularnu evaluaciju i implikacije na performanse ### 🌟 Vaša mjesečna transformacija - [ ] Savladajte složene ugniježđene uvjete i održavajte čitljivost koda - [ ] Izradite aplikaciju sa sofisticiranom logikom donošenja odluka - [ ] Doprinesite open source projektima poboljšavajući uvjetnu logiku u postojećim projektima - [ ] Naučite nekoga drugoga o različitim uvjetnim strukturama i kada ih koristiti - [ ] Istražite funkcionalne pristupe uvjetnoj logici - [ ] Kreirajte osobni vodič za najbolje prakse uvjetnih izraza ### 🏆 Završni pregled vašeg usavršavanja donošenja odluka Proslavite svoje umijeće logičkog razmišljanja: - Koju najkompleksniju logiku donošenja odluka ste uspješno implementirali? - Koja vam uvjetna struktura najviše „leži“ i zašto? - Kako vam je učenje o logičkim operatorima promijenilo pristup rješavanju problema? - Koja bi stvarna primjena imala koristi od sofisticirane logike donošenja odluka? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Odricanje odgovornosti: Ovaj dokument je preveden pomoću AI servisa za prijevod Co-op Translator. Iako nastojimo postići točnost, molimo imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati službenim i autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakva nerazumijevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Osnove JavaScripta: Nizovi i petlje

## Kviz prije predavanja Kviz prije predavanja Jeste li se ikad pitali kako web-stranice prate artikle u košarici ili prikazuju vašu listu prijatelja? Tu na scenu stupaju nizovi i petlje. Nizovi su poput digitalnih spremnika koji drže više informacija, dok petlje omogućuju učinkovito rad s tim podacima bez ponavljanja koda. Zajedno, ova dva koncepta čine temelj za rukovanje informacijama u vašim programima. Naučit ćete kako prijeći s ručnog pisanja svakog koraka na stvaranje pametnog, učinkovitog koda koji može brzo obraditi stotine ili tisuće elemenata. Do kraja ovog lekcija, razumjet ćete kako obaviti složene zadatke s podacima s samo nekoliko linija koda. Istražimo ove osnovne programske koncepte. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Nizovi Zamislite niz kao digitalni ormarić za pohranu dokumenata – umjesto da svaki poseban dokument spremate u zaseban ladicu, možete organizirati više povezanih stvari u jedan strukturirani spremnik. U programiranju, nizovi vam omogućuju spremanje više informacija u jedan organizirani paket. Bilo da gradite galeriju fotografija, upravljate popisom obaveza ili pratite najviše rezultate u igri, nizovi pružaju temelj za organizaciju podataka. Pogledajmo kako rade. ✅ Nizovi su posvuda oko nas! Možete li smisliti primjer iz stvarnog života za niz, kao što je niz solarnih panela? ### Kreiranje nizova Kreiranje niza je vrlo jednostavno – samo upotrijebite uglate zagrade! Što se ovdje događa? Upravo ste stvorili prazan spremnik koristeći te uglate zagrade []. Zamislite ga kao praznu policu u knjižnici – spreman je za držanje bilo kojih knjiga koje želite tamo organizirati. Možete i odmah napuniti svoj niz početnim vrijednostima: Zanimljive stvari za primijetiti: - U istom nizu možete pohraniti tekst, brojeve ili čak vrijednosti true/false - Samo odvojite svaku stavku zarezom – lako! - Nizovi su savršeni za držanje povezanih informacija na okupu ### Indeksiranje nizova Evo nešto što na prvi pogled može djelovati neobično: nizovi numeriraju svoje elemente počevši od 0, a ne od 1. Ovo indeksiranje od nule potječe iz načina na koji radi memorija računala – to je programerska konvencija od ranih dana računalnih jezika poput C-a. Svakom mjestu u nizu dodijeljen je svoj broj adrese koji se naziva indeks. ✅ Iznenađuje li vas da nizovi počinju na indeksu nula? U nekim programskim jezicima indeksi počinju od 1. Oko toga postoji zanimljiva povijest, koju možete pročitati na Wikipediji. Pristupanje elementima niza: Razjašnjenje što se ovdje događa: - Koristi notaciju s uglatim zagradama i brojem indeksa za pristup elementima - Vraća vrijednost pohranjenu na toj specifičnoj poziciji u nizu - Počinje brojati od 0, što čini prvi element indeksom 0 Izmjena elemenata niza: U gornjem primjeru smo: - Izmijenili element na indeksu 4 sa "Rocky Road" u "Butter Pecan" - Dodali novi element "Cookie Dough" na indeksu 5 - Automatski proširili duljinu niza dodavanjem izvan trenutnih granica ### Duljina niza i uobičajene metode Nizovi dolaze s ugrađenim svojstvima i metodama koje olakšavaju rad s podacima. Pronalaženje duljine niza: Ključne stvari za zapamtiti: - Vraća ukupan broj elemenata u nizu - Automatski se ažurira kada se elementi dodaju ili uklanjaju - Pruža dinamički broj koji je koristan za petlje i provjere Osnovne metode nizova: Razumijevanje ovih metoda: - Dodaje elemente s push() (na kraj) i unshift() (na početak) - Uklanja elemente s pop() (s kraja) i shift() (s početka) - Pronalazi elemente s indexOf() i provjerava postojanje s includes() - Vraća korisne vrijednosti poput uklonjenih elemenata ili pozicija indeksa ✅ Isprobajte sami! Koristite konzolu vašeg preglednika za stvaranje i manipulaciju nizom po vlastitom izboru. ### 🧠 Provjera osnova nizova: Organizacija vaših podataka Provjerite razumijevanje nizova: - Zašto mislite da nizovi broje od 0, a ne od 1? - Što se događa ako pokušate pristupiti indeksu koji ne postoji (poput arr[100] u nizu od 5 elemenata)? - Možete li smisliti tri stvarne situacije gdje bi nizovi bili korisni? ## Petlje Zamislite poznatu kaznu iz romana Charlesa Dickensa gdje su učenici morali višestruko pisati rečenicu na ploči. Zamislite da nekome jednostavno kažete "upiši ovu rečenicu 100 puta" i to se automatski izvrši. Točno to petlje rade za vaš kod. Petlje su poput neumornog pomoćnika koji može ponavljati zadatke bez pogreške. Bilo da trebate provjeriti svaki artikl u košarici ili prikazati sve fotografije u albumu, petlje učinkovito upravljaju ponavljanjem. JavaScript nudi nekoliko vrsta petlji za korištenje. Istražimo svaku i shvatimo kada ih koristiti. ### For petlja for petlja je poput postavljanja tajmera – točno znate koliko puta želite da se nešto dogodi. Vrlo je organizirana i predvidiva, što je čini savršenom kada radite s nizovima ili trebate brojati stvari. Struktura for petlje: Korak po korak, evo što se događa: - Inicijalizira varijablu brojila i na 0 na početku - Provjerava uvjet i < 10 prije svake iteracije - Izvršava blok koda kada je uvjet istinit - Povećava i za 1 nakon svake iteracije s i++ - Zaustavlja se kada uvjet postane neistinit (kad i dosegne 10) ✅ Pokrenite ovaj kod u konzoli preglednika. Što se događa ako napravite sitne promjene u brojaču, uvjetu ili izrazu za iteraciju? Možete li ga pokrenuti unatrag, stvarajući odbrojavanje? ### 🗓️ Provjera ovladavanja For petljom: Kontrolirana ponavljanja Procijenite svoje razumijevanje for petlje: - Koja su tri dijela for petlje i što svaki radi? - Kako biste petljali kroz niz unatrag? - Što se događa ako zaboravite inkrement dio (i++)? ### While petlja while petlja je poput govora "nastavi dok..." - možda ne znate točno koliko će se puta izvršiti, ali znate kada prestati. Savršena je za stvari poput traženja unosa korisnika dok ne dobijete potrebne podatke ili pretraživanja podataka dok ne pronađete ono što tražite. Karakteristike while petlje: - Nastavlja se izvršavati dok je uvjet istinit - Zahtijeva ručno upravljanje bilo kojim brojačima - Provjerava uvjet prije svake iteracije - Rizik beskonačnih petlji ako uvjet nikada ne postane neistinit Razumijevanje ovih primjera: - Ručno upravlja brojačem i unutar tijela petlje - Povećava brojač da spriječi beskonačne petlje - Prikazuje praktični primjer s unosom korisnika i ograničenjem pokušaja - Uključuje sigurnosne mehanizme za sprječavanje beskonačnog izvršavanja ### ♾️ Provjera mudrosti While petlje: Ponavljanje na temelju uvjeta Testirajte razumijevanje while petlji: - Koja je glavna opasnost pri korištenju while petlji? - Kada biste odabrali while petlju umjesto for petlje? - Kako možete spriječiti beskonačne petlje? ### Moderni alternativni sintaksisi petlji JavaScript nudi modernu sintaksu petlji koja može učiniti vaš kod čitljivijim i manje podložnim greškama. For...of petlja (ES6+): Ključne prednosti for...of: - Uklanja upravljanje indeksom i potencijalne pogreške u indeksiranju - Pruža izravan pristup elementima niza - Poboljšava čitljivost koda i smanjuje složenost sintakse Metoda forEach: Što trebate znati o forEach: - Izvršava funkciju za svaki element niza - Pruža i vrijednost elementa i indeks kao parametre - Ne može se zaustaviti ranije (za razliku od tradicionalnih petlji) - Vraća undefined (ne stvara novi niz) ✅ Zašto biste odabrali for petlju umjesto while petlje? 17 tisuća gledatelja imalo je isto pitanje na StackOverflowu, a neka od mišljenja mogla bi vam biti zanimljiva. ### 🎨 Provjera moderne sintakse petlji: Prihvatite ES6+ Procijenite svoje razumijevanje modernog JavaScripta: - Koje su prednosti for...of u odnosu na tradicionalne for petlje? - Kada biste još uvijek mogli preferirati tradicionalne for petlje? - Koja je razlika između forEach i map? ## Petlje i nizovi Kombiniranje nizova i petlji stvara snažne mogućnosti obrade podataka. Ovo je spoj temelj za mnoge programske zadatke, od prikaza lista do izračuna statistike. Tradicionalna obrada nizova: Razumimo svaki pristup: - Koristi svojstvo duljine niza za određivanje granice petlje - Pristupa elementima po indeksu u tradicionalnim for petljama - Pruža izravan pristup elementima u for...of petljama - Obrađuje svaki element niza točno jednom Praktični primjer obrade podataka: Evo kako ovaj kod radi: - Inicijalizira varijable za praćenje zbroja i ekstremnih vrijednosti - Obrađuje svaki rezultat kroz jednu učinkovitu petlju - Akumulira ukupno za izračun prosjeka - Prati najviše i najniže vrijednosti tijekom iteracije - Izračunava konačne statistike nakon završetka petlje ✅ Eksperimentirajte s petljanjem kroz niz koji ste sami napravili u konzoli vašeg preglednika. --- ## Izazov GitHub Copilot Agenta 🚀 Koristite Agent mod za dovršetak sljedećeg izazova: Opis: Izgradite sveobuhvatnu funkciju za obradu podataka koja kombinira nizove i petlje za analizu skupa podataka i generiranje smislenih uvida. Zadatak: Kreirajte funkciju pod nazivom analyzeGrades koja prima niz objekata ocjena studenata (svaki s svojstvima ime i bodovi) i vraća objekt sa statistikama uključujući najvišu ocjenu, najnižu ocjenu, prosječnu ocjenu, broj studenata koji su prošli (bodovi >= 70) te niz imena studenata koji su ostvarili ocjenu iznad prosjeka. U rješenju koristite barem dvije različite vrste petlji. Više o agent modu saznajte ovdje. ## 🚀 Izazov JavaScript nudi nekoliko modernih metoda za nizove koje mogu zamijeniti tradicionalne petlje za određene zadatke. Istražite forEach, for-of, map, filter i reduce. Vaš izazov: Prefaktorirajte primjer ocjena studenata koristeći barem tri različite metode niza. Primijetite koliko kod postaje čišći i čitljiviji s modernom JavaScript sintaksom. ## Post-Lecture Quiz Post-lecture quiz ## Pregled i samostalno učenje Nizovi u JavaScriptu imaju mnogo pridruženih metoda koje su iznimno korisne za manipulaciju podacima. Pročitajte o tim metodama i isprobajte neke od njih (kao što su push, pop, slice i splice) na nizu po vašem izboru. ## Zadatak Loop an Array --- ## 📊 Sažetak vašeg alata za nizove i petlje --- ## 🚀 Vaš vremenski tijek savladavanja nizova i petlji ### ⚡ Što možete napraviti u sljedećih 5 minuta - [ ] Kreirati niz omiljenih filmova i pristupiti određenim elementima - [ ] Napisati for petlju koja broji od 1 do 10 - [ ] Isprobati izazov modernih metoda niza iz lekcije - [ ] Vježbati indeksiranje nizova u konzoli preglednika ### 🎯 Što možete postići u ovom satu - [ ] Završiti kviz nakon lekcije i pregledati teže koncepte - [ ] Izgraditi opsežni analizator ocjena iz GitHub Copilot izazova - [ ] Kreirati jednostavnu košaricu za kupovinu koja dodaje i uklanja stavke - [ ] Vježbati pretvaranje između različitih tipova petlji - [ ] Eksperimentirati s metodama niza kao što su push, pop, slice i splice ### 📅 Vaše tjedno putovanje obradom podataka - [ ] Završiti zadatak "Loop an Array" s kreativnim poboljšanjima - [ ] Izraditi aplikaciju lista zadataka koristeći nizove i petlje - [ ] Kreirati jednostavan kalkulator statistike za numeričke podatke - [ ] Vježbati s MDN metodama nizova - [ ] Izraditi sučelje galerije slika ili glazbene liste - [ ] Istražiti funkcionalno programiranje s map, filter i reduce ### 🌟 Vaša mjesečna transformacija - [ ] Savladati napredne operacije nad nizovima i optimizaciju performansi - [ ] Izgraditi kompletan nadzorni panel za vizualizaciju podataka - [ ] Doprinijeti open source projektima vezanim uz obradu podataka - [ ] Poučiti nekoga drugoga o nizovima i petljama s praktičnim primjerima - [ ] Kreirati osobnu biblioteku za višekratnu upotrebu funkcija za obradu podataka - [ ] Istražiti algoritme i strukture podataka temeljene na nizovima ### 🏆 Završni pregled o vašem majstorstvu u obradi podataka Proslavite svoje znanje o nizovima i petljama: - Koja vam je najkorisnija operacija nad nizovima za stvarne primjene? - Koji vam tip petlje najviše "leži" i zašto? - Kako je razumijevanje nizova i petlji promijenilo vaš pristup organizaciji podataka? - Koji složen zadatak obrade podataka biste željeli sljedeći riješiti? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Odricanje od odgovornosti: Ovaj je dokument preveden pomoću AI usluge za prijevod Co-op Translator. Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporučuje se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Bevezetés a JavaScriptbe

A JavaScript a web nyelve. Ebben a négy leckében megismerheted az alapjait. ### Témakörök 1. Változók és adattípusok 2. Függvények és metódusok 3. Döntéshozatal JavaScriptben 4. Tömbök és ciklusok ### Köszönetnyilvánítás Ezeket a leckéket ♥️-vel írták: Jasmine Greenaway, Christopher Harrison és Chris Noring --- Felelősség kizárása: Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.

javascript

JavaScript alapok: Adattípusok

Az adattípusok a JavaScript egyik alapvető fogalma, amivel minden általad írt programban találkozol. Gondolj az adattípusokra úgy, mint az alexandriai ősi könyvtárosok által használt iratrendszerre – külön helyük volt a költészetről, matematikáról és történelmi feljegyzésekről szóló tekercseknek. A JavaScript hasonló módon rendezi az információkat, külön kategóriákba sorolva az adat különböző fajtáit. Ebben az órában megismerkedünk a JavaScript működéséhez szükséges alapvető adattípusokkal. Megtanulod, hogyan kezeld a számokat, a szöveget, az igaz/hamis értékeket, és megérted, miért fontos a helyes típus kiválasztása a programjaidhoz. Ezek a fogalmak elsőre elvontnak tűnhetnek, de gyakorlással másodlagos természetté válnak. Az adattípusok megértése sokkal átláthatóbbá teszi a JavaScript többi részét. Ahogy az építészeknek is ismerniük kell az építőanyagokat, mielőtt katedrálist emelnek, ezek az alapok támogatják az összes későbbi munkádat. ## Előadás előtti kvíz Előadás előtti kvíz Ez az óra a JavaScript alapjait fedi le, amely a weben az interaktivitást biztosítja. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Változók JavaScriptben") [](https://youtube.com/watch?v=AWfA95eLdq8 "Adattípusok JavaScriptben") Kezdjük a változókkal és az őket kitöltő adattípusokkal! ## Változók A változók a programozás alapvető építőelemei. Mint a középkori alkimisták által használt felcímkézett üvegek, amelyekben különféle anyagokat tároltak, a változók lehetővé teszik az információ tárolását, és egy leíró nevet adnak neki, hogy később hivatkozhass rá. Szeretnéd megjegyezni valakinek az életkorát? Tárold egy age nevű változóban. Követnéd egy felhasználó nevét? Tartsd egy userName nevű változóban. A modern változólétrehozási megközelítésre koncentrálunk JavaScriptben. Az itt tanult technikák a nyelv évek során lezajlott fejlődésének és a programozói közösség jó gyakorlataiban fejlesztett módszereknek az eredményei. Változó létrehozásának és deklarálásának szintaxisa a következő [kulcsszó] [név]. Két részből áll: - Kulcsszó. Használd a let-et változókhoz, amelyek értéke változhat, vagy a const-ot olyan értékekhez, amik állandóak. - A változó neve, egy általad választott leíró név. ✅ A let kulcsszót az ES6 vezette be, és lehetővé teszi a változó számára az úgynevezett _blokkszintű hatókört_. Ajánlott let-et vagy const-ot használni a régebbi var helyett. A blokkszintű hatóköröket a későbbi részekben részletesebben tárgyaljuk. ### Feladat – változókkal való munka 1. Deklarálj egy változót! Kezdjük az első változónk létrehozásával: ```javascript let myVariable; ``` Ez mit eredményez: - Ez megmondja a JavaScriptnek, hogy hozzon létre egy myVariable nevű tárolóhelyet - A JavaScript lefoglal helyet a memóriában ehhez a változóhoz - A változó jelenleg nincs értéke (undefined) 2. Adj neki értéket! Most töltsük fel valamilyen értékkel a változót: ```javascript myVariable = 123; ``` Az értékadás működése: - Az = operátor értéket rendel a változóhoz, jelen esetben 123-at - A változó most már az adott értéket tartalmazza, nem undefined - A myVariable segítségével a kódodban hivatkozhatsz erre az értékre > Megjegyzés: az = használata ebben az órában egy "értékadó operátort" jelent, amelyet érték hozzárendelésére használunk. Nem egyenlőséget jelöl. 3. Csináld okosan! Valójában egyesítsük ezt a két lépést: ```javascript let myVariable = 123; ``` Ez a megközelítés hatékonyabb: - Egyszerre deklarálod a változót és rendelsz hozzá értéket - Ez a fejlesztők által használt szokásos gyakorlat - Csökkenti a kód hosszát, miközben megőrzi az átláthatóságot 4. Gondolj újra! Mi van, ha más számot szeretnénk tárolni? ```javascript myVariable = 321; ``` Az újraértékadás megértése: - A változó most 321-et tartalmaz az eredeti 123 helyett - Az előző érték felülíródik – a változók egyszerre csak egy értéket tárolnak - Ez a változtathatóság a let-tel deklarált változók kulcsjellemzője ✅ Próbáld ki! Böngésződben írhatsz közvetlenül JavaScriptet. Nyisd meg a böngésző eszközfejlesztőit, a konzolban találsz promptot; írd be: let myVariable = 123, nyomj entert, majd írd be: myVariable. Mi történik? Figyelem, ezekről a fogalmakról többet tanulsz a következő leckékben. ### 🧠 Változók jártassági ellenőrzése Lássuk, hogy állsz a változókkal: - Tudod magyarázni a különbséget a deklarálás és az értékadás között? - Mi történik, ha használni próbálsz egy változót, mielőtt deklarálnád? - Mikor választanád a let-et a const helyett egy változóhoz? ## Konstansok Néha olyan információt kell tárolni, ami nem változhat a program futása alatt. Gondolj a konstansokra, mint az ókori Görögországban Eukleidész által megalkotott matematikai alapelvekre – egyszer bebizonyították és dokumentálták, azok későbbi hivatkozásig változatlanok maradtak. A konstansok hasonlóan működnek, mint a változók, de egy fontos korlátozással: az értékük egyszer hozzárendelve, nem változtatható. Ez az állandóság megakadályozza a kritikus értékek véletlen módosítását a programodban. A konstans deklarálás és inicializálás ugyanazokat az alapelveket követi, mint a változóké, azzal a különbséggel, hogy a const kulcsszót használjuk. A konstansokat általában nagybetűvel nevezzük el. Ez a kód mit csinál: - Létrehoz egy MY_VARIABLE nevű konstansot, amely értéke 123 - Használ nagybetűs konvenciót a konstansokhoz - Megakadályoz bármilyen későbbi változtatást az értéken A konstansokra két fő szabály vonatkozik: - Azonnal értéket kell adni nekik – nem lehet üres konstans! - Az érték soha nem változtatható meg – ha megpróbálod, JavaScript hibát dob. Nézzük, mire gondolok: Egyszerű érték – A következők NEM megengedettek: ```javascript const PI = 3; PI = 4; // nem megengedett ``` Ezt jegyezd meg: - A konstans újraértékadási kísérlete hibát okoz - Megvédi a fontos értékeket a véletlen változtatásoktól - Garantálja, hogy az érték következetes marad a program során Objektum hivatkozás védett – A következő NEM engedélyezett: ```javascript const obj = { a: 3 }; obj = { b: 5 } // nem megengedett ``` Ezt jelenti: - Megakadályozza, hogy az egész objektumot egy újra cseréljük - Védi az eredeti objektum hivatkozását - Fenntartja az objektum identitását a memóriában Objektum érték nem védett – A következő MEGENGEDHETŐ: ```javascript const obj = { a: 3 }; obj.a = 5; // engedélyezett ``` Ez történik itt: - Módosítja az objektumon belüli tulajdonság értékét - Megtartja az objektum azonos hivatkozását - Mutatja, hogy az objektum tartalma változhat, miközben a hivatkozás állandó marad > Megjegyzés: a const azt jelenti, hogy a hivatkozás védett az újraértékadástól. Az érték nem _immobilis_, és változhat, különösen, ha összetett struktúráról, például objektumról van szó. ## Adattípusok A JavaScript különböző kategóriákba sorolja az információt, amelyeket adattípusoknak hívunk. Ez a fogalom hasonló az ókori tudósok tudásrendszerezéséhez – Arisztotelész például különbséget tett az érvelés típusai között, felismerve, hogy a logikai elveket nem lehet egyformán alkalmazni költészetre, matematikára és természetfilozófiára. Az adattípusok azért fontosak, mert különböző műveletek különböző típusú információkkal működnek. Ahogy nem lehet számítást végezni egy ember nevével, vagy matematikai egyenletet ábécé sorrendbe rendezni, a JavaScript is igényli az adott műveletnek megfelelő adattípust. Ennek megértése hibák elkerülését segíti, és megbízhatóbbá teszi a kódodat. A változók sokféle értéket tárolhatnak, például számokat vagy szöveget. Ezeket az értékek különböző típusait hívjuk adattípusnak. Az adattípusok fontosak a szoftverfejlesztésben, mert segítik a fejlesztőt a kódírás és a program futásának módjának megválasztásában. Ezen felül egyes adattípusok különleges jellemzőket is hordozhatnak, amelyek segítségével egy érték további információira lehet következtetni vagy átalakítani azt. ✅ Az adattípusokat JavaScript adatprimitíveknek is hívják, mert ezek a nyelv alacsony szintű adattípusai. Hét primitív adattípus van: string, number, bigint, boolean, undefined, null és symbol. Szánj egy percet arra, hogy elképzeld, mit jelenthet mindegyik. Mi az a zebra? És mi a 0? Vagy a true? ### Számok A számok a legegyszerűbb adattípus a JavaScriptben. Legyen szó egész számról, mint a 42, tizedes tört értékről, mint a 3.14, vagy negatív számról, mint az -5, a JavaScript ezeket egységesen kezeli. Emlékszel az előző változónkra? Amelyikbe 123-at tároltunk? Az valójában egy szám adattípus volt: Fő jellemzők: - A JavaScript automatikusan felismeri a numerikus értékeket - Matematikai műveleteket végezhetsz ezekkel a változókkal - Nem szükséges külön típusdeklaráció A változók bármilyen számot tárolhatnak, beleértve tizedeseket vagy negatív számokat is. A számok aritmetikai operátorokkal is használhatók, erről a következő részben olvashatsz. ### Aritmetikai operátorok Az aritmetikai operátorok lehetővé teszik a matematikai számításokat JavaScriptben. Ezek az operátorok ugyanazokat az alapelveket követik, amelyeket a matematikusok évszázadokon át használtak – ugyanazok a jelek szerepeltek tudósok, például Al-Khwarizmi írásaiban, aki az algebrai jelölést fejlesztette ki. Az operátorok úgy működnek, ahogy a hagyományos matematikában elvárható: a plusz az összeadást, a mínusz a kivonást, és így tovább jelenti. Számos típusú operátor létezik aritmetikai funkciók elvégzéséhez, itt néhány közülük: ✅ Próbáld ki! Végezhetsz aritmetikai műveletet az böngésző konzoljában. Meglepnek a kapott eredmények? ### 🧮 Matematikai tudás ellenőrzése: Biztos számítás Teszteld az aritmetikai ismereteidet: - Mi a különbség a / (osztás) és a % (maradékosztás) operátorok között? - Meg tudod jósolni, hogy mennyi a 10 % 3 eredménye? (Tipp: nem 3.33...) - Miért lehet hasznos a maradékosztás programozásban? ### Szövegek (Strings) A JavaScriptben a szöveges adatokat stringek (karaktersorozatok) reprezentálják. A "string" kifejezés onnan ered, hogy olyan karaktereket jelöl, amelyeket egymás mögé fűznek, hasonlóan a középkori remeték által készített kéziratok betűinek összekapcsolásához, hogy szókat és mondatokat alkossanak. A stringek alapvetőek a webfejlesztésben. A weboldalon megjelenő minden szövegrészlet – felhasználónevek, gombfeliratok, hibaüzenetek, tartalom – stringként van kezelve. A stringek ismerete létfontosságú a funkcionális felhasználói felületek készítéséhez. A stringek olyan karakterek halmaza, amelyeket egyetlen vagy dupla idézőjel között helyezünk el. Ezeket kell tudni: - String definícióhoz használhatsz egyedi ' vagy dupla " idézőjeleket - Szöveges adatokat tárol, amelyek tartalmazhatnak betűket, számokat és szimbólumokat - A string értékeket változókhoz rendelheted későbbi felhasználásra - Idézőjeleket kell használni, hogy megkülönböztesd a szöveget a változónévktől Ne feledd, mindig idézőjeleket használj string írásakor, különben a JavaScript változónévként fogja értelmezni. ### Stringek formázása A string manipuláció lehetővé teszi, hogy szöveg elemeket összefűzz, változókat illess be, és dinamikus tartalmat hozz létre, amely a program állapotának megfelelően változik. Ez a technika lehetővé teszi a szöveg programozott összeállítását. Gyakran szükség van több string összefűzésére – ezt hívjuk konkatenációnak. A két vagy több sztring összefűzéséhez, vagy összekapcsolásához használjuk a + operátort. Lépésről lépésre, ez történik: - Összekapcsol több sztringet a + operátor segítségével - Összefűzi a sztringeket közvetlenül szóközök nélkül az első példában - Beszúr szóközöket " " a sztringek közé az olvashatóság érdekében - Beilleszt írásjeleket, például vesszőket a megfelelő formázás érdekében ✅ Miért igaz az, hogy JavaScriptben 1 + 1 = 2, de '1' + '1' = 11? Gondolkodj el rajta. És mi a helyzet a '1' + 1-gyel? Sablon literálok egy másik módja a sztringek formázásának, amikor a idézőjelek helyett fordított idézőjelet (backtick) használunk. Bármi, ami nem sima szöveg, helyezkedjen el ${ } helyettesítő jelölők között. Ez vonatkozik bármilyen változókra is, amelyek sztringek lehetnek. Értsük meg minden részletét: - Használja a hátidézőjelet ` `` az egyszerű idézőjelek helyett sablon literálok létrehozásához - Beágyazza a változókat közvetlenül a ${} helyettesítő jel segítségével - Megőrzi a szóközöket és formázást pontosan úgy, ahogy írva van - Könnyebbé teszi a változókat tartalmazó bonyolult sztringek létrehozását Bármelyik módszerrel elérheted a kívánt formázást, de a sablon literálok tiszteletben tartják a szóközöket és a sortöréseket. ✅ Mikor használnád szívesebben a sablon literált, mint az egyszerű sztringet? ### 🔤 Sztring Mesterteszt: Szövegmanipulációs Biztonság Értékeld sztring ismereteidet: - El tudod magyarázni, miért egyenlő '1' + '1' '11'-gyel ahelyett, hogy 2 lenne? - Melyik sztring metódust találod olvashatóbbnak: az összefűzést vagy a sablon literálokat? - Mi történik, ha elfelejted az idézőjeleket egy sztring körül? ### Booleánok A booleánok az adatok legegyszerűbb formáját képviselik: csak két értékük lehet – true vagy false. Ez a bináris logikai rendszer George Boole, egy 19. századi matematikus munkájára vezethető vissza, aki kidolgozta a Boole-algebrát. Egyszerűségük ellenére a booleán értékek alapvetőek a programlogikában. Lehetővé teszik a kód számára, hogy döntéseket hozzon feltételek alapján – például hogy egy felhasználó be van-e jelentkezve, megnyomták-e egy gombot, vagy teljesülnek-e bizonyos kritériumok. A booleánok csak két értéket vehetnek fel: true vagy false. Segítségükkel eldönthető, hogy bizonyos kódsorok lefutnak-e, ha adott feltételek teljesülnek. Sok esetben az operátorok segítenek beállítani egy booleán értékét, és gyakran figyelhetjük meg, hogy változók inicializálása vagy értékük frissítése operátorral történik. A fenti példában: - Létrehoztunk egy változót, amely a true booleán értéket tárolja - Bemutattuk, hogyan tároljuk el a false booleán értéket - Használtuk a pontos true és false kulcsszavakat (idézőjelek nélkül) - Felhasználtuk ezeket a változókat feltételes utasításokban való alkalmazásra ✅ Egy változó „igazságosnak” tekinthető, ha az értéke a booleán true-nak felel meg. Érdekesség, hogy JavaScriptben minden érték igazságos, hacsak nem hamisnak definiálják. ### 🎯 Booleán logika teszt: Döntéshozatali képességek Teszteld booleán ismereteidet: - Miért gondolod, hogy JavaScriptnek „igazságos” és „hamis” értékei is vannak az egyszerű true és false mellett? - Meg tudod tippelni, melyik az alábbiak közül hamis érték: 0, "0", [], "false"? - Hogyan lehetnek a booleánok hasznosak a programfolyamat szabályozásában? --- ## 📊 Az adatok típusainak összefoglalója ## GitHub Copilot Ügynök kihívás 🚀 Használd az Agent módot az alábbi kihívás teljesítéséhez: Leírás: Készíts egy személyes információkezelő alkalmazást, amely bemutatja a tanult JavaScript adattípusokat valós adatkezelési helyzetekben. Feladat: Írj egy JavaScript programot, amely létrehoz egy felhasználói profil objektumot, amely tartalmazza: a személy nevét (string), életkorát (szám), tanulói státuszt (boolean), kedvenc színeit tömbként, és egy cím objektumot utcával, várossal és irányítószámmal. Tartalmazzon funkciókat a profil információk megjelenítésére és egyéni mezők frissítésére. Mutasd be a sztring összefűzést, sablon literálokat, aritmetikai műveleteket az életkorral, és booleán logikát a tanulói státusz kezeléséhez. További információ az agent módáról. ## 🚀 Kihívás A JavaScriptnek vannak olyan viselkedési sajátosságai, amelyek meglephetik a fejlesztőket. Itt egy klasszikus példa: próbáld ki a böngésződ konzoljában: let age = 1; let Age = 2; age == Age és figyeld meg az eredményt. Ez false értéket ad – meg tudod mondani, miért? Ez csak egy a sok JavaScript viselkedési jellemző közül, amit érdemes megérteni. Ezek ismerete segít megbízhatóbb kód írásában és a hibák hatékonyabb felderítésében. ## Előadás utáni kvíz Előadás utáni kvíz ## Áttekintés & Önálló tanulás Nézd meg ezt a JavaScript gyakorlatsort és próbálj ki egy feladatot. Mit tanultál? ## Feladat Adattípusok gyakorlása ## 🚀 JavaScript adattípus mesterkurzus idővonalad ### ⚡ Mit tehetsz meg a következő 5 percben - [ ] Nyisd meg a böngésző konzolt és hozz létre 3 változót különböző adattípusokkal - [ ] Próbáld ki a kihívást: let age = 1; let Age = 2; age == Age és derítsd ki, miért hamis az eredmény - [ ] Gyakorold sztring összefűzéssel a neved és kedvenc számod összekapcsolását - [ ] Teszteld, mi történik, ha számot adsz hozzá sztringhez ### 🎯 Mit érhetsz el ezen az órán - [ ] Teljesítsd az előadás utáni kvízt és ismételd át az összetettebb témákat - [ ] Készíts egy mini kalkulátort, ami összead, kivon, szoroz és oszt két számot - [ ] Írj egy egyszerű névformázót sablon literálokkal - [ ] Fedezd fel a == és === összehasonlító operátorok közötti különbségeket - [ ] Gyakorold az adattípusok közötti konvertálást ### 📅 Heti alap JavaScript feladatok - [ ] Készítsd el a feladatot magabiztosan és kreatívan - [ ] Hozz létre egy személyes profil objektumot az összes tanult adattípussal - [ ] Gyakorolj a CSS-Tricks JavaScript feladatokkal - [ ] Készíts egy egyszerű űrlap ellenőrzőt booleán logikával - [ ] Kísérletezz tömb és objektum adattípusokkal (a következő leckék előzetese) - [ ] Csatlakozz egy JavaScript közösséghez és kérdezz az adattípusokról ### 🌟 Havi fejlődési terv - [ ] Integráld az adattípus-ismereteket nagyobb programozási projektekbe - [ ] Értsd meg, mikor és miért érdemes az adott adattípust használni valós alkalmazásokban - [ ] Segíts más kezdőknek megérteni a JavaScript alapjait - [ ] Készíts egy kis alkalmazást, amely különféle felhasználói adatokat kezel - [ ] Fedezd fel a fejlett adattípus fogalmakat, mint a típuskonverzió és a szigorú egyenlőség - [ ] Közreműködj nyílt forráskódú JavaScript projektek dokumentációjának fejlesztésében ### 🧠 Záró adattípus mester teszt Ünnepeld meg JavaScript alapjaidat: - Melyik adattípus viselkedése lepett meg a legjobban? - Mennyire érzed magad kényelmesen, amikor változókat és konstansokat magyarázol egy barátnak? - Mi volt a legérdekesebb dolog, amit a JavaScript típus rendszeréről fedeztél fel? - Milyen valós alkalmazást tudsz elképzelni ezek alapján? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Jó tudni: Ezt a dokumentumot az AI fordító szolgáltatás Co-op Translator segítségével fordítottuk. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum a saját nyelvén tekintendő hivatalos forrásnak. Kritikus információk esetén szakmai, emberi fordítást javaslunk. Nem vállalunk felelősséget az ebből eredő félreértésekért vagy félreértelmezésekért. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Alapok: Metódusok és Függvények

## Előadás Előtti Kvíz Előadás előtti kvíz Ugyanannak a kódnak az ismételt írása az egyik leggyakoribb frusztráció a programozásban. A függvények ezt a problémát oldják meg azzal, hogy lehetővé teszik a kód újrahasznosítható blokkokba csomagolását. Gondolj a függvényekre úgy, mint azokra a szabványosított alkatrészekre, amelyek Henry Ford futószalagját forradalmivá tették – ha egyszer létrehozol egy megbízható elemet, bárhol használhatod, anélkül, hogy újra kellene építened. A függvények lehetővé teszik, hogy a kód egy darabját összecsomagold, és aztán újra felhasználd a programod során. Ahelyett, hogy mindenhol ugyanazt a logikát másolnád be, egyszer létrehozod a függvényt, és hívod, amikor szükséges. Ez a megközelítés rendezetté teszi a kódod, és sokkal egyszerűbbé válik a frissítés. Ebben a leckében megtanulod, hogyan készíts saját függvényeket, hogyan adj át nekik információt, és hogyan kapj vissza hasznos eredményeket. Megismered a függvények és metódusok közötti különbséget, tanulsz modern szintaxisokat, és meglátod, hogyan működhetnek együtt a függvények. Lépésről lépésre átvezetünk ezeken a fogalmakon. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metódusok és Függvények") ## Függvények A függvény egy önállóan zárt kódblokk, amely egy adott feladatot végez el. Olyan logikát foglal magába, amit előhívhatsz, amikor csak szükség van rá. Ahelyett, hogy ugyanazt a kódot több helyen írnád meg a programban, csomagold be egy függvénybe, és hívd meg a függvényt, amikor szükséges. Ez a megközelítés megtisztítja a kódod, és a módosításokat sokkal könnyebbé teszi. Gondolj csak bele, milyen nehéz lenne karbantartani, ha egy logikát 20 különböző helyen kellene megváltoztatnod a kódbázisban. Fontos, hogy leíró neveket adj a függvényeidnek. Egy jól elnevezett függvény világosan kommunikálja a célját – amikor például a cancelTimer()-t látod, azonnal érted, mit tesz, ahogyan egy egyértelműen felcímkézett gomb is pontosan megmutatja, mi történik, ha rákattintasz. ## Függvény létrehozása és meghívása Nézzük meg, hogyan lehet létrehozni egy függvényt. A szintaxis egy következetes mintát követ: Bontsuk le ezt: - A function kulcsszó jelzi a JavaScriptnek: „Hé, most egy függvényt hozok létre!” - A nameOfFunction helyére adhatod a függvényed leíró nevét - A zárójelek () paraméterek helye (erről majd hamarosan szó lesz) - A kapcsos zárójelek {} tartalmazzák a tényleges kódot, ami akkor fut le, amikor meghívod a függvényt Most készítsünk egy egyszerű üdvözlő függvényt, hogy lássuk ezt a gyakorlatban: Ez a függvény kiírja a "Hello, world!" üzenetet a konzolra. Miután definiáltad, bármennyiszer használhatod. A függvény végrehajtásához (vagyis a "meghívásához") írd le a nevét, majd tedd utána a zárójeleket. A JavaScript megengedi, hogy a függvényt a hívás előtt vagy után definiáld – a JavaScript motor kezeli a végrehajtási sorrendet. Ennek a sor futtatásakor lefut az összes kód a displayGreeting függvényen belül, és a böngésző konzolján megjelenik a "Hello, world!" üzenet. Ezt a függvényt többször is meghívhatod. ### 🧠 Függvény Alapismeretek Ellenőrzése: Az Első Függvényeid Felépítése Nézzük, hogy állsz az alapokkal: - Meg tudod magyarázni, miért használunk kapcsos zárójeleket {} a függvénydefinícióban? - Mi történik, ha a displayGreeting-et írod ki zárójelek nélkül? - Miért lehet hasznos ugyanazt a függvényt többször meghívni? ### Függvényírás legjobb gyakorlatai Íme néhány tipp, hogy nagyszerű függvényeket írj: - Adj a függvényeidnek világos, leíró neveket – később hálás leszel magadnak! - Használj camelCase írásmódot többszavas nevekhez (például calculateTotal a calculate_total helyett) - Törekedj arra, hogy minden függvény egyetlen dolgot csináljon jól ## Információ átvitele függvénynek A displayGreeting függvényünk korlátozott – csak mindenki számára "Hello, world!"-öt tud megjeleníteni. A paraméterek lehetővé teszik, hogy a függvény rugalmasabb és hasznosabb legyen. A paraméterek olyan helyőrzők, ahová minden futtatáskor különböző értékeket adhatsz, így ugyanaz a függvény különböző információkkal dolgozhat. A paramétereket a zárójelek között sorolod fel a függvény definiálásakor, vesszővel elválasztva: Minden paraméter úgy viselkedik, mint egy helyőrző – amikor valaki meghívja a függvényed, ő majd megadja azokat a tényleges értékeket, amelyek ezekbe a helyekbe kerülnek. Frissítsük az üdvözlő függvényünket úgy, hogy elfogadjon valaki nevét: Láthatod, hogy hogyan használunk backtickeket (` `) és ${}`-t, hogy közvetlenül az üzenetbe illesszük be a nevet – ez egy ún. template literal, ami nagyon kényelmes módja a változókat tartalmazó szövegek építésének. Most már amikor meghívjuk a függvényt, bármilyen nevet átadhatunk neki: A JavaScript a 'Christopher' stringet a name paraméterhez rendeli, így személyre szabott üzenetet hoz létre: "Hello, Christopher!" ## Alapértelmezett értékek Mi van akkor, ha néhány paramétert opcionálissá szeretnénk tenni? Itt jönnek jól az alapértelmezett értékek! Tegyük fel, hogy meg akarjuk engedni, hogy a köszönés szavát testre szabják, de ha valaki nem ad meg egyet, akkor alapból "Hello"-t használunk. Alapértelmezett értéket az egyenlőségjellel tudsz megadni, hasonlóan egy változó értékadásához: Itt a name még mindig kötelező, de a salutation rendelkezik egy tartalék értékkel 'Hello', ha senki nem ad meg más köszöntést. Most kétféleképpen is meghívhatjuk ezt a függvényt: Az első híváskor a JavaScript az alapértelmezett "Hello" szót használja, mivel nem adtunk meg köszöntést. A második híváskor a saját "Hi" köszönésünk jelenik meg. Ez a rugalmasság teszi a függvényeket alkalmazkodóvá különböző helyzetekhez. ### 🎛️ Paraméterek Mesterellenőrzése: Függvények Rugalmasabbá Tétele Teszteld a paraméterek ismeretét: - Mi a különbség egy paraméter és egy argumentum között? - Miért hasznosak az alapértelmezett értékek a valós programozásban? - Meg tudod jósolni, mi történik, ha több argumentumot adsz át, mint amennyi paraméter? ## Visszatérési értékek Eddig a függvényeink csak üzeneteket írtak ki a konzolra, de mi van, ha azt szeretnéd, hogy egy függvény számoljon ki valamit és adja vissza az eredményt? Itt jönnek képbe a visszatérési értékek. Ahelyett, hogy csak megjelenítene valamit, a függvény visszaadhat egy értéket, amit eltárolhatsz egy változóban vagy más kódrészekben felhasználhatsz. Érték visszaadásához használd a return kulcsszót, majd írd meg, mit szeretnél visszaadni: Fontos megjegyezni: amikor egy függvény eléri a return utasítást, azonnal leáll, és visszaküldi az értéket annak, aki meghívta. Alakítsuk át az üdvözlő függvényt úgy, hogy ne írja ki az üzenetet, hanem adja vissza: Most nem írja ki az üdvözlést, hanem létrehozza az üzenetet és visszaadja nekünk. A visszaadott értéket el tudjuk tárolni egy változóban, mint bármely más értéket: Most a greetingMessage változó tartalmazza a "Hello, Christopher" szöveget, és bárhol használhatjuk – megjeleníthetjük egy weboldalon, beilleszthetjük egy emailbe vagy átadhatjuk másik függvénynek. ### 🔄 Visszatérési Értékek Ellenőrzése: Eredmények Visszakapása Értékeld a visszatérési értékek ismeretét: - Mi történik a függvény visszatérési utasítása után lévő kóddal? - Miért jobb gyakran visszaadni értékeket, mint csak kiírni őket a konzolra? - Tud egy függvény különböző típusú értékeket (sztring, szám, logikai) visszaadni? ## Függvények paraméterként függvényeknek Függvényeket átadhatsz paraméterként más függvényeknek. Ez a fogalom eleinte bonyolultnak tűnhet, de egy erős eszköz, amely rugalmas programozási mintákat tesz lehetővé. Ezt a mintát gyakran használjuk olyan helyeken, ahol azt mondjuk, hogy „amikor valami történik, csináld meg ezt a másik dolgot”. Például: „amikor a számláló végzett, futtasd ezt a kódot”, vagy „amikor a felhasználó rákattint a gombra, hívd ezt a függvényt”. Nézzük a setTimeout-ot, ami beépített függvény: vár egy adott időt, majd lefuttat egy kódot. Meg kell mondanunk, milyen kódot futtasson – erre tökéletes egy függvény átadása! Próbáld ki ezt a kódot – 3 másodperc múlva egy üzenetet fogsz látni: Figyeld meg, hogy a displayDone-t (zárójelek nélkül) adjuk át a setTimeout-nak. Nem mi hívjuk meg a függvényt, hanem átadjuk a setTimeout-nak, hogy „3 másodperc múlva hívd ezt meg”. ### Név nélküli (anonim) függvények Néha szükség van egy függvényre csak egyetlen alkalommal, és nem akarsz nevet adni neki. Gondolj csak bele – ha csak egyszer használod, miért ne hagynád a kódod tisztán anélkül, hogy egy extra névvel bonyolítanád? A JavaScript lehetővé teszi, hogy anonim függvényeket hozz létre – olyan függvényeket, amelyeknek nincs nevük, és ott definiálod őket, ahol éppen szükséged van rájuk. Így néz ki, ha átírod a számláló példánkat anonim függvénnyel: Ugyanazt az eredményt éri el, de a függvény közvetlenül a setTimeout hívásában van definiálva, így nem kell külön függvénydeklaráció. ### Nyílfüggvények (fat arrow functions) A modern JavaScript-ben van egy még rövidebb írásmód a függvényekhez, az úgynevezett nyílfüggvények. Ezek => jelölést használnak (ami egy nyílra hasonlít – érted?), és nagyon népszerűek a fejlesztők körében. A nyílfüggvényekkel kihagyhatod a function kulcsszót, és tömörebb kódot írhatsz. Íme a számláló példa nyílfüggvénnyel: A () a paraméterek helye (itt üres), utána jön a nyíl =>, majd a függvény törzse kapcsos zárójelben. Ez ugyanazt a funkciót biztosítja, tömörebb szintaxissal. ### Mikor melyiket használjuk? Mikor használd az egyes megoldásokat? Egy praktikus iránymutatás: ha többször is használni fogod a függvényt, adj neki nevet és definiáld külön. Ha csak egy konkrét, egyszeri célra kell, fontold meg az anonim függvényt. A nyílfüggvények és a hagyományos szintaxis is helyes választás, bár a nyílfüggvények egyre elterjedtebbek a modern JavaScript kódbázisokban. ### 🎨 Függvény Stílusok Ellenőrzése: A Megfelelő Szintaxis Kiválasztása Teszteld a szintaxis ismereted: - Mikor előnyösebb a nyílfüggvény a hagyományossal szemben? - Mi az anonim függvények fő előnye? - Tudsz olyan helyzetet mondani, amikor egy névvel ellátott függvény jobb, mint egy anonim? --- ## 🚀 Feladat Meg tudod fogalmazni egy mondatban a függvények és metódusok közti különbséget? Próbáld meg! ## GitHub Copilot Agent Feladat 🚀 Használd az Agent módot az alábbi kihívás teljesítéséhez: Leírás: Készíts egy hasznos matematikai függvénykönyvtárat, amely bemutatja a leckében tárgyalt különböző függvényfogalmakat, beleértve a paramétereket, alapértelmezett értékeket, visszatérési értékeket és a nyílfüggvényeket. Prompt: Hozz létre egy mathUtils.js nevű JavaScript fájlt, amely a következő függvényeket tartalmazza: 1. Egy add nevű függvény, amely két paramétert fogad és visszaadja az összegüket 2. Egy multiply nevű függvény alapértelmezett paraméterértékekkel (a második paraméter alapértelmezettként 1) 3. Egy square nevű nyílfüggvény, amely egy számot fogad és visszaadja annak négyzetét 4. Egy calculate nevű függvény, amely paraméterként másik függvényt és két számot fogad, majd alkalmazza a függvényt ezekre a számokra 5. Mutasd be minden függvény hívását megfelelő tesztesetekkel További információk az agent módról. ## Előadás Utáni Kvíz Előadás utáni kvíz ## Áttekintés & Önálló tanulás Érdemes többet olvasni a nyílfüggvényekről, mert egyre inkább használatosak a kódbázisokban. Gyakorold, hogy először egy függvényt írsz, aztán újraírjátok ezt a szintaxist használva. ## Házi feladat Fun with Functions --- ## 🧰 A JavaScript Függvények Eszköztára Összefoglaló --- ## 🚀 A JavaScript Függvények Mesteri Használatának Idővonala ### ⚡ Mit Tudsz Megtenni a Következő 5 Percben - [ ] Írj egy egyszerű függvényt, ami visszaadja a kedvenc számodat - [ ] Készíts egy függvényt, aminek két paramétere van, és összeadja azokat - [ ] Próbáld meg átalakítani egy hagyományos függvényt arrow function szintaxisra - [ ] Gyakorold a kihívást: magyarázd el a függvények és metódusok közötti különbséget ### 🎯 Mit érhetsz el ezen az órán - [ ] Fejezd be az óra utáni kvízt, és nézd át az esetleg zavaros fogalmakat - [ ] Építsd meg a matematikai segédfüggvények könyvtárát a GitHub Copilot kihívás alapján - [ ] Hozz létre egy függvényt, amely paraméterként egy másik függvényt használ - [ ] Gyakorold alapértelmezett paraméterekkel írt függvények írását - [ ] Kísérletezz template literálokkal a függvények visszatérési értékeiben ### 📅 Hét napos függvény mesterkurzusod - [ ] Fejezd be a „Szórakozás a függvényekkel” feladatot kreatív módon - [ ] Refaktorálj ismétlődő kódot, amit írtál, újrahasználható függvényekké - [ ] Építs egy kis számológépet kizárólag függvények használatával (globális változók nélkül) - [ ] Gyakorold az arrow function-öket tömbmódszerekkel, mint a map() és filter() - [ ] Hozz létre egy hasznos segédfüggvény gyűjteményt gyakori feladatokhoz - [ ] Tanulmányozd a magasabb rendű függvényeket és a funkcionális programozás fogalmait ### 🌟 Hónapos átalakulásod - [ ] Sajátítsd el a haladó függvényfogalmakat, mint a closures és scope - [ ] Építs egy projektet, amely erősen használ függvénykompozíciót - [ ] Járulj hozzá open source projektekhez a függvény dokumentációk fejlesztésével - [ ] Taníts meg másokat a függvényekről és a különböző szintaxis stílusokról - [ ] Fedezd fel a funkcionális programozási paradigmákat JavaScriptben - [ ] Készíts egy személyes, újrahasználható függvény könyvtárat jövőbeli projektekhez ### 🏆 Végső Függvények Bajnoka Ellenőrzés Ünnepeld meg függvénymesterséged: - Mi a leghasznosabb függvény, amit eddig létrehoztál? - Hogyan változtatta meg a függvények tanulása a kód szervezéséhez való hozzáállásodat? - Melyik függvényszintaxist részesíted előnyben, és miért? - Milyen valós problémát oldanál meg egy függvény megírásával? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Felelősségkizárás: Ez a dokumentum az AI fordító szolgáltatás, a Co-op Translator segítségével készült. Bár igyekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti, anyanyelven készült dokumentumot kell tekinteni a hivatalos forrásnak. Fontos információk esetén professzionális, humán fordítást javaslunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy félrefordításokért. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Alapok: Döntéshozás

Gondolkodtál már azon, hogyan hoznak az alkalmazások okos döntéseket? Például, hogyan választja ki egy navigációs rendszer a leggyorsabb útvonalat, vagy hogyan dönt egy termosztát arról, mikor kapcsolja be a fűtést? Ez a döntéshozatal alapvető fogalma a programozásban. Ahogy Charles Babbage Analitikus Gépét is úgy tervezték, hogy különböző műveletsorozatokat hajtson végre feltételek alapján, a modern JavaScript programoknak is döntéseket kell hozniuk változó körülmények között. Ez a képesség, hogy elágaznak és döntenek, az, ami a statikus kódot válaszadó, intelligens alkalmazásokká alakítja. Ebben a leckében megtanulod, hogyan valósítsd meg a feltételes logikát a programjaidban. Megvizsgáljuk a feltételes utasításokat, összehasonlító operátorokat, és logikai kifejezéseket, amelyek lehetővé teszik, hogy a kódod értékelje a helyzeteket és megfelelően reagáljon. ## Előzetes kvíz Előzetes kvíz A döntéshozatal képessége és a programfolyamat irányítása alapvető aspektusa a programozásnak. Ebben a részben arról lesz szó, hogyan vezérelheted JavaScript programjaid végrehajtási útját Boole értékek és feltételes logika használatával. [](https://youtube.com/watch?v=SxTp8j-fMMY "Döntéshozás") ## Rövid ismétlés a Booleanokról Mielőtt mélyebben belemennénk a döntéshozatalba, nézzük át újra a Boole értékeket az előző leckénkből. Az angol matematikusról, George Boole-ról elnevezett értékek bináris állapotokat képviselnek – vagy true vagy false. Nincs köztes érték. Ezek a bináris értékek alkotják az összes számítástechnikai logika alapját. Minden döntés, amit a programod hoz, végső soron egy Boolean kiértékelésre vezethető vissza. Boolean változókat így hozhatsz létre: Ez két változót hoz létre explicit Boolean értékekkel. ✅ A Booleanokat az angol matematikus, filozófus és logikus George Boole (1815–1864) után nevezték el. ## Összehasonlító operátorok és Boole-ok A gyakorlatban ritkán állítasz be Boolean értékeket manuálisan. Inkább feltételek kiértékelésével generálod őket: „Ez a szám nagyobb-e annál?” vagy „Ezek az értékek egyenlőek?” Az összehasonlító operátorok teszik lehetővé ezeket az értékeléseket. Két értéket hasonlítanak össze, és a két operandus kapcsolatától függően Boolean eredményt adnak vissza. ✅ Teszteld tudásodat néhány összehasonlítás írásával a böngésződ konzoljában. Lepnek meg valamelyik visszakapott értékek? ### 🧠 Összehasonlító Mesterpróba: A Boolean Logika Megértése Teszteld összehasonlítási tudásodat: - Miért gondolod, hogy a === (szigorú egyenlőség) általában előnyösebb, mint a == (laza egyenlőség)? - El tudod-e képzelni, hogy mi a visszatérési értéke a 5 === '5' kifejezésnek? És a 5 == '5'-nek? - Mi a különbség a !== és a != között? ## If utasítás Az if utasítás olyan, mint ha kérdést tennél fel a kódodban. "Ha ez a feltétel igaz, akkor csináld ezt a dolgot." Valószínűleg ez a legfontosabb eszköz, amit a döntéshozáshoz használsz JavaScript-ben. Így működik: A feltétel a zárójelek között van, és ha az true, a JavaScript lefuttatja a kapcsos zárójelek között lévő kódot. Ha pedig false, a JavaScript egyszerűen kihagyja az egész blokkot. Gyakran használsz összehasonlító operátorokat a feltételek létrehozásához. Nézzünk egy gyakorlati példát: Mivel 1000 >= 800 eredménye true, a blokkban lévő kód végrehajtódik, és a konzolon megjelenik az "Laptop vásárlása!" üzenet. ## If..Else utasítás De mi történik, ha azt akarod, hogy a program más dolgot csináljon, amikor a feltétel hamis? Erre szolgál az else – olyan, mintha lenne egy tartalék terved. Az else utasítás lehetőséget ad arra, hogy azt mond, "ha ez a feltétel nem igaz, akkor csináld inkább ezt." Most mivel a 500 >= 800 értéke false, a JavaScript kihagyja az első blokkot, és helyette lefuttatja az else blokkot. A konzolon megjelenik a "Még nem engedhetem meg magamnak az új laptopot!" üzenet. ✅ Teszteld ennek a kódnak és a következő kódnak a működését a böngésző konzoljában. Módosítsd a currentMoney és laptopPrice változók értékeit, hogy megváltoztasd a console.log()-ban megjelenő üzenetet. ### 🎯 If-Else logika ellenőrzés: Elágazó utak Értékeld felül feltételes logikád: - Mi történik, ha a currentMoney pontosan egyenlő a laptopPrice-szal? - Tudsz gondolni olyan valós életbeli helyzetre, ahol hasznos lenne az if-else logika? - Hogyan terjeszthetnéd ki ezt több árkategória kezelésére? ## Switch utasítás Néha egy értéket több lehetőséggel kell összehasonlítani. Habár több if..else-t is láncolhatnál, ez az eljárás túl bonyolulttá válhat. A switch utasítás tisztább struktúrát nyújt több diszkrét érték kezelésére. A koncepció hasonlít az első telefonközpontokban használt mechanikus kapcsoló rendszerhez – egy bemeneti érték határozza meg, melyik specifikus útvonalon halad a végrehajtás. Így van felépítve: - A JavaScript egyszer értékeli ki a kifejezést - Megkeresi az egyes case ágakat, hogy találjon egyezést - Ha talál egyezést, lefuttatja az adott kódblokkot - A break megmondja a JavaScriptnek, hogy álljon meg és lépjen ki a switch-ből - Ha egyik eset sem egyezik, lefuttatja az default blokkot (ha van) Ebben a példában a JavaScript látja, hogy dayNumber értéke 2, megkeresi az ehhez tartozó case 2-t, beállítja a dayName értékét "Tuesday"-re, majd kilép a switch-ből. Az eredmény? "Today is Tuesday" jelenik meg a konzolon. ✅ Teszteld ennek a kódnak és a következő kódnak a működését a böngésző konzoljában. Módosítsd az a változó értékét, hogy megváltoztasd a console.log() visszatérő üzenetét. ### 🔄 Switch utasítás mesteri szintű elsajátítása: Több lehetőség Teszteld switch ismereteidet: - Mi történik, ha elfelejtesz egy break utasítást? - Mikor használnád a switch-et többszörös if-else helyett? - Miért hasznos a default eset akkor is, ha úgy gondolod, hogy minden lehetőséget lefedtél? ## Logikai operátorok és Boole-ok Az összetett döntések gyakran több feltétel egyidejű kiértékelését igénylik. Ahogyan a Boole algebra lehetővé teszi a matematikusok számára a logikai kifejezések összekapcsolását, a programozás is biztosít logikai operátorokat több Boole feltétel összekapcsolására. Ezek az operátorok kifinomult feltételes logikát tesznek lehetővé az egyszerű igaz/hamis értékelések kombinálásával. Ezek az operátorok lehetővé teszik, hogy hasznos módokon kombináld a feltételeket: - ÉS (&&) azt jelenti, mindkét feltételnek igaznak kell lennie - VAGY (||) azt jelenti, legalább az egyik feltételnek igaznak kell lennie - NEM (!) megfordítja az igaz értéket hamisra (és fordítva) ## Feltételek és döntések logikai operátorokkal Nézzük meg ezeket az operátorokat egy reálisabb példán keresztül: Ebben a példában kiszámolunk egy 20%-os kedvezményes árat (640), majd értékeljük, hogy a rendelkezésre álló pénz fedezi-e a teljes árat VAGY a kedvezményes árat. Mivel 600 eléri a 640 kedvezményes ár küszöböt, a feltétel igazra értékelődik. ### 🧮 Logikai operátorok ellenőrzése: Feltételek kombinálása Teszteld logikai operátor ismereted: - Az A && B kifejezésben mi történik, ha A hamis? B-t egyáltalán kiértékeli? - Tudsz gondolni olyan helyzetet, amikor mindhárom operátorra (&&, ||, !) szükséged lenne egyszerre? - Mi a különbség a !user.isActive és a user.isActive !== true között? ### Negációs operátor Néha könnyebb arról gondolkodni, mikor NEM igaz valami. Például ahelyett, hogy azt kérdeznéd: „Be van-e jelentkezve a felhasználó?”, inkább azt kérdezheted: „NEM jelentkezett be a felhasználó?” Az felkiáltójeles (!) operátor megfordítja helyetted a logikát. A ! operátor olyan, mintha azt mondanád: „ellentéte…”, ha valami true, a ! false-ra váltja, és fordítva. ### Ternáris kifejezések Egyszerű feltételes hozzárendelésekhez a JavaScript egy ternáris operátort biztosít. Ez a tömör szintaxis lehetővé teszi, hogy egy sorban írj feltételes kifejezést, hasznos, ha két érték közül az egyiket kell feltétel alapján hozzárendelni. Olyan, mintha kérdés lenne: „Ez a feltétel igaz? Ha igen, használd ezt az értéket. Ha nem, azt az értéket.” Lentebb egy kézzelfoghatóbb példa: ✅ Szánj pár percet arra, hogy többször elolvasd ezt a kódot. Érted, hogyan működnek ezek az operátorok? Ez az egy sor azt mondja: „A firstNumber nagyobb-e, mint a secondNumber? Ha igen, a firstNumber kerül a biggestNumber változóba. Ha nem, a secondNumber.” A ternáris operátor csak egy rövidebb módja a hagyományos if..else utasításnak: Mindkét megközelítés azonos eredményt ad. A ternáris operátor tömörebb, míg a hagyományos if-else szerkezet olvashatóbb lehet bonyolultabb feltételek esetén. --- ## 🚀 Kihívás Készíts egy programot, amit először logikai operátorokkal írsz meg, majd írj át egy ternáris kifejezéssel. Melyik szintaxist preferálod? --- ## GitHub Copilot Ügynök Kihívás 🚀 Használd az Ügynök módot a következő kihívás teljesítésére: Leírás: Készíts egy átfogó jegyszámoló programot, amely bemutatja a lecke több döntéshozatali fogalmát, beleértve az if-else utasításokat, switch utasításokat, logikai operátorokat és ternáris kifejezéseket. Prompt: Írj egy JavaScript programot, amely egy hallgató számszerű pontszámát (0-100) veszi be, és meghatározza a betűjegyét az alábbi kritériumok szerint: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 alatt Követelmény: 1. Használj if-else utasítást a betűjegy meghatározásához 2. Használj logikai operátorokat annak ellenőrzésére, hogy a diák átment-e (jegy >= 60) ÉS kiváló eredményt ért-e el (jegy >= 90) 3. Használj switch utasítást, hogy konkrét visszajelzést adj minden betűs jegyhez 4. Használj ternáris operátort annak meghatározására, hogy a diák jogosult-e a következő kurzusra (jegy >= 70) 5. Tegyél be bemeneti érvényesítést, hogy a pontszám 0 és 100 között legyen Teszteld a programodat különböző pontszámokkal, beleértve a szélsőértékeket, például 59, 60, 89, 90, és érvénytelen bemeneteket. Tudj meg többet az agent mode-ról itt. ## Előadás utáni kvíz Előadás utáni kvíz ## Áttekintés és önálló tanulás Olvass bővebben a felhasználók rendelkezésére álló sok operátorról az MDN-en. Nézd meg Josh Comeau csodálatos operátor-keresőjét! ## Házi feladat Operátorok --- ## 🧠 Döntéshozó eszköztárad összefoglalója --- ## 🚀 A JavaScript döntéshozói tudásod ütemterve ### ⚡ Mit tudsz elvégezni az elkövetkező 5 percben - [ ] Gyakorold a relációs operátorokat a böngésződ konzoljában - [ ] Írj egy egyszerű if-else utasítást, ami ellenőrzi a korodat - [ ] Próbáld ki a kihívást: írd át az if-else-t ternáris operátor használatával - [ ] Teszteld, mi történik különböző „igaznak” és „hamisnak” vett értékekkel ### 🎯 Mit érhetsz el ezen az órán - [ ] Teljesítsd az előadás utáni kvízt és ismételd át az összetett fogalmakat - [ ] Építsd meg a GitHub Copilot kihívásából a részletes jegyszámítót - [ ] Készíts egy egyszerű döntési fát egy valós példára (például mit vegyél fel) - [ ] Gyakorold több feltétel kombinálását logikai operátorokkal - [ ] Kísérletezz switch utasításokkal különböző felhasználási esetekhez ### 📅 Heti logikai mesterkurzusod - [ ] Teljesítsd az operátorokkal kapcsolatos házi feladatot kreatív példákkal - [ ] Készíts egy mini kvíz alkalmazást különböző feltételkezelési szerkezetekkel - [ ] Építs egy űrlapérvényesítőt, ami több feltételt ellenőriz - [ ] Gyakorold Josh Comeau operátor-kereső gyakorlatait - [ ] Írd át a meglévő kódot jobban illeszkedő feltételes szerkezetekre - [ ] Tanulmányozd a rövidzárlatos értékelést és a teljesítménybeli hatásokat ### 🌟 Havi átalakulásod - [ ] Sajátítsd el a bonyolult, egymásba ágyazott feltételeket és tartsd meg az olvashatóságot - [ ] Építs olyan alkalmazást, amely kifinomult döntéshozói logikát használ - [ ] Adj közre nyílt forráskódú projekteket a feltételes logika fejlesztésében - [ ] Taníts valaki mást a különböző feltételes szerkezetekről és alkalmazási helyzeteikről - [ ] Fedezd fel a funkcionális programozás megközelítéseit feltételes logikával kapcsolatban - [ ] Készíts egy személyes útmutatót a feltételes legjobb gyakorlatokról ### 🏆 Végső döntéshozói bajnok ellenőrzés Ünnepeld meg a logikus gondolkodásodat: - Melyik volt a legsokoldalúbb döntési logika, amit sikeresen megvalósítottál? - Melyik feltételes szerkezet tűnik a legtermészetesebbnek számodra és miért? - Hogyan változtatta meg a problémamegoldó megközelítésedet a logikai operátorok megismerése? - Milyen valós alkalmazás profitálna kifinomult döntéshozói logikából? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Jogi nyilatkozat: Ezt a dokumentumot az AI fordító szolgáltatás, a Co-op Translator segítségével fordítottuk le. Bár a pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális, emberi fordítást javaslunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy félreértelmezésekért. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Alapok: Tömbök és Ciklusok

## Előadás előtti kvíz Előadás előtti kvíz Gondolkodtál már azon, hogyan tartják számon a weboldalak a kosárban lévő termékeket, vagy hogyan jelenítik meg a barátlistádat? Itt jönnek képbe a tömbök és a ciklusok. A tömbök olyan digitális tárolók, amelyek több információt is magukban tartanak, míg a ciklusok lehetővé teszik, hogy az összes adatot hatékonyan kezeld ismétlődő kód nélkül. Ezek a két fogalom együtt alapját képezik az információkezelésnek a programjaidban. Megtanulod, hogyan menj el a minden lépést kézzel leíró módszertől egy okos, hatékony kód kialakításáig, ami akár százakat vagy ezreket is képes gyorsan feldolgozni. A lecke végére megérted, hogyan lehet összetett adatfeldolgozási feladatokat néhány sor kóddal megoldani. Fedezzük fel ezeket az alapvető programozási fogalmakat! [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Tömbök Gondolj a tömbökre úgy, mint egy digitális iratszekrényre – ahelyett, hogy egy fiókban csak egy dokumentumot tárolnál, több kapcsolódó elemet rendezhetsz egyetlen, strukturált tárolóban. Programozási értelemben a tömbök lehetővé teszik, hogy több információt tárolj egy rendezett csomagban. Akár egy fényképgalériát építesz, teendőlistát kezelsz, vagy egy játék magas pontszámait tartod nyilván, a tömbök az adatkezelés alapját adják. Nézzük meg, hogyan működnek. ✅ Mindenütt ott vannak a tömbök! Tudsz mondani egy valós példát egy tömbre, például egy napelem tömböt? ### Tömbök létrehozása A tömb létrehozása szuper egyszerű – csak használj szögletes zárójeleket! Mi történik itt? Épp most hoztál létre egy üres tárolót ezekkel a szögletes zárójelekkel []. Gondolj rá úgy, mint egy üres könyvespolcra – készen áll arra, hogy bármilyen könyvet rendszerezz benne. Tömbödet kezdettől fogva töltheted kezdeti értékekkel is: Érdekes dolgok, amikre figyelj: - A tömbben tárolhatsz szöveget, számokat, vagy akár igaz/hamis értékeket is - Csak vesszővel válaszd el az elemeket – könnyű! - A tömbök tökéletesek kapcsolódó adatok egyben tartására ### Tömb indexelése Itt van valami, ami elsőre furcsa lehet: a tömbök az elemeket 0-tól számozzák, nem 1-től. Ez a nullával kezdődő indexelés a számítógép memóriájának működéséből ered – régi programozói konvenció, ami már a korai C nyelvű programozás idején is létezett. Minden helyhez a tömbben tartozik egy saját címszám, amelyet index-nek hívunk. ✅ Meglep, hogy a tömbök nullás indextől indulnak? Néhány programozási nyelvben 1-től kezdik az indexelést. Érdekes története van ennek, amit elolvashatsz a Wikipédián. Tömb elemeinek elérése: Levezetés, mi történik itt: - Használ szögletes zárójelezést az indexszel az elemek eléréséhez - Visszatér a tömb adott pozícióján tárolt értékkel - 0-tól kezd számlálni, így az első elem indexe 0 Tömb elemeinek módosítása: Az előző példában: - Módosítottuk az 4-es indexű elemet "Rocky Road"-ról "Butter Pecan"-ra - Beszúrtunk egy új elemet "Cookie Dough" néven az 5-ös indexen - Automatikusan megnöveltük a tömb hosszát, amikor a határon túl bővítettünk ### Tömb hossza és gyakori metódusok A tömbök beépített tulajdonságokkal és metódusokkal rendelkeznek, amik megkönnyítik az adatkezelést. Tömb hosszának lekérdezése: Fontos tudnivalók: - Visszaadja az elemek összes számát a tömbben - Automatikusan frissül, amikor elemeket adsz hozzá vagy törölsz - Dinamikus számlálást ad, ami hasznos ciklusokhoz és ellenőrzéshez Lényeges tömb metódusok: Ezekről a metódusokról tudnod kell: - Hozzáad elemeket a push() (végén) és az unshift() (elején) - Eltávolít elemeket a pop() (végén) és a shift() (elején) - Megkeres elemeket az indexOf() segítségével, és ellenőrzi a létezésüket az includes()-zal - Visszaad hasznos értékeket, mint eltávolított elemek vagy pozíciók ✅ Próbáld ki! Használd böngésződ konzolját, hogy létrehozz és kezelj egy saját tömböt. ### 🧠 Tömb alapok ellenőrzése: Adatok rendszerezése Teszteld a tömbös tudásod: - Miért gondolod, hogy a tömbök 0-tól számolnak és nem 1-től? - Mi történik, ha olyan indexet próbálsz elérni, ami nem létezik (pl. arr[100] egy 5 elemű tömbben)? - Tudsz mondani három valós példát, ahol a tömbök hasznosak lehetnek? ## Ciklusok Gondolj arra a hírhedt büntetésre Charles Dickens regényeiben, ahol a diákoknak többszörös sorokban kellett ugyanazt írogatniuk táblára. Képzeld el, ha valaki csak annyit mondhatna, hogy „írd le ezt a mondatot 100-szor”, és az meg is történne automatikusan. Pont ezt csinálják a ciklusok a kódoddal. A ciklusok olyanok, mint egy kitartó asszisztens, aki hibátlanul ismételheti el a feladatokat. Akár a bevásárlókosár minden elemét leellenőriznéd, vagy az összes képet megmutatnád egy albumban, a ciklusok hatékonyan kezelik az ismétlődést. A JavaScript többféle ciklustípust kínál. Nézzük meg mindegyiket, és értsük meg, hogy mikor érdemes használni őket. ### For ciklus A for ciklus olyan, mintha időzítőt állítanál be – pontosan tudod, hányszor akarod, hogy valami megtörténjen. Nagyon szervezett és kiszámítható, ami tökéletessé teszi tömbökkel való munkához vagy amikor számolnod kell. For ciklus szerkezete: Lépésről lépésre, mi történik: - Inicializálja az i számlálót 0 értékkel - Ellenőrzi az i < 10 feltételt minden iteráció elején - Végrehajtja a kódblokkot, ha a feltétel igaz - Növeli i értékét 1-gyel az i++ kifejezéssel minden iteráció után - Megáll, mikor a feltétel hamissá válik (amikor i eléri a 10-et) ✅ Futtasd ezt a kódot a böngésző konzoljában! Mi történik, ha kicsit módosítasz az számláló, feltétel vagy az iteráció kifejezésen? Tudod-e visszafelé futtatni, számolás visszafele készítésével? ### 🗓️ For ciklus tudáspróba: Kontrollált ismétlés Értékeld for ciklusos tudásod: - Mik a for ciklus három része, és mit csinál mindegyik? - Hogyan iterálnál végig egy tömbön visszafelé? - Mi történik, ha elfelejted az inkrementálást (i++)? ### While ciklus A while ciklus egy „csináld ezt, amíg…” típusú ciklus, amely esetében lehet, hogy nem tudod előre, hányszor fog lefutni, de azt tudod, mikor kell megállnia. Tökéletes például akkor, ha a felhasználótól vársz adatot, amíg meg nem kapod, vagy keresel egy adatot egészen addig, amíg meg nem találod. While ciklus jellemzői: - Folyamatosan fut, amíg a feltétel igaz - Manuális kezelést igényel a számláló változókra - Feltételt ellenőriz minden iteráció előtt - Veszélye a végtelen ciklus, ha a feltétel sosem válik hamissá Ezeket a példákat értsd meg: - Kezeli a számláló változót i kézzel a ciklus törzsén belül - Növeli a számlálót a végtelen ciklus megelőzéséhez - Bemutat gyakorlati esetet felhasználói bevitel gyorsítására és próbálkozások korlátozására - Tartalmaz biztonsági mechanizmusokat végtelen futás ellen ### ♾️ While ciklus tudáspróba: Feltétel alapú ismétlés Teszteld a while ciklus tudásodat: - Mi a legnagyobb veszély while ciklusok használatakor? - Mikor választanál while ciklust egy for ciklus helyett? - Hogyan lehet megakadályozni a végtelen ciklust? ### Modern ciklus alternatívák A JavaScript modern ciklus szintaxist kínál, mely olvashatóbb és kevesebb hibalehetőséget ad. For...of ciklus (ES6+): A for...of előnyei: - Eltünteti az index kezelést és a hibalehetőségeket - Közvetlen hozzáférést biztosít a tömb elemeihez - Javítja a kód olvashatóságát és csökkenti a szintaxishibákat forEach metódus: A forEach-ről tudnod kell: - Minden tömbelemen futtat egy függvényt - Átadja az elem értékét és indexét paraméterként - Nem állítható meg idő előtt (ellentétben a hagyományos ciklusokkal) - Nem ad vissza új tömböt (undefined eredményt ad) ✅ Miért választanál for ciklust a while helyett? 17 ezer ember tette fel ugyanezt a kérdést a StackOverflow-n, és néhány vélemény érdekes lehet számodra. ### 🎨 Modern ciklus szintaxis tudáspróba: Az ES6+ elfogadása Értékeld modern JavaScript tudásodat: - Mik a for...of előnyei a hagyományos for ciklusokhoz képest? - Mikor részesítenéd mégis előnyben a hagyományos for ciklust? - Mi a különbség a forEach és a map között? ## Ciklusok és tömbök A tömbök és ciklusok kombinációja hatékony adatfeldolgozást tesz lehetővé. Ez a páros az alapja sok programozási feladatnak, legyen szó listák megjelenítéséről vagy statisztikák számításáról. Hagyományos tömb feldolgozás: Értelmezzük a megközelítéseket: - Használja a tömb hosszát a ciklus határának meghatározására - Index alapján éri el az elemeket hagyományos for ciklusokban - Közvetlenül hozzáfér az elemekhez for...of ciklusban - Egyszer dolgozza fel minden elemet Gyakorlati adatfeldolgozás példa: Így működik ez a kód: - Inicializál változókat összeg és extrém értékek követésére - Feldolgozza az összes jegyet egy hatékony ciklusban - Összegzi az értékeket az átlag kiszámításához - Nyomon követi a legmagasabb és legalacsonyabb értékeket - Kiszámolja a végső statisztikákat a ciklus után ✅ Kísérletezz saját tömböddel a böngésződ konzoljában! --- ## GitHub Copilot Ügynök kihívás 🚀 Használd az Ügynök módot a következő kihívás teljesítéséhez: Leírás: Készíts egy átfogó adatfeldolgozó függvényt, amely tömböket és ciklusokat egyesít, hogy elemezzen egy adathalmazt és jelentős betekintéseket generáljon. Feladat: Hozz létre egy analyzeGrades nevű függvényt, amely tömböt fogad diákjegyek objektumaival (mindegyik neve és pontszáma), és visszaad egy objektumot statisztikákkal, beleértve a legmagasabb és legalacsonyabb pontszámot, az átlagot, a vizsgát teljesítők számát (pontszám >= 70), valamint az átlagnál jobb eredményt elért diákok neveit tömb formájában. Használj minimum két különböző ciklust a megoldásban. További információ az ügynök módról itt. ## 🚀 Kihívás A JavaScript több modern tömbmetódust kínál, amelyek egyes feladatok esetén kiválthatják a hagyományos ciklusokat. Fedezd fel a forEach, for-of, map, filter és reduce metódusokat. A te kihívásod: Refaktoráld a diákok jegyeinek példáját legalább három különböző tömbmetódussal. Figyeld meg, milyen sokkal tisztább és olvashatóbb lesz a kód a modern JavaScript szintaxissal. ## Előadás utáni kvíz Előadás utáni kvíz ## Áttekintés & Önálló tanulás A JavaScript tömbjeihez számos nagyon hasznos adatmanipulációs metódus kapcsolódik. Ismerkedj meg ezekkel a metódusokkal, és próbálj ki néhányat (például a push, pop, slice és splice) egy általad létrehozott tömbön. ## Feladat Tömb bejárása ciklussal --- ## 📊 A tömbök és ciklusok eszköztárának összefoglalója --- ## 🚀 A tömbök és ciklusok elsajátításának idővonala ### ⚡ Mit tudsz tenni a következő 5 percben - [ ] Készíts egy kedvenc filmjeidből álló tömböt, és érj el konkrét elemeket - [ ] Írj egy for ciklust, amely 1-től 10-ig számol - [ ] Próbáld ki a leckéből származó modern tömbmetódus kihívást - [ ] Gyakorold a tömbindexelést a böngésződ konzoljában ### 🎯 Mit érhetsz el ezen az órán - [ ] Teljesítsd az előadás utáni kvízt, és nézd át az esetleges nehéz témákat - [ ] Építsd meg a GitHub Copilot kihívásából származó átfogó jegy-elemzőt - [ ] Készíts egy egyszerű bevásárlókosarat, amely hozzáad és eltávolít tételeket - [ ] Gyakorold a különböző ciklustípusok közötti átalakítást - [ ] Kísérletezz olyan tömbmetódusokkal, mint a push, pop, slice és splice ### 📅 Az egész hetes adatfeldolgozási utad - [ ] Teljesítsd a "Tömb bejárása ciklussal" feladatot kreatív továbbfejlesztésekkel - [ ] Építs egy teendőlista alkalmazást tömbök és ciklusok segítségével - [ ] Készíts egy egyszerű statisztika kalkulátort numerikus adatokhoz - [ ] Gyakorold a MDN tömbmetódusokat - [ ] Építs fotógaléria vagy zenei lejátszási lista felületet - [ ] Fedezd fel a funkcionális programozást a map, filter és reduce segítségével ### 🌟 A hónapos átalakulásod - [ ] Sajátítsd el a haladó tömbműveleteket és a teljesítményoptimalizálást - [ ] Építs meg egy teljes adatvizualizációs irányítópultot - [ ] Vegyél részt nyílt forráskódú projektekben, amelyek adatfeldolgozással foglalkoznak - [ ] Taníts meg másokat a tömbökre és ciklusokra gyakorlati példákon keresztül - [ ] Készíts személyes könyvtárat újrahasznosítható adatfeldolgozó függvényekből - [ ] Fedezd fel az algoritmusokat és adatstruktúrákat, amelyek tömb alapúak ### 🏆 A végső adatfeldolgozás bajnoki ellenőrzése Ünnepeld meg a tömbök és ciklusok elsajátítását: - Melyik a leghasznosabb tömbművelet, amit a valós alkalmazásokhoz tanultál? - Melyik ciklustípus érzed a legtermészetesebbnek, és miért? - Hogyan változtatta meg a tömbök és ciklusok ismerete az adatkezeléshez való hozzáállásodat? - Milyen összetett adatfeldolgozási feladatot szeretnél legközelebb megoldani? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Jogi nyilatkozat: Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator használatával készült. Bár a pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások tartalmazhatnak hibákat vagy pontatlanságokat. Az eredeti dokumentum anyanyelvén tekintendő hivatalos forrásnak. Fontos információk esetén professzionális emberi fordítást javaslunk. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy félreértelmezésekért. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Pengantar JavaScript

JavaScript adalah bahasa pemrograman untuk web. Dalam empat pelajaran ini, Anda akan mempelajari dasar-dasarnya. ### Topik 1. Variabel dan Tipe Data 2. Fungsi dan Metode 3. Membuat Keputusan dengan JavaScript 4. Array dan Perulangan ### Kredit Pelajaran ini ditulis dengan ♥️ oleh Jasmine Greenaway, Christopher Harrison, dan Chris Noring --- Penafian: Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan terjemahan yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.

javascript

Dasar-Dasar JavaScript: Tipe Data

Tipe data adalah salah satu konsep mendasar dalam JavaScript yang akan Anda temui di setiap program yang Anda tulis. Pikirkan tipe data seperti sistem pengarsipan yang digunakan oleh pustakawan kuno di Alexandria – mereka memiliki tempat khusus untuk gulungan yang berisi puisi, matematika, dan catatan sejarah. JavaScript mengorganisasi informasi dengan cara yang serupa, dengan kategori yang berbeda untuk berbagai jenis data. Dalam pelajaran ini, kita akan menjelajahi tipe data inti yang membuat JavaScript bekerja. Anda akan belajar cara menangani angka, teks, nilai benar/salah, dan memahami mengapa memilih tipe yang tepat sangat penting untuk program Anda. Konsep-konsep ini mungkin tampak abstrak pada awalnya, tetapi dengan latihan, mereka akan menjadi hal yang alami. Memahami tipe data akan membuat segalanya dalam JavaScript menjadi lebih jelas. Seperti arsitek yang perlu memahami berbagai bahan bangunan sebelum membangun katedral, dasar-dasar ini akan mendukung segala sesuatu yang Anda bangun ke depannya. ## Kuis Sebelum Pelajaran Kuis sebelum pelajaran Pelajaran ini mencakup dasar-dasar JavaScript, bahasa yang memberikan interaktivitas pada web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variabel dalam JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Tipe Data dalam JavaScript") Mari kita mulai dengan variabel dan tipe data yang mengisinya! ## Variabel Variabel adalah blok bangunan mendasar dalam pemrograman. Seperti toples berlabel yang digunakan oleh alkemis abad pertengahan untuk menyimpan berbagai zat, variabel memungkinkan Anda menyimpan informasi dan memberinya nama deskriptif sehingga Anda dapat merujuknya nanti. Perlu mengingat usia seseorang? Simpan di variabel bernama age. Ingin melacak nama pengguna? Simpan di variabel bernama userName. Kita akan fokus pada pendekatan modern untuk membuat variabel dalam JavaScript. Teknik yang akan Anda pelajari di sini mewakili evolusi bahasa selama bertahun-tahun dan praktik terbaik yang dikembangkan oleh komunitas pemrograman. Membuat dan mendeklarasikan variabel memiliki sintaks berikut [keyword] [name]. Ini terdiri dari dua bagian: - Keyword. Gunakan let untuk variabel yang dapat berubah, atau const untuk nilai yang tetap. - Nama variabel, ini adalah nama deskriptif yang Anda pilih sendiri. ✅ Keyword let diperkenalkan dalam ES6 dan memberikan variabel Anda yang disebut _block scope_. Disarankan untuk menggunakan let atau const daripada keyword lama var. Kita akan membahas lebih dalam tentang block scope di bagian selanjutnya. ### Tugas - bekerja dengan variabel 1. Deklarasikan variabel. Mari mulai dengan membuat variabel pertama kita: ```javascript let myVariable; ``` Apa yang dicapai: - Ini memberi tahu JavaScript untuk membuat lokasi penyimpanan bernama myVariable - JavaScript mengalokasikan ruang di memori untuk variabel ini - Variabel saat ini tidak memiliki nilai (undefined) 2. Berikan nilai. Sekarang mari kita masukkan sesuatu ke dalam variabel kita: ```javascript myVariable = 123; ``` Bagaimana penugasan bekerja: - Operator = menetapkan nilai 123 ke variabel kita - Variabel sekarang berisi nilai ini daripada undefined - Anda dapat merujuk nilai ini di seluruh kode Anda menggunakan myVariable > Catatan: penggunaan = dalam pelajaran ini berarti kita menggunakan "operator penugasan", digunakan untuk menetapkan nilai ke variabel. Ini tidak menunjukkan kesetaraan. 3. Lakukan dengan cara yang cerdas. Sebenarnya, mari kita gabungkan dua langkah tersebut: ```javascript let myVariable = 123; ``` Pendekatan ini lebih efisien: - Anda mendeklarasikan variabel dan menetapkan nilai dalam satu pernyataan - Ini adalah praktik standar di kalangan pengembang - Mengurangi panjang kode sambil tetap jelas 4. Ubah pikiran Anda. Bagaimana jika kita ingin menyimpan angka yang berbeda? ```javascript myVariable = 321; ``` Memahami penugasan ulang: - Variabel sekarang berisi 321 daripada 123 - Nilai sebelumnya digantikan – variabel hanya menyimpan satu nilai pada satu waktu - Kemampuan untuk berubah ini adalah karakteristik utama dari variabel yang dideklarasikan dengan let ✅ Coba! Anda dapat menulis JavaScript langsung di browser Anda. Buka jendela browser dan navigasikan ke Developer Tools. Di konsol, Anda akan menemukan prompt; ketik let myVariable = 123, tekan enter, lalu ketik myVariable. Apa yang terjadi? Catatan, Anda akan mempelajari lebih lanjut tentang konsep-konsep ini di pelajaran berikutnya. ### 🧠 Pemeriksaan Penguasaan Variabel: Menjadi Nyaman Mari kita lihat seberapa nyaman Anda dengan variabel: - Bisakah Anda menjelaskan perbedaan antara mendeklarasikan dan menetapkan variabel? - Apa yang terjadi jika Anda mencoba menggunakan variabel sebelum Anda mendeklarasikannya? - Kapan Anda akan memilih let daripada const untuk variabel? ## Konstanta Kadang-kadang Anda perlu menyimpan informasi yang tidak boleh berubah selama eksekusi program. Pikirkan konstanta seperti prinsip matematika yang ditetapkan oleh Euclid di Yunani kuno – setelah terbukti dan didokumentasikan, mereka tetap tetap untuk referensi di masa depan. Konstanta bekerja mirip dengan variabel, tetapi dengan pembatasan penting: setelah Anda menetapkan nilainya, itu tidak dapat diubah. Ketidakmampuan untuk berubah ini membantu mencegah modifikasi yang tidak disengaja pada nilai-nilai penting dalam program Anda. Deklarasi dan inisialisasi konstanta mengikuti konsep yang sama seperti variabel, dengan pengecualian keyword const. Konstanta biasanya dideklarasikan dengan huruf besar semua. Apa yang dilakukan kode ini: - Membuat konstanta bernama MY_VARIABLE dengan nilai 123 - Menggunakan konvensi penamaan huruf besar untuk konstanta - Mencegah perubahan nilai di masa depan Konstanta memiliki dua aturan utama: - Anda harus memberikan nilai segera – tidak ada konstanta kosong yang diizinkan! - Anda tidak dapat mengubah nilai tersebut – JavaScript akan memberikan error jika Anda mencoba. Mari kita lihat apa yang dimaksud: Nilai sederhana - Berikut ini TIDAK diizinkan: ```javascript const PI = 3; PI = 4; // tidak diizinkan ``` Apa yang perlu diingat: - Upaya untuk menetapkan ulang konstanta akan menyebabkan error - Melindungi nilai penting dari perubahan yang tidak disengaja - Memastikan nilai tetap konsisten di seluruh program Anda Referensi objek dilindungi - Berikut ini TIDAK diizinkan: ```javascript const obj = { a: 3 }; obj = { b: 5 } // tidak diizinkan ``` Memahami konsep ini: - Mencegah penggantian seluruh objek dengan yang baru - Melindungi referensi ke objek asli - Mempertahankan identitas objek dalam memori Nilai objek tidak dilindungi - Berikut ini DIIZINKAN: ```javascript const obj = { a: 3 }; obj.a = 5; // diizinkan ``` Memecah apa yang terjadi di sini: - Memodifikasi nilai properti di dalam objek - Menjaga referensi objek yang sama - Menunjukkan bahwa isi objek dapat berubah sementara referensi tetap konstan > Catatan, const berarti referensi dilindungi dari penugasan ulang. Nilainya tidak _immutable_ dan dapat berubah, terutama jika itu adalah konstruksi kompleks seperti objek. ## Tipe Data JavaScript mengorganisasi informasi ke dalam berbagai kategori yang disebut tipe data. Konsep ini mencerminkan bagaimana para sarjana kuno mengkategorikan pengetahuan – Aristoteles membedakan antara berbagai jenis penalaran, mengetahui bahwa prinsip logis tidak dapat diterapkan secara seragam pada puisi, matematika, dan filsafat alam. Tipe data penting karena operasi yang berbeda bekerja dengan jenis informasi yang berbeda. Sama seperti Anda tidak dapat melakukan aritmatika pada nama seseorang atau mengurutkan alfabet pada persamaan matematika, JavaScript membutuhkan tipe data yang sesuai untuk setiap operasi. Memahami ini mencegah kesalahan dan membuat kode Anda lebih andal. Variabel dapat menyimpan berbagai jenis nilai, seperti angka dan teks. Berbagai jenis nilai ini dikenal sebagai tipe data. Tipe data adalah bagian penting dari pengembangan perangkat lunak karena membantu pengembang membuat keputusan tentang bagaimana kode harus ditulis dan bagaimana perangkat lunak harus berjalan. Selain itu, beberapa tipe data memiliki fitur unik yang membantu mengubah atau mengekstrak informasi tambahan dari suatu nilai. ✅ Tipe Data juga disebut sebagai primitif data JavaScript, karena mereka adalah tipe data tingkat terendah yang disediakan oleh bahasa. Ada 7 tipe data primitif: string, number, bigint, boolean, undefined, null, dan symbol. Luangkan waktu sejenak untuk memvisualisasikan apa yang masing-masing primitif ini mungkin wakili. Apa itu zebra? Bagaimana dengan 0? true? ### Angka Angka adalah tipe data paling sederhana dalam JavaScript. Apakah Anda bekerja dengan angka bulat seperti 42, desimal seperti 3.14, atau angka negatif seperti -5, JavaScript menangani semuanya secara seragam. Ingat variabel kita sebelumnya? Nilai 123 yang kita simpan sebenarnya adalah tipe data angka: Karakteristik utama: - JavaScript secara otomatis mengenali nilai numerik - Anda dapat melakukan operasi matematika dengan variabel ini - Tidak diperlukan deklarasi tipe eksplisit Variabel dapat menyimpan semua jenis angka, termasuk desimal atau angka negatif. Angka juga dapat digunakan dengan operator aritmatika, yang dibahas di bagian berikutnya. ### Operator Aritmatika Operator aritmatika memungkinkan Anda melakukan perhitungan matematika dalam JavaScript. Operator ini mengikuti prinsip yang sama yang telah digunakan oleh matematikawan selama berabad-abad – simbol yang sama yang muncul dalam karya para sarjana seperti Al-Khwarizmi, yang mengembangkan notasi aljabar. Operator bekerja seperti yang Anda harapkan dari matematika tradisional: tanda tambah untuk penjumlahan, tanda minus untuk pengurangan, dan sebagainya. Ada beberapa jenis operator yang dapat digunakan saat melakukan fungsi aritmatika, dan beberapa di antaranya tercantum di sini: ✅ Coba! Coba operasi aritmatika di konsol browser Anda. Apakah hasilnya mengejutkan Anda? ### 🧮 Pemeriksaan Keterampilan Matematika: Menghitung dengan Percaya Diri Uji pemahaman aritmatika Anda: - Apa perbedaan antara / (pembagian) dan % (sisa)? - Bisakah Anda memprediksi apa hasil dari 10 % 3? (Petunjuk: bukan 3.33...) - Mengapa operator sisa mungkin berguna dalam pemrograman? ### String Dalam JavaScript, data teks direpresentasikan sebagai string. Istilah "string" berasal dari konsep karakter yang dirangkai bersama dalam urutan, seperti cara para penulis di biara abad pertengahan menghubungkan huruf untuk membentuk kata dan kalimat dalam manuskrip mereka. String adalah elemen dasar dalam pengembangan web. Setiap potongan teks yang ditampilkan di situs web – nama pengguna, label tombol, pesan kesalahan, konten – ditangani sebagai data string. Memahami string sangat penting untuk membuat antarmuka pengguna yang fungsional. String adalah kumpulan karakter yang berada di antara tanda kutip tunggal atau ganda. Memahami konsep ini: - Menggunakan tanda kutip tunggal ' atau tanda kutip ganda " untuk mendefinisikan string - Menyimpan data teks yang dapat mencakup huruf, angka, dan simbol - Menetapkan nilai string ke variabel untuk digunakan nanti - Membutuhkan tanda kutip untuk membedakan teks dari nama variabel Ingatlah untuk menggunakan tanda kutip saat menulis string, jika tidak JavaScript akan menganggapnya sebagai nama variabel. ### Memformat String Manipulasi string memungkinkan Anda menggabungkan elemen teks, memasukkan variabel, dan membuat konten dinamis yang merespons keadaan program. Teknik ini memungkinkan Anda membangun teks secara programatis. Sering kali Anda perlu menggabungkan beberapa string – proses ini disebut konkatenasi. Untuk menggabungkan dua atau lebih string, atau menyatukannya, gunakan operator +. Langkah demi langkah, berikut yang terjadi: - Menggabungkan beberapa string menggunakan operator + - Menyatukan string langsung tanpa spasi pada contoh pertama - Menambahkan karakter spasi " " di antara string untuk keterbacaan - Menyisipkan tanda baca seperti koma untuk menciptakan format yang tepat ✅ Mengapa 1 + 1 = 2 dalam JavaScript, tetapi '1' + '1' = 11? Pikirkanlah. Bagaimana dengan '1' + 1? Template literals adalah cara lain untuk memformat string, kecuali menggunakan tanda kutip, backtick digunakan. Apa pun yang bukan teks biasa harus ditempatkan di dalam placeholder ${ }. Ini termasuk variabel apa pun yang mungkin berupa string. Mari pahami setiap bagian: - Menggunakan backtick ` `` alih-alih tanda kutip biasa untuk membuat template literals - Menyisipkan variabel langsung menggunakan sintaks placeholder ${} - Mempertahankan spasi dan format persis seperti yang ditulis - Memberikan cara yang lebih bersih untuk membuat string kompleks dengan variabel Anda dapat mencapai tujuan format Anda dengan salah satu metode, tetapi template literals akan menghormati spasi dan pemisahan baris. ✅ Kapan Anda akan menggunakan template literal dibandingkan string biasa? ### 🔤 Cek Penguasaan String: Kepercayaan Manipulasi Teks Evaluasi kemampuan string Anda: - Bisakah Anda menjelaskan mengapa '1' + '1' menghasilkan '11' alih-alih 2? - Metode string mana yang menurut Anda lebih mudah dibaca: penggabungan atau template literals? - Apa yang terjadi jika Anda lupa menambahkan tanda kutip di sekitar string? ### Boolean Boolean mewakili bentuk data paling sederhana: hanya dapat memiliki salah satu dari dua nilai – true atau false. Sistem logika biner ini berasal dari karya George Boole, seorang matematikawan abad ke-19 yang mengembangkan aljabar Boolean. Meskipun sederhana, boolean sangat penting untuk logika program. Mereka memungkinkan kode Anda membuat keputusan berdasarkan kondisi – apakah pengguna sudah masuk, apakah tombol diklik, atau apakah kriteria tertentu terpenuhi. Boolean hanya dapat memiliki dua nilai: true atau false. Boolean dapat membantu membuat keputusan tentang baris kode mana yang harus dijalankan ketika kondisi tertentu terpenuhi. Dalam banyak kasus, operator membantu menetapkan nilai Boolean dan Anda sering melihat dan menulis variabel yang diinisialisasi atau nilainya diperbarui dengan operator. Dalam contoh di atas, kita telah: - Membuat variabel yang menyimpan nilai Boolean true - Menunjukkan cara menyimpan nilai Boolean false - Menggunakan kata kunci true dan false secara langsung (tanpa tanda kutip) - Mempersiapkan variabel ini untuk digunakan dalam pernyataan kondisional ✅ Sebuah variabel dapat dianggap 'truthy' jika dievaluasi menjadi boolean true. Menariknya, dalam JavaScript, semua nilai adalah truthy kecuali yang didefinisikan sebagai falsy. ### 🎯 Cek Logika Boolean: Kemampuan Pengambilan Keputusan Uji pemahaman boolean Anda: - Mengapa menurut Anda JavaScript memiliki nilai "truthy" dan "falsy" selain hanya true dan false? - Bisakah Anda memprediksi mana yang falsy: 0, "0", [], "false"? - Bagaimana boolean dapat berguna dalam mengontrol alur program? --- ## 📊 Ringkasan Toolkit Tipe Data Anda ## Tantangan GitHub Copilot Agent 🚀 Gunakan mode Agent untuk menyelesaikan tantangan berikut: Deskripsi: Buat pengelola informasi pribadi yang menunjukkan semua tipe data JavaScript yang telah Anda pelajari dalam pelajaran ini sambil menangani skenario data dunia nyata. Prompt: Bangun program JavaScript yang membuat objek profil pengguna yang berisi: nama seseorang (string), usia (number), status sebagai pelajar (boolean), warna favorit sebagai array, dan objek alamat dengan properti jalan, kota, dan kode pos. Sertakan fungsi untuk menampilkan informasi profil dan memperbarui bidang individual. Pastikan untuk menunjukkan penggabungan string, template literals, operasi aritmatika dengan usia, dan logika boolean untuk status pelajar. Pelajari lebih lanjut tentang mode agent di sini. ## 🚀 Tantangan JavaScript memiliki beberapa perilaku yang dapat mengejutkan pengembang. Berikut adalah contoh klasik untuk dieksplorasi: coba ketik ini di konsol browser Anda: let age = 1; let Age = 2; age == Age dan perhatikan hasilnya. Ini mengembalikan false – bisakah Anda menentukan alasannya? Ini mewakili salah satu dari banyak perilaku JavaScript yang layak dipahami. Familiaritas dengan keanehan ini akan membantu Anda menulis kode yang lebih andal dan memecahkan masalah dengan lebih efektif. ## Kuis Pasca-Pelajaran Kuis pasca-pelajaran ## Tinjauan & Studi Mandiri Lihat daftar latihan JavaScript ini dan coba satu. Apa yang Anda pelajari? ## Tugas Latihan Tipe Data ## 🚀 Garis Waktu Penguasaan Tipe Data JavaScript Anda ### ⚡ Apa yang Bisa Anda Lakukan dalam 5 Menit Berikutnya - [ ] Buka konsol browser Anda dan buat 3 variabel dengan tipe data yang berbeda - [ ] Coba tantangan: let age = 1; let Age = 2; age == Age dan cari tahu mengapa hasilnya false - [ ] Latih penggabungan string dengan nama Anda dan angka favorit Anda - [ ] Uji apa yang terjadi ketika Anda menambahkan angka ke string ### 🎯 Apa yang Bisa Anda Capai dalam Satu Jam - [ ] Selesaikan kuis pasca-pelajaran dan tinjau konsep yang membingungkan - [ ] Buat kalkulator mini yang menambahkan, mengurangi, mengalikan, dan membagi dua angka - [ ] Bangun formatter nama sederhana menggunakan template literals - [ ] Jelajahi perbedaan antara operator perbandingan == dan === - [ ] Latih konversi antara tipe data yang berbeda ### 📅 Fondasi JavaScript Anda Selama Seminggu - [ ] Selesaikan tugas dengan percaya diri dan kreativitas - [ ] Buat objek profil pribadi menggunakan semua tipe data yang telah dipelajari - [ ] Latih dengan latihan JavaScript dari CSS-Tricks - [ ] Bangun validator formulir sederhana menggunakan logika boolean - [ ] Bereksperimen dengan tipe data array dan objek (pratinjau pelajaran mendatang) - [ ] Bergabunglah dengan komunitas JavaScript dan ajukan pertanyaan tentang tipe data ### 🌟 Transformasi Anda Selama Sebulan - [ ] Integrasikan pengetahuan tipe data ke dalam proyek pemrograman yang lebih besar - [ ] Pahami kapan dan mengapa menggunakan setiap tipe data dalam aplikasi nyata - [ ] Bantu pemula lainnya memahami dasar-dasar JavaScript - [ ] Bangun aplikasi kecil yang mengelola berbagai jenis data pengguna - [ ] Jelajahi konsep tipe data lanjutan seperti type coercion dan strict equality - [ ] Berkontribusi pada proyek open source JavaScript dengan perbaikan dokumentasi ### 🧠 Cek Penguasaan Tipe Data Akhir Anda Rayakan fondasi JavaScript Anda: - Tipe data mana yang paling mengejutkan Anda dalam hal perilakunya? - Seberapa nyaman Anda menjelaskan variabel vs. konstanta kepada teman? - Apa hal paling menarik yang Anda temukan tentang sistem tipe JavaScript? - Aplikasi dunia nyata apa yang dapat Anda bayangkan untuk dibangun dengan dasar-dasar ini? --- Penafian: Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis dapat mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang penting, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang timbul dari penggunaan terjemahan ini.

javascript,data

Dasar-Dasar JavaScript: Metode dan Fungsi

## Kuis Pra-Pelajaran Kuis pra-pelajaran Menulis kode yang sama berulang kali adalah salah satu frustrasi paling umum dalam pemrograman. Fungsi menyelesaikan masalah ini dengan memungkinkan Anda mengemas kode ke dalam blok yang dapat digunakan kembali. Pikirkan fungsi seperti bagian standar yang membuat jalur perakitan Henry Ford menjadi revolusioner – setelah Anda membuat komponen yang andal, Anda dapat menggunakannya di mana pun diperlukan tanpa harus membangun ulang dari awal. Fungsi memungkinkan Anda menggabungkan potongan kode sehingga Anda dapat menggunakannya kembali di seluruh program Anda. Alih-alih menyalin dan menempelkan logika yang sama di mana-mana, Anda dapat membuat fungsi sekali dan memanggilnya kapan pun diperlukan. Pendekatan ini menjaga kode Anda tetap terorganisir dan membuat pembaruan jauh lebih mudah. Dalam pelajaran ini, Anda akan belajar cara membuat fungsi Anda sendiri, mengirimkan informasi ke dalamnya, dan mendapatkan hasil yang berguna kembali. Anda akan menemukan perbedaan antara fungsi dan metode, mempelajari pendekatan sintaks modern, dan melihat bagaimana fungsi dapat bekerja dengan fungsi lainnya. Kami akan membangun konsep-konsep ini langkah demi langkah. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metode dan Fungsi") ## Fungsi Fungsi adalah blok kode mandiri yang melakukan tugas tertentu. Fungsi mengemas logika yang dapat Anda jalankan kapan pun diperlukan. Alih-alih menulis kode yang sama beberapa kali di seluruh program Anda, Anda dapat mengemasnya dalam fungsi dan memanggil fungsi tersebut kapan pun Anda membutuhkannya. Pendekatan ini menjaga kode Anda tetap bersih dan membuat pembaruan jauh lebih mudah. Bayangkan tantangan pemeliharaan jika Anda perlu mengubah logika yang tersebar di 20 lokasi berbeda dalam kode Anda. Memberi nama fungsi Anda secara deskriptif sangat penting. Fungsi yang diberi nama dengan baik mengkomunikasikan tujuannya dengan jelas – ketika Anda melihat cancelTimer(), Anda langsung memahami apa yang dilakukannya, seperti tombol yang diberi label dengan jelas memberi tahu Anda apa yang akan terjadi saat Anda mengkliknya. ## Membuat dan memanggil fungsi Mari kita lihat bagaimana cara membuat fungsi. Sintaksnya mengikuti pola yang konsisten: Mari kita uraikan: - Kata kunci function memberi tahu JavaScript "Hei, saya sedang membuat fungsi!" - nameOfFunction adalah tempat Anda memberikan nama deskriptif untuk fungsi Anda - Tanda kurung () adalah tempat Anda dapat menambahkan parameter (kita akan membahasnya segera) - Kurung kurawal {} berisi kode aktual yang dijalankan saat Anda memanggil fungsi Mari kita buat fungsi salam sederhana untuk melihat ini dalam aksi: Fungsi ini mencetak "Hello, world!" ke konsol. Setelah Anda mendefinisikannya, Anda dapat menggunakannya sebanyak yang Anda butuhkan. Untuk menjalankan (atau "memanggil") fungsi Anda, tulis namanya diikuti oleh tanda kurung. JavaScript memungkinkan Anda mendefinisikan fungsi Anda sebelum atau setelah Anda memanggilnya – mesin JavaScript akan menangani urutan eksekusi. Saat Anda menjalankan baris ini, itu mengeksekusi semua kode di dalam fungsi displayGreeting Anda, menampilkan "Hello, world!" di konsol browser Anda. Anda dapat memanggil fungsi ini berulang kali. ### 🧠 Pemeriksaan Dasar-Dasar Fungsi: Membangun Fungsi Pertama Anda Mari kita lihat bagaimana perasaan Anda tentang fungsi dasar: - Bisakah Anda menjelaskan mengapa kita menggunakan kurung kurawal {} dalam definisi fungsi? - Apa yang terjadi jika Anda menulis displayGreeting tanpa tanda kurung? - Mengapa Anda mungkin ingin memanggil fungsi yang sama beberapa kali? ### Praktik terbaik fungsi Berikut beberapa tips untuk membantu Anda menulis fungsi yang hebat: - Berikan nama yang jelas dan deskriptif untuk fungsi Anda – diri Anda di masa depan akan berterima kasih! - Gunakan camelCasing untuk nama yang terdiri dari beberapa kata (seperti calculateTotal daripada calculate_total) - Fokuskan setiap fungsi untuk melakukan satu hal dengan baik ## Mengirimkan informasi ke fungsi Fungsi displayGreeting kita terbatas – hanya dapat menampilkan "Hello, world!" untuk semua orang. Parameter memungkinkan kita membuat fungsi lebih fleksibel dan berguna. Parameter bertindak seperti tempat penampung di mana Anda dapat memasukkan nilai yang berbeda setiap kali Anda menggunakan fungsi. Dengan cara ini, fungsi yang sama dapat bekerja dengan informasi yang berbeda pada setiap pemanggilan. Anda mencantumkan parameter di dalam tanda kurung saat Anda mendefinisikan fungsi, memisahkan beberapa parameter dengan koma: Setiap parameter bertindak seperti tempat penampung – saat seseorang memanggil fungsi Anda, mereka akan memberikan nilai aktual yang dimasukkan ke dalam tempat tersebut. Mari kita perbarui fungsi salam kita untuk menerima nama seseorang: Perhatikan bagaimana kita menggunakan tanda backtick (` `) dan ${}` untuk memasukkan nama langsung ke dalam pesan kita – ini disebut template literal, dan ini adalah cara yang sangat praktis untuk membangun string dengan variabel yang dicampur. Sekarang saat kita memanggil fungsi kita, kita dapat memasukkan nama apa pun: JavaScript mengambil string 'Christopher', menetapkannya ke parameter name, dan membuat pesan yang dipersonalisasi "Hello, Christopher!" ## Nilai default Bagaimana jika kita ingin membuat beberapa parameter bersifat opsional? Di sinilah nilai default berguna! Misalnya, kita ingin orang dapat menyesuaikan kata salam, tetapi jika mereka tidak menentukan satu, kita akan menggunakan "Hello" sebagai cadangan. Anda dapat mengatur nilai default dengan menggunakan tanda sama dengan, seperti mengatur variabel: Di sini, name masih diperlukan, tetapi salutation memiliki nilai cadangan 'Hello' jika tidak ada yang memberikan salam yang berbeda. Sekarang kita dapat memanggil fungsi ini dengan dua cara berbeda: Pada pemanggilan pertama, JavaScript menggunakan "Hello" sebagai default karena kita tidak menentukan salam. Pada pemanggilan kedua, ia menggunakan "Hi" yang kita tentukan. Fleksibilitas ini membuat fungsi dapat beradaptasi dengan berbagai skenario. ### 🎛️ Pemeriksaan Penguasaan Parameter: Membuat Fungsi Fleksibel Uji pemahaman parameter Anda: - Apa perbedaan antara parameter dan argumen? - Mengapa nilai default berguna dalam pemrograman dunia nyata? - Bisakah Anda memprediksi apa yang terjadi jika Anda memberikan lebih banyak argumen daripada parameter? ## Nilai kembali Fungsi kita sejauh ini hanya mencetak pesan ke konsol, tetapi bagaimana jika Anda ingin fungsi menghitung sesuatu dan memberikan hasilnya kembali kepada Anda? Di sinilah nilai kembali berperan. Alih-alih hanya menampilkan sesuatu, fungsi dapat memberikan nilai yang dapat Anda simpan dalam variabel atau gunakan di bagian lain kode Anda. Untuk mengirimkan nilai kembali, Anda menggunakan kata kunci return diikuti oleh apa pun yang ingin Anda kembalikan: Berikut sesuatu yang penting: saat fungsi mencapai pernyataan return, ia langsung berhenti berjalan dan mengirimkan nilai itu kembali kepada siapa pun yang memanggilnya. Mari kita modifikasi fungsi salam kita untuk mengembalikan pesan alih-alih mencetaknya: Sekarang alih-alih mencetak salam, fungsi ini membuat pesan dan memberikannya kembali kepada kita. Untuk menggunakan nilai yang dikembalikan, kita dapat menyimpannya dalam variabel seperti nilai lainnya: Sekarang greetingMessage berisi "Hello, Christopher" dan kita dapat menggunakannya di mana saja dalam kode kita – untuk menampilkannya di halaman web, menyertakannya dalam email, atau mengirimkannya ke fungsi lain. ### 🔄 Pemeriksaan Nilai Kembali: Mendapatkan Hasil Kembali Evaluasi pemahaman nilai kembali Anda: - Apa yang terjadi pada kode setelah pernyataan return dalam fungsi? - Mengapa mengembalikan nilai sering kali lebih baik daripada hanya mencetak ke konsol? - Bisakah fungsi mengembalikan berbagai jenis nilai (string, angka, boolean)? ## Fungsi sebagai parameter untuk fungsi Fungsi dapat diteruskan sebagai parameter ke fungsi lain. Meskipun konsep ini mungkin tampak rumit pada awalnya, ini adalah fitur yang kuat yang memungkinkan pola pemrograman yang fleksibel. Pola ini sangat umum ketika Anda ingin mengatakan "ketika sesuatu terjadi, lakukan hal lain ini." Misalnya, "ketika timer selesai, jalankan kode ini" atau "ketika pengguna mengklik tombol, panggil fungsi ini." Mari kita lihat setTimeout, yang merupakan fungsi bawaan yang menunggu waktu tertentu dan kemudian menjalankan beberapa kode. Kita perlu memberi tahu apa kode yang akan dijalankan – kasus penggunaan yang sempurna untuk meneruskan fungsi! Coba kode ini – setelah 3 detik, Anda akan melihat pesan: Perhatikan bagaimana kita meneruskan displayDone (tanpa tanda kurung) ke setTimeout. Kita tidak memanggil fungsi itu sendiri – kita menyerahkannya ke setTimeout dan mengatakan "panggil ini dalam 3 detik." ### Fungsi anonim Kadang-kadang Anda membutuhkan fungsi hanya untuk satu hal dan tidak ingin memberinya nama. Pikirkan – jika Anda hanya menggunakan fungsi sekali, mengapa memperumit kode Anda dengan nama tambahan? JavaScript memungkinkan Anda membuat fungsi anonim – fungsi tanpa nama yang dapat Anda definisikan langsung di tempat Anda membutuhkannya. Berikut cara kita dapat menulis ulang contoh timer kita menggunakan fungsi anonim: Ini mencapai hasil yang sama, tetapi fungsi didefinisikan langsung dalam pemanggilan setTimeout, menghilangkan kebutuhan untuk deklarasi fungsi terpisah. ### Fungsi panah JavaScript modern memiliki cara yang lebih singkat untuk menulis fungsi yang disebut fungsi panah. Mereka menggunakan => (yang terlihat seperti panah – mengerti?) dan sangat populer di kalangan pengembang. Fungsi panah memungkinkan Anda melewati kata kunci function dan menulis kode yang lebih ringkas. Berikut contoh timer kita menggunakan fungsi panah: Tanda () adalah tempat parameter akan masuk (kosong dalam kasus ini), kemudian datang panah =>, dan akhirnya tubuh fungsi dalam kurung kurawal. Ini memberikan fungsi yang sama dengan sintaks yang lebih ringkas. ### Kapan menggunakan setiap strategi Kapan Anda harus menggunakan setiap pendekatan? Panduan praktis: jika Anda akan menggunakan fungsi beberapa kali, beri nama dan definisikan secara terpisah. Jika itu untuk satu penggunaan spesifik, pertimbangkan fungsi anonim. Baik fungsi panah maupun sintaks tradisional adalah pilihan yang valid, meskipun fungsi panah lebih umum dalam basis kode JavaScript modern. ### 🎨 Pemeriksaan Penguasaan Gaya Fungsi: Memilih Sintaks yang Tepat Uji pemahaman sintaks Anda: - Kapan Anda mungkin lebih memilih fungsi panah daripada sintaks fungsi tradisional? - Apa keuntungan utama dari fungsi anonim? - Bisakah Anda memikirkan situasi di mana fungsi bernama lebih baik daripada fungsi anonim? --- ## 🚀 Tantangan Bisakah Anda menjelaskan dalam satu kalimat perbedaan antara fungsi dan metode? Coba! ## Tantangan Agen GitHub Copilot 🚀 Gunakan mode Agen untuk menyelesaikan tantangan berikut: Deskripsi: Buat pustaka utilitas fungsi matematika yang menunjukkan berbagai konsep fungsi yang dibahas dalam pelajaran ini, termasuk parameter, nilai default, nilai kembali, dan fungsi panah. Prompt: Buat file JavaScript bernama mathUtils.js yang berisi fungsi-fungsi berikut: 1. Fungsi add yang menerima dua parameter dan mengembalikan jumlahnya 2. Fungsi multiply dengan nilai parameter default (parameter kedua default ke 1) 3. Fungsi panah square yang menerima angka dan mengembalikan kuadratnya 4. Fungsi calculate yang menerima fungsi lain sebagai parameter dan dua angka, lalu menerapkan fungsi tersebut pada angka-angka tersebut 5. Demonstrasikan pemanggilan setiap fungsi dengan kasus uji yang sesuai Pelajari lebih lanjut tentang mode agen di sini. ## Kuis Pasca-Pelajaran Kuis pasca-pelajaran ## Tinjauan & Studi Mandiri Ada baiknya membaca lebih lanjut tentang fungsi panah, karena mereka semakin banyak digunakan dalam basis kode. Latih menulis fungsi, lalu tulis ulang dengan sintaks ini. ## Tugas Seru dengan Fungsi --- ## 🧰 Ringkasan Toolkit Fungsi JavaScript Anda --- ## 🚀 Garis Waktu Penguasaan Fungsi JavaScript Anda ### ⚡ Apa yang Dapat Anda Lakukan dalam 5 Menit Berikutnya - [ ] Tulis fungsi sederhana yang mengembalikan angka favorit Anda - [ ] Buat fungsi dengan dua parameter yang menambahkan keduanya - [ ] Cobalah mengubah fungsi tradisional menjadi sintaks fungsi panah - [ ] Latihan tantangan: jelaskan perbedaan antara fungsi dan metode ### 🎯 Apa yang Bisa Kamu Capai Dalam Satu Jam - [ ] Selesaikan kuis setelah pelajaran dan tinjau konsep yang membingungkan - [ ] Bangun pustaka utilitas matematika dari tantangan GitHub Copilot - [ ] Buat fungsi yang menggunakan fungsi lain sebagai parameter - [ ] Latihan menulis fungsi dengan parameter default - [ ] Bereksperimen dengan template literal dalam nilai pengembalian fungsi ### 📅 Penguasaan Fungsi Selama Seminggu - [ ] Selesaikan tugas "Fun with Functions" dengan kreativitas - [ ] Refaktor beberapa kode berulang yang telah kamu tulis menjadi fungsi yang dapat digunakan kembali - [ ] Bangun kalkulator kecil hanya menggunakan fungsi (tanpa variabel global) - [ ] Latihan fungsi panah dengan metode array seperti map() dan filter() - [ ] Buat koleksi fungsi utilitas untuk tugas-tugas umum - [ ] Pelajari fungsi tingkat tinggi dan konsep pemrograman fungsional ### 🌟 Transformasi Selama Sebulan - [ ] Kuasai konsep fungsi tingkat lanjut seperti closures dan scope - [ ] Bangun proyek yang banyak menggunakan komposisi fungsi - [ ] Berkontribusi pada open source dengan meningkatkan dokumentasi fungsi - [ ] Ajarkan orang lain tentang fungsi dan berbagai gaya sintaks - [ ] Jelajahi paradigma pemrograman fungsional dalam JavaScript - [ ] Buat pustaka pribadi berisi fungsi yang dapat digunakan kembali untuk proyek di masa depan ### 🏆 Check-in Akhir Juara Fungsi Rayakan penguasaan fungsi kamu: - Apa fungsi paling berguna yang telah kamu buat sejauh ini? - Bagaimana belajar tentang fungsi mengubah cara kamu berpikir tentang pengorganisasian kode? - Sintaks fungsi mana yang kamu sukai dan mengapa? - Masalah dunia nyata apa yang akan kamu selesaikan dengan menulis fungsi? --- Penafian: Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang penting, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau interpretasi yang salah yang timbul dari penggunaan terjemahan ini.

javascript

Dasar-Dasar JavaScript: Membuat Keputusan

Pernahkah Anda bertanya-tanya bagaimana aplikasi membuat keputusan yang cerdas? Seperti bagaimana sistem navigasi memilih rute tercepat, atau bagaimana termostat memutuskan kapan harus menyalakan pemanas? Inilah konsep dasar pengambilan keputusan dalam pemrograman. Seperti Mesin Analitik Charles Babbage yang dirancang untuk mengikuti urutan operasi yang berbeda berdasarkan kondisi, program JavaScript modern perlu membuat pilihan berdasarkan berbagai keadaan. Kemampuan untuk bercabang dan membuat keputusan inilah yang mengubah kode statis menjadi aplikasi yang responsif dan cerdas. Dalam pelajaran ini, Anda akan belajar cara menerapkan logika bersyarat dalam program Anda. Kita akan menjelajahi pernyataan bersyarat, operator perbandingan, dan ekspresi logis yang memungkinkan kode Anda mengevaluasi situasi dan merespons dengan tepat. ## Kuis Pra-Pelajaran Kuis pra-pelajaran Kemampuan untuk membuat keputusan dan mengontrol alur program adalah aspek mendasar dari pemrograman. Bagian ini mencakup cara mengontrol jalur eksekusi program JavaScript Anda menggunakan nilai Boolean dan logika bersyarat. [](https://youtube.com/watch?v=SxTp8j-fMMY "Membuat Keputusan") ## Sekilas tentang Boolean Sebelum menjelajahi pengambilan keputusan, mari kita tinjau kembali nilai Boolean dari pelajaran sebelumnya. Dinamai sesuai matematikawan George Boole, nilai-nilai ini mewakili dua keadaan – true atau false. Tidak ada ambiguitas, tidak ada area abu-abu. Nilai-nilai biner ini membentuk dasar dari semua logika komputasi. Setiap keputusan yang dibuat program Anda pada akhirnya berujung pada evaluasi Boolean. Membuat variabel Boolean sangatlah mudah: Ini membuat dua variabel dengan nilai Boolean eksplisit. ✅ Boolean dinamai sesuai matematikawan, filsuf, dan ahli logika Inggris George Boole (1815–1864). ## Operator Perbandingan dan Boolean Dalam praktiknya, Anda jarang menetapkan nilai Boolean secara manual. Sebaliknya, Anda akan menghasilkan nilai tersebut dengan mengevaluasi kondisi: "Apakah angka ini lebih besar dari yang itu?" atau "Apakah nilai-nilai ini sama?" Operator perbandingan memungkinkan evaluasi ini. Mereka membandingkan nilai dan mengembalikan hasil Boolean berdasarkan hubungan antara operand. ✅ Uji pengetahuan Anda dengan menulis beberapa perbandingan di konsol browser Anda. Apakah ada data yang dikembalikan yang mengejutkan Anda? ### 🧠 Pemeriksaan Penguasaan Perbandingan: Memahami Logika Boolean Uji pemahaman perbandingan Anda: - Mengapa menurut Anda === (kesetaraan ketat) umumnya lebih disukai daripada == (kesetaraan longgar)? - Bisakah Anda memprediksi apa yang dikembalikan oleh 5 === '5'? Bagaimana dengan 5 == '5'? - Apa perbedaan antara !== dan !=? ## Pernyataan If Pernyataan if seperti mengajukan pertanyaan dalam kode Anda. "Jika kondisi ini benar, maka lakukan hal ini." Ini mungkin alat paling penting yang akan Anda gunakan untuk membuat keputusan dalam JavaScript. Begini cara kerjanya: Kondisi ditulis di dalam tanda kurung, dan jika nilainya true, JavaScript menjalankan kode di dalam kurung kurawal. Jika nilainya false, JavaScript hanya melewati seluruh blok tersebut. Anda sering menggunakan operator perbandingan untuk membuat kondisi ini. Mari kita lihat contoh praktis: Karena 1000 >= 800 dievaluasi sebagai true, kode di dalam blok dijalankan, menampilkan "Mendapatkan laptop baru!" di konsol. ## Pernyataan If..Else Tetapi bagaimana jika Anda ingin program Anda melakukan sesuatu yang berbeda ketika kondisinya salah? Di sinilah else masuk – ini seperti memiliki rencana cadangan. Pernyataan else memberi Anda cara untuk mengatakan "jika kondisi ini tidak benar, lakukan hal lain sebagai gantinya." Sekarang karena 500 >= 800 adalah false, JavaScript melewati blok pertama dan menjalankan blok else sebagai gantinya. Anda akan melihat "Belum mampu membeli laptop baru!" di konsol. ✅ Uji pemahaman Anda tentang kode ini dan kode berikutnya dengan menjalankannya di konsol browser. Ubah nilai variabel currentMoney dan laptopPrice untuk mengubah hasil console.log(). ### 🎯 Pemeriksaan Logika If-Else: Jalur Bercabang Evaluasi pemahaman logika bersyarat Anda: - Apa yang terjadi jika currentMoney sama persis dengan laptopPrice? - Bisakah Anda memikirkan skenario dunia nyata di mana logika if-else akan berguna? - Bagaimana Anda dapat memperluas ini untuk menangani beberapa rentang harga? ## Pernyataan Switch Terkadang Anda perlu membandingkan satu nilai dengan beberapa opsi. Meskipun Anda dapat menggabungkan beberapa pernyataan if..else, pendekatan ini menjadi tidak praktis. Pernyataan switch menyediakan struktur yang lebih bersih untuk menangani beberapa nilai diskrit. Konsep ini mirip dengan sistem pengalihan mekanis yang digunakan dalam pertukaran telepon awal – satu nilai input menentukan jalur eksekusi spesifik mana yang diikuti. Begini cara strukturnya: - JavaScript mengevaluasi ekspresi sekali - Ia melihat setiap case untuk menemukan kecocokan - Ketika menemukan kecocokan, ia menjalankan blok kode tersebut - break memberi tahu JavaScript untuk berhenti dan keluar dari switch - Jika tidak ada case yang cocok, ia menjalankan blok default (jika Anda memilikinya) Dalam contoh ini, JavaScript melihat bahwa dayNumber adalah 2, menemukan case 2 yang cocok, menetapkan dayName menjadi "Selasa", dan kemudian keluar dari switch. Hasilnya? "Hari ini adalah Selasa" ditampilkan di konsol. ✅ Uji pemahaman Anda tentang kode ini dan kode berikutnya dengan menjalankannya di konsol browser. Ubah nilai variabel a untuk mengubah hasil console.log(). ### 🔄 Pemeriksaan Penguasaan Switch: Banyak Opsi Uji pemahaman switch Anda: - Apa yang terjadi jika Anda lupa pernyataan break? - Kapan Anda akan menggunakan switch daripada beberapa pernyataan if-else? - Mengapa case default berguna meskipun Anda berpikir telah mencakup semua kemungkinan? ## Operator Logika dan Boolean Keputusan yang kompleks sering kali membutuhkan evaluasi beberapa kondisi secara bersamaan. Seperti aljabar Boolean yang memungkinkan matematikawan menggabungkan ekspresi logis, pemrograman menyediakan operator logika untuk menghubungkan beberapa kondisi Boolean. Operator ini memungkinkan logika bersyarat yang canggih dengan menggabungkan evaluasi true/false sederhana. Operator ini memungkinkan Anda menggabungkan kondisi dengan cara yang berguna: - AND (&&) berarti kedua kondisi harus benar - OR (||) berarti setidaknya satu kondisi harus benar - NOT (!) membalikkan true menjadi false (dan sebaliknya) ## Kondisi dan Keputusan dengan Operator Logika Mari kita lihat operator logika ini dalam aksi dengan contoh yang lebih realistis: Dalam contoh ini: kita menghitung harga diskon 20% (640), lalu mengevaluasi apakah dana yang tersedia mencakup harga penuh ATAU harga diskon. Karena 600 memenuhi ambang harga diskon 640, kondisi dievaluasi sebagai true. ### 🧮 Pemeriksaan Operator Logika: Menggabungkan Kondisi Uji pemahaman operator logika Anda: - Dalam ekspresi A && B, apa yang terjadi jika A salah? Apakah B bahkan dievaluasi? - Bisakah Anda memikirkan situasi di mana Anda membutuhkan ketiga operator (&&, ||, !) secara bersamaan? - Apa perbedaan antara !user.isActive dan user.isActive !== true? ### Operator Negasi Terkadang lebih mudah memikirkan kapan sesuatu TIDAK benar. Seperti alih-alih bertanya "Apakah pengguna masuk?", Anda mungkin ingin bertanya "Apakah pengguna TIDAK masuk?" Tanda seru (!) membalikkan logika untuk Anda. Operator ! seperti mengatakan "kebalikan dari..." – jika sesuatu adalah true, ! membuatnya false, dan sebaliknya. ### Ekspresi Ternary Untuk penugasan bersyarat yang sederhana, JavaScript menyediakan operator ternary. Sintaks yang ringkas ini memungkinkan Anda menulis ekspresi bersyarat dalam satu baris, berguna saat Anda perlu menetapkan salah satu dari dua nilai berdasarkan kondisi. Ini dibaca seperti pertanyaan: "Apakah kondisi ini benar? Jika ya, gunakan nilai ini. Jika tidak, gunakan nilai itu." Berikut adalah contoh yang lebih nyata: ✅ Luangkan waktu sebentar untuk membaca kode ini beberapa kali. Apakah Anda memahami cara kerja operator-operator ini? Berikut adalah apa yang dikatakan baris ini: "Apakah firstNumber lebih besar dari secondNumber? Jika ya, masukkan firstNumber ke dalam biggestNumber. Jika tidak, masukkan secondNumber ke dalam biggestNumber." Operator ternary hanyalah cara yang lebih pendek untuk menulis pernyataan if..else tradisional ini: Kedua pendekatan menghasilkan hasil yang identik. Operator ternary menawarkan kepraktisan, sementara struktur if-else tradisional mungkin lebih mudah dibaca untuk kondisi yang kompleks. --- ## 🚀 Tantangan Buat program yang ditulis pertama dengan operator logika, lalu tulis ulang menggunakan ekspresi ternary. Apa sintaks yang Anda sukai? --- ## Tantangan Agen GitHub Copilot 🚀 Gunakan mode Agen untuk menyelesaikan tantangan berikut: Deskripsi: Buat kalkulator nilai yang komprehensif yang menunjukkan beberapa konsep pengambilan keputusan dari pelajaran ini, termasuk pernyataan if-else, pernyataan switch, operator logika, dan ekspresi ternary. Prompt: Tulis program JavaScript yang mengambil skor numerik siswa (0-100) dan menentukan nilai huruf mereka menggunakan kriteria berikut: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Di bawah 60 Persyaratan: 1. Gunakan pernyataan if-else untuk menentukan nilai huruf 2. Gunakan operator logika untuk memeriksa apakah siswa lulus (nilai >= 60) DAN mendapatkan penghargaan (nilai >= 90) 3. Gunakan pernyataan switch untuk memberikan umpan balik spesifik untuk setiap nilai huruf 4. Gunakan operator ternary untuk menentukan apakah siswa memenuhi syarat untuk kursus berikutnya (nilai >= 70) 5. Sertakan validasi input untuk memastikan skor berada di antara 0 dan 100 Uji program Anda dengan berbagai skor termasuk kasus batas seperti 59, 60, 89, 90, dan input yang tidak valid. Pelajari lebih lanjut tentang agent mode di sini. ## Kuis Pasca-Kuliah Kuis pasca-kuliah ## Tinjauan & Belajar Mandiri Baca lebih lanjut tentang banyak operator yang tersedia untuk pengguna di MDN. Jelajahi panduan operator yang luar biasa dari Josh Comeau di sini! ## Tugas Operators --- ## 🧠 Ringkasan Toolkit Pengambilan Keputusan Anda --- ## 🚀 Garis Waktu Penguasaan Pengambilan Keputusan JavaScript Anda ### ⚡ Apa yang Bisa Anda Lakukan dalam 5 Menit - [ ] Latih operator perbandingan di konsol browser Anda - [ ] Tulis pernyataan if-else sederhana yang memeriksa usia Anda - [ ] Coba tantangan: tulis ulang if-else menggunakan operator ternary - [ ] Uji apa yang terjadi dengan nilai "truthy" dan "falsy" yang berbeda ### 🎯 Apa yang Bisa Anda Capai dalam Satu Jam - [ ] Selesaikan kuis pasca-pelajaran dan tinjau konsep yang membingungkan - [ ] Bangun kalkulator nilai komprehensif dari tantangan GitHub Copilot - [ ] Buat pohon keputusan sederhana untuk skenario dunia nyata (seperti memilih pakaian) - [ ] Latih penggabungan beberapa kondisi dengan operator logika - [ ] Eksperimen dengan pernyataan switch untuk berbagai kasus penggunaan ### 📅 Penguasaan Logika Anda Selama Seminggu - [ ] Selesaikan tugas operator dengan contoh kreatif - [ ] Bangun aplikasi kuis mini menggunakan berbagai struktur kondisional - [ ] Buat validator formulir yang memeriksa beberapa kondisi input - [ ] Latih latihan panduan operator dari Josh Comeau di sini - [ ] Refactor kode yang ada untuk menggunakan struktur kondisional yang lebih tepat - [ ] Pelajari evaluasi short-circuit dan implikasi kinerjanya ### 🌟 Transformasi Anda Selama Sebulan - [ ] Kuasai kondisi bersarang yang kompleks dan pertahankan keterbacaan kode - [ ] Bangun aplikasi dengan logika pengambilan keputusan yang canggih - [ ] Berkontribusi pada open source dengan meningkatkan logika kondisional dalam proyek yang ada - [ ] Ajarkan orang lain tentang berbagai struktur kondisional dan kapan menggunakannya - [ ] Jelajahi pendekatan pemrograman fungsional untuk logika kondisional - [ ] Buat panduan referensi pribadi untuk praktik terbaik dalam pengambilan keputusan kondisional ### 🏆 Pemeriksaan Akhir Juara Pengambilan Keputusan Rayakan penguasaan pemikiran logis Anda: - Apa logika pengambilan keputusan paling kompleks yang berhasil Anda terapkan? - Struktur kondisional mana yang paling alami bagi Anda dan mengapa? - Bagaimana pembelajaran tentang operator logika mengubah pendekatan pemecahan masalah Anda? - Aplikasi dunia nyata apa yang akan mendapat manfaat dari logika pengambilan keputusan yang canggih? --- Penafian: Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis dapat mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang penting, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.

javascript

Dasar-Dasar JavaScript: Array dan Loop

## Kuis Sebelum Pelajaran Kuis sebelum pelajaran Pernah bertanya-tanya bagaimana situs web melacak item di keranjang belanja atau menampilkan daftar teman Anda? Di sinilah array dan loop berperan. Array seperti wadah digital yang menyimpan banyak informasi, sementara loop memungkinkan Anda bekerja dengan data tersebut secara efisien tanpa kode yang berulang. Bersama-sama, kedua konsep ini menjadi dasar untuk menangani informasi dalam program Anda. Anda akan belajar beralih dari menulis setiap langkah secara manual ke membuat kode yang cerdas dan efisien yang dapat memproses ratusan atau bahkan ribuan item dengan cepat. Pada akhir pelajaran ini, Anda akan memahami cara menyelesaikan tugas data yang kompleks hanya dengan beberapa baris kode. Mari kita jelajahi konsep pemrograman penting ini. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Array Bayangkan array sebagai lemari arsip digital - alih-alih menyimpan satu dokumen per laci, Anda dapat mengatur beberapa item terkait dalam satu wadah yang terstruktur. Dalam istilah pemrograman, array memungkinkan Anda menyimpan banyak informasi dalam satu paket yang terorganisir. Apakah Anda sedang membangun galeri foto, mengelola daftar tugas, atau melacak skor tertinggi dalam permainan, array menyediakan dasar untuk pengorganisasian data. Mari kita lihat cara kerjanya. ✅ Array ada di mana-mana! Bisakah Anda memikirkan contoh nyata dari array, seperti array panel surya? ### Membuat Array Membuat array sangat mudah - cukup gunakan tanda kurung siku! Apa yang terjadi di sini? Anda baru saja membuat wadah kosong menggunakan tanda kurung siku []. Anggap saja seperti rak perpustakaan kosong - siap untuk menyimpan buku apa pun yang ingin Anda atur di sana. Anda juga dapat mengisi array Anda dengan nilai awal sejak awal: Hal-hal keren yang perlu diperhatikan: - Anda dapat menyimpan teks, angka, atau bahkan nilai true/false dalam array yang sama - Cukup pisahkan setiap item dengan koma - mudah! - Array sangat cocok untuk menyimpan informasi terkait bersama-sama ### Indeks Array Ada sesuatu yang mungkin tampak tidak biasa pada awalnya: array memberi nomor pada item mereka mulai dari 0, bukan 1. Penomoran berbasis nol ini berakar pada cara kerja memori komputer - ini telah menjadi konvensi pemrograman sejak awal bahasa pemrograman seperti C. Setiap tempat dalam array mendapatkan nomor alamatnya sendiri yang disebut indeks. ✅ Apakah Anda terkejut bahwa array dimulai dari indeks nol? Dalam beberapa bahasa pemrograman, indeks dimulai dari 1. Ada sejarah menarik tentang ini, yang dapat Anda baca di Wikipedia. Mengakses Elemen Array: Penjelasan tentang apa yang terjadi di sini: - Menggunakan notasi tanda kurung siku dengan nomor indeks untuk mengakses elemen - Mengembalikan nilai yang disimpan di posisi tertentu dalam array - Dimulai dari 0, membuat elemen pertama memiliki indeks 0 Memodifikasi Elemen Array: Dalam contoh di atas, kita telah: - Memodifikasi elemen pada indeks 4 dari "Rocky Road" menjadi "Butter Pecan" - Menambahkan elemen baru "Cookie Dough" pada indeks 5 - Memperluas panjang array secara otomatis saat menambahkan di luar batas saat ini ### Panjang Array dan Metode Umum Array dilengkapi dengan properti dan metode bawaan yang membuat bekerja dengan data menjadi lebih mudah. Menemukan Panjang Array: Poin penting yang perlu diingat: - Mengembalikan jumlah total elemen dalam array - Memperbarui secara otomatis saat elemen ditambahkan atau dihapus - Memberikan hitungan dinamis yang berguna untuk loop dan validasi Metode Array Penting: Memahami metode ini: - Menambahkan elemen dengan push() (akhir) dan unshift() (awal) - Menghapus elemen dengan pop() (akhir) dan shift() (awal) - Menemukan elemen dengan indexOf() dan memeriksa keberadaan dengan includes() - Mengembalikan nilai berguna seperti elemen yang dihapus atau indeks posisi ✅ Coba sendiri! Gunakan konsol browser Anda untuk membuat dan memanipulasi array buatan Anda sendiri. ### 🧠 Pemeriksaan Dasar Array: Mengorganisasi Data Anda Uji pemahaman Anda tentang array: - Mengapa menurut Anda array mulai menghitung dari 0, bukan 1? - Apa yang terjadi jika Anda mencoba mengakses indeks yang tidak ada (seperti arr[100] dalam array dengan 5 elemen)? - Bisakah Anda memikirkan tiga skenario dunia nyata di mana array akan berguna? ## Loop Bayangkan hukuman terkenal dari novel Charles Dickens di mana siswa harus menulis kalimat berulang kali di papan tulis. Bayangkan jika Anda bisa cukup memberi instruksi kepada seseorang untuk "tulis kalimat ini 100 kali" dan itu dilakukan secara otomatis. Itulah yang dilakukan loop untuk kode Anda. Loop seperti memiliki asisten yang tak kenal lelah yang dapat mengulangi tugas tanpa kesalahan. Apakah Anda perlu memeriksa setiap item di keranjang belanja atau menampilkan semua foto dalam album, loop menangani pengulangan dengan efisien. JavaScript menyediakan beberapa jenis loop untuk dipilih. Mari kita periksa masing-masing dan pahami kapan menggunakannya. ### For Loop Loop for seperti mengatur timer - Anda tahu persis berapa kali Anda ingin sesuatu terjadi. Ini sangat terorganisir dan dapat diprediksi, yang membuatnya sempurna saat Anda bekerja dengan array atau perlu menghitung sesuatu. Struktur For Loop: Langkah demi langkah, inilah yang terjadi: - Menginisialisasi variabel penghitung i ke 0 di awal - Memeriksa kondisi i < 10 sebelum setiap iterasi - Menjalankan blok kode saat kondisi benar - Meningkatkan i sebesar 1 setelah setiap iterasi dengan i++ - Berhenti saat kondisi menjadi salah (saat i mencapai 10) ✅ Jalankan kode ini di konsol browser. Apa yang terjadi saat Anda membuat perubahan kecil pada penghitung, kondisi, atau ekspresi iterasi? Bisakah Anda membuatnya berjalan mundur, menciptakan hitungan mundur? ### 🗓️ Pemeriksaan Penguasaan For Loop: Pengulangan Terkontrol Evaluasi pemahaman Anda tentang for loop: - Apa tiga bagian dari for loop, dan apa fungsi masing-masing? - Bagaimana Anda akan melakukan loop melalui array secara mundur? - Apa yang terjadi jika Anda lupa bagian inkrementasi (i++)? ### While Loop Loop while seperti mengatakan "terus lakukan ini sampai..." - Anda mungkin tidak tahu persis berapa kali akan berjalan, tetapi Anda tahu kapan harus berhenti. Ini sempurna untuk hal-hal seperti meminta input pengguna sampai mereka memberikan apa yang Anda butuhkan, atau mencari data sampai Anda menemukan apa yang Anda cari. Karakteristik While Loop: - Melanjutkan eksekusi selama kondisi benar - Membutuhkan pengelolaan manual variabel penghitung - Memeriksa kondisi sebelum setiap iterasi - Berisiko loop tak terbatas jika kondisi tidak pernah menjadi salah Memahami contoh-contoh ini: - Mengelola variabel penghitung i secara manual di dalam tubuh loop - Meningkatkan penghitung untuk mencegah loop tak terbatas - Menunjukkan kasus penggunaan praktis dengan input pengguna dan pembatasan percobaan - Menyertakan mekanisme keamanan untuk mencegah eksekusi tanpa akhir ### ♾️ Pemeriksaan Kebijaksanaan While Loop: Pengulangan Berbasis Kondisi Uji pemahaman Anda tentang while loop: - Apa bahaya utama saat menggunakan while loop? - Kapan Anda akan memilih while loop daripada for loop? - Bagaimana Anda dapat mencegah loop tak terbatas? ### Alternatif Loop Modern JavaScript menawarkan sintaks loop modern yang dapat membuat kode Anda lebih mudah dibaca dan lebih sedikit rentan terhadap kesalahan. For...of Loop (ES6+): Keuntungan utama for...of: - Menghilangkan pengelolaan indeks dan potensi kesalahan off-by-one - Memberikan akses langsung ke elemen array - Meningkatkan keterbacaan kode dan mengurangi kompleksitas sintaks Metode forEach: Yang perlu Anda ketahui tentang forEach: - Menjalankan fungsi untuk setiap elemen array - Memberikan nilai elemen dan indeks sebagai parameter - Tidak dapat dihentikan lebih awal (berbeda dengan loop tradisional) - Mengembalikan undefined (tidak membuat array baru) ✅ Mengapa Anda memilih for loop dibandingkan dengan while loop? 17K penonton memiliki pertanyaan yang sama di StackOverflow, dan beberapa pendapat mungkin menarik bagi Anda. ### 🎨 Pemeriksaan Sintaks Loop Modern: Mengadopsi ES6+ Nilai pemahaman JavaScript modern Anda: - Apa keuntungan for...of dibandingkan for loop tradisional? - Kapan Anda mungkin masih lebih memilih for loop tradisional? - Apa perbedaan antara forEach dan map? ## Loop dan Array Menggabungkan array dengan loop menciptakan kemampuan pemrosesan data yang kuat. Pasangan ini mendasar untuk banyak tugas pemrograman, mulai dari menampilkan daftar hingga menghitung statistik. Pemrosesan Array Tradisional: Mari kita pahami setiap pendekatan: - Menggunakan properti panjang array untuk menentukan batas loop - Mengakses elemen berdasarkan indeks dalam for loop tradisional - Memberikan akses langsung ke elemen dalam for...of loop - Memproses setiap elemen array tepat satu kali Contoh Pemrosesan Data Praktis: Inilah cara kode ini bekerja: - Menginisialisasi variabel pelacakan untuk jumlah dan nilai ekstrem - Memproses setiap nilai dengan satu loop yang efisien - Mengakumulasi total untuk perhitungan rata-rata - Melacak nilai tertinggi dan terendah selama iterasi - Menghitung statistik akhir setelah loop selesai ✅ Bereksperimenlah dengan melakukan loop melalui array buatan Anda sendiri di konsol browser Anda. --- ## Tantangan Agen GitHub Copilot 🚀 Gunakan mode Agen untuk menyelesaikan tantangan berikut: Deskripsi: Bangun fungsi pemrosesan data yang komprehensif yang menggabungkan array dan loop untuk menganalisis dataset dan menghasilkan wawasan yang bermakna. Prompt: Buat fungsi bernama analyzeGrades yang menerima array objek nilai siswa (masing-masing berisi properti nama dan skor) dan mengembalikan objek dengan statistik termasuk skor tertinggi, skor terendah, skor rata-rata, jumlah siswa yang lulus (skor >= 70), dan array nama siswa yang mencetak nilai di atas rata-rata. Gunakan setidaknya dua jenis loop berbeda dalam solusi Anda. Pelajari lebih lanjut tentang mode agen di sini. ## 🚀 Tantangan JavaScript menawarkan beberapa metode array modern yang dapat menggantikan loop tradisional untuk tugas tertentu. Jelajahi forEach, for-of, map, filter, dan reduce. Tantangan Anda: Refactor contoh nilai siswa menggunakan setidaknya tiga metode array yang berbeda. Perhatikan betapa lebih bersih dan mudah dibaca kode tersebut dengan sintaks JavaScript modern. ## Kuis Setelah Pelajaran Kuis setelah pelajaran ## Tinjauan & Belajar Mandiri Array dalam JavaScript memiliki banyak metode yang sangat berguna untuk manipulasi data. Pelajari lebih lanjut tentang metode ini dan coba beberapa di antaranya (seperti push, pop, slice, dan splice) pada array buatan Anda sendiri. ## Tugas Loop sebuah Array --- ## 📊 Ringkasan Toolkit Array & Loop Anda --- ## 🚀 Garis Waktu Penguasaan Array & Loop Anda ### ⚡ Yang Bisa Anda Lakukan dalam 5 Menit Berikutnya - [ ] Buat array berisi film favorit Anda dan akses elemen tertentu - [ ] Tulis sebuah loop for yang menghitung dari 1 hingga 10 - [ ] Coba tantangan metode array modern dari pelajaran - [ ] Latih pengindeksan array di konsol browser Anda ### 🎯 Yang Bisa Anda Capai dalam Satu Jam - [ ] Selesaikan kuis setelah pelajaran dan tinjau konsep yang sulit - [ ] Bangun analisis nilai komprehensif dari tantangan GitHub Copilot - [ ] Buat keranjang belanja sederhana yang menambah dan menghapus item - [ ] Latih konversi antara berbagai jenis loop - [ ] Bereksperimen dengan metode array seperti push, pop, slice, dan splice ### 📅 Perjalanan Pemrosesan Data Selama Seminggu - [ ] Selesaikan tugas "Loop sebuah Array" dengan peningkatan kreatif - [ ] Bangun aplikasi daftar tugas menggunakan array dan loop - [ ] Buat kalkulator statistik sederhana untuk data numerik - [ ] Latih dengan metode array MDN - [ ] Bangun antarmuka galeri foto atau daftar putar musik - [ ] Jelajahi pemrograman fungsional dengan map, filter, dan reduce ### 🌟 Transformasi Anda Selama Sebulan - [ ] Kuasai operasi array tingkat lanjut dan optimasi performa - [ ] Bangun dashboard visualisasi data lengkap - [ ] Berkontribusi pada proyek open source yang melibatkan pemrosesan data - [ ] Ajarkan orang lain tentang array dan loop dengan contoh praktis - [ ] Buat pustaka pribadi fungsi pemrosesan data yang dapat digunakan kembali - [ ] Jelajahi algoritma dan struktur data yang dibangun di atas array ### 🏆 Pengecekan Akhir Juara Pemrosesan Data Rayakan penguasaan array dan loop Anda: - Apa operasi array yang paling berguna yang telah Anda pelajari untuk aplikasi dunia nyata? - Jenis loop mana yang paling nyaman bagi Anda dan mengapa? - Bagaimana pemahaman tentang array dan loop mengubah pendekatan Anda dalam mengorganisasi data? - Tugas pemrosesan data kompleks apa yang ingin Anda selesaikan selanjutnya? --- Penafian: Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang penting, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau interpretasi yang salah yang timbul dari penggunaan terjemahan ini.

javascript,array,loop

Introduzione a JavaScript

JavaScript è il linguaggio del web. In queste quattro lezioni, imparerai le sue basi. ### Argomenti 1. Variabili e Tipi di Dati 2. Funzioni e Metodi 3. Prendere Decisioni con JavaScript 4. Array e Cicli ### Crediti Queste lezioni sono state scritte con ♥️ da Jasmine Greenaway, Christopher Harrison e Chris Noring Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione automatica Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche potrebbero contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un esperto umano. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione.

javascript

Nozioni di base su JavaScript: Tipi di dati

I tipi di dati sono uno dei concetti fondamentali in JavaScript che incontrerai in ogni programma che scriverai. Pensa ai tipi di dati come al sistema di archiviazione usato dagli antichi bibliotecari di Alessandria: avevano luoghi specifici per i rotoli contenenti poesia, matematica e documenti storici. JavaScript organizza le informazioni in modo simile, con categorie diverse per diversi tipi di dati. In questa lezione, esploreremo i tipi di dati principali che fanno funzionare JavaScript. Imparerai a gestire numeri, testo, valori vero/falso e a capire perché scegliere il tipo corretto è essenziale per i tuoi programmi. Questi concetti potrebbero sembrare astratti all'inizio, ma con la pratica diventeranno naturali. Comprendere i tipi di dati renderà tutto il resto in JavaScript molto più chiaro. Proprio come gli architetti devono conoscere i diversi materiali da costruzione prima di progettare una cattedrale, questi fondamentali supporteranno tutto ciò che costruirai in futuro. ## Quiz Pre-Lettura Quiz pre-lettura Questa lezione copre le basi di JavaScript, il linguaggio che fornisce interattività sul web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variabili in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Tipi di dati in JavaScript") Iniziamo con le variabili e i tipi di dati che le popolano! ## Variabili Le variabili sono elementi fondamentali nella programmazione. Come i barattoli etichettati che gli alchimisti medievali usavano per conservare diverse sostanze, le variabili ti permettono di memorizzare informazioni e di assegnare loro un nome descrittivo per poterle richiamare in seguito. Hai bisogno di ricordare l'età di qualcuno? Memorizzala in una variabile chiamata age. Vuoi tenere traccia del nome di un utente? Conservalo in una variabile chiamata userName. Ci concentreremo sull'approccio moderno per creare variabili in JavaScript. Le tecniche che imparerai qui rappresentano anni di evoluzione del linguaggio e migliori pratiche sviluppate dalla comunità di programmatori. Creare e dichiarare una variabile ha la seguente sintassi [keyword] [name]. È composta da due parti: - Parola chiave. Usa let per variabili che possono cambiare, o const per valori che rimangono invariati. - Il nome della variabile, un nome descrittivo che scegli tu. ✅ La parola chiave let è stata introdotta in ES6 e conferisce alla tua variabile un cosiddetto _block scope_. È consigliato usare let o const invece della vecchia parola chiave var. Approfondiremo gli ambiti di blocco nelle parti successive. ### Compito - lavorare con le variabili 1. Dichiara una variabile. Iniziamo creando la nostra prima variabile: ```javascript let myVariable; ``` Cosa si ottiene: - Questo dice a JavaScript di creare una posizione di archiviazione chiamata myVariable - JavaScript alloca spazio in memoria per questa variabile - La variabile attualmente non ha valore (undefined) 2. Assegna un valore. Ora mettiamo qualcosa nella nostra variabile: ```javascript myVariable = 123; ``` Come funziona l'assegnazione: - L'operatore = assegna il valore 123 alla nostra variabile - La variabile ora contiene questo valore invece di essere undefined - Puoi fare riferimento a questo valore in tutto il tuo codice usando myVariable > Nota: l'uso di = in questa lezione significa che utilizziamo un "operatore di assegnazione", usato per impostare un valore a una variabile. Non denota uguaglianza. 3. Fallo nel modo intelligente. In realtà, combiniamo questi due passaggi: ```javascript let myVariable = 123; ``` Questo approccio è più efficiente: - Stai dichiarando la variabile e assegnando un valore in un'unica istruzione - Questa è la pratica standard tra gli sviluppatori - Riduce la lunghezza del codice mantenendo la chiarezza 4. Cambia idea. E se volessimo memorizzare un numero diverso? ```javascript myVariable = 321; ``` Comprendere la riassegnazione: - La variabile ora contiene 321 invece di 123 - Il valore precedente viene sostituito: le variabili memorizzano solo un valore alla volta - Questa mutabilità è la caratteristica chiave delle variabili dichiarate con let ✅ Provalo! Puoi scrivere JavaScript direttamente nel tuo browser. Apri una finestra del browser e vai agli Strumenti per sviluppatori. Nella console troverai un prompt; digita let myVariable = 123, premi invio, poi digita myVariable. Cosa succede? Nota, imparerai di più su questi concetti nelle lezioni successive. ### 🧠 Controllo di padronanza delle variabili: sentirsi a proprio agio Vediamo come ti senti riguardo alle variabili: - Puoi spiegare la differenza tra dichiarare e assegnare una variabile? - Cosa succede se provi a usare una variabile prima di dichiararla? - Quando sceglieresti let invece di const per una variabile? ## Costanti A volte hai bisogno di memorizzare informazioni che non devono mai cambiare durante l'esecuzione del programma. Pensa alle costanti come ai principi matematici che Euclide stabilì nell'antica Grecia: una volta dimostrati e documentati, rimasero fissi per tutte le future consultazioni. Le costanti funzionano in modo simile alle variabili, ma con una restrizione importante: una volta assegnato il loro valore, non può essere modificato. Questa immutabilità aiuta a prevenire modifiche accidentali a valori critici nel tuo programma. La dichiarazione e l'inizializzazione di una costante seguono gli stessi concetti di una variabile, con l'eccezione della parola chiave const. Le costanti sono solitamente dichiarate con lettere maiuscole. Ecco cosa fa questo codice: - Crea una costante chiamata MY_VARIABLE con il valore 123 - Utilizza la convenzione di denominazione in maiuscolo per le costanti - Impedisce qualsiasi modifica futura a questo valore Le costanti hanno due regole principali: - Devi assegnare loro un valore subito: non sono consentite costanti vuote! - Non puoi mai cambiare quel valore: JavaScript genererà un errore se ci provi. Vediamo cosa intendo: Valore semplice - Il seguente NON è consentito: ```javascript const PI = 3; PI = 4; // non consentito ``` Cosa devi ricordare: - Tentativi di riassegnare una costante causeranno un errore - Protegge valori importanti da modifiche accidentali - Garantisce che il valore rimanga costante durante il programma Il riferimento all'oggetto è protetto - Il seguente NON è consentito: ```javascript const obj = { a: 3 }; obj = { b: 5 } // non consentito ``` Comprendere questi concetti: - Impedisce di sostituire l'intero oggetto con uno nuovo - Protegge il riferimento all'oggetto originale - Mantiene l'identità dell'oggetto in memoria Il valore dell'oggetto non è protetto - Il seguente È consentito: ```javascript const obj = { a: 3 }; obj.a = 5; // consentito ``` Analisi di ciò che accade qui: - Modifica il valore della proprietà all'interno dell'oggetto - Mantiene lo stesso riferimento all'oggetto - Dimostra che i contenuti dell'oggetto possono cambiare mentre il riferimento rimane costante > Nota, un const significa che il riferimento è protetto dalla riassegnazione. Il valore non è _immutabile_ però e può cambiare, specialmente se è una struttura complessa come un oggetto. ## Tipi di dati JavaScript organizza le informazioni in diverse categorie chiamate tipi di dati. Questo concetto rispecchia il modo in cui gli studiosi antichi categorizzavano la conoscenza: Aristotele distingueva tra diversi tipi di ragionamento, sapendo che i principi logici non potevano essere applicati uniformemente alla poesia, alla matematica e alla filosofia naturale. I tipi di dati sono importanti perché operazioni diverse funzionano con tipi di informazioni diversi. Proprio come non puoi eseguire calcoli su un nome o alfabetizzare un'equazione matematica, JavaScript richiede il tipo di dato appropriato per ogni operazione. Comprenderlo previene errori e rende il tuo codice più affidabile. Le variabili possono memorizzare molti tipi diversi di valori, come numeri e testo. Questi vari tipi di valori sono conosciuti come tipi di dati. I tipi di dati sono una parte importante dello sviluppo software perché aiutano gli sviluppatori a prendere decisioni su come il codice dovrebbe essere scritto e su come il software dovrebbe funzionare. Inoltre, alcuni tipi di dati hanno caratteristiche uniche che aiutano a trasformare o estrarre ulteriori informazioni da un valore. ✅ I tipi di dati sono anche chiamati primitive di dati di JavaScript, poiché sono i tipi di dati di livello più basso forniti dal linguaggio. Ci sono 7 tipi di dati primitivi: string, number, bigint, boolean, undefined, null e symbol. Prenditi un minuto per visualizzare cosa potrebbe rappresentare ciascuna di queste primitive. Cos'è una zebra? E 0? true? ### Numeri I numeri sono il tipo di dato più semplice in JavaScript. Che tu stia lavorando con numeri interi come 42, decimali come 3.14 o numeri negativi come -5, JavaScript li gestisce in modo uniforme. Ricordi la nostra variabile di prima? Quel 123 che abbiamo memorizzato era in realtà un tipo di dato numerico: Caratteristiche principali: - JavaScript riconosce automaticamente i valori numerici - Puoi eseguire operazioni matematiche con queste variabili - Non è richiesta una dichiarazione esplicita del tipo Le variabili possono memorizzare tutti i tipi di numeri, inclusi decimali o numeri negativi. I numeri possono anche essere utilizzati con operatori aritmetici, trattati nella sezione successiva. ### Operatori aritmetici Gli operatori aritmetici ti permettono di eseguire calcoli matematici in JavaScript. Questi operatori seguono gli stessi principi usati dai matematici per secoli: gli stessi simboli che apparivano nei lavori di studiosi come Al-Khwarizmi, che sviluppò la notazione algebrica. Gli operatori funzionano come ti aspetteresti dalla matematica tradizionale: il segno più per l'addizione, il meno per la sottrazione e così via. Ci sono diversi tipi di operatori da utilizzare per eseguire funzioni aritmetiche, e alcuni sono elencati qui: ✅ Provalo! Prova un'operazione aritmetica nella console del tuo browser. I risultati ti sorprendono? ### 🧮 Controllo delle competenze matematiche: calcolare con sicurezza Metti alla prova la tua comprensione dell'aritmetica: - Qual è la differenza tra / (divisione) e % (resto)? - Riesci a prevedere quanto fa 10 % 3? (Suggerimento: non è 3.33...) - Perché l'operatore del resto potrebbe essere utile nella programmazione? ### Stringhe In JavaScript, i dati testuali sono rappresentati come stringhe. Il termine "stringa" deriva dal concetto di caratteri concatenati in sequenza, proprio come gli scribi nei monasteri medievali collegavano lettere per formare parole e frasi nei loro manoscritti. Le stringhe sono fondamentali per lo sviluppo web. Ogni pezzo di testo visualizzato su un sito web – nomi utente, etichette dei pulsanti, messaggi di errore, contenuti – è gestito come dati di tipo stringa. Comprendere le stringhe è essenziale per creare interfacce utente funzionali. Le stringhe sono insiemi di caratteri racchiusi tra virgolette singole o doppie. Comprendere questi concetti: - Utilizza virgolette singole ' o doppie " per definire le stringhe - Memorizza dati testuali che possono includere lettere, numeri e simboli - Assegna valori di stringa alle variabili per un uso successivo - Richiede virgolette per distinguere il testo dai nomi delle variabili Ricorda di usare le virgolette quando scrivi una stringa, altrimenti JavaScript presumerà che sia un nome di variabile. ### Formattazione delle stringhe La manipolazione delle stringhe ti consente di combinare elementi di testo, incorporare variabili e creare contenuti dinamici che rispondono allo stato del programma. Questa tecnica ti permette di costruire testo in modo programmatico. Spesso hai bisogno di unire più stringhe insieme: questo processo si chiama concatenazione. Per concatenare due o più stringhe, o unirle insieme, usa l'operatore +. Passo dopo passo, ecco cosa succede: - Combina più stringhe utilizzando l'operatore + - Unisce direttamente le stringhe senza spazi nel primo esempio - Aggiunge caratteri di spazio " " tra le stringhe per migliorare la leggibilità - Inserisce punteggiatura come virgole per creare una formattazione corretta ✅ Perché 1 + 1 = 2 in JavaScript, ma '1' + '1' = 11? Pensaci. E cosa succede con '1' + 1? I template literals sono un altro modo per formattare le stringhe, ma invece delle virgolette si usano gli apici inversi. Qualsiasi cosa che non sia testo semplice deve essere inserita nei segnaposto ${ }. Questo include tutte le variabili che possono essere stringhe. Capire ogni parte: - Usa gli apici inversi ` `` invece delle virgolette normali per creare i template literals - Incorpora direttamente le variabili utilizzando la sintassi del segnaposto ${} - Preserva spazi e formattazione esattamente come scritto - Fornisce un modo più pulito per creare stringhe complesse con variabili Puoi raggiungere i tuoi obiettivi di formattazione con entrambi i metodi, ma i template literals rispettano spazi e interruzioni di riga. ✅ Quando useresti un template literal rispetto a una stringa normale? ### 🔤 Controllo di Maestria delle Stringhe: Fiducia nella Manipolazione del Testo Valuta le tue competenze con le stringhe: - Sai spiegare perché '1' + '1' equivale a '11' invece di 2? - Quale metodo per le stringhe trovi più leggibile: concatenazione o template literals? - Cosa succede se dimentichi le virgolette attorno a una stringa? ### Booleani I booleani rappresentano la forma più semplice di dati: possono contenere solo uno dei due valori – true o false. Questo sistema di logica binaria risale al lavoro di George Boole, un matematico del XIX secolo che ha sviluppato l'algebra booleana. Nonostante la loro semplicità, i booleani sono essenziali per la logica dei programmi. Permettono al tuo codice di prendere decisioni basate su condizioni – se un utente è loggato, se un pulsante è stato cliccato o se determinati criteri sono soddisfatti. I booleani possono avere solo due valori: true o false. I booleani aiutano a decidere quali righe di codice devono essere eseguite quando vengono soddisfatte determinate condizioni. In molti casi, gli operatori aiutano a impostare il valore di un booleano e spesso noterai e scriverai variabili che vengono inizializzate o i cui valori vengono aggiornati con un operatore. Nel codice sopra, abbiamo: - Creato una variabile che memorizza il valore booleano true - Dimostrato come memorizzare il valore booleano false - Usato le parole chiave esatte true e false (senza virgolette) - Preparato queste variabili per l'uso in dichiarazioni condizionali ✅ Una variabile può essere considerata 'truthy' se viene valutata come booleano true. Curiosamente, in JavaScript, tutti i valori sono truthy a meno che non siano definiti come falsy. ### 🎯 Controllo della Logica Booleana: Competenze di Decisione Metti alla prova la tua comprensione dei booleani: - Perché pensi che JavaScript abbia valori "truthy" e "falsy" oltre a true e false? - Riesci a prevedere quale di questi è falsy: 0, "0", [], "false"? - In che modo i booleani possono essere utili per controllare il flusso del programma? --- ## 📊 Riepilogo del Toolkit sui Tipi di Dati ## Sfida GitHub Copilot Agent 🚀 Usa la modalità Agent per completare la seguente sfida: Descrizione: Crea un gestore di informazioni personali che dimostri tutti i tipi di dati JavaScript che hai imparato in questa lezione, gestendo scenari di dati reali. Prompt: Crea un programma JavaScript che crei un oggetto profilo utente contenente: il nome di una persona (stringa), età (numero), stato di studente (booleano), colori preferiti come array e un oggetto indirizzo con proprietà di via, città e codice postale. Includi funzioni per visualizzare le informazioni del profilo e aggiornare i singoli campi. Assicurati di dimostrare la concatenazione di stringhe, i template literals, le operazioni aritmetiche con l'età e la logica booleana per lo stato di studente. Scopri di più sulla modalità agent qui. ## 🚀 Sfida JavaScript ha alcuni comportamenti che possono sorprendere gli sviluppatori. Ecco un esempio classico da esplorare: prova a digitare questo nel console del tuo browser: let age = 1; let Age = 2; age == Age e osserva il risultato. Restituisce false – riesci a capire perché? Questo rappresenta uno dei tanti comportamenti di JavaScript che vale la pena comprendere. Familiarizzare con queste particolarità ti aiuterà a scrivere codice più affidabile e a risolvere i problemi in modo più efficace. ## Quiz post-lezione Quiz post-lezione ## Revisione e Studio Autonomo Dai un'occhiata a questa lista di esercizi JavaScript e prova a farne uno. Cosa hai imparato? ## Compito Pratica sui Tipi di Dati ## 🚀 La tua Timeline di Maestria sui Tipi di Dati in JavaScript ### ⚡ Cosa puoi fare nei prossimi 5 minuti - [ ] Apri la console del tuo browser e crea 3 variabili con tipi di dati diversi - [ ] Prova la sfida: let age = 1; let Age = 2; age == Age e scopri perché è false - [ ] Pratica la concatenazione di stringhe con il tuo nome e il tuo numero preferito - [ ] Testa cosa succede quando aggiungi un numero a una stringa ### 🎯 Cosa puoi realizzare in un'ora - [ ] Completa il quiz post-lezione e rivedi i concetti che ti risultano poco chiari - [ ] Crea un mini calcolatore che sommi, sottragga, moltiplichi e divida due numeri - [ ] Costruisci un semplice formattatore di nomi usando i template literals - [ ] Esplora le differenze tra gli operatori di confronto == e === - [ ] Pratica la conversione tra diversi tipi di dati ### 📅 La tua Fondazione JavaScript per una Settimana - [ ] Completa il compito con sicurezza e creatività - [ ] Crea un oggetto profilo personale utilizzando tutti i tipi di dati appresi - [ ] Pratica con esercizi JavaScript da CSS-Tricks - [ ] Costruisci un semplice validatore di form usando la logica booleana - [ ] Sperimenta con tipi di dati array e oggetto (anticipazione delle prossime lezioni) - [ ] Unisciti a una comunità JavaScript e fai domande sui tipi di dati ### 🌟 La tua Trasformazione in un Mese - [ ] Integra la conoscenza dei tipi di dati in progetti di programmazione più grandi - [ ] Comprendi quando e perché utilizzare ogni tipo di dato nelle applicazioni reali - [ ] Aiuta altri principianti a comprendere i fondamenti di JavaScript - [ ] Costruisci una piccola applicazione che gestisca diversi tipi di dati utente - [ ] Esplora concetti avanzati sui tipi di dati come coercizione di tipo e uguaglianza stretta - [ ] Contribuisci a progetti open source JavaScript migliorando la documentazione ### 🧠 Check-in Finale sulla Maestria dei Tipi di Dati Celebra la tua base di JavaScript: - Quale tipo di dato ti ha sorpreso di più per il suo comportamento? - Quanto ti senti a tuo agio nel spiegare variabili vs. costanti a un amico? - Qual è la cosa più interessante che hai scoperto sul sistema di tipi di JavaScript? - Quale applicazione reale puoi immaginare di costruire con questi fondamenti? --- Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche potrebbero contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.

javascript

Fondamenti di JavaScript: Metodi e Funzioni

## Quiz Pre-Lettura Quiz pre-lettura Scrivere lo stesso codice ripetutamente è una delle frustrazioni più comuni nella programmazione. Le funzioni risolvono questo problema permettendoti di racchiudere il codice in blocchi riutilizzabili. Pensa alle funzioni come ai componenti standardizzati che hanno reso rivoluzionaria la catena di montaggio di Henry Ford: una volta creato un componente affidabile, puoi usarlo ovunque sia necessario senza doverlo ricostruire da zero. Le funzioni ti consentono di raggruppare pezzi di codice per riutilizzarli in tutto il programma. Invece di copiare e incollare la stessa logica ovunque, puoi creare una funzione una volta e chiamarla ogni volta che serve. Questo approccio mantiene il codice organizzato e rende gli aggiornamenti molto più semplici. In questa lezione, imparerai a creare le tue funzioni, a passare informazioni a esse e a ottenere risultati utili. Scoprirai la differenza tra funzioni e metodi, apprenderai approcci sintattici moderni e vedrai come le funzioni possono lavorare con altre funzioni. Costruiremo questi concetti passo dopo passo. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metodi e Funzioni") ## Funzioni Una funzione è un blocco di codice autonomo che svolge un compito specifico. Incapsula la logica che puoi eseguire ogni volta che ne hai bisogno. Invece di scrivere lo stesso codice più volte nel tuo programma, puoi racchiuderlo in una funzione e chiamare quella funzione ogni volta che ti serve. Questo approccio mantiene il codice pulito e rende gli aggiornamenti molto più semplici. Pensa alla sfida di manutenzione se dovessi cambiare una logica sparsa in 20 posizioni diverse nel tuo codice. Dare nomi descrittivi alle tue funzioni è essenziale. Una funzione ben nominata comunica chiaramente il suo scopo – quando vedi cancelTimer(), capisci immediatamente cosa fa, proprio come un pulsante chiaramente etichettato ti dice esattamente cosa accadrà quando lo clicchi. ## Creare e chiamare una funzione Esaminiamo come creare una funzione. La sintassi segue uno schema coerente: Analizziamo questo codice: - La parola chiave function dice a JavaScript "Ehi, sto creando una funzione!" - nameOfFunction è dove dai alla tua funzione un nome descrittivo - Le parentesi () sono dove puoi aggiungere parametri (ci arriveremo presto) - Le parentesi graffe {} contengono il codice effettivo che viene eseguito quando chiami la funzione Creiamo una semplice funzione di saluto per vedere come funziona: Questa funzione stampa "Hello, world!" nella console. Una volta definita, puoi usarla tutte le volte che vuoi. Per eseguire (o "chiamare") la tua funzione, scrivi il suo nome seguito da parentesi. JavaScript ti permette di definire la tua funzione prima o dopo averla chiamata – il motore JavaScript gestirà l'ordine di esecuzione. Quando esegui questa riga, esegue tutto il codice all'interno della tua funzione displayGreeting, mostrando "Hello, world!" nella console del browser. Puoi chiamare questa funzione ripetutamente. ### 🧠 Verifica Fondamenti delle Funzioni: Costruire le Tue Prime Funzioni Vediamo come ti senti riguardo alle funzioni di base: - Puoi spiegare perché usiamo le parentesi graffe {} nelle definizioni di funzione? - Cosa succede se scrivi displayGreeting senza le parentesi? - Perché potresti voler chiamare la stessa funzione più volte? ### Buone pratiche per le funzioni Ecco alcuni consigli per scrivere ottime funzioni: - Dai alle tue funzioni nomi chiari e descrittivi – il tuo futuro te stesso ti ringrazierà! - Usa camelCasing per i nomi composti (come calculateTotal invece di calculate_total) - Mantieni ogni funzione focalizzata su un unico compito ## Passare informazioni a una funzione La nostra funzione displayGreeting è limitata – può solo mostrare "Hello, world!" per tutti. I parametri ci permettono di rendere le funzioni più flessibili e utili. I parametri agiscono come segnaposto dove puoi inserire valori diversi ogni volta che usi la funzione. In questo modo, la stessa funzione può lavorare con informazioni diverse a ogni chiamata. Elenca i parametri all'interno delle parentesi quando definisci la funzione, separando più parametri con delle virgole: Ogni parametro agisce come un segnaposto – quando qualcuno chiama la tua funzione, fornirà valori reali che verranno inseriti in questi spazi. Aggiorniamo la nostra funzione di saluto per accettare il nome di qualcuno: Nota come stiamo usando gli apici inversi (` `) e ${}` per inserire direttamente il nome nel messaggio – questo si chiama template literal, ed è un modo davvero utile per costruire stringhe con variabili mescolate. Ora, quando chiamiamo la nostra funzione, possiamo passare qualsiasi nome: JavaScript prende la stringa 'Christopher', la assegna al parametro name e crea il messaggio personalizzato "Hello, Christopher!" ## Valori predefiniti E se volessimo rendere alcuni parametri opzionali? È qui che i valori predefiniti tornano utili! Supponiamo di voler permettere alle persone di personalizzare la parola di saluto, ma se non ne specificano una, useremo semplicemente "Hello" come valore predefinito. Puoi impostare valori predefiniti usando il segno di uguale, proprio come si fa con una variabile: Qui, name è ancora obbligatorio, ma salutation ha un valore di riserva di 'Hello' se nessuno fornisce un saluto diverso. Ora possiamo chiamare questa funzione in due modi diversi: Nella prima chiamata, JavaScript usa il valore predefinito "Hello" poiché non abbiamo specificato un saluto. Nella seconda chiamata, usa il nostro "Hi" personalizzato. Questa flessibilità rende le funzioni adattabili a diversi scenari. ### 🎛️ Verifica Parametri: Rendere le Funzioni Flessibili Metti alla prova la tua comprensione dei parametri: - Qual è la differenza tra un parametro e un argomento? - Perché i valori predefiniti sono utili nella programmazione reale? - Riesci a prevedere cosa succede se passi più argomenti rispetto ai parametri? ## Valori di ritorno Le nostre funzioni finora hanno solo stampato messaggi nella console, ma cosa succede se vuoi che una funzione calcoli qualcosa e ti restituisca il risultato? È qui che entrano in gioco i valori di ritorno. Invece di limitarsi a mostrare qualcosa, una funzione può restituire un valore che puoi memorizzare in una variabile o utilizzare in altre parti del tuo codice. Per inviare un valore indietro, usi la parola chiave return seguita da ciò che vuoi restituire: Ecco qualcosa di importante: quando una funzione raggiunge un'istruzione return, smette immediatamente di funzionare e invia quel valore a chi l'ha chiamata. Modifichiamo la nostra funzione di saluto per restituire il messaggio invece di stamparlo: Ora, invece di stampare il saluto, questa funzione crea il messaggio e ce lo restituisce. Per utilizzare il valore restituito, possiamo memorizzarlo in una variabile proprio come qualsiasi altro valore: Ora greetingMessage contiene "Hello, Christopher" e possiamo usarlo ovunque nel nostro codice – per mostrarlo su una pagina web, includerlo in un'email o passarlo a un'altra funzione. ### 🔄 Verifica Valori di Ritorno: Ottenere Risultati Valuta la tua comprensione dei valori di ritorno: - Cosa succede al codice dopo un'istruzione return in una funzione? - Perché restituire valori è spesso meglio che limitarsi a stampare nella console? - Una funzione può restituire tipi di valori diversi (stringa, numero, booleano)? ## Funzioni come parametri per altre funzioni Le funzioni possono essere passate come parametri ad altre funzioni. Sebbene questo concetto possa sembrare complesso inizialmente, è una caratteristica potente che consente modelli di programmazione flessibili. Questo schema è molto comune quando vuoi dire "quando succede qualcosa, fai quest'altra cosa". Ad esempio, "quando il timer finisce, esegui questo codice" o "quando l'utente clicca il pulsante, chiama questa funzione." Vediamo setTimeout, che è una funzione integrata che aspetta un certo periodo di tempo e poi esegue del codice. Dobbiamo dirle quale codice eseguire – caso perfetto per passare una funzione! Prova questo codice – dopo 3 secondi, vedrai un messaggio: Nota come passiamo displayDone (senza parentesi) a setTimeout. Non stiamo chiamando la funzione noi stessi – la stiamo passando a setTimeout dicendo "chiamala tra 3 secondi." ### Funzioni anonime A volte hai bisogno di una funzione per una sola cosa e non vuoi darle un nome. Pensaci – se usi una funzione solo una volta, perché appesantire il tuo codice con un nome extra? JavaScript ti permette di creare funzioni anonime – funzioni senza nome che puoi definire direttamente dove ti servono. Ecco come possiamo riscrivere il nostro esempio del timer usando una funzione anonima: Questo ottiene lo stesso risultato, ma la funzione è definita direttamente all'interno della chiamata setTimeout, eliminando la necessità di una dichiarazione di funzione separata. ### Funzioni freccia Il JavaScript moderno ha un modo ancora più breve per scrivere funzioni chiamato funzioni freccia. Usano => (che sembra una freccia – capito?) e sono molto popolari tra gli sviluppatori. Le funzioni freccia ti permettono di saltare la parola chiave function e scrivere codice più conciso. Ecco il nostro esempio del timer usando una funzione freccia: Le () sono dove andrebbero i parametri (vuote in questo caso), poi arriva la freccia =>, e infine il corpo della funzione tra parentesi graffe. Questo fornisce la stessa funzionalità con una sintassi più concisa. ### Quando usare ogni strategia Quando dovresti usare ciascun approccio? Una linea guida pratica: se utilizzerai la funzione più volte, dagli un nome e definiscila separatamente. Se è per un uso specifico, considera una funzione anonima. Sia le funzioni freccia che la sintassi tradizionale sono scelte valide, anche se le funzioni freccia sono prevalenti nei moderni codici JavaScript. ### 🎨 Verifica Stili di Funzione: Scegliere la Sintassi Giusta Metti alla prova la tua comprensione della sintassi: - Quando potresti preferire le funzioni freccia rispetto alla sintassi tradizionale? - Qual è il principale vantaggio delle funzioni anonime? - Riesci a pensare a una situazione in cui una funzione con nome è migliore di una anonima? --- ## 🚀 Sfida Riesci a spiegare in una frase la differenza tra funzioni e metodi? Prova! ## Sfida GitHub Copilot Agent 🚀 Usa la modalità Agent per completare la seguente sfida: Descrizione: Crea una libreria di utilità matematica che dimostri i diversi concetti di funzione trattati in questa lezione, inclusi parametri, valori predefiniti, valori di ritorno e funzioni freccia. Prompt: Crea un file JavaScript chiamato mathUtils.js che contenga le seguenti funzioni: 1. Una funzione add che prende due parametri e restituisce la loro somma 2. Una funzione multiply con valori predefiniti per i parametri (il secondo parametro predefinito è 1) 3. Una funzione freccia square che prende un numero e restituisce il suo quadrato 4. Una funzione calculate che accetta un'altra funzione come parametro e due numeri, quindi applica la funzione a quei numeri 5. Dimostra la chiamata di ciascuna funzione con casi di test appropriati Scopri di più sulla modalità agent qui. ## Quiz Post-Lettura Quiz post-lettura ## Revisione e Studio Autonomo Vale la pena approfondire un po' di più le funzioni freccia, poiché sono sempre più utilizzate nei codici. Prova a scrivere una funzione e poi a riscriverla con questa sintassi. ## Compito Divertiti con le Funzioni --- ## 🧰 Riepilogo degli Strumenti per le Funzioni JavaScript --- ## 🚀 Cronologia di Padronanza delle Funzioni JavaScript ### ⚡ Cosa Puoi Fare nei Prossimi 5 Minuti - [ ] Scrivi una semplice funzione che restituisca il tuo numero preferito - [ ] Crea una funzione con due parametri che li sommi insieme - [ ] Prova a convertire una funzione tradizionale in sintassi a freccia - [ ] Esercitati con la sfida: spiega la differenza tra funzioni e metodi ### 🎯 Cosa Puoi Realizzare in Quest'ora - [ ] Completa il quiz post-lezione e rivedi i concetti che ti risultano poco chiari - [ ] Crea la libreria di utilità matematiche dalla sfida di GitHub Copilot - [ ] Scrivi una funzione che utilizza un'altra funzione come parametro - [ ] Esercitati a scrivere funzioni con parametri di default - [ ] Sperimenta con i template literals nei valori di ritorno delle funzioni ### 📅 La Tua Padronanza delle Funzioni per la Settimana - [ ] Completa l'assegnazione "Divertiti con le Funzioni" con creatività - [ ] Refattorizza del codice ripetitivo che hai scritto trasformandolo in funzioni riutilizzabili - [ ] Crea un piccolo calcolatore utilizzando solo funzioni (senza variabili globali) - [ ] Esercitati con le funzioni a freccia usando metodi di array come map() e filter() - [ ] Crea una raccolta di funzioni utili per compiti comuni - [ ] Studia le funzioni di ordine superiore e i concetti di programmazione funzionale ### 🌟 La Tua Trasformazione Mensile - [ ] Padroneggia concetti avanzati sulle funzioni come chiusure e ambiti - [ ] Crea un progetto che utilizza ampiamente la composizione di funzioni - [ ] Contribuisci al codice open source migliorando la documentazione delle funzioni - [ ] Insegna a qualcun altro le funzioni e i diversi stili di sintassi - [ ] Esplora i paradigmi di programmazione funzionale in JavaScript - [ ] Crea una libreria personale di funzioni riutilizzabili per progetti futuri ### 🏆 Check-in Finale del Campione delle Funzioni Festeggia la tua padronanza delle funzioni: - Qual è la funzione più utile che hai creato finora? - In che modo imparare sulle funzioni ha cambiato il tuo modo di pensare all'organizzazione del codice? - Quale sintassi delle funzioni preferisci e perché? - Quale problema reale risolveresti scrivendo una funzione? --- Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche potrebbero contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si consiglia una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.

javascript

Fondamenti di JavaScript: Prendere decisioni

Ti sei mai chiesto come le applicazioni prendano decisioni intelligenti? Come un sistema di navigazione scelga il percorso più veloce, o come un termostato decida quando accendere il riscaldamento? Questo è il concetto fondamentale del prendere decisioni nella programmazione. Proprio come il motore analitico di Charles Babbage era progettato per seguire diverse sequenze di operazioni basate su condizioni, i moderni programmi JavaScript devono fare scelte basate su circostanze variabili. Questa capacità di ramificarsi e prendere decisioni è ciò che trasforma il codice statico in applicazioni reattive e intelligenti. In questa lezione, imparerai come implementare la logica condizionale nei tuoi programmi. Esploreremo le istruzioni condizionali, gli operatori di confronto e le espressioni logiche che permettono al tuo codice di valutare situazioni e rispondere in modo appropriato. ## Quiz Pre-Lezione Quiz pre-lezione La capacità di prendere decisioni e controllare il flusso del programma è un aspetto fondamentale della programmazione. Questa sezione copre come controllare il percorso di esecuzione dei tuoi programmi JavaScript utilizzando valori Booleani e logica condizionale. [](https://youtube.com/watch?v=SxTp8j-fMMY "Prendere decisioni") ## Breve Ripasso sui Booleani Prima di esplorare il processo decisionale, ripassiamo i valori Booleani dalla lezione precedente. Nominati in onore del matematico George Boole, questi valori rappresentano stati binari – true o false. Non c'è ambiguità, né vie di mezzo. Questi valori binari formano la base di tutta la logica computazionale. Ogni decisione che il tuo programma prende si riduce, in ultima analisi, a una valutazione booleana. Creare variabili booleane è semplice: Questo crea due variabili con valori booleani espliciti. ✅ I Booleani prendono il nome dal matematico, filosofo e logico inglese George Boole (1815–1864). ## Operatori di confronto e Booleani Nella pratica, raramente imposterai manualmente valori booleani. Piuttosto, li genererai valutando condizioni: "Questo numero è maggiore di quell'altro?" o "Questi valori sono uguali?" Gli operatori di confronto permettono queste valutazioni. Confrontano valori e restituiscono risultati booleani basati sulla relazione tra gli operandi. ✅ Verifica la tua conoscenza scrivendo alcuni confronti nella console del browser. Ti sorprende qualche dato restituito? ### 🧠 Controllo della padronanza dei confronti: Comprendere la logica booleana Metti alla prova la tua comprensione dei confronti: - Perché pensi che === (uguaglianza stretta) sia generalmente preferito rispetto a == (uguaglianza debole)? - Riesci a prevedere cosa restituisce 5 === '5'? E 5 == '5'? - Qual è la differenza tra !== e !=? ## Istruzione If L'istruzione if è come fare una domanda nel tuo codice. "Se questa condizione è vera, allora fai questa cosa." È probabilmente lo strumento più importante che userai per prendere decisioni in JavaScript. Ecco come funziona: La condizione va dentro le parentesi, e se è true, JavaScript esegue il codice dentro le parentesi graffe. Se è false, JavaScript salta semplicemente tutto quel blocco. Spesso userai operatori di confronto per creare queste condizioni. Vediamo un esempio pratico: Poiché 1000 >= 800 si valuta come true, il codice dentro il blocco viene eseguito, mostrando "Sto comprando un nuovo laptop!" nella console. ## Istruzione If..Else Ma cosa succede se vuoi che il tuo programma faccia qualcosa di diverso quando la condizione è falsa? È qui che entra in gioco else – è come avere un piano di riserva. L'istruzione else ti dà un modo per dire "se questa condizione non è vera, fai invece quest'altra cosa." Ora, poiché 500 >= 800 è false, JavaScript salta il primo blocco ed esegue invece il blocco else. Vedrai "Non posso permettermi un nuovo laptop, per ora!" nella console. ✅ Metti alla prova la tua comprensione di questo codice e del codice seguente eseguendolo nella console del browser. Cambia i valori delle variabili currentMoney e laptopPrice per modificare il risultato di console.log(). ### 🎯 Controllo della logica If-Else: Percorsi ramificati Valuta la tua comprensione della logica condizionale: - Cosa succede se currentMoney è esattamente uguale a laptopPrice? - Riesci a pensare a uno scenario reale in cui la logica if-else sarebbe utile? - Come potresti estendere questo per gestire più fasce di prezzo? ## Istruzione Switch A volte hai bisogno di confrontare un valore con più opzioni. Anche se potresti concatenare diverse istruzioni if..else, questo approccio diventa poco pratico. L'istruzione switch offre una struttura più pulita per gestire più valori discreti. Il concetto ricorda i sistemi di commutazione meccanica utilizzati nei primi centralini telefonici – un valore di input determina quale percorso specifico segue l'esecuzione. Ecco come è strutturato: - JavaScript valuta l'espressione una volta - Scorre ogni case per trovare una corrispondenza - Quando trova una corrispondenza, esegue quel blocco di codice - Il break dice a JavaScript di fermarsi ed uscire dal switch - Se nessun case corrisponde, esegue il blocco default (se presente) In questo esempio, JavaScript vede che dayNumber è 2, trova il case 2 corrispondente, imposta dayName su "Martedì", e poi esce dal switch. Il risultato? "Oggi è Martedì" viene registrato nella console. ✅ Metti alla prova la tua comprensione di questo codice e del codice seguente eseguendolo nella console del browser. Cambia i valori della variabile a per modificare il risultato di console.log(). ### 🔄 Padronanza del Switch: Opzioni multiple Metti alla prova la tua comprensione del switch: - Cosa succede se dimentichi un'istruzione break? - Quando useresti switch invece di più istruzioni if-else? - Perché il caso default è utile anche se pensi di aver coperto tutte le possibilità? ## Operatori Logici e Booleani Le decisioni complesse spesso richiedono la valutazione simultanea di più condizioni. Proprio come l'algebra booleana permette ai matematici di combinare espressioni logiche, la programmazione fornisce operatori logici per collegare più condizioni booleane. Questi operatori permettono una logica condizionale sofisticata combinando semplici valutazioni true/false. Questi operatori ti permettono di combinare condizioni in modi utili: - AND (&&) significa che entrambe le condizioni devono essere vere - OR (||) significa che almeno una condizione deve essere vera - NOT (!) inverte true in false (e viceversa) ## Condizioni e decisioni con operatori logici Vediamo questi operatori logici in azione con un esempio più realistico: In questo esempio: calcoliamo un prezzo scontato del 20% (640), quindi valutiamo se i nostri fondi disponibili coprono il prezzo pieno O il prezzo scontato. Poiché 600 soddisfa la soglia del prezzo scontato di 640, la condizione si valuta come vera. ### 🧮 Controllo degli operatori logici: Combinare le condizioni Metti alla prova la tua comprensione degli operatori logici: - Nell'espressione A && B, cosa succede se A è falso? B viene comunque valutato? - Riesci a pensare a una situazione in cui avresti bisogno di tutti e tre gli operatori (&&, ||, !)? - Qual è la differenza tra !user.isActive e user.isActive !== true? ### Operatore di Negazione A volte è più facile pensare a quando qualcosa NON è vero. Ad esempio, invece di chiedere "L'utente è connesso?", potresti voler chiedere "L'utente NON è connesso?" L'operatore punto esclamativo (!) inverte la logica per te. L'operatore ! è come dire "il contrario di..." – se qualcosa è true, ! lo rende false, e viceversa. ### Espressioni Ternarie Per assegnazioni condizionali semplici, JavaScript fornisce l'operatore ternario. Questa sintassi concisa ti permette di scrivere un'espressione condizionale in una sola riga, utile quando devi assegnare uno di due valori basandoti su una condizione. Si legge come una domanda: "Questa condizione è vera? Se sì, usa questo valore. Se no, usa quell'altro valore." Ecco un esempio più concreto: ✅ Prenditi un minuto per leggere questo codice alcune volte. Capisci come funzionano questi operatori? Ecco cosa dice questa riga: "Il firstNumber è maggiore del secondNumber? Se sì, metti firstNumber in biggestNumber. Se no, metti secondNumber in biggestNumber." L'operatore ternario è solo un modo più breve per scrivere questa tradizionale istruzione if..else: Entrambi gli approcci producono risultati identici. L'operatore ternario offre concisione, mentre la struttura tradizionale if-else può essere più leggibile per condizioni complesse. --- ## 🚀 Sfida Crea un programma scritto prima con operatori logici, e poi riscrivilo usando un'espressione ternaria. Qual è la tua sintassi preferita? --- ## Sfida GitHub Copilot Agent 🚀 Usa la modalità Agent per completare la seguente sfida: Descrizione: Crea un calcolatore di voti completo che dimostri diversi concetti di decision-making da questa lezione, inclusi if-else statements, switch statements, operatori logici ed espressioni ternarie. Prompt: Scrivi un programma JavaScript che prenda il punteggio numerico di uno studente (0-100) e determini il voto letterale usando i seguenti criteri: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Inferiore a 60 Requisiti: 1. Usa un'istruzione if-else per determinare il voto letterale 2. Usa operatori logici per verificare se lo studente supera (voto >= 60) E ha lode (voto >= 90) 3. Usa un'istruzione switch per fornire un feedback specifico per ogni voto letterale 4. Usa un operatore ternario per determinare se lo studente è idoneo per il corso successivo (voto >= 70) 5. Includi la validazione dell'input per assicurarti che il punteggio sia compreso tra 0 e 100 Testa il tuo programma con vari punteggi, inclusi casi limite come 59, 60, 89, 90 e input non validi. Scopri di più su agent mode qui. ## Quiz post-lezione Quiz post-lezione ## Revisione e studio autonomo Leggi di più sui numerosi operatori disponibili per l'utente su MDN. Consulta il fantastico operator lookup di Josh Comeau! ## Compito Operatori --- ## 🧠 Riepilogo del tuo kit di strumenti per il processo decisionale --- ## 🚀 La tua timeline per padroneggiare il processo decisionale in JavaScript ### ⚡ Cosa puoi fare nei prossimi 5 minuti - [ ] Pratica gli operatori di confronto nella console del browser - [ ] Scrivi una semplice istruzione if-else che controlla la tua età - [ ] Prova la sfida: riscrivi un if-else usando un operatore ternario - [ ] Testa cosa succede con diversi valori "truthy" e "falsy" ### 🎯 Cosa puoi realizzare in quest'ora - [ ] Completa il quiz post-lezione e rivedi eventuali concetti poco chiari - [ ] Crea il calcolatore di voti completo dalla sfida di GitHub Copilot - [ ] Crea un semplice albero decisionale per uno scenario reale (come scegliere cosa indossare) - [ ] Pratica la combinazione di più condizioni con operatori logici - [ ] Sperimenta con le istruzioni switch per diversi casi d'uso ### 📅 La tua padronanza della logica in una settimana - [ ] Completa il compito sugli operatori con esempi creativi - [ ] Crea un'applicazione di mini quiz utilizzando varie strutture condizionali - [ ] Crea un validatore di moduli che controlla più condizioni di input - [ ] Pratica gli esercizi di operator lookup di Josh Comeau - [ ] Rifattorizza il codice esistente per utilizzare strutture condizionali più appropriate - [ ] Studia la valutazione a corto circuito e le implicazioni sulle prestazioni ### 🌟 La tua trasformazione in un mese - [ ] Padroneggia condizioni nidificate complesse mantenendo la leggibilità del codice - [ ] Crea un'applicazione con logica decisionale sofisticata - [ ] Contribuisci al codice open source migliorando la logica condizionale in progetti esistenti - [ ] Insegna a qualcun altro le diverse strutture condizionali e quando usarle - [ ] Esplora approcci di programmazione funzionale alla logica condizionale - [ ] Crea una guida di riferimento personale per le migliori pratiche condizionali ### 🏆 Check-in finale per il campione del processo decisionale Celebra la tua padronanza del pensiero logico: - Qual è la logica decisionale più complessa che hai implementato con successo? - Quale struttura condizionale ti sembra più naturale e perché? - In che modo imparare sugli operatori logici ha cambiato il tuo approccio alla risoluzione dei problemi? - Quale applicazione reale trarrebbe beneficio da una logica decisionale sofisticata? --- Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche potrebbero contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.

javascript

Fondamenti di JavaScript: Array e Cicli

## Quiz Pre-Lettura Quiz pre-lettura Ti sei mai chiesto come i siti web tengano traccia degli articoli nel carrello o mostrino la lista dei tuoi amici? Ecco dove entrano in gioco gli array e i cicli. Gli array sono come contenitori digitali che conservano più informazioni, mentre i cicli ti permettono di lavorare con tutti quei dati in modo efficiente senza dover scrivere codice ripetitivo. Insieme, questi due concetti formano la base per gestire le informazioni nei tuoi programmi. Imparerai a passare dal scrivere manualmente ogni singolo passaggio al creare codice intelligente ed efficiente che può elaborare centinaia o persino migliaia di elementi rapidamente. Alla fine di questa lezione, capirai come svolgere compiti complessi sui dati con poche righe di codice. Esploriamo questi concetti essenziali di programmazione. [](https://youtube.com/watch?v=1U4qTyq02Xw "Array") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Cicli") ## Array Pensa agli array come a un archivio digitale: invece di conservare un documento per cassetto, puoi organizzare più elementi correlati in un unico contenitore strutturato. In termini di programmazione, gli array ti permettono di conservare più informazioni in un unico pacchetto organizzato. Che tu stia costruendo una galleria fotografica, gestendo una lista di cose da fare o tenendo traccia dei punteggi più alti in un gioco, gli array forniscono la base per l'organizzazione dei dati. Vediamo come funzionano. ✅ Gli array sono ovunque! Riesci a pensare a un esempio reale di un array, come un pannello solare? ### Creare Array Creare un array è molto semplice: basta usare le parentesi quadre! Cosa sta succedendo qui? Hai appena creato un contenitore vuoto usando quelle parentesi quadre []. Pensalo come uno scaffale vuoto in una biblioteca: è pronto a contenere qualsiasi libro tu voglia organizzare lì. Puoi anche riempire il tuo array con valori iniziali fin dall'inizio: Cose interessanti da notare: - Puoi conservare testo, numeri o persino valori vero/falso nello stesso array - Basta separare ogni elemento con una virgola - facile! - Gli array sono perfetti per mantenere insieme informazioni correlate ### Indicizzazione degli Array Ecco qualcosa che potrebbe sembrare insolito all'inizio: gli array numerano i loro elementi a partire da 0, non da 1. Questa indicizzazione basata su zero ha le sue radici nel funzionamento della memoria del computer - è una convenzione di programmazione dai primi giorni dei linguaggi di programmazione come C. Ogni posizione nell'array ottiene un proprio numero di indirizzo chiamato indice. ✅ Ti sorprende che gli array inizino dall'indice zero? In alcuni linguaggi di programmazione, gli indici iniziano da 1. C'è una storia interessante su questo, che puoi leggere su Wikipedia. Accesso agli Elementi dell'Array: Analisi di ciò che accade qui: - Usa la notazione con parentesi quadre e il numero dell'indice per accedere agli elementi - Restituisce il valore conservato in quella posizione specifica dell'array - Inizia a contare da 0, rendendo il primo elemento l'indice 0 Modifica degli Elementi dell'Array: In quanto sopra, abbiamo: - Modificato l'elemento all'indice 4 da "Rocky Road" a "Butter Pecan" - Aggiunto un nuovo elemento "Cookie Dough" all'indice 5 - Espanso automaticamente la lunghezza dell'array aggiungendo oltre i limiti attuali ### Lunghezza dell'Array e Metodi Comuni Gli array hanno proprietà e metodi integrati che rendono il lavoro con i dati molto più semplice. Trovare la Lunghezza dell'Array: Punti chiave da ricordare: - Restituisce il numero totale di elementi nell'array - Si aggiorna automaticamente quando gli elementi vengono aggiunti o rimossi - Fornisce un conteggio dinamico utile per i cicli e la validazione Metodi Essenziali degli Array: Comprendere questi metodi: - Aggiunge elementi con push() (fine) e unshift() (inizio) - Rimuove elementi con pop() (fine) e shift() (inizio) - Trova elementi con indexOf() e verifica l'esistenza con includes() - Restituisce valori utili come elementi rimossi o indici di posizione ✅ Prova tu stesso! Usa la console del tuo browser per creare e manipolare un array di tua creazione. ### 🧠 Verifica Fondamenti degli Array: Organizzare i Tuoi Dati Metti alla prova la tua comprensione degli array: - Perché pensi che gli array inizino a contare da 0 invece che da 1? - Cosa succede se provi ad accedere a un indice che non esiste (come arr[100] in un array di 5 elementi)? - Riesci a pensare a tre scenari reali in cui gli array sarebbero utili? ## Cicli Pensa alla famosa punizione nei romanzi di Charles Dickens, dove gli studenti dovevano scrivere ripetutamente frasi su una lavagna. Immagina se potessi semplicemente dire a qualcuno "scrivi questa frase 100 volte" e farlo automaticamente. È esattamente ciò che i cicli fanno per il tuo codice. I cicli sono come avere un assistente instancabile che può ripetere compiti senza errori. Che tu debba controllare ogni articolo in un carrello della spesa o mostrare tutte le foto in un album, i cicli gestiscono la ripetizione in modo efficiente. JavaScript offre diversi tipi di cicli tra cui scegliere. Esaminiamoli e capiamo quando usarli. ### Ciclo For Il ciclo for è come impostare un timer - sai esattamente quante volte vuoi che qualcosa accada. È super organizzato e prevedibile, il che lo rende perfetto quando lavori con gli array o devi contare qualcosa. Struttura del Ciclo For: Passo dopo passo, ecco cosa succede: - Inizializza la variabile contatore i a 0 all'inizio - Controlla la condizione i < 10 prima di ogni iterazione - Esegue il blocco di codice quando la condizione è vera - Incrementa i di 1 dopo ogni iterazione con i++ - Si ferma quando la condizione diventa falsa (quando i raggiunge 10) ✅ Esegui questo codice nella console del browser. Cosa succede quando apporti piccole modifiche al contatore, alla condizione o all'espressione di iterazione? Riesci a farlo funzionare al contrario, creando un conto alla rovescia? ### 🗓️ Verifica Padronanza del Ciclo For: Ripetizione Controllata Valuta la tua comprensione del ciclo for: - Quali sono le tre parti di un ciclo for e cosa fa ciascuna? - Come faresti a scorrere un array al contrario? - Cosa succede se dimentichi la parte di incremento (i++)? ### Ciclo While Il ciclo while è come dire "continua a fare questo finché..." - potresti non sapere esattamente quante volte verrà eseguito, ma sai quando fermarti. È perfetto per cose come chiedere un input all'utente finché non ti dà ciò di cui hai bisogno, o cercare tra i dati finché non trovi ciò che stai cercando. Caratteristiche del Ciclo While: - Continua a eseguire finché la condizione è vera - Richiede la gestione manuale di eventuali variabili contatore - Controlla la condizione prima di ogni iterazione - Rischia cicli infiniti se la condizione non diventa mai falsa Comprendere questi esempi: - Gestisce la variabile contatore i manualmente all'interno del corpo del ciclo - Incrementa il contatore per prevenire cicli infiniti - Dimostra un caso pratico con input dell'utente e limitazione dei tentativi - Include meccanismi di sicurezza per prevenire esecuzioni infinite ### ♾️ Verifica Saggezza del Ciclo While: Ripetizione Basata su Condizioni Metti alla prova la tua comprensione del ciclo while: - Qual è il principale rischio nell'usare i cicli while? - Quando sceglieresti un ciclo while rispetto a un ciclo for? - Come puoi prevenire i cicli infiniti? ### Alternative Moderne ai Cicli JavaScript offre una sintassi moderna per i cicli che può rendere il tuo codice più leggibile e meno soggetto a errori. Ciclo For...of (ES6+): Vantaggi principali del for...of: - Elimina la gestione degli indici e i potenziali errori di conteggio - Fornisce accesso diretto agli elementi dell'array - Migliora la leggibilità del codice e riduce la complessità della sintassi Metodo forEach: Cosa devi sapere sul forEach: - Esegue una funzione per ogni elemento dell'array - Fornisce sia il valore dell'elemento che l'indice come parametri - Non può essere interrotto anticipatamente (a differenza dei cicli tradizionali) - Restituisce undefined (non crea un nuovo array) ✅ Perché sceglieresti un ciclo for rispetto a un ciclo while? 17.000 utenti hanno avuto la stessa domanda su StackOverflow, e alcune delle opinioni potrebbero interessarti. ### 🎨 Verifica Sintassi Moderna dei Cicli: Abbracciare ES6+ Valuta la tua comprensione del JavaScript moderno: - Quali sono i vantaggi di for...of rispetto ai cicli for tradizionali? - Quando potresti preferire ancora i cicli for tradizionali? - Qual è la differenza tra forEach e map? ## Cicli e Array Combinare array con cicli crea potenti capacità di elaborazione dei dati. Questa combinazione è fondamentale per molti compiti di programmazione, dal mostrare liste al calcolare statistiche. Elaborazione Tradizionale degli Array: Capire ogni approccio: - Usa la proprietà di lunghezza dell'array per determinare il limite del ciclo - Accede agli elementi tramite l'indice nei cicli for tradizionali - Fornisce accesso diretto agli elementi nei cicli for...of - Elabora ogni elemento dell'array esattamente una volta Esempio Pratico di Elaborazione dei Dati: Ecco come funziona questo codice: - Inizializza variabili di tracciamento per somma ed estremi - Elabora ogni voto con un unico ciclo efficiente - Accumula il totale per il calcolo della media - Traccia i valori più alti e più bassi durante l'iterazione - Calcola le statistiche finali dopo il completamento del ciclo ✅ Prova a iterare su un array di tua creazione nella console del browser. --- ## Sfida GitHub Copilot Agent 🚀 Usa la modalità Agent per completare la seguente sfida: Descrizione: Crea una funzione completa di elaborazione dei dati che combini array e cicli per analizzare un dataset e generare informazioni significative. Prompt: Crea una funzione chiamata analyzeGrades che prenda un array di oggetti contenenti i voti degli studenti (ognuno con proprietà nome e punteggio) e restituisca un oggetto con statistiche che includano il punteggio più alto, il punteggio più basso, il punteggio medio, il conteggio degli studenti che hanno superato (punteggio >= 70) e un array di nomi degli studenti che hanno ottenuto un punteggio superiore alla media. Usa almeno due tipi di cicli diversi nella tua soluzione. Scopri di più sulla modalità agent qui. ## 🚀 Sfida JavaScript offre diversi metodi moderni per gli array che possono sostituire i cicli tradizionali per compiti specifici. Esplora forEach, for-of, map, filter e reduce. La tua sfida: Refattorizza l'esempio dei voti degli studenti utilizzando almeno tre metodi diversi per gli array. Nota quanto il codice diventa più pulito e leggibile con la sintassi moderna di JavaScript. ## Quiz post-lezione Quiz post-lezione ## Revisione e studio autonomo Gli array in JavaScript hanno molti metodi associati che sono estremamente utili per la manipolazione dei dati. Leggi di più su questi metodi e prova alcuni di essi (come push, pop, slice e splice) su un array creato da te. ## Compito Iterare un array --- ## 📊 Riepilogo del tuo toolkit per array e cicli --- ## 🚀 Cronologia di padronanza di array e cicli ### ⚡ Cosa puoi fare nei prossimi 5 minuti - [ ] Crea un array dei tuoi film preferiti e accedi a elementi specifici - [ ] Scrivi un ciclo for che conta da 1 a 10 - [ ] Prova la sfida sui metodi moderni per gli array dalla lezione - [ ] Esercitati con l'indicizzazione degli array nella console del browser ### 🎯 Cosa puoi realizzare in quest'ora - [ ] Completa il quiz post-lezione e rivedi i concetti difficili - [ ] Crea un analizzatore completo di voti dal GitHub Copilot challenge - [ ] Crea un semplice carrello della spesa che aggiunge e rimuove articoli - [ ] Esercitati a convertire tra diversi tipi di cicli - [ ] Sperimenta con metodi per gli array come push, pop, slice e splice ### 📅 Il tuo viaggio settimanale nella gestione dei dati - [ ] Completa il compito "Iterare un array" con miglioramenti creativi - [ ] Crea un'applicazione per la lista delle cose da fare utilizzando array e cicli - [ ] Crea un semplice calcolatore di statistiche per dati numerici - [ ] Esercitati con i metodi degli array su MDN - [ ] Crea un'interfaccia per una galleria fotografica o una playlist musicale - [ ] Esplora la programmazione funzionale con map, filter e reduce ### 🌟 La tua trasformazione mensile - [ ] Padroneggia operazioni avanzate sugli array e ottimizzazione delle prestazioni - [ ] Crea un dashboard completo per la visualizzazione dei dati - [ ] Contribuisci a progetti open source che coinvolgono la gestione dei dati - [ ] Insegna a qualcun altro gli array e i cicli con esempi pratici - [ ] Crea una libreria personale di funzioni riutilizzabili per la gestione dei dati - [ ] Esplora algoritmi e strutture dati basati sugli array ### 🏆 Check-in finale per il campione della gestione dei dati Celebra la tua padronanza di array e cicli: - Qual è l'operazione sugli array più utile che hai imparato per applicazioni reali? - Quale tipo di ciclo ti sembra più naturale e perché? - Come ha cambiato la comprensione di array e cicli il tuo approccio all'organizzazione dei dati? - Quale compito complesso di gestione dei dati vorresti affrontare in seguito? --- Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.

javascript,array

JavaScript入門

JavaScriptはウェブの言語です。この4つのレッスンで、その基本を学びます。 ### トピック 1. 変数とデータ型 2. 関数とメソッド 3. JavaScriptでの意思決定 4. 配列とループ ### クレジット これらのレッスンは、Jasmine Greenaway、Christopher Harrison、Chris Noring の3人によって♥️を込めて書かれました。 免責事項: この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。

javascript

JavaScriptの基本: データ型

データ型は、JavaScriptの基本概念の一つであり、どんなプログラムを書いても必ず遭遇するものです。データ型を、古代アレクサンドリアの図書館員が詩、数学、歴史の記録を分類していたファイリングシステムのようなものだと考えてみてください。JavaScriptも情報を異なる種類のデータに応じて整理します。 このレッスンでは、JavaScriptを動かすための主要なデータ型について学びます。数値、テキスト、真偽値の扱い方を学び、正しい型を選ぶことがプログラムにとってなぜ重要なのかを理解します。これらの概念は最初は抽象的に感じるかもしれませんが、練習を重ねることで自然に身につくようになります。 データ型を理解することで、JavaScriptの他の部分がより明確になります。建築家が大聖堂を建てる前に異なる建材を理解する必要があるように、これらの基本は今後あなたが構築するすべてを支えるものとなります。 ## レクチャー前のクイズ レクチャー前のクイズ このレッスンでは、ウェブ上でインタラクティブ性を提供する言語であるJavaScriptの基本を扱います。 [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScriptの変数") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScriptのデータ型") では、変数とそれを構成するデータ型について始めましょう! ## 変数 変数はプログラミングの基本的な構成要素です。中世の錬金術師が異なる物質を保存するためにラベル付きの瓶を使ったように、変数は情報を保存し、それに説明的な名前を付けて後で参照できるようにします。誰かの年齢を覚えておく必要がありますか?それをageという変数に保存しましょう。ユーザーの名前を追跡したいですか?それをuserNameという変数に保存してください。 ここでは、JavaScriptで変数を作成する最新の方法に焦点を当てます。ここで学ぶ技術は、言語の進化とプログラミングコミュニティによって開発されたベストプラクティスを反映しています。 変数を宣言するには、次の構文を使用します [キーワード] [名前]。これは以下の2つの部分で構成されています: - キーワード: 変更可能な変数にはletを使用し、変更されない値にはconstを使用します。 - 変数名: これは自分で選ぶ説明的な名前です。 ✅ ES6で導入されたキーワードletは、変数にいわゆる_ブロックスコープ_を与えます。letやconstを使用することが推奨されており、古いvarキーワードの代わりに使います。ブロックスコープについては、今後のレッスンで詳しく説明します。 ### タスク - 変数を扱う 1. 変数を宣言する: まず最初の変数を作成してみましょう: ```javascript let myVariable; ``` これが達成すること: - JavaScriptにmyVariableという名前の保存場所を作成するよう指示します - JavaScriptがこの変数のためにメモリ空間を割り当てます - 現時点では変数に値が設定されていません(undefined) 2. 値を与える: 次に、変数に何かを入れてみましょう: ```javascript myVariable = 123; ``` 代入の仕組み: - =演算子が値123を変数に代入します - 変数は現在この値を保持しており、undefinedではなくなります - コード全体でmyVariableを使用してこの値を参照できます > 注: このレッスンでの=の使用は、変数に値を設定するための「代入演算子」を意味します。これは等号を意味するものではありません。 3. 賢いやり方をする: 実際には、これら2つのステップを組み合わせましょう: ```javascript let myVariable = 123; ``` この方法はより効率的です: - 変数を宣言し、値を1つのステートメントで代入します - これは開発者の間で標準的な方法です - コードの長さを短縮しつつ、明確さを維持します 4. 気が変わった場合: 別の数字を保存したい場合はどうしますか? ```javascript myVariable = 321; ``` 再代入の理解: - 変数は現在321を保持しており、以前の123は置き換えられます - 変数は一度に1つの値しか保持できません - これはletで宣言された変数の重要な特徴です ✅ 試してみましょう!ブラウザでJavaScriptを直接書くことができます。ブラウザウィンドウを開き、開発者ツールに移動してください。コンソールでプロンプトが表示されます。let myVariable = 123と入力してリターンキーを押し、その後myVariableと入力してください。何が起こりますか?これらの概念については、次のレッスンでさらに学びます。 ### 🧠 変数の習得チェック: 慣れるために 変数についての理解を確認しましょう: - 変数を宣言することと代入することの違いを説明できますか? - 宣言する前に変数を使用しようとするとどうなりますか? - 変数にletを選ぶべき場合とconstを選ぶべき場合はいつですか? ## 定数 プログラムの実行中に決して変更されるべきでない情報を保存する必要がある場合があります。定数は、古代ギリシャのユークリッドが確立した数学的原則のようなものです。一度証明され文書化されると、将来のすべての参照において固定されたままです。 定数は変数と似ていますが、重要な制限があります。一度値を代入すると、それを変更することはできません。この不変性は、プログラム内の重要な値を偶発的な変更から防ぐのに役立ちます。 定数の宣言と初期化は、変数と同じ概念に従いますが、constキーワードを使用する点が異なります。定数は通常、すべて大文字で宣言されます。 このコードが行うこと: - 定数MY_VARIABLEを値123で作成します - 大文字の命名規則を定数に使用します - 将来の変更を防止します 定数には2つの主なルールがあります: - すぐに値を与える必要があります – 空の定数は許可されません! - その値を変更することはできません – 再代入を試みるとJavaScriptはエラーを投げます。以下の例を見てみましょう: 単純な値 - 以下は許可されません: ```javascript const PI = 3; PI = 4; // 許可されません ``` 覚えておくべきこと: - 再代入の試みはエラーを引き起こします - 重要な値を保護します - プログラム全体で値の一貫性を確保します オブジェクト参照が保護される - 以下は許可されません: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 許可されません ``` これらの概念の理解: - オブジェクト全体を新しいものに置き換えることを防止します - 元のオブジェクトへの参照を保護します - メモリ内でオブジェクトのアイデンティティを維持します オブジェクトの値は保護されない - 以下は許可されます: ```javascript const obj = { a: 3 }; obj.a = 5; // 許可されます ``` ここで何が起こるかを分解すると: - オブジェクト内のプロパティ値を変更します - 同じオブジェクト参照を保持します - オブジェクトの内容が変更可能であることを示しますが、参照は一定です > 注: constは参照が再代入から保護されることを意味します。ただし、値自体は_不変_ではなく、特にオブジェクトのような複雑な構造の場合は変更可能です。 ## データ型 JavaScriptは情報を異なるカテゴリに分類し、これをデータ型と呼びます。この概念は、古代の学者が知識を分類した方法を反映しています。アリストテレスは異なる種類の推論を区別し、論理的原則が詩、数学、自然哲学に均一に適用できないことを理解していました。 データ型が重要なのは、異なる操作が異なる種類の情報で機能するためです。人の名前で算術を行ったり、数学的な方程式をアルファベット順に並べたりすることはできないように、JavaScriptは各操作に適切なデータ型を必要とします。これを理解することでエラーを防ぎ、コードをより信頼性の高いものにします。 変数は、数値やテキストなど、さまざまな種類の値を保存できます。これらのさまざまな種類の値はデータ型として知られています。データ型はソフトウェア開発の重要な部分であり、コードの書き方やソフトウェアの動作方法について開発者が決定するのに役立ちます。さらに、一部のデータ型には、値の変換や追加情報の抽出を助ける独自の機能があります。 ✅ データ型はJavaScriptのデータプリミティブとも呼ばれ、言語によって提供される最も低レベルのデータ型です。プリミティブデータ型は7種類あります:string、number、bigint、boolean、undefined、null、symbol。これらのプリミティブがそれぞれ何を表しているかをイメージしてみてください。zebraとは何でしょう?0はどうでしょう?trueは? ### 数値 数値はJavaScriptで最も単純なデータ型です。42のような整数、3.14のような小数、-5のような負の数など、JavaScriptはそれらを一様に扱います。 先ほどの変数を覚えていますか?保存した123は実際には数値データ型でした: 主な特徴: - JavaScriptは数値を自動的に認識します - これらの変数を使って数学的な操作を行うことができます - 明示的な型宣言は必要ありません 変数は小数や負の数を含むすべての種類の数値を保存できます。数値はまた、次のセクションで説明する算術演算子とともに使用できます。 ### 算術演算子 算術演算子を使用すると、JavaScriptで数学的な計算を行うことができます。これらの演算子は、何世紀にもわたって数学者が使用してきた原則に従います。代数記法を開発した学者アル・フワーリズミのような学者の作品に登場する記号と同じです。 演算子は伝統的な数学から期待されるように機能します:加算にはプラス、減算にはマイナスなどです。 算術関数を実行する際に使用できる演算子にはいくつかの種類があり、以下にいくつかを示します: ✅ 試してみましょう!ブラウザのコンソールで算術演算を試してみてください。結果に驚きますか? ### 🧮 数学スキルチェック: 自信を持って計算する 算術の理解をテストしましょう: - /(除算)と%(余り)の違いは何ですか? - 10 % 3が何になるか予測できますか?(ヒント: 3.33ではありません...) - プログラミングで余り演算子が役立つのはなぜですか? ### 文字列 JavaScriptでは、テキストデータは文字列として表されます。「文字列」という用語は、文字が順番に連結されている概念から来ています。これは、中世の修道院の書記が文字をつなげて単語や文章を作成した方法に似ています。 文字列はウェブ開発において基本的なものです。ウェブサイトに表示されるすべてのテキスト – ユーザー名、ボタンラベル、エラーメッセージ、コンテンツ – は文字列データとして扱われます。文字列を理解することは、機能的なユーザーインターフェースを作成するために不可欠です。 文字列は、シングルクォートまたはダブルクォートで囲まれた文字のセットです。 これらの概念の理解: - シングルクォート'またはダブルクォート"を使用して文字列を定義します - テキストデータを保存し、文字、数字、記号を含むことができます - 変数に文字列値を代入して後で使用します - テキストと変数名を区別するためにクォートが必要です 文字列を書くときはクォートを使用することを忘れないでください。そうしないと、JavaScriptはそれを変数名だと仮定します。 ### 文字列を結合する、つまり複数の文字列をつなげるには、+ 演算子を使用します。 ステップごとの説明: - + 演算子を使って複数の文字列を結合 - 最初の例ではスペースなしで文字列を直接連結 - 読みやすさのために文字列間にスペース " " を追加 - 適切なフォーマットを作るために句読点(例: カンマ)を挿入 ✅ なぜ JavaScript では 1 + 1 = 2 なのに '1' + '1' = 11 になるのでしょう?考えてみてください。では '1' + 1 はどうなるでしょう? テンプレートリテラルは文字列をフォーマットするもう一つの方法で、引用符の代わりにバックティックを使用します。プレーンテキスト以外のものは ${ } のプレースホルダー内に記述する必要があります。これには文字列である可能性のある変数も含まれます。 各部分を理解しましょう: - テンプレートリテラルを作成するために通常の引用符の代わりにバックティック ` `` を使用 - ${} プレースホルダー構文を使って変数を直接埋め込み - 書かれた通りにスペースやフォーマットを保持 - 変数を使った複雑な文字列を作成するためのより簡潔な方法を提供 どちらの方法でもフォーマットの目的を達成できますが、テンプレートリテラルはスペースや改行をそのまま尊重します。 ✅ テンプレートリテラルと通常の文字列、どちらを使うべきか? ### 🔤 文字列マスターチェック: テキスト操作の自信 文字列スキルを評価しましょう: - なぜ '1' + '1' が 2 ではなく '11' になるのか説明できますか? - 結合とテンプレートリテラル、どちらが読みやすいと思いますか? - 文字列の引用符を忘れるとどうなるでしょう? ### ブール値 ブール値は最もシンプルなデータ形式を表します。それは true または false のどちらか一方の値しか持てません。この二進論理システムは、19世紀の数学者ジョージ・ブールが開発したブール代数に由来します。 そのシンプルさにもかかわらず、ブール値はプログラムロジックにおいて重要です。条件に基づいてコードが決定を下すことを可能にします。例えば、ユーザーがログインしているか、ボタンがクリックされたか、特定の条件が満たされているかなどです。 ブール値は true または false の2つの値しか持てません。ブール値は特定の条件が満たされた場合にどのコード行を実行するかを決定するのに役立ちます。多くの場合、演算子がブール値の設定を助け、変数が初期化されたり、演算子を使って値が更新される様子をよく目にするでしょう。 上記では以下を行いました: - ブール値 true を格納する変数を作成 - ブール値 false を格納する方法を示す - 正確なキーワード true と false を使用(引用符は不要) - 条件文で使用するためにこれらの変数を準備 ✅ 変数はブール値 true に評価される場合「truthy」と見なされます。興味深いことに、JavaScriptでは明示的に「falsy」と定義されない限り、すべての値は「truthy」です。 ### 🎯 ブールロジックチェック: 意思決定スキル ブール値の理解をテストしましょう: - なぜ JavaScript には true や false 以外に「truthy」と「falsy」の値があると思いますか? - 次のうちどれが「falsy」だと思いますか: 0, "0", [], "false"? - ブール値はプログラムの流れを制御するのにどのように役立つでしょうか? --- ## 📊 データ型ツールキットのまとめ ## GitHub Copilot Agent チャレンジ 🚀 Agent モードを使用して以下のチャレンジを完了してください: 説明: このレッスンで学んだすべての JavaScript データ型を使用し、実際のデータシナリオを処理する個人情報管理プログラムを作成してください。 プロンプト: ユーザープロファイルオブジェクトを作成する JavaScript プログラムを構築してください。このオブジェクトには、名前(文字列)、年齢(数値)、学生ステータス(ブール値)、お気に入りの色(配列)、住所オブジェクト(通り、都市、郵便番号のプロパティ)を含めます。プロファイル情報を表示し、個々のフィールドを更新する関数を含めてください。文字列結合、テンプレートリテラル、年齢の算術演算、学生ステータスのブールロジックを必ず示してください。 Agent モードについてさらに学ぶ。 ## 🚀 チャレンジ JavaScript には開発者を驚かせるような挙動があります。以下の例をブラウザコンソールで試してみてください: let age = 1; let Age = 2; age == Age。結果は false になります。なぜそうなるのか考えてみてください。 これは理解しておくべき JavaScript の挙動の一例です。これらの癖に慣れることで、より信頼性の高いコードを書き、問題を効果的にデバッグできるようになります。 ## 講義後のクイズ 講義後のクイズ ## 復習と自己学習 JavaScript 演習のリストを見て、1つ試してみてください。何を学びましたか? ## 課題 データ型練習 ## 🚀 JavaScript データ型マスタリータイムライン ### ⚡ 次の5分間でできること - [ ] ブラウザコンソールを開き、異なるデータ型を持つ3つの変数を作成 - [ ] チャレンジを試す: let age = 1; let Age = 2; age == Age なぜ false になるのか考える - [ ] 自分の名前と好きな数字を使って文字列結合を練習 - [ ] 数字を文字列に追加するとどうなるかテスト ### 🎯 この1時間で達成できること - [ ] 講義後のクイズを完了し、わからない概念を復習 - [ ] 2つの数字を加算、減算、乗算、除算するミニ計算機を作成 - [ ] テンプレートリテラルを使った簡単な名前フォーマッターを作成 - [ ] == と === の比較演算子の違いを探る - [ ] 異なるデータ型間の変換を練習 ### 📅 1週間の JavaScript 基礎学習 - [ ] 自信と創造性を持って課題を完了 - [ ] 学んだすべてのデータ型を使用して個人プロファイルオブジェクトを作成 - [ ] CSS-Tricks の JavaScript 演習を練習 - [ ] ブールロジックを使った簡単なフォームバリデーターを作成 - [ ] 配列とオブジェクトデータ型を試す(次のレッスンのプレビュー) - [ ] JavaScript コミュニティに参加し、データ型について質問 ### 🌟 1か月間の変革 - [ ] データ型の知識をより大きなプログラミングプロジェクトに統合 - [ ] 実際のアプリケーションで各データ型を使用する理由とタイミングを理解 - [ ] 他の初心者が JavaScript の基礎を理解するのを助ける - [ ] 異なる種類のユーザーデータを管理する小さなアプリケーションを構築 - [ ] 型強制や厳密な等価性などの高度なデータ型概念を探る - [ ] オープンソースの JavaScript プロジェクトにドキュメント改善で貢献 ### 🧠 最終データ型マスタリーチェックイン JavaScript の基礎を祝おう: - 挙動が最も驚いたデータ型はどれですか? - 変数と定数の違いを友達に説明する自信はありますか? - JavaScript の型システムについて最も興味深いと感じたことは何ですか? - これらの基礎を使ってどんな実際のアプリケーションを構築できると思いますか? --- 免責事項: この文書はAI翻訳サービスCo-op Translatorを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。

javascript

JavaScriptの基本: メソッドと関数

## 講義前のクイズ 講義前のクイズ 同じコードを何度も書くことは、プログラミングで最もよくあるイライラの原因の一つです。関数はコードを再利用可能なブロックにまとめることで、この問題を解決します。関数を、ヘンリー・フォードの組立ラインを革命的にした標準化された部品のように考えてみてください。一度信頼できるコンポーネントを作成すれば、必要な場所で再構築することなく使用できます。 関数を使うことで、コードをまとめてプログラム全体で再利用することができます。同じロジックをあちこちにコピー&ペーストする代わりに、一度関数を作成して必要なときに呼び出すことができます。この方法はコードを整理し、更新をはるかに簡単にします。 このレッスンでは、自分の関数を作成し、情報を渡し、有用な結果を得る方法を学びます。関数とメソッドの違い、モダンな構文のアプローチ、関数が他の関数とどのように連携するかを学びます。これらの概念を段階的に構築していきます。 [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## 関数 関数は、特定のタスクを実行する自己完結型のコードブロックです。必要なときに実行できるロジックをカプセル化します。 プログラム全体で同じコードを何度も書く代わりに、関数にまとめて必要なときに呼び出すことができます。この方法はコードをきれいに保ち、更新をはるかに簡単にします。コードベースの20箇所に散らばったロジックを変更する必要がある場合の保守の課題を考えてみてください。 関数にわかりやすい名前を付けることが重要です。適切に名前付けされた関数はその目的を明確に伝えます。例えば、cancelTimer()という名前を見れば、何をする関数なのかすぐに理解できます。これは、明確にラベル付けされたボタンがクリックしたときに何が起こるかを教えてくれるのと同じです。 ## 関数の作成と呼び出し 関数の作成方法を見てみましょう。構文は一貫したパターンに従います。 これを分解してみましょう: - functionキーワードはJavaScriptに「これから関数を作るよ!」と伝えます。 - nameOfFunctionは関数に説明的な名前を付ける場所です。 - 丸括弧()はパラメータを追加できる場所です(後で説明します)。 - 波括弧{}は関数を呼び出したときに実行される実際のコードを含みます。 簡単な挨拶関数を作成して、これを実際に見てみましょう: この関数はコンソールに「Hello, world!」を表示します。一度定義すれば、必要なだけ何度でも使用できます。 関数を実行(または「呼び出し」)するには、関数名の後に丸括弧を付けます。JavaScriptでは、関数を呼び出す前でも後でも定義できます。JavaScriptエンジンが実行順序を処理します。 この行を実行すると、displayGreeting関数内のすべてのコードが実行され、ブラウザのコンソールに「Hello, world!」が表示されます。この関数は何度でも呼び出すことができます。 ### 🧠 関数の基本チェック: 初めての関数を作成する 基本的な関数についての理解を確認してみましょう: - 関数定義で波括弧{}を使用する理由を説明できますか? - 丸括弧なしでdisplayGreetingを書いた場合、何が起こりますか? - 同じ関数を複数回呼び出したい理由は何ですか? ### 関数のベストプラクティス 優れた関数を書くためのいくつかのヒントを紹介します: - 関数に明確で説明的な名前を付けましょう。将来の自分が感謝します! - 複数の単語を含む名前にはキャメルケースを使用しましょう(例: calculateTotal、calculate_totalではなく) - 各関数を一つのことに集中させましょう ## 関数に情報を渡す displayGreeting関数は制限があります。すべての人に「Hello, world!」しか表示できません。パラメータを使用すると、関数をより柔軟で便利にすることができます。 パラメータは、関数を呼び出すたびに異なる値を挿入できるプレースホルダーのようなものです。この方法で、同じ関数が呼び出しごとに異なる情報で動作できます。 関数を定義する際に、丸括弧内にパラメータをリストします。複数のパラメータはコンマで区切ります: 各パラメータはプレースホルダーのように機能します。関数を呼び出す際に、実際の値を提供してこれらの場所に挿入します。 挨拶関数を更新して、名前を受け取れるようにしてみましょう: 名前をメッセージに直接挿入するために、バックティック(` `)と${}`を使用していることに注目してください。これはテンプレートリテラルと呼ばれ、変数を混ぜた文字列を作成する非常に便利な方法です。 関数を呼び出す際に、任意の名前を渡すことができます: JavaScriptは文字列'Christopher'を受け取り、それをnameパラメータに割り当て、パーソナライズされたメッセージ「Hello, Christopher!」を作成します。 ## デフォルト値 一部のパラメータをオプションにしたい場合はどうしますか?その場合、デフォルト値が役立ちます! 例えば、挨拶の言葉をカスタマイズできるようにしたいけれど、指定がない場合は「Hello」を使いたいとします。デフォルト値は、変数を設定するのと同じようにイコール記号を使用して設定できます: ここでは、nameは必須ですが、salutationには誰も別の挨拶を指定しない場合のバックアップ値として'Hello'があります。 この関数を2つの異なる方法で呼び出すことができます: 最初の呼び出しでは、挨拶が指定されていないため、JavaScriptはデフォルトの「Hello」を使用します。2回目の呼び出しでは、カスタムの「Hi」を使用します。この柔軟性により、関数はさまざまなシナリオに適応できます。 ### 🎛️ パラメータの理解チェック: 関数を柔軟にする パラメータの理解をテストしてみましょう: - パラメータと引数の違いは何ですか? - デフォルト値が実際のプログラミングで役立つ理由は何ですか? - パラメータより多くの引数を渡した場合、何が起こるか予測できますか? ## 戻り値 これまでの関数はコンソールにメッセージを表示するだけでしたが、計算を行い結果を返したい場合はどうしますか? その場合、戻り値が役立ちます。関数は何かを表示する代わりに、結果を返して変数に保存したり、コードの他の部分で使用したりできます。 値を返すには、returnキーワードを使用し、その後に返したいものを記述します: 重要な点は、関数がreturn文に到達すると、直ちに実行を停止し、その値を呼び出し元に返すことです。 挨拶関数を修正して、メッセージを表示する代わりに返すようにしてみましょう: この関数は挨拶を表示する代わりに、メッセージを作成して返します。 返された値を使用するには、他の値と同じように変数に保存できます: これでgreetingMessageには「Hello, Christopher」が含まれ、コードのどこでも使用できます。例えば、ウェブページに表示したり、メールに含めたり、別の関数に渡したりすることができます。 ### 🔄 戻り値チェック: 結果を得る 戻り値の理解を評価してみましょう: - 関数内のreturn文の後のコードはどうなりますか? - コンソールに表示するだけでなく、値を返す方が良い理由は何ですか? - 関数は異なる型の値(文字列、数値、ブール値など)を返すことができますか? ## 関数を関数のパラメータとして渡す 関数は他の関数のパラメータとして渡すことができます。この概念は最初は複雑に感じるかもしれませんが、柔軟なプログラミングパターンを可能にする強力な機能です。 このパターンは、「何かが起こったら、このコードを実行する」という状況で非常に一般的です。例えば、「タイマーが終了したら、このコードを実行する」や「ユーザーがボタンをクリックしたら、この関数を呼び出す」といった場合です。 組み込み関数setTimeoutを見てみましょう。この関数は一定時間待機してからコードを実行します。どのコードを実行するかを指定する必要があります。関数を渡すのにぴったりのケースです! このコードを試してみてください。3秒後にメッセージが表示されます: setTimeoutにdisplayDone(丸括弧なし)を渡していることに注目してください。自分で関数を呼び出しているわけではなく、setTimeoutに渡して「3秒後にこれを呼び出して」と指示しています。 ### 無名関数 特定の用途のためだけに関数が必要で、名前を付けたくない場合があります。考えてみてください。一度しか使わない関数に余計な名前を付けてコードを煩雑にする必要はありません。 JavaScriptでは無名関数を作成できます。名前のない関数を必要な場所で直接定義できます。 タイマーの例を無名関数を使って書き直してみましょう: これで同じ結果が得られますが、関数はsetTimeout呼び出し内で直接定義され、別の関数宣言が不要になります。 ### アロー関数 モダンなJavaScriptでは、さらに短い方法で関数を書くことができます。それがアロー関数です。=>(矢印のように見えますよね?)を使用し、開発者に非常に人気があります。 アロー関数を使うと、functionキーワードを省略して、より簡潔なコードを書くことができます。 タイマーの例をアロー関数を使って書き直してみましょう: ()はパラメータを記述する場所(今回は空)、次に矢印=>、そして最後に波括弧内の関数本体が続きます。この構文で同じ機能をより簡潔に提供します。 ### 各戦略を使うタイミング どのアプローチを使うべきか?実用的なガイドラインとして、関数を複数回使用する場合は名前を付けて別々に定義します。特定の用途のためだけなら無名関数を検討してください。アロー関数と従来の構文はどちらも有効ですが、アロー関数はモダンなJavaScriptコードベースで広く使われています。 ### 🎨 関数スタイルの理解チェック: 適切な構文を選ぶ 構文の理解をテストしてみましょう: - 従来の関数構文よりアロー関数を好む理由は何ですか? - 無名関数の主な利点は何ですか? - 名前付き関数が無名関数より優れている状況を考えられますか? --- ## 🚀 チャレンジ 関数とメソッドの違いを一文で説明できますか?挑戦してみてください! ## GitHub Copilot Agent Challenge 🚀 Agentモードを使用して以下のチャレンジを完了してください: 説明: このレッスンで取り上げたさまざまな関数の概念を示す数学関数のユーティリティライブラリを作成してください。パラメータ、デフォルト値、戻り値、アロー関数を含めます。 プロンプト: mathUtils.jsというJavaScriptファイルを作成し、以下の関数を含めてください: 1. 2つのパラメータを受け取り、その合計を返す関数add 2. デフォルトのパラメータ値を持つ関数multiply(2番目のパラメータはデフォルトで1) 3. 数値を受け取り、その平方を返すアロー関数square 4. 他の関数をパラメータとして受け取り、2つの数値にその関数を適用する関数calculate 5. 各関数を適切なテストケースで呼び出す例を示す Agentモードについて詳しくはこちらをご覧ください。 ## 講義後のクイズ 講義後のクイズ ## 復習と自己学習 アロー関数についてもう少し調べてみる価値があります。コードベースでますます使用されるようになっています。この構文で関数を書き、書き直して練習してみてください - [ ] 従来の関数をアロー関数構文に変換してみる - [ ] チャレンジに取り組む: 関数とメソッドの違いを説明する ### 🎯 この1時間で達成できること - [ ] レッスン後のクイズを完了し、わかりにくい概念を復習する - [ ] GitHub Copilotのチャレンジで数学ユーティリティライブラリを作成する - [ ] 他の関数をパラメータとして使用する関数を作成する - [ ] デフォルトパラメータを使用した関数を書く練習をする - [ ] 関数の戻り値でテンプレートリテラルを試してみる ### 📅 1週間で関数をマスターする - [ ] 創造性を発揮して「Fun with Functions」課題を完了する - [ ] 書いた繰り返しコードをリファクタリングして再利用可能な関数にする - [ ] 関数だけを使って小さな計算機を作成する(グローバル変数は使用しない) - [ ] map()やfilter()のような配列メソッドでアロー関数を練習する - [ ] 一般的なタスクのためのユーティリティ関数を作成する - [ ] 高階関数や関数型プログラミングの概念を学ぶ ### 🌟 1か月での変化 - [ ] クロージャやスコープなどの高度な関数概念をマスターする - [ ] 関数の合成を多用するプロジェクトを構築する - [ ] オープンソースに貢献し、関数のドキュメントを改善する - [ ] 関数や異なる構文スタイルについて誰かに教える - [ ] JavaScriptで関数型プログラミングのパラダイムを探求する - [ ] 将来のプロジェクトのために再利用可能な関数の個人ライブラリを作成する ### 🏆 最終チェックイン: 関数の達人へ 関数マスターを祝おう: - 今まで作成した中で最も役立つ関数は何ですか? - 関数について学ぶことで、コードの整理方法に対する考え方はどう変わりましたか? - 好きな関数構文はどれですか?その理由は? - 関数を書くことで解決したい現実の問題は何ですか? --- 免責事項: この文書はAI翻訳サービスCo-op Translatorを使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。

javascript

JavaScriptの基本: 判断をする

アプリケーションがどのように賢い判断をしているのか疑問に思ったことはありませんか?例えば、ナビゲーションシステムが最速ルートを選ぶ方法や、サーモスタットがいつ暖房をオンにするかを決める方法などです。これがプログラミングにおける判断の基本的な概念です。 チャールズ・バベッジの解析機関が条件に基づいて異なる操作のシーケンスを実行するよう設計されていたように、現代のJavaScriptプログラムも状況に応じて選択を行う必要があります。この分岐して判断を行う能力こそが、静的なコードを応答性のある知的なアプリケーションに変えるものです。 このレッスンでは、プログラムに条件付きロジックを実装する方法を学びます。条件文、比較演算子、論理式を探求し、コードが状況を評価して適切に応答できるようにします。 ## レクチャー前のクイズ レクチャー前のクイズ 判断を行い、プログラムの流れを制御する能力はプログラミングの基本的な側面です。このセクションでは、Boolean値と条件付きロジックを使用してJavaScriptプログラムの実行パスを制御する方法を説明します。 [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Booleanの簡単な復習 判断を探求する前に、前回のレッスンで学んだBoolean値を復習しましょう。数学者ジョージ・ブールにちなんで名付けられたこれらの値は、trueまたはfalseという2つの状態を表します。曖昧さや中間の状態はありません。 これらの2進値は、すべての計算論理の基礎を形成します。プログラムが行うすべての判断は最終的にBoolean評価に帰着します。 Boolean変数を作成するのは簡単です: これにより、明示的なBoolean値を持つ2つの変数が作成されます。 ✅ Booleanは、イギリスの数学者、哲学者、論理学者であるジョージ・ブール(1815–1864)にちなんで名付けられました。 ## 比較演算子とBoolean 実際には、Boolean値を手動で設定することはほとんどありません。代わりに、条件を評価することで生成します。「この数値はあの数値より大きいか?」や「これらの値は等しいか?」などです。 比較演算子はこれらの評価を可能にします。値を比較し、オペランド間の関係に基づいてBoolean結果を返します。 ✅ ブラウザのコンソールでいくつかの比較を書いて知識を確認してください。返されたデータに驚くことはありますか? ### 🧠 比較の習得: Booleanロジックの理解 比較の理解をテストする: - なぜ===(厳密な等価性)が一般的に==(緩やかな等価性)より好まれると思いますか? - 5 === '5'は何を返すか予測できますか?5 == '5'はどうですか? - !==と!=の違いは何ですか? ## If文 if文はコード内で質問をするようなものです。「この条件が真なら、このことをする。」これはJavaScriptで判断を行うために最も重要なツールです。 以下がその動作方法です: 条件は括弧内に入り、それがtrueの場合、JavaScriptは中括弧内のコードを実行します。falseの場合、JavaScriptはそのブロック全体をスキップします。 これらの条件を作成するために比較演算子を使用することがよくあります。実際の例を見てみましょう: 1000 >= 800がtrueと評価されるため、ブロック内のコードが実行され、コンソールに「新しいラップトップを購入します!」と表示されます。 ## If..Else文 しかし、条件がfalseの場合にプログラムに別のことをさせたい場合はどうしますか?そこでelseが登場します。これはバックアッププランのようなものです。 else文を使用すると、「この条件が真でない場合、代わりにこの別のことをする」と言うことができます。 今度は500 >= 800がfalseであるため、JavaScriptは最初のブロックをスキップし、代わりにelseブロックを実行します。コンソールには「まだ新しいラップトップを購入できません!」と表示されます。 ✅ このコードと以下のコードをブラウザのコンソールで実行して理解をテストしてください。currentMoneyとlaptopPrice変数の値を変更して、返されるconsole.log()を変更してみてください。 ### 🎯 If-Elseロジックチェック: 分岐パス 条件付きロジックの理解を評価する: - currentMoneyがlaptopPriceと完全に等しい場合はどうなりますか? - If-Elseロジックが役立つ現実のシナリオを考えられますか? - 複数の価格帯を処理するように拡張する方法を考えられますか? ## Switch文 時には、1つの値を複数の選択肢と比較する必要があります。いくつかのif..else文を連ねることもできますが、このアプローチは扱いにくくなります。switch文は、複数の離散値を処理するためのよりクリーンな構造を提供します。 この概念は、初期の電話交換機で使用された機械式スイッチングシステムに似ています。1つの入力値が実行がどの特定のパスをたどるかを決定します。 以下がその構造です: - JavaScriptは式を一度評価します - 各caseを見て一致を探します - 一致が見つかると、そのコードブロックを実行します - breakはJavaScriptにスイッチを停止して終了するよう指示します - 一致するケースがない場合、defaultブロック(存在する場合)を実行します この例では、JavaScriptはdayNumberが2であることを確認し、一致するcase 2を見つけ、dayNameを「火曜日」に設定し、スイッチを抜けます。その結果、コンソールに「今日は火曜日です」と表示されます。 ✅ このコードと以下のコードをブラウザのコンソールで実行して理解をテストしてください。変数aの値を変更して返されるconsole.log()を変更してみてください。 ### 🔄 Switch文の習得: 複数の選択肢 Switchの理解をテストする: - break文を忘れるとどうなりますか? - 複数のif-else文の代わりにswitchを使用するのはどんな場合ですか? - すべての可能性をカバーしたと思っていてもdefaultケースが役立つのはなぜですか? ## 論理演算子とBoolean 複雑な判断では、複数の条件を同時に評価する必要があります。数学者が論理式を組み合わせるためにBoolean代数を使用するように、プログラミングでは論理演算子を使用して複数のBoolean条件を接続します。 これらの演算子は、単純な真/偽評価を組み合わせることで洗練された条件付きロジックを可能にします。 これらの演算子を使用すると、条件を便利に組み合わせることができます: - AND (&&)は両方の条件が真である必要があります - OR (||)は少なくとも1つの条件が真である必要があります - NOT (!)は真を偽に(その逆も)反転します ## 論理演算子を使用した条件と判断 これらの論理演算子を使用したより現実的な例を見てみましょう: この例では: 20%割引価格(640)を計算し、利用可能な資金が全額価格または割引価格のいずれかをカバーするかどうかを評価します。600は割引価格の閾値640を満たしているため、条件は真と評価されます。 ### 🧮 論理演算子チェック: 条件の組み合わせ 論理演算子の理解をテストする: - 式A && Bで、Aが偽の場合、Bは評価されますか? - 3つの演算子(&&、||、!)すべてが必要な状況を考えられますか? - !user.isActiveとuser.isActive !== trueの違いは何ですか? ### 否定演算子 時には、何かが真でない場合を考える方が簡単です。例えば、「ユーザーがログインしているか?」ではなく、「ユーザーがログインしていないか?」を尋ねたい場合があります。感嘆符(!)演算子がそのロジックを反転してくれます。 !演算子は「反対に...」と言うようなものです。何かがtrueであれば、!はそれをfalseにし、その逆も同様です。 ### 三項式 簡単な条件付き代入の場合、JavaScriptは三項演算子を提供します。この簡潔な構文により、条件式を1行で記述することができ、条件に基づいて2つの値のいずれかを割り当てる必要がある場合に便利です。 これは質問のように読めます: 「この条件は真ですか?もしそうなら、この値を使用します。そうでなければ、あの値を使用します。」 以下はより具体的な例です: ✅ このコードを数回読んでみてください。これらの演算子がどのように機能しているか理解できますか? この行が言っていることは次の通りです: 「firstNumberがsecondNumberより大きいですか?もしそうなら、firstNumberをbiggestNumberに入れます。そうでなければ、secondNumberをbiggestNumberに入れます。」 三項演算子は、従来のif..else文を短く書く方法にすぎません: どちらのアプローチも同じ結果を生み出します。三項演算子は簡潔さを提供しますが、従来のif-else構造は複雑な条件に対してより読みやすい場合があります。 --- ## 🚀 チャレンジ 論理演算子を使用して最初に書かれたプログラムを作成し、それを三項式を使用して書き直してください。どちらの構文が好みですか? --- ## GitHub Copilot Agent Challenge 🚀 Agentモードを使用して以下のチャレンジを完了してください: 説明: このレッスンの複数の判断概念(if-else文、switch文、論理演算子、三項式)を示す包括的な成績計算機を作成してください。 プロンプト: 学生の数値スコア(0-100)を受け取り、以下の基準に基づいてその文字評価を決定するJavaScriptプログラムを作成してください: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60未満 要件: 1. if-else文を使用して文字評価を決定すること 2. 学生が合格(成績 >= 60)し、かつ優秀(成績 >= 90)であるかを論理演算子を使って確認する 3. 各文字評価に対して具体的なフィードバックを提供するためにswitch文を使用する 4. 三項演算子を使って学生が次のコースに進む資格があるか(成績 >= 70)を判断する 5. スコアが0から100の間であることを確認する入力検証を含める さまざまなスコアでプログラムをテストしてください。59、60、89、90のような境界値や無効な入力も含めて試してください。 agent modeについてさらに学ぶにはこちらをご覧ください。 ## 講義後のクイズ 講義後のクイズ ## 復習と自己学習 利用可能な多くの演算子についてさらに学ぶには、MDNをご覧ください。 Josh Comeauの素晴らしいoperator lookupをぜひチェックしてください! ## 課題 Operators --- ## 🧠 意思決定ツールキットのまとめ --- ## 🚀 JavaScript意思決定マスタリータイムライン ### ⚡ 次の5分でできること - [ ] ブラウザコンソールで比較演算子を練習する - [ ] 年齢をチェックする簡単なif-else文を書く - [ ] チャレンジに挑戦:if-else文を三項演算子で書き換える - [ ] 異なる「truthy」と「falsy」値で何が起こるかテストする ### 🎯 この1時間で達成できること - [ ] 講義後のクイズを完了し、わかりにくい概念を復習する - [ ] GitHub Copilotチャレンジの包括的な成績計算機を作成する - [ ] 実際のシナリオ(例えば服を選ぶ)に基づいた簡単な意思決定ツリーを作成する - [ ] 論理演算子を使って複数の条件を組み合わせる練習をする - [ ] switch文をさまざまな用途で試してみる ### 📅 1週間のロジックマスタリー - [ ] 創造的な例を使って演算子の課題を完了する - [ ] さまざまな条件構造を使用してミニクイズアプリケーションを作成する - [ ] 複数の入力条件をチェックするフォームバリデーターを作成する - [ ] Josh Comeauのoperator lookupの演習を練習する - [ ] 既存のコードをリファクタリングして、より適切な条件構造を使用する - [ ] 短絡評価とパフォーマンスへの影響を学ぶ ### 🌟 1か月間の変革 - [ ] 複雑なネスト条件をマスターし、コードの可読性を維持する - [ ] 洗練された意思決定ロジックを備えたアプリケーションを構築する - [ ] 既存プロジェクトの条件ロジックを改善することでオープンソースに貢献する - [ ] さまざまな条件構造とその使用タイミングについて他の人に教える - [ ] 条件ロジックへの関数型プログラミングアプローチを探求する - [ ] 条件のベストプラクティスに関する個人的な参考ガイドを作成する ### 🏆 最終意思決定チャンピオンチェックイン 論理的思考のマスタリーを祝おう: - あなたが成功裏に実装した最も複雑な意思決定ロジックは何ですか? - どの条件構造が最も自然に感じられ、その理由は何ですか? - 論理演算子について学ぶことで、問題解決のアプローチはどのように変わりましたか? - 洗練された意思決定ロジックが役立つ現実世界のアプリケーションは何ですか? --- 免責事項: この文書はAI翻訳サービスCo-op Translatorを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。

javascript

JavaScriptの基本: 配列とループ

## 講義前のクイズ 講義前のクイズ ウェブサイトがショッピングカートのアイテムを管理したり、友達リストを表示したりする仕組みを考えたことはありますか?それが配列とループの役割です。配列は複数の情報を保持するデジタルコンテナのようなもので、ループはそのデータを効率的に処理するためのツールです。 これら2つの概念を組み合わせることで、プログラム内で情報を扱う基盤が形成されます。手動で一つ一つのステップを書き出すのではなく、数百や数千のアイテムを迅速に処理できるスマートで効率的なコードを作成する方法を学びます。 このレッスンの終わりには、数行のコードで複雑なデータ処理を達成する方法を理解できるようになります。それでは、これらの重要なプログラミング概念を探ってみましょう。 [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## 配列 配列はデジタルのファイリングキャビネットのようなものです。一つの引き出しに一つの書類を保存する代わりに、関連する複数のアイテムを一つの構造化されたコンテナに整理できます。プログラミングの観点では、配列を使うことで複数の情報を一つのパッケージにまとめて保存できます。 写真ギャラリーを作成したり、やることリストを管理したり、ゲームのハイスコアを追跡したりする場合、配列はデータを整理する基盤を提供します。それでは、配列の仕組みを見てみましょう。 ✅ 配列は私たちの周りにたくさんあります!例えば、ソーラーパネルの配列のような実生活の例を考えてみてください。 ### 配列の作成 配列を作成するのはとても簡単です。角括弧を使うだけです! ここで何が起きているのか? 角括弧 [] を使って空のコンテナを作成しました。これは空の図書館の棚のようなもので、そこに整理したい本を置く準備ができています。 初期値を設定して配列を作成することもできます。 注目すべきポイント: - 配列にはテキスト、数字、または真偽値を混在して保存できます - 各アイテムをコンマで区切るだけで簡単です - 配列は関連する情報をまとめて保存するのに最適です ### 配列のインデックス 最初は少し奇妙に感じるかもしれませんが、配列はアイテムを0から番号付けします。これはコンピュータのメモリの仕組みに由来しており、C言語のような初期のプログラミング言語からの慣例です。配列内の各場所には、インデックスと呼ばれるアドレス番号が割り当てられます。 ✅ 配列が0からインデックスを始めることに驚きましたか?一部のプログラミング言語ではインデックスが1から始まります。この歴史についてはWikipediaで読むことができます。 配列要素へのアクセス: ここで何が起きているのか? - 使用: インデックス番号を角括弧記法で指定して要素にアクセス - 返却: 配列内の特定の位置に保存されている値 - 開始: 0からカウントするため、最初の要素のインデックスは0 配列要素の変更: 上記で行ったこと: - 変更: インデックス4の要素を"Rocky Road"から"Butter Pecan"に変更 - 追加: インデックス5に新しい要素"Cookie Dough"を追加 - 拡張: 現在の範囲を超えて追加すると配列の長さが自動的に拡張される ### 配列の長さと便利なメソッド 配列にはデータ操作を簡単にするための組み込みプロパティとメソッドがあります。 配列の長さを取得: 覚えておくべきポイント: - 返却: 配列内の要素の総数 - 更新: 要素が追加または削除されると自動的に更新 - 提供: ループや検証に役立つ動的なカウント 基本的な配列メソッド: これらのメソッドの理解: - push() (末尾) と unshift() (先頭) で要素を追加 - pop() (末尾) と shift() (先頭) で要素を削除 - indexOf() で要素の位置を特定し、includes() で存在を確認 - 削除された要素や位置インデックスなどの便利な値を返却 ✅ 自分で試してみましょう!ブラウザのコンソールを使って、自分で作成した配列を操作してみてください。 ### 🧠 配列の基本チェック: データの整理 配列の理解をテスト: - 配列が0からカウントを始める理由は何だと思いますか? - 存在しないインデックス (例えば5要素の配列でarr[100]) にアクセスしようとするとどうなりますか? - 配列が役立つ3つの実世界のシナリオを考えてみてください。 ## ループ チャールズ・ディケンズの小説に出てくる罰として、生徒がスレートに何度も同じ文を書かされる場面を思い出してください。もし「この文を100回書いて」と指示するだけで自動的に完了する方法があったらどうでしょう?それがコードにおけるループの役割です。 ループは、エラーなくタスクを繰り返す疲れ知らずのアシスタントのようなものです。ショッピングカート内のすべてのアイテムを確認したり、アルバム内のすべての写真を表示したりする場合、ループは効率的に繰り返し処理を行います。 JavaScriptにはいくつかの種類のループがあり、それぞれの使いどころを理解することが重要です。 ### Forループ forループはタイマーを設定するようなもので、何回実行するかを正確に把握しています。非常に整理されていて予測可能なので、配列を操作したり、何かをカウントする必要がある場合に最適です。 Forループの構造: ステップごとに何が起きているか: - 初期化: カウンタ変数iを0に設定 - 条件確認: 各反復前にi < 10を確認 - 実行: 条件が真の場合にコードブロックを実行 - 増分: 各反復後にiを1増加 (i++) - 停止: 条件が偽になると停止 (例: iが10に達したとき) ✅ このコードをブラウザのコンソールで実行してみましょう。カウンタ、条件、または反復式に小さな変更を加えると何が起きるか確認してください。逆方向に動作させてカウントダウンを作成できますか? ### 🗓️ Forループのマスターチェック: 制御された繰り返し Forループの理解を評価: - Forループの3つの部分は何で、それぞれ何をしますか? - 配列を逆方向にループするにはどうすればよいですか? - 増分部分 (i++) を忘れるとどうなりますか? ### Whileループ whileループは「これを続けて...」と言うようなもので、正確に何回実行するかはわからないけれど、いつ停止するかはわかっています。ユーザーが必要な入力を提供するまで尋ねたり、探しているデータが見つかるまで検索したりする場合に最適です。 Whileループの特徴: - 条件が真である限り実行を続ける - カウンタ変数の手動管理が必要 - 各反復前に条件を確認 - 条件が偽にならない場合無限ループのリスクがある これらの例の理解: - カウンタ変数iを手動で管理し、ループ内で更新 - カウンタを増分して無限ループを防止 - ユーザー入力と試行回数制限の実用例を示す - 安全メカニズムを含むことで無限実行を防止 ### ♾️ Whileループの知恵チェック: 条件ベースの繰り返し Whileループの理解をテスト: - Whileループを使用する際の主な危険は何ですか? - ForループではなくWhileループを選ぶのはどんな場合ですか? - 無限ループを防ぐにはどうすればよいですか? ### モダンなループの代替案 JavaScriptには、コードをより読みやすく、エラーを減らすためのモダンなループ構文があります。 For...ofループ (ES6+): For...ofの主な利点: - インデックス管理を排除し、オフバイワンエラーを防止 - 配列要素に直接アクセスを提供 - コードの可読性を向上し、構文の複雑さを軽減 forEachメソッド: forEachについて知っておくべきこと: - 各配列要素に対して関数を実行 - 要素の値とインデックスをパラメータとして提供 - 従来のループと異なり早期停止ができない - 新しい配列を作成せず、undefinedを返却 ✅ ForループとWhileループのどちらを選ぶべきか?17K人の視聴者がStackOverflowで同じ質問をしており、いくつかの意見が興味深いかもしれません。 ### 🎨 モダンなループ構文チェック: ES6+を活用 モダンなJavaScriptの理解を評価: - 従来のForループに比べてfor...ofの利点は何ですか? - それでも従来のForループを選ぶ場合はどんな時ですか? - forEachとmapの違いは何ですか? ## ループと配列 配列とループを組み合わせることで、強力なデータ処理能力が生まれます。この組み合わせは、リストの表示から統計の計算まで、多くのプログラミングタスクの基盤となります。 従来の配列処理: 各アプローチを理解しましょう: - 配列の長さプロパティを使用してループの境界を決定 - 従来のForループでインデックスを使用して要素にアクセス - For...ofループで直接要素にアクセス - 各配列要素を正確に1回処理 実用的なデータ処理例: このコードの仕組み: - 合計や極値を追跡する変数を初期化 - 単一の効率的なループで各成績を処理 - 平均計算のために合計を蓄積 - 反復中に最高値と最低値を追跡 - ループ完了後に最終的な統計を計算 ✅ 自分で作成した配列をブラウザのコンソールでループ処理してみましょう。 --- ## GitHub Copilot Agent Challenge 🚀 Agentモードを使用して以下のチャレンジを完了してください: 説明: 配列とループを組み合わせてデータセットを分析し、有意義な洞察を生成する包括的なデータ処理関数を作成してください。 プロンプト: analyzeGradesという関数を作成し、学生の成績オブジェクトの配列 (各オブジェクトには名前とスコアプロパティが含まれる) を受け取り、最高スコア、最低スコア、平均スコア、合格した学生の数 (スコア >= 70)、および平均スコアを上回った学生の名前の配列を含む統計を返すオブジェクトを生成してください。解決策には少なくとも2種類のループを使用してください。 Agentモードについて詳しくはこちらをご覧ください。 ## 🚀 チャレンジ JavaScriptは、特定のタスクにおいて従来のループを置き換えることができるいくつかのモダンな配列メソッドを提供しています。forEach、for-of、map、filter、そしてreduceを試してみてください。 チャレンジ: 学生の成績例を少なくとも3つの異なる配列メソッドを使用してリファクタリングしてください。モダンなJavaScript構文を使うことで、コードがどれほどクリーンで読みやすくなるかを確認してください。 ## 講義後のクイズ 講義後のクイズ ## 復習と自己学習 JavaScriptの配列には、データ操作に非常に便利な多くのメソッドが付属しています。これらのメソッドについて読むとともに、自分で作成した配列でいくつか試してみてください(例えば、push、pop、slice、spliceなど)。 ## 課題 配列をループする --- ## 📊 配列とループツールキットのまとめ --- ## 🚀 配列とループの習得タイムライン ### ⚡ 次の5分間でできること - [ ] 好きな映画の配列を作成し、特定の要素にアクセスする - [ ] 1から10までカウントするforループを書く - [ ] レッスンのモダンな配列メソッドチャレンジを試す - [ ] ブラウザコンソールで配列のインデックス操作を練習する ### 🎯 この1時間で達成できること - [ ] レッスン後のクイズを完了し、難しい概念を復習する - [ ] GitHub Copilotチャレンジの包括的な成績分析ツールを作成する - [ ] アイテムを追加・削除する簡単なショッピングカートを作成する - [ ] 異なるループタイプへの変換を練習する - [ ] push、pop、slice、spliceなどの配列メソッドを試す ### 📅 1週間のデータ処理の旅 - [ ] 創造的な工夫を加えた「配列をループする」課題を完了する - [ ] 配列とループを使用したTo-Doリストアプリを作成する - [ ] 数値データの簡単な統計計算機を作成する - [ ] MDNの配列メソッドを練習する - [ ] フォトギャラリーや音楽プレイリストのインターフェースを作成する - [ ] map、filter、reduceを使った関数型プログラミングを探求する ### 🌟 1か月間の変革 - [ ] 高度な配列操作とパフォーマンス最適化を習得する - [ ] 完全なデータ可視化ダッシュボードを作成する - [ ] データ処理に関するオープンソースプロジェクトに貢献する - [ ] 実用的な例を使って配列とループについて他の人に教える - [ ] 再利用可能なデータ処理関数の個人ライブラリを作成する - [ ] 配列を基にしたアルゴリズムとデータ構造を探求する ### 🏆 データ処理チャンピオンの最終チェックイン 配列とループの習得を祝う: - 実際のアプリケーションで最も役立つ配列操作は何ですか? - どのループタイプが最も自然に感じられますか?その理由は? - 配列とループを理解することで、データの整理方法にどのような変化がありましたか? - 次に取り組みたい複雑なデータ処理タスクは何ですか? --- 免責事項: この文書はAI翻訳サービスCo-op Translatorを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された文書を正式な情報源としてください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。

javascript

ការណែនាំអំពី JavaScript

JavaScript គឺជาทាសារបស់គេហទំព័រ។ ក្នុងមេរៀនបួននេះ អ្នកនឹងរៀនពីមូលដ្ឋានរបស់វា។ ### ប្រធានបទ 1. អថេរនិងប្រភេទទិន្នន័យ 2. មុខងារនិងវិធីសាស្រ្ត 3. ធ្វើការសម្រេចចិត្តជាមួយ JavaScript 4. អារេនិងរង្វិល ### ការគោរព មេរៀនទាំងនេះត្រូវបានសរសេរដោយ ♥️ ដោយ Jasmine Greenaway, Christopher Harrison និង Chris Noring --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ការបដិសេធ៖ ឯកសារនេះត្រូវបានបកប្រែក្នុងប្រើសេវាបកប្រែ AI Co-op Translator ។ ខណៈពេលដែលយើងខិតខំផ្តល់ភាពត្រឹមត្រូវ សូមទទួលស្គាល់ថា ការបកប្រែដោយស្វ័យប្រវត្តិនេះអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាមាតុភាសាត្រូវតែត្រូវបានចាត់ទុកជាមូលដ្ឋានដែលមានសុពលភាព។ សម្រាប់ព័ត៌មានសំខាន់ៗ អនុញាតអោយប្រើការបកប្រែដោយអ្នកជំនាញ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសផ្សេងៗណាមួយដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

មូលដ្ឋាន JavaScript៖ ប្រភេទទិន្នន័យ

ប្រភេទទិន្នន័យគឺជាគំនិតមូលដ្ឋានមួយក្នុង JavaScript ដែលអ្នកនឹងប្រទៈមុខក្នុងកម្មវិធីរាល់គោលបំណងថត។ គិតប្រៀបប្រភេទទិន្នន័យដូចជា ប្រព័ន្ធរៀបចំបញ្ជីដែលបានប្រើដោយអ្នកថតបញ្ជីចាស់នៅ Alexandria ពួកគេមានកន្លែងជាក់លាក់សម្រាប់សៀវភៅដាក់诗歌 គណិតវិទ្យា និងកំណត់ហេតុប្រវត្តិសាស្ត្រ។ JavaScript រៀបចំព័ត៌មានជា ក្រុមខុសៗគ្នាដើម្បីទុកទិន្នន័យខុសៗគ្នា។ នៅមេរៀននេះ យើងនឹងស្វែងយល់អំពីប្រភេទទិន្នន័យស្នូលដែលធ្វើឱ្យ JavaScript ប្រតិបត្តិ។ អ្នកនឹងរៀនពីរបៀបដោះស្រាយលេខ អត្ថបទ តម្លៃ true/false និងយល់ថាហេតុអ្វីបានជាជ្រើសរើសប្រភេទត្រឹមត្រូវមានសារៈសំខាន់សម្រាប់កម្មវិធីរបស់អ្នក។ គំនិតទាំងនេះប្រហែលជាមើលទៅរាប់បញ្ចប់មិនមែននៅដំបូងទេ ប៉ុន្តែជាមួយការអនុវត្ត អ្នកនឹងអាចយល់ដឹងវាយ៉ាងទូលំទូលាយ។ ការយល់ដឹងពីប្រភេទទិន្នន័យនឹងធ្វើឱ្យអ្វីៗផ្សេងទៀតនៅក្នុង JavaScript លម្អិតបន្ថែម។ ដូចជាបុគ្គលស្ថាបត្យកម្មដែលត្រូវតែយល់ដឹងពីសារធាតុសំណង់ខុសៗគ្នាជាមុន មុនធ្វើការសាងសង់ព្រះវិហារ គោលការណ៍ទាំងនេះនឹងគាំទ្រអ្វីដែលអ្នកសង់នៅខាងមុខ។ ## សំណួរជំនួញមុនមេរៀន សំណួរជំនួញមុនមេរៀន មេរៀននេះគ្របដណ្តប់មូលដ្ឋាននៃ JavaScript ដែលជาทាសាដែលផ្តល់ឱ្យនូវអន្តរកម្មលើបណ្តាញ។ [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") ចាប់ផ្តើមជាមួយអថេរ និងប្រភេទទិន្នន័យដែលជាកម្មវិធីផ្ទុកវា! ## អថេរ អថេរជាថ្នាំសំណុំផ្នែកមូលដ្ឋានក្នុងកម្មវិធី។ ដូចជាធុងដែលមានស្លាបណ្ដោះអាសន្នដែលអាឡ្គែនមេដ្យាវែលបានប្រើដើម្បីរក្សាសារធាតុផ្សេងៗ អថេរអនុញ្ញាតឱ្យអ្នករក្សាព័ត៌មាន និងផ្តល់ឈ្មោះពណ៌នា ដូច្នេះអ្នកអាចយោងវិញបាននៅពេលក្រោយ។ ត្រូវការចងចាំអាយុរបស់នរណាម្នាក់? រក្សាវានៅក្នុងអថេរឈ្មោះ age។ ចង់តាមដានឈ្មោះអ្នកប្រើ? រក្សាវា​នៅក្នុង​អថេ​រ​ឈ្មោះ userName។ យើងនឹងផ្តោតលើវិធីសាស្ត្រជាម៉ូដម៉ែនក្នុងការបង្កើតអថេរ​នៅក្នុង JavaScript។ វិធីសាស្ត្រដែលអ្នកនឹងរៀននៅទីនេះតំណាងឲ្យការអភិវឌ្ឍភាសារយៈពេលជាច្រើនឆ្នាំ និងការអនុវត្តន៍ល្អបំផុតដែលក្រុមហ៊ុនកម្មវិធីបានបង្កើត។ ការបង្កើត និង ប្រកាស អថេរមានសមាសធាតុបែបរៀងៗខាងក្រោម [keyword] [name]។ វាត្រូវបានរៀបចំពីចំណុចពីរដែល៖ - ពាក្យគន្លឹះ។ ប្រើ let សម្រាប់អថេរដែលអាចប្ដូរ បើមិនដូច្នោះប្រើ const សម្រាប់តម្លៃដែលនៅដដែល។ - ឈ្មោះអថេរ ជាឈ្មោះពណ៌នាដែលអ្នកជ្រើសរើសអ្នកផ្ទាល់។ ✅ ពាក្យគន្លឹះ let ត្រូវបានណែនាំក្នុង ES6 ហើយផ្តល់អថេររបស់អ្នកមកនូវ _block scope_ ដែលហៅថា។ វាត្រូវបានណែនាំឱ្យប្រើ let ឬ const ជំនួស var ដែលចាស់។ យើងនឹងពិភាក្សាអំពី block scopes ជាមួយភាពជ្រាលជ្រៅនៅផ្នែកក្រោយ។ ### ការងារ - ប្រើប្រាស់អថេរ 1. ប្រកាសអថេរ។ ចាប់ផ្តើមដោយបង្កើតអថេរដំបូងរបស់យើង៖ ```javascript let myVariable; ``` អ្វីដែលធ្វើបានដោយនេះ៖ - នេះបង្ហាញទៅ JavaScript ឱ្យបង្កើតទីតាំងផ្ទុកដែលហៅថា myVariable - JavaScript ផ្ដល់កន្លែងក្នុងអង្គចងចាំសម្រាប់អថេរនេះ - អថេរបច្ចុប្បន្នមិនមានតម្លៃណាមួយទេ (undefined) 2. ផ្តល់តម្លៃវា។ ឥឡូវLet's put something in our variable: ```javascript myVariable = 123; ``` របៀបផ្តល់តម្លៃ៖ - អ្នកប្តូរតម្លៃ 123 ដោយប្រើអុីផារ = ទៅអថេររបស់យើង - អថេរឥឡូវកាន់តម្លៃនេះប្ដូរពី undefined - អ្នកអាចយោងតម្លៃនេះជាមធ្យោបាយ myVariable នៅក្នុងកូដរបស់អ្នក > ទំរង់ៈ ការប្រើ = នៅក្នុងមេរៀននេះមានន័យថាអ្នកប្រើ "អុីផារ​តំណាង", ដែលសម្រាប់កំណត់តម្លៃទៅអថេរ។ វាមិនមែនជាសមាមាត្រ​ទេ។ 3. ធ្វើវាតាមវិធីឆ្លាត។ ពិតប្រាកដយើងចែករួមពីរបៀបនោះជា​មួយគ្នា៖ ```javascript let myVariable = 123; ``` វិធីនេះមានប្រសិទ្ធភាពច្រើន៖ - អ្នកប្រកាសអថេរហើយផ្តល់តម្លៃនៅក្នុងការបញ្ជាក់មួយ - វាជាវិធីសាស្ត្រមានស្តង់ដារចំពោះអ្នកអភិវឌ្ឍការ - វាធ្វើឲ្យកូដកាត់បន្ថយប្រវែង ប៉ុន្តែលុបបំបាត់ភាពច្របូកច្របល់ 4. ផ្លាស់ប្តូរយោបល់។ តើត្រូវធ្វើដូចម្តេចបើចង់រក្សាទុកលេខផ្សេងទៀត? ```javascript myVariable = 321; ``` យល់ពីការផ្លាស់ប្តូរតម្លៃ מחדש៖ - អថេរឥឡូវកាន់តម្លៃ 321 ជំនួស 123 - តម្លៃមុនបានជំនួស – អថេររក្សាតម្លៃតែមួយក្នុងមួយពេល - ភាពអាចប្ដូរនេះគឺជា លក្ខណៈសំខាន់នៃអថេរដែលត្រូវបានប្រកាសជាមួយ let ✅ ព្យាយាមវា! អ្នកអាចសរសេរ JavaScript ត្រង់លើកម្មវិធីរុករករបស់អ្នក។ បើកបណ្តាញកម្មវិធីរុករក និងចូលទៅកាន់ប្រអប់ Developer Tools។ នៅក្នុងទំព័របញ្ជារ (console), អ្នកនឹងឃើញដំណោះស្រាយ; សរសេរ let myVariable = 123, ចុច Enter, បន្ទាប់មកសរសេរ myVariable។ តើមានអ្វីកើតឡើង? ចំណាំ អ្នកនឹងរៀនបន្ថែមអំពីគំនិតទាំងនេះនៅក្នុងមេរៀនបន្ទាប់ៗ។ ### 🧠 ត្រួតពិនិត្យជំនាញអថេរ៖ ការដឹងចិត្ត មើលថាតើអ្នកមានអារម្មណ៍យ៉ាងណាអំពីអថេរ៖ - តើអាចពន្យល់ភាពខុសគ្នារវាងប្រកាស និងផ្តល់តម្លៃអថេរបានទេ? - តើមានអ្វីកើតឡើង ប្រសិនបើអ្នកព្យាយាមប្រើអថេរមុនពេលប្រកាសវា? - តើហេតុអ្វីអ្នកគួរជ្រើស let ជំនួស const សម្រាប់អថេរ? ## អថេរតម្លៃថេរ ពេលខ្លះអ្នកត្រូវការរក្សារទិន្នន័យមួយដែលមិនគួរប្ដូរនៅពេលកម្មវិធីដំណើរការ។ គិតអថេរតម្លៃថេរដូចជាគោលការណ៍គណិតវិទ្យាដែល Euclid បានបង្កើតនៅក្រិចបុរាណ – បន្ទាប់ពីស្ថិតនៅកន្លែង និងបានចងក្រងហើយ វានៅមិនផ្លាស់ប្ដូរឡើយសម្រាប់ការយោងបន្ដបន្ទាប់។ អថេរតម្លៃថេរធ្វើការដូចអថេរ ប៉ុន្តែមានកំណត់ជាក់លាក់៖ បន្ទាប់ពីអ្នកផ្តល់តម្លៃរបស់ពួកគេ វាមិនអាចផ្លាស់ប្ដូរបានទេ។ ភាពមិនអាចផ្លាស់ប្ដូរនេះជួយកាត់បន្ថយករណីកំហុសដោយចៃដន្យចំពោះតម្លៃសំខាន់ៗក្នុងកម្មវិធីរបស់អ្នក។ ការប្រើប្រាស់ និងការបរិច្ឆេទអថេរតម្លៃថេរតាមគំនិតដូចគ្នានឹងអថេរ ដោយផ្តល់តែពាក្យគន្លឹះ const។ បើធម្មតាជាអថេរតម្លៃថេរត្រូវបានប្រកាសជាមួយអក្សរធំទាំងអស់។ នេះជាអ្វីដែលកូដនេះធ្វើ៖ - បង្កើត អថេរថេរឈ្មោះ MY_VARIABLE មានតម្លៃ 123 - ប្រើ សំពាធការនៃឈ្មោះអថេរថេរដោយអក្សរធំ - ចៀសវិញ ការផ្លាស់ប្ដូរពេលក្រោយនៃតម្លៃនេះ អថេរតម្លៃថេរមានច្បាប់សំខាន់ពីរដែល៖ - អ្នកត្រូវផ្តល់តម្លៃឱ្យវា​ដើម្បី​ទៅមុខ – មិនអនុញ្ញាតឱ្យមានអថេរថេរថ្មានតម្លៃទេ! - អ្នកមិនអាចផ្លាស់ប្ដូរតម្លៃនោះបានទេ – JavaScript នឹងបង្ហាញកំហុស ប្រសិនបើអ្នកព្យាយាម។ មកមើលថាអ្វីកើតឡើង៖ តម្លៃសាមញ្ញ - ខាងក្រោមនេះមិនអនុញ្ញាត៖ ```javascript const PI = 3; PI = 4; // មិនអនុញ្ញាត ``` អ្វីដែលអ្នកត្រូវចងចាំ៖ - ព្យាយាម នៅក្នុងការប្ដូរតម្លៃថេរនឹងបង្កើតកំហុស - ការពារ តម្លៃសំខាន់ៗពីការផ្លាស់ប្ដូរចៃដន្យ - ធានា ថាតម្លៃនៅតែប្រែប្រួលទៅតាមកម្មវិធីរបស់អ្នក ការយោងអត្ថៈត្រូវបានការពារ - ខាងក្រោមមិនអនុញ្ញាត៖ ```javascript const obj = { a: 3 }; obj = { b: 5 } // មិនអនុញ្ញាត ``` យល់អំពីគំនិតទាំងនេះ៖ - ការពារ ការជំនួសអ្វីមួយទាំងមូលជាមួយវត្ថុថ្មី - ការពារ ការយោងទៅវត្ថុដើម - រក្សា អត្តសញ្ញាណវត្ថុក្នុងអង្គចងចាំ តម្លៃវត្ថុមិនត្រូវបានការពារ - ខាងក្រោមនេះអនុញ្ញាត៖ ```javascript const obj = { a: 3 }; obj.a = 5; // អនុញ្ញាត ``` បំបែកអ្វីដែលកើតឡើង៖ - កែប្រែ តម្លៃគុណលក្ខណៈនៅក្នុងវត្ថុ - រក្សា ការយោងវត្ថុដដែល - បង្ហាញ ថាតម្លៃក្នុងវត្ថុខុសប្លែកក្នុងខណៈដែលការយោងនៅតែថេរ > ចំណាំ const មានន័យថាការយោងត្រូវបានការពារ ពីការលៃតម្រូវឡើងវិញ។ តែតម្លៃខ្លួនវាមិនមែន _មិនអាចប្ដូរបាន_ ទេ ហើយមានឱកាសប្ដូរ បាន ជាពិសេសបើវាជារចនាសម្ព័នស្មុគស្មាញដូចជា វត្ថុ។ ## ប្រភេទទិន្នន័យ JavaScript រៀបចំព័ត៌មានជាក្រុមប្រភេទឈ្មោះថាប្រភេទទិន្នន័យ។ គំនិតនេះស្រដៀងនឹងវិធីសាស្ត្រដែលអ្នកប្រើប្រាស់ចំណេះដឹងនៅក្នុងអស្ចារ្យកាលពីបុរាណ – អារីស្តូទែលបានបែងចែកចំណេះដឹងចេញជាប្រភេទនានា ដើម្បីយល់ថាគោលការណ៍តុល្យភាពមិនអាចប្រើបានស្មើគ្នានឹងកាលៈទេសៈជាកវីត្យា គណិតវិទ្យា និងទស្សនវិជ្ជាបរិស្ថាន។ ប្រភេទទិន្នន័យមានសារៈសំខាន់ដោយសារតែប្រតិបត្តិការផ្សេងៗត្រូវការប្រភេទព័ត៌មានខុសៗគ្នា។ ដូចជាអ្នកមិនអាចធ្វើកំណត់លេខលើឈ្មោះរបស់មនុស្ស ឬចាក់សរសេរតាមលំដាប់អក្សរនៃសមីការគណិតវិទ្យា ទេ JavaScript រួមបញ្ចូលគ្នានូវប្រភេទទិន្នន័យត្រឹមត្រូវសម្រាប់ប្រតិបត្តិការ។ ការយល់ដឹងនេះធានាថាគ្មានកំហុស និងធ្វើឱ្យកូដរបស់អ្នកមានភាពទុកចិត្តបាន។ អថេរអាចរក្សាប្រភេទតម្លៃខុសៗគ្នាច្រើន ដូចជាលេខ និងអត្ថបទ។ ប្រភេទតម្លៃទាំងនោះត្រូវបានគេស្គាល់ថា ប្រភេទទិន្នន័យ។ ប្រភេទទិន្នន័យជាផ្នែកសំខាន់នៃការអភិវឌ្ឍន៍កម្មវិធី ព្រោះវាជួយអ្នកអភិវឌ្ឍកំណត់របៀបសរសេរកូដ និងរបៀបកម្មវិធីរត់។ លើសពីនេះ ប្រភេទទិន្នន័យខ្លះមានលក្ខណៈពិសេសដើម្បីជួយបម្លែង ឬស្រាវជ្រាវបន្ថែមលើតម្លៃ។ ✅ ប្រភេទទិន្នន័យគេស្គាល់ថាជា JavaScript data primitives ព្រោះវាជាប្រភេទទិន្នន័យទាបបំផុតដែលភាសានេះផ្តល់។ មានប្រភេទ data primitives ចំនួន 7៖ string, number, bigint, boolean, undefined, null និង symbol។ ចំណាយពេលយ៉ាងតិចមួយនាទីក្នុងការស្វែងយល់ថា​ណា​ជា​អ្វីនៃ primitive ទាំងនេះ។ តើ zebra មានន័យដូចម្តេច? តើ 0 ដូចម្តេច? តើ true វានៅដូចម្តេច? ### លេខ លេខជាប្រភេទទិន្នន័យមួយងាយបំផុតនៅក្នុង JavaScript។ មិនថាអ្នកកំពុងកាន់តែនៅតែលេខគត់ដូចជា 42, លេខទសភាគដូចជា 3.14 ឬលេខអវិជ្ជមានដូចជា -5, JavaScript គ្រប់គ្រងវាជាមួយគ្នា។ ចងចាំអថេររបស់យើងពីមុនទេ? លេខ 123 ដែលយើងបានរក្សាទុកគឺជាប្រភេទទិន្នន័យលេខ: លក្ខណៈសំខាន់៖ - JavaScript ដឹងស្រាប់ពីតម្លៃជាលេខ - អ្នកអាចធ្វើប្រតិបត្តិការគណិតលើអថេរទាំងនេះ - មិនត្រូវប្រកាសប្រភេទយ៉ាងច្បាស់ជារឿយៗ អថេរអាចរក្សាប្រភេទលេខទាំងឡាយ រួមបញ្ចូលទាំងលេខទសភាគ និងលេខអវិជ្ជមាន។ លេខអាចប្រើជាមួយត្រៀមគណិតបាន នៅក្នុងផ្នែក operator គណិតវិទ្យា។ ### អុីផារ​គណិតវិទ្យា អុីផារ​គណិតវិទ្យាអនុញ្ញាតឲ្យអ្នកធ្វើគណនា​គណិតវិទ្យានៅក្នុង JavaScript។ អុីផារនេះព្រមទាំងគោលការណ៍ដូចជារូបសញ្ញាដែលបានប្រើប្រាស់ជាយូរមកហើយ ដូចជា Al-Khwarizmi ដែលបានបង្កើតសម្គាល់ជីវិតមាត្រដ្ឋាន។ អុីផារធ្វើការដូចអ្នករំពឹងពីគណិតវិទ្យាបែបបុរាណ៖ បូកសម្រាប់បូក, ដកសម្រាប់ដក និងដូច្នោះ។ មានប្រភេទអុីផារមួយចំនួនដើម្បីប្រើការប្រតិបត្តិការ គ្រោងក្នុងតារាងខាងក្រោម៖ ✅ ព្យាយាមមើល! សាកល្បងប្រតិបត្តិកាអុីផារគណិតវិទ្យា នៅទំព័របញ្ជាររបស់កម្មវិធីរុករករបស់អ្នក។ តើលទ្ធផលធ្វើឲ្យអ្នកភ្ញាក់ផ្អើលទេ? ### 🧮 ត្រួតពិនិត្យជំនាញគណិតវិទ្យា៖ គណនាជាថ្មី សាកល្បងភាពយល់ពីអុីផារគណិតវិទ្យារបស់អ្នក៖ - តើខុសគ្នាអ្វីរវាង / (ចែក) និង % (បំណុល)? - តើអ្នកអាចទាយថា 10 % 3 មានតម្លៃប៉ុន្មាន? (ការជួយ៖ វាមិនមែន 3.33...) - ហេតុអ្វីបានជា អុីផារបំណុលមានប្រយោជន៍នៅក្នុងកម្មវិធី? ### សរសេរ នៅក្នុង JavaScript ទិន្នន័យអត្ថបទត្រូវបានបង្ហាញជាសរសេរ។ ពាក្យ "string" មកពីគំនិតអក្សរតោនបន្ទាត់គ្នា ដូចជាវិធីសាស្ត្រដែលអ្នកសរសេរបុរាណភាគច្រើនបានភ្ជាប់អក្សរច្រើនគ្នា ដើម្បីបង្កើតពាក្យ និងប្រយោគនៅក្នុងសៀវភៅពុម្ពអក្សររបស់ពួកគេ។ សរសេរជាគន្លងមួយសំខាន់សម្រាប់ការអភិវឌ្ឍបណ្តាញ។ រាល់អត្ថបទបង្ហាញនៅលើគេហទំព័រ – ឈ្មោះអ្នកប្រើប្រាស់, ស្លាកប៊ូតុង, សារកំហុស, មាតិកា – គឺត្រូវបានប្រើជាទិន្នន័យសរសេរ។ ការយល់ដឹងពី string គឺសំខាន់សម្រាប់បង្កើតផ្ទាំងប្រើប្រាស់។ សរសេរជាសំណុំតួអក្សរដែលស្ថិតនៅចន្លោះសញ្ញាដកស្រង់ម្ដងឬពីរដង។ យល់ពីគំនិតទាំងនេះ៖ - ប្រើ ឬសម្រាប់សញ្ញាដកស្រង់ ' ឬសញ្ញាដកស្រង់ពីរ " ដើម្បីកំណត់ string - រក្សា ទិន្នន័យអត្ថបទដែលអាចមានអក្សរ លេខ និងនិមិត្តសញ្ញា - ផ្ដល់ តម្លៃ string ទៅអថេរដើម្បីប្រើនៅក្រោយ - ទាមទារ អក្សាសញ្ញាដកស្រង់ ដើម្បីបន្សល់នូវអត្ថបទពីឈ្មោះអថេរ ចងចាំប្រើអក្សាសញ្ញាដកស្រង់នៅពេលសរសេរសរសេរ មិនដូច្នោះ JavaScript នឹងគិតថាវាជាឈ្មោះអថេរ។ ### ការតម្រៀបសរសេរ ការគ្រប់គ្រង string អនុញ្ញាតឲ្យអ្នកភ្ជាប់ធាតុអត្ថបទផ្សេងៗ រួមបញ្ចូលអថេរ និងបង្កើតមាតិកាដោយឥតខ្ជិល ដែលឆ្លើយតបនឹងស្ថានភាពកម្មវិធី។ វិធីនេះអាចជួយអ្នកបង្កើតអត្ថបទដោយប្រើកម្មវិធី។ ពេលជាច្រើន អ្នកត្រូវភ្ជាប់ string ច្រើននៅជាមួយគ្នា – ការប្រតិបត្តិប្រភេទនេះហៅថា concatenation។ ដើម្បី ភ្ជាប់ string ពីពីរឬច្រើន ឬភ្ជាប់វាជាមួយគ្នា ប្រើអុីផារ +។ ជំហ៊ានដោយជំហ៊ាន អ្វីដែលកំពុងកើតឡើងមានដូចខាងក្រោម៖ - បញ្ចូល ខ្សែអក្សរច្រើនជាមួយនឹងថេរ + - ភ្ជាប់ ខ្សែអក្សរដោយផ្ទាល់គ្នាដោយគ្មានចន្លោះនៅក្នុងឧទាហរណ៍ដំបូង - បន្ថែម តួអក្សរចន្លោះ " " នៅចន្លោះខ្សែអក្សរដើម្បីធ្វើឱ្យអានងាយ - បញ្ចូល អក្សរពិសេសដូចជា​សញ្ញាក្បៀស​(comma) ដើម្បីបង្កើតទ្រង់ទ្រាយត្រឹមត្រូវ ✅ មូលហេតុមិនល្មមថា 1 + 1 = 2 នៅក្នុង JavaScript មិនដូច '1' + '1' = 11? គិតពីវា។ តើម៉េចទៅ '1' + 1? អក្សរទម្លាប់ គឺជាវិធីផ្សេងសម្រាប់បង្កើតខ្សែអក្សរ លុះត្រាតែផ្ទេរកូដមិនប្រើសញ្ញាសម្ងាត់ទេ ត្រូវប្រើសញ្ញាគ្រាប់ត្រចៀក backtick ។ អ្វីក៏ដោយដែលមិនមែនជាអក្សរប្រកបការ ត្រូវតែដាក់ក្នុងកន្លែងចាក់បញ្ចូល ${ } ។ វាផ្តល់នូវអថេរណាមួយដែលអាចជាខ្សែអក្សរបាន។ ឱ្យយើងយល់ពីផ្នែកនីមួយៗ៖ - ប្រើ សញ្ញាគ្រាប់ត្រចៀក ` `` ជំនួសសញ្ញាសម្ងាត់ធម្មតា ដើម្បីបង្កើតអក្សរទម្លាប់ - បញ្ចូល អថេរដោយផ្ទាល់ប្រើ ${} រចនាសម្ព័ន្ធកន្លែងចាក់បញ្ចូល - រក្សា ចន្លោះ និងទ្រង់ទ្រាយដូចដែលបានសរសេរតែម្តង - ផ្តល់ វិធីសាស្រ្តដ៏ស្អាតសម្រាប់បង្កើតខ្សែអក្សរលំបាកជាមួយអថេរបានយ៉ាងងាយស្រួល អ្នកអាចសម្រេចបានគោលបំណងទ្រង់ទាយរបស់អ្នកជាមួយវិធីណាមួយក៏បាន ប៉ុន្តែអក្សរទម្លាប់នឹងគោរពចន្លោះ និងបំបែកបន្ទាត់។ ✅ តើពេលណាអ្នកនឹងប្រើអក្សរទម្លាប់បើប្រៀបធៀបនឹងខ្សែអក្សរធម្មតា? ### 🔤 ពិនិត្យជំនាញខ្សែអក្សរ៖ ភាពទំនុកចិត្តចំពោះការកែប្រែអត្ថបទ វាយតម្លៃជំនាញខ្សែអក្សររបស់អ្នក៖ - តើអ្នកអាចបញ្ជាក់ថាហេតុអ្វី '1' + '1' ធំស្មើ '11' មិនមែនជា 2? - វិធីសាស្រ្តខ្សែអក្សរណាមួយដែលអ្នកគិតថាអាចអានយ៉ាងស្រួល៖ ការភ្ជាប់ឬអក្សរទម្លាប់? - តើពីរប់អ្វីកើតឡើង ប្រសិនបើអ្នកភ្លេចសញ្ញាសម្ងាត់នៅជុំវិញខ្សែអក្សរ? ### តម្លៃប៊ូល តម្លៃប៊ូលតំណាងឱ្យទ្រង់ទ្រង់ទំហំធម្មតាសម្រាប់ទិន្នន័យ៖ វាអាចផ្ទុកតែតម្លៃពីរតែមួយគឺ true ឬ false ។ ប្រព័ន្ធតុល្យកម្មទ្រង់ទ្រាយនេះគឺស្រមៃមកពីកិច្ចការរបស់ George Boole អ្នកគណិតវិទ្យាឆ្នាំ 19 ដែលបានអភិវឌ្ឍលីហ្សធម្មតាប៊ូល។ ទោះបីវាងាយស្រួលក៏ដោយ តម្លៃប៊ូលគឺសំខាន់សម្រាប់តុល្យកម្មកម្មវិធី។ វាអាចឲ្យកូដរបស់អ្នកបង្កើតសេចក្តីសម្រេចដោយផ្អែកលើលក្ខខណ្ឌ - ឬរបៀបមិនថាអ្នកប្រើបានចូលប្រើ រឺប៊ូតុងត្រូវបានចុច ឬលក្ខណៈពិសេសណាមួយត្រូវបានបំពេញ។ តម្លៃប៊ូលអាចមានតែពីរតម្លៃគត់គឺ true ឬ false ។ វាអាចជួយបង្កើតសេចក្តីសម្រេចថាត្រង់បន្ទាត់ខ្សែអក្សរណាមួយគួរត្រូវបានបើកបរ័ណពេលលក្ខខណ្ឌជាក់លាក់បានបំពេញ។ នៅក្នុងករណីជាច្រើន, operators ជួយកំណត់តម្លៃប៊ូល ហើយអ្នកភាគច្រើននឹងបានទទួល និងសរសេរអថេរទាំងនេះគឺត្រូវបានចាប់ផ្តើម ឬតម្លៃរបស់វាត្រូវបានបួនបញ្ចូលជាមួយ operator។ នៅលើនេះយើងបាន៖ - បង្កើត អថេរមួយដែលផ្ទុកតម្លៃប៊ូល true - បង្ហាញ របៀបផ្ទុកតម្លៃប៊ូល false - ប្រើ ពាក្យគន្លឹះតូចត្រឹមត្រូវ true និង false (មិនមានសញ្ញាសម្ងាត់ទេ) - រៀបចំ អថេរទាំងនេះសម្រាប់ប្រើក្នុងពាក្យបញ្ជារជាលក្ខខណ្ឌ ✅ អថេរមួយអាចត្រូវបានរាប់ចុះថា 'ម៉ោងត្រឹមត្រូវ' ប្រសិនបើវាបញ្ចេញតម្លៃប៊ូល true ។ គួរឲ្យចាប់អារម្មណ៍ នៅក្នុង JavaScript, តម្លៃទាំងអស់គឺ ម៉ោងត្រឹមត្រូវ លើកលែងតែបានកំណត់ឲ្យជាតម្លៃមិនត្រឹមត្រូវ ។ ### 🎯 ពិនិត្យតុល្យកម្មប៊ូល៖ ជំនាញក្នុងការសម្រេចចិត្ត សាកល្បងការយល់ដឹងរបស់អ្នកអំពីប៊ូល៖ - ហេតុអ្វីតើយើងគិតថា JavaScript មានតម្លៃ "ម៉ោងត្រឹមត្រូវ" និង "មិនត្រឹមត្រូវ" ពីលើតម្លៃ true និង false បាន? - តើអ្នកអាចទាយថាតម្លៃណាមួយពីខាងក្រោមគឺមិនត្រឹមត្រូវ៖ 0, "0", [], "false"? - តម្លៃប៊ូលតើអាចមានប្រយោជន៍យ៉ាងដូចម្តេចក្នុងការគ្រប់គ្រងចរន្តកម្មវិធី? --- ## 📊 សង្ខេបឧបករណ៍ប្រើប្រាស់ប្រភេទទិន្នន័យរបស់អ្នក ## ប្រយុទ្ធ GitHub Copilot Agent 🚀 ប្រើម៉ូដ Agent ដើម្បីបញ្ចប់បញ្ហាដូចខាងក្រោម៖ ពិពណ៌នា៖ បង្កើតកម្មវិធីគ្រប់គ្រងព័ត៌មានផ្ទាល់ខ្លួនដែលបង្ហាញប្រភេទទិន្នន័យ JavaScript ទាំងអស់ដែលអ្នកបានរៀនក្នុងមេរៀននេះ ពេលដោះស្រាយស្ថានភាពទិន្នន័យពិតប្រាកដ។ ចំណាំ៖ បង្កើតកម្មវិធី JavaScript ដែលបង្កើតវត្ថុប្រវត្តិរូបអ្នកប្រើមួយ រួមមាន៖ ឈ្មោះមនុស្ស (ខ្សែអក្សរ), អាយុ (លេខ), ស្ថានភាពជាសិស្ស (ប៊ូល), ពណ៌ដែលចូលចិត្តជាអារ៉េ, និងអាសយដ្ឋានជាវត្ថុមានផ្លូវ ទីក្រុង និងលេខសំបុត្រ។ រួមបញ្ចូលមុខងារសម្រាប់បង្ហាញព័ត៌មានប្រវត្តិរូប និងធ្វើបច្ចុប្បន្នភាពវាលឯកទេស ខណ:បង្ហាញពីការភ្ជាប់ខ្សែអក្សរ, អក្សរទម្លាប់, ប្រតិបត្ដិការសម្រឹមជាមួយអាយុ និងតុល្យកម្មប៊ូលសម្រាប់ស្ថានភាពជាសិស្ស។ សូមស្វែងយល់បន្ថែមអំពី ម៉ូដ agent ទីនេះ។ ## 🚀 ប្រយុទ្ធ JavaScript មានអាកប្បកិរិយាខ្លះៗដែលអាចបណ្តាលឲ្យអ្នកអភិវឌ្ឍមានការភាន់ច្រឡំ។ នេះគឺជាឧទាហរណ៍បុរាណមួយសម្រាប់ស្វែងយល់៖ សាកល្បងវាយបញ្ចូលនៅក្នុងកុងសុលរុករករបស់អ្នក៖ let age = 1; let Age = 2; age == Age ហើយការពិនិត្យលទ្ធផល។ វាបង្ហាញ false – តើអាចកំណត់ហេតុអ្វីបាន? នេះជាការបង្ហាញពីអាកប្បកិរិយាជាច្រើននៃ JavaScript ដែលគួរតែយល់ដឹង។ ការមានភាពស្គាល់ល្អនឹងចំណុចប្លែកៗទាំងនេះ បង្កើតឱ្យអ្នកសរសេរកូដបានទុកចិត្តចំពោះការអភិវឌ្ឍ និងងាយស្រួលដោះស្រាយបញ្ហា។ ## សំណួរប្រឡងបន្ទាប់មេរៀន សំណួរប្រឡងបន្ទាប់មេរៀន ## បរិច្ឆេទ និងរៀនផ្ទាល់ខ្លួន មើលតារាង អ្នកហាត់ប្រើប្រាស់ JavaScript នេះ ហើយសាកល្បងមួយ។ តើអ្នកបានរៀនអ្វីខ្លះ? ## មុខវិជ្ជា ហាត់ប្រើប្រាស់ប្រភេទទិន្នន័យ ## 🚀 រយៈពេលអ្នកជំនាញប្រភេទទិន្នន័យ JavaScript របស់អ្នក ### ⚡ អ្វីដែលអ្នកអាចធ្វើបានក្នុង 5 នាទីបន្ទាប់ - [ ] បើកកុងសុលរុករករបស់អ្នក និងបង្កើតអថេរចំនួន 3 ដែលមានប្រភេទទិន្នន័យខុសគ្នា - [ ] សាកល្បងពិចារណាបញ្ហា៖ let age = 1; let Age = 2; age == Age ហើយស្វែងរកហេតុផលមកថាតើម៉ាកម្មវិធីបង្ហាញ false - [ ] ហាត់ភ្ជាប់ខ្សែអក្សរជាមួយឈ្មោះ និងលេខដែលអ្នកចូលចិត្ត - [ ] សាកល្បងអ្វីកើតឡើងពេលអ្នកបន្ថែមលេខទៅខ្សែអក្សរ ### 🎯 អ្វីដែលអ្នកអាចសម្រេចបានក្នុងម៉ោងនេះ - [ ] បញ្ចប់សំណួរប្រឡងបន្ទាប់មេរៀន និងពិនិត្យមើលគំនិតពិបាកៗ - [ ] បង្កើតម៉ាស៊ីនគណនាតូចមួយសម្រាប់បូក លុប គុណ និង bahagi លេខពីរ - [ ] បង្កើតកម្មវិធីរៀបចំឈ្មោះសាមញ្ញដោយប្រើអក្សរទម្លាប់ - [ ] ស្វែងយល់ផ្សេងគ្នារវាងរបៀបប្រៀបធៀប == និង === - [ ] ហាត់បម្លែងរវាងប្រភេទទិន្នន័យផ្សេងៗ ### 📅 មូលដ្ឋាន JavaScript របស់អ្នករយៈពេលមួយសប្តាហ៍ - [ ] បញ្ចប់មុខវិជ្ជាលើកត្រូវភាពទំនុកចិត្ត និងភាពច្នៃប្រឌិត - [ ] បង្កើតវត្ថុប្រវត្តិរូបផ្ទាល់ខ្លួនប្រើប្រភេទទិន្នន័យទាំងអស់បានរៀន - [ ] ហាត់ប្រាណជាមួយ ហាត់JavaScript ពី CSS-Tricks - [ ] បង្កើតកម្មវិធីត្រួតពិនិត្យទម្រង់សាមញ្ញប្រើតុល្យកម្មប៊ូល - [ ] សាកល្បងប្រភេទទិន្នន័យអារ៉េ និងវត្ថុនានា (ជាpreviewមេរៀននៅថ្ងៃក្រោយ) - [ ] ចូលរួមសហគមន៍ JavaScript ហើយសួរពីប្រភេទទិន្នន័យ ### 🌟 ការ​ធ្វើបំលែងរយៈពេលមួយខែ​របស់អ្នក - [ ] សមាសធាតុចំណេះដឹងប្រភេទទិន្នន័យទៅក្នុងគម្រោងកម្មវិធីធំនានា - [ ] យល់ដឹងពេលណា និងហេតុអ្វីត្រូវប្រើប្រភេទទិន្នន័យនិមួយៗក្នុងកម្មវិធីពិតប្រាកដ - [ ] ជួយអ្នកចាប់ផ្ដើមអ្នកដទៃយល់ដឹងអំពីមូលដ្ឋាន JavaScript - [ ] បង្កើតកម្មវិធីតូចមួយដែលគ្រប់គ្រងទិន្នន័យប្រភេទនានារបស់អ្នកប្រើ - [ ] ស្វែងយល់អំពីមូលដ្ឋានប្រភេទទិន្នន័យកម្រិតខ្ពស់ដូចជា coercion ប្រភេទ និង equality ច្បាស់លាស់ - [ ] ឧបត្ថម្ភគម្រោង JavaScript ប្រភពបើកដោយការកែលម្អឯកសារ ### 🧠 ការត្រួតពិនិត្យជំនាញប្រភេទទិន្នន័យជាការបញ្ចប់ អបអរសាទរសាលាកម្មវិធី JavaScript របស់អ្នក៖ - ប្រភេទទិន្នន័យណាដែលធ្វើឲ្យអ្នកភ្ញាក់ផ្អើលបំផុតតាមអាកប្បកិរិយារបស់វា? - តើអ្នកមានភាពសុខមាលអ្វីខ្លះក្នុងការពន្យល់អថេរនិងថេរ ដល់មិត្តម្នាក់? - អ្វីជាផ្នែកគួរអោយចាប់អារម្មណ៍បំផុតដែលអ្នកបានរកឃើញអំពីប្រភេទទិន្នន័យ JavaScript? - តើកម្មវិធីជាក់លាក់ណាដែលអ្នកអាចគូរតាមដានជាមួយមូលដ្ឋានទាំងនេះ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ការបដិសេធ: ឯកសារនេះបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលយើងខិតខំប្រឹងប្រែងសម្រាប់ភាពត្រឹមត្រូវ សូមជ្រាបថាការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាទំនើបរបស់វាគួរត្រូវបានគេកាន់ថាជាឧទ្ទម្ភមូលដ្ឋានដែលត្រឹមត្រូវ។ សម្រាប់ព័ត៌មានដែលមានសារៈសំខាន់ ការបកប្រែដោយមនុស្សជំនាញត្រូវបានផ្តល់អនុសាសន៍។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការយល់បំភ្លេចណាមួយដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

មូលដ្ឋាន JavaScript៖ វិធីសាស្រ្ត និង פונקציות

## សំណួរប្រឡងមុនវគ្គសិក្សា សំណួរប្រឡងមុនវគ្គសិក្សា ការសរសេរកូដដដែលៗជូនគ្នាជាច្រើនជាផ្នែកមួយនៃការសង្ស័យដែលកើតមានជានិច្ចក្នុងកម្មវិធីកម្មវិធី។ פונקציות ធ្វើអោយបញ្ហានេះជាស្រេចដោយអនុញ្ញាតឱ្យអ្នកកញ្ចប់កូដទៅជាដុំដែលអាចប្រើឡើងវិញ។ គិតពី פונקציותដូចជា ផ្នែកត្រៀមរួចដែលធ្វើឱ្យបន្ទាត់ប្រមូលផ្តុំរបស់ Henry Ford ក្លាយទៅជាគន្លងប្លែក – ពេលដែលអ្នកបង្កើតធាតុប្រតិបត្តិការដែលទុកចិត្តបាន អ្នកអាចប្រើវាក្នុងកន្លែងណាមួយដែលត្រូវការ ដោយមិនចាំបាច់សង់ឡើងវិញពីដើម។ פונקציות អនុញ្ញាតឱ្យអ្នកកញ្ចប់ផ្នែកនៃកូដ ដើម្បីអ្នកអាចប្រើឡើងវិញនៅក្នុងកម្មវិធីរបស់អ្នក។ ជំនួសការចម្លងនិងភ្ជាប់លក្ខណៈដូចគ្នាតាមគ្រប់កន្លែង អ្នកអាចបង្កើត פונקציה មួយដងហើយហៅវាតាមពេលត្រូវការ។ វិធីនេះរក្សាកូដរបស់អ្នកឲ្យមានភាពស្វាក់ស្វាញ និងធ្វើឲ្យការអាប់ដេតកូដកាន់តែងាយស្រួល។ នៅក្នុងមេរៀននេះ អ្នកនឹងរៀនពីរបៀបបង្កើត פונקציות រួមបញ្ចូលការផ្ញើព័ត៌មានទៅកាន់ពួកវា ហើយទទួលបានលទ្ធផលដែលមានប្រយោជន៍ត្រឡប់មកវិញ។ អ្នកនឹងរកឃើញភាពខុសគ្នារវាង פונקציות និងវិធីសាស្រ្ត។ អ្នកនឹងរៀនពីស្ទីលនៃសំណុំសន្ទស្សន៍ទំនើប និងមើលវិធីដែល פונקציות អាចធ្វើការជាមួយ פונקציותផ្សេងទៀត។ យើងនឹងបង្កើតគំនិតទាំងនេះជាជំហានៗ។ [](https://youtube.com/watch?v=XgKsD6Zwvlc "វិធីសាស្រ្ត និង פונקציות") ## פונקציות פונקציה គឺជាដុំកូដដែលមានមុខងារផ្សេងៗដោយខ្លួនឯង។ វាអាចផ្លាស់ប្តូរលក្ខណៈដែលអ្នកអាចរត់កំណត់ពេលណាមួយបាន។ ជំនួសការសរសេរកូដដូចគ្នាជារយៈពេលជាច្រើន នៅក្នុងកម្មវិធីរបស់អ្នក អ្នកអាចកញ្ចប់វាទៅក្នុង פונקציה ហើយហៅ פונקציהនោះនៅពេលដែលអ្នកត្រូវការ វិធីនេះរក្សាកូដរបស់អ្នកឲ្យស្អាត និងធ្វើឲ្យការអាប់ដេតកូដកាន់តែងាយស្រួល។ គិតពីបញ្ហាការជួសជុល ប្រសិនបើអ្នកត្រូវប្ដូរឡូវយ៉ាងដែលត្រូវបាក់បែកនៅលើទីតាំងផ្សេងៗ ២០ កន្លែងក្នុងបណ្ណាល័យកូដរបស់អ្នក។ ការផ្ដល់ឈ្មោះមួយដ៏ច្បាស់លាស់ដល់ פונקציות របស់អ្នកគឺចាំបាច់ណាស់។ פונקציה ដែលមានឈ្មោះល្អនឹងធ្វើឱ្យអ្នកយល់ពីគោលបំណងរបស់វាប្រកបដោយច្បាស់លាស់ – ពេលដែលអ្នកឃើញ cancelTimer() អ្នកភ្លាមៗយល់ថាវាធ្វើអ្វី ដូចដើមដែលប៊ូតុងដែលមានស្លាកច្បាស់លាស់ប្រាប់អ្នកយ៉ាងច្បាស់ពីអ្វីដែលនឹងកើតឡើងពេលអ្នកចុចវា។ ## ការបង្កើត និងហៅ פונקציה មកមើលរបៀបបង្កើត פונקציה។ វាកាត់តាមលំនាំដូចគ្នា៖ ចែកចាយរឿងនេះ៖ - ពាក្យគន្លឹះ function ប្រាប់ JavaScript ថា "សួស្ដី, ខ្ញុំកំពុងបង្កើត פונקציה!" - nameOfFunction គឺជាទីតាំងដែលអ្នកផ្ដល់ឈ្មោះបរិយាយសម្រាប់ פונקציה របស់អ្នក - បុគ្គលិក () ជាទីតាំងដែលអ្នកអាចបញ្ចូលប៉ារ៉ាម៉ែត្រ (យើងនឹងអស់ពេលចាប់ផ្ដើមលើនេះ) - គូក {} មានកូដពិតប្រាកដដែលរត់ពេលដែលអ្នកហៅ פונקציה មកបង្កើត פונקציהស្វាគមន៍សាមញ្ញមួយដើម្បីឲ្យមើលសកម្មភាពនេះ៖ פונקציהនេះបោះពុម្ព "Hello, world!" ទៅកាន់កុងសូល។ ពេលអ្នកបានកំណត់វា អ្នកអាចប្រើវាច្រើនដងតាមតម្រូវការ។ ដើម្បីអនុវត្ត (ឬ "ហៅ") פונקציה របស់អ្នក សរសេរឈ្មោះរបស់វាតាមបន្ទាប់ដោយបុគ្គលិក។ JavaScript អាចអនុញ្ញាតឱ្យអ្នកកំណត់ פונקציה មុន ឬក្រោយពេលហៅវា – ឧបករណ៍ JavaScript នឹងដោះស្រាយបញ្ហាលំដាប់អនុវត្តន៍។ ពេលអ្នករត់បន្ទាត់នេះ វានឹងអនុវត្តកូដទាំងអស់នៅក្នុង פונקציה displayGreeting របស់អ្នក បង្ហាញ "Hello, world!" នៅក្នុងកុងសូលរបស់កម្មវិធីរុករករបស់អ្នក។ អ្នកអាចហៅ פונकציהនេះម្តងហើយម្តងទៀត។ ### 🧠 ត្រួតពិនិត្យមូលធន פונקציה៖ កែលម្អ פונקציהដំបូងរបស់អ្នក ឲ្យយើងមើលថាតើអ្នកមានអារម្មណ៍យ៉ាងដូចម្តេចចំពោះ פונקציהមូលដ្ឋាន៖ - អ្នកអាចពន្យល់ថាហេតុអ្វីយើងប្រើគូក {} នៅក្នុងការកំណត់ פונקציה? - តើអ្វីកើតឡើងប្រសិនបើអ្នកសរសេរ displayGreeting ដោយគ្មានគូក? - ហេតុអ្វីបានជា អ្នកចង់ហៅ פונקציהដដែលជាច្រើនដង? ### នីតិវិធីល្អសម្រាប់ פונקציות នេះជាគន្លឹះពីរបៀបជួយអ្នកសរសេរ פונקציותល្អ៖ - ផ្ដល់ឈ្មោះច្បាស់លាស់និងអធិប្បាយចំពោះ פונקציות – អ្នកនៅពេលអនាគតនឹងអរគុណអ្នក! - ប្រើ camelCasing សម្រាប់ឈ្មោះពាក្យច្រើន (ដូចជា calculateTotal ជំនួស calculate_total) - រក្សា פונקציה នីតិវិធីមួយផ្ដោតលើរឿងមួយឲ្យយ៉ាងល្អ ## ផ្ញើព័ត៌មានទៅ פונקציה פונקציה displayGreeting របស់យើងមានកំណត់ – វាអាចបង្ហាញបានត្រឹមតែ "Hello, world!" សម្រាប់គ្រប់គ្នា។ ប៉ារ៉ាម៉ែត្រ អនុញ្ញាតិឱ្យយើងធ្វើឲ្យ פונקציות មានភាពបត់បែននិងមានប្រយោជន៍។ ប៉ារ៉ាម៉ែត្រ ដូចជាតំណាងកន្លែងដែលអ្នកអាចបញ្ចូលតម្លៃផ្សេងៗគ្នា រៀងរាល់ពេលដែលអ្នកប្រើ פונקציה។ ម៉្យាងវិញ, פונקציהដដែល អាចធ្វើការជាមួយព័ត៌មានផ្សេងៗគ្នា ក្នុងម្តងហៅម្តង។ អ្នករាយប៉ារ៉ាម៉ែត្រ ក្នុងបុគ្គលិកនៅពេលដែលអ្នកកំណត់ פונקציה របស់អ្នក ដោយបំបែកប៉ារ៉ាម៉ែត្រច្រើនជាក្បៀស: ប៉ារ៉ាម៉ែត្រ​​​មួយៗដូចជាតំណាងកន្លែង – ពេលដែលនរណាម្នាក់ហៅ פונקציה របស់អ្នក ពួកគេនឹងផ្តល់តម្លៃពិតដែលដាក់ចូលក្រៅកន្លែងទាំងនេះ។ មកផ្លាស់ប្តូរប פונקציהស្វាគមន៍ របស់យើង ដោយទទួលឈ្មោះរបស់អ្នកណាម្នាក់៖ ហើយសូមសង្កេតថាយើងកំពុងប្រើ backticks (` `) និង ${}` ដើម្បីបញ្ចូលឈ្មោះចូលទៅក្នុងសារ ព្រមទាំងច្រើនគឺហៅថា template literal និងវាជាវិធីពិតជាសម្បូរបែបក្នុងការបង្កើតខ្សែអក្សរដោយមានអថេរចំរូងក្នុង។ ឥឡូវនេះ ពេលហៅ פונקציה អ្នកអាចផ្ញើឈ្មោះណាមួយ: JavaScript ទទួល string 'Christopher' កំណត់ទៅប៉ារ៉ាម៉ែត្រ name ហើយបង្កើតសារផ្ទាល់ខ្លួនថា "Hello, Christopher!" ## តម្លៃផ្ទាល់ខ្លួនដើម តើយើងចង់អោយប៉ារ៉ាម៉ែត្រមួយចំនួនជាជម្រើសផងដែរ? នោះគឺជាពេលតម្លៃផ្ទាល់ខ្លួនដើមចូលមកចលនា។ 假设 យើងចង់អោយមនុស្សអាចប្តូរពាក្យស្វាគមន៍បាន ប៉ុន្តែប្រសិនបើពួកគេចង់មិនបញ្ជាក់យ៉ាងណា យើងនឹងប្រើអក្ខរកម្ម "Hello" ជាការទម្លាប់។ អ្នកអាចកំណត់តម្លៃផ្ទាល់ខ្លួនដើមដោយប្រើសញ្ញាស្មើ = ដូចជាការកំណត់អថេរ។ នៅទីនេះ name ត្រូវការចាំបាច់ ប៉ុន្តែ salutation មានតម្លៃផ្ទាល់ខ្លួនជា 'Hello' ប្រសិនបើគ្មានអ្នកណាបញ្ជាក់សំណួរដទៃទៀត។ ឥឡូវ អ្នកអាចហៅ פונקציהនេះប្រើពីរបែបផ្សេងគ្នា៖ ក្នុងការហៅដំបូង JavaScript ប្រើ "Hello" ជាលំនាំដើម ពីព្រោះយើងមិនបានបញ្ជាក់ពាក្យស្វាគមន៍ណាមួយទេ។ លើកទី២ វាប្រើ "Hi" ដែលយើងកំណត់ផ្ទាល់ខ្លួនវិញ។ ភាពបត់បែននេះធ្វើឲ្យ פונקציות មានភាពអាចបត់បែនទៅតាមស្ថានភាពផ្សេងៗ។ ### 🎛️ ត្រួតពិនិត្យជំនាញប៉ារ៉ាម៉ែត្រ៖ ធ្វើឲ្យ פונקציות មានភាពបត់បែន សាកល្បងការយល់ដឹងរបស់អ្នកអំពីប៉ារ៉ាម៉ែត្រ៖ - តើប៉ារ៉ាម៉ែត្រ និងអាគុយម៉ង់ខុសគ្នាដូចម្តេច? - ហេតុអ្វីបានជា តម្លៃផ្ទាល់ខ្លួនដើមមានប្រយោជន៍ក្នុងកម្មវិធីពិតប្រាកដ? - អ្នកអាចទស្សនាបានទេថាអ្វីកើតឡើង ប្រសិនបើអ្នកផ្ញើអាគុយម៉ង់ច្រើនជាងប៉ារ៉ាម៉ែត្រមួយ? ## តម្លៃត្រឡប់ פונקציות របស់យើងមកនេះបានគ្រាន់តែបោះពុម្ពសារ ទៅកាន់កុងសូល ប៉ុន្តែក៏បើអ្នកចង់បាន פונקציה មួយ គណនា អ្វីមួយ ហើយផ្ដល់លទ្ធផលត្រឡប់មកវិញ? នេះជាកន្លែងដែល តម្លៃត្រឡប់ ចូលមក។ ជំនួសការបង្ហាញអ្វីមួយ פונקציה អាចផ្ដល់តម្លៃមួយដែលអ្នកអាចរក្សាទុកក្នុងអថេរឬប្រើនៅផ្នែកផ្សេងក្នុងកូដរបស់អ្នក។ ដើម្បីផ្ញើតម្លៃត្រឡប់ អ្នកប្រើពាក្យគន្លឹះ return ដោយបន្ទាប់មកគឺតម្លៃដែលអ្នកចង់ត្រឡប់: មានរឿងដ៏សំខាន់មួយ៖ ពេល פונקציה ឈ្លោះឃួបប្រយោល return វានឹងបញ្ឈប់រត់ភ្លាមៗ ហើយផ្ញើតម្លៃនោះទៅអ្នកហៅ។ មកកែប្រែ פונקציה ស្វាគមន៍ របស់យើងឲ្យត្រឡប់សារវិញ គឺមិនបោះពុម្ពវាឡើយ៖ ឥឡូវនេះ ផ្ទុយពីបោះពុម្ពសារ פונקציהនេះបង្កើតសារ ហើយផ្ញើវាទៅយើងវិញ។ ដើម្បីប្រើតម្លៃត្រឡប់ អ្នកអាចរក្សាទុកវាទៅក្នុងអថេរដូចជាតម្លៃមួយទៀត៖ ឥឡូវ greetingMessage មាន "Hello, Christopher" ហើយអ្នកអាចប្រើវាណាមួយក្នុងកូដរបស់អ្នក – ដើម្បីបង្ហាញវាលើគេហទំព័រ រួមបញ្ចូលវាទៅក្នុងអ៊ីមែល ឬផ្ញើវាទៅកាន់ פונקציהផ្សេងទៀត។ ### 🔄 ត្រួតពិនិត្យតម្លៃត្រឡប់៖ ទទួលលទ្ធផលវិញ វាយតម្លៃការយល់ដឹងរបស់អ្នកអំពីតម្លៃត្រឡប់៖ - តើកូដដែលនៅក្រោយពាក្យ return ចូលចិត្តកើតអ្វី? - ហេតុអ្វីបានជា តម្លៃចេញល្អជាងគ្រាន់តែបោះពុម្ពទៅកាន់Console? - פונקציה មួយអាចត្រឡប់តម្លៃប្រភេទផ្សេងៗ យ៉ាងដូចម្តេច (ខ្សែអក្សរ លេខ ប៊ុលលែន)? ## פונקציות ឲ្យជា ប៉ារ៉ាម៉ែត្រសម្រាប់ פונקציותផ្សេងទៀត פונקציות អាចផ្ញើទៅជា ប៉ារ៉ាម៉ែត្រសម្រាប់ פונקציותផ្សេងៗបាន។ ទស្សនៈនេះអាចលំបាកដំបូងប៉ុន្តែវាជាលក្ខណៈអនុញ្ញាតឱ្យមានលំនាំកម្មវិធីដែលបត់បែន។ លំនាំនេះគឺពេញនិយមច្រើនពេលដែលអ្នកចង់ប្រាប់ "ពេលមានអ្វីកើតឡើង សូមធ្វើរឿងនេះ។" ឧទាហរណ៍ "ពេលម៉ោងបញ្ចប់ ដំណើរការវា" ឬ "ពេលអ្នកប្រើចុចប៊ូតុង ហៅ פונקציהនេះ។" មកមើល setTimeout ដែលជាហើយ פונקציה ដែលរងចាំរយៈពេលមួយ ហើយបន្ទាប់មករត់កូដមួយ។ យើងត្រូវប្រាប់វាអ្វីដែលត្រូវរត់ – គន្លងល្អសម្រាប់ផ្ញើ פונקציה! សូមសាកល្បងកូដនេះ – បន្ទាប់ពី 3 វិនាទី អ្នកនឹងមើលឃើញសារ៖ សូមចំណាំថាយើងផ្ញើ displayDone (គ្មានបុគ្គលិក) ទៅ setTimeout។ យើងមិនហៅ פונקציהដោយផ្ទាល់ – យើងផ្ទេរវាទៅ setTimeout ហើយប្រាប់ថា "ហៅវាក្នុង 3 វិនាទី។" ### פונקציות អនុគ្រោះនាម ពេលខ្លះ អ្នកត្រូវការ פונקציה សម្រាប់រឿងមួយតែម្ដង ហើយមិនចង់ផ្ដល់ឈ្មោះសម្រាប់វា។ សូមគិតថា – ប្រសិនបើអ្នកប្រើ פונקציהតែម្តងហើយ ហេតុអ្វីបានចំលើយកូដរបស់អ្នកជាមួយឈ្មោះបន្ថែម? JavaScript អនុញ្ញាតឱ្យអ្នកបង្កើត פונקציות អនុគ្រោះនាម – פונקציותគ្មានឈ្មោះ ដែលអ្នកអាចកំណត់ត្រឹមស្រមោលកន្លែងដែលអ្នកចង់ប្រើវា។ នេះជារបៀបដែលយើងអាចកែប្រែឧទាហរណ៍ម៉ោងរបស់យើងដោយប្រើ פונקציה អនុគ្រោះនាម៖ វានាំឲ្យទទួលបានលទ្ធផលដូចគ្នា ប៉ុន្តែ פונקציה ត្រូវបានកំណត់ដោយផ្ទាល់នៅក្នុង ការហៅ setTimeout ហើយមិនទាមទារការបញ្ជាក់ פונקציה ផ្សេងទៀតនោះទេ។ ### פונקציות សម្រួលពាណិជ្ជកម្ម JavaScript នាទីថ្មី មានវិធីសាមញ្ញមួយក្នុងការសរសេរ פונקציות ហៅថា פונקציות សម្រួលពាណិជ្ជកម្ម។ អ្នកប្រើ => (ដែលមើលទៅដូចព្រួញ – យល់ទេ?) ហើយពេញនិយមជាមួយអ្នកអភិវឌ្ឍ។ פונקציות សម្រួលពាណិជ្ជកម្ម អាចអោយអ្នករំកិលពាក្យគន្លឹះ function ហើយសរសេរកូដអោយច្រើនសង្ខេប។ នេះជាឧទាហរណ៍ម៉ោងរបស់យើងប្រើ פונקציה សម្រួលពាណិជ្ជកម្ម៖ () គឺជាទីតាំងដែលប៉ារ៉ាម៉ែត្រនឹងនៅ (ទទេក្នុងករណីនេះ) បន្ទាប់មកមានព្រួញ => ហើយសរុបបន្ទាត់ខាងក្នុងនៅក្នុងគូក។ វាបង្កើតមុខងារតែមួយ ដោយសង្ខេបជាង។ ### ពេលណាដែលគួរប្រើវិធីសាស្រ្តនីមួយៗ ពេលណាដែលអ្នកគួរប្រើវិធីសាស្រ្តនីមួយៗ? គន្លឹះប្រតិបត្តិ៖ ប្រសិនបើអ្នកចង់ប្រើ פונקציה ម្តងច្រើន សូមផ្ដល់ឈ្មោះ និងកំណត់វាផ្សេងៗ។ ប្រសិនបើគឺសម្រាប់រឿងដែលមួយ ហៅ פונקציה អនុគ្រោះនាម។ ទាំង פונקציות សម្រួលពាណិជ្ជកម្ម និងហេតុបុព្វបទបុរាណជាជម្រើសត្រឹមត្រូវ ប៉ុន្តែ פונקציות សម្រួលពាណិជ្ជកម្មពេញនិយមនៅក្នុងកូដ JavaScript សព្វថ្ងៃ។ ### 🎨 ត្រួតពិនិត្យស្ទីល פונקציה៖ ជ្រើសរើសសន្ទស្សន៍ត្រឹមត្រូវ សាកល្បងការយល់ដឹង របស់អ្នកអំពីសន្ទស្សន៍៖ - ពេលណាអ្នកអាចចង់ប្រើ פונקציות សម្រួលពាណិជ្ជកម្ម ជាងសន្ទស្សន៍ פונקציה ទំនើប? - អត្ថប្រយោជន៍សំខាន់របស់ פונקציות អនុគ្រោះនាមគឺអ្វី? - អ្នកអាចនិយាយពីស្ថានភាពណាមួយដែល פונקציה មានឈ្មោះមានអត្ថប្រយោជន៍ជាង פונקציה អនុគ្រោះនាម? --- ## 🚀 ការប្រកួតប្រជែង តើអ្នកអាចប្រាប់បានក្នុងតួអក្សរមួយពីភាពខុសគ្នារវាង פונקציות និងវីធីសាស្រ្តទេ? សាកល្បងមើល! ## ការប្រកួតប្រជែង GitHub Copilot Agent 🚀 ប្រើរបៀបទំនាក់ទំនង Agent ដើម្បីបញ្ចប់ឧបាស្រ័យខាងក្រោម៖ ការពិពណ៌នា: បង្កើតបណ្ណាល័យឧបករណ៍។ פונקציות គណិតវិទ្យា ដែលបង្ហាញមុខងារផ្សេងៗនៃ פונקציה ក្នុងមេរៀននេះ រួមទាំងប៉ារ៉ាម៉ែត្រ, តម្លៃផ្ទាល់ខ្លួន, តម្លៃត្រឡប់ និង פונקציות សម្រួលពាណិជ្ជកម្ម។ ការបញ្ជូន: បង្កើតឯកសារ JavaScript ឈ្មោះ mathUtils.js ដែលមាន פונקציותដូចខាងក្រោម៖ 1. פונקציה add ដែលទទួលប៉ារ៉ាម៉ែត្រ ២ និងត្រឡប់គំនូសរបស់ពួកវា 2. פונקציה multiply មានតម្លៃប៉ារ៉ាម៉ែត្រដើម (ប៉ារ៉ាម៉ែត្រទី២មានតម្លៃត្រូវនៅ 1) 3. פונקציה សម្រួលពាណិជ្ជកម្ម square ដែលទទួលលេខមួយ និងត្រឡប់ការការ៉េរបស់វា 4. פונקציה calculate ដែលទទួល פונקציהផ្សេងទៀតជា ប៉ារ៉ាម៉ែត្រ និងលេខ ២ ហើយអនុវត្ត פונקציהទៅលើលេខទាំងពីរ 5. បង្ហាញពីការហៅ פונקציהនីមួយៗជាមួយករណីសាកល្បងសមរម្យ ស្វែងយល់បន្ថែមអំពី agent mode នៅទីនេះ។ ## សំណួរប្រឡងបន្ទាប់វគ្គសិក្សា សំណួរប្រឡងបន្ទាប់វគ្គសិក្សា ## ការត្រួតពិនិត្យ និងរៀនដោយខ្លួនឯង គួរពិនិត្យអានបន្តពី פונקציות សម្រួលពាណិជ្ជកម្ម ដែលពួកវាកាន់តែប្រើប្រាស់សូម្បីនៅក្នុងបណ្ណាល័យកូដ។ អនុវត្តសរសេរ פונקציה ហើយបន្ទាប់មកកែសម្រួលវាជាមួយសន្ទស្សន៍នេះ។ ## បេសកកម្ម សប្បាយរីករាយជាមួយ פונקציות --- ## 🧰 សេចក្ដីសង្ខេបឧបករណ៍ פונקציות JavaScript របស់អ្នក --- ## 🚀 រាបរាល់ពេលវេលានៃជំនាញ פונקציות JavaScript របស់អ្នក ### ⚡ អ្វីដែលអ្នកអាចធ្វើបានក្នុង 5 នាទីបន្ទាប់ - [ ] សរសេរ function ងាយៗមួយដែលត្រឡប់លេខដែលអ្នកចូលចិត្ត - [ ] បង្កើត function មួយដែលមានប៉ារ៉ាម៉ែត្រ​ពីរ ដែលបូកពួកវារួមគ្នា - [ ] ប្រាប់សម្រាប់បំលែង function ប្រពៃណីទៅជាសមាសធាតុ arrow function - [ ] អនុវត្តការប្រលង៖ ពណ៌នាភាពខុសគ្នារវាង functions និង methods ### 🎯 អ្វីដែលអ្នកអាចសម្រេចបានក្នុងម៉ោងនេះ - [ ] បញ្ចប់ការប្រលងបន្ទាប់ពីមេរៀន និងសិក្សាថ្នាក់គំនិតណាដែលធ្វើឱ្យច្របូកច្របល់ - [ ] បង្កើតបណ្ណាល័យ math utilities ពីការប្រកួត GitHub Copilot - [ ] បង្កើត function ដែលប្រើប្រាស់ functionមួយផ្សេងទៀតជាប៉ារ៉ាម៉ែត្រ - [ ] អនុវត្តការសរសេរ functions ជាមួយប៉ារ៉ាម៉ែត្រដើម - [ ] សាកល្បង template literals នៅក្នុងតម្លៃត្រឡប់របស់ function ### 📅 ការគ្រប់គ្រងFunction រយៈពេលមួយសប្តាហ៍របស់អ្នក - [ ] បញ្ចប់ការងារ "រីករាយជាមួយ Functions" ជាមួយនឹងភាពច្នៃប្រឌិត - [ ] កែសម្រួលកូដកើតឡើងជាផ្នែកស្រដៀងៗដែលអ្នកបានសរសេរឲ្យទៅជាការបន្តប្រើបាន - [ ] បង្កើតគណនាប្រាក់តូចមួយដោយប្រើ function តែប៉ុណ្ណោះ (មិនប្រើប្រាស់អថេរសាកល) - [ ] អនុវត្ត arrow functions ជាមួយមធ្យោបាយអារេដូចជា map() និង filter() - [ ] បង្កើតប្រមូលផ្តុំ function គាំទ្រសម្រាប់ការងារពេញនិយម - [ ] សិក្សាអំពី higher-order functions និងគំនិតកម្មវិធីមូលដ្ឋានជំនួយ ### 🌟 បម្លែងរយៈពេលមួយខែរបស់អ្នក - [ ] ជំនាញជ្រាបច្រើនជាងមុនអំពី function ដូចជា closures និង scope - [ ] បង្កើតគម្រោងដែលប្រើប្រាស់ composition function ថ្លៃថ្នូរ - [ ] អះអាងចូលរួម open source ដោយបង្កើនឯកសារបានស្តីពី functions - [ ] បង្រៀនអ្នកដទៃអំពី functions និងរចនាសម្ព័ន្ធមានភាពខុសគ្នា - [ ] រុករក paradigm កម្មវិធីមូលដ្ឋានជំនួយក្នុង JavaScript - [ ] បង្កើតបណ្ណាល័យ function ផ្ទាល់ខ្លួនសម្រាប់គម្រោងអនាគត ### 🏆 ការត្រួតពិនិត្យជ័យលាភី Functions ចុងក្រោយ អបអរសាទរជំនាញ function របស់អ្នក៖ - តើ function ដែលមានប្រយោជន៍បំផុតដែលអ្នកបានបង្កើតមានអ្វីខ្លះ? - តើការស្គាល់គំនិត functions ប៉ះពាល់យ៉ាងដូចម្តេចចំពោះវិធីដែលអ្នករៀបចំនូវកូដ? - តើអ្នកចូលចិត្តរចនាសម្ព័ន្ធ function ណាមួយ ហើយមូលហេតុផលជាអ្វី? - តើបញ្ហាជាក់ស្តែងមួយណាដែលអ្នកនឹងដោះស្រាយតាមការសរសេរ function? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ការបញ្ជាក់៖ ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខំប្រឹងផ្ដល់ភាពត្រឹមត្រូវ សូមយល់ថាការបកប្រែដោយស្វ័យប្រវត្តិសម្បូរទៅដោយកំហុសឬភាពមិនត្រឹមត្រូវក៏អាចមាន។ ឯកសារដើមដែលមានភាសាដើមគួរត្រូវបាននិយាយថាជាដើមកំណត់ តម្លៃសម្របសម្រួល។ សម្រាប់ព័ត៌មានដ៏សំខាន់ សូមប្រើប្រាស់ការបកប្រែដោយមនុស្សជំនាញ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំឬការរួមភាសាដែលកើតចេញពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript មូលដ្ឋាន៖ ការធ្វើសេចក្តីសម្រេច

តើអ្នកធ្លាប់ចាប់អារម្មណ៍ថាអ្នកប្រើកម្មវិធីធ្វើសេចក្តីសម្រេចយ៉ាងច្បាស់យ៉ាងដូចម្តេចទេ? ដូចជា របៀបដែលប្រព័ន្ធណាវីហ្គេសិនជ្រើសរើសផ្លូវដែលលឿនបំផុត ឬរបៀបដែលធម្មតាស្ថិតិគណនាតម្លៃការបើកឬបិទកំដៅ? នេះជាគំនិតមូលដ្ឋាននៃការធ្វើសេចក្តីសម្រេចក្នុងកម្មវិធី។ ដូចដែលម៉ាស៊ីនវិភាគលំអិតរបស់ Charles Babbage ត្រូវបានរចនាឡើងដើម្បីដើរការប្រតិបត្តិលំដាប់ផ្សេងៗតាមលក្ខខណ្ឌ កម្មវិធី JavaScript សម័យទំនើបត្រូវការធ្វើជម្រើសដោយផ្អែកលើស្ថានភាពនិងលក្ខខណ្ឌអាចផ្លាស់ប្តូរបាន។ សមត្ថភាពក្នុងការបំបែកផ្លូវ និងធ្វើសេចក្តីសម្រេចនេះគឺជាអ្វីដែលបំលែងកូដជាស្ថិតសាស្ត្រជាកម្មវិធីឆ្លាតវៃឆ្លើយតប។ នៅក្នុងមេរៀននេះ អ្នកនឹងរៀនរបៀបដើម្បីអនុវត្តន៍បច្ចេកទេសលក្ខខណ្ឌនៅក្នុងកម្មវិធីរបស់អ្នក។ យើងនឹងស្វែងយល់អំពីពាក្យសន្សំពាក្យមានលក្ខខណ្ឌ អ្នកបញ្ជាការប្រៀបធៀប និងពាក្យសម្តីយល់ស្មារតីដែលអាចអនុញ្ញាតឱ្យកូដរបស់អ្នកវាយតម្លៃលក្ខខណ្ឌហើយឆ្លើយតបត្រឹមត្រូវ។ ## សំណួរប្រឡងមុនមេរៀន សំណួរប្រឡងមុនមេរៀន សមត្ថភាពក្នុងការធ្វើសេចក្តីសម្រេច និងគ្រប់គ្រងការចរន្តកម្មវិធីគឺជាផ្នែកមូលដ្ឋាននៃកម្មវិធី។ ផ្នែកនេះគ្របដណ្ដប់ពីរបៀបគ្រប់គ្រងផ្លូវអនុវត្តន៍កម្មវិធី JavaScript របស់អ្នកដោយប្រើតម្លៃ Boolean និងបច្ចេកទេសលក្ខខណ្ឌ។ [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## ការត្រួតពិនិត្យវិញរហ័សអំពី Boolean មុននឹងស្វែងយល់អំពីការធ្វើសេចក្តីសម្រេច មកត្រួតពិនិត្យតម្លៃ Boolean ដែលយើងបានរៀននៅមេរៀនមុនវិញ។ តម្លៃទាំងនេះមានឈ្មោះបន្ទាប់ពីអ្នកគណិតវិទ្យា George Boole ដែលតំណាងឱ្យស្ថានភាពពីរប្រភេទពីរប្រភេទ — ឬជា true ឬជា false។ គ្មានភាពអន្មត់មួយណាទេ ពុំមានចំណុចកណ្តាលទេ។ តម្លៃពីរប្រភេទនេះគឺជាមូលដ្ឋាននៃកំណត់ត្រាអាល់ហ្គូរីធម៍គណនា។ សេចក្តីសម្រេចគ្រប់យ៉ាងដែលកម្មវិធីរបស់អ្នកធ្វើការ វាជាការវាយតម្លៃ Boolean។ ការបង្កើតអថេរ Boolean គឺសាមញ្ញ៖ នេះបង្កើតអថេរស្នាដៃពីរដែលមានតម្លៃ Boolean ប្រាក់ប្រាស់។ ✅ Boolean មានឈ្មោះបន្ទាប់ពីអ្នកគណិតវិទ្យា និងទស្សនវិជ្ជាជន និងអ្នកវិភាគតំណាងថាមនុស្សលោក George Boole (1815–1864)។ ## អ្នកបញ្ជាការប្រៀបធៀប និង Boolean នៅក្នុងការអនុវត្ត អ្នកធ្លាប់តិចតួចប្រើតម្លៃ Boolean ដោយដៃ។ ផ្ទុយទៅវិញ អ្នកនឹងបង្កើតវាដោយការវាយតម្លៃលក្ខខណ្ឌ៖ "លេខនេះធំជាងលេខនោះទេ?" ឬ "តម្លៃទាំងនេះស្មើគ្នាទេ?" អ្នកបញ្ជាការប្រៀបធៀបអនុញ្ញាតឱ្យធ្វើការវាយតម្លៃទាំងនេះ។ ពួកវាប្រៀបធៀបទម្លៃ និងបញ្ចេញតម្លៃ Boolean មួយស្រាប់លើទំនាក់ទំនងរវាងអូប៉េរ៉ង់។ ✅ ពិនិត្យជំនាញរបស់អ្នកដោយការសរសេរប្រៀបធៀបមួយចំនួននៅក្នុងកុងសូលរបស់អ្នក។ តើមានទិន្នន័យដែលត្រូវតាមដែលធ្វើឲ្យអ្នកភ្ញាក់ផ្អើលទេ? ### 🧠 ការត្រួតពិនិត្យជំនាញប្រៀបធៀប៖ យល់ដឹងអំពីលក្ខខណ្ឌ Boolean សាកល្បងយល់ដឹងរបស់អ្នកអំពីការប្រៀបធៀប៖ - ហេតុអ្វីបានជា === (ស្មើខ្លាំង) ត្រូវបានចំណូលចិត្តជាចម្បងជាង == (ស្មើយឺត)? - តើអ្នកអាចទិត្យមើលថា 5 === '5' នឹងផ្ដល់អ្វី? តើ 5 == '5' បែបណា? - តើខុសគ្នារវាង !== និង != គឺជាអ្វី? ## ពាក្យបញ្ជា If ពាក្យបញ្ជា if គឺដូចជាការសួរពីសំណួរមួយជាភាសាកូដរបស់អ្នក។ "បើលក្ខខណ្ឌនេះជាពិត សូមធ្វើរឿងនេះ។" វាគឺជាឧបករណ៍សំខាន់បំផុតដែលអ្នកនឹងប្រើសម្រាប់ការធ្វើសេចក្តីសម្រេចនៅក្នុង JavaScript។ នេះជារបៀបដំណើរការ៖ លក្ខខណ្ឌស្ថិតនៅក្នុងសញ្ញាកោសិកា ហើយបើវាជា true JavaScript នឹងដំណើរការកូដក្នុងសញ្ញាចែដាស់បន្ទាប់។ ប្រសិនបើវាជា false JavaScript នឹងរំលងប្លុកនោះទាំងមូល។ អ្នកជាញឹកញាប់នឹងប្រើអ្នកបញ្ជាការប្រៀបធៀបដើម្បីបង្កើតលក្ខខណ្ឌទាំងនេះ។ មកមើលឧទាហរណ៍ប្រតិបត្តិ៖ ដោយសារតែ 1000 >= 800 វាយតម្លៃទៅជា true កូដក្នុងប្លុកនោះត្រូវបានដំណើរការ បង្ហាញ "កំពុងទិញកុំព្យូទ័រយួរដៃថ្មី!" នៅក្នុងកុងសូល។ ## ពាក្យបញ្ជា If..Else ប៉ុន្តែបើអ្នកចង់ឲ្យកម្មវិធីរបស់អ្នកធ្វើរឿងខុសពីនេះនៅពេលលក្ខខណ្ឌគឺ false? នោះជាទីតាំងដែល else បង្ហាញ — វាដូចជាមានផែនការទុកចិត្ដ។ ពាក្យបញ្ជា else ផ្តល់មុខងារអនុញ្ញាតឱ្យអ្នកនិយាយថា "បើលក្ខខណ្ឌនេះមិនត្រូវ ទើបធ្វើរឿងផ្សេងជំនួស"។ ឥពើយ 500 >= 800 ជា false កម្មវិធី JavaScript ភ្លេចប្លុកដំបូង ហើយដំណើរការប្លុក else ជំនួស។ អ្នកនឹងឃើញ "ពុំអាចទិញកុំព្យូទ័រយួរដៃថ្មីបានទេ!" នៅក្នុងកុងសូល។ ✅ សាកល្បងយល់ដឹងរបស់អ្នកអំពីកូដនេះ និងកូដក្រោយដោយដំណើរការវានៅក្នុងកុងសូលប្រ៉ៅសឺរ។ ប្ដូរតម្លៃអថេរ currentMoney និង laptopPrice ដើម្បីផ្លាស់ប្តូរអ្វីដែលត្រូវបង្ហាញតាម console.log()។ ### 🎯 ការត្រួតពិនិត្យទ្រឹស្តី If-Else៖ ផ្លូវសាហាវ វាយតម្លៃយល់ដឹងរបស់អ្នកអំពីលក្ខខណ្ឌ៖ - តើមានអ្វីកើតឡើងបើ currentMoney ស្មើ laptopPrice? - តើអ្នកអាចគិតឧទាហរណ៍ពិតណាមួយដែលពួកឧបករណ៍ if-else គឺមានប្រយោជន៍ដែរឬទេ? - តើអ្នកអាចបន្ថែមវាដើម្បីគ្រប់គ្រងតម្លៃជាច្រើនបែបណាបាន? ## ពាក្យបញ្ជា Switch ខណៈពេលដែលអ្នកត្រូវប្រៀបធៀបតម្លៃមួយជាមួយជម្រើសជាច្រើន។ ខណៈដែលអ្នកអាចចាក់ជួរពាក្យបញ្ជា if..else ជាច្រើន ការប្រកបនេះអាចធ្វើឲ្យវាស្មុគស្មាញ។ ពាក្យបញ្ជា switch ផ្តល់រចនាសម្ព័ន្ធស្អាតសម្រាប់គ្រប់គ្រងតម្លៃផ្សេងៗជាច្រើន។ គំនិតនេះដូចជាការប្តូរតុល្យភាពគ្រឿងចង្កឹះតាមរយៈប្រព័ន្ធទូរស័ព្ទដ៏ចាស់មួយ — តម្លៃបញ្ចូលគត់កំណត់មុខងារដែលបន្ទាត់អនុវត្តត្រូវបន្ត។ នេះជារបៀបរចនាដូចខាងក្រោម៖ - JavaScript វាយតម្លៃពាក្យបញ្ជាដងតែមួយ - វាស្វែងរក case រាល់មុខដើម្បីស្វែងរកការប្រកួត - ពេលវាមានការប្រកួត វានឹងដំណើរការប្លុកកូដនោះ - break ប្រាប់ JavaScript ឱ្យឈប់ និងចេញពី switch - ប្រសិនបើគ្មាន case ណាមួយប្រកួត វានឹងដំណើរការប្លុក default (បើអ្នកមាន) ក្នុងឧទាហរណ៍នេះ JavaScript មើលឃើញថា dayNumber មានតម្លៃ 2 រក case 2 ដែលត្រូវគ្នា កំណត់ dayName ទៅជា "Tuesday" បន្ទាប់មកផុតចេញពី switch។ លទ្ធផលវិញគឺ "Today is Tuesday" ត្រូវបានបង្ហាញនៅក្នុងកុងសូល។ ✅ សាកល្បងយល់ដឹងរបស់អ្នកអំពីកូដនេះ និងកូដក្រោយដោយដំណើរការវានៅក្នុងកុងសូលប្រ៉ៅសឺរ។ ប្ដូរតម្លៃអថេរ a ដើម្បីផ្លាស់ប្តូរអ្វីដែលត្រូវបង្ហាញតាម console.log()។ ### 🔄 ការត្រួតពិនិត្យជំនាញ Switch៖ ជម្រើសជាច្រើន សាកល្បងយល់ដឹងរបស់អ្នកអំពី switch៖ - តើមានអ្វីកើតឡើងបើអ្នកភ្លេចប្រើ break? - តើ​អ្នកចង់ប្រើ switch នៅពេលណាមុន if-else ច្រើនដង? - ហេតុអ្វីបានជា default មានប្រយោជន៍ ទោះបីអ្នកគិតថាអ្នកគ្របដណ្តប់គ្រប់សក្តានុពលទាំងអស់ហើយ? ## អ្នកបញ្ជាការយល់ស្មារតី និង Boolean ការធ្វើសេចក្តីសម្រេចស្មុគស្មាញភាគច្រើនទាមទារការវាយតម្លៃលក្ខខណ្ឌច្រើននៅពេលតែមួយ។ ដូចដែលពណ៌នាគណិតវិទ្យាភាពសម្បូរបែប Boolean អនុញ្ញាតឱ្យអ្នកគណិតិយកលក្ខខណ្ឌយល់ស្មារតីចំរូងគ្នា ការសរសេរកម្មវិធីផ្តល់អ្នកបញ្ជាការយល់ស្មារតីដើម្បីភ្ជាប់លក្ខខណ្ឌ Boolean ច្រើន។ អ្នកបញ្ជាការនេះអនុញ្ញាតឱ្យអ្នកបង្កើតលក្ខខណ្ឌស្មុគស្មាញដោយការបញ្ចូលការវាយតម្លៃ true/false ងាយៗ។ អ្នកបញ្ជាការនេះអនុញ្ញាតឱ្យអ្នកភ្ជាប់លក្ខខណ្ឌជាដំណាក់កាលបាន៖ - AND (&&) មានន័យថាលក្ខខណ្ឌទាំងពីរត្រូវតែពិត - OR (||) មានន័យថាយ៉ាងហោចណាស់មួយលក្ខខណ្ឌត្រូវតែពិត - NOT (!) បម្លែង true ទៅ false (និងព្រមទាំង trái lại) ## លក្ខខណ្ឌ និងសេចក្តីសម្រេចជាមួយអ្នកបញ្ជា មកមើលអ្នកបញ្ជាការយល់ស្មារតីទាំងនេះនៅក្នុងឧទាហរណ៍ជាក់ស្តែងមួយ៖ ក្នុងឧទាហរណ៍នេះ៖ យើងគណនាតម្លៃបញ្ចុះពាន់ ២០% (640) បន្ទាប់មកវាយតម្លៃថាតើហិរញ្ញវត្ថុដែលមានគ្របដណ្តប់តម្លៃទាំងអស់ ឬតម្លៃបញ្ចុះនេះ។ ដោយសារតែ 600 មិនបរិមាណលើផលបញ្ចុះ 640 ទេ គឺលក្ខខណ្ឌវាយតម្លៃទៅជា true។ ### 🧮 ការត្រួតពិនិត្យអ្នកបញ្ជាការយល់ស្មារតី៖ ការភ្ជាប់លក្ខខណ្ឌ សាកល្បងយល់ដឹងរបស់អ្នកអំពីអ្នកបញ្ជាការយល់ស្មារតី៖ - ក្នុងពាក្យបញ្ជា A && B តើមានអ្វីកើតឡើងបើ A ជា false? តើ B បានបាយតម្លៃទេ? - តើអ្នកអាចគិតឧទាហរណ៍ណាដែលអ្នកត្រូវការអ្នកបញ្ជា ៣ ដង (&&, ||, !) ព្រមគ្នា? - ផ្សេងគ្នារវាង !user.isActive និង user.isActive !== true គឺជាអ្វី? ### អ្នកបញ្ជាផ្ទុយ ខ្លះៗ ពេលវេលាល្អជាងក្នុងការគិតពេលអ្វីមិនមែនជា true។ ដូចជាការសួរថា "តើអ្នកប្រើបានចូលបញ្ចូលហើយទេ?" អ្នកអាចចង់សួរថា "តើអ្នកប្រើមិនទាន់ចូលបញ្ចូលទេ?" អ្នកបញ្ជាផ្ទុយ (!) បម្លែងលក្ខខណ្ឌនេះ។ អ្នកបញ្ជា ! គឺដូចជាការនិយាយថា "វាផ្ទុយពី..." — ប្រសិនបើអ្វីមួយជា true អ្នកបញ្ជា ! ធ្វើឲ្យវាជា false ហើយវា័ត្រឡប់វិញ។ ### ពាក្យសម្តីតែរីនារី សម្រាប់ការបែងចែកលក្ខខណ្ឌសាមញ្ញ JavaScript ផ្តល់អ្នកបញ្ជាផ្ទុយតែរីនារី។ វាជាភាសាសរសេរជួរเดียว ដែលជួយអ្នកសរសេរពាក្យសម្តីលក្ខខណ្ឌពីរជាមួយគ្នា។ វាអានដូចសំនួរ៖ "តើលក្ខខណ្ឌនេះជាពិតទេ? ប្រសិនបើមែន ប្រើតម្លៃនេះ។ ប្រសិនបើមិនមែន ប្រើតម្លៃនោះ។" ឧទាហរណ៍ពិតប្រាកដនៅខាងក្រោម៖ ✅ ចំណាយពេលមួយនាទីអានកូដនេះច្រើនដង។ តើអ្នកយល់ថាអ្នកបញ្ជាការជាថ្មីៗទាំងនេះដំណើរការយ៉ាងដូចម្តេច? នេះជាអ្វីដែលបន្ទាត់នេះនិយាយ៖ "តើ firstNumber ធំជាង secondNumber ទេ? ប្រសិនបើមែន ទទួលយកនៅក្នុង biggestNumber។ ប្រសិនបើមិនមែន ទទួលយក secondNumber នៅក្នុង biggestNumber។" អ្នកបញ្ជាថែរីនារីគ្រាន់តែជារបៀបខ្លីដើម្បីសរសេរ if..else ធម្មតា៖ ទោលធ្វើឲ្យទាំងពីរបង្ហាញលទ្ធផលដូចគ្នា។ អ្នកបញ្ជាថែរីនារីផ្តល់នូវភាពខ្លី ស្រួលបកស្រាយ ផ្ទុយពីរចនាសម្ព័ន្ធ if-else ដែលអាចអានបានល្អសម្រាប់លក្ខខណ្ឌស្មុគស្មាញ។ --- ## 🚀 챌린지 បង្កើតកម្មវិធីមួយដែលសរសេរជាលើកដំបូងដោយមានអ្នកបញ្ជារយល់ស្មារតី ហើយបន្ទាប់មកសរសេរឡើងវិញដោយប្រើពាក្យសម្តីតែរីនារី។ តើយើងចូលចិត្តរចនាសម្ព័ន្ធណា? --- ## GitHub Copilot Agent Challenge 🚀 ប្រើម៉ូដ Agent ដើម្បីបញ្ចប់ចំណាត់តំណាងខាងក្រោម៖ សេចក្តីពិពណ៌នា: បង្កើតកម្មវិធីគណនាគុណភាពដែលបង្ហាញពីគំនិតជាច្រើននៃការធ្វើសេចក្តីសម្រេចពីមេរៀននេះ រួមមានពាក្យបញ្ជា if-else, switch, អ្នកបញ្ជារយល់ស្មារតី និងពាក្យសម្តីតែរីនារី។ ដំណើរការ: សរសេរកម្មវិធី JavaScript មួយ ដែលទទួលបានពិន្ទុគណនា (0-100) នៃសិស្ស ហើយកំណត់ថាគុណភាពលិខិតរបស់គាត់ដោយគោលការណ៍ដូចខាងក្រោម៖ - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: ក្រោម 60 តម្រូវការ: 1. ប្រើប្រយោគ if-else ដើម្បីកំណត់ពិន្ទុជាតួអក្សរ 2. ប្រើប្រតិបត្តិការ​ត្រឹមត្រូវ​ទាំងស្រុង​ដើម្បី​ត្រួតពិនិត្យថានិស្សិតជាប់​​​​​​​​ (ពិន្ទុ >= 60) និងមានកិត្តិយស (ពិន្ទុ >= 90) 3. ប្រើប្រយោគ switch ដើម្បីផ្តល់មតិកម្រិតលម្អិតសម្រាប់ពិន្ទុតួអក្សរ​នីមួយៗ 4. ប្រើប្រតិបត្តិការ ternary ដើម្បីកំណត់ថានិស្សិតមានសិទ្ធិចូលរៀនវគ្គបន្ទាប់ទេឬអត់ (ពិន្ទុ >= 70) 5. រួមបញ្ចូលការត្រួតពិនិត្យបញ្ចូលទិន្នន័យដើម្បីធានាថា​ពិន្ទុស្ថិតនៅចន្លោះ 0 ទៅ 100 សាកល្បងកម្មវិធីរបស់អ្នកជាមួយពិន្ទុផ្សេងៗ រួមទាំងករណីជិតខាងដូចជា 59, 60, 89, 90, និងបញ្ចូលទិន្នន័យមិនត្រឹមត្រូវ។ ស្វែងយល់បន្ថែមអំពី agent mode នៅទីនេះ។ ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study អានបន្ថែមអំពីប្រាតិបត្តិការជាច្រើន​ដែលមានស្រាប់សម្រាប់អ្នកប្រើ លើ MDN។ ពិពណ៌នាឆ្លៀតមើលការស្វែងរកប្រតិបត្តិការ​ដោយ Josh Comeau អសកម្មនេះ operator lookup! ## Assignment Operators --- ## 🧠 សង្ខេបឧបករណ៍សម្រេចចិត្តរបស់អ្នក --- ## 🚀 បញ្ជីព្រឹត្តិការណ៍ចំណេះដឹងក្នុងការសម្រេចចិត្ត JavaScript របស់អ្នក ### ⚡ អ្វីដែលអ្នកអាចធ្វើបានក្នុង 5 នាទីក្រោយ - [ ] អនុវត្តប្រតិបត្តិការ​ប្រស់ភាគនៅក្នុងកុងសូលរុករករបស់អ្នក - [ ] សរសេរប្រយោគ if-else សាមញ្ញដើម្បីភាសិតអាយុរបស់អ្នក - [ ] សាកល្បងបញ្ហាចម្រុះ៖ សរសេរឡើងវិញ if-else ដោយប្រើប្រតិបត្តិការ ternary - [ ] សាកល្បងវ៉ាន់តម្លៃ "truthy" និង "falsy" ផ្សេងៗគ្នា ### 🎯 អ្វីដែលអ្នកអាចសម្រេចបានក្នុងមួយម៉ោងនេះ - [ ] បញ្ចប់កម្រងប្រលងបន្ទាប់ម៉ោងសិក្សា និងពិនិត្យវិធីសាស្ត្រដែលមិនច្បាស់ - [ ] សង់កម្មវិធីគណនាពិន្ទុស្មុគស្មាញពីបញ្ហា GitHub Copilot - [ ] បង្កើតដើមឈើសម្រេចចិត្តសាមញ្ញសម្រាប់ស្ថានการณ์ពិត (ដូចជា ជ្រើសរើសអ្វីពាក់) - [ ] អនុវត្តការរួមបញ្ចូលលក្ខខ័ណ្ឌជាច្រើនជាមួយប្រតិបត្តិការ​ត្រឹមត្រូវ​ទាំងស្រុង - [ ] សាកល្បងប្រយោគ switch សម្រាប់ករណីប្រើប្រាស់ផ្សេងៗ ### 📅 ការរីកចម្រើនជំនាញផ្នែកណែនាំតំណាលរយ:សប្តាហ៏ - [ ] បញ្ចប់កិរិយាសព្ទក្នុងកិច្ចការជាមួយឧទាហរណ៍ច្នៃប្រឌិត - [ ] សង់កម្មវិធីប្រលងតូចដោយប្រើរចនាសម្ព័ន្ធលក្ខខ័ណ្ឌផ្សេងៗ - [ ] បង្កើតកម្មវិធីផ្ទៀងផ្ទាត់បែបបទដែលបានត្រួតពិនិត្យលក្ខខ័ណ្ឌច្រើន - [ ] អនុវត្តលំហាត់ Josh Comeau operator lookup - [ ] បញ្ចេញកូដដែលមានស្រាប់ទៅប្រើរចនាសម្ព័ន្ធលក្ខខណ្ឌដែលសមរម្យជាងនេះ - [ ] អះអាងការវាយតម្លៃ short-circuit និងផលប៉ះពាល់លើកម្រិតប្រសិទ្ធភាព ### 🌟 ការបម្លែងជំនាញក្នុងរយៈពេលមួយខែ - [ ] ជំនាញលក្ខខណ្ឌស្មុគស្មាញដែលស្ថិតនៅក្នុងគ្នា និងរក្សាការអានបានខាងក្នុងកូដ - [ ] សង់កម្មវិធីដោយប្រើតារាងសម្រេចចិត្តដ៏ប្រសើរណាស់ - [ ] មានការរួមចំណែកលើប្រភពបើកប្រើដោយកែលម្អលក្ខខណ្ឌសម្រេចចិត្តនៅក្នុងគម្រោងស្រាប់ - [ ] បង្រៀនអ្នកដទៃអំពីរចនាសម្ព័ន្ធលក្ខខណ្ឌគ្រប់ប្រភេទ និងពេលវេលាដែលត្រូវប្រើប្រាស់ - [ ] ស្វែងយល់ពីវិធីសាស្ត្រកម្មវិធីមុខងារសម្រាប់លក្ខខណ្ឌសម្រេចចិត្ត - [ ] បង្កើតមគ្គុទេសក៍ផ្ទាល់ខ្លួនសម្រាប់លក្ខខណ្ឌល្អបំផុត ### 🏆 ការត្រួតពិនិត្យជើងឯកផ្នែកសម្រេចចិត្តចុងក្រោយ អបអរសាទរជំនាញគិតផ្លូវយុតិ្តសាស្ត្រ​របស់អ្នក៖ - តើលក្ខខណ្ឌសម្រេចចិត្តដ៏ស្មុគស្មាញបំផុតដែលអ្នកបានអនុវត្តជោគជ័យគឺអ្វី? - តើរចនាសម្ព័ន្ធលក្ខខណ្ឌណាដែលអ្នកមានអារម្មណ៍ថាធម្មតាជាងគេហើយហេតុអ្វី? - តើការស្វែងយល់អំពីប្រតិបត្តិការ​ត្រឹមត្រូវ​ទាំងស្រុងបានផ្លាស់ប្តូរយុទ្ធសាស្ត្រដោះស្រាយបញ្ហារបស់អ្នកយ៉ាងដូចម្តេច? - តើកម្មវិធីពិតប្រាកដណាដែលនឹងទទួលបានអត្ថប្រយោជន៍ពីលក្ខខណ្ឌសម្រេចចិត្តលំអិត? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ការរក្សាសិទ្ធិមិនទទួលខុសត្រូវ៖ ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខំប្រឹងប្រែងសំរាប់ភាពត្រឹមត្រូវ សូមយល់ថាការបកប្រែដោយស្វ័យប្រវត្តិនេះអាចមានកំហុសឬភាពមិនត្រឹមត្រូវបាន។ ឯកសារដើមក្នុងភាសាពុម្ពដើមគួរត្រូវបានគេពិចារណាថាជាផ្លូវការផ្ទាល់។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការបកប្រែដោយមនុស្សជំនាញត្រូវបានផ្តល់អនុសាសន៍។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំនោះ ឬការបកប្រែខុសក្នុងការប្រើប្រាស់បកប្រែនេះឡើយ។ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

មូលដ្ឋាន JavaScript៖ អារេ និង លូប

## ប្រឡងមុនមេរៀន ប្រឡងមុនមេរៀន ធ្លាប់សួរថាតើវេបសាយទទួលរងការតាមដានឥវ៉ាន់ក្នុងរទេះទិញ ផើយបង្ហាញបញ្ជីមិត្តរបស់អ្នកយ៉ាងដូចម្តេច? នេះជាកន្លែងដែលអារេ និងលូបចូលរួម។ អារេដូចជា​កុងតឺន័រឌីជីថល​ដែលរក្សាព័ត៌មានច្រើនជាផ្នែកក្នុងការផ្ទុក ខណៈដែលលូបអនុញ្ញាតឱ្យអ្នកដំណើរការព័ត៌មានទាំងនោះបានយ៉ាងមានប្រសិទ្ធិភាពដោយមិនចាំបាច់ប្រើកូដដែលស្ទ repetitiously។ ម្នាក់ និងម្នាក់ ការយល់ដឹងទាំងពីរនេះបង្កើតមូលដ្ឋានសម្រាប់ដំណើរការព័ត៌មាននៅក្នុងកម្មវិធីរបស់អ្នក។ អ្នកនឹងរៀនពីការបញ្ជាក់ឲ្យមានជំហានដោយដៃជាក្នុងមួយទៅបង្កើតកូដដ៏ឆ្លាត វាងាយស្រួលដែលអាចដំណើរការឥវ៉ាន់រាប់រយ ឬរងរយរាប់ពាន់យ៉ាងលឿន។ នៅចុងបញ្ចប់មេរៀននេះ អ្នកនឹងយល់ពីរបៀបធ្វើការងារដំណើរការព័ត៌មានស្មុគស្មាញជាមួយអ្នកគឺតែប៉ុន្មានបន្ទាត់កូដក៏បាន។ ចូររុករកមើលគំនិតសំខាន់ៗនៃកម្មវិធីនេះ។ [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## អារេ គិតថាអារេដូចជាកាប៊ីណែតលំដាប់ឯកសារ​ - មិនមែនផ្ទុកឯកសារតែមួយក្នុងលាភីមួយទេ ប៉ុន្តែអ្នកអាចរៀបចំអំពីវត្ថុជាច្រើនដែលទាក់ទងគ្នានៅក្នុងកុងតឺន័រតែមួយមានរចនាសម្ព័ន្ធ។ ក្នុងភាសាកម្មវិធី អារេចាំបាច់ឱ្យអ្នករក្សាព័ត៌មានជាច្រើននៅក្នុងកញ្ចប់មួយដែលបានរៀបចំ។ មិនថាអ្នកកំពុងបង្កើតវិទ្យាល័យរូបថត ជាមួយគ្រប់គ្រងបញ្ជីត្រូវធ្វើ ឬតាមដានពិន្ទុខ្ពស់នៅក្នុងហ្គេម អារេផ្តល់មូលដ្ឋានសម្រាប់ការរៀបចំព័ត៌មាន។ មកមើលរបៀបដែលវាដំណើរការរួមគ្នា។ ✅ អារេមាននៅជុំវិញយើងទាំងអស់! តើអ្នកអាចគិតឧទាហរណ៍ជាក់ស្តែងនៃអារេក្នុងជីវិតពិត ដូចជា អារេផ្ទាល់បូស្ម័នពន្លឺដោយថ្ងៃទេ? ### ការបង្កើតអារេ ការបង្កើតអារេគឺមិនស្មុគស្មាញទេ - គ្រាន់តែប្រើក្រឡាចត្រង្គស្នើរសុីតោះ! កើតអ្វីកាន់តែមាននៅទីនេះ? អ្នកទើបបង្កើតធុងទទេមួយដោយប្រើក្រឡាចត្រង្គស្នើរសុីត []។ គិតថាវាដូចជាលីបារីទទេមួយ - វាបានត្រៀមខ្លួនទុកសម្រាប់ផ្ទុកសៀវភៅណាមួយដែលអ្នកចង់រៀបចំ។ អ្នកក៏អាចបញ្ចូលតម្លៃដើមទៅក្នុងអារេរបស់អ្នកតាំងពីដើមចាប់ផ្ដើមផងដែរ: រឿងគួរអោយចាប់អារម្មណ៍: - អ្នកអាចរក្សាទុកអត្ថបទ លេខ ឬតម្លៃពិត/មិនពិតក្នុងអារេដូចគ្នា - គ្រាន់តែបំបែកមួយមុខជាមួយក្បៀស - ងាយស្រួល! - អារេល្អឥតខ្ចោះសម្រាប់រក្សាព័ត៌មានដែលទាក់ទងគ្នារួមគ្នា ### ការចុះបញ្ជីអារេ (Array Indexing) មានរឿងមួយដែលអាចមើលទៅអស្ចារ្យនៅដំបូង៖ អារេលេខកំណត់វត្ថុរបស់ខ្លួនចាប់ពីលេខ 0 មិនមែន 1ទេ។ ការចុះបញ្ជីពីសូន្យនេះមានដើមណែនាំមកពីរបៀបដោយស្មារតីសម្ភារៈកុំព្យូទ័រ ដូច្នេះវាជាប្រព័ន្ធមួយក្នុងភាសាកម្មវិធីចាស់ដូចជា C។ ទីតាំងនីមួយៗនៅក្នុងអារែមានលេខលំដាប់ហៅថា index។ ✅ តើវាអោយការភ្ញាក់ផ្អើលផងដែរទេថាអារេចាប់ផ្តើមពីលេខសន្ទស្សន៍សូន្យ? ក្នុងភាសាកម្មវិធីខ្លះៗ លេខសន្ទស្សន៍ចាប់ផ្តើមពី 1។ មានប្រវត្តិសាស្ត្រដែលគួរឱ្យចាប់អារម្មណ៍លើរឿងនេះ ដែលអ្នកអាចអាននៅ Wikipedia។ ការចូលប្រើធាតុអារេ៖ បំបែកអ្វីកើតឡើងទីនេះ៖ - ប្រើក្រឡាចត្រង្គស្នើរសុីតជាមួយលេខសន្ទស្សន៍ដើម្បីចូលប្រើធាតុ - ត្រឡប់តម្លៃដែលបានរក្សាទុកនៅទីតាំងជាក់លាក់នោះ - ចាប់ផ្តើមរាប់ពី 0 ធ្វើឱ្យធាតុទីមួយគឺលេខសន្ទស្សន៍ 0 កែប្រែធាតុអារេ៖ នៅលើនេះ យើងបាន៖ - កែប្រែធាតុទី ៤ ពី "Rocky Road" ទៅជា "Butter Pecan" - បន្ថែមធាតុថ្មី "Cookie Dough" នៅលេខសន្ទស្សន៍ ៥ - ពង្រីកប្រវែងអារេដោយស្វ័យប្រវត្តិពេលបន្ថែមឥវ៉ាន់លើសដែនកំណត់បច្ចុប្បន្ន ### ប្រវែងអារេ និងវិធីសាស្រ្តទូទៅ អារេមានគុណលក្ខណៈ និងវិធីសាស្រ្តក្នុងស្រោចស្រង់ដែលធ្វើឱ្យការងារជាមួយទិន្នន័យកាន់តែងាយស្រួល។ រកប្រវែងអារេ៖ ចំណុចសំខាន់ត្រូវចងចាំ៖ - ត្រឡប់ចំនួនធាតុសរុបដែលមានក្នុងអារេ - ធ្វើបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិពេលបន្ថែម ឬដកធាតុចេញ - ផ្តល់ការរាប់មានភាពដំណើរការសម្រាប់លូប ហើយក៏ដើម្បីធ្វើត្រួតពិនិត្យក៏បាន វិធីសាស្ត្រអារេសំខាន់ៗ៖ យល់ដឹងពីវិធីសាស្ត្រទាំងនេះ៖ - បន្ថែមធាតុជាមួយ push() (ចុង) និង unshift() (ដើម) - ដកធាតុជាមួយ pop() (ចុង) និង shift() (ដើម) - ស្វែងរកធាតុជាមួយ indexOf() និងពិនិត្យវត្តមានជាមួយ includes() - ត្រឡប់តម្លៃដែលមានប្រយោជន៍ដូចជាធាតុដែលបានដកចេញ ឬលេខសន្ទស្សន៍ ✅ អ្នកអាចសាកល្បងដោយខ្លួនឯង! ប្រើ console របស់កម្មវិធីbrowser របស់អ្នកដើម្បីបង្កើត និងដំណើរការអារេដែលបានបង្កើតដោយអ្នក។ ### 🧠 ការត្រួតពិនិត្យមូលដ្ឋានអារេ៖ រៀបចំទិន្នន័យរបស់អ្នក សាកល្បងសម្គាល់ការយល់ដឹងអារេរបស់អ្នក៖ - ហេតុអ្វីបានជា​អារេចាប់ផ្តើមរាប់ពី 0 មិនមែន 1? - តើមានអ្វីកើតឡើង ប្រសិនបើអ្នកព្យាយាមចូលទៅកាន់លេខសន្ទស្សន៍ដែលមិនមាន (ដូចជា arr[100] ក្នុងអារេមាន 5 ធាតុ)? - តើអ្នកអាចគិតឧទាហរណ៍ជីវិតពិត ៣ករណី ដែលអារេអាចមានប្រយោជន៍? ## លូប គិតថាការផ្តាកាសកម្មទណ្ឌ្យគឺពីរឿង Charles Dickens ដែលសិស្សានុសិស្សត្រូវសរសេររៀងរាល់លំនាំតែម្តង លូបគឺដូចជាមនុស្សជំនួយរហ័សតែមិនធុញទ្រាន់ដែលអាចធ្វើការលើសកម្មភាពមិនល្អ ។ មិនថាអ្នកត្រូវពិនិត្យមើលរាល់វត្ថុក្នុងរទេះទិញ ឬបង្ហាញរូបថតទាំងអស់នៅក្នុងអាល់ប៊ុម លូបអាចដំណើរការការស្ទ 반복បានយ៉ាងមានប្រសិទ្ធិភាព។ JavaScript ផ្តល់លូបមួយចំនួនដែលអ្នកអាចជ្រើសបាន។ មកពិនិត្យមើលមួយៗ ហើយយល់ពីពេលណាអាចប្រើពួកវា។ ### លូប For លូប for ដូចជាកំណត់ម៉ោង - អ្នកដឹងច្បាស់ពីចំនួនដងដែលអ្នកចង់អោយវាធ្វើ។ វាឈរជួរពិបាក និងអាចទុកចិត្តបាន ដែលធ្វើឲ្យវាល្អសម្រាប់អារេ ឬការរាប់របស់អ្នក។ រចនាសម្ព័ន្ធលូប For៖ ជំហាននីមួយៗកើតឡើងដូចខាងក្រោម៖ - ចាប់ផ្ដើមប៉ារ៉ាម៉ែត្រ i ទៅ 0 នៅដើម - ត្រួតពិនិត្យលក្ខខណ្ឌ i < 10 មុនរាល់វដ្ត - អនុវត្តប្លុកកូដនៅពេលលក្ខខណ្ឌត្រូវ - បន្ថែម i អោយមាន +1 បន្ទាប់រាល់វដ្ត - បញ្ឈប់ចំពោះពេលលក្ខខណ្ឌក្លាយទៅមិនត្រូវ (ពេល i ទៅដល់ 10) ✅ រត់កូដនេះក្នុង console តំណើរកម្មbrowser របស់អ្នក។ តើមានអ្វីកើតឡើងពេលអ្នកធ្វើការផ្លាស់ប្តូរតិចតួចលើកូដប្រដាប់រាប់ ភាពលក្ខខណ្ឌ ឬការបញ្ចូលវដ្ត? តើអ្នកអាចដាក់វាឡើងវិញចុះក្រោមដើម្បីបង្កើតការរាប់ចុះមួយទេ? ### 🗓️ ការត្រួតពិនិត្យជំនាញលូប For៖ ការធ្វើម្តងជាលំដាប់ ប៉ាថ្មើរអ្នកយល់ដឹងលូប For៖ - តើមានបីផ្នែកណាខ្លះក្នុងលូប for ហើយវាកំពុងធ្វើអ្វី? - តើធ្វើដូចម្តេចដើម្បីលូបក្រឡាឡើងវិញលើអារេ? - តើមានអ្វីកើតឡើង ប្រសិនបើអ្នកភ្លេចផ្នែកការកើនឡើង (i++)? ពួកវាជាជម្រើសធម្មតាសម្រាប់ដំណើរការអារែ! ### លូប While លូប while ដូចជាការបង្ហាញថា "បន្តធ្វើរហូត..." - អ្នកប្រហែលមិនដឹងច្បាស់ចំនួនដងដែលវានឹងដំណើរការ ប៉ុន្តែអ្នកដឹងពីពេលណាចប់។ វាល្អសម្រាប់ការស្នើសុំអតិថិជនដើម្បីបញ្ចូល ត្រូវបានជម្រះការស្វែងរកទិន្នន័យរហូតដល់អ្នករកឃើញអ្វីដែលត្រូវការ។ លក្ខណៈលូប While៖ - បន្តអនុវត្តនៅពេលលក្ខខណ្ឌត្រូវ - ត្រូវការជាមួយការគ្រប់គ្រងដៃលើអថេរ - ត្រួតពិនិត្យលក្ខខណ្ឌមុនរាល់វដ្ត - ចំណាំអាចបង្កការលូបគ្មានទីបញ្ចប់ ប្រសិនបើលក្ខខណ្ឌមិនធ្លាប់មិនត្រូវ យល់ដឹងពីឧទាហរណ៍ទាំងនេះ៖ - គ្រប់គ្រងអថេរ i ដោយដៃនៅក្នុងខ្លួនលូប - បន្ថែមអថេរ ដើម្បីបញ្ឈប់លូបគ្មានទីបញ្ចប់ - បង្ហាញករណីប្រើប្រាស់ជាក់ស្តែងជាមួយបញ្ចូល និងកំណត់ការព្យាយាម - រួមមានមធ្យោបាយសុវត្ថិភាពដើម្បីរារាំងកម្មវិធីដំណើរការអស់អ្នក ### ♾️ ការត្រួតពិនិត្យប្រាជ្ញាលូប While៖ ការធ្វើស្ទ 반복ដោយលក្ខខណ្ឌ សាកល្បងយល់ដឹងលូប while របស់អ្នក៖ - តើគ្រោះថ្នាក់សំខាន់ៗនៅពេលប្រើលូប while មួយមានអ្វីខ្លះ? - ពេលណាអ្នកជ្រើសរើសលូប while ទៅលើលូប for? - តើអ្នកធ្វើដូចម្តេចដើម្បីទប់ស្កាត់លូបគ្មានទីបញ្ចប់? ### ជម្រើសលូបទំនើប JavaScript ផ្ដល់សំណុំសមាសធាតុលូបទំនើបដែលលើកកម្ពស់ភាពងាយស្រួលអានកូដ និងកាត់បន្ថយកំហុស។ លូប For...of (ES6+): អត្ថប្រយោជន៍សំខាន់នៃ for...of៖ - ដកចេញការគ្រប់គ្រងលេខសន្ទស្សន៍ និងកំហុស off-by-one - ផ្តល់ការចូលប្រើជាផ្ទាល់ទៅធាតុអារេ - ធ្វើឲ្យកូដអាចអានបានយ៉ាងច្បាស់ និងកាត់បន្ថយសមាសធាតុ វិធីសាស្ត្រ forEach៖ អ្វីដែលអ្នកត្រូវដឹងអំពី forEach ៖ - អនុវត្តមុខងារសម្រាប់ធាតុអារេលាក់មួយៗ - ផ្តល់ទាំងតម្លៃធាតុ និងលេខសន្ទស្សន៍ជាប៉ារ៉ាម៉ែត្រ - មិនអាចដោះស្រាយឲ្យបញ្ឈប់មុនពេលកំណត់ (ខុសពីលូបបុរាណ) - ត្រឡប់ undefined (មិនបង្កើតអារេថ្មី) ✅ ហេតុអ្វីបានជា​អ្នកជ្រើសរើសលូប for សំរាប់លូប while? មានអ្នកទស្សនាជិត 17,000នាក់បានសួរចំលើយដែលត្រូវនៅហ្វុរុម StackOverflow ហើយខ្លះនៃមតិរបស់ពួកគេច្រើន អាចជារឿងចាប់អារម្មណ៍សម្រាប់អ្នក។ ### 🎨 ការត្រួតពិនិត្យវប្បធម៍លូបទំនើប៖ ការទទួលស្គាល់ ES6+ វាយតម្លៃការយល់ដឹងរបស់អ្នកអំពី JavaScript ទំនើប៖ - អត្ថប្រយោជន៍នៃ for...of និងលូប For​ បុរាណខុសគ្នា​យ៉ាងដូចម្តេច? - ពេលណាអ្នកនៅតែចូលចិត្តលូប For បុរាណ? - ភាពខុសគ្នារវាង forEach និង map? ## លូប និង អារេ ការចងក្រងអារេជាមួយឡូបបង្កើតសមត្ថភាពដំណើរការទិន្នន័យដ៏ឥតអូស។ ការចំណាយនេះជាសំបុត្រសម្រាប់មុខងារកម្មវិធីជាច្រើន ចាប់ពីបង្ហាញបញ្ជីទៅគណនស្ថិតិ។ ការដំណើរការអារេប្រពៃណី៖ យើងត្រូវយល់ពីមធ្យោបាយនីមួយៗ៖ - ប្រើគុណលក្ខណៈប្រវែងអារេដើម្បីកំណត់ដែនកំណត់លូប - ចូលទៅកាន់ធាតុតាមលេខសន្ទស្សន៍នៅក្នុងលូប for តាមបែបប្រពៃណី - ផ្តល់ការចូលប្រើធាតុដោយផ្ទាល់ ក្នុងលូប for...of - ដំណើរការធាតុអារេខ្លួនគ្រប់យ៉ាងតែម្តង ឧទាហរណ៍ការដំណើរការទិន្នន័យប្រើប្រាស់៖ របៀបកូដនេះដំណើរការ៖ - ចាប់ផ្ដើមអថេរតាមដានសម្រាប់ចំនួនសរុប និងតម្លៃខ្ពស់ទាប - ដំណើរការរៀងរាល់ពិន្ទុជាមួយលូបមានប្រសិទ្ធិភាព - បូកសរុបសម្រាប់គណនាមធ្យមពិន្ទុ - តាមដានតម្លៃខ្ពស់ និងទាបក្នុងការរុករក - គណនាស្ថិតិចុងក្រោយបន្ទាប់ពីចប់វដ្តលូប ✅ សាកល្បងដោយខ្លួនឯង ដំណើរការលូបលើអារែដែលអ្នកបង្កើតនៅក្នុង console browser របស់អ្នក។ --- ## ការប្រកួតប្រជែង​នៃ GitHub Copilot Agent 🚀 ប្រើម៉ូត Agent ដើម្បីបញ្ចប់បញ្ហារបស់ខាងក្រោម៖ ការពិពណ៌នា៖ បង្កើតមុខងារអនុវត្តការដំណើរការទិន្នន័យយ៉ាងទូលំទូលាយ ដែលចងក្រងអារេ និងលូប ដើម្បីវិភាគទិន្នន័យនិងបង្កើតមតិយោបល់មានន័យ។ បញ្ជាក់៖ បង្កើតមុខងារមួយឈ្មោះ analyzeGrades ដែលទទួលអារែវត្ថុពិន្ទុសិស្ស (មានគ្រប់គ្រងកំណត់ឈ្មោះ និងពិន្ទុ) ហើយត្រឡប់វត្ថុមានស្ថិតិសម្រួល រួមមាន ពិន្ទុខ្ពស់បំផុត ពិន្ទុទាបបំផុត ពិន្ទុមធ្យម ចំនួនសិស្សដែលបានឆ្លង (ពិន្ទុ >= 70) និងអារែឈ្មោះសិស្សដែលពិន្ទុខ្ពស់ជាងមធ្យម។ ត្រូវប្រើលូបបែបខុសគ្នា យ៉ាងហោចណាស់ពីរក្នុងដំណោះស្រាយរបស់អ្នក។ សូមស្វែងយល់បន្ថែមអំពី agent mode នៅទីនេះ។ ## 🚀 ប្រកួតប្រជែង JavaScript ផ្តល់ជូននូវវិធីសាស្រ្តស៊ីរីថ្មីជាច្រើនសម្រាប់អារ៉េដែលអាចជំនួសសម្រាប់ល៊ូបបុរាណសម្រាប់ភារកិច្ចជាក់លាក់។ សូមស្វែងយល់ពី forEach, for-of, map, filter, និង reduce។ ការប្រលងរបស់អ្នក៖ ធ្វើការកែប្រែឧទាហរណ៍ពិន្ទុនិស្សិតដោយប្រើយ៉ាងហោចណាស់វិធីសាស្រ្តអារ៉េបីប្រភេទផ្សេងគ្នា។ សម្គាល់មើលថាចូរលេខកូដមានភាពស្អាត និងអាចអានបានកាន់តែច្បាស់ជាមួយវេយ្យាករណ៍ JavaScript សម័យថ្មីយ៉ាងដូចម្តេច។ ## ការប្រលងបន្ទប់សិក្សាបន្ទាប់ Post-lecture quiz ## ការពិនិត្យឡើងវិញ និងការសិក្សាគ្រាប់ខ្លួនឯង អារ៉េនៅក្នុង JavaScript មានវិធីសាស្រ្តជាច្រើនភ្ជាប់ទៅមួួយដែលមានប្រយោជន៍ខ្លាំងសម្រាប់ការបំលែងទិន្នន័យ។ អានអំពីវិធីសាស្រ្តទាំងនេះ ហើយសាកល្បងខ្លះៗពីវាតាមករណីអារ៉េដែលអ្នកបង្កើត។ ## ការងារ Loop an Array --- ## 📊 សង្ខេបឧបករណ៍អារ៉េ និងល៊ូបរបស់អ្នក --- ## 🚀 រយៈពេលជំនាញអារ៉េ និងល៊ូបរបស់អ្នក ### ⚡ អ្វីដែលអ្នកអាចធ្វើបានក្នុង ៥ នាទីក្រោយ - [ ] បង្កើតអារ៉េរបស់ភាពយន្តដែលអ្នកចូលចិត្ត និងចូលដល់ធាតុកដែលជាក់លាក់ - [ ] សរសេរល៊ូប for ដែលរាប់ពី 1 ដល់ 10 - [ ] សាកល្បងការប្រលងវិធីសាស្រ្តអារ៉េស៊ីរីសម័យថ្មីពីមេរៀន - [ ] អនុវត្តលេខាំងអារ៉េក្នុងកម្មវិធីកុងសូលក្រវាត់អ្នករុករក ### 🎯 អ្វីដែលអ្នកអាចសម្រេចបានក្នុងម៉ោងនេះ - [ ] បញ្ចប់ការប្រលងបន្ទាប់មកពីមេរៀន និងពិនិត្យឡើងវិញគំនិតដែលមានបញ្ហា - [ ] បង្កើតកម្មវិធីវិភាគពិន្ទុសិក្សាដ៏ទូលំទូលាយពីការប្រលង GitHub Copilot - [ ] បង្កើតរទេះទិញទំនិញធម្មតាមួយដែលបន្ថែមនិងដកធាតុ - [ ] អនុវត្តការបម្លែងរវាងប្រភេទល៊ូបផ្សេងៗ - [ ] សាកល្បងវិធីសាស្រ្តអារ៉េដូចជា push, pop, slice, និង splice ### 📅 ដំណើរប្រតិបត្តិការដល់ទិន្នន័យរយៈសប្ដាហ៍របស់អ្នក - [ ] បញ្ចប់ភារកិច្ច "Loop an Array" ជាមួយការកែលម្អដើម្បីច្នៃប្រឌិត - [ ] បង្កើតកម្មវិធីបញ្ជីកិច្ចការប្រើប្រាស់អារ៉េ និងល៊ូប - [ ] បង្កើតកម្មវិធីគណនាតារាងសម្រាប់ទិន្នន័យចំនួន - [ ] អនុវត្តជាមួយ វិធីសាស្រ្តអារ៉េ MDN - [ ] បង្កើតផ្ទាំងរូបថតឬបញ្ជីចម្រៀង - [ ] ស្វែងយល់កម្មវិធីសម្រាប់អនុគមន៍ map, filter, និង reduce ### 🌟 ការបម្លែងរយៈខែរបស់អ្នក - [ ] ជំនាញលំអិតនៃប្រតិបត្តិការអារ៉េនិងការបង្កើនប្រសិទ្ធភាព - [ ] បង្កើតផ្ទាំងបង្ហាញទិន្នន័យសរុប - [ ] ចូលរួមគម្រោងកូដបើកដែលពាក់ព័ន្ធនឹងការប្រតិបត្តិការទិន្នន័យ - [ ] បង្រៀនអ្នកផ្សេងទៀតអំពីអារ៉េ និងល៊ូបជាមួយឧទាហរណ៍ផ្សេងៗ - [ ] បង្កើតបណ្ណាល័យផ្ទាល់ខ្លួននៃអនុគមន៍ប្រតិបត្តិការទិន្នន័យដែលអាចប្រើប្រាស់ឡើងវិញ - [ ] ស្វែងយល់អាល់ហ្គរីធម៍ និងរចនាសម្ព័ន្ធទិន្នន័យដែលស្ថិតលើអារ៉េ ### 🏆 ការត្រួតពិនិត្យជ័យលាភីប្រតិបត្តិការទិន្នន័យចុងក្រោយ អបអរសាទរជំនាញអារ៉េ និងល៊ូបរបស់អ្នក៖ - តើប្រតិបត្តិការអារ៉េណាមួយដែលមានប្រយោជន៍ខ្លាំងបំផុតដែលអ្នកបានរៀនសម្រាប់កម្មវិធីពិភពលោកពិតគឺអ្វី? - តើប្រភេទល៊ូបណាមួយដែលអ្នកមានអារម្មណ៍ថាជាប្រភេទធម្មតាដែលមានគន្លងច្បាស់ និងហេតុអ្វី? - តើការយល់ដឹងអំពីអារ៉េ និងល៊ូបបានផ្លាស់ប្តូរបទដ្ឋានរបស់អ្នកចំពោះការរៀបចំទិន្នន័យយ៉ាងដូចម្តេច? - តើភារកិច្ចប្រតិបត្តិការទិន្នន័យស្មុគស្មាញណាមួយដែលអ្នកចង់អនុវត្តបន្ទាប់? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ការព្រមាន៖ ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខិតខំរកភាពត្រឹមត្រូវ សូមយល់ដឹងថាការបកប្រែដោយស្វ័យប្រវត្តិក្នុងខ្លះអាចមានកំហុសឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមដែលមានភាសារបស់វាគួរត្រូវបានគ្រប់គ្រងជាផ្លូវការជាទិន្នន័យគ្រឹះ។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការបកប្រែដោយអ្នកជំនាញដែលជាមនុស្សត្រូវបានណែនាំ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំបញ្ចេញឆ្លងឆ្លើយ ឬការបកប្រែខុសដែលកើតឡើងពីការប្រើប្រាស់ការបកប្រែនេះទេ។ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪರಿಚಯ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವೆಬ್‌ನ ಭಾಷೆ. ಈ ನಾಲ್ಕು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಅದರ ಮೂಲ ತತ್ವಗಳನ್ನು ಕಲಿಯುತ್ತೀರಿ. ### ವಿಷಯಗಳು 1. ಚರಗಳು ಮತ್ತು ಡೇಟಾ ಪ್ರಕಾರಗಳು 2. ಫಂಕ್ಷನ್ಗಳು ಮತ್ತು ವಿಧಾನಗಳು 3. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನೊಂದಿಗೆ ನಿರ್ಧಾರಗಳನ್ನು ಕೈಗೊಳ್ಳುವುದು 4. IOರೇಗಳು ಮತ್ತು ಲೂಪ್ಗಳ ### ಋಣಗಳು ಈ ಪಾಠಗಳನ್ನು ♥️ಧ್ಯಾ ತಮ್ಮಿಂದ ಬರೆಯಲಾಗಿದೆ ಜೆಸ್ಮೀನ್ ಗ್ರೀನವೇ, ಕ್ರಿಸ್ಟೋಫರ್ ಹ್ಯಾರಿಸನ್ ಮತ್ತು ಕ್ರಿಸ್ ನೋರಿಂಗ್ --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ನಿಮ್ಮೆಚ್ಚರಿಕೆ: ಈ ದಸ್ತಾವೇಜು Co-op Translator ಎಂಬ AI ಭಾಷಾಂತರ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಮಗೆ ನಿಖರತೆಯನ್ನು ಸಾಧಿಸಲು ಪ್ರಯತ್ನವಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸಂಗತಿಗಳು ಇರುವ ಸಾಧ್ಯತೆ ಇದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ದಸ್ತಾವೇಜಿನ ಸ್ಥಳೀಯ ಭಾಷೆಯ ಪ್ರತಿಯನ್ನು ಪ್ರಾಧಿಕಾರ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದದ ಸೇವೆ ಪಡೆದುಕೊಳ್ಳುವುದು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಈ ಅನುವಾದದ ಬಳಕೆಯಿಂದ ஏற்பட்ட ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಗರ್ಭಿತತೆಗಳಿಗೆ ಅಥವಾ ಕಲಹಗಳಿಗೆ ನಾವು ಜವಾಬ್ದಾರಿಯಾಗುವುದಿಲ್ಲ. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೂಲತತ್ವಗಳು: ಡೇಟಾ ಪ್ರಕಾರಗಳು

ಡೇಟಾ ಪ್ರಕಾರಗಳು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಮೂಲಭೂತ ತತ್ವಗಳಲ್ಲಿ ಒಂದಾಗಿದ್ದು, ನೀವು ಬರೆಯುವ ಪ್ರತಿಯೊಂದು ಕಾರ್ಯಕ್ರಮದಲ್ಲೂ ನೀವು ಅವುಗಳನ್ನು ಎದುರಿಸುವಿರಿ. ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಪ್ರಾಚೀನ ಅಲೆಕ್ಸಾಂಡ್ರಿಯಾ ಗ್ರಂಥಗಾರರು ಬಳಸಿದ ಫೈಲಿಂಗ್ ವ್ಯವಸ್ಥೆಯಂತೆ ಪರಿಗಣಿಸಿ – ಅವರೆಲ್ಲಾ ಕವಿತೆ, ಗಣಿತ ಮತ್ತು ಇತಿಹಾಸ ಸಂಬಂಧಿತ ವರದಿಗಳಿರುವ ಸ್ಕ್ರೋಲ್ಗಳಿಗೆ ವಿಶಿಷ್ಟ ಸ್ಥಳಗಳನ್ನು ಹೊಂದಿದ್ದರು. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವಿವಿಧ ರೀತಿಯ ಡೇಟಾಗಾಗಿ ವಿಭಿನ್ನ ವರ್ಗಗಳನ್ನು ಹೊಂದಿದ್ದು, ಮಾಹಿತಿ ಸಂರಚಿಸಲು ಇದೇ ರೀತಿಯ ವ್ಯವಸ್ಥೆಯನ್ನು ಹೊಂದಿದೆ. ಈ ಪಾಠದಲ್ಲಿ, ನಾವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದರ ಮುಖ್ಯ ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಅನ್ವೇಷಿಸುವೆವು. ಸಂಖ್ಯೆಗಳು, ಪಠ್ಯ, ಸತ್ಯ/ಅಸತ್ಯ ಮೌಲ್ಯಗಳ ಹಿಂತಿಕ್ಕುವಿಕೆ ಹೇಗೆ ಮಾಡಬೇಕು ಎಂದು ನೀವು ಕಲಿಯುತ್ತೀರಿ ಮತ್ತು ಸರಿಯಾದ ಪ್ರಕಾರ ಆಯ್ಕೆ ಮಾಡುವುದು ನಿಮ್ಮ ಕಾರ್ಯಕ್ರಮಗಳಿಗೆ ಕಟ್ಟುನಿಟ್ಟಾಗಿರುವುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತೀರಿ. ಈ ತತ್ವಗಳು ಮೊದಲಿಗೆ ಅಸ್ಥಿರವಾಗಿರಬಹುದು, ಆದರೆ ಅಭ್ಯಾಸದೊಂದಿಗೆ ಅವು ಪ್ರಾಕೃತಿಕವಾಗುತ್ತವೆ. ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದರಿಂದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಉಳಿದ ವಿಷಯಗಳು ಸ್ಪಷ್ಟವಾಗುತ್ತವೆ. ಕಟ್ಟಡವಾಸ್ತುಕಾರರು ಕೀರ್ಚ್ಯ ವಿಚಾರಿಸುವ ಮುಂಚೆ ಬರುವ ವಿವಿಧ ನಿರ್ಮಿತ ಸಾಮಗ್ರಿಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳಬೇಕಾಗಿರುವಂತೆ, ಈ ಮೂಲಭೂತಾಂಶಗಳು ನೀವು ಮುಂದೆ ನಿರ್ಮಿಸುವ ಎಲ್ಲದಿಗೂ ಬೆಂಬಲ ನೀಡುತ್ತವೆ. ## ಪಾಠದ ಪೂರ್ವಪ್ರಶ್ನೆಯು Pre-lecture quiz ಈ ಪಾಠವು ಜಾಲತಾಣದಲ್ಲಿ ಪರಸ್ಪರ ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಒದಗಿಸುವ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಮೂಲಭೂತಾಂಶಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") ದಾರಿಬದ್ಧವಾಗಿ ವ್ಯತ್ಯಯಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ತುಂಬುವ ಡೇಟಾ ಪ್ರಕಾರಗಳಿಂದ ಪ್ರಾರಂಭಿಸೋಣ! ## ವ್ಯತ್ಯಯಗಳು ವ್ಯತ್ಯಯಗಳು ಪ್ರೋಗ್ರಾಮ್ ರಚನೆಯಲ್ಲಿ ಮೂಲಭೂತ ಕಟ್ಟಡ ಬ್ಲಾಕ್‌ಗಳಾಗಿವೆ. ಮಧ್ಯಯುಗದ ರಸಾಯನಶಾಸ್ತ್ರಜ್ಞರು ವಿವಿಧ ಪದಾರ್ಥಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಉಪಯೋಗಿಸಿದ ಲೇಬಲ್ ಸಿಕ್ಕಿದ ಜಾರಿನಂತೆ, ವ್ಯತ್ಯಯಗಳು ನಿಮಗೆ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಅದಕ್ಕೆ ವಿವರಣಾತ್ಮಕ ಹೆಸರು ನೀಡಲು ಅವಕಾಶ ನೀಡುತ್ತವೆ, ಇದರಿಂದ ನೀವು ನಂತರ ಅದನ್ನು ಉಲ್ಲೇಖಿಸಬಹುದು. ಯಾರಾದರೂ ವಯಸ್ಸನ್ನು ನೆನಪಿಡಬೇಕೆ? ಅದನ್ನು age ಎಂಬ ವ್ಯತ್ಯಯದಲ್ಲಿ ಸಂರಕ್ಷಿಸಿ. ಬಳಕೆದಾರರ ಹೆಸರನ್ನು ಹೋಲಿಸಬೇಕೆ? ಅದನ್ನು userName ಎಂಬ ವ್ಯತ್ಯಯದಲ್ಲಿ ಇರಿಸಿ. ನಾವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ವ್ಯತ್ಯಯಗಳನ್ನು ಸೃಷ್ಟಿಸುವ ಆಧುನಿಕ ವಿಧಾನವನ್ನು ಮೇಲೆ ಗಮನ ಹರಿಸುವೆವು. ನೀವು ಇಲ್ಲಿ ಕಲಿಯುವ ತಂತ್ರಗಳು ಭಾಷೆಯ ಮಾನ್ಯತೆ ಮತ್ತು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳ ವರ್ಷಗಳ ಪ್ರದರ್ಶನವಾಗಿದೆ. ವ್ಯತ್ಯಯವನ್ನು ರಚಿಸುವ ಹಾಗೂ اعلام (ಪ್ರಕಟಿಸುವ) ರೀತಿ ಈ ಕೆಳಗಿನ ರೂಪದಲ್ಲಿ ಇರುತ್ತದೆ [ಕೀವರ್ಡ್] [ಹೆಸರು]. ಇದು ಎರಡು ಭಾಗಗಳಿಂದ ಕೂಡಿದೆ: - ಕೀವರ್ಡ್. ಬದಲಾಗಬಹುದಾದ ವ್ಯತ್ಯಯಗಳಿಗೆ let ಬಳಸಿ, ಮತ್ತು ಸ್ಥಿರ ಮೌಲ್ಯಗಳಿಗೆ const ಬಳಸಿ. - ವ್ಯತ್ಯಯದ ಹೆಸರು, ಇದು ನೀವು ಸ್ವತಃ ಆಯ್ಕೆಮಾಡಿದ ವಿವರಣಾತ್ಮಕ ಹೆಸರು. ✅ ES6 ನಲ್ಲಿ ಪರಿಚಯಿಸಲ್ಪಟ್ಟ let ಕೀವರ್ಡ್ ನಿಮ್ಮ ವ್ಯತ್ಯಯಕ್ಕೆ ಒಂದು _ಬ್ಲಾಕ್ ಸ್ಕೋಪ್_ ಅನ್ನು ನೀಡುತ್ತದೆ. ಹಳೆಯ var ಕೀವರ್ಡ್ ಬದಲಿಗೆ let ಅಥವಾ const ಬಳಸಬೇಕೆಂದು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಭಾಗಗಳಲ್ಲಿ ನಾವು ಬ್ಲಾಕ್ ಸ್ಕೋಪ್ಗಳನ್ನು ಹೆಚ್ಚು ವಿವರದಿಂದ ಪರಿಶೀಲಿಸೋಣ. ### ಕಾರ್ಯ - ವ್ಯತ್ಯಯಗಳೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದು 1. ವ್ಯತ್ಯಯವನ್ನು ಪ್ರಕಟಿಸಿ. ನಮ್ಮ ಮೊದಲ ವ್ಯತ್ಯಯವನ್ನು ರಚಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ: ```javascript let myVariable; ``` ಇದು ಏನು ಸಾಧಿಸುತ್ತದೆ: - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಗೆ myVariable ಎಂದು ಒಂದು ಸಂಗ್ರಹಸ್ಥಳವನ್ನು ರಚಿಸಲು ಹೇಳುತ್ತದೆ - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಈ ವ್ಯತ್ಯಯಕ್ಕೆ ಮೆಮೊರಿಯಲ್ಲಿ ಸ್ಥಳವನ್ನು ಮೀಸಲಿಡುತ್ತದೆ - ಈ ಸಮಯದಲ್ಲಿ ವ್ಯತ್ಯಯದ ಮೌಲ್ಯವಿಲ್ಲ (ಅನಿರ್ಧಿಷ್ಟ) 2. ಅದಕ್ಕೆ ಮೌಲ್ಯ ನೀಡಿ. ಈಗ ನಮ್ಮ ವ್ಯತ್ಯಯದಲ್ಲಿ ಯಾವುದಾದರೂ ಮೌಲ್ಯವನ್ನು ಇರಿಸೋಣ: ```javascript myVariable = 123; ``` ನಿಯುಕ್ತಿಯ ಕಾರ್ಯಪದ್ಧತಿ: - = ನಿರುತ್ತರಿಕಾರಕವು 123 ಎಂಬ ಮೌಲ್ಯವನ್ನು ನಮಗೆ ನೀಡಿದ ವ್ಯತ್ಯಯಕ್ಕೆ ನಿಯೋಜಿಸುತ್ತದೆ - ವ್ಯತ್ಯಯ ಈಗ ಅನಿರ್ಧಿಷ್ಟದಿಂದ ಈ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿದೆ - ನೀವು myVariable ಬಳಸಿ ಕಾರ್ಯಕ್ರಮದಲ್ಲಿ ಈ ಮೌಲ್ಯವನ್ನು ಉಲ್ಲೇಖಿಸಬಹುದು > ಟಿಪ್ಪಣಿ: ಇಲ್ಲಿ = ಬಳಸುವವು ಎಂದರೆ 'ನಿಯೋಜನೆ ನಿರುತ್ತರಿಕಾರಕ'ರಿಂದ ಮೌಲ್ಯವೊಂದು ವ್ಯತ್ಯಯಕ್ಕೆ ನೀಡುವ ಕಾರ್ಯ. ಇದು ಸಮತೆ舟 ಸೂಚಿಸುವುದಿಲ್ಲ. 3. ಸಮಜದಾರಿಯಾದ ಕ್ರಮ ಆಕ್ರಮಿಸಿ. ಆ ಮರಳಿ, ಆ ಎರಡು ಹಂತವನ್ನು ಒಂದೇ Statement ನಲ್ಲಿ ವಿಂಗಡಿಸೋಣ: ```javascript let myVariable = 123; ``` ಈ ವಿಧಾನ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿ: - ನೀವು ವ್ಯತ್ಯಯವನ್ನು ಪ್ರಕಟಿಸುತ್ತಿದ್ದೀರಿ ಮತ್ತು ಮೌಲ್ಯವನ್ನು ನಿಯೋಜಿಸುತ್ತಿದ್ದೀರಿ - ಇದು ಅಭಿವೃದ್ಧಿಗಾರರ ನಡುವೆ ಮಾನ್ಯ ಮಾರ್ಗವಾಗಿದೆ - ಸ್ವಚ್ಛತೆ ಉಳಿಸಿಕೊಂಡು ಕೋಡ್ ಉದ್ದವನ್ನು ಕಡಿಮೆಮಾಡುತ್ತದೆ 4. ನಿಮ್ಮ ಮನಸ್ಸು ಬದಲಾಯಿಸಿ. ಬೇರೆ ಸಂಖ್ಯೆ ಸಂಗ್ರಹಿಸಲು ಬಯಸಿದರೆ ಏನು? ```javascript myVariable = 321; ``` ಪುನಃ ನಿಯೋಜನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು: - ಈಗ ವ್ಯತ್ಯಯವು 123 ಬದಲಾಗಿ 321 ಹೊಂದಿದೆ - ಹಿಂದಿನ ಮೌಲ್ಯ ಬದಲಾಗುತ್ತದೆ – ವ್ಯತ್ಯಯಗಳು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಒಬ್ಬ ಮೌಲ್ಯವನ್ನಷ್ಟೇ ಸಂಗ್ರಹಿಸುತ್ತವೆ - ಈ ಬದಲಾಯಿಸಬಹುದಾದ ಸ್ವಭಾವವು let ನೊಂದಿಗೆ ಪ್ರಕಟಿಸಲ್ಪಡುವ ವ್ಯತ್ಯಯಗಳ ಪ್ರಮುಖ ಲಕ್ಷಣ ✅ ಪ್ರಯತ್ನಿಸಿ! ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ನೇರವಾಗಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಬರೆಯಬಹುದು. ಬ್ರೌಸರ್ ವಿಂಡೋವನ್ನು ತೆರೆಯಿರಿ ಮತ್ತು ಡೆವಲಪರ್ ಟೂಲ್ಸ್ಗೆ ಹೋಗಿ. ಕಾನ್ಸೋಲಿನಲ್ಲಿ let myVariable = 123 ಎಂದು ಟೈಪ್ ಮಾಡಿ, ರಿಟರ್ನ್ ಒತ್ತಿ, ನಂತರ myVariable ಟೈಪ್ ಮಾಡಿ. ಏನಾಗುತ್ತದೆ ನೋಡಿ? ಮುಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಈ ತತ್ವಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚು ಕಲಿಯಲು ಸಿಗುತ್ತದೆ. ### 🧠 ವ್ಯತ್ಯಯಗಳ ನಿಪುಣತೆ ಪರಿಶೀಲನೆ: ಸ್ವಾಪ್ತರಾಗು ನೀವು ವ್ಯತ್ಯಯಗಳ ಬಗ್ಗೆ ಹೇಗೆ ಭಾವಿಸುತ್ತಿದ್ದೀರೆನ್ನೋ ನೋಡಿ: - ವ್ಯತ್ಯಯವನ್ನು ಪ್ರಕಟಿಸುವುದು ಮತ್ತು ಮೌಲ್ಯವನ್ನು ನಿಯೋಜಿಸುವ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ವಿವರಣೆ ಮಾಡಬಲ್ಲೀರಾ? - ಪ್ರತಿ ನೀವು ಒಂದು ವ್ಯತ್ಯಯವನ್ನು ಪ್ರಕಟಿಸುವ ಮೊದಲು ಪ್ರಯೋಗಿಸಲು ಯತ್ನಿಸಿದರೆ ಏನಾಗುತ್ತದೆ? - ಯಾವಾಗ ನೀವು let ಅನ್ನು ವ್ಯತ್ಯಯಕ್ಕೆ const ಬದಲಿಗೆ ಆಯ್ಕೆಮಾಡುತ್ತೀರಿ? ## ಸ್ಥಿರಾಂಕಗಳು ಕೆಲವೊಮ್ಮೆ ಕಾರ್ಯಕ್ರಮ ನಿರ್ವಹಣೆಯ ಸಮಯದಲ್ಲಿ ಎಂದಿಗೂ ಬದಲಾಗದೆ ಇರಬೇಕಾದ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಬೇಕಾಗುತ್ತದೆ. ಸ್ಥಿರಾಂಕಗಳನ್ನು ಪ್ರಾಚೀನ ಗ್ರೀಸ್‌ನ ಯೂಕ್ಲಿಡ್ ಸ್ಥಾಪಿಸಿದ ಗಣಿತ ತತ್ವಗಳಂತೆ ಪರಿಗಣಿಸಿ – ಒಮ್ಮೆ ತೋರಿಸಿಕೊಂಡು ದಾಖಲಾಗಿದೆ ಎಂದರೆ ಮುಂದಿನ ಸಂಧರ್ಭಕ್ಕೆ ಸ್ಥಿರವಾಗಿ ಉಳಿದಿವೆ. ಸ್ಥಿರಾಂಕಗಳು ವ್ಯತ್ಯಯಗಳಂತೆ ಕೆಲಸಮಾಡುತ್ತವೆ, ಆದರೆ ಮಹತ್ವದ ನಿರ್ಬಂಧವೊಂದಿದೆ: ಒಮ್ಮೆ ಅವುಕ್ಕೆ ಮೌಲ್ಯ ನೀಡಿದಾಗ, ಅದನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ. ಈ ಅಚಲತೆ ನಿಮ್ಮ ಕಾರ್ಯಕ್ರಮದಲ್ಲಿ ಪ್ರಮುಖ ಮೌಲ್ಯಗಳಿಗೆ ತಪ್ಪು ಬದಲಾವಣೆಗಳನ್ನು ತಡೆಯುತ್ತದೆ. ಸ್ಥಿರಾಂಕಗಳನ್ನು ಪ್ರಕಟಿಸುವುದು ಮತ್ತು ಪ್ರಾರಂಭಿಸುವುದು ವ್ಯತ್ಯಯಗಳಿಗೆ ಹೋಲಿಕೆಮಾಡಿದಾಗ ಯಥೇಚ್ಛವಾಗಿ ಇರುತ್ತದೆ, ಆದರೆ ಕೀವರ್ಡ್ const ಆಗಿರುತ್ತವೆ. ಸ್ಥಿರಾಂಕಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಎಲ್ಲಾ ಅಕ್ಷರಗಳು ದೊಡ್ಡಕ್ಷರಗಳಾದ ಹೆಸರಿನಿಂದ ಪ್ರಕಟಿಸಲಾಗುತ್ತವೆ. ಈ ಕೋಡ್ ಏನು ಮಾಡುತ್ತದೆ: - MY_VARIABLE ಎಂಬ ಸ್ಥಿರಾಂಕವನ್ನು ಮೌಲ್ಯ 123 ರೊಂದಿಗೆ ರಚಿಸುತ್ತದೆ - ಸ್ಥಿರಾಂಕಗಳಿಗೆ ಹೆಚ್ಚುವರಿಯಾಗಿ ದೊಡ್ಡಕ್ಷರಗಳ ಹೆಸರಿನ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಕೆ ಮಾಡುತ್ತದೆ - ಈ ಮೌಲ್ಯಕ್ಕೆ ಯಾವುದೇ ಭವಿಷ್ಯದ ಬದಲಾವಣೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಸ್ಥಿರಾಂಕಗಳಿಗೆ ಎರಡು ಪ್ರಮುಖ ನಿಯಮಗಳಿವೆ: - ನಿಮಗೆ ಅವುಗಳಿಗೆ ಕೂಡಲೇ ಮೌಲ್ಯ ನೀಡಬೇಕಾಗುತ್ತದೆ – ಖಾಲಿ ಸ್ಥಿರಾಂಕ ಬೇಡ! - ನೀವು ಆ ಮೌಲ್ಯವನ್ನು ಎಂದಿಗೂ ಬದಲಾಯಿಸಬಾರದು – ನೀವು ಪ್ರಯತ್ನಿಸಿದರೆ, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಉದ್ಧಟಿಸಿಬಿಡುತ್ತದೆ. ಇದನ್ನೂ ನೋಡೋಣ: ಸರಳ ಮೌಲ್ಯ - ಕೆಳಗಿನವು ಅಂಗೀಕಾರಾರ್ಹವಿಲ್ಲ: ```javascript const PI = 3; PI = 4; // ಅಂಗೀಕಾರಾರ್ಹವಿಲ್ಲ ``` ನಿಮಗೆ ನೆನಪಿಸುವುದು: - ಸ್ಥಿರಾಂಕದ ಮೌಲ್ಯವನ್ನು ಮರುಹೊಂದಿಸಲು ಅವಕಾಶ ಇಲ್ಲದಿರುವುದು - ಪ್ರಮುಖ ಮೌಲ್ಯಗಳನ್ನು ತಪ್ಪು ಬದಲಾವಣೆಗಳಿಂದ ರಕ್ಷಿಸುವುದು - ನಿಮ್ಮ ಕಾರ್ಯಕ್ರಮದಲ್ಲಿ ಮೌಲ್ಯ ಸತತವಾಗಿರುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುವುದು ವಸ್ತು ಸೃಜನೆಯ ರಕ್ಷಣೆ - ಕೆಳಗಿನವು ಅಂಗೀಕಾರಾರ್ಹವಿಲ್ಲ: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ಅಂಗೀಕಾರಾರ್ಹವಿಲ್ಲ ``` ಈ ತತ್ವಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು: - ಒಟ್ಟು ವಸ್ತುವನ್ನು ಹೊಸದಾಗಿ ಬದಲಾಯಿಸುವುದನ್ನು ತಡೆಹಿಡಿಯುತ್ತದೆ - ಮೂಲ ವಸ್ತುಕ್ಕೆ ಇದ್ದ ಮಾಹಿತಿಯ ರಫ್ತಿಯನ್ನು ರಕ್ಷಿಸುತ್ತದೆ - ಮೆಮೊರಿಯಲ್ಲಿ ವಸ್ತುವಿನ ಗುರುತು ಕಾಪಾಡುತ್ತದೆ ವಸ್ತು ಮೌಲ್ಯವನ್ನು ರಕ್ಷಿಸುವುದಿಲ್ಲ - ಈ ಕೆಳಗಿನವು ಅಂಗೀಕಾರಾರ್ಹ: ```javascript const obj = { a: 3 }; obj.a = 5; // ಅಂಗೀಕಾರಾರ್ಹ ``` ಇಲ್ಲಿ ಏನಾಗುತ್ತದೆ ವಿವರಿಸುವುದು: - ವಸ್ತುವಿನ ಒಳಗಿನ ಗುಣಲಕ್ಷಣ ಮೌಲ್ಯ ಬದಲಾಗುತ್ತದೆ - ವಸ್ತುವಿನ ಗುರುತು ಒಂದೇ ಹಾಗೆ ಇರುತ್ತದೆ - ಗುರೂತ್ವದೊಳಗಿನ ವಿಷಯವನ್ನು ಬದಲಾಯಿಸಬಹುದು ಮತ್ತು ಅದೆಂದು ಗುರುತು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ ಎಂದು ತೋರಿಸುತ್ತದೆ > ಗಮನಿಸಿ, const ಎಂದರೆ ಗುರುತನ್ನು ಮರುಹೊಂದಿಸುವುದರಿಂದ ರಕ್ಷಿಸಿ ನೀಡುತ್ತದೆ. ಮೌಲ್ಯ _ಅಚಲ_ ಅಲ್ಲವೆ ಮತ್ತು ಬದಲಾಯಿಸಬಹುದಾಗಿದೆ, ವಿಶೇಷವಾಗಿ ಅದು ಸಂಕೀರ್ಣ ನಿರ್ಮಾಣವಾಗಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ ವಸ್ತು. ## ಡೇಟಾ ಪ್ರಕಾರಗಳು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮಾಹಿತಿಯನ್ನು ವಿವಿಧ ವರ್ಗಗಳಾದ ಡೇಟಾ ಪ್ರಕಾರಗಳಲ್ಲಿ ಸಂಘಟಿಸುತ್ತದೆ. ಈ ತತ್ವವು ಪ್ರಾಚೀನ ಪಂಡಿತರ ಜ್ಞಾನ ವರ್ಗೀಕರಣದಂತೆ – ಅರಿಸ್ಟೋಟಲ್ ವ್ಯತ್ಯಾಸದ ತತ್ತ್ವಗಳನ್ನು ಪರಿಗಣಿಸಿ, ಕವಿತೆ, ಗಣಿತ ಮತ್ತು ನೈಸರ್ಗಿಕ ತತ್ವಶಾಸ್ತ್ರವನ್ನು ಸಮಾನವಾಗಿ ಮುಖ್ಯವಾಗಿ ಮಾಡಲಾರದಂತೆ ತಿಳಿಯುತ್ತಿದ್ದರು. ಡೇಟಾ ಪ್ರಕಾರಗಳಿಗೆ ಮಹತ್ವವಿರುವುದು, ಬೇರೆ ಬೆಳೆಗಳು ವಿಭಿನ್ನ ರೀತಿಯ ಮಾಹಿತಿಗೆ ಭಿನ್ನವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ವ್ಯಕ್ತಿಯ ಹೆಸರಿನಲ್ಲಿ ಗಣಿತ ಅಥವಾ ಗಣಿತ ಸಮೀಕರಣವನ್ನು ವರ್ಣಮರೆ ಪದ್ಧತಿಯಲ್ಲಿ ಬರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ, ಹಾಗಾಗಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರತಿ ಕಾರ್ಯಕ್ಕೆ ಸರಿಯಾದ ಡೇಟಾ ಪ್ರಕಾರವನ್ನು ಅವಲಂಬಿಸುತ್ತದೆ. ಇದರ ಅರಿವಿನಿಂದ ದೋಷಗಳನ್ನು ತಡೆಯಲು ಮತ್ತು ನಿಮ್ಮ ಕೋಡ್ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಸುತ್ತದೆ. ವ್ಯತ್ಯಯಗಳು ಸಂಖ್ಯೆ ಮತ್ತು ಪಠ್ಯ ಮೊದಲಾದ ವಿವಿಧ ಮೌಲ್ಯಗಳನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು. ಈ ವಿಭಿನ್ನ ಮೌಲ್ಯಗಳಿಗೆ ಸೇರಿದ ಪ್ರಕಾರಗಳನ್ನು ಡೇಟಾ ಪ್ರಕಾರ ಎಂದು ಕರೆಯುತ್ತಾರೆ. ಡೇಟಾ ಪ್ರಕಾರಗಳು ಸಂರಚನಾ ನಿರ್ವಹಣೆಯಲ್ಲಿ ಪ್ರಮುಖ ಪಾತ್ರ ವಹಿಸುತ್ತವೆ ಏಕೆಂದರೆ ಅವು ಪ್ರೋಗ್ರಾಮರ್ಸ್‌ಗೆ ಹೇಗೆ ಕೋಡ್ ಬರೆಯಬೇಕು ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕು ಎಂಬುದರಲ್ಲಿ ನಿರ್ಧಾರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಇನ್ನೂ ಕೆಲವು ಡೇಟಾ ಪ್ರಕಾರಗಳ ವಿಶೇಷ ಲಕ್ಷಣಗಳಿವೆ, ಅವು ಮೌಲ್ಯದಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಮಾಹಿತಿಯನ್ನು ರೂಪಾಂತರಿಸಲು ಅಥವಾ ಹೊರತೆಗೆದುಕೊಂಡು ಉಪಯೋಗಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ✅ ಡೇಟಾ ಪ್ರಕಾರಗಳು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಡೇಟಾ ಮೂಲತತ್ವಗಳೆಂದು ಕೂಡ ಕರೆಸಿಕೊಳ್ಳುತ್ತವೆ, ಏಕೆಂದರೆ ಇವು ಭಾಷೆಯಿಂದ ಒದಗಿಸಲಾಗುವ ಅತ್ಯಂತ ಕಡಿಮೆ ಮಟ್ಟದ ಡೇಟಾ ಪ್ರಕಾರಗಳು. 7 ಮೂಲತತ್ವಗಳ ಪ್ರಕಾರಗಳಿವೆ: ಸರಣಿ (string), ಸಂಖ್ಯೆ (number), ಬಿಗ್‌ಇಂಟ್ (bigint), ಬೂಲಿಯನ್ (boolean), ಅನಿರ್ಧಿಷ್ಟ (undefined), ಶೂನ್ಯ (null) ಮತ್ತು ಸಂಕೇತ (symbol). ಇವುಗಳ ಪ್ರತಿಯೊಂದು ಯಾವದನ್ನು ಪ್ರತಿನಿಧಿಸಬಹುದು ಎಂಬುದನ್ನು ನಿಮಗೆ ಕಲ್ಪನೆ ಮಾಡಿ. zebra ಎಂದರೆ ಏನು? 0 ಯಾ? true ಯಾ? ### ಸಂಖ್ಯೆಗಳು ಸಂಖ್ಯೆಗಳು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಅತ್ಯಂತ ಸರಳ ಡೇಟಾ ಪ್ರಕಾರ. ನೀವು 42 ಮೊದಲನೆಯ ಪೂರ್ಣ ಸಂಖ್ಯೆ, 3.14 ಡಶಮಾಂಶ ಅಥವಾ -5 ಪ್ರತಿಕೂಲ ಸಂಖ್ಯೆಗಳನ್ನು ಬಳಸಿದ್ರೂ, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅವುಗಳನ್ನು ಏಕಸಮಾನವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ. ನಮ್ಮ ಹಿಂದಿನ ವ್ಯತ್ಯಯ ನೆನಪಿದೆಯೇ? ನಾವು ಸಂಗ್ರಹಿಸಿದ 123 ನಂಬರು ಡೇಟಾ ಪ್ರಕಾರ ಎನ್ನಬಹುದು: ಮುಖ್ಯ ಲಕ್ಷಣಗಳು: - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯಗಳನ್ನು ಗುರುತಿಸುತ್ತದೆ - ನೀವು ಈ ವ್ಯತ್ಯಯಗಳೊಂದಿಗೆ ಗಣಿತ ಕಾರ್ಯಗಳನ್ನು ನೆರವೇರಿಸಬಹುದು - ಸ್ಪಷ್ಟವಾದ ಪ್ರಕಾರ ಪ್ರಕಟಣೆಯ ಅಗತ್ಯವಿಲ್ಲ ವ್ಯತ್ಯಯಗಳು ಎಲ್ಲಾ ವಿಧದ ಸಂಖ್ಯೆಗಳನ್ನು, ಡಶಮಾಂಶ ಮತ್ತು ಪ್ರತಿಕೂಲ ಸಂಖ್ಯೆಗಳನ್ನೂ ಸೇರಿಸಿಕೊಂಡು ಸಂಗ್ರಹಿಸಬಹುದು. ಸಂಖ್ಯೆಗಳು ಗಣಿತೀಯ ನಿರುತ್ತರಿಕಾರಕರೊಂದಿಗೆ ಕೂಡ ಬಳಸಬಹುದು, ಇವುಗಳನ್ನು ಮುಂದಿನ ಅರ್ಥಮೆಟಿಕ್ ನಿರುತ್ತರಿಕಾರಕರು ವಿಭಾಗದಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ. ### ಅರ್ಥಮೆಟಿಕ್ ನಿರುತ್ತರಿಕಾರಕರು ಅರ್ಥಮೆಟಿಕ್ ನಿರುತ್ತರಿಕಾರಕರು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಗಣಿತೀಯ ಮೌಲ್ಯವನ್ನು ಲೆಕ್ಕ ಹಾಕಲು ಅವಕಾಶ ನೀಡುತ್ತವೆ. ಈ ನಿರುತ್ತರಿಕಾರಕರು ಶತಮಾನಗಳ ಕಾಲ ಗಣಿತಜ್ಞರು ಉಪಯೋಗಿಸಿದ ಸಂಕೇತಗಳಂತೆ ಕೆಲಸ ಮಾಡುತ್ತವೆ – ಅಲ್ಖ್ವಾರಿಜ್ಮೀ ಮುಂತಾದ ಪಂಡಿತರ ಕಾರ್ಯಗಳಲ್ಲಿ ಕಂಡ ಬಂದ ವಿವರಣಾತ್ಮಕ ಗಣಿತ ಸಂಕೇತಗಳು. ನಿರುತ್ತರಿಕಾರಕರು ಪಾರಂಪಾಯಿಕ ಗಣಿತದಂತೆ: ಕೂಡಲೆ ಸೇರಿಸುವುದಕ್ಕೆ +, ಕಡಿತ ಮಾಡಲು -, ಗುಣಿಸಲು *, ವಿಭಜಿಸಲು / ಮುಂತಾದವು. ಅರ್ಥಮೆಟಿಕ್ ಕಾರ್ಯಗಳಲ್ಲಿ ಬಳಸಬೇಕಾದ ನಿರುತ್ತರಿಕಾರಕರ ಕೆಲವು ವಿಧಗಳು ಇವೆ, ಇವು ಕೆಳಕಂಡಂತೆ: ✅ ಪ್ರಯತ್ನಿಸಿ! ನಿಮ್ಮ ಬ್ರೌಸರಿನ ಕಾನ್ಸೋಲ್ನಲ್ಲಿ ಒಂದು ಅರ್ಥಮೆಟಿಕ್ ಕಾರ್ಯವನ್ನು ಮಾಡಿ. ಫಲಿತಾಂಶಗಳು ನಿಮಗೆ ಅಚ್ಚರಿಯಾಗುತ್ತವೆ ಎಂದು ನೋಡೋಣ? ### 🧮 ಗಣಿತ ಕೌಶಲ್ಯ ಪರಿಶೀಲನೆ: ಆತ್ಮವಿಶ್ವಾಸದಿಂದ ಲೆಕ್ಕ ಹಾಕುವುದು ನಿಮ್ಮ ಅರ್ಥಮೆಟಿಕ್ ತಿಳಿವಳಿಕೆಯನ್ನು ಪರೀಕ್ಷಿಸಿ: - / (ಭಾಗಿಸುವಿಕೆ) ಮತ್ತು % (ಶೇಷ) ನಡುವೆ ಯಾವ ವ್ಯತ್ಯಾಸವಿದೆ? - 10 % 3 ಯ ಸಂಖ್ಯೆ ಪೂರೈಸುವ ಮೊತ್ತ ಏನು ಎಂದು ಮುನ್ಸೂಚಿಸಿ? (ಗೈಡ್: ಅದು 3.33 ಅಲ್ಲ...) - ಶೇಷ ನಿರುತ್ತರಿಕಾರಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ಗೆ ಯಾಕೆ ಉಪಯುಕ್ತವಾಗಬಹುದು? ### ಸರಣಿಗಳು (Strings) ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ, ಪಠ್ಯದ ಡೇಟಾಗಳನ್ನು ಸರಣಿಗಳೆಂದು ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ. "ಸರಣಿ" ಎಂಬ ಪದವು ಕ್ರಮವಾಗಿ ಅಕ್ಷರಗಳನ್ನು ಸರಣಿಯಾಗಿ ಜೋಡಿಸುವ ಕಲ್ಪನೆತಿಂದ ಬಂದಿದೆ, ಮಧ್ಯಯುಗದ ಮಠಗಳಲ್ಲಿ ಸ್ಕ್ರೈಬ್ಸ್ ತಮ್ಮ ಪಠ್ಯ ಲಿಪಿಗಳಲ್ಲಿ ಅಕ್ಷರಗಳನ್ನು ಸಂಯೋಜಿಸುವ ರೀತಿಯಂತೆ. ಸರಣಿಗಳು ವೆಬ್ ಅಭಿವೃದ್ಧಿಗೆ ಮೂಲಮೂಲವಾಗಿವೆ. ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾದ ಪ್ರತಿಯೊಂದು ಪಠ್ಯ – ಬಳಕೆದಾರರ ಹೆಸರುಗಳು, ಬಟನ್ ಲೇಬಲ್‌ಗಳು, ದೋಷ ಸಂದೇಶಗಳು, ವಿಷಯಗಳು – ಸರಣಿ ಡೇಟಾದಂತೆ ನಿರ್ವಹಿಸಲಾಗುತ್ತವೆ. ಕಾರ್ಯಕಾರಿ ಬಳಕೆದಾರ ಇಂಟರ್‌ಫೇಸ್ಗಳನ್ನು ರಚಿಸುವ لاءِ ಸರಣಿಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದು ಅವಶ್ಯಕ. ಸರಣಿಗಳು ನಾಗರಿಕ ಅಥವಾ ಡಬಲ್ ಕ್ವೋಟ್‌ನ ನಡುವಿನ ಅಕ್ಷರಗಳ ಸಂಗ್ರಹಗಳಾಗಿವೆ. ಈ ತತ್ವಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು: - ಸರಣಿಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಏಕರೂಪದ ' ಅಥವಾ ಡಬಲ್ " ಉಲ್ಲೇಖಗಳನ್ನು ಬಳಸುತ್ತದೆ - ಅಕ್ಷರಗಳು, ಸಂಖ್ಯೆಗಳು ಮತ್ತು ಸಂಕೇತಗಳನ್ನು ಹೊಂದಬಹುದಾದ ಪಠ್ಯ ಡೇಟಾ ಸಂಗ್ರಹಿಸುತ್ತದೆ - ನಂತರ ಬಳಕೆಗೆ ಸರಣಿಯ ಮೌಲ್ಯಗಳನ್ನು ವ್ಯತ್ಯಯಗಳಿಗೆ ನಿಯೋಜಿಸುತ್ತದೆ - ಪಠ್ಯ ಮತ್ತು ವ್ಯತ್ಯಯ ಹೆಸರಿನ ವಿಭಿನ್ನತೆ ತಿಳಿಸಲು ಉಲ್ಲೇಖಗಳು ಅಗತ್ಯವಿದೆ ಸರಣಿಯನ್ನು ಬರೆಯುವಾಗ ಉಲ್ಲೇಖಗಳನ್ನು ಬಳಸುವುದು ಮೆಚ್ಚಿನದು, ಇಲ್ಲದಿದ್ದರೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇದನ್ನು ವ್ಯತ್ಯಯದ ಹೆಸರಂದು ಪರಿಗಣಿಸುತ್ತದೆ. ### ಸರಣಿಗಳ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಸರಣಿ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್ ನಿಮಗೆ ಪಠ್ಯ ಘಟಕಗಳನ್ನು ಸೇರಿಸಲು, ವ್ಯತ್ಯಯಗಳನ್ನು ಸೇರಿಸಿಕೊಳ್ಳಲು ಮತ್ತು ಕಾರ್ಯಕ್ರಮ ಸ್ಥಿತಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುವ ಡೈನಾಮಿಕ್ ವಿಷಯಗಳನ್ನು ರಚಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಈ ತಂತ್ರಜ್ಞಾನವು ಪಠ್ಯವನ್ನು ಕಾರ್ಯಕ್ರಮಕೌಶಲ್ಯದಿಂದ ರಚಿಸಲು ಪಥೋತ್ಪಾದನೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಮತ್ತು ನೀವು ಹಲವು ಸರಣಿಗಳನ್ನು ಸೇರಿಸುವ ಅಗತ್ಯ, ಇದನ್ನು ಜೋಡಣೆಯ (concatenation) ಪ್ರಕ್ರಿಯೆ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಎರಡೂ ಅಥವಾ ಹೆಚ್ಚು ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು concatenate ಮಾಡಲು, ಅಥವಾ ಅವುಗಳನ್ನು ಒಟ್ಟುಗೂಡಲು, + ಆಪರೇಟರ್ ಅನ್ನು ಬಳಸಿ. ಹಂತ ಹಂತವಾಗಿ, ಇಲ್ಲಿ ಏನು ನಡೆಯುತ್ತಿದೆ: - + ಆಪರೇಟರ್ ಬಳಸಿ ಬಹುಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಒಟ್ಟುಗೂಡುತ್ತದೆ - ಮೊದಲ ಉದಾಹರಣೆಯಲ್ಲಿ ಸ್ಥಳಗಳಿಲ್ಲದೆ ನೇರವಾಗಿ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಜೋಡಿಸುತ್ತದೆ - ಓದುವ ಮತ್ತಷ್ಟು ಸೌಕರ್ಯಕ್ಕಾಗಿ ಸ್ಟ್ರಿಂಗ್‌ಗಳ ನಡುವೆ ಖಾಲಿ ಸ್ಥಾನಗಳನ್ನಂತಹ " " ಸೇರಿಸಿ - ಸರಿಯಾದ ಸ್ವರೂಪಕ್ಕಾಗಿ ಕಮ್ಮಿಗಳು ಮುಂತಾದ ವ್ಯಾಕರಣ ಚಿಹ್ನೆಗಳನ್ನು ಸೆರೆಹಾಕುತ್ತದೆ ✅ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ 1 + 1 = 2 ಆಗುತ್ತದೆ, ಆದರೆ '1' + '1' = 11 ಆಗುವುದಕ್ಕೆ ಕಾರಣ ಏನು? ಇದು ಕುರಿತು ಯೋಚಿಸಿ. '1' + 1 ಬಗ್ಗೆ ಏನು? ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಸ್ವರೂಪಗೊಳಿಸುವ ಮತ್ತೊಂದು ವಿಧಾನವಾಗಿದೆ, ಇದರಲ್ಲಿ ಕೋಟೇಶನ್ಗಳ ಬದಲು ಬ್ಯಾಕ್‌ಟಿಕ್ ಬಳಸಲಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯ ಪಠ್ಯವಲ್ಲದ ಯಾವುದಾದರೂ ${ } ಎಂಬ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್‌ಗಳಲ್ಲಿ ಇರಬೇಕಾಗುತ್ತದೆ. ಇದರಲ್ಲಿ ಸ್ಟ್ರಿಂಗ್‌ಗಳಾದ ಯಾವುದೇ ಬದಲಾಗುವಗಳು ಸೇರಿವೆ. ಪ್ರತಿಯೊಂದು ಭಾಗವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳೋಣ: - ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ರಚಿಸಲು ಸಾಮಾನ್ಯ ಉಲ್ಲೇಖಗಳ ಬದಲು ಬ್ಯಾಕ್‌ಟಿಕ್ಸ್ ` `` ಅನ್ನು ಬಳಸುತ್ತದೆ - ${} ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ಬಳಸಿ ಬದಲಾಗುವಗಳನ್ನು ನೇರವಾಗಿ ಒಳಗೊಂಡಿದೆ - ಬರೆದಿರುವಂತೆ ಸ್ಥಾನಗಳನ್ನೂ ಸ್ವರೂಪವನ್ನೂ ಮಾಹಿತಿ ಹಾಗೆ ಉಳಿಸಿಕೊಂಡಿದೆ - ಬದಲಾಗುವಗಳೊಂದಿಗೆ ಸಂಕುಲ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ರಚಿಸಲು ಒಂದು ಹೆಚ್ಚು ಸ್ವಚ್ಛವಾದ ವಿಧಾನವನ್ನು ನೀಡುತ್ತದೆ ನೀವು ಯಾವ ವಿಧಾನವನ್ನಾದರೂ ಬಳಸಬಹುದು, ಆದರೆ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ಯಾವುದೇ ಖಾಲಿ ಸ್ಥಳಗಳನ್ನು ಮತ್ತು ಸಾಲು ಮುರಿತಗಳನ್ನು ಗೌರವಿಸುತ್ತವೆ. ✅ ನಿಮಗೆ ಯಾವಾಗ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಬಳಕೆ ಮಾಡಬೇಕು ಮತ್ತು ಸಾಮಾನ್ಯ ಸ್ಟ್ರಿಂಗ್ ಬಳಕೆ ಮಾಡಬೇಕು ಎಂದು ಯೋಚಿಸೋಣ? ### 🔤 ಸ್ಟ್ರಿಂಗ್ ಮಾಸ್ಟರಿ ಪರಿಶీలನೆ: ಪಠ್ಯ ಸಂಚಿಕೆ ನಂಬಿಕೆ ನಿಮ್ಮ ಸ್ಟ್ರಿಂಗ್ ಕೌಶಲ್ಯವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ: - '1' + '1' ಏಕೆ 2 ಅಲ್ಲದೆ '11' ಆಗುತ್ತದೆ ಎಂದು ತಿಳಿಸಬಹುದೇ? - ಯಾವ ಸ್ಟ್ರಿಂಗ್ ವಿಧಾನವು ನಿಮಗೆ ಹೆಚ್ಚು ಓದಲು ಸುಲಭವಾಗಿದೆ: ಸಂಚಿಕೆ ಅಥವಾ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್? - ನೀವು ಸ್ಟ್ರಿಂಗ್‌ಗಳಿಗೆ ಉಲ್ಲೇಖಗಳನ್ನು ಮರೆತರೆ ಏನು ಸಂಭವಿಸುತ್ತದೆ? ### ಬೂಲಿಯನ್ಸ್ ಬೂಲಿಯನ್ಸ್ ಅತಿ ಸರಳ ಡೇಟಾ ರೂಪವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ: ಅವು ಹೊಂದಿರಬಲ್ಲದು ಬರುವ ಎರಡು ಮೌಲ್ಯಗಳಲ್ಲಿ ಒಂದೇ – true ಅಥವಾ false. ಈ ದ್ವಿಮಾನ್ಯ ತಾರ್ಕಿಕ ವ್ಯವಸ್ಥೆ ಅನ್ನು 19ನೇ ಶತಮಾನ गणಿತಜ್ಞ ಜಾರ್ಜ್ ಬೂಲ್ ಅವರು ಬೂಲಿಯನ್ ಬೆಳ್‌ಜಿಬ್ರಾ ವಿನ್ಯಾಸಗೊಳಿಸಿದ್ದಾರೆ. ಸರಳತೆಯಾದರೂ, ಬೂಲಿಯನ್ಸ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ತಾರ್ಕಿಕತೆಗೆ ಅಗತ್ಯವಿದೆ. ಬಳಕೆದಾರ ಲಾಗಿನ್ ಆಗಿರುವುದೋ, ಬಟನ್ ಕ್ಲಿಕ್ ಆಗಿದೆಯೋ ಅಥವಾ ಕೆಲವು ಶರತ್ತುಗಳು ಪೂರ್ತಿಯಾಗಿದೆಯೋ ಎಂದು ಆಧರಿಸಿ ನಿಮ್ಮ ಕೋಡ್ ನಿರ್ಣಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಬೂಲಿಯನ್ಸ್ ಮಾತ್ರ ಎರಡು ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಬಹುದು: true ಅಥವಾ false. ಬೂಲಿಯನ್ಸ್ ನಿರ್ಣಯಗಳಿಗಾಗಿ ಸಹಾಯ ಮಾಡುತ್ತವೆ ಯಾವ ಸಾಲಿನ ಕೋಡ್ ಕಾರ್ಯಗತವಾಗಬೇಕೆಂದರೆ ಶರತ್ತುಗಳು ಪೂರ್ತಿಯಾಗುವಾಗ. ಹಲವಾರು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಆಪರೇಟರ್ಗಳು ಬೂಲಿಯನ್ ಮೌಲ್ಯವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ ಮತ್ತು ನೀವು ಹೆಚ್ಚಿನ ಬಾರಿ ಬದಲಾಗುವಗಳನ್ನು ಗುಣೋತ್ಪನ್ನಿತ ಅಥವಾ ಮೌಲ್ಯನವೀಕರಣ ಕಾರಣ ಆಪರೇಟರ್ಗಳನ್ನು ಗಮನಿಸಿ ಬರೆಯುತ್ತೀರಿ. ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು: - ಬೂಲಿಯನ್ ಮೌಲ್ಯ true ನೀಡುವ ಬದಲಾಗುವವನ್ನು ತಯಾರಿಸಿದ್ದೇವೆ - ಬೌಲಿಯನ್ ಮೌಲ್ಯ false ಸಂಗ್ರಹಿಸುವುದನ್ನು ತೋರಿಸಿದ್ದೇವೆ - ನಿಖರವಾದ ಕೀವರ್ಡ್‌ಗಳು true ಮತ್ತು false (ಉಲ್ಲೇಖಗಳು ಬೇಡ) ಬಳಸಿದ್ದೇವೆ - ಈ ಬದಲಾಗುವಗಳನ್ನು ಶರತ್ತು-ಆಧಾರಿತ ಹೇಳಿಕೆಗಳಲ್ಲಿ ಬಳಕೆಗಾಗಿ ಸಿದ್ಧಪಡಿಸಿದ್ದೇವೆ ✅ ಬದಲಾಗುವವು ಬೂಲಿಯನ್ true ಎಂದು ಮೌಲ್ಯಮಾಪನ ಆದರೆ তাকে 'truthy' ಎಂದು ಪರಿಗಣಿಸಬಹುದು. ಆಸಕ್ತಕರವಾಗಿ, ಜಾವಾ ಸ್ಕ್ರಿಪ್ಟ್ ನಲ್ಲಿ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳೂ truthy ಇವೆ ಅದನ್ನು falsy ಎಂದು ನಿರ್ಧರಿಸಲಾಗದಿದ್ದರೆ ಮಾತ್ರ. ### 🎯 ಬೂಲಿಯನ್ ಲಾಜಿಕ್ ಪರಿಶೀಲನೆ: ನಿರ್ಣಯ能力 ನಿಮ್ಮ ಬೂಲಿಯನ್ ಅರ್ಥವನ್ನು ಪರೀಕ್ಷಿಸಿ: - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ true ಮತ್ತು false ಹೊರತುಪಡಿಸಿ "truthy" ಮತ್ತು "falsy" ಮೌಲ್ಯಗಳನ್ನು ಯಾಕೆ ಇರಿಸುವುದು? - ಈವುಗಳಲ್ಲಿ ಯಾವುದು falsy ಆಗಿರಬಹುದು ಎಂದು ಮುನ್ಸೂಚಿಸಬಹುದೇ: 0, "0", [], "false"? - ಬೂಲಿಯನ್‌ಗಳು ಪ್ರೋಗ್ರಾಮ್ ಹರಿವನ್ನು ನಿಯಂತ್ರಿಸುವುದರಲ್ಲಿ ಹೇಗೆ ಉಪಯುಕ್ತವಾಗಬಹುದು? --- ## 📊 ನಿಮ್ಮ ಡೇಟಾ ಟೈಪ್ಸ್ ಉಪಕರಣ ಸಂಗ್ರಹ ## GitHub Copilot ಏಜೆಂಟ್ ಚಾಲೆಂಜ್ 🚀 ನಿಮ್ಮ ಈ ಕೆಳಗಿನ ಚಾಲೆಂಜ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಏಜೆಂಟ್ ಮೋಡ್ ಬಳಸಿ: ವಿವರಣೆ: ನೀವು ಕಲಿತ ಎಲ್ಲ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಮತ್ತು ನೈಜ ಜಾಗತಿಕ ಡೇಟಾ ಪರಿಗಣನೆಗಳನ್ನು ಗಮನದಲ್ಲಿಟ್ಟುಕೊಂಡು, ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ ನಿರ್ವಹಣೆ ಕಾರ್ಯಕ್ರಮವನ್ನು ರಚಿಸಿ. ಚಾಲೆಂಜ್: ಒಂದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಕ್ರಮವನ್ನು ರಚಿಸಿ, ಅದು ಬಳಕೆದಾರರ ಪ್ರೊಫೈಲ್ ಆಬ್ಜೆಕ್ಟ್‌ನ್ನು ಹೊಂದಿರಲಿ, ಅದರಲ್ಲಿ ಹೆಸರು (ಸ್ಟ್ರಿಂಗ್), ವಯಸ್ಸು (ಸಂಖ್ಯೆ), ವಿದ್ಯಾರ್ಥಿ ಸ್ಥಿತಿ (ಬೂಲಿಯನ್), ಮೆಚ್ಚಿನ ಬಣ್ಣಗಳು ಎಂದು ಅರೆ (array), ಮತ್ತು ವಿಳಾಸ ಆಬ್ಜೆಕ್ಟ್ ಇದ್ದು ಅದರ ರಸ್ತೆ, ನಗರ ಮತ್ತು ಕನ್ನಡ ಸಂಖ್ಯೆ ಗುಣಗಳಿವೆ. ಪ್ರೊಫೈಲ್ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸುವ ಮತ್ತು ವೈಯಕ್ತಿಕ ಕ್ಷೇತ್ರಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುವ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರಲಿ. ಸ್ಟ್ರಿಂಗ್ ಸಂಕಲನ, ಟೆಂಪ್ಲೇಟು ಲಿಟರಲ್ಸ್, ವಯಸ್ಸಿನ ಸಂಖ್ಯಾ ಗಣನೆ ಮತ್ತು ಬೂಲಿಯನ್ ಲಾಜಿಕ್ ಅನ್ನು ವಿದ್ಯಾರ್ಥಿ ಸ್ಥಿತಿಗಾಗಿ ಪ್ರದರ್ಶಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಇಲ್ಲಿ ಏಜೆಂಟ್ ಮೋಡ್ ಬಗ್ಗೆ ಹೆಚ್ಚು ತಿಳಿಯಿರಿ. ## 🚀 ಚಾಲೆಂಜ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕೆಲವು ವರ್ತನೆಗಳು ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರನ್ನು ಅಚ್ಚರಿಗೊಳಿಸಬಹುದು. ಇಲ್ಲಿ ಒಂದು դասಮೂಲಕ ಉದಾಹರಣೆ ಇದೆ: ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕನ್‌ಸೋಲ್‌ನಲ್ಲಿ ಇದನ್ನು ಟೈಪ್ ಮಾಡಿ: let age = 1; let Age = 2; age == Age ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಗಮನಿಸಿ. ಇದು false ಸಿಗುತ್ತದೆ – ಕಾರಣ ತಿಳಿಸಬಹುದೇ? ಇದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಅನೇಕ ವರ್ತನೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ, ಅವುಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ನಂಬಿಕೆಯಾದ ಮತ್ತು ದೋಷರಹಿತವಾಗಿ ಬರೆಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ## ಲೆಕ್ಚರ್ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ ಲೆಕ್ಚರ್ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ ## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ ಈ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವ್ಯಾಯಾಮಗಳ ಪಟ್ಟಿಯನ್ನು ನೋಡಿ ಮತ್ತು ಒಂದು ಪ್ರಯತ್ನಿಸಿ. ನೀವು ಏನು ಕಲಿತೀರಾ? ## ಹವಾಲೆ ಡೇಟಾ ಟೈಪ್ಸ್ ಅಭ್ಯಾಸ ## 🚀 ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಡೇಟಾ ಟೈಪ್ಸ್ ಮಾಸ್ಟರಿ ಸಮಯರೇಖೆ ### ⚡ ಮುಂದಿನ 5 ನಿಮಿಷಗಳಲ್ಲಿ ನೀವು ಮಾಡುವದ್ದು - [ ] ಬ್ರೌಸರ್ ಕನ್‌ಸೋಲ್ ಅನ್ನು ತೆರೆದು ಬಿನ್ನವ ಬಿನ್ನವ ಡೇಟಾ ಪ್ರಕಾರಗಳ 3 ಬದಲಾಗುವಗಳನ್ನು ರಚಿಸಿ - [ ] ಚಾಲೆಂಜ್ ಪ್ರಯತ್ನಿಸಿ: let age = 1; let Age = 2; age == Age ಮತ್ತು ಇದು ಏಕೆ false ಆಗುತ್ತుందೋ ತಿಳಿದುಕೊಳ್ಳಿ - [ ] ನಿಮ್ಮ ಹೆಸರು ಮತ್ತು ಮೆಚ್ಚಿನ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್ ಸಂಕಲನ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಸಂಖ್ಯೆ ಸೇರಿಸಿದಾಗ ಏನಾಗುತ್ತದೆ ಪರೀಕ್ಷಿಸಿ ### 🎯 ಈ ಗಂಟೆಯಲ್ಲಿ ನೀವು ಸಾಧಿಸಬಲ್ಲದು - [ ] ಪಾಠದ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರವನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ ಮತ್ತು ಅಸ್ಪಷ್ಟ מושגים ಪರಿಶೀಲನೆ ಮಾಡಿ - [ ] ಎರಡೂ ಸಂಖ್ಯೆಗಳ ಸಂಖ್ಯೆಗೂಡಿಸುವ, ಭಾಗಿಸು, ಗುಣಿಸು, ನಿಷೇಧಿಸುವ ಸಣ್ಣ ಕ್ಯಾಲ್ಕುಲೇಟರ್ ರಚಿಸಿ - [ ] ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ಬಳಸಿ ಸರಳವಾದ ಹೆಸರು ಸ್ವರೂಪಕಾರ ಕಲಿಸಿ - [ ] == ಮತ್ತು === ಹೋಲಿಕೆ ಆಪರೇಟರ್‌ಗಳ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಆಲೋಚಿಸಿ - [ ] ವಿವಿಧ ಡೇಟಾ ಪ್ರಕಾರಗಳಿಗೆ ಪರಸ್ಪರ ಪರಿವರ್ತನೆ ಅಭ್ಯಾಸ ಮಾಡಿ ### 📅 ನಿಮ್ಮ ವಾರದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ನೆಲೆಭೂಮಿ - [ ] ಹೊಣೆಗಾರಿಕೆಯೊಂದಿಗೆ ಮತ್ತು ಸೃಜನಶೀಲತೆಯೊಂದಿಗೆ ಹವಾಲೆಯನ್ನು ಸಂಪೂರ್ಣಗೊಳಿಸಿ - [ ] ಕಲಿತ ಎಲ್ಲಾ ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಬಳಸಿ ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ ಆಬ್ಜೆಕ್ಟ್ ರಚಿಸಿ - [ ] CSS-Tricks ನಿಂದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವ್ಯಾಯಾಮಗಳೊಂದಿಗೆ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ಬೂಲಿಯನ್ ಲಾಜಿಕ್ ಬಳಸಿ ಸರಳ ಫಾರ್ಮ್ ಮಾನ್ಯತೆಗಾರರ ರಚನೆ ಮಾಡಿ - [ ] ಅರೆ ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ ಡೇಟಾ ಪ್ರಕಾರಗಳೊಂದಿಗೆ ಪ್ರಯೋಗ (ಮುಂದಿನ ಪಾಠಗಳ ಪೂರ್ವಪ್ರದರ್ಶನ) - [ ] ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಸಮುದಾಯದಲ್ಲಿ ಸೇರಿ ಡೇಟಾ ಪ್ರಕಾರಗಳ ಬಗ್ಗೆ ಪ್ರಶ್ನೆ ಕೇಳಿ ### 🌟 ನಿಮ್ಮ ತಿಂಗಳ ಮಟ್ಟದ ಪರಿವರ್ತನೆ - [ ] ಡೇಟಾ ಪ್ರಕಾರ ಜ್ಞಾನದೊಂದಿಗೆ ದೊಡ್ಡ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಯೋಜನೆಗಳಲ್ಲಿ ಸಂಯೋಜಿಸಿ - [ ] ನೈಜ ಅನ್ವಯಗಳಲ್ಲಿ ಪ್ರತಿ ಡೇಟಾ ಪ್ರಕಾರವನ್ನು ಯಾಕೆ ಮತ್ತು ಯಾವಾಗ ಬಳಸಬೇಕೆಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ - [ ] ಆರಂಭಿಕರಿಗೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೂಲಭೂತಗಳನ್ನು ವಿವರಿಸಲು ಸಹಾಯ ಮಾಡಿ - [ ] ವಿವಿಧ ಬಳಕೆದಾರರ ಡೇಟಾ ನಿರ್ವಹಣೆ ಮಾಡುವ ಸಣ್ಣ ಅಪ್ಲಿಕೇಶನ್ ರಚಿಸಿ - [ ] ಪ್ರಗತಿಶೀಲ ಡೇಟಾ ಪ್ರಕಾರ ವಿಷಯಗಳನ್ನು, ಉದಾ: ಟೈಪ್ ಕೋರ್ಶನ್ ಮತ್ತು ಕಠಿಣ ಸಮಾನತೆಯನ್ನು ಅನ್ವೇಷಿಸಿ - [ ] ದೃಶ್ಯ документации ಸುಧಾರಣೆಯೊಂದಿಗೆ ಉಚಿತ ಓಪನ್ ಸೋರ್ಸ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಯೋಜನೆಗಳಿಗೆ ಕೊಡುಗೆ ನೀಡಿ ### 🧠 ಅಂತಿಮ ಡೇಟಾ ಪ್ರಕಾರ ಮಾಸ್ಟರಿ ಪರಿಶೀಲನೆ ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ನೆಲೆಭೂಮಿಯನ್ನು ಹಬ್ಬಿಸಿ: - ಅದರ ವರ್ತನೆ ಕುರಿತು ನಿಮಗೆ ಅಚ್ಚರಿಯನ್ನುಂಟುಮಾಡಿದ ಯಾವ ಡೇಟಾ ಪ್ರಕಾರ? - ನಿಮ್ಮ ಗೊತ್ತು-ಮಾಹಿತಿಗಳನ್ನು ಗೆಳೆಯರಿಗೆ ಬದಲಾಗುವಗಳ ವಿರುದ್ಧ ಸ್ಥಿರಾಂಕಗಳಾಗಿ ಹೇಗೆ ವಿವರಿಸುವಿರಿ? - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಟೈಪ್ ವ್ಯವಸ್ಥೆಯ ಬಗ್ಗೆ ನೀವು ಕಂಡ ಮಗ್ನವಾಗಿದ್ದ ಅತಿ ಆಸಕ್ತಿದಾಯಕ ವಿಷಯ ಯಾವುದು? - ಈ ಮೂಲಭೂತಗಳೊಂದಿಗೆ ನೀವು ಯಾವ ನೈಜ ಸವಾಲಿನ ಆಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಲು ಕಲ್ಪಿಸಿಕೊಳ್ಳುತ್ತೀರಿ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ಜಿಲ್ಲೆ ಮುಖಪುಟ: ಈ ದಸ್ತಾವೇಜನ್ನು AI ಅನುವಾದ ಸೇವೆಯಾದ Co-op Translator ಬಳಸಿ ಅನುವದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಗೆ ಪ್ರಯತ್ನಿಸುವಾಗಲೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸಮರ್ಥತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿಕೊಳ್ಳಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿ ಇರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ಭ್ರಾಂತಿಗಳು ಅಥವಾ ತಪ್ಪು ನಿರ್ವಚನೆಗಳಿಗೆ ನಾವು ಜವಾಬ್ದಾರಿಯಾಗುವುದಿಲ್ಲ. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

JavaScript ಮೂಲಗಳು: ವಿಧಾನಗಳು ಮತ್ತು ಕಾರ್ಯಗಳು

## ಪೂರ್ವ-ಓದು ತರಗತಿ ಪ್ರಶ್ನೋತ್ತರ ಪೂರ್ವ-ಓದು ತರಗತಿ ಪ್ರಶ್ನೋತ್ತರ ಏಕೇತನದ ಕೋಡ್ ಆಗಾಗಲೇ ಬರೆಯುವುದು ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನ ಸಾಮಾನ್ಯ ತೊಂದರೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ಕಾರ್ಯಗಳು ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವುದಕ್ಕೆ ನಿಮಗೆ ಕೋಡ್ ಅನ್ನು ಪುನಃಬಳಕೆ ಮಾಡಬಹುದಾದ ಬ್ಲಾಕ್ಗಳಾಗಿ ಪ್ಯಾಕೇಜ್ ಮಾಡಲು ಅವಕಾಶ ನೀಡುತ್ತವೆ. ಕಾರ್ಯಗಳನ್ನು ಹೆನ್‌ರಿ ಫೋರ್ಡ್ ಅವರ ಅಸೆಂಬ್ಲಿ ಲೈನ್ ಕ್ರಾಂತಿ ಮಾಡಲು ಕಾರಣವಾದ ನಿಯಮಿತ ಭಾಗಗಳಂತೆ ভাবಿಕೊಳ್ಳಿ – ಒಮ್ಮೆ ನೀವು ನಂಬಬಹುದಾದ ಘಟಕವನ್ನು ನಿರ್ಮಿಸಿದಾಗ, ನೀವು ಅದನ್ನು ಬೇರೆ ಎಲ್ಲೆಡೆ ನಿರ್ಮಾಣಿಸದೆ ಬೇಕಾದಾಗ ಬಳಸಬಹುದು. ಕಾರ್ಯಗಳು ನಿಮಗೆ ಕೋಡ್‌ನ ತುಂಡುಗಳನ್ನು ಗುಚ್ಛಿಸಬಹುದಾಗಿಸಿವೆ, ಆದ ಕಾರಣ ನೀವು ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಂದಲ್ಲಿ ಅವುಗಳನ್ನು ಪುನಃಬಳಕೆ ಮಾಡಬಹುದು. ಎಲ್ಲೆಡೆ ಅದೇ ಲಾಜಿಕನ್ನು ನಕಲಿಸುವ ಬದಲು, ನೀವು ಒಮ್ಮೆ ಕಾರ್ಯವನ್ನು ರಚಿಸಿ, ಅದನ್ನು ಬೇಕಾದಾಗ ಕರೆಮಾಡಬಹುದು. ಈ ವಿಧಾನವು ನಿಮ್ಮ ಕೋಡನ್ನು ಸಂಘಟಿತವಾಗಿರಿಸುತ್ತದೆ ಮತ್ತು ನವೀಕರಣಗಳನ್ನು ಬಹಳ ಸುಲಭಗೊಳ್ಳಿಸುತ್ತದೆ. ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಸ್ವಂತ ಕಾರ್ಯಗಳನ್ನು ಹೇಗೆ ರಚಿಸಬೇಕು, ಅವರಿಗೆ ಮಾಹಿತಿ ಹೇಗೆ ಸಲ್ಲಿಸಬೇಕು ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಫಲಿತಾಂಶಗಳನ್ನು ಹೇಗೆ ಪಡೆಯಬೇಕು ಎಂಬುದನ್ನು ಕಲಿತೀರಿ. ನೀವು ಕಾರ್ಯಗಳು ಮತ್ತು ವಿಧಾನಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೀರಿ, ಆಧುನಿಕ ನೂತನ ಬರಹ ರೀತಿ ವಿಧಾನಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳುತ್ತೀರಿ ಮತ್ತು ಕಾರ್ಯಗಳು ಪರಸ್ಪರ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು ಎಂಬುದನ್ನು ಭೇಟಿ ಮಾಡುತ್ತೀರಿ. ನಾವು ಈ ಕಲ್ಪನೆಗಳನ್ನು ಹಂತ ಹಂತವಾಗಿ ನಿರ್ಮಿಸುತ್ತೇವೆ. [](https://youtube.com/watch?v=XgKsD6Zwvlc "ವಿಧಾನಗಳು ಮತ್ತು ಕಾರ್ಯಗಳು") ## ಕಾರ್ಯಗಳು ಕಾರ್ಯವು ಒಂದು ಸ್ವತಂತ್ರ ಕೋಡ್‌ನ ಬ್ಲಾಕ್ ಆಗಿದ್ದು ಅದು ನಿರ್ದಿಷ್ಟ ಕೆಲಸವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ನೀವು ಬೇಕಾದಾಗ ಕಾರ್ಯಗತಗೊಳ್ಳಿಸಬಹುದಾದ ಲಾಜಿಕ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ನೀವು ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಹಲವಾರು ಬಾರಿ ಅದೇ ಕೋಡ್ ಬರೆವ ಬದಲು, ಅದನ್ನು ಕಾರ್ಯದಲ್ಲಿ ಪ್ಯಾಕೇಜ್ ಮಾಡಿ, ನಿಮಗೆ ಬೇಕಾದಾಗ ಅದನ್ನು ಕರೆಮಾಡಬಹುದು. ಈ ವಿಧಾನವು ನಿಮ್ಮ ಕೋಡ್‌ನ ಸ್ವಚ್ಚತೆಯನ್ನು ಕಾಯ್ದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ನವೀಕರಣಗಳನ್ನು ಸುಲಭಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ ಕೋಡ್‌ಗೆ 20 ವಿಭಿನ್ನ ಜಾಗಗಳಲ್ಲಿ ಮಸುಕಾಗಿ ಹೋಲುವ ಲಾಜಿಕ್ ಬದಲಾಯಿಸಬೇಕಾಗಿದ್ದರೆ ಅದರ ನಿರ್ವಹಣೆ ಹೇಗಿರುತ್ತದೆ ಎಂದು ಯೋಚಿಸಿ. ನಿಮ್ಮ ಕಾರ್ಯಗಳಿಗೆ ಸ್ಪಷ್ಟವಾದ ಹೆಸರು ನೀಡುವುದು ಅವಶ್ಯಕ. ಚೆನ್ನಾಗಿ ಹೆಸರು ನೀಡಿ ಕಾರ್ಯವು ತನ್ನ ಉದ್ದೇಶವನ್ನು ಸ್ಪಷ್ಟವಾಗಿ پہنچಿಸಬೇಕು – ನೀವು cancelTimer() ನೋಡಿದಾಗ ಅದು ಏನು ಮಾಡುತ್ತೆ ಎಂಬುದನ್ನು ತಕ್ಷಣ ಗೊತ್ತಾಗುತ್ತದೆ, ಯಾವುದೇ ಸ್ಪಷ್ಟವಾಗಿ ಲೇಬಲ್ ಮಾಡಲಾದ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಏನು ಆಗುವುದೆಂದು ನಿಮಗೆ ತಾನೆ ತಿಳಿಯುತ್ತದೆ. ## ಕಾರ್ಯವನ್ನು ರಚಿಸುವುದು ಮತ್ತು ಕರೆಮಾಡುವುದು ಸರಳವಾಗಿ ಕಾರ್ಯವನ್ನು ರಚಿಸುವ ವಿಧಾನವನ್ನು ನೋಡೋಣ. ಸಿಂಟ್ಯಾಕ್ಸ್ ನಿಯಮಿತ ಮಾದರಿಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ: ಇದನ್ನು ವಿಶ್ಲೇಷಿಸೋಣ: - function ಕೀವರ್ಡ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಗೆ "ನನಗೆ ಕಾರ್ಯ ರಚಿಸಬೇಕಿದೆ!" ಎಂದು ತಿಳಿಸುತ್ತದೆ - nameOfFunction ಎಂದರೆ ನಿಮ್ಮ ಕಾರ್ಯಕ್ಕೆ ಸ್ಪಷ್ಟವಾದ ಹೆಸರು ನೀಡುವ ಸ್ಥಳ - ಕೊಳಕುಗಳು () ಕಾರ್ಯಕ್ಕೆ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಸೇರಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತವೆ (ಇದನ್ನಷ್ಟು ಬೇಗ ತಿಳಿಯೋಣ) - ವೃತ್ತಾಕಾರ ಹಾಳೆಗಳು {} ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿದಾಗ ನಡೆಯುವ ನಿಜವಾದ ಕೋಡ್ ಇರಿಸುವ ಸ್ಥಳ ಈ ಕಾರ್ಯವನ್ನು ದೃಷ್ಟಾಂತವಾಗಿ ರಚಿಸಿ ನೋಡಿ: ಈ ಕಾರ್ಯವು ಕಾನ್ಸೋಲ್‌ಗೆ "Hello, world!" ಅ.printಮಾಡುತ್ತದೆ. ನೀವು ಇದನ್ನು ನಿರ್ದೇಶಿಸಿದ ನಂತರ, ಬೇಕಾದಷ್ಟೂ ಬಾರಿ ಇದನ್ನು ಕರೆಮಾಡಬಹುದು. ನಿಮ್ಮ ಕಾರ್ಯವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು (ಅಥವಾ "ಕರೆಮಾಡಲು") ಕಾರ್ಯದ ಹೆಸರಿನ ನಂತರ ಕೊಳಕುಗಳು ಬರೆಯಿರಿ. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ನಿಮಗೆ ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡುವ ಮೊದಲು ಅಥವಾ ನಂತರ ವ್ಯಾಖ್ಯಾನಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ – ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇಂಜಿನ್ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕ್ರಮವನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ. ಈ ಸಾಲು ನಡೆಯುವಾಗ, ನಿಮ್ಮ displayGreeting ಕಾರ್ಯದೊಳಗಿನ ಎಲ್ಲಾ ಕೋಡ್ ಕಾರ್ಯಗತಗೌಪ್ಯವಾಗಿ ನಡೆಯುತ್ತದೆ, ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕನ್ಸೋಲ್‌ನಲ್ಲಿ "Hello, world!" ತೋರಿಸುತ್ತದೆ. ನೀವು ಈ ಕಾರ್ಯವನ್ನು ಪುನರಾವರ್ತನೆಗೆ ಕರೆದಿಕೊಳ್ಳಬಹುದು. ### 🧠 ಕಾರ್ಯ ಮೂಲಭೂತ ಪರಿಶೀಲನೆ: ನಿಮ್ಮ ಮೊದಲ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ಮಿಸುವುದು ನೀವು મૂળಭೂತ ಕಾರ್ಯಗಳನ್ನು ಹೇಗಿದೆಂಬುದನ್ನು ಪರಿಶೀಲಿಸೋಣ: - ಕಾರ್ಯ ವ್ಯಾಖ್ಯಾನಗಳಲ್ಲಿ {} ಕೊಳಕುಗಳನ್ನು ಏಕೆ ಬಳಕೆ ಮಾಡುತ್ತೇವೆ? - ನೀವು displayGreeting ಬರೆಯುವಾಗ ಕೊಳಕುಗಳನ್ನು ಹೊರತುಪಡಿಸಿದರೆ ಏನಾಗುತ್ತದೆ? - ಏಕೆ ನೀವು ಅದೇ ಕಾರ್ಯವನ್ನು ಹಲವಾರು ಬಾರಿ ಕರೆಮಾಡಲು ಇಚ್ಛಿಸುತ್ತೀರಿ? ### ಕಾರ್ಯಕ್ಕೆ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ಇಲ್ಲಿ ಉತ್ತಮ ಕಾರ್ಯಗಳನ್ನು ಬರೆಯಲು ಸಹಾಯಮಾಡುವ ಕೆಲವು ಸಲಹೆಗಳು: - ನಿಮ್ಮ ಕಾರ್ಯಗಳಿಗೆ ಸ್ಪಷ್ಟ, ವಿವರಣಾತ್ಮಕ ಹೆಸರಿಗಳನ್ನು ನೀಡಿ – ಭವೀಷ್ಯದಲ್ಲಿ ನೀವು ಧನ್ಯವಾದ ಹೇಳುತ್ತೀರಿ! - ಬಹು ಪದದ ಹೆಸರಿಗಾಗಿ camelCase ಬಳಸಿ (ಉದಾ: calculateTotal calculate_total ಬದಲು) - ಪ್ರತಿ ಕಾರ್ಯ ಒಂದೇ ಒಂದು ವಿಷಯದಲ್ಲಿ ಗಮನವಾಗಿರಲಿ ## ಕಾರ್ಯಕ್ಕೆ ಮಾಹಿತಿ ಪಾಸು ಮಾಡುವುದು ನಮ್ಮ displayGreeting ಕಾರ್ಯವು ಸೀಮಿತವಾಗಿದೆ – ಇದು ಎಲ್ಲರಿಗೂ "Hello, world!" ಮಾತ್ರ ತೋರಿಸಬಹುದು. ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು ಕಾರ್ಯಗಳನ್ನು ಹೆಚ್ಚು ಸ್ಥಿತಿಹೀನ ಮತ್ತು ಉಪಯುಕ್ತವಾಗಿಸಬಹುದು. ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು ಬದಲಾದ ಮೌಲ್ಯಗಳನ್ನು ಪ್ರತಿ ಕಾರ್ಯ ಕರೆಯುವಾಗ ಅಂಟಿಸಲು ಸ್ಥಳಧಾರಕಗಳಂತೆ ಕೆಲಸ ಮಾಡುತ್ತವೆ. ಈ ಮೂಲಕ ಇದೇ ಕಾರ್ಯ ವಿಭಿನ್ನ ಮಾಹಿತಿಯೊಂದಿಗೆ ಪ್ರತಿ ಕಾಲ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು. ನೀವು ನಿಮ್ಮ ಕಾರ್ಯವನ್ನು ಸೃಷ್ಟಿಸುವಾಗ ಕೊಳಕುಗಳಲ್ಲಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ವಿವರಿಸಿ, ಮತ್ತು ಹಲವಾರು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ವಿರಾಮಚೇಹ್ನೆಯಿಂದ ಪ್ರತ್ಯೇಕಿಸಿ: ಪ್ರತಿ ಪ್ಯಾರಾಮೀಟರ್ ಒಂದು ಸ್ಥಳಪಡಿಸುವ ಜಾಗವನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ – ಯಾರಾದರೂ ನಿಮ್ಮ ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿದಾಗ, ಅವರು ನಿಜವಾದ ಮೌಲ್ಯಗಳನ್ನು ಈ ಜಾಗಗಳಲ್ಲಿ ಒದಗಿಸುತ್ತಾರೆ. ನಿಮ್ಮ ಸ್ವಾಗತ ಕಾರ್ಯವನ್ನು ಪ್ರತಿಯೊಬ್ಬರ ಹೆಸರು ಒಪ್ಪಿಕೊಳ್ಳುವಂತೆ ನವೀಕರಿಸೋಣ: ನೀವು ಹಿಂದಿನ ಹೆಸರು ಭಾಗದಲ್ಲಿ ಬ್ಯಾಕ್ಟಿಕ್ ಲಕ್ಷಣ (` `) ಮತ್ತು ${}` ಬಳಸಿ ನೇರವಾಗಿ ಸಂದೇಶಕ್ಕೆ ಹೆಸರು ಸೇರಿಸುತ್ತಿರಾ – ಇದನ್ನು ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಎಂದು ಕರೆಯುತ್ತಾರೆ ಮತ್ತು ಇದು ಚರಗಳನ್ನು ಸರಳವಾಗಿ ನಿರ್ಮಿಸಲು ತುಂಬ ಉಪಯುಕ್ತವಾಗಿದೆ. ಈಗ ನೀವು ಕಾರ್ಯವನ್ನು ಕರೆ ಮಾಡಿದಾಗ, ಯಾವ ಹೆಸರು ಬೇಕಾದರೂ ಪಾಸು ಮಾಡಬಹುದು: ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ 'Christopher' ಎಂಬ ಸರಣಿಯನ್ನು name ಪ್ಯಾರಾಮೀಟರ್‌ಗೆ ಒಪ್ಪಿಸುತ್ತಿದೆ, ಮತ್ತು "Hello, Christopher!" ಎಂಬ ವೈಯಕ್ತಿಕ ಸಂದೇಶವನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ## ಪೂರ್ವನಿಯೋಜಿತ ಮೌಲ್ಯಗಳು ನಾವು ಕೆಲವು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಐಚ್ಛಿಕವಾಗಿಸಲು ಬಯಸಿದರೆ? ಅದಕ್ಕೆ ಪೂರ್ವನಿಯೋಜಿತ ಮೌಲ್ಯಗಳು ಸಹಾಯಮಾಡುತ್ತವೆ! ಎರಡನೇ ರೀತಿಯಲ್ಲಿ ಅಭಿವಂದನಾ ಪದವನ್ನು ಬದಲಾಯಿಸಲು ಆದರೆ ಒಬ್ಬರು ಸೂಚಿಸದಿದ್ದರೆ ನಾವು ಡೀಫಾಲ್ಟ್ ಆಗಿ "Hello" ಬಳಸುತ್ತೇವೆ. ನೀವು ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯಗಳನ್ನು ಸಮಾನ ಚಿಹ್ನೆಯನ್ನು ಬಳಸಿ ಸೆಟ್ ಮಾಡಬಹುದು, ಹೇಗೆ ಒಂದು ಚರವನ್ನು ಸೆಟ್ ಮಾಡುತ್ತಾರೆ: ಇಲ್ಲಿ, name ಇನ್ನೂ ಅಗತ್ಯವಿದೆ, ಆದರೆ salutation ಗೆ ಬೇರೆ ಸ್ವಾಗತ ನೀಡದಿದ್ದರೆ 'Hello' ಅಳೆಯುತ್ತೇವೆ. ಈ ಕಾರ್ಯವನ್ನು ಎರಡು ವಿಭಿನ್ನ ರೀತಿಯಲ್ಲಿ ಕರೆ ಮಾಡಬಹುದು: ಮೊದಲ ಕರೆದಲ್ಲಿ, ನಾವು ಸ್ವಾಗತ ಹೇಳಿಕೆಯನ್ನು ನೀಡದಿದ್ದರೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಡೀಫಾಲ್ಟ್ "Hello" ಅನ್ನು ಬಳಸುತ್ತದೆ. ಎರಡನೇ ಕರೆದಲ್ಲಿ, ನಾವು "Hi" ಎಂಬ ಕಸ್ಟಮ್ ಸ್ವಾಗತವನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಸ್ಥಿತಿಉಪಯುಕ್ತತೆಯಿಂದ ಕಾರ್ಯಗಳು ವಿಭಿನ್ನ ಸಂದರ್ಭಗಳಿಗೆ ಸೂಕ್ತವಾಗುತ್ತವೆ. ### 🎛️ ಪ್ಯಾರಾಮೀಟರ್ ಮಾಸ್ಟರಿ ಪರಿಶೀಲನೆ: ಕಾರ್ಯಗಳನ್ನು ಸ್ಥಿತಿಉಪಯುಕ್ತವಾಗಿಸುವುದು ನಿಮ್ಮ ಪ್ಯಾರಾಮೀಟರ್ ತಜ್ಞತೆ ಪರೀಕ್ಷಿಸಿ: - ಪ್ಯಾರಾಮೀಟರ್ ಮತ್ತು_ARGUMENT_ಗಳ ಮಧ್ಯೆ ವ್ಯತ್ಯಾಸವೇನು? - ನಿಜವಾದ ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನಲ್ಲಿ ಪೂರ್ವನಿಯೋಜಿತ ಮೌಲ್ಯಗಳು ಏಕೆ ಉಪಯುಕ್ತ? - ನೀವು ಪ್ಯಾರಾಮೀಟರ್ ಗಿಂತ ಹೆಚ್ಚು_ARGUMENT_ಗಳು ಪಾಸು ಮಾಡಿದರೆ ಏನಾಗಬಹುದು ಎಂದು ನಿರೀಕ್ಷಿಸಬಹುದಾ? ## ಮರುಪಡೆಯುವ ಮೌಲ್ಯಗಳು ನಮ್ಮ ಕಾರ್ಯಗಳು ಈಗಾಗಲೇ ಸಂದೇಶಗಳನ್ನು ಕನ್ಸೊಳ್‌ಗೆ ಮುದ್ರಿಸುತ್ತಿವೆ, ಆದರೆ ನೀವು ಕಾರ್ಯದಿಂದ ಏನಾದರೂ ಲೆಕ್ಕಹಾಕಿಸಿ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಬಯಸಿದರೆ? ಅದಕ್ಕೆ ಮರುಪಡೆಯುವ ಮೌಲ್ಯಗಳು ಉಪಯುಕ್ತ. ಏದನ್ನಾದರೂ ತೋರಿಸುವ ಬದಲು, ಕಾರ್ಯವು ನೀವು ಸಂಗ್ರಹಿಸಬಹುದಾದ ಅಥವಾ ನಿಮ್ಮ ಕೋಡ್‌ನ ಬೇರೆ ಭಾಗಗಳಲ್ಲಿ ಉಪಯೋಗಿಸಬಹುದಾದ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು. ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಲು, return ಕೀವರ್ಡ್ ಬಳಸಿ ನಂತರ ಹಿಂತಿರುಗಿಸಲು ಬಯಸಿದ ಮೌಲ್ಯವನ್ನು ಬರೆಯಿರಿ: ಮುಖ್ಯ విషయం: ಕಾರ್ಯವು return ನಿವೇಶನವನ್ನು ಹೊಯ್ದಾಗ, ತಕ್ಷಣವೇ ಕಾರ್ಯ ನಿಲ್ಲುತ್ತದೆ ಮತ್ತು ಆ ಮೌಲ್ಯವನ್ನು ಕರೆಮಾಡಿರುವ ಜಾಗಕ್ಕೆ ತಲುಪಿಸುತ್ತದೆ. ನಮ್ಮ ಸ್ವಾಗತ ಕಾರ್ಯವನ್ನು ಮುದ್ರಿಸುವ ಬದಲು ಸಂದೇಶವನ್ನು ಹಿಂತಿರುಗಿಸುವಂತೆ ಬದಲಿಸೋಣ: ಈಗ ಕಾರ್ಯವು ಸ್ವಾಗತವನ್ನು ಮುದ್ರಿಸುವ ಬದಲಾಗಿ, ಸಂದೇಶವನ್ನು ರಚಿಸಿ ನಮಗೆ ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಹಿಂತಿರುಗಿದ ಮೌಲ್ಯವನ್ನು ಬಳಸಲು, ನಾವು ಅದನ್ನು ಚರದಲ್ಲಿ ಸಂಗ್ರಹಿಸಬಹುದು: ಈಗ greetingMessage ನಲ್ಲಿ "Hello, Christopher" ಇದೆ ಮತ್ತು ನಾವು ಇದನ್ನು ನಮ್ಮ ಕೋಡ್‌ನಲ್ಲಿ ಯಾವುದೇ ಸ್ಥಳದಲ್ಲಿ ಬಳಸಬಹುದು – ವೆಬ್ ಪುಟದಲ್ಲಿ ತೋರುವುದಕ್ಕೆ, ಇಮೇಲ್‌ನಲ್ಲಿ ಸೇರಿಸುವುದಕ್ಕೆ ಅಥವಾ ಬೇರೆ ಕಾರ್ಯಕ್ಕೆ ಪಾರ್ಯಕ್ಷಿಸುವುದಕ್ಕೆ. ### 🔄 ಮರುಪಡೆಯುವ ಮೌಲ್ಯಗಳ ಪರಿಶೀಲನೆ: ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯುವುದು ನೀವು ಮರುಪಡೆಯುವ ಮೌಲ್ಯವನ್ನು ಹೇಗೆ ತಿಳಿದುಕೊಳ್ಳುತ್ತೀರಿ: - ಕಾರ್ಯದೊಳಗಿನ return ಹೇಳಿಕೆಯಿಂದ ನಂತರದ ಕೋಡ್‌ಗೆ ಏನಾಗುತ್ತದೆ? - ಮುದ್ರಿಸುವ ಬದಲು ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವುದು ಯಾಕೆ ಉತ್ತಮ? - ಕಾರ್ಯವು ವಿಭಿನ್ನ ಪ್ರಕಾರಗಳ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದುವೇ (ಸರಣಿ, ಸಂಖ್ಯೆ, ಬೂಲಿಯನ್)? ## ಕಾರ್ಯಗಳನ್ನು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ ಪ್ಯಾಸು ಮಾಡುವುದು ಕಾರ್ಯಗಳನ್ನು ಬೇರೆ ಕಾರ್ಯಗಳಿಗೆ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ ಪಾಸು ಮಾಡಬಹುದು. ಮೊದಲಿಗೆ ಇದು ಸವಾಲಿನಿರ್ಥಕವಾಗಬಹುದು, ಆದರೆ ಇದು ಸ್ತಿತಿಹೀನ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಮಾದರಿಗಳನ್ನು ಸಾದರಪಡಿಸುತ್ತದೆ. ಈ ಮಾದರಿ ಸಾಮಾನ್ಯವಾಗಿ "ಏನಾದರೂ ಸಂಭವಿಸಿದಾಗ, ಇನ್ನು ಒಂದು ಕಾರ್ಯವನ್ನ ಮಾಡಿ" ಅಂತ ಹೇಳಬೇಕಾಗಿರುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, "ಟೈಮರ್ ಮುಗಿದಾಗ, ಈ ಕೋಡ್ ರನ್ ಆಗಲಿ" ಅಥವಾ "ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಈ ಕಾರ್ಯವನ್ನು ಕರೆಮಾಡಿ" ಎಂದು. setTimeout ಎಂಬ ಒಳಗೊಂಡ ಕಾರ್ಯವನ್ನು ನೋಡೋಣ, ಇದು ಕೆಲವು ಸಮಯವನ್ನು ಕಾಯುತ್ತದೆ ಮತ್ತು ನಂತರ ಕೆಲವು ಕೋಡ್ ರನ್ ಮಾಡುತ್ತದೆ. ನಮಗೆ ಅದಕ್ಕೆ ಯಾವ ಕೋಡ್ ರನ್ ಮಾಡಬೇಕು ಎಂದು ಹೇಳಬೇಕಾಗುತ್ತದೆ – ಕಾರ್ಯವನ್ನು ಪ್ಯಾರಾಮೀಟರ್ ಸಹಾಯದಿಂದ ಪಾಸು ಮಾಡಲು ಇದು ಸೂಕ್ತ ಉದಾಹರಣೆ! ಈ ಕೋಡ್ ಪ್ರಯತ್ನಿಸಿ – 3 ಸೆಕೆಂಡಿನ ಮೇಲೆ ಸಂದೇಶವನ್ನು ನೋಡುತ್ತೀರಿ: ನೀವು displayDone ಅನ್ನು setTimeout ಗೆ (ಕೊಳಕುಗಳಿರದೆ) ಪಾಸು ಮಾಡುತ್ತಿದ್ದೀರಿ. ನಾವು ಕಾರ್ಯವನ್ನು ಸ್ವತಃ ಕರೆ ಮಾಡುತ್ತಿಲ್ಲ – ನಾವು ಅದನ್ನು setTimeout ಗೆ ನೀಡುತ್ತಿದ್ದು "3 ಸೆಕೆಂಡಿನ ಮೇಲೆ ಕರೆಮಾಡು" ಎಂದು ಹೇಳುತ್ತಿದ್ದೇವೆ. ### ಅನಾಮಧೇಯ ಕಾರ್ಯಗಳು ಏಕ ಪ್ರಕರಣಕ್ಕೆ ಮಾತ್ರ ಕಾರ್ಯ ಬೇಕಾದಾಗ ಮತ್ತು ಅದಕ್ಕೆ ಹೆಸರು ನೀಡಬೇಕಾಗಿಲ್ಲದಿದ್ದಾಗ? ಯೋಚಿಸಿ – ನೀವು ಕಾರ್ಯವನ್ನು ಒಮ್ಮೆ ಮಾತ್ರ ಬಳಸದಿದ್ದರೆ, ಅದಕ್ಕಾಗಿ ಹೆಚ್ಚುವರಿ ಹೆಸರು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಅತಿವ್ಯವಸ್ಥೆಗೊಳಿಸುತ್ತದೆಯೇ? ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ನಿಮಗೆ ಅನಾಮಧೇಯ ಕಾರ್ಯಗಳು (ಹೆಸರು ಇರುವುದಿಲ್ಲದ ಕಾರ್ಯಗಳು) ರಚಿಸಲು ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ, ನೀವು ಅವುಗಳನ್ನು ನೀವು ಅವಶ್ಯಕವಾಗಿರುವ ಸ್ಥಳದಲ್ಲೇ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು. ನಮ್ಮ ಟೈಮರ್ ಉದಾಹರಣೆಯನ್ನು ಅನಾಮಧೇಯ ಕಾರ್ಯ ಬಳಸಿ ಮರು ಬರೆಯುವುದು ಹೀಗಿದೆ: ಈದು ಅದೇ ಫಲಿತಾಂಶ, ಆದರೆ ಕಾರ್ಯವು ನೇರವಾಗಿ setTimeout ಕರೆ ಒಳಗೆ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ, ಕೆಲವೊಮ್ಮೆ ಬೇರೆ ಕಾರ್ಯ ವ್ಯಾಖ್ಯಾನ ಅಗತ್ಯವಿಲ್ಲ. ### ಫ್ಯಾಟ್ ಅರೊ (arrow) ಕಾರ್ಯಗಳು ಆಧುನಿಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇನ್ನೂ ಸಂಕ್ಷಿಪ್ತವಾದ ಕಾರ್ಯಗಳನ್ನು ಬರೆಯಲು ಅರೊ ಕಾರ್ಯಗಳು ನಿವಿಧಾನವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಅವು => (ಅರೊ ರೂಪವೆಂದು ಕಾಣುತ್ತದೆ) ಉಪಯೋಗಿಸುತ್ತವೆ ಮತ್ತು ಡೆವಲಪರ್‌ಗಳಲ್ಲಿ ತುಂಬಾ ಜನಪ್ರಿಯವಾಗಿವೆ. ಅರೊ ಕಾರ್ಯಗಳು function ಕೀವರ್ಡ್ ಬಿಟ್ಟುಲಾಗಿ, ಹೆಚ್ಚು ಸಂಕ್ಷಿಪ್ತ ಭಾಷೆಯನ್ನು ಬರೆಯಲು ಸುಲಭ. ನಮ್ಮ ಟೈಮರ್ ಉದಾಹರಣೆ ಅರೊ ಕಾರ್ಯ ಬಳಸಿ ಹೀಗಿದೆ: () ಪ್ಯಾರಾಮೀಟರ್ ಇಡಲು ಜಾಗ (ಈ ಉದಾಹರಣೆಯಲ್ಲಿ ಖಾಲಿ), ನಂತರ => ಮತ್ತು ಕೊನೆಗೆ ವರ್ಗಾಕಾರ ಹಾಳೆಗಳೊಳಗಿನ ಕಾರ್ಯ ದೇಹ. ಇದು ಶೈಲಿಯಲ್ಲಿ ಹೆಚ್ಚು ಸಂಕ್ಷಿಪ್ತ, ಆದರೆ ಕಾರ್ಯನಿರ್ವಹಣೆಯಲ್ಲಿ ಸಮಾನ. ### ಪ್ರತಿಯೊಂದು ರೀತಿ ಬಳಸುವಾಗ ಯಾವಾಗ ಯಾವ ವಿಧಾನವನ್ನು ಬಳಸಬೇಕು? ಪ್ರಾಯೋಗಿಕ ಮಾರ್ಗದರ್ಶಿ: ನೀವು ಕಾರ್ಯವನ್ನು ಎಷ್ಟು ಬಾರಿ ಬಳಸುತ್ತೀರೋ ತಿಳಿದು, ಬಹಳ ಸಲಗಳನ್ನು ಬಳಸಲು ಹೆಸರು ನೀಡಿ ಮತ್ತು ಪ್ರತ್ಯೇಕವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಿ. ಒಮ್ಮೆಕೂಡುವ ತನ್ನ ವಿಶೇಷ ಬಳಸಿಕೋವುದಾದರೆ, ಅನಾಮಧೇಯ ಕಾರ್ಯವನ್ನು ಪರಿಗಣಿಸಿ. ಅರೊ ಕಾರ್ಯ ಮತ್ತು ಸಾಂಪ್ರದಾಯಿಕ ಶೈಲಿ ಎರಡೂ ಸರಾಗ ಆಯ್ಕೆಗಳು, ಆದರೂ ಅರೊ ಕಾರ್ಯಗಳು ಆಧುನಿಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕೋಡ್‌ಬೇಸ್‌ನಲ್ಲಿ ಸಾಮಾನ್ಯ. ### 🎨 ಕಾರ್ಯ ಶೈಲಿಗಳು ಪರಿಶೀಲನೆ: ಸರಿಯಾದ ಶೈಲಿಯನ್ನು ಆರಿಸುವುದು ನಿಮ್ಮ ಶೈಲಿ ತಿಳಿವಳಿಕೆ ಪರೀಕ್ಷಿಸಿ: - ಯಾವಾಗ ನೀವು ಪರಂಪರাগত ಕಾರ್ಯ ಶೈಲಿಗೆ ಬದಲಿ ಅರೊ ಕಾರ್ಯಗಳನ್ನು ಆಯ್ಕೆಮಾಡಬಹುದು? - ಅನಾಮಧೇಯ ಕಾರ್ಯಗಳ ಪ್ರಮುಖ ಲಾಭವೇನು? - ಹೆಸರು ಇರುವ ಕಾರ್ಯ ಒ匿名ಕಾರ್ಯಕ್ಕಿಂತ ಉತ್ತಮವಾಗಿರುವ ಸ್ಥಿತಿಯನ್ನು ನೀವು ಯೋಚಿಸಬಹುದೇ? --- ## 🚀 ಸವಾಲು ಕಾರ್ಯಗಳು ಮತ್ತು ವಿಧಾನಗಳ ಮಧ್ಯೆ ವ್ಯತ್ಯಾಸವನ್ನು ಒಂದು ವಾಕ್ಯದಲ್ಲಿ ವर्णಿಸಬಹುದುವೇ? ಪ್ರಯತ್ನಿಸಿ! ## GitHub Copilot ಏಜೆಂಟ್ ಸವಾಲು 🚀 ಅನುವಾದ: ಈ ಪಾಠದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಿದ ವಿವಿಧ ಕಾರ್ಯ ಕಲ್ಪನೆಗಳನ್ನು ಒಳಗೊಂಡ ಗಣಿತ ಕಾರ್ಯಗಳ ಉಪಯುಕ್ತ ಗ್ರಂಥಾಲಯವನ್ನು ರಚಿಸಿ, ಇದರಲ್ಲಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು, ಪೂರ್ವನಿಯೋಜಿತ ಮೌಲ್ಯಗಳು, ಮರುಪಡೆಯುವ ಮೌಲ್ಯಗಳು ಮತ್ತು ಅರೊ ಕಾರ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರಲಿ. ಪ್ರಾಂಪ್ಟ್: mathUtils.js ಎಂಬ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ ಅನ್ನು ರಚಿಸಿ, ಈ ಕೆಳಗಿನ ಕಾರ್ಯಗಳೊಂದಿಗೆ: 1. ಎರಡು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ತೆಗೆದುಕೊಂಡು ಅವುಗಳ ಮೊತ್ತ ಹಿಂತಿರುಗಿಸುವ add ಕಾರ್ಯ 2. ಪೂರ್ವನಿಯೋಜಿತ ಮೌಲ್ಯಗಳೊಂದಿಗೆ multiply ಕಾರ್ಯ (ಎರಡನೇ ಪ್ಯಾರಾಮೀಟರ್ ಪೂರ್ವನಿಯೋಜಿತ గా 1) 3. ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ತೆಗೆದುಕೊಂಡು ಅದರ ಚದರ ಹಿಂತಿರುಗಿಸುವ ಅರೊ ಕಾರ್ಯ square 4. ಇನ್ನೊಂದು ಕಾರ್ಯವನ್ನು ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ ತೆಗೆದುಕೊಂಡು ಎರಡು ಸಂಖ್ಯೆಗಳ ಮೇಲೆ ಅನ್ವಯಿಸುವ calculate ಕಾರ್ಯ 5. ಎಲ್ಲಾ ಕಾರ್ಯಗಳನ್ನು ಸಮರ್ಪಕ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳೊಂದಿಗೆ ಕರೆಮಾಡಿ ಪ್ರದರ್ಶಿಸುವುದು ಏಜೆಂಟ್ режим್ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿ ಪಡೆಯಿರಿ. ## ಪಶ್ಚಾತ್ತಾಪ ಪತ್ರೌಪಚಾರಿಕ ಪ್ರಶ್ನೋತ್ತರ ಪಶ್ಚಾತ್ತಾಪ ಪತ್ರೌಪಚಾರಿಕ ಪ್ರಶ್ನೋತ್ತರ ## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಅಧ್ಯಯನ ಅರೊ ಕಾರ್ಯಗಳ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಓದಲು ಇದು ಉತ್ತಮ ಅರೊ ಕಾರ್ಯಗಳ ಬಗ್ಗೆ. ಕಾರ್ಯ ಬರೆಯುವ ಅಭ್ಯಾಸ ಮಾಡಿ ಮತ್ತು ನಂತರ ಈ ಶೈಲಿಯಲ್ಲಿ ಮರುಬರೆಯಿರಿ. ## ನಿಯೋಜನೆ ಕಾರ್ಯಗಳಿಂದ_fname_ಆನಂದ --- ## 🧰 ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಗಳ ಉಪಕರಣ ಸಂಗ್ರಹ ಸಾರಾಂಶ --- ## 🚀 ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಗಳು ಮಾಸ್ಟರೈ ಸಮಯರೇಖೆ ### ⚡ ಮುಂದಿನ 5 ನಿಮಿಷಗಳಲ್ಲಿ ನೀವು ಮಾಡಬಹುದಾದವುಗಳು - [ ] ನಿಮ್ಮ ಪ್ರಿಯ ಸಂಖ್ಯೆಯನ್ನು ಹಿಂತಿರುಗಿಸುವ ಸರಳ ಕಾರ್ಯವನ್ನು ಬರೆಯಿರಿ - [ ] ಎರಡೂ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ತೆಗೆದುಕೊಂಡು ಆದುತ್ತ ಪ್ರಕ್ರಿಯೆಯ ಕಾರ್ಯವನ್ನು ರಚಿಸಿ - [ ] ಪರಂಪರೆಯ 함수 ಅನ್ನು ಅರೋ ಫಂಕ್ಷನ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ಗೆ ಪರಿವರ್ತಿಸಲು ಪ್ರಯತ್ನಿಸಿ - [ ] ಸವಾಲಿನ ಅಭ್ಯಾಸ ಮಾಡಿ: ಫಂಕ್ಷನ್‌ಗಳು ಮತ್ತು ವಿಧಾನಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ವಿವರಿಸಿ ### 🎯 ಈ గంటದಲ್ಲಿ ನೀವು ಸಾಧಿಸಬಹುದಾಗಿದೆ - [ ] ಪಾಠೋತ್ತರ ಪ್ರಶ್ನೋತ್ತರವನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ ಮತ್ತು ಯಾವುದೇ ಗೊಂದಲಮಯ概念ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ - [ ] GitHub Copilot ಸವಾಲಿನಿಂದ ಗಣಿತ ಉಪಕರಣಗಳ ಗ್ರಂಥಾಲಯವನ್ನು ನಿರ್ಮಿಸಿ - [ ] ಯಾವುದಾದರೂ ಫಂಕ್ಷನ್ ಅನ್ನು ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿ ಬಳಸುವ ಒಂದು ಫಂಕ್ಷನ್ ರಚಿಸಿ - [ ] ಮೂಲಭೂತ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳೊಂದಿಗೆ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬರೆಯಲು ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ಫಂಕ್ಷನ್ ಮರುಮೌಲ್ಯಗಳಿಗೆ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್‌ಗಳೊಂದಿಗೆ ಪ್ರಯೋಗ ಮಾಡಿ ### 📅 ನಿಮ್ಮ ವಾರದ ಫಂಕ್ಷನ್ ಪ್ರಾಬಲ್ಯ - [ ] "ಫಂಕ್ಷನ್‌ಗಳ ಸವಾರಿ" ಹಿಂದಿನ ಕಾರ್ಯವನ್ನು ಸೃಜನಾತ್ಮಕತೆಯಿಂದ ಪೂರ್ಣಗೊಳಿಸಿ - [ ] ನೀವು ಬರೆದ ಕೆಲವು ಪುನರಾವರ್ತಿತ ಕೋಡ್ ಅನ್ನು ಪುನಃಬಳಕೆಯ ಫಂಕ್ಷನ್‌ಗಳಾಗಿ ಮಾರ್ಪಡಿ - [ ] ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಮಾತ್ರ ಬಳಸಿ (ಗೋಲ್ಬಲ್ ವೇರಿಯಬಲ್ಸ್ ಇಲ್ಲದೆ) ಸಣ್ಣ ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್ ನಿರ್ಮಿಸಿ - [ ] map() ಮತ್ತು filter() ಹೀಗಿನ ಅರೋ ಫಂಕ್ಷನ್‌ಗಳೊಂದಿಗೆ ಅರೋ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಅಭ್ಯಾಸಮಾಡಿ - [ ] ಸಾಮಾನ್ಯ ಕಾರ್ಯಗಳಿಗೆ ಉಪಯುಕ್ತ ಫಂಕ್ಷನ್‌ಗಳ ಸಂಕಲನವನ್ನು ರಚಿಸಿ - [ ] ಹೈಯರ್-ಆರ್ಡರ್ ಫಂಕ್ಷನ್‌ಗಳು ಮತ್ತು ಕಾರ್ಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಕನ್ಸೆಪ್ಟ್‌ಗಳ ಅಧ್ಯಯನ ಮಾಡಿ ### 🌟 ನಿಮ್ಮ ತಿಂಗಳ ರೂಪಾಂತರ - [ ] ಕ್ಲೋಷರ್‌ಗಳು ಮತ್ತು ಸ್ಕೋಪ್ ಹೀಗಿನ ಉನ್ನತ ಫಂಕ್ಷನ್ ಕನ್ಸೆಪ್ಟ್‌ಗಳನ್ನು ಆಳವಾಗಿ ಕಲಿಯೋಣ - [ ] ತುಂಬಾ ಫಂಕ್ಷನ್ ಸಂಯೋಜನೆಯನ್ನು ಬಳಸುವ ಪ್ರಾಜೆಕ್ಟ್ ನಿರ್ಮಿಸಿ - [ ] ಫಂಕ್ಷನ್ ದಸ್ತಾವೇಜಿಕೆಯುಳ್ಳ ಮುಕ್ತ ಮೂಲಕ್ಕೆ ಆಸಕ್ತಿ ನೀಡಿ - [ ] ಮತ್ತೊಬ್ಬರಿಗೆ ಫಂಕ್ಷನ್‌ಗಳು ಮತ್ತು ಭಿನ್ನ ಸಿಂಟ್ಯಾಕ್ಸ್ ಶೈಲಿಗಳ ಬಗ್ಗೆ ಬೋಧಿಸಿ - [ ] ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಕಾರ್ಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಪರಿಗಣನೆಗಳನ್ನು ಅನ್ವೇಷಿಸಿ - [ ] ಭವಿಷ್ಯದ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳಿಗೆ ಪುನಃಬಳಕೆಯ ಫಂಕ್ಷನ್‌ಗಳ ವೈಯಕ್ತಿಕ ಗ್ರಂಥಾಲಯವನ್ನು ರಚಿಸಿ ### 🏆 ಅಂತಿಮ ಫಂಕ್ಷನ್ ಚಾಂಪಿಯನ್ ಪರಿಶೀಲನೆ ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಪ್ರಾಬಲ್ಯವನ್ನು ಆಚರಿಸಿ: - ಇವರೆಗೆ ನೀವು ರಚಿಸಿದ ಅತ್ಯಂತ ಉಪಯುಕ್ತ ಫಂಕ್ಷನ್ ಯಾವುದು? - ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಕಲಿತ ನಂತರ你的代码 ಸಂಘಟನೆ ಬಗ್ಗೆ ನಿನ್ನ ಸೇರಿದ ವಿಧನದಲ್ಲಿ ಯಾವ ಬದಲಾವಣೆ ಬಂತು? - ಯಾವ ಫಂಕ್ಷನ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ನೀವು ಮೆಚ್ಚುತ್ತೀರಿ ಮತ್ತು ಏಕೆ? - ನೀವು ಏನಾದರೂ ನೈಜ ಜಗತ್ತಿನ ಸಮಸ್ಯೆಯನ್ನು ಫಂಕ್ಷನ್ ಬರೆಯುವುದರ ಮೂಲಕ ಪರಿಹರಿಸುತ್ತೀರಾ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ಎಚ್ಚರಿಕೆ: ಈ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು AI ಭಾಷಾಂತರ ಸೇವೆ Co-op Translator ಬಳಸಿ ಭಾಷಾಂತರಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯನ್ನು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ ಸಹ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳಾಗಬಹುದು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದಾಗಿದೆ ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿ ಇರುವ ಅಸಲಿಯಾದ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಅಧಿಕೃತ ವನರಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಭಾಷಾಂತರವನ್ನು ಸಲಹೆ ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಗಾಗಿ ಯಾವುದೇ ತಪ್ಪು ಗ್ರಹಿಕೆಗಳು ಅಥವಾ ತಳಿರುತInterpretations ಕೆಲವರಿಗೂ ಹೊಣೆಗಾರರಾಗದು. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೂಲಭूतಗಳು: ನಿರ್ಧಾರಗಳನ್ನು ಕೈಗೊಳ್ಳುವುದು

ನಿಮ್ಮ ಆಪ್ಲಿಕೇಶನ್‌ಗಳು ಹೇಗೆ ಚತುರ ನಿರ್ಧಾರಗಳನ್ನು ಕೈಗೊಳ್ಳುತ್ತವೆ ಎಂದು ನೀವು ಎಂದಾದರೂ ಆಸೆಪಡುವಿದ್ದೀರಾ? ನ್ಯಾವಿಗೇಶನ್ ಸಿಸ್ಟಮ್ ವೇಗದ ಮಾರ್ಗವನ್ನು ಹೇಗೆ ಆಯ್ಕೆ ಮಾಡುತ್ತದೆ ಅಥವಾ ಥರ್ಮೋಸ್ಟಾಟ್ ಹೀಟ್ ಆನ್ ಮಾಡಬೇಕೆಂದು ಯಾವಾಗ ತೀರ್ಮಾನಿಸುತ್ತದೆ? ಇದು ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನಲ್ಲಿ ನಿರ್ಧಾರ ಕೈಗೊಳ್ಳುವ ಮೂಲಭೂತ ತತ್ವ. ಚಾರ್ಲ್ಸ್ ಬ್ಯಾಬೇಜ್ ಅವರ ಅನಾಲಿಟಿಕಲ್ ಎಂಜಿನ್ ವಿವಿಧ ಪರಿಸ್ಥಿತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಕಾರ್ಯಗಳ ವಿಭಿನ್ನ ಅನುಕ್ರಮಣಗಳನ್ನು ಅನುಸರಿಸಲು ರೂಪಿಸಲಾಗಿದೆ ಹಾಗೆ, ಆಧುನಿಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರೋಗ್ರಾಂಗಳು ಬದಲಾದ ಪರಿಸ್ಥಿತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಆಯ್ಕೆಮಾಡಲೇಬೇಕಾಗುತ್ತದೆ. ಈ ಶಾಖಾಭಿವೃದ್ಧಿ ಮತ್ತು ನಿರ್ಧಾರ ಕೈಗೊಳ್ಳುವ ಸಾಮರ್ಥ್ಯವು ಸ್ಥಿರ ಕೋಡ್ ಅನ್ನು ಪ್ರತ್ಯುತ್ತರ ನೀಡುವ, ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಸಂಚಾಲಿತ ಆ್ಯಪ್‌ಗಳಾಗಿಸಲು ಕಾರಣವಾಗಿದೆ. ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಂಗಳಲ್ಲಿ ಷರತ್ತುಬದ್ಧ ಲಾಜಿಕ್ ಅನ್ನು ಹೇಗೆ ಜಾರಿ ಮಾಡಬೇಕೆಂದು ಕಲಿಯುತ್ತೀರಿ. ನಾವು ಷರತ್ತು ಹೇಳಿಕೆಗಳು, ಹೋಲಿಕೆಯ ಆಪರೇಟರ್‌ಗಳು, ಮತ್ತು ಲಾಜಿಕ್ಯಲ್ ವ್ಯಾಕ್ಯಾನಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ, ಇದರಿಂದ ನಿಮ್ಮ ಕೋಡ್ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ ಸೂಕ್ತವಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸುವ ಸಾಧ್ಯತೆ ಪಡೆಯುತ್ತದೆ. ## ಪೂರವ ಪಾಠವಾಗಿ ಕ್ವಿಜ್ ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್ ನಿರ್ಧಾರ ಕೈಗೊಳ್ಳುವುದು ಮತ್ತು ಪ್ರೋಗ್ರಾಂ ಸಂಚಾರವನ್ನು ನಿಯಂತ್ರಿಸುವ ಸಾಮರ್ಥ್ಯವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ನ ಮೂಲ ಹಸಿವು. ಈ ವಿಭಾಗವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರೋಗ್ರಾಂಗಳ ನಿರ್ವಹಣೆ ಮಾರ್ಗವನ್ನು ಬುಲಿಯನ್ ಮೌಲ್ಯಗಳು ಮತ್ತು ಷರತ್ತುವಾಡುವ ಲಾಜಿಕ್ ಮೂಲಕ ಹೇಗೆ ನಿಯಂತ್ರಿಸುವುದನ್ನು ಒಳಗೊಂಡಿದೆ. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## ಬುಲಿಯನ್ ಗಳ ಕುರಿತ ಸಂಕ್ಷಿಪ್ತ ಪುನರಾವೃತ್ತಿ ನಿರ್ಧಾರಗಳಿಗಾಗಿ ಹೋಗುವ ಮೊದಲು, ಕಳೆದ ಪಾಠದಿಂದ ಬುಲಿಯನ್ ಮೌಲ್ಯಗಳನ್ನು ಪುನರಾವրջಿಸೋಣ. ಗಣಿತಜ್ಞ ಜಾರ್ಜ್ ಬುಲ್ ಅವರ ಹೆಸರು ಪಡೆದ ಈ ಮೌಲ್ಯಗಳು ಬೀನರಿ ಸ್ಥಿತಿಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ – true ಅಥವಾ false. ಇದರಲ್ಲಿ ಎರಡು ಮಧ್ಯಮಸ್ಥಿತಿಗಳಿಲ್ಲ. ಈ ಬೀನರಿ ಮೌಲ್ಯಗಳು ಎಲ್ಲ ಗಣಕ ಲಾಜಿಕ್‌ಗಳ ಆಧಾರವನ್ನು ರೂಪಿಸುತ್ತವೆ. ನಿಮ್ಮ ಪ್ರóg್ರಾಂ ಎಲ್ಲ ನಿರ್ಧಾರವೂ ಅಂತಿಮವಾಗಿ ಬುಲಿಯನ್ ಮೌಲ್ಯಮಾಪನಕ್ಕೆ ಇಳಿಮುಖವಾಗುತ್ತದೆ. ಬುಲಿಯನ್ ಚರಗಳು ಸರಳವಾಯಿತು: ಇದು ಸ್ಪಷ್ಟ ಬುಲಿಯನ್ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಎರಡು ಚರಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ✅ ಬುಲಿಯನ್‌ಗಳು ಇಂಗ್ಲಿಷ್ ಗಣಿತಜ್ಞ, ತತ್ತ್ವಜ್ಞ ಮತ್ತು ಲಾಜಿಕಿಷ್ಟ ಜಾರ್ಜ್ ಬುಲ್ (1815–1864) ಅವರ ಹೆಸರಿನಿಂದ ಪಡೆದವು. ## ಹೋಲಿಕೆಯ ಆಪರೇಟರ್‌ಗಳು ಮತ್ತು ಬುಲಿಯನ್‌ಗಳು ಪ್ರಾಯೋಗಿಕವಾಗಿ, ನೀವು ಬುಲಿಯನ್ ಮೌಲ್ಯಗಳನ್ನು ಕೈಯಿಂದ ಸಹಜವಾಗಿ ನಿಯೋಜಿಸುವುದಿಲ್ಲ. ಬದಲಾಗಿ, ನೀವು ಅವನ್ನು ಷರತ್ತುಗಳ ಮೌಲ್ಯಮಾಪನದಿಂದ ಸೃಷ್ಟಿಸುವಿರಿ: "ಈ ಸಂಖ್ಯೆ ಅದಕ್ಕಿಂತ ಹೆಚ್ಚಿನದೆಯಾ?" ಅಥವಾ "ಈ ಮೌಲ್ಯಗಳು ಸಮಾನವಾಗಿವೆಯಾ?" ಹೋಲಿಕೆಯ ಆಪರೇಟರ್‌ಗಳು ಈ ಮೌಲ್ಯಮಾಪನಗಳನ್ನು ಮಾಡುವಂತೆ ಮಾಡುತ್ತವೆ. ಅವು ಮೌಲ್ಯಗಳನ್ನು ಹೋಲಿಸಿ, ಬೂಲಿಯನ್ ಫಲಿತಾಂಶವನ್ನು ಪರಿಚಯಿಸುತ್ತವೆ. ✅ ನಿಮ್ಮ ಜ್ಞಾನ ಪರೀಕ್ಷಿಸಲು ಕೆಲವು ಹೋಲಿಕೆಗಳನ್ನು ಬ್ರೌಸರ್ ಕಾನ್ಸೋಲ್‌ನಲ್ಲಿ ಬರೆಯಿರಿ. ಯಾವ ಫಲಿತಾಂಶ ನಿಮಗೆ ಆಶ್ಚರ್ಯವೆಂಟಿಸುತ್ತದ? ### 🧠 ಹೋಲಿಕೆ ನಾಯಕತ್ವ ಪರೀಕ್ಷೆ: ಬುಲಿಯನ್ ಲಾಜಿಕ್ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ನಿಮ್ಮ ಹೋಲಿಕೆ ಅರಿವನ್ನು ಪರೀಕ್ಷಿಸುವುದಾಗಿ: - ತೀರಾ ಸಾಮಾನ್ಯವಾಗಿ === (ಕಟ್ಟುನಿರೀಕ್ಷಿತ ಸಮಾನತೆ)ನ್ನು == (ಸೌಮ್ಯ ಸಮಾನತೆ) ಗಿಂತ ಪ್ರಾಧಾನ್ಯ ನೀಡಲಾಗುವುದೇಕೆ? - 5 === '5' ಎಷ್ಟು ಫಲ ನೀಡಬಹುದು? ಹಾಗೆಯೇ 5 == '5' ಯೇನು? - !== ಮತ್ತು != ನಡುವಿನ ವ್ಯತ್ಯಾಸವೇನು? ## If ಹೇಳಿಕೆ if ಹೇಳಿಕೆ ನಿಮ್ಮ ಕೋಡ್‌ನೊಂದರಲ್ಲಿ ಪ್ರಶ್ನೆ ಕೇಳುವುದಕ್ಕೆ ಹೋಲುತ್ತದೆ. "ಈ ಷರತ್ತು ಸತ್ಯವಾಗಿದ್ದರೆ, ಈ ಕಾರ್ಯವನ್ನು ಮಾಡು." ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ನಿರ್ಧಾರ ಕೈಗೊಳ್ಳಲು ಇದು ಬಹುಮುಖ್ಯ ಸಾಧನವಾಗಿರುತ್ತದೆ. ಇದೀಗ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ: ಷರತ್ತುಗಳು ಕೋಟುಗಳಲ್ಲಿ ಇರುತ್ತದೆ, ಮತ್ತು ಅದು true ಆಗಿದ್ದರೆ, ಕೋಡು ಅನ್ನೂಟು ಉಳಿತಾಯ ಮಾಡುತ್ತವೆ. ಅದು false ಆಗಿದ್ದರೆ, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆ ಭಾಗವನ್ನು ದಾಟಿಹೋಗುತ್ತದೆ. ನೀವು ಬಹುತೇಕ ಹೋಲಿಕೆಯ ಆಪರೇಟರ್‌ಗಳನ್ನು ಶರತ್ತು ಮಾಡಲು ಬಳಸುತ್ತೀರಿ. ಆಶಾಕರ ಉದಾಹರಣೆ ನೋಡೋಣ: 1000 >= 800 הוא true ಎಂದು ಮೌಲ್ಯಮಾಪನಗೊಂಡಿದ್ದರಿಂದ, ಬ್ಲಾಕ್ ಒಳಗಿನ ಕೋಡ್ ಚಲನಾರ್ಥಕ ಆಗಿ, "Gettig a new laptop!" ಎಂಬ ಸಂದೇಶವನ್ನು ಕಾನ್‌ಸೋಲ್‌ನಲ್ಲಿ ತೋರಿಸುತ್ತದೆ. ## If..Else ಹೇಳಿಕೆ ಆದರೆ ಷರತ್ತು ತಪ್ಪಾಗಿದ್ದಾಗ ಪ್ರೋಗ್ರಾಂ ಬೇರೆಯದೇ ಕೆಲಸ ಮಾಡಬೇಕಿದ್ದರೆ ಏನು? ಅಲ್ಲಿ else ಸಹಾಯ ಮಾಡುತ್ತದೆ – ಇದು ಬ್ಯಾಕಪ್ ಯೋಜನೆಯಂತಿದೆ. else ಹೇಳಿಕೆ "ಈ ಷರತ್ತು ಸರಿ ಇಲ್ಲದೆ ಇದ್ದರೆ, ಇದರಂತೆ ಮಾಡಿ" ಎಂದಂತೆ ಸೂಚಿಸುತ್ತದೆ. ಇದೀಗ, 500 >= 800 ಎಂಬುದು false ಆದ್ದರಿಂದ, ಆದ ಮಾಡು ಬ್ಲಾಕ್ ಬಿಟ್ಟು, else ಬ್ಲಾಕ್ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತದೆ. ನೀವು "Can't afford a new laptop, yet!" ಎಂಬ ಸಂದೇಶವನ್ನು ಕಂಡಿರುತ್ತೀರಿ. ✅ ಈ ಕೋಡ್ ಹಾಗೂ ಕೆಳಗಿನ ಕೋಡ್ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕಾನ್‌ಸೋಲ್‌ನಲ್ಲಿ ಓಡಿ ಬ್ಲಾಕ್ ಆಗಿರುವ console.log() ಮೌಲ್ಯಗಳನ್ನು ಬದಲಾಯಿಸಲು currentMoney ಮತ್ತು laptopPrice ಚರ ಮೌಲ್ಯಗಳನ್ನು ಬದಲಿಸಿ ಪರೀಕ್ಷಿಸಿ. ### 🎯 If-Else ಲಾಜಿಕ್ ಪರೀಕ್ಷೆ: ಶಾಖೆಯ ಮಾರ್ಗಗಳು ನಿಮ್ಮ ಷರತ್ತು ಲಾಜಿಕ್ ಅರಿವನ್ನು ಮೌಲ್ಯಮಾಪನಮಾಡಿ: - currentMoney ಮತ್ತು laptopPrice ಸರಿ ಸಮಾನವಾಗಿದ್ದರೆ ಏನು ಆಗುತ್ತದೆ? - ಯಾವುದೇ ನಿಜವಾದ ಪರಿಸ್ಥಿತಿಯ ಉದಾಹರಣೆ ನೀಡಬಹುದು, ಇಲ್ಲಿ if-else ಲಾಜಿಕ್ ಉಪಯುಕ್ತವಾಗಬಹುದು? - ಇದನ್ನು ಹೆಚ್ಚು ಬೆಲೆ ಶ್ರೇಣಿಗಳಿಗೆ ವ್ಯಾಪಿಸಲು ಹೇಗೆ ವಿಸ್ತರಿಸಬಹುದು? ## Switch ಹೇಳಿಕೆ ಕೆಲವೊಮ್ಮೆ ನೀವು ಒಂದೇ ಮೌಲ್ಯವನ್ನು ಹಲವಾರು ಆಯ್ಕೆಗಳಿಗಿಂತ ಹೋಲಿಸಬೇಕಾಗುತ್ತದೆ. ನೀವು ಸುಳಿದಂತೆ ಹಲವು if..else ಹೇಳಿಕೆಗಳನ್ನು ಸರಿಪಡಿಸಬಹುದು, ಆದರೆ ಅದು ಗೊಂದಲ ಉಂಟುಮಾಡುತ್ತದೆ. switch ಹೇಳಿಕೆ ಬಹುಮುಖ ಮೌಲ್ಯಗಳನ್ನು ನಿಯಂತ್ರಿಸಲು ಸ್ವಚ್ಛ ವಾಕ್ಯರಚನೆ ನೀಡುತ್ತದೆ. ಈ ತತ್ತ್ವವು ಪ್ರಾರಂಭಿಕ ದೂರವಾಣಿ ವಿನಿಮಯತಂತ್ರಗಳ ಮೆಕ್ಯಾನಿಕಲ್ ಸ್ವಿಚಿಂಗ್ ವ್ಯವಸ್ಥೆಗಳಂತೆ – ಒಂದು ಇನ್ಪುಟ್ ಮೌಲ್ಯ ನಿರ್ದಿಷ್ಟ ಶಾಖೆಯನ್ನು અમಲಿಗೆ ತರುತ್ತದೆ. ಇದೀಗ ಇದರ ಸಂರಚನೆ: - ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಒಮ್ಮೆ ಪರಿಣಾಮವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುತ್ತದೆ - ಪ್ರತಿ case ಅನ್ನು ಸರಿಸುಮಾರುಮಾಡುತ್ತದೆ - ಹೊಂದಿಕೆಯಾಗುವ case ಕಂಡರೆ, ಆ ಕೋಡ್ ಬ್ಲಾಕ್ ಅನ್ನು ಚಲಿಸುತ್ತದೆ - break ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ಗೆ ಸ್ವಿಚ್ ನಿಂದ ನಿಲ್ಲಿಸಲೆಂದು ಸೂಚಿಸುತ್ತದೆ - ಯಾವುದೇ case ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ, default ಬ್ಲಾಕ್ ಚಾಲನೆಗೊಳ್ಳುತ್ತದೆ (ಇದಾದರೆ) ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, dayNumber 2 ಆಗಿದ್ದು, case 2 ಹೊಂದಿಕೆ ಕಂಡು, dayName ಅನ್ನು "Tuesday" ಗೆ ನಿಗದಿಮಾಡಿದ ನಂತರ ಸ್ವಿಚ್ ನಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ. ಫಲಿತಾಂಶ? "Today is Tuesday" ಅನ್ನು ಕಾನ್‌ಸೋಲ್‌ನಲ್ಲಿ ದಾಖಲಿಸುತ್ತದೆ. ✅ ಈ ಕೋಡ್ ಹಾಗೂ ಕೆಳಗಿನ ಕೋಡ್ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕಾನ್‌ಸೋಲ್‌ನಲ್ಲಿ ಓಡಿ, a ಚರ ಮೌಲ್ಯ ಬದಲಾಯಿಸಿ console.log() ಫಲಿತಾಂಶ ಪರಿಶೀಲಿಸಿ. ### 🔄 Switch ಹೇಳಿಕೆ ಪಟುತೆ: ಬಹು ಆಯ್ಕೆ ನಿಮ್ಮ ಸ್ವಿಚ್ ಅರಿವನ್ನು ಪರೀಕ್ಷಿಸಿ: - break ಹೇಳಿಕೆಯನ್ನು ಮರೆತರೆ ಏನು ಆಗುತ್ತದೆ? - ಅನೇಕ if-else ಹೇಳಿಕೆಗಳಿಗಿಂತ switch ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕು? - ಎಲ್ಲಾ ಸಾಧ್ಯತೆಗಳನ್ನು ಮುಚ್ಚಿಕೊಂಡಿದ್ದೀರಿ ಎಂದು ನೀವು ಭಾವಿಸಿದರೂ, default ಕೇಸ್ ಎಷ್ಟು ಉಪಯುಕ್ತ? ## ಲಾಜಿಕಲ್ ಆಪರೇಟರ್‌ಗಳು ಮತ್ತು ಬುಲಿಯನ್‌ಗಳು ಸಂಕೀರ್ಣ ನಿರ್ಧಾರಗಳು ಸಹಜವಾಗಿಯೇ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಷರತ್ತುಗಳನ್ನು ಒಂದೇ ವೇಳೆ ಮೌಲ್ಯಮಾಪನ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಬುಲಿಯನ್ ಬೀಜಗಣಿತ ಪ್ರಕಾರ ಗಣಿತज्ञರು ಲಾಜಿಕಲ್ ವ್ಯಾಕ್ಯಾನಗಳನ್ನು ಸಂಯೋಜಿಸುವಂತೆ, ಪ್ರೋಗ್ರಾಮಿಂಗ್ ನಲ್ಲಿ ಲಾಜಿಕಲ್ ಆಪರೇಟರ್‌ಗಳು ಹಲವು ಬುಲಿಯನ್ ಷರತ್ತುಗಳನ್ನು ಸಂಪರ್ಕಿಸುತ್ತವೆ. ಈ ಆಪರೇಟರ್‌ಗಳು ಸರಳ true/false ಮೌಲ್ಯಗಳನ್ನು ಕನ್ನಡಿಸುವುದರ ಮೂಲಕ ಜಟಿಲ ಷರತ್ತು ಲಾಜಿಕ್ ನಿರ್ಮಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಈ ಆಪರೇಟರ್‌ಗಳು ಷರತ್ತುಗಳನ್ನು ಉಪಯುಕ್ತ ರೀತಿಯಲ್ಲಿ ಸಂಯೋಜಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತವೆ: - AND (&&) ಅಂದರೆ ಎರಡು ಷರತ್ತುಗಳೂ true ಆಗಿರಬೇಕು - OR (||) ಅಂದರೆ ಕನಿಷ್ಟ ಒಂದು ಷರತ್ತು true ಆಗಿರಬೇಕು - NOT (!) ಅಂದರೆ true ನಿಂದ false ಮತ್ತು false ನಿಂದ true ಗೆ ತಿರುವು ## ಲಾಜಿಕಲ್ ಆಪರೇಟರ್‌ಗಳೊಂದಿಗೆ ಷರತ್ತುಗಳು ಮತ್ತು ನಿರ್ಧಾರಗಳು ಇದೀಗ ಕೆಲವು ವೈಯಕ್ತಿಕ ಉದಾಹರಣೆಯೊಂದಿಗೆ ಆಪರೇಟರ್‌ಗಳ ಕಾರ್ಯವನ್ನು ನೋಡೋಣ: ಈ ಉದಾಹರಣೆಯಲ್ಲಿ: ನಾವು 20% ರಿಯಾಯಿತಿ ಬೆಲೆಯನ್ನು (640) ಲೆಕ್ಕಹಾಕುತ್ತೇವೆ, ನಂತರ ನಮ್ಮ ಪ್ರಾಪ್ತ ಹಣವು ಪೂರ್ಣ ಬೆಲೆಗೆ ಅಥವಾ ರಿಯಾಯಿತಿ ಬೆಲೆಗೆ ಸಮರ್ಪಕವಾಗಿದೆಯೇ ಎಂದು ಪರೀಕ್ಷಿಸುತ್ತೇವೆ. 600 ರಿಯಾಯಿತಿ ಬೆಲೆಯ 640 ಕ್ಕಿಂತ ಕಡಿಮೆ ಆದರೂ, ಷರತ್ತು true ಆಗಿ ಮೌಲ್ಯಮಾಪನವಾಗುತ್ತದೆ. ### 🧮 ಲಾಜಿಕಲ್ ಆಪರೇಟರ್ ಪರೀಕ್ಷೆ: ಷರತ್ತುಗಳ ಸಂಯೋಜನೆ ನಿಮ್ಮ ಲಾಜಿಕಲ್ ಆಪರೇಟರ್ ಅರಿವನ್ನು ಪರೀಕ್ಷಿಸಿ: - A && B ನಲ್ಲಿ A false ಆಗಿದ್ದರೆ ಏನು ಆಗುತ್ತದೆ? B ಕೂಡ ಮೌಲ್ಯಮಾಪನ ಆಗುತ್ತದೆಯೆ? - ಎಲ್ಲಾ ಮೂರು ಆಪರೇಟರ್‌ಗಳ (&&, ||, !) ಆವಶ್ಯಕತೆಯಾದ ಸಂದರ್ಭವನ್ನು ನೀವು ಊಹಿಸಬಲ್ಲಿರಾ? - !user.isActive ಮತ್ತು user.isActive !== true ನಡುವೆ ಏನು ವ್ಯತ್ಯಾಸ ಇದೆ? ### ನೆಗೆಷನ್ ಆಪರೇಟರ್ ಕೆಲವೊಮ್ಮೆ ಕೇವಲ ಯಾವಾಗ ಯಾವುದು ಸರಿ ಅಲ್ಲದಿರುವುದನ್ನು ಯೋಚಿಸುವುದು ಸುಲಭವಿರುತ್ತದೆ. "ಬಳಕೆದಾರ ಲಾಗಿನ್ ಆಗಿದ್ದಾರೇ?" ಅನುಬಂಧ ಈжಿಕೆ ಬದಲಾಗಿ "ಬಳಕೆದಾರ ಲಾಗಿನ್ ಆಗಿರಲ್ಲವೇ?" ಎಂದು ತಿಳಿಯಲು ಬಯಸಬಹುದು. exclamation mark (!) ಆಪರೇಟರ್ ಲಾಜಿಕ್ ತಿರುವು ಮಾಡುತ್ತದೆ. ! ಆಪರೇಟರ್ ಅಂದರೆ "ವಿರುದ್ಧ..." — ಏನಾದರೂ true ಇದ್ದರೆ, ! ಅದನ್ನು false ಮಾಡುತ್ತದೆ ಮತ್ತು ವಿಸರ್ಜಕ. ### ಟೆర్నರಿ ವ್ಯಾಕ್ಯಾನಗಳು ಸರಳ ಷರತ್ತು ಅನಿಯಮಗಳಿಗೆ, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಟೆರ್ಮರಿ ಆಪರೇಟರ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ಸಂಕ್ಷಿಪ್ತ ವಾಕ್ಯರಚನೆ ಒಬ್ಬ ಸಾಲಿನಲ್ಲಿ ಷರತ್ತು ವ್ಯಾಖ್ಯಾನವನ್ನು ಬರೆಯಲು ಅನುಕೂಲಕರವಾಗಿದ್ದು, ಷರತ್ತು ಆಧಾರದ ಮೇಲೆ ಎರಡರಲ್ಲಿ ಒಂದು ಮೌಲ್ಯ ನಿಯೋಜಿಸುವಾಗ ಉಪಯುಕ್ತ. ಇದು ಪ್ರಶ್ನೆಯಂತೆ ಓದುತ್ತದೆ: "ಈ ಷರತ್ತು ಸರಿ ಆದ್ರೆ, ಈ ಮೌಲ್ಯ ಬಳಸಿ. ಇಲ್ಲವೆ, ಆ ಮೌಲ್ಯ ಬಳಸಿ." ಕೆಳಗಿನ ವಿಶೇಷ ಉದಾಹರಣೆ: ✅ ಈ ಕೋಡ್ ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯ ಓದಿ. ಈ ಆಪರೇಟರ್‌ಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂದು ನೀವು ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದೀರಾ? ಈ ಸಾಲು ಹೇಳುತ್ತಿರುವುದು: "firstNumber secondNumber ಗಿಂತ ದೊಡ್ಡದಿದೆಯಾ? ಆದರೆ ಹೌದಾದರೆ, firstNumber ಅನ್ನು biggestNumber ಗೆ ನಿಗದಿಮಾಡಿ. ಇಲ್ಲವಾದರೆ secondNumber ನಿಗದಿಮಾಡಿ." ಟೆರ್ಮರಿ ಆಪರೇಟರ್ ಕೇವಲ ಹಳೆಯ if..else ಹೇಳಿಕೆಯಲ್ಲಿ ಸಂಕ್ಷಿಪ್ತ ರೂಪವಾಗಿದೆ: ಎರಡೂ ವಿಧಾನಗಳು ತಕ್ಕ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡುತ್ತವೆ. ಟೆರ್ಮರಿ ಆಪರೇಟರ್ ಸಂಕ್ಷಿಪ್ತತೆ ನೀಡುವುದಾದರೆ, ಸಾಂಪ್ರದಾಯಿಕ if-else ರಚನೆ ಹೆಚ್ಚಿನ ಅರ್ಥಗರ್ಭಿತ ಸಂಜ್ಞೆಗಳಿಗೆ ಸ್ಪಷ್ಟವಾಗಿರಬಹುದು. --- ## 🚀 ಸವಾಲು ಮೊದಲು ಲಾಜಿಕಲ್ ಆಪರೇಟರ್‌ಗಳೊಂದಿಗೆ ಬರೆದ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ರಚಿಸಿ, ನಂತರ ಅದನ್ನು ಟೆರ್ಮರಿ ವ್ಯಾಕ್ಯಾನ ಬಳಸಿ ಮರುಹರ್ತಿ ಮಾಡಿ. ನಿಮ್ಮ ಇಚ್ಛಿತ ವಾಕ್ಯರಚನೆ ಯಾವುದು? --- ## GitHub Copilot ಏಜೆಂಟ್ ಸವಾಲು 🚀 ಕೆಳಗಿನ ಸವಾಲನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಏಜೆಂಟ್ ಮೋಡ್ ಬಳಸಿ: ವರನನೆ: ಈ ಪಾಠದಿಂದ ಹಲವು ನಿರ್ಧಾರ ತತ್ವಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವ ಸಮಗ್ರ ಗ್ರೇಡ್ کیلಕ್ಯುಲೇಟರ್ ರಚಿಸಿ, ಇದರಲ್ಲಿ if-else ಹೇಳಿಕೆಗಳು, switch ಹೇಳಿಕೆಗಳು, ಲಾಜಿಕಲ್ ಆಪರೇಟರ್‌ಗಳು ಮತ್ತು ಟೆರ್ಮರಿ ವ್ಯಾಕ್ಯಾನಗಳು ಸೇರಿರಲಿ. ಪ್ರಾಂಪ್ಟ್: ವಿದ್ಯಾರ್ಥಿಯ ಸಂಖ್ಯಾತ್ಮಕ ಅಂಕ (0-100) ಪಡೆದ ಜೊತೆಗೆ ಕೆಳಗಿನ ಮಾನದಂಡಗಳನ್ನು ಅನುಸರಿಸಿ ಅವರ ಅಕ್ಷರ ಗ್ರೇಡ್ ಅನ್ನು ನಿರ್ಧರಿಸುವ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರೋಗ್ರಾಂ ಬರೆಯಿರಿ: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 ಕಿಂತ ಕೆಳಗೆ ಅಭಿವೃದ್ಧಿ: 1. ಅಕ್ಷರ ಗ್ರೇಡ್ ನಿರ್ಧರಿಸಲು if-else ಹೇಳಿಕೆಯನ್ನು ಬಳಸಿ 2. ವಿದ್ಯಾರ್ಥಿ ಉತ್ತೀರ್ಣರಾದರೆ (ಗ್ರೇಡ್ >= 60) ಮತ್ತು ಗೌರವ ಪಡೆದಿದ್ದರೆ (ಗ್ರೇಡ್ >= 90) ಎಂದು ಪರಿಶೀಲಿಸಲು ಲಾಜಿಕಲ್ ಕಾರ್ಯಚಾಲಕರನ್ನು ಬಳಸಿ 3. ಪ್ರತಿ ಅಕ್ಷರಾತ್ಮಕ ಗ್ರೇಡ್‌ಗೆ ವಿಶೇಷ ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಲು ಸ್ವಿಚ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಅನ್ನು ಬಳಸಿ 4. ವಿದ್ಯಾರ್ಥಿ ಮುಂದಿನ ಕೋರ್ಸ್‌ಗಾಗಿ ಅರ್ಹನೋ (ಗ್ರೇಡ್ >= 70) ಎಂದು ನಿರ್ಧರಿಸಲು ಟೆರ್ಣರಿ ಕಾರ್ಯಚಾಲಕವನ್ನು ಬಳಸಿ 5. ಅಂಕೆಯನ್ನು 0 ಮತ್ತು 100ರ ನಡುವೆ ಇರುವುದಾಗಿ ಖಚಿತಪಡಿಸಲು ಇನ್‌ಪುಟ್ ಮಾನ್ಯತೆ ಸೇರಿಸಿ ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಮ್ ಅನ್ನು 59, 60, 89, 90, ಮತ್ತು ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್‌ಗಳಂತಹ ಅಂಚು ಪ್ರಕರಣಗಳನ್ನು ಒಳಗೊಂಡ ವಿವಿಧ ಅಂಕಗಳೊಂದಿಗೆ ಪರೀಕ್ಷಿಸಿ. ಈಗಲಿನ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ಅಜೆಂಟ್ ಮೋಡ್ ಇಲ್ಲಿ ನೋಡಿ. ## ಪಾಠದ ನಂತರದ ಕ್ವಿಜ್ ಪಾಠದ ನಂತರದ ಕ್ವಿಜ್ ## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿರುವ ಅನೇಕ ಕಾರ್ಯಚಾಲಕರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಿ MDN ನಲ್ಲಿ. ಜೋಶ್ ಕೊಮೋ ಅವರ ಅದ್ಭುತ ಕಾರ್ಯಚಾಲಕ ಹುಡುಕಾಟ ಮೂಲಕ ಹೋಗಿ! ## ನಿಯುಕ್ತಿ ಕಾರ್ಯಚಾಲಕರು --- ## 🧠 ನಿಮ್ಮ ನಿರ್ಧಾರಮಾಡುವ ಉಪಕರಣಗಳು ಸಂಕ್ಷೇಪ --- ## 🚀 ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ನಿರ್ಧಾರಮಾಡುವ ಮಾಸ್ಟರಿ ಸಮಯರೇಖೆ ### ⚡ ಮುಂದಿನ 5 ನಿಮಿಷಗಳಲ್ಲಿ ನೀವು ಏನು ಮಾಡಬಹುದು - [ ] ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕಾನ್ಸೋಲ್ ನಲ್ಲಿ ಹೋಲಿಕೆ ಕಾರ್ಯಚಾಲಕರ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ನಿಮ್ಮ ವಯಸ್ಸನ್ನು ಪರಿಶೀಲಿಸುವ ಸರಳ if-else ಹೇಳಿಕೆಯನ್ನು ಬರೆಯಿರಿ - [ ] ಸವಾಲು ಪ್ರಯತ್ನಿಸಿ: if-else ಅನ್ನು ಟೆರ್ಣರಿ ಕಾರ್ಯಚಾಲಕದಿಂದ ಮರುಬರೆಯಿರಿ - [ ] ವಿಭಿನ್ನ "ಟ್ರೂಥಿ" ಮತ್ತು "ಫಾಲ್ಸಿ" ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಏನು ಸಂಭವಿಸುತ್ತದೆ ಎಂದು ಪರೀಕ್ಷಿಸಿ ### 🎯 ಈ ಘಂಟೆಯಲ್ಲಿ ನೀವು ಏನು ಸಾಧಿಸಬಹುದು - [ ] ಪಾಠದ ನಂತರದ ಕ್ವಿಜ್ ಪೂರ್ಣಗೊಳಿಸಿ ಮತ್ತು ಯಾವುದೇ ಗೊಂದಲಕಾರಿ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ - [ ] GitHub Copilot ಸವಾಲಿನಿಂದ ಸಮಗ್ರ ಗ್ರೇಡ್ ಕ್ಯಾಲ್ಕುಲೇಟರ್ ನಿರ್ಮಿಸಿ - [ ] ನಿಜ ಜೀವನದ ಪರಿಸ್ಥಿತಿಗೆ ಸರಳ ನಿರ್ಧಾರ ಮರವನ್ನು ರಚಿಸಿ (ಉದಾಹರಣೆ: ಧರಿಸುವುದನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು) - [ ] ಲಾಜಿಕಲ್ ಕಾರ್ಯಚಾಲಕರೊಂದಿಗೆ ಬಹುಶ್ರೇಣಿಯ ಶರತ್ತುಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ವಿಭಿನ್ನ ಬಳಕೆಗಾಗಿ ಸ್ವಿಚ್ ಸ್ಟೇಟ್ಮೆಂಟ್‌ಗಳನ್ನು ಪ್ರಯೋಗಿಸಿ ### 📅 ನಿಮ್ಮ ವಾರದ ತಂತ್ರಜ್ಞಾನ ಮಾಸ್ಟರಿ - [ ] ಸೃಜನಶೀಲ ಉದಾಹರಣೆಗಳೊಂದಿಗೆ ಕಾರ್ಯಚಾಲಕ ನಿಯುಕ್ತಿ ಪೂರ್ಣಗೊಳಿಸಿ - [ ] ವಿವಿಧ ಶರತ್ತುಗಳೊಂದಿಗೆ ಸಣ್ಣ ಕ್ವಿಜ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ - [ ] ಅನೇಕ ಇನ್‌ಪುಟ್ ಶರತ್ತೆಗಳ ಪರಿಶೀಲಿಸುವ ಫಾರ್ಮ್ ಮಾನ್ಯತೆದಾರರ ನಿರ್ಮಿಸಿ - [ ] ಜೋಶ್ ಕೊಮೋ ಅವರ ಕಾರ್ಯಚಾಲಕ ಹುಡುಕಾಟ ವ್ಯಾಯಾಮಗಳನ್ನು ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ಇನ್ನಷ್ಟು ಸೂಕ್ತ ಶರತ್ತುಗಳ ರಚನೆಗಳಿಗಾಗಿ ಇತ್ತೀಚಿನ ಕೋಡ್ ಪುನರ್ ರೂಪಿಸಿ - [ ] ಶಾರ್ಟ್-ಸರ್ಕ್ಯೂಟ್ ಮೌಲ್ಯಮಾಪನ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಪರಿಣಾಮಗಳ ಅಧ್ಯಯನ ಮಾಡಿ ### 🌟 ನಿಮ್ಮ ತಿಂಗಳಾದರೂ ಪರಿವರ್ತನೆ - [ ] ಸಂಕೀರ್ಣ ಗೂಡಿನಲ್ಲಿದ್ದ ಶರತ್ತುಗಳನ್ನು ನೈಪುಣ್ಯತೆಯಿಂದ ಇಟ್ಟುಕೊಳ್ಳಿ ಮತ್ತು ಕೋಡ್ ಓದುಗತ್ವವನ್ನು ಕಾಪಾಡಿ - [ ] ಸೂಕ್ಷ್ಮ ನಿರ್ಧಾರಮಾಡುವ ಲಾಜಿಕ್‌ನೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್ ರಚಿಸಿ - [ ] ಸ್ಥಾಪಿತ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳಲ್ಲಿ ಶರತ್ತುಲಾಜಿಕ್ ಅನ್ನು ಉತ್ತಮಪಡಿಸುವ ಮೂಲಕ ಓಪನ್ ಸೋರ್ಸ್‌ಗೆ ಕೊಡುಗೆ ನೀಡಿ - [ ] ವಿಭಿನ್ನ ಶರತ್ತುಗಳ ರಚನೆಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವಾಗ ಬಳಸುವುದು ಎಂದು ಇತರರಿಗೆ ಕಲಿಸಿ - [ ] ಶರತ್ತುಲಾಜಿಕ್‌ಗೆ ಕಾರ್ಯಾಚರಣೆ ಕಾರ್ಯಕ್ರಮದ ಪ್ರವೇಶಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ - [ ] ಶರತ್ತು ನಿಯಮಾವಳಿಗಳ ವೈಯಕ್ತಿಕ ಸಂಕಲನವನ್ನು ರಚಿಸಿ ### 🏆 ಅಂತಿಮ ನಿರ್ಧಾರಮಾಡುವ ಚಾಂಪಿಯನ್ ಪರಿಶೀಲನೆ ನಿಮ್ಮ ತರ್ಕಮಯ ಚಿಂತನಾ ಕೌಶಲ್ಯವನ್ನು ಸಂಭ್ರಮಿಸಿ: - ನೀವು ಯಶಸ್ವಿಯಾಗಿ ಜಾರಿಗೆ ತಂದ ಅತಿ ಸಂಕೀರ್ಣ ನಿರ್ಧಾರಲಾಜಿಕ್ ಯಾವುದು? - ಎಲ್ಲ ಶರತ್ತು ರಚನೆಗಳು ನಿಮ್ಮಿಗೆ ಯಾವುದು ಸೂಚನೆಯಾಗಿದೆ ಮತ್ತು ಏಕೆ? - ಲಾಜಿಕಲ್ ಕಾರ್ಯಚಾಲಕರ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳುವುದು ನಿಮ್ಮ ಸಮಸ್ಯೆ ಪರಿಹಾರ ವಿಧಾನದಲ್ಲಿ ಏನು ಬದಲಾವಣೆ ತಂದಿತು? - ಯಾವ ನಿಜ ಜೀವನ ಅಪ್ಲಿಕೇಶನ್ ಸೂಕ್ಷ್ಮ ನಿರ್ಧಾರಲಾಜಿಕ್‌ನಿಂದ ಲಾಭ ಪಡೆಯುತ್ತದೆ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ತ್ಯಾಜ್ಯಕಲೆ: ಈ દસ્તાવેજವನ್ನು AI અનુવાદ ಸೇವೆ Co-op Translator ಬಳಸಿ ಅನುવાદಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ದತೆಯನ್ನು ಯತ್ನಿಸುವಾಗಲೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಶುದ್ಧತೆಗಳಿರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ತಿಳಿವಳಿಕೆ ಇಡಿ. ಮೂಲ દસ્તಾವೇಜನ್ನು ಅದರ ಮೂಲ ಭಾಷೆಯಲ್ಲಿ અધિકೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುવાદವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ಅರ್ಥಭ್ರಮาหು ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಾಗಿ ನಾವು ಹೊಣೆಗಾರರಾಗಿಲ್ಲ. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

JavaScript ಮೂಲಭೂತಗಳು: ಅರೆಗಳು ಮತ್ತು ಲೂಪ್ಗಳು

## ಪೂರ್ವ-ಲೇಕ್ಚರ್ ಕ್ವಿಜ್ ಪೂರ್ವ-ಲೇಕ್ಚರ್ ಕ್ವಿಜ್ ವೆಬ್‌ಸೈಟ್‌ಗಳು ಕೇವಲ ಶಾಪಿಂಗ್ ಕಾರ್ಟ್ ಐಟಂಗಳನ್ನು ಡೇಟಾ ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಸ್ನೇಹಿತರು ಎಂಬ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಲು ಹೇಗೆ ಮಾಡುತ್ತವೆ ಎಂದು ಯಾವಾಗಲಾದರೂ ಆಲೋಚಿಸಿಕೊಂಡಿದ್ದೀರಾ? ಅಲ್ಲಿ ಅರೆಗಳು ಮತ್ತು ಲೂಪ್ಗಳು ಬರುವವು. ಅರೆಗಳು ಹೇಗೆ ಬೋಧಿಸುವುದೆಂದರೆ ಅವು ಡಿಜಿಟಲ್ ಕಂಟೈನರ್‌ಗಳಂತೆ ಇದ್ದು, ಒಂದು ಸಮಯದಲ್ಲಿ ಹಲವಾರು ಮಾಹಿತಿಗಳನ್ನು ಹಿಡಿವವು, ಮತ್ತು ಲೂಪ್ಗಳು ಆ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಪುನರಾವೃತಿಸುವುದಿಲ್ಲದೆ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಬಲ್ಲ ಮೂಲಕಗಳು. ಈ ಎರಡು ಕಲ್ಪನೆಗಳು ಒಟ್ಟಿಗೆ ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಮ್‌ನಲ್ಲಿ ಮಾಹಿತಿಯನ್ನು ಹ್ಯಾಂಡಲ್ ಮಾಡುವ ಮೂಲ ಆಧಾರವಾಗಿವೆ. ನೀವು ಪ್ರತಿ ಹೆಜ್ಜೆಯನ್ನು ಕೈಯಿಂದ ಬರೆಯುವುದರಿಂದ, ಲಕ್ಷಾಂತರ ಮತ್ತು ಸಾವಿರಾರು ಅಂಶಗಳನ್ನು ವೇಗವಾಗಿ ಸಂಸ್ಕರಿಸಬಹುದಾದ ಚಾತುರ್ಯಮಯ, ಪರಿಣಾಮಕಾರಿ ಕೋಡ್ ಅನ್ನು ರಚಿಸುವ ದಿಕ್ಕಿಗೆ ಸಾಗುವಿರಿ. ಈ ಪಾಠದ ಅಂತ್ಯದಲ್ಲಿ, ನೀವು ಕೆಲವೇ ಸಾಲುಗಳ ಕೋಡ್ ಮೂಲಕ ಸಂಕೀರ್ಣ ಡೇಟಾ ಕಾರ್ಯಗಳನ್ನು ಹೇಗೆ ಸಾಧಿಸುವುದೆಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತೀರಿ. ಈ ಅಗತ್ಯ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಕಲ್ಪನೆಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ. [](https://youtube.com/watch?v=1U4qTyq02Xw "ಅರೆಗಳು") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "ಲೂಪ್ಗಳು") ## ಅರೆಗಳು ಅರೆಗಳನ್ನು ಡಿಜಿಟಲ್ ಫೈಲಿಂಗ್ ಕ್ಯಾಬಿನೆಟ್ ಎಂದು ಭಾವಿಸಿ - ಪ್ರತಿಯೊಂದು ಡ್ರಾಯರ್‌ಗೆ ಒಂದು ದಾಖಲೆ ಸಂಗ್ರಹಿಸುವ ಬದಲು ನೀವು ಹಲವು ಸಂಬಂಧಿಸಿದ ಐಟಂಗಳನ್ನು ಒಂದು ತಾಂತ್ರಿಕ ಕಂಟೈನರ್‌ನಲ್ಲಿ ವ್ಯವಸ್ಥೆ ಮಾಡಬಹುದು. ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಶೈಲಿಯಲ್ಲಿ, ಅರೆಗಳು ಅನೇಕ ಮಾಹಿತಿಗಳನ್ನು ಒಂದು ಸಂಘಟಿತ ಪ್ಯಾಕೇಜಿನಲ್ಲಿ ಸಂಗ್ರಹಿಸುವ ಅವಕಾಶವನ್ನು ನೀಡುತ್ತವೆ. ನೀವು ಫೋಟೋ ಗ್ಯಾಲರಿ ರಚಿಸುತ್ತಿದ್ದೀರಾ, ಟು-ಡೂ ಪಟ್ಟಿಯನ್ನು ನಿರ್ವಹಿಸುತ್ತಿದ್ದೀರಾ ಅಥವಾ ಗೇಮಿನಲ್ಲಿನ ಹೈ ಸ್ಕೋರ್‌ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತಿದ್ದೀರಾ, ಅರೆಗಳು ಡೇಟಾ ಸಂಘಟನೆಯ ಆಧಾರ ಒದಗಿಸುತ್ತವೆ. ಅವು ಹೇಗೆ ಕೆಲಸ ಮಾಡುವದನ್ನು ನೋಡೋಣ. ✅ ಅರೆಗಳು ನಮ್ಮ ಸುತ್ತಲೂ ಇದ್ದಾರೆ! ಸೃಜನಾತ್ಮಕ ಉದಾಹರಣೆವಾಗಿ ಸೌರ ಪ್ಯಾನೆಲ್ ಅರೆ ಅಥವಾ ಇನ್ನ कोई ನೆನಪಿರುವುದೆ? ### ಅರೆಗಳನ್ನು ರಚಿಸುವುದು ಅರೆ ರಚಿಸುವುದು ಸುಲಭ - ಕೇವಲ ಚೌಕಟ್ಟಿನ ಬ್ರಾಕೆಟ್‌ಗಳನ್ನು ಉಪಯೋಗಿಸಿ! ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ? ನೀವು ಫుందಿ ಖಾಲಿ ಕಂಟೈನರ್ ರಚಿಸಿದ್ದೀರಿ ಅದಕ್ಕೆ ಆ ಚೌಕಟ್ಟಿನ ಬ್ರಾಕೆಟ್‌ಗಳು [] ಬಳಕೆ. ಇದನ್ನು ಖಾಲಿ ಪುಸ್ತಕ ಶೆಲ್ಫ್ ಎಂದು ಭಾವಿಸಿ - ನೀವು ಯಾವ ಪುಸ್ತಕಗಳನ್ನು ಆಗ್ರಹಿಸುತ್ತೀರೋ ಅವನ್ನು ಇಡಲು ಸಿದ್ಧವಾಗಿದೆ. ನೀವು ನಿಮ್ಮ ಅರೆಗೆ ಪ್ರಾಥಮಿಕ ಮೌಲ್ಯಗಳನ್ನು ಕೂಡ ತುಂಬಬಹುದು: ಗಮನ ಸೆಳೆಯುವ ಸೊಗಸುಗಳು: - ನೀವು ಪಠ್ಯ, ಸಂಖ್ಯೆಗಳು ಅಥವಾ ಸತ್ಯ/ಸುಳ್ಳು ಮೌಲ್ಯಗಳನ್ನು ಒಂದೇ ಅರೆನಲ್ಲಿ ಹಿಡಿಕೊಳ್ಳಬಹುದು - ಪ್ರತಿ ಐಟಂ ಅನ್ನು ಕಾಮಾಗಳಿಂದ ವಿಭಜಿಸಿ - ಸುಲಭ! - ಅರೆಗಳು ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿಯನ್ನು ಒಟ್ಟಿಗೆ ಇಡಲು ಸೂಕ್ತವಾಗಿವೆ ### ಅರೆ ಸೂಚ್ಯಂಕೀಕರಣ ಮುಂಚಿತವಾಗಿ ಅರೆಗಳಿಗೆ ಒಂದನ್ನಾಗಿ 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಸೂಚ್ಯಂಕವಿದೆ ಎಂದು ಅನಿಸಬಹುದು. ಈ ಶೂನ್ಯ-ಆಧಾರಿತ ಸೂಚ್ಯಂಕವನ್ನು ಕಂಪ್ಯೂટર ಮೆಮೊರಿ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂಬುದರ ನಡವಳಿಕೆಯದು - ಇದು ಸಿ (C) ಭಾಷೆಗಳ ಮೊದಲ ದಿನಗಳಿಂದ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ನಿಯಮವಾಗಿದೆ. ಪ್ರತಿಯೊಂದು ಅರೆ ಸ್ಥಾನಕ್ಕೆ ತನ್ನದೇ ಆದ ವಿಳಾಸ ಸಂಖ್ಯೆ ಸೂಚ್ಯಂಕ ಎಂದು ಕರೆಯಲ್ಪಡುವುದು. ✅ ನಿಮಗೆ ಅರೆಗಳು 0 ಸೂಚ್ಯಂಕದಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತವೆ ಎಂದು ಆಶ್ಚರ್ಯವೇ? ಕೆಲವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಲ್ಲಿ, ಸೂಚ್ಯಂಕಗಳು 1 ರಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತವೆ. ಇದರ ಹಿಂದೆ ಆಸಕ್ತಿದಾಯಕ ಇತಿಹಾಸವಿದೆ, ಇದನ್ನು ನೀವು ವಿಕಿಪೀಡಿಯಾ ನಲ್ಲಿ ಓದಬಹುದು. ಅರೆ ಅಂಗಾಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸುವುದು: ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ ಎಂಬುದರ ವಿವರಣೆ: - ಚೌಕಟ್ಟಿನ ಬ್ರಾಕೆಟ್ ಸೂಚ್ಯಂಕ ಸಂಖ್ಯೆ ಬಳಸಿ ಅಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸುತ್ತದೆ - ಅರೆ ನಿಗದಿಪಡಿಸಿದ ಸ್ಥಾನದಲ್ಲಿ ಸಂಗ್ರಹಿತ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ - ಗುಣಮಟ್ಟವಾಗಿ 0ರಿಂದ ಗಣನೆ ಪ್ರಾರಂಭ ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಮೊದಲ ಅಂಶ ಸೂಚ್ಯಂಕ 0 ಅರೆ ಅಂಗಾಂಶಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡುವುದು: ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ: - ಸೂಚ್ಯಂಕ 4 ರಲ್ಲಿನ ಅಂಶವನ್ನು "ರಾಕಿ ರೋಡ್"ನಿಂದ "ಬಟರ್ ಪಿಕಾನ್"ಗೆ ತಿದ್ದುಪಡಿಸಿದೆ - ಸೂಚ್ಯಂಕ 5 ರಲ್ಲಿ "ಕುಕಿ ಡೋ" ಎಂಬ ಹೊಸ ಅಂಶ ಹೇರಲಾಗಿದೆ - ಪ್ರಸ್ತುತ ಮಿತಿಯನ್ನು ಮೀರಿಸಿ ಓದಿದಾಗ ಅರೆ ಕೆಲವು ಆಯಾಮಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವಿಸ್ತರಿಸಿದೆ ### ಅರೆ ಉದ್ದ ಮತ್ತು ಸಾಮಾನ್ಯ ವಿಧಾನಗಳು ಅರೆಗಳಿಗೆ ಇವುಗಳು ಮುಂಚಿತ ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ವಿಧಾನಗಳನ್ನು ಒಳಗೊಂಡಿವೆ, ಇದು ಡೇಟಾ ಹ್ಯಾಂಡ್ಲಿಂಗ್‌ನ್ನು ಸುಲಭಗೊಳಿಸುತ್ತದೆ. ಅರೆ ಉದ್ದವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು: ಪ್ರಮುಖ ಅಂಶಗಳು: - ಅರೆ ಯಲ್ಲಿ ಒಟ್ಟು ಅಂಶಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ - ಅಂಶಗಳನ್ನು ಸೇರಿಸುವ ಅಥವಾ ತೆಗೆದುಹಾಕುವಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸುತ್ತದೆ - ಲೂಪ್ಗಳು ಹಾಗೂ ಪರಿಶೀಲನೆಗೆ ಬಳಸಬಹುದಾದ ಚಲನೆಯ ಮಟ್ಟವನ್ನು ಒದಗಿಸುತ್ತದೆ ಅತ್ಯಾವಶ್ಯಕ ಅರೆ ವಿಧಾನಗಳು: ಈ ವಿಧಾನಗಳ ಅರ್ಥ: - push() (ಕೊನೆಯ ಭಾಗದಲ್ಲಿ) ಮತ್ತು unshift() (ಆರಂಭದಲ್ಲಿ) ಮೂಲಕ ಅಂಶಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ - pop() (ಕೊನೆಯ ಭಾಗದಿಂದ) ಮತ್ತು shift() (ಆರಂಭದಿಂದ) ಮೂಲಕ ಅಂಶಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ - indexOf() ಬಳಸಿ ಅಂಶಗಳ ಸ್ಥಳವನ್ನು ಹುಡುಕುತ್ತದೆ ಮತ್ತು includes() ಬಳಸಿ ಅಂಶಗಳ ಇರواجد_ತೆ ಪರಿಶೀಲಿಸುತ್ತದೆ - ತೆಗೆದುಹಾಕಲಾದ ಅಂಶಗಳು ಅಥವಾ ಸ್ಥಾನಗಳ ಸೂಚ್ಯಂಕಗಳನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ ✅ ನಿಮಗೂ ಪ್ರಯತ್ನಿಸಿ! ನಿಮ್ಮ ಬ್ರೌಸರ್ ಕಾನ್ಸೋಲ್‌ನಲ್ಲಿ ಸ್ವಂತ ಅರೆ ರಚಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ. ### 🧠 ಅರೆ ಮೂಲಭೂತ ಪರಿಶೀಲನೆ: ನಿಮ್ಮ ಡೇಟಾ ಸಂಘಟನೆ ನಿಮ್ಮ ಅರೆ ತಿಳುವಳಿಕೆಯನ್ನು ಪರೀಕ್ಷಿಸಿ: - ಅರೆಗಳು 1 ಬದಲು 0 ರಿಂದ ಎಣಿಕೆ ಪ್ರಾರಂಭಿಸುವುದಕ್ಕೆ ಕಾರಣವೇನು? - ನೀವು ಇರುವುದಿಲ್ಲದ ಸೂಚ್ಯಂಕವನ್ನು ಪ್ರವೇಶಿಸಲು ಯತ್ನಿಸಿದರೆ (ಹಾಗೆ arr[100] 5-ಅಂಶ ಅರೆನಲ್ಲಿ), ಏನು ಆಗುತ್ತೆ? - ಅರೆಗಳು ಉಪಯೋಗಿಯಾಗಲಿರುವ ಮೂರು ನೈಜ-ಜಗತ್ತಿನ ಸಂದರ್ಭಗಳನ್ನು ಊಹಿಸಿ. ## ಲೂಪ್ಗಳು ಚಾರ್ಲ್ಸ್ ಡಿಕ್ಕೆನ್ಸ್ ಅವರ నవಲ್ಸ್‌ನಿಂದ ಪ್ರಸಿದ್ಧ ಶಿಕ್ಷೆ ಎಂಬುದು ವಿದ್ಯಾರ್ಥಿಗಳು ಸ್ಲೇಟ್ ಮೇಲೆ ನಿಯಮಿತವಾಗಿ ಸಾಲುಗಳನ್ನು ಬರೆಯಬೇಕಾಗುತ್ತದೆ ಎಂಬುದು. ನೀವು ಯಾರಿಗಾದರೂ "ಈ ವ್ಯಾಕ್ಯವನ್ನು 100 ಬಾರಿ ಬರೆಯಿರಿ" ಎಂದು ಹೇಳಬಹುದು ಮತ್ತು ಅದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆಗುತ್ತದೆ ಎಂದು ಕಲ್ಪನೆ ಮಾಡಿ. ಇದುವೇ ನಿಮ್ಮ ಕೋಡ್‌ಗೆ ಲೂಪ್ಗಳು ಮಾಡುತ್ತವೆ. ಲೂಪ್ಗಳು ದೀರ್ಘಕಾಲ ಶ್ರಮಶೀಲ ಸಹಾಯಕರಂತೆ ಕೆಲಸಮಾಡುತ್ತವೆ. ನೀವು ಶಾಪಿಂಗ್ ಕಾರ್ಟ್‌ನಲ್ಲಿ ಪ್ರತಿಯೊಬ್ಬ ಐಟಂ ಪರಿಶೀಲಿಸುವುದು ಅಥವಾ ಆಲ್ಬಮ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಚಿತ್ರಗಳನ್ನು ತೋರಿಸುವುದು ಬೇಕಾದರೆ, ಲೂಪ್ಗಳು ಪುನರಾವೃತ್ತಿ ಕಾರ್ಯವನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತವೆ. JavaScript ಪಟ್ಟಿಯಿಂದ ವಿವಿಧ ಲೂಪ್ ಪ್ರಕಾರಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದನ್ನೂ ನೋಡಿ, ಯಾವಾಗ ಬಳಸಬೇಕು ಅಂದ ತಿಳಿಯೋಣ. ### For ಲೂಪ್ for ಲೂಪ್ ಒಂದು ಟೈಮರ್ ಸರಿಹೊಂದಿಸುವಂತೆ - ನೀವು ಎಷ್ಟೆಷ್ಟು ಬಾರಿ ಏನಾದರೂ ಆಗಬೇಕು ಎಂದಿದ್ದೀರೋ ಅದನ್ನು ಸರಿಯಾಗಿ ಗೊತ್ತಿರುತ್ತದೆ. ಇದು ಹೆಚ್ಚು ವ್ಯವಸ್ಥಿತ ಮತ್ತು ಭವಿಷ್ಯನಿರೀಕ್ಷಿತವಾಗಿದ್ದು, ಅರೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಅಥವಾ ಗಣನೆ ಮಾಡಬೇಕು ಎಂದಾದರೆ ಆದರ್ಶ. For ಲೂಪ್ ರಚನೆ: ಹಂತ ಹಂತವಾಗಿಯೇ, ಏನಾಗುತ್ತದೆ: - ಆರಂಭದಲ್ಲಿ ಕೌಂಟರ್ ಚರ i 0ಗೆ ಆರಂಭಿಕೀಕರಿಸಲಾಗುತ್ತದೆ - ಪ್ರತಿ ಪುನರಾವೃತ್ತಿಗಾಗಿ ಶರತ್ತು i < 10 ಪರಿಶೀಲಿಸು - ಶರತ್ತು ಸತ್ಯವಿದ್ದಾಗ ಕೋಡ್ ಬ್ಲಾಕ್ ನಿರ್ವಹಿಸು - ಪ್ರತಿ ಪುನರಾವೃತ್ತಿಗೆ ನಂತರ i++ ಬಲ 1 ಸೇರಿಸು - ಶರತ್ತು ಅಸತ್ಯವಾದಾಗ (i 10 ತಲುಪಿದಾಗ) ನಿಲ್ಲಿಸು ✅ ಈ ಕೋಡ್ ಅನ್ನು ಬ್ರೌಸರ್ ಕಾನ್ಸೋಲ್‌ನಲ್ಲಿ ಚಾಲನೆ ಮಾಡಿ. ಕೌಂಟರ್, ಶರತ್ತು ಅಥವಾ ಪುನರಾವೃತ್ತಿ ಅಭಿವ್ಯಕ್ತಿಯಲ್ಲಿ ചെറിയ ಬದಲಾವಣೆ ಮಾಡಿದಾಗ ಏನು ಆಗುತ್ತದೆ? ಇದು ಪಶ್ಚಿಮಾಗಾಮಿ ಭಾಗವಾಗಿ ನಡೆಯಲು ಅದರನ್ನೇಕು ಮಾಡಲು ಸಾಧ್ಯವೇ? ### 🗓️ For ಲೂಪ್ ನೈಪುಣ್ಯ ಪರಿಶೀಲನೆ: ನಿಯಂತ್ರಣ ಹೊಂದಿದ ಪುನರಾವೃತಿ ನಿಮ್ಮ For ಲೂಪ್ ತಿಳುವಳಿಕೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ: - for ಲೂಪ್ನ ಮೂರು ಭಾಗಗಳು ಯಾವವು, ಮತ್ತು ಪ್ರತಿಯೊಂದರ ಕೆಲಸವೇನು? - ನೀವು ಅರೆನ ಸಂಪರ್ಕ backwards ಹೇಗೆ ಲೂಪ್ ಮಾಡಿ? - ವೃದ್ಧಿ ಭಾಗ i++ ಜ್ಞಾಪಿಸಲಿಲ್ಲವಾದರೆ ಏನಾಗುತ್ತದೆ? ### While ಲೂಪ್ while ಲೂಪ್ ಅನ್ನುವುದು "ಇತ್ತೇಳುವವರೆಗೆ ಮುಂದುವರೆ" ಎಂದು ಹೇಳಿದಂತೆ - ನೀವು ಎಷ್ಟು ಬಾರಿ ನಡೆಯುವುದೆಂದು ಸ್ಪಷ್ಟವಾಗಿ ಗೊತ್ತು ಇರಲಾರದು; ಆದರೆ ಯಾವಾಗ ನಿಲ್ಲಿಸಬೇಕೆಂದು ತಿಳಿದಿರುತ್ತೆ. ಇದು ಬಳಕೆದಾರರಿಂದ ಇನ್‌ಪುಟ್‌ ಅಗತ್ಯವಿರುವವರೆಗೂ ಕೇಳುವುದು ಅಥವಾ ನಿಮ್ಮ ಹುಡುಕುತ್ತಿರುವ ಡೇಟಾ ಸಿಕ್ಕುವವರೆಗೆ ಹುಡುಕುವಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. While ಲೂಪಿನ ಲಕ್ಷಣಗಳು: - ಶರತ್ತು ಸತ್ಯವಾಗಿರುವವರೆಗೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ - ಯಾವುದೇ ಕೌಂಟರ್ ಚರಗಳ ಕೈಯಿಂದ ನಿರ್ವಹಣೆಯನ್ನು ಅಗತ್ಯವಿರುತ್ತದೆ - ಪ್ರತಿ ಪುನರಾವೃತ್ತಿಗೆ ಶರತ್ತು ಪರಿಶೀಲನೆ - ಶರತ್ತು ಎಂದಿಗೂ ಅಸತ್ಯವಾಗದಿದ್ದರೆ ಅನಂತ ಲೂಪ್ ಉಂಟಾಗಲು ಸಾಧ್ಯ ಈ ಉದಾಹರಣೆಗಳ ಅರ್ಥ: - ಲೂಪ್ ಶರೀರದೊಳಗೆ ಕೈಯಿಂದ ಕೌಂಟರ್ ಚರ i ನಿರ್ವಹಣೆ - ಅನಂತ ಲೂಪ್ಗಳ ತಡೆಯಕ್ಕೆ ಕೌಂಟರ್ ವೃದ್ಧಿ - ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ ಮತ್ತು ಪ್ರಯತ್ನ ಮಿತಿಗೆ ಉಪಯುಕ್ತ ವಿವರಣೆ - ನಿರಂತರ ಕಾರ್ಯನಿರ್ವಹಣೆಗೆ ಸುರಕ್ಷತಾ ವ್ಯವಸ್ಥೆಗಳ ಒಳಗೊಂಡಿದೆ ### ♾️ While ಲೂಪ್ ಜ್ಞಾನ ಪರಿಶೀಲನೆ: ಶರತ್ತು ಆಧಾರಿತ ಪುನರಾವೃತ್ತಿ ನಿಮ್ಮ while ಲೂಪ್ ಜ್ಞಾನವನ್ನು ಪರೀಕ್ಷಿಸಿ: - while ಲೂಪ್ಗಳಲ್ಲಿ ಮುಖ್ಯ ಅಪಾಯವೇನು? - ನೀವು ಯಾವಾಗ while ಲೂಪ್ ಅನ್ನು for ಲೂಪ್ಗಿಂತ ಮೆಚ್ಚಿಕೊಳ್ಳುತ್ತೀರಿ? - ಅನಂತ ಲೂಪ್ಗಳನ್ನು ನೀವು ಹೇಗೆ ತಡೆಯಬಹುದು? ### ಆಧುನಿಕ ಲೂಪ್ ಪರ್ಯಾಯಗಳು JavaScript ನಿಮಗೆ ಆಧುನಿಕ ಲೂಪ್ ವ್ಯಾಕರಣವನ್ನ ಒದಗಿಸುತ್ತದೆ, ಇದು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಓದುವಿಕೆಗೆ ಹೆಚ್ಚು ಸುಲಭ ಮತ್ತು ತಪ್ಪು ಸಂಭವನೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. For...of ಲೂಪ್ (ES6+): for...of ಯ ಪ್ರಮುಖ ಲಾಭಗಳು: - ಸೂಚ್ಯಂಕ ನಿರ್ವಹಣೆ ಮತ್ತು ಸಂಪರ್ಕ ತಪ್ಪುಗಳನ್ನು ನಿವಾರಣೆ ಮಾಡುತ್ತದೆ - ಅರೆ ಉಪಾದಾನಗಳಿಗೆ ನೇರ ಪ್ರವೇಶ ನೀಡುತ್ತದೆ - ಕೋಡ್ ಓದುವಿಕೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಮತ್ತು ವ್ಯಾಕರಣ ಸಪರಿಶುದ್ಧಿ ಮಾಡುತ್ತದೆ forEach ವಿಧಾನ: forEach ಕುರಿತು ತಿಳಿಯೋಣ: - ಪ್ರತಿ ಅರೆ ಅಂಶಕ್ಕೆ ಒಂದು ಕಾರ್ಯಾನ್ವಯವನ್ನು ನಡೆಸುತ್ತದೆ - ಅಂಶ ಮೌಲ್ಯ ಮತ್ತು ಸೂಚ್ಯಂಕ ಎರಡನ್ನು ಕಾರ್ಯಕ್ಕೆ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ ಒದಗಿಸುತ್ತದೆ - ಲೂಪ್ ಅನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ (ಪಾರಂಪರಿಕ ಲೂಪ್ಗಳಂಥವಲ್ಲ) - ಹೊಸ ಅರೆ ಸೃಷ್ಟಿಸುವುದಿಲ್ಲ, undefined ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ ✅ ನೀವು for ಲೂಪ್ನನ್ನೋ ಅಥವಾ while ಲೂಪ್ನನ್ನೋ ಆಯ್ಕೆ ಮಾಡುವಾಗ ಅಯಾಯವಿದೇ? StackOverflow ನಲ್ಲಿ १७ ಸಾವಿರ ವೀಕ್ಷಕರು ಸಹ ಇದರ ಬಗ್ಗೆ ಪ್ರಶ್ನೆ ಮಾಡಿದ್ದರು. ಕೆಲವು ಅಭಿಪ್ರಾಯಗಳು ನಿಮಗೆ ಆಸಕ್ತಿದಾಯಕವಾಗಬಹುದು. ### 🎨 ಆಧುನಿಕ ಲೂಪ್ ವ್ಯಾಕರಣ ಪರೀಕ್ಷೆ: ES6+ ಸ್ವೀಕಾರ ನಿಮ್ಮ ಆಧುನಿಕ JavaScript ತಿಳಿವಳಿಕೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ: - ಪರಂಪರাগত for ಲೂಪ್ಗಿಂತ for...of ಯ ಏನು ಲಾಭ? - ನೀವು ಯಾವಾಗ ಇನ್ನೂ ಪರಂಪರাগত for ಲೂಪ್ಗಳನ್ನು ಪ್ರೀತಿಸುತ್ತೀರಿ? - forEach ಮತ್ತು map ನಡುವಿನ ಅಂತರವೇನು? ## ಲೂಪ್ಗಳು ಮತ್ತು ಅರೆಗಳು ಅರೆಗಳನ್ನು ಲೂಪ್ಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸುವುದರಿಂದ ಶಕ್ತಿಶಾಲಿ ಡೇಟಾ ಸಂಸ್ಕರಣೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಪಟ್ಟಿ ತೋರಿಸುವುದು ಅಥವಾ ಅಂಕೆಗಳನ್ನು ಲೆಕ್ಕ ಹಾಕುವುದು ಸೇರಿದಂತೆ ಅನೇಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಕಾರ್ಯಗಳಿಗೆ ಇದು ಮೂಲಭೂತ. ಪರಂಪರাগত ಅರೆ ಸಂಸ್ಕರಣೆ: ಪ್ರತೀ ವಿಧಾನದ ಅರ್ಥ: - ಲೂಪಿನ ಮಿತಿಯನ್ನು ನಿರ್ಧರಿಸಲು ಅರೆ ಉದ್ದ ಗುಣಲಕ್ಷಣ ಬಳಕೆ - ಪರಂಪರাগত for ಲೂಪಲ್ಲಿ ಸೂಚ್ಯಂಕ ಮೂಲಕ ಅಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸುವುದು - for...of ಲೂಪ್ನಲ್ಲಿ ನೇರವಾಗಿ ಅಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸುವುದು - ಪ್ರತಿಯೊಂದು ಅರೆ ಅಂಶವನ್ನು ಹೋಲಿಕೆಯಾಗಿ ಪ್ರಕ್ರಿಯೆ ಮಾಡುವುದು ಪ್ರಾಯೋಗಿಕ ಡೇಟಾ ಸಂಸ್ಕರಣೆ ಉದಾಹರಣೆ: ಈ ಕೋಡ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ: - ಮೊತ್ತ ಮತ್ತು ಅತಿಕ್ರಮಣಗಳ ಟ್ರ್ಯಾಕಿಂಗ್ ಚರಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ - ಪ್ರತಿ ಅಂಕೆಯನ್ನು ಒಂದೇ ಫರುವ ಲೂಪ್ನಲ್ಲಿ ಪ್ರಕ್ರಿಯೆ ಮಾಡುತ್ತದೆ - ಸರಾಸರಿ ಲೆಕ್ಕಿಸುವ ಉದ್ದೇಶಕ್ಕಾಗಿ ಮೊತ್ತ ಸಂಗ್ರಹಿಸುತ್ತದೆ - ಪುನರಾವೃತ್ತಿಯ ವೇಳೆ ಅತಿ ಹೆಚ್ಚು ಮತ್ತು ಕಡಿಮೆಯ ಅಂಕಿಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ - ಲೂಪ್ನ ನಂತರ ಅಂತಿಮ ಅಂಕಿ-ಗಣಿತಗಳನ್ನು ಲೆಕ್ಕಿಸುತ್ತದೆ ✅ ನಿಮ್ಮ ಸ್ವಂತ ಅರೆ ಲೂಪ್ ಮೂಲಕ ಪೃಖ್ಯಾಯಿಸಿ ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನ ಕಾನ್ಸೋಲ್‌ನಲ್ಲಿ. --- ## GitHub Copilot ಏಜೆಂಟ್ ಚಾಲೆಂಜ್ 🚀 ಈ ಕೆಳಗಿನ ಚಾಲೆಂಜ್ ಪೂರ್ಣಗೊಳಿಸಲು ಏಜೆಂಟ್ ಮೋಡ್ ಅನ್ನು ಬಳಸಿರಿ: ವಿವರಣೆ: ಅರೆಗಳ ಮತ್ತು ಲೂಪ್ಗಳನ್ನು ಸಂಯೋಜಿಸಿ ವಿಶ್ಲೇಷಣಾ ಕಾರ್ಯಕ್ಕಾಗಿ ಸಮಗ್ರ ಡೇಟಾ ಸಂಸ್ಕರಣಾ ಕಾರ್ಯವನ್ನು ಕಟ್ಟೊಂಡು, ಅರ್ಥಪೂರ್ಣ ವಿವರಗಳನ್ನು ರಚಿಸಿ. ಪ್ರಾಂಪ್ಟ್: analyzeGrades ಎಂಬ ಕಾರ್ಯವನ್ನು ರಚಿಸಿ, ಇದು ವಿದ್ಯಾರ್ಥಿಗಳ ಅಂಕಗಳ (ಪ್ರತಿಯೊಂದರಲ್ಲಿಯೂ ಹೆಸರು ಮತ್ತು ಅಂಕಗಳ ಗುಣಗಳನ್ನು ಹೊಂದಿರುವ ಅರೆ) ಡೇಟಾವನ್ನು ಸ್ವೀಕರಿಸಿ, ಎತ್ತರದ ಅಂಕಿ, ಕಡಿಮೆ ಅಂಕಿ, ಸರಾಸರಿ ಅಂಕಿ, 70 ಅಥವಾ ಹೆಚ್ಚು ಅಂಕಿ ಪಡೆದ ವಿದ್ಯಾರ್ಥಿಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಸರಾಸರಿ ಮೀರಿದ ಅಂಕಿಯನ್ನು ಪಡೆದ ವಿದ್ಯಾರ್ಥಿಗಳ ಹೆಸರುಗಳ ಅರೇ ಅನ್ನು ಒಳಗೊಂಡ ಸಂಕೀರ್ಣ ಮಾಹಿತಿ ನಿಷ್ಪಾದನೆ ಮಾಡುತ್ತದೆ. ಕನಿಷ್ಟ ಎರಡು ವಿಭಿನ್ನ ಲೂಪ್ ಪ್ರಕಾರಗಳನ್ನು ನಿಮ್ಮ ಪರಿಹಾರದಲ್ಲಿ ಬಳಸಿ. ಇಲ್ಲಿ ಏಜೆಂಟ್ ಮೋಡ್ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ತಿಳಿಯಿರಿ. ## 🚀 ಚಾಲೆಂಜ್ JavaScript ಕೆಲವು ಆಧುನಿಕ ಸರಣಿಯ ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ, ಇದು ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯಗಳಿಗೆ ಪರಂಪರাগত ಲೂಪುಗಳನ್ನು ಬದಲಾಯಿಸಬಹುದು. forEach, for-of, map, filter, ಮತ್ತು reduce ಅನ್ವೇಷಿಸಿ. ನಿಮ್ಮ ಸವಾಲು: ಕನಿಷ್ಟ ಮೂರು ವಿಭಿನ್ನ ಸರಣಿಯ ವಿಧಾನಗಳನ್ನು ಉಪಯೋಗಿಸಿ ವಿದ್ಯಾರ್ಥಿಗಳ ಅಂಕಗಳನ್ನು ಪರಿಷ್ಕರಿಸಿ. ಆಧುನಿಕ JavaScript ವಾಕ್ಯರಚನೆಯೊಂದಿಗೆ ಕೋಡ್ ಎಷ್ಟು ಸ್ವಚ್ಛ ಹಾಗೂ ಓದಲಾಡುವಾಗಿರುವುದನ್ನು ಗಮನಿಸಿ. ## ಪೋಷ್ಟ್-ಲೆಕ್ಚರ್ ಕ್ವಿಜ್ ಪೋಷ್ಟ್-ಲೆಕ್ಚರ್ ಕ್ವಿಜ್ ## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ JavaScript ನ ಸರಣಿಗಳಲ್ಲಿನ ಹಲವು ವಿಧಾನಗಳು ಡೇಟಾ ನಿರ್ವಹಣೆಗೆ ಅತ್ಯಂತ ಉಪಯುಕ್ತವಾಗಿವೆ. ಈ ವಿಧಾನಗಳನ್ನು ಓದಿ ಮತ್ತು ಅವುಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ (pattern push, pop, slice ಮತ್ತು splice) ನಿಮ್ಮ ರಚನೆಯ ಸರಣಿಯಲ್ಲಿ. ## ನಿಯೋಜನೆ ಸರಣಿಯನ್ನು ಲೂಪ್ ಮಾಡಿ --- ## 📊 ನಿಮ್ಮ ಸರಣಿಗಳು ಮತ್ತು ಲೂಪ್ಸ್ ಸಾಧನ ಸಂಕಲನ --- ## 🚀 ನಿಮ್ಮ ಸರಣಿಗಳು ಮತ್ತು ಲೂಪ್ಸ್ ಪರಿಣತಿ ಕಾಲರೇಖೆ ### ⚡ ಮುಂದಿನ 5 ನಿಮಿಷಗಳಲ್ಲಿ ನೀವು ಏನು ಮಾಡಬಹುದು - [ ] ನಿಮ್ಮ ಇಷ್ಟದ ಚಲನಚಿತ್ರಗಳ ಸರಣಿಯನ್ನು ರಚಿಸಿ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಅಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸಿ - [ ] 1 ರಿಂದ 10 ರವರೆಗೆ ಎಣಿಸುವ for ಲೂಪನ್ನು ಬರೆಯಿರಿ - [ ] ಪಾಠದಲ್ಲಿ ನೀಡಲಾದ ಆಧುನಿಕ ಸರಣಿ ವಿಧಾನಗಳ ಸವಾಲನ್ನು ಪ್ರಯತ್ನಿಸಿ - [ ] ನಿಮ್ಮ ಬ್ರೌಸರಿನ ಕನ್ಸೊಲ್‌ನಲ್ಲಿ ಸರಣಿ ಸೂಚ್ಯಾಂಕ ನಿಯಂತ್ರಣ ಅಭ್ಯಾಸ ಮಾಡಿ ### 🎯 ಈ ಗಂಟೆಯಲ್ಲಿ ನೀವು ಸಾಧಿಸಬಹುದಾದವುಗಳು - [ ] ಪಾಠದ ನಂತರದ ಕ್ವಿಜ್ ಪೂರ್ಣಗೊಳಿಸಿ ಮತ್ತು ಯಾವುದೇ ಕಠಿಣ ಅಂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ - [ ] GitHub Copilot ಸವಾಲಿನಿಂದ ಸಮಗ್ರ ಶ್ರೇಣಿ ವಿಶ್ಲೇಷಕ ನಿರ್ಮಿಸಿ - [ ] ಐಟಂಗಳನ್ನು ಸೇರಿಸುವ ಮತ್ತು ತೆಗೆದುಹಾಕುವ ಸರಳ ಶಾಪಿಂಗ್ ಕಾರ್ಟ್ ರಚಿಸಿ - [ ] ವಿಭಿನ್ನ ಲೂಪ್ ವಿಧಗಳಾದರೀತಿಯನ್ನು ಪರಿವರ್ತಿಸುವ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] push, pop, slice, ಮತ್ತು splice ಮುಂತಾದ ಸರಣಿ ವಿಧಾನಗಳೊಂದಿಗೆ ಪ್ರಯೋಗ ಮಾಡಿ ### 📅 ನಿಮ್ಮ ವಾರ ವಿಸ್ತಾರ ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಪ್ರಯಾಣ - [ ] "ಸರಣಿಯನ್ನು ಲೂಪ್ ಮಾಡಿ" ನೇಯ್ದ ನಿಯೋಜನೆಯನ್ನು ಸೃಜನಾತ್ಮಕ ಸುಧಾರಣೆಗಳೊಂದಿಗೆ ಪೂರ್ಣಗೊಳಿಸಿ - [ ] ಸರಣಿಗಳು ಮತ್ತು ಲೂಪ್ಸ್ ಉಪಯೋಗಿಸಿ ಟು-ಡೂ ಲಿಸ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ ರಚಿಸಿ - [ ] ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾಗೆ ಸರಳ ಸಂಕೇತಕ ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್ ರಚಿಸಿ - [ ] MDN ಸರಣಿ ವಿಧಾನಗಳು ಜೊತೆ ಅಭ್ಯಾಸ ಮಾಡಿ - [ ] ಫೋಟೋ ಗ್ಯಾಲರಿ ಅಥವಾ ಸಂಗೀತ ಪ್ಲೇಲಿಸ್ಟ್ ಇಂಟರ್‌ಫೇಸ್ ರಚಿಸಿ - [ ] map, filter, ಮತ್ತು reduce ಬಳಸಿ ಕಾರ್ಯಕಾರಿ ಕಾರ್ಯಕ್ರಮದ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅನ್ವೇಷಿಸಿ ### 🌟 ನಿಮ್ಮ ತಿಂಗಳ ವಿಸ್ತಾರ ಪರಿವರ್ತನೆ - [ ] ಉನ್ನತ ಸರಣಿ ಕಾರ್ಯಾಚರಣೆಗಳು ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಸುಧಾರಣೆ ಮಾಡಿಕೊಳ್ಳಿ - [ ] ಸಂಪೂರ್ಣ ಡೇಟಾ ದೃಶ್ಯೀಕರಣ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ರಚಿಸಿ - [ ] ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಸಂಬಂಧಿತ open source ಯೋಜನೆಗಳಿಗೆ ಕೊಡುಗೆ ನೀಡಿ - [ ] ಅನುಭವದಿಂದ ಸರಣಿಗಳು ಮತ್ತು ಲೂಪ್ಸ್ ಕುರಿತು ಯಾರಿಗಾದರೂ ಬೋಧಿಸಿ - [ ] ಪುನಃಬಳಕೆ ಮಾಡಬಹುದಾದ ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯಗಳ ವೈಯಕ್ತಿಕ ಲೈಬ್ರರಿ ರಚಿಸಿ - [ ] ಸರಣಿಗಳ ಮೇಲೆ ನಿರ್ಮಿತ ಅಲ್ಗೊರಿದಮ್ಸ್ ಮತ್ತು ಡೇಟಾ ರಚನೆಗಳನ್ನು ಅನ್ವೇಷಿಸಿ ### 🏆 ಅಂತಿಮ ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಚಾಂಪಿಯನ್ ಪರಿಶೀಲನೆ ನಿಮ್ಮ ಸರಣಿ ಮತ್ತು ಲೂಪ್ಸ್ ಪರಿಣತಿಯನ್ನು ಹರ್ಷಿಸಿಕೊಳ್ಳಿ: - ನೈಜ ಜಗತ್ತಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ನೀವು ತಿಳಿದ ಅತ್ಯಂತ ಉಪಯುಕ್ತ ಸರಣಿ ಕಾರ್ಯವೇನು? - ಯಾವ ಲೂಪಿನ ವಿಧ ನಿಮಗೆ ಅತ್ಯಂತ ಸಹಜವಾಗಿದೆ ಮತ್ತು ಯಾಕೆ? - ಸರಣಿಗಳು ಮತ್ತು ಲೂಪ್ಸ್ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ ನಿಮ್ಮ ಡೇಟಾ ಸಂಘಟನೆಯ ಪ್ರವರ್ತನೆ ಹೇಗೆ ಬದಲಾಗಿದೆ? - ನೀವು ಮುಂದಿನ ಬಾರಿ ಯಾವ ಸಂಕೀರ್ಣ ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯವನ್ನು ನಿರ್ವಹಿಸಲು ಇಚ್ಛಿಸುತ್ತೀರಿ? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ತ್ಯಜ್ಯಕಷ್ಟು: ಈ ದಾಖಲೆ Co-op Translator ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯನ್ನು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸಂಗತಿಗಳನ್ನು ಹೊಂದಿರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿ ಇರುವ ಮೂಲ ದಾಖಲೆ ಪ್ರಾಧಿಕೃತ ಮೂಲಹಾಗೂ ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದವನ್ನು ಉಪಯೋಗಿಸುವುದರಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ಅಗತ್ಯಾರ್ಹತೆಗಳಿಗಾಗಿ ನಾವು ಹೊಣೆಗಾರರಲ್ಲ. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 소개

JavaScript는 웹의 언어입니다. 이 네 가지 레슨에서 기본적인 내용을 배울 수 있습니다. ### 주제 1. 변수와 데이터 타입 2. 함수와 메서드 3. JavaScript로 결정 내리기 4. 배열과 반복문 ### 작성자 이 레슨은 Jasmine Greenaway, Christopher Harrison, Chris Noring가 ♥️를 담아 작성했습니다. 면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.

javascript

JavaScript 기초: 데이터 타입

데이터 타입은 자바스크립트에서 작성하는 모든 프로그램에서 접하게 되는 기본 개념 중 하나입니다. 데이터 타입을 고대 알렉산드리아의 사서들이 사용하던 문서 보관 방식에 비유해 보세요 – 시, 수학, 역사 기록이 담긴 두루마리를 각각 다른 장소에 보관했죠. 자바스크립트도 다양한 종류의 데이터를 서로 다른 범주로 조직합니다. 이번 강의에서는 자바스크립트를 작동하게 하는 핵심 데이터 타입들을 알아봅니다. 숫자, 텍스트, 참/거짓 값을 다루는 방법과 올바른 타입을 선택하는 것이 왜 중요한지 배우게 될 것입니다. 처음에는 추상적으로 느껴질 수 있지만, 연습을 통해 자연스럽게 익히게 됩니다. 데이터 타입을 이해하면 자바스크립트의 다른 모든 것이 훨씬 명확해집니다. 건축가가 대성당을 짓기 전에 서로 다른 건축 자재를 이해해야 하듯, 이러한 기본 개념은 앞으로 만드는 모든 것들을 지탱해 줍니다. ## 강의 전 퀴즈 강의 전 퀴즈 이번 강의는 웹에서 상호작용을 제공하는 자바스크립트의 기초를 다룹니다. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") 변수와 그 안에 담기는 데이터 타입부터 시작해 봅시다! ## 변수 변수는 프로그래밍의 기본적인 구성 요소입니다. 중세 연금술사들이 다양한 물질을 담기 위해 라벨이 붙은 병을 사용했던 것처럼, 변수는 정보를 저장하고 나중에 참조할 수 있도록 설명적인 이름을 부여할 수 있습니다. 누군가의 나이를 기억해야 하나요? age라는 변수에 저장하세요. 사용자 이름을 추적하고 싶나요? userName이라는 변수에 보관하세요. 이번에는 자바스크립트에서 변수를 생성하는 현대적 방식을 중점적으로 다룹니다. 여기서 배우는 기법은 수년간 언어가 진화해 오면서 프로그래밍 커뮤니티가 개발한 모범 사례를 반영합니다. 변수를 생성하고 선언하는 문법은 [키워드] [이름]입니다. 두 부분으로 구성됩니다: - 키워드. 변경 가능한 변수에는 let, 변하지 않는 값에는 const를 사용합니다. - 변수 이름, 이 부분은 직접 선택하는 설명적인 이름입니다. ✅ let 키워드는 ES6에서 도입되었으며 _블록 스코프_를 갖습니다. 오래된 var 대신 let이나 const를 사용하는 것이 권장됩니다. 블록 스코프에 관해서는 이후 강의에서 더 자세히 다루겠습니다. ### 과제 - 변수 다루기 1. 변수 선언. 먼저 첫 변수를 만들어 봅시다: ```javascript let myVariable; ``` 이 작업의 의미: - 자바스크립트에게 myVariable이라는 저장 공간을 만들라고 지시 - 이 변수에 메모리 공간을 할당함 - 현재 이 변수는 값이 없음(정의되지 않은 상태) 2. 값 할당. 이제 변수에 값을 넣어 봅시다: ```javascript myVariable = 123; ``` 값 할당 방식: - = 연산자가 변수에 값 123을 할당 - 변수는 이제 정의되지 않은 상태가 아닌 123을 값으로 가짐 - 코드 어디서든 myVariable로 이 값을 참조할 수 있음 > 참고: 여기서 =는 할당 연산자로, 변수에 값을 설정하는 역할이며 동등함을 뜻하지 않습니다. 3. 효율적으로 작성하기. 사실 이 두 단계를 하나로 합칠 수 있습니다: ```javascript let myVariable = 123; ``` 이 방법의 장점: - 변수 선언과 값 할당을 한문장으로 처리 - 개발자들이 표준적으로 사용하는 스타일 - 코드 길이를 줄이면서 명확성 유지 4. 값 변경하기. 만약 다른 숫자를 저장하고 싶다면? ```javascript myVariable = 321; ``` 재할당 이해하기: - 변수 값이 123에서 321로 변경됨 - 이전 값은 덮어쓰임 – 변수는 한 번에 오직 하나의 값만 저장 - 이 가변성은 let으로 선언된 변수의 핵심 특성 ✅ 직접 해보세요! 브라우저에서 자바스크립트를 실행할 수 있습니다. 브라우저 창에서 개발자 도구(Developer Tools)를 열고 콘솔에 let myVariable = 123을 입력한 다음 엔터, 그리고 myVariable을 입력해 결과를 확인하세요. 다음 강의에서 이 개념을 더 깊이 다룰 것입니다. ### 🧠 변수 이해도 확인: 익숙해지기 변수에 대해 얼마나 이해했는지 확인해 봅시다: - 변수 선언과 할당의 차이점을 설명할 수 있나요? - 변수를 선언하기 전에 사용하면 어떻게 되나요? - 언제 let을 const 대신 선택하나요? ## 상수 프로그램 실행 중 절대 변하지 않아야 하는 정보를 저장해야 할 때가 있습니다. 상수는 고대 그리스의 유클리드가 확립한 수학적 원리와 같습니다 – 한 번 증명되고 문서화되면 이후 모든 참조에서 고정되어 변하지 않죠. 상수는 변수와 비슷하지만 중요한 제한이 있습니다: 값을 할당하면 변경할 수 없습니다. 이런 불변성은 프로그램에서 중요한 값이 실수로 변경되는 것을 막아줍니다. 상수 선언과 초기화는 변수와 같은 개념을 따르지만 const 키워드를 사용합니다. 상수 이름은 일반적으로 모두 대문자로 선언합니다. 이 코드는 다음을 수행합니다: - 값 123을 갖는 MY_VARIABLE이라는 상수를 생성 - 상수에는 대문자 이름 규칙 사용 - 이후 이 값은 변경할 수 없음 상수에 대한 두 가지 주요 규칙: - 반드시 즉시 값을 할당해야 한다 – 빈 상수는 허용되지 않음 - 할당한 값을 절대 변경할 수 없다 – 변경 시 자바스크립트가 오류를 발생시킴. 확인해 봅시다: 단순 값 - 다음은 허용되지 않습니다: ```javascript const PI = 3; PI = 4; // 허용되지 않음 ``` 기억할 점: - 상수를 재할당하려 시도하면 오류가 발생 - 중요한 값을 실수로 변경하는 것을 방지 - 프로그램 전체에서 값이 일관되게 유지됨 객체 참조는 보호됨 - 다음은 허용되지 않습니다: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 허용되지 않음 ``` 이 개념 이해하기: - 객체 전체를 새 객체로 교체하는 것을 방지 - 원래 객체에 대한 참조를 보호 - 메모리 상에서 객체의 정체성을 유지 객체의 값은 보호되지 않음 - 다음은 허용됩니다: ```javascript const obj = { a: 3 }; obj.a = 5; // 허용됨 ``` 여기서 발생하는 일: - 객체 내부의 속성 값을 수정 - 같은 객체 참조 유지 - 객체 내용은 변경 가능하지만 참조는 불변임을 보여줌 > 참고로, const는 참조 자체를 재할당으로부터 보호하지만 값 자체가 _불변_인 것은 아닙니다. 특히 객체와 같이 복잡한 구조에서는 내부 값이 변경될 수 있습니다. ## 데이터 타입 자바스크립트는 정보를 데이터 타입이라는 다른 범주로 분류합니다. 이 개념은 고대 학자들이 지식을 분류한 방식과 유사합니다 – 아리스토텔레스는 다양한 추론 유형을 구분했으며, 논리적 원칙이 시, 수학, 자연철학에 동일하게 적용될 수 없음을 알았습니다. 데이터 타입이 중요한 이유는 서로 다른 연산이 서로 다른 종류의 정보와 작동하기 때문입니다. 사람 이름에 산술 연산을 할 수 없거나 수학적 방정식을 알파벳 순으로 정렬할 수 없는 것처럼, 자바스크립트도 각 연산에 맞는 적절한 데이터 타입이 필요합니다. 이를 이해하면 오류를 방지하고 코드를 더 신뢰성 있게 만들 수 있습니다. 변수는 숫자, 텍스트 등 다양한 타입의 값을 저장할 수 있습니다. 이러한 여러 값의 종류를 데이터 타입이라고 합니다. 데이터 타입은 개발자가 코드 작성 및 소프트웨어 실행 방식을 결정하는 데 중요한 역할을 합니다. 또한 일부 데이터 타입은 값에서 추가 정보를 변환하거나 추출하는 독특한 기능을 가지고 있습니다. ✅ 데이터 타입은 자바스크립트 데이터 원시값(JavaScript data primitives)이라고도 불리며, 언어가 제공하는 가장 낮은 수준의 데이터 타입입니다. 7가지 원시 타입이 있습니다: string, number, bigint, boolean, undefined, null, symbol. 각각이 무엇을 나타내는지 잠시 상상해 보세요. zebra는 무엇일까요? 0은? true는? ### 숫자 숫자는 자바스크립트에서 가장 직관적인 데이터 타입입니다. 42 같은 정수, 3.14 같은 소수, -5 같은 음수 등을 사용할 때 자바스크립트는 모두 동일하게 취급합니다. 아까 변수에 저장했던 123도 실제로는 숫자 데이터 타입이었습니다: 핵심 특징: - 자바스크립트는 숫자 값을 자동으로 인식 - 수학 연산에 변수 사용 가능 - 명시적인 타입 선언이 필요 없음 변수는 소수점이 있는 숫자나 음수도 저장할 수 있습니다. 숫자는 다음 섹션에서 다루는 산술 연산자와 함께 사용할 수 있습니다. ### 산술 연산자 산술 연산자는 자바스크립트에서 수학 계산을 수행하도록 합니다. 이 연산자들은 중세 수학자 알-콰리즈미가 개발한 대수 표기법과 같이 수세기 동안 사용된 수학 원칙을 따릅니다. 연산자는 전통적인 수학에서 기대하는 그대로 작동합니다: 더하기는 덧셈, 빼기는 뺄셈, 등등. 산술 기능을 수행할 때 사용할 수 있는 여러 연산자 중 일부는 다음과 같습니다: ✅ 직접 해보세요! 브라우저 콘솔에서 산술 연산을 시도해 보세요. 결과가 놀랍나요? ### 🧮 수학 실력 점검: 자신 있게 계산하기 산술 이해도를 테스트해 봅시다: - /(나누기)와 %(나머지)의 차이는 무엇인가요? - 10 % 3은 무엇일지 예측해 보세요. (힌트: 3.33이 아닙니다...) - 왜 나머지 연산자가 프로그래밍에서 유용할까요? ### 문자열 자바스크립트에서 텍스트 데이터는 문자열(string)로 표현됩니다. '문자열'이라는 용어는 문자들이 줄줄이 연결된다는 의미에서 유래했습니다. 중세 수도원의 서기관들이 글자들을 연결해 단어와 문장을 만들던 방식과 유사합니다. 문자열은 웹 개발에 있어 기본적인 요소입니다. 웹사이트에 표시되는 모든 텍스트 – 사용자 이름, 버튼 레이블, 오류 메시지, 콘텐츠 등 – 는 모두 문자열 데이터입니다. 문자열을 이해하는 것은 실용적인 사용자 인터페이스를 만드는 데 필수적입니다. 문자열은 작은따옴표 또는 큰따옴표 사이에 위치한 문자 집합입니다. 이 개념을 이해합시다: - 문자열은 작은따옴표 ' 또는 큰따옴표 "를 사용해 정의 - 문자, 숫자, 기호를 포함한 텍스트 데이터를 저장 - 변수에 문자열 값을 할당하여 나중에 사용 가능 - 문자열과 변수명을 구분하기 위해 따옴표를 반드시 사용해야 함 문자열을 작성할 때는 반드시 따옴표를 사용하세요. 그렇지 않으면 자바스크립트가 변수명으로 해석합니다. ### 문자열 포맷팅 문자열 조작은 텍스트 요소를 합치거나 변수 삽입, 프로그램 상태에 반응하는 동적 콘텐츠 생성 등을 가능하게 합니다. 이 기법을 활용하면 프로그래밍 방식으로 텍스트를 구성할 수 있습니다. 종종 여러 문자열을 하나로 합쳐야 하는데, 이를 연결(concatenation)이라고 합니다. 두 개 이상의 문자열을 이어 붙이거나 함께 결합하려면 + 연산자를 사용하세요. 단계별로 무슨 일이 일어나는지 살펴보면: - + 연산자를 사용해 여러 문자열을 결합합니다 - 첫 번째 예제에서는 문자열 사이에 공백 없이 바로 이어 붙입니다 - 가독성을 위해 문자열 사이에 공백 문자 " "를 추가합니다 - 올바른 형식을 만들기 위해 쉼표 같은 구두점을 삽입합니다 ✅ 왜 JavaScript에서는 1 + 1 = 2 이지만 '1' + '1' = 11일까요? 생각해 보세요. 그렇다면 '1' + 1 은요? 템플릿 리터럴은 문자열을 포맷하는 또 다른 방법으로, 따옴표 대신 백틱(backtick)을 사용합니다. 일반 텍스트가 아닌 부분은 ${ } 안에 넣어야 합니다. 여기에는 문자열일 수 있는 변수들도 포함됩니다. 각 부분을 이해해 봅시다: - 템플릿 리터럴을 만들 때 일반 따옴표 대신 백틱 ` `` 을 사용합니다 - ${} 자리 표시자 구문을 사용해 변수를 직접 삽입합니다 - 작성한 대로 공백과 서식을 정확하게 보존합니다 - 변수와 함께 복잡한 문자열을 더 깔끔하게 만드는 방법을 제공합니다 어떤 방법으로도 포맷팅 목표를 달성할 수 있지만, 템플릿 리터럴은 공백과 줄바꿈을 정확히 반영합니다. ✅ 템플릿 리터럴을 평범한 문자열 대신 언제 사용해야 할까요? ### 🔤 문자열 숙련도 점검: 텍스트 조작 자신감 문자열 실력을 평가해 봅시다: - 왜 '1' + '1'이 2 가 아닌 '11'인지 설명할 수 있나요? - 문자열 결합과 템플릿 리터럴 중 어떤 문자열 방법이 더 읽기 쉬운가요? - 문자열 주위에 따옴표를 빼먹으면 어떻게 될까요? ### 불리언(Booleans) 불리언은 가장 단순한 형태의 데이터로, 오직 두 가지 값만 가질 수 있습니다 – true 또는 false. 이 이진 논리 시스템은 19세기 수학자 조지 불(George Boole)의 불 대수에서 유래했습니다. 단순함에도 불리하고, 불리언은 프로그램 논리에 필수적입니다. 사용자가 로그인했는지, 버튼이 클릭되었는지, 특정 조건이 충족되었는지에 따라 코드가 결정하도록 해 줍니다. 불리언 값은 오직 true 또는 false 둘 중 하나일 수 있습니다. 특정 조건이 충족되면 어떤 코드 줄이 실행될지 결정하는 데 도움을 줍니다. 많은 경우에 연산자가 불리언 값을 설정하는 데 도움을 주며, 변수 초기화나 값 업데이트가 연산자를 통해 이루어지는 것을 자주 볼 수 있습니다. 위 예제에서: - 불리언 값 true를 저장하는 변수를 생성했습니다 - 불리언 값 false를 저장하는 방법을 보여주었습니다 - 따옴표 없이 정확한 키워드 true와 false를 사용했습니다 - 조건문에서 사용할 수 있도록 이 변수를 준비했습니다 ✅ 변수는 불리언 true로 평가되면 'truthy'로 간주할 수 있습니다. 흥미롭게도 JavaScript에서는 거짓으로 정의하지 않는 모든 값은 truthy입니다. ### 🎯 불리언 논리 점검: 의사 결정 능력 불리언 이해도를 테스트해 보세요: - JavaScript에 true와 false 외에도 'truthy'와 'falsy' 값이 존재하는 이유는 무엇일까요? - 다음 중 falsy인 값을 예측할 수 있나요: 0, "0", [], "false"? - 불리언은 프로그램 흐름을 제어하는 데 어떻게 유용할까요? --- ## 📊 데이터 타입 도구 요약 ## GitHub Copilot 에이전트 챌린지 🚀 에이전트 모드를 사용해 다음 챌린지를 완료하세요: 설명: 이 수업에서 배운 모든 JavaScript 데이터 타입을 사용하고 실제 데이터 시나리오를 처리하는 개인 정보 관리자를 만드세요. 프롬프트: 이름(문자열), 나이(숫자), 학생 여부(불리언), 좋아하는 색 배열, 주소 객체(거리, 도시, 우편번호 포함)를 담은 사용자 프로필 객체를 생성하는 JavaScript 프로그램을 만드세요. 프로필 정보를 표시하고 개별 필드를 업데이트하는 함수도 포함하세요. 문자열 결합, 템플릿 리터럴, 나이를 이용한 산술 연산, 학생 여부 불리언 논리를 시연해야 합니다. 에이전트 모드에 대해 더 알아보세요. ## 🚀 챌린지 JavaScript에는 개발자를 놀라게 할 수 있는 동작들이 있습니다. 고전적인 예를 하나 살펴볼까요: 브라우저 콘솔에 let age = 1; let Age = 2; age == Age를 입력해보세요. 결과는 false입니다 – 이유를 알겠나요? 이것은 JavaScript 동작 중 하나일 뿐입니다. 이런 특성을 익히면 더 신뢰성 있는 코드를 작성하고 디버깅 능력을 높일 수 있습니다. ## 강의 후 퀴즈 강의 후 퀴즈 ## 복습 및 자체 학습 이 JavaScript 연습 문제 목록을 살펴보고 하나씩 도전해 보세요. 무엇을 배웠나요? ## 과제 데이터 타입 연습 ## 🚀 JavaScript 데이터 타입 숙련도 타임라인 ### ⚡ 다음 5분 동안 할 수 있는 일 - [ ] 브라우저 콘솔을 열고 서로 다른 데이터 타입 3개 변수 만들기 - [ ] 챌린지 시도: let age = 1; let Age = 2; age == Age가 false인 이유 찾기 - [ ] 이름과 좋아하는 숫자를 문자열 결합해 보기 - [ ] 숫자와 문자열을 더했을 때 어떤 일이 일어나는지 테스트하기 ### 🎯 이번 시간 내 달성할 수 있는 목표 - [ ] 강의 후 퀴즈 완료 및 헷갈리는 개념 복습하기 - [ ] 두 숫자를 더하고 빼고 곱하고 나누는 간단한 계산기 만들기 - [ ] 템플릿 리터럴을 활용한 이름 포맷터 만들기 - [ ] == 와 === 비교 연산자의 차이 탐색하기 - [ ] 서로 다른 데이터 타입 간 변환 연습하기 ### 📅 이번 주 JavaScript 기초 완성 - [ ] 과제를 자신감과 창의성으로 완수하기 - [ ] 배운 모든 데이터 타입을 포함한 개인 프로필 객체 만들기 - [ ] CSS-Tricks JavaScript 연습문제 도전하기 - [ ] 불리언 논리를 활용한 간단한 폼 검증기 만들기 - [ ] 배열과 객체 데이터 타입 실습(예고편) - [ ] JavaScript 커뮤니티에 참여해 데이터 타입 관련 질문하기 ### 🌟 이번 달 JavaScript 실력 향상 - [ ] 데이터 타입 지식을 큰 프로젝트에 통합하기 - [ ] 실제 애플리케이션에서 각 데이터 타입을 언제, 왜 사용하는지 이해하기 - [ ] 초보자에게 JavaScript 기본 개념 설명 도와주기 - [ ] 다양한 사용자 데이터를 관리하는 작은 애플리케이션 만들기 - [ ] 타입 강제 변환, 엄격 동등 비교 같은 고급 데이터 타입 개념 탐색하기 - [ ] 오픈 소스 JavaScript 프로젝트에 문서 개선으로 기여하기 ### 🧠 최종 데이터 타입 숙련도 점검 JavaScript 기초 완성 축하: - 어떤 데이터 타입 동작이 가장 놀라웠나요? - 변수와 상수 차이를 친구에게 설명하는 데 얼마나 자신 있나요? - JavaScript 타입 시스템에 관해 가장 흥미롭게 발견한 점은 무엇인가요? - 이 기본 지식을 활용해 어떤 실제 애플리케이션을 만들고 싶나요? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나, 자동 번역에는 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어의 원본 문서가 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 본 번역 사용으로 인해 발생하는 모든 오해나 오역에 대해서는 책임을 지지 않습니다. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 기초: 메서드와 함수

## 강의 전 퀴즈 강의 전 퀴즈 같은 코드를 반복해서 작성하는 것은 프로그래밍에서 가장 흔한 좌절 중 하나입니다. 함수는 코드를 재사용 가능한 블록으로 묶어 이 문제를 해결해 줍니다. 함수를 헨리 포드의 조립 라인을 혁신적으로 만든 표준화된 부품과 같이 생각해 보세요 — 한 번 신뢰할 수 있는 부품을 만들면 어디서든 새로 만들지 않고 사용할 수 있습니다. 함수는 코드 조각을 묶어 프로그램 전체에서 재사용할 수 있게 해줍니다. 같은 로직을 복사해서 붙여넣는 대신 함수를 한 번 만들고 필요할 때마다 호출할 수 있습니다. 이 방식은 코드를 체계적으로 유지하고 수정 작업을 훨씬 쉽게 만듭니다. 이번 수업에서는 직접 함수를 만드는 방법, 정보 전달 방법, 유용한 결과를 받는 방법을 배웁니다. 함수와 메서드의 차이를 이해하고, 최신 문법 방식을 배우며, 함수들이 서로 어떻게 작동하는지 단계별로 살펴봅니다. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## 함수 함수는 특정 작업을 수행하는 독립적인 코드 블록입니다. 필요할 때마다 실행할 수 있는 로직을 캡슐화합니다. 프로그램 전반에 걸쳐 같은 코드를 여러 번 작성하는 대신, 함수를 만들어 필요할 때 호출할 수 있습니다. 이 방식은 코드를 깔끔하게 유지하며 수정하기 훨씬 용이합니다. 만약 코드베이스의 20군데에 흩어져 있는 로직을 수정해야 한다면 유지보수가 얼마나 어려운지 상상해 보세요. 함수에 의미 있는 이름을 부여하는 것이 중요합니다. 잘 지어진 함수 이름은 그 목적을 명확하게 전달합니다 — cancelTimer()를 보면 즉시 그 역할을 이해할 수 있듯이, 버튼에 명확한 라벨이 붙어 있으면 클릭했을 때 무슨 일이 일어날지 바로 알 수 있습니다. ## 함수 생성 및 호출 함수를 생성하는 방식을 살펴봅시다. 문법은 일관된 패턴을 따릅니다: 분해해 보면: - function 키워드는 자바스크립트에게 "나는 함수를 만들 거야!"라고 알립니다 - nameOfFunction은 함수에 의미 있는 이름을 부여하는 자리입니다 - 괄호 () 안에는 나중에 배울 매개변수를 넣을 수 있습니다 - 중괄호 {} 안에는 함수가 호출될 때 실행되는 실제 코드가 들어갑니다 간단한 인사 함수 예제로 확인해 봅시다: 이 함수는 콘솔에 "Hello, world!"를 출력합니다. 한 번 정의해 두면 필요할 때 여러 번 사용할 수 있습니다. 함수를 실행(호출)하려면 함수 이름 뒤에 괄호를 적으면 됩니다. 자바스크립트는 함수 정의 위치와 호출 위치가 달라도 실행 순서를 자동으로 처리합니다. 이 줄을 실행하면 displayGreeting 함수 내부의 모든 코드가 실행되어 브라우저 콘솔에 "Hello, world!"가 표시됩니다. 이 함수를 반복해서 여러 번 호출할 수 있습니다. ### 🧠 함수 기본 점검: 첫 함수 만들기 기본 함수에 대해 점검해 봅시다: - 함수 정의에 중괄호 {}를 사용하는 이유는 무엇일까요? - displayGreeting을 괄호 없이 작성하면 어떻게 될까요? - 같은 함수를 여러 번 호출하는 이유는 무엇일까요? ### 함수 작성 모범 사례 훌륭한 함수를 작성하기 위한 몇 가지 팁입니다: - 함수 이름을 명확하고 의미 있게 지으세요 — 미래의 내 당신이 고마워 할 겁니다! - 여러 단어로 된 이름은 camelCase 스타일을 사용하세요 (예: calculateTotal, calculate_total이 아님) - 각 함수는 한 가지 작업에 집중하도록 작성하세요 ## 함수에 정보 전달하기 우리의 displayGreeting 함수는 제한적입니다 — 항상 "Hello, world!"만 표시할 수 있습니다. 매개변수(parameter)는 함수가 더 유연하고 유용하게 작동하도록 도와줍니다. 매개변수는 함수가 호출될 때마다 다른 값을 넣을 수 있는 자리 표시자와 같습니다. 이렇게 하면 같은 함수가 각 호출마다 다른 정보를 처리할 수 있습니다. 함수 정의 시 괄호 안에 매개변수를 쉼표로 구분하여 나열합니다: 각 매개변수는 자리표시자와 같아서, 함수를 호출하는 사람이 실제 값을 넣어 해당 자리에 할당됩니다. 인사 함수에 사람 이름을 받도록 바꿔 봅시다: 이 예제에서는 백틱(` `)과 ${}`를 사용해 이름을 메시지에 직접 넣었습니다 — 이를 템플릿 리터럴(template literal)이라고 하며, 변수와 문자열을 섞어 만들 때 아주 유용한 방법입니다. 함수를 호출할 때 임의의 이름을 전달할 수 있습니다: 자바스크립트가 문자열 'Christopher'를 name 매개변수에 할당하고 "Hello, Christopher!"라는 개인화 메시지를 만듭니다. ## 기본값 설정 어떤 매개변수를 선택적(optional)으로 만들고 싶을 때는 기본값(default values)을 설정하면 편리합니다! 예를 들어 인사말 단어를 바꾸게 하되, 지정하지 않으면 기본적으로 "Hello"를 사용하게 할 수 있습니다. 기본값은 변수에 값을 할당하듯 등호(=)로 지정합니다: 여기서 name은 필수이며, salutation은 따로 지정하지 않으면 'Hello'가 기본으로 할당됩니다. 이제 이 함수를 두 가지 방식으로 호출할 수 있습니다: 첫 번째 호출에서는 인사말을 지정하지 않았으니 자바스크립트는 기본값 "Hello"를 사용합니다. 두 번째 호출은 "Hi"라는 커스텀 인사말을 사용합니다. 이런 유연성 덕분에 함수가 다양한 상황에 적응할 수 있습니다. ### 🎛️ 매개변수 이해 점검: 함수 유연성 확보 매개변수 이해도를 테스트해 봅시다: - 매개변수(parameter)와 인수(argument)의 차이는 무엇인가요? - 실무에서 기본값이 왜 유용할까요? - 매개변수보다 더 많은 인수를 전달하면 어떻게 될까요? ## 반환값 (Return values) 지금까지 함수는 메시지를 콘솔에 출력만 했지만, 계산 결과를 함수가 반환하게 하고 싶을 때는 어떻게 할까요? 이때 반환값을 사용합니다. 함수가 무엇인가를 출력하는 대신, 값을 돌려주면 변수에 저장하거나 다른 코드에서 활용할 수 있습니다. 값을 돌려주려면 return 키워드 뒤에 반환할 값을 적으면 됩니다: 중요한 점: 함수가 return 명령문을 만나면 즉시 종료되고, 해당 값을 호출한 곳에 돌려줍니다. 인사 함수가 출력을 하지 않고 메시지를 반환하도록 바꿔 봅시다: 이제 이 함수는 인사 메시지를 생성해 우리에게 돌려줍니다. 반환된 값을 사용하려면 변수에 저장하면 됩니다: 이제 greetingMessage 변수에는 "Hello, Christopher"가 들어 있고, 웹 페이지에 표시하거나 이메일에 포함시키거나 다른 함수에 전달하는 등 어디서든 사용할 수 있습니다. ### 🔄 반환값 이해 점검: 결과를 받아보기 반환값 이해도를 평가해 봅시다: - 함수 내 return 뒤의 코드는 어떻게 될까요? - 왜 값을 반환하는 것이 단순 출력보다 좋은가요? - 함수는 다양한 타입(문자열, 숫자, 불리언)을 반환할 수 있나요? ## 함수를 매개변수로 전달하기 함수를 다른 함수의 매개변수로 넘길 수 있습니다. 처음에는 복잡해 보일 수 있지만, 매우 유용한 프로그래밍 기법입니다. 이 패턴은 "어떤 일이 일어날 때 이렇게 해라"와 같이 사용할 때 자주 쓰입니다. 예를 들어 "타이머가 끝났을 때 이 코드를 실행해라", "사용자가 버튼을 클릭하면 이 함수를 호출해라" 같은 경우입니다. 자바스크립트 내장 함수인 setTimeout을 봅시다. 지정한 시간(밀리초) 후에 코드를 실행합니다. 여기에 실행할 코드를 전달해야 하니, 함수 전달이 딱입니다! 다음 코드를 실행해 보세요 — 3초 후 메시지를 볼 수 있습니다: displayDone을 괄호 없이 setTimeout에 전달하는 점에 주목하세요. 직접 함수를 호출하는 게 아니라, setTimeout에게 "3초 후에 이 함수를 호출해라"라고 넘기는 겁니다. ### 익명 함수 가끔 이름이 필요 없는 함수가 있기도 합니다. 한 번만 사용할 건데 이름까지 지을 필요 있을까요? 자바스크립트는 익명 함수를 지원합니다 — 이름이 없는 함수를 필요한 곳에 바로 정의할 수 있습니다. 타이머 예제를 익명 함수로 바꿔 봅시다: 결과는 같지만, 함수 선언 없이 바로 setTimeout 호출 안에 함수를 정의했습니다. ### 화살표 함수 현대 자바스크립트에는 함수를 더 짧고 간결하게 쓰는 방법으로 화살표 함수(arrow functions)가 있습니다. => 기호(화살표 모양)를 사용하며, 개발자들 사이에서 매우 인기입니다. 화살표 함수는 function 키워드를 생략하고 더 간결한 구문을 제공합니다. 타이머 예제를 화살표 함수로 표현하면: ()는 매개변수 자리(이 예제는 비어 있음), 그다음 =>, 그리고 중괄호 {} 안에 함수 본문이 옵니다. 같은 기능을 더 간결하게 작성했습니다. ### 언제 어떤 방식을 쓸까요? 각 방식을 언제 써야 할까요? 실용적인 기준: 함수를 여러 번 재사용하려면 이름을 붙여 별도로 정의하세요. 한 번만 사용할 거면 익명 함수를 고려하세요. 화살표 함수와 전통 함수 문법 모두 유효하지만, 현대 자바스크립트 코드에서는 화살표 함수가 널리 쓰입니다. ### 🎨 함수 스타일 점검: 올바른 문법 선택 문법 이해도를 테스트해 봅시다: - 언제 화살표 함수를 전통 함수 문법 대신 선호하나요? - 익명 함수의 주요 이점은 무엇인가요? - 이름 있는 함수가 익명 함수보다 나은 상황을 생각할 수 있나요? --- ## 🚀 도전 과제 함수와 메서드의 차이를 한 문장으로 말할 수 있나요? 도전해 보세요! ## GitHub Copilot 에이전트 도전 🚀 Agent 모드를 활용해 다음 도전을 완수하세요: 설명: 이 수업에서 다룬 함수 개념들(매개변수, 기본값, 반환값, 화살표 함수 등)을 활용하는 수학 함수 유틸리티 라이브러리를 만드세요. 프롬프트: mathUtils.js라는 자바스크립트 파일에 다음 함수들을 작성하세요: 1. 두 매개변수를 받아 합을 반환하는 함수 add 2. 기본값을 가진 두 번째 매개변수가 1인 함수 multiply 3. 숫자를 받아 제곱을 반환하는 화살표 함수 square 4. 다른 함수를 매개변수로 받고 두 숫자에 적용하는 함수 calculate 5. 각 함수를 적절한 테스트 케이스로 호출하는 예시 agent 모드에 대해 더 알아보세요. ## 강의 후 퀴즈 강의 후 퀴즈 ## 복습 및 자기주도 학습 코드 베이스에서 점점 더 많이 사용되는 화살표 함수에 대해 자세히 읽어보는 것이 도움이 됩니다. 함수를 작성한 후 화살표 함수 문법으로 다시 작성해 보세요. ## 과제 함수 재미있게 배우기 --- ## 🧰 당신의 자바스크립트 함수 도구 상자 요약 --- ## 🚀 당신의 자바스크립트 함수 숙련도 타임라인 ### ⚡ 다음 5분 내에 할 수 있는 것들 - [ ] 좋아하는 숫자를 반환하는 간단한 함수 작성하기 - [ ] 두 매개변수를 받아 더하는 함수 만들기 - [ ] 전통적인 함수를 화살표 함수 문법으로 변환해 보기 - [ ] 도전 과제 연습: 함수와 메서드의 차이점 설명하기 ### 🎯 이번 시간에 달성할 수 있는 목표 - [ ] 수업 후 퀴즈 완료하고 헷갈리는 개념 복습하기 - [ ] GitHub Copilot 챌린지에서 나온 수학 유틸리티 라이브러리 만들기 - [ ] 다른 함수를 매개변수로 사용하는 함수 만들기 - [ ] 기본 매개변수가 있는 함수 작성 연습하기 - [ ] 함수 반환 값에서 템플릿 리터럴 실험해 보기 ### 📅 일주일간의 함수 마스터 계획 - [ ] 창의적으로 "Fun with Functions" 과제 완료하기 - [ ] 작성한 반복 코드 일부를 재사용 가능한 함수로 리팩토링하기 - [ ] 함수만 사용해 작은 계산기 만들기 (전역 변수 없이) - [ ] map() 및 filter() 같은 배열 메서드로 화살표 함수 연습하기 - [ ] 흔히 하는 작업을 위한 유틸리티 함수 모음 만들기 - [ ] 고차 함수와 함수형 프로그래밍 개념 학습하기 ### 🌟 한 달간의 변화 프로젝트 - [ ] 클로저와 스코프 같은 고급 함수 개념 마스터하기 - [ ] 함수 합성을 많이 활용하는 프로젝트 만들기 - [ ] 함수 문서화를 개선하여 오픈 소스에 기여하기 - [ ] 다른 사람에게 함수와 다양한 문법 스타일 가르치기 - [ ] JavaScript의 함수형 프로그래밍 패러다임 탐구하기 - [ ] 미래 프로젝트를 위해 재사용 가능한 개인 라이브러리 만들기 ### 🏆 최종 함수 챔피언 점검 함수 마스터를 축하하며: - 지금까지 만든 함수 중 가장 유용한 함수는 무엇인가요? - 함수를 배우면서 코드 조직 방법에 어떤 변화가 있었나요? - 선호하는 함수 문법 스타일과 그 이유는 무엇인가요? - 함수를 작성해서 해결하고 싶은 현실 문제는 무엇인가요? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 양지해 주시기 바랍니다. 원문은 해당 언어의 원본 문서가 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우 전문 번역가에 의한 인간 번역을 권장합니다. 이 번역본 사용으로 인해 발생하는 오해나 오인에 대해 당사는 책임을 지지 않습니다. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 기초: 의사 결정

애플리케이션이 어떻게 똑똑한 결정을 내리는지 궁금했던 적 있나요? 예를 들어 내비게이션 시스템이 가장 빠른 경로를 선택하는 방법, 또는 온도 조절기가 언제 난방을 켤지 결정하는 방법 말이죠. 이것이 프로그래밍에서 의사 결정의 기본 개념입니다. 찰스 배비지의 해석 엔진이 조건에 따라 다른 연산 순서를 따르도록 설계된 것처럼, 현대의 자바스크립트 프로그램도 다양한 상황에 따라 선택을 해야 합니다. 이 분기하고 결정을 내리는 능력이 정적인 코드를 반응형이고 지능적인 애플리케이션으로 변화시키는 요인입니다. 이번 수업에서는 조건부 논리를 프로그램에 구현하는 법을 배웁니다. 조건문, 비교 연산자, 논리식을 탐구하여 코드가 상황을 평가하고 적절히 반응하도록 만들 것입니다. ## 강의 전 퀴즈 강의 전 퀴즈 의사 결정 능력과 프로그램 흐름 제어는 프로그래밍의 기본적인 측면입니다. 이 섹션에서는 불리언 값과 조건부 논리를 사용해 자바스크립트 프로그램의 실행 경로를 제어하는 방법을 다룹니다. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## 불리언(Booleans) 간단 복습 의사 결정에 앞서, 지난 수업에서 배운 불리언 값을 다시 살펴보겠습니다. 수학자 조지 불(George Boole)의 이름을 딴 이 값들은 이진 상태를 나타냅니다—true 또는 false. 애매함 없이 딱 두 가지 상태만 존재합니다. 이 이진 값들은 모든 계산 논리의 기초를 이룹니다. 프로그램이 내리는 모든 결정은 결국 불리언 평가로 귀결됩니다. 불리언 변수를 만드는 방법은 간단합니다: 이렇게 두 개의 변수가 명시적인 불리언 값으로 생성됩니다. ✅ 불리언은 영국의 수학자, 철학자이자 논리학자인 조지 불(1815~1864)의 이름에서 유래되었습니다. ## 비교 연산자와 불리언 실제로 불리언 값을 수동으로 설정하는 일은 드뭅니다. 대신 조건을 평가해서 생성합니다: "이 숫자가 저 숫자보다 큰가?" 또는 "이 값들이 같은가?" 비교 연산자는 이러한 평가를 가능하게 합니다. 이들은 값을 비교하고 피연산자 간의 관계에 따라 불리언 결과를 반환합니다. ✅ 웹 브라우저의 콘솔에 비교 연산을 작성해서 확인해보세요. 반환된 값 중 놀라운 점이 있나요? ### 🧠 비교 연산 숙달 확인: 불리언 논리 이해하기 비교에 대해 테스트해보기: - 왜 === (엄격한 동등성)이 보통 == (느슨한 동등성)보다 선호될까요? - 5 === '5'는 무엇을 반환할까요? 5 == '5'는요? - !==와 !=의 차이는 무엇인가요? ## If 문 if 문은 코드에서 질문을 하는 것과 같습니다. "만약 이 조건이 참이라면, 이 일을 수행해라." 자바스크립트에서 의사 결정을 위해 가장 중요한 도구입니다. 작동 방식은 다음과 같습니다: 조건은 괄호 안에 들어가고, 만약 true라면 자바스크립트는 중괄호 안 코드를 실행합니다. false라면 전체 블록을 건너뜁니다. 조건을 만들 때는 보통 비교 연산자를 사용합니다. 실용적인 예를 보겠습니다: 1000 >= 800은 true로 평가되므로 블록 내 코드가 실행되어 콘솔에 "신형 노트북 구입!"이 출력됩니다. ## If..Else 문 하지만 조건이 거짓일 때 다른 작업을 하길 원한다면? 그게 바로 else 문이 등장하는 이유입니다—백업 계획과 비슷합니다. else 문은 "만약 이 조건이 거짓이라면, 이 작업을 해라"라고 말하는 방법입니다. 이번엔 500 >= 800이 false라서 자바스크립트가 첫 번째 블록을 건너뛰고 else 블록을 실행합니다. 콘솔에는 "아직 노트북을 살 여유가 없다!"가 출력됩니다. ✅ 이 코드와 아래 코드를 브라우저 콘솔에 실행해서 이해도를 테스트해보세요. currentMoney와 laptopPrice 변수 값을 바꿔 console.log() 결과를 바꿔볼 수 있습니다. ### 🎯 If-Else 논리 점검: 분기 경로 조건부 논리 이해도 평가: - currentMoney가 laptopPrice와 정확히 같다면 어떻게 될까요? - 현실 세계에서 if-else 논리가 유용할 만한 시나리오는 무엇일까요? - 여러 가격 범위를 처리하기 위해 어떻게 확장할 수 있을까요? ## Switch 문 가끔 하나의 값을 여러 옵션과 비교해야 할 때가 있습니다. 여러 if..else 문을 연속으로 쓰는 방법도 있지만, 복잡해지고 다루기 어렵습니다. switch문은 여러 개의 이산 값을 다루기에 더 깔끔한 구조를 제공합니다. 이 개념은 초기 전화교환기의 기계식 스위칭 시스템과 비슷합니다—하나의 입력값이 실행할 특정 경로를 결정합니다. 구조는 다음과 같습니다: - 자바스크립트가 표현식을 한 번 평가 - 각 case를 차례로 검사하며 일치 여부 확인 - 일치하는 경우 해당 코드 블럭 실행 - break 문은 자바스크립트에게 switch 실행을 멈추고 빠져나가라고 지시 - 일치하는 case가 없으면 default 블록을 실행(설정한 경우) 이 예에서는 자바스크립트가 dayNumber가 2임을 확인하고, case 2를 찾아 dayName을 "화요일"로 설정한 후 switch를 중단합니다. 결과는 "오늘은 화요일입니다"가 콘솔에 출력됩니다. ✅ 이 코드와 다음 코드를 브라우저 콘솔에서 실행해 이해도를 테스트해보세요. 변수 a의 값을 바꾸면 console.log() 결과가 달라집니다. ### 🔄 Switch 문 숙달 체크: 여러 옵션 처리 Switch 문 이해도 테스트: - break 문을 깜빡하면 어떻게 될까요? - 여러 if-else 대신 언제 switch를 사용하는 것이 좋을까요? - default 케이스는 모든 경우를 다뤘다고 생각해도 왜 유용할까요? ## 논리 연산자와 불리언 복잡한 결정을 할 때는 여러 조건을 동시에 평가해야 하는 경우가 많습니다. 수학에서 불 대수(Boolean algebra)가 논리식을 결합하는 것처럼, 프로그래밍에서도 논리 연산자를 제공하여 여러 불리언 조건을 연결합니다. 이 연산자들은 단순한 참/거짓 평가를 조합해 정교한 조건부 논리를 만듭니다. 이 연산자는 조건을 다음과 같이 결합할 수 있습니다: - AND (&&)는 두 조건 모두 참이어야 함 - OR (||)는 하나 이상의 조건이 참이어야 함 - NOT (!)은 참과 거짓을 뒤바꿈 ## 논리 연산자와 조건 및 결정 조금 더 현실적인 예제를 통해 논리 연산자를 살펴봅시다: 이 예에서 20% 할인 가격(640)을 계산한 뒤, 전체 가격 또는 할인 가격 중 하나를 현재 가진 돈으로 감당할 수 있는지를 평가합니다. 600은 640 할인 가격 조건을 충족하지 못하지만, 조건식은 OR 연산자로, 둘 중 하나라도 참이면 전체가 참이므로 true로 평가됩니다. ### 🧮 논리 연산자 점검: 조건 조합 연습 논리 연산자 이해도 테스트: - 표현식 A && B에서 A가 거짓이면 무엇이 일어날까요? B는 평가되나요? - 세 가지 연산자 (&&, ||, !)를 동시에 써야 하는 상황을 생각해볼 수 있나요? - !user.isActive와 user.isActive !== true는 어떻게 다른가요? ### 부정 연산자 때때로 어떤 것이 참이 아닐 때를 생각하는 게 더 쉽습니다. 예를 들어 "사용자가 로그인했는가?" 대신 "사용자가 로그인하지 않았는가?"를 묻고 싶을 때도 있죠. 느낌표(!) 연산자는 그 논리를 반전시켜줍니다. ! 연산자는 "반대의..."라고 말하는 것과 같아요—무언가가 true일 때 !는 false로 바꾸고, 그 반대도 마찬가지입니다. ### 삼항 연산자 간단한 조건부 할당을 위해 자바스크립트는 삼항 연산자를 제공합니다. 이 간결한 문법으로 조건식을 한 줄에 작성할 수 있습니다. 조건에 따라 두 값 중 하나를 할당할 필요가 있을 때 유용합니다. 이 문법은 이렇게 읽힙니다: "이 조건이 참인가? 참이면 이 값을 써라. 거짓이면 저 값을 써라." 더 구체적인 예를 보겠습니다: ✅ 코드를 여러 번 읽어보세요. 이 연산자들이 어떻게 작동하는지 이해가 되나요? 이 줄은 이렇게 말하는 겁니다: "firstNumber가 secondNumber보다 큰가? 참이면 biggestNumber에 firstNumber를 넣고, 아니면 secondNumber를 넣어라." 삼항 연산자는 전통적인 if..else 문을 더 짧게 쓴 것뿐입니다: 양쪽 방식 모두 같은 결과를 만듭니다. 삼항 연산자는 간결함을 제공하고, 전통적인 if-else 구조는 복잡한 조건에서는 읽기 더 쉬울 수 있습니다. --- ## 🚀 도전 과제 논리 연산자를 사용하는 프로그램을 먼저 작성한 다음, 삼항 연산자를 사용하여 다시 작성하세요. 어떤 문법이 더 선호되나요? --- ## GitHub Copilot Agent 도전 과제 🚀 에이전트 모드를 사용해 다음 도전을 완료하세요: 설명: 이번 수업에서 다룬 여러 의사 결정 개념(if-else 문, switch 문, 논리 연산자, 삼항 연산자)을 포함하는 포괄적인 성적 계산기를 만드세요. 요구사항: 학생의 숫자 점수(0-100)를 받아 다음 기준에 따라 학점(A-F)을 판단하는 자바스크립트 프로그램을 작성하세요: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 미만 요구조건: 1. 학점 판정에 if-else 문을 사용하세요. 2. 학생이 합격했는지(성적 >= 60) AND 우등인지(성적 >= 90)를 논리 연산자를 사용하여 확인하세요 3. switch 문을 사용하여 각 등급에 대해 구체적인 피드백을 제공하세요 4. 삼항 연산자를 사용하여 학생이 다음 과정에 적합한지(성적 >= 70) 결정하세요 5. 점수가 0에서 100 사이인지 입력 검증을 포함하세요 59, 60, 89, 90과 같은 경계 값 및 잘못된 입력을 포함하여 다양한 점수로 프로그램을 테스트하세요. agent mode에 대해 자세히 알아보세요. ## 강의 후 퀴즈 강의 후 퀴즈 ## 복습 및 자기주도 학습 사용자에게 제공되는 다양한 연산자에 대해 더 읽어보세요 MDN에서. Josh Comeau의 멋진 연산자 조회를 살펴보세요! ## 과제 연산자 --- ## 🧠 당신의 의사결정 도구 요약 --- ## 🚀 당신의 JavaScript 의사결정 마스터리 타임라인 ### ⚡ 다음 5분 동안 할 수 있는 것들 - [ ] 브라우저 콘솔에서 비교 연산자 연습하기 - [ ] 나이를 확인하는 간단한 if-else 문 작성하기 - [ ] 삼항 연산자를 사용해 if-else 문을 다시 작성하는 도전 과제 시도하기 - [ ] 다양한 "참 같은"과 "거짓 같은" 값들이 어떻게 동작하는지 테스트하기 ### 🎯 이번 시간 동안 이룰 수 있는 목표 - [ ] 수업 후 퀴즈 완료하고 헷갈리는 개념 복습하기 - [ ] GitHub Copilot 챌린지의 종합 점수 계산기 만들기 - [ ] 실제 상황(예: 입을 옷 선택)에 맞는 간단한 결정 트리 만들기 - [ ] 논리 연산자를 사용해 여러 조건 결합 연습하기 - [ ] 다양한 용도에 맞춘 switch 문 실험하기 ### 📅 이번 주 논리 마스터링 계획 - [ ] 창의적인 예제와 함께 연산자 과제 완료하기 - [ ] 다양한 조건문 구조를 활용한 미니 퀴즈 애플리케이션 만들기 - [ ] 여러 입력 조건을 검사하는 폼 검증기 만들기 - [ ] Josh Comeau의 연산자 조회 연습문제 풀기 - [ ] 기존 코드를 더 적절한 조건문 구조로 리팩토링하기 - [ ] 단락 평가(short-circuit evaluation) 및 성능 영향 연구하기 ### 🌟 한 달간의 변화 계획 - [ ] 복잡한 중첩 조건을 마스터하고 코드 가독성 유지하기 - [ ] 정교한 의사결정 로직을 가진 애플리케이션 만들기 - [ ] 오픈 소스 프로젝트에 조건문 로직 개선으로 기여하기 - [ ] 다양한 조건문 구조와 사용 시기에 대해 다른 사람에게 가르치기 - [ ] 조건문 로직의 함수형 프로그래밍 접근법 탐구하기 - [ ] 조건문 관련 개인 참고 가이드 만들기 ### 🏆 최종 의사결정 챔피언 점검 논리적 사고력 마스터를 축하하며: - 지금까지 성공적으로 구현한 가장 복잡한 의사결정 로직은 무엇인가요? - 가장 자연스럽게 느껴지는 조건문 구조와 그 이유는 무엇인가요? - 논리 연산자에 대해 배우면서 문제 해결 방식이 어떻게 바뀌었나요? - 어떤 실제 애플리케이션이 정교한 의사결정 로직을 필요로 할까요? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원래 문서의 원어본이 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 본 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 기본: 배열과 반복문

## 강의 전 퀴즈 강의 전 퀴즈 웹사이트가 어떻게 쇼핑 카트 아이템을 추적하거나 친구 목록을 표시하는지 궁금한 적 있나요? 바로 배열과 반복문의 역할입니다. 배열은 여러 정보를 담는 디지털 컨테이너 같고, 반복문은 반복적인 코드를 작성하지 않고도 그 데이터를 효율적으로 다루도록 도와줍니다. 이 두 개념은 프로그램에서 정보를 처리하는 기초를 형성합니다. 하나하나 수동으로 작성하는 대신 수백, 수천 개의 항목을 빠르게 처리하는 똑똑하고 효율적인 코드를 만드는 방법을 배우게 될 것입니다. 이 강의를 마치면 몇 줄의 코드로도 복잡한 데이터 작업을 완성할 수 있다는 것을 이해하게 됩니다. 이 필수 프로그래밍 개념들을 함께 탐구해봅시다. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## 배열 배열은 디지털 서랍장 같다고 생각하세요 - 각 서랍에 한 문서가 아니라, 여러 관련 항목을 하나의 구조화된 컨테이너에 정리하는 것입니다. 프로그래밍 용어로 배열은 여러 정보를 하나의 조직화된 패키지로 저장할 수 있게 합니다. 사진 갤러리, 할 일 목록 관리, 게임의 최고 점수 추적 등 무엇을 하든 배열은 데이터 정리의 토대가 됩니다. 어떻게 동작하는지 살펴봅시다. ✅ 배열은 우리 주변에 널려 있습니다! 태양광 패널 배열 같은 실제 배열 사례를 생각해보세요. ### 배열 만들기 배열을 만드는 것은 아주 쉽습니다 - 대괄호를 사용하세요! 무슨 일이 일어났나요? 대괄호 []를 사용해 빈 컨테이너를 만들었습니다. 마치 빈 도서관 책장이 새 책들을 담기 위해 준비된 것과 같습니다. 배열을 처음부터 초기 값으로 채울 수도 있습니다: 주목할 점: - 텍스트, 숫자, 혹은 true/false 값도 같은 배열에 저장 가능 - 항목 간에는 쉼표로 구분하면 됩니다 - 간단하죠! - 배열은 관련 정보를 함께 보관하기에 완벽합니다 ### 배열 인덱스 처음에는 이상하게 느껴질 수 있지만, 배열은 항목 번호를 0부터 시작합니다. 이 0부터 시작하는 인덱싱은 컴퓨터 메모리 작동 방식에서 유래했으며, C와 같은 초기 프로그래밍 언어부터 내려온 관례입니다. 배열의 각 위치는 인덱스라는 고유 번호를 갖습니다. ✅ 배열이 0부터 시작하는 것이 놀랍나요? 일부 프로그래밍 언어에서는 인덱스가 1부터 시작하기도 합니다. 이와 관련된 흥미로운 역사를 위키피디아에서 읽어볼 수 있습니다. 배열 요소 접근하기: 무슨 일이 일어나는지 분석해봅시다: - 대괄호 표기법과 인덱스 번호를 사용해 요소에 접근 - 해당 위치에 저장된 값을 반환 - 0부터 세기 시작해서 첫 번째 요소 인덱스는 0 배열 요소 수정하기: 위 코드에서 한 일: - 인덱스 4의 요소를 "Rocky Road"에서 "Butter Pecan"으로 수정 - 인덱스 5에 새 요소 "Cookie Dough"를 추가 - 현재 크기보다 넘어가는 인덱스를 추가하면 배열 크기 자동 확장 ### 배열 길이와 주요 메서드 배열에는 데이터를 다루기 쉬운 내장 속성과 메서드가 있습니다. 배열 길이 찾기: 중요 포인트: - 배열 안의 총 요소 수를 반환 - 요소가 추가/삭제될 때 자동으로 업데이트 - 반복문과 검증에 유용한 동적 개수 제공 핵심 배열 메서드: 다음 메서드를 기억하세요: - push()(끝에 추가), unshift()(처음에 추가)로 요소를 추가 - pop()(끝에서 제거), shift()(처음에서 제거)로 요소를 삭제 - indexOf()로 요소 위치를 찾고, includes()로 존재 여부 확인 - 제거된 요소나 위치 인덱스 같은 유용한 값을 반환 ✅ 직접 해보세요! 브라우저 콘솔에서 직접 배열을 만들고 조작해보세요. ### 🧠 배열 기본 확인: 데이터 정리 배열 이해도 테스트: - 왜 배열은 1이 아닌 0부터 세기 시작할까요? - 존재하지 않는 인덱스에 접근하면 어떻게 될까요? (예: 5개 요소 배열에서 arr[100]) - 배열이 유용할 세 가지 실생활 사례를 생각해보세요. ## 반복문 찰스 디킨스 소설에 나오는 학생들이 판자에 줄을 계속 쓰는 처벌을 생각해 보세요. 만약 "이 문장을 100번 써라"고 한 번만 지시하면 자동으로 되는 상황을 상상해보세요. 바로 그것이 반복문이 코드에서 하는 일입니다. 반복문은 피곤함 없이 반복 작업을 수행하는 무한한 조수와 같습니다. 쇼핑 카트의 모든 아이템을 확인하거나 앨범의 모든 사진을 표시할 때, 반복문은 효율적으로 반복 작업을 처리합니다. JavaScript는 여러 종류의 반복문을 제공합니다. 각각을 살펴보고 언제 사용하는지 이해해봅시다. ### For 반복문 for 반복문은 타이머를 설정하는 것과 같습니다 - 몇 번 반복할지 정확히 알고 있습니다. 매우 체계적이고 예측 가능해서 배열 작업이나 개수 세기에 완벽합니다. For 반복문 구조: 단계별 설명: - 카운터 변수 i를 0으로 초기화 - 반복마다 조건 i < 10을 검사 - 조건이 참이면 코드 블록을 실행 - 각 반복 후 i를 i++로 1씩 증가 - 조건이 거짓이 되면 (i가 10에 도달 시) 중지 ✅ 이 코드를 브라우저 콘솔에서 실행해보세요. 카운터, 조건, 반복식을 바꾸면 어떤 일이 일어날까요? 역순으로 실행해 카운트다운을 만들 수도 있나요? ### 🗓️ For 반복문 숙련도 체크: 통제된 반복 For 반복문 이해도 평가: - For 반복문 세 부분과 각각의 역할은 무엇인가요? - 배열을 거꾸로 반복하려면 어떻게 하나요? - 증가 부분(i++)을 빼면 무슨 일이 일어나나요? ### While 반복문 while 반복문은 "조건이 참인 동안 계속"합니다 - 정확히 몇 번 실행될지 모를 수 있지만 언제 멈출지는 압니다. 사용자 입력을 받을 때나 원하는 데이터를 찾을 때까지 탐색할 때 적합합니다. While 반복문 특성: - 조건이 참인 동안 반복 계속 실행 - 카운터 변수 관리를 직접 수동으로 해야 함 - 각 반복 전에 조건을 검사 - 조건이 거짓이 안 되면 무한 루프가 발생할 수 있음 예제에서 배울 점: - 반복문 내부에서 카운터 i를 직접 관리 - 무한 루프를 막기 위해 카운터를 증가 - 사용자 입력과 시도 제한 등 실제 사용 사례 시연 - 무한 실행 방지를 위한 안전장치 포함 ### ♾️ While 반복문 지혜 점검: 조건 기반 반복 While 반복문 이해력 테스트: - While 반복문 사용 시 가장 큰 위험은 무엇인가요? - 언제 while 반복문을 for 반복문 대신 선택하나요? - 무한 루프를 어떻게 예방할 수 있나요? ### 최신 반복문 대안 JavaScript에는 더 읽기 쉽고 오류가 적은 최신 반복문 문법이 있습니다. For...of 반복문 (ES6+): for...of의 주요 장점: - 인덱스 관리와 off-by-one 오류 제거 - 배열 요소에 직접 접근 가능 - 코드 가독성 향상 및 문법 단순화 forEach 메서드: forEach에 대해 알아야 할 점: - 배열의 각 요소에 대해 함수 실행 - 요소 값과 인덱스를 함수 매개변수로 제공 - 조기 종료 불가능 (전통적 반복문과 다름) - 반환 값은 undefined (새 배열 생성 안 함) ✅ 왜 for 반복문과 while 반복문 중 하나를 선택할까요? StackOverflow에서 17,000명이 같은 질문을 했으며, 몇몇 의견이 흥미로울 수 있습니다. ### 🎨 최신 반복문 문법 점검: ES6+ 수용하기 모던 자바스크립트 이해도 평가: - for...of가 전통적 for 반복문보다 나은 점은 무엇인가요? - 언제 전통 for 반복문을 선호하나요? - forEach와 map의 차이는 무엇인가요? ## 반복문과 배열 배열과 반복문을 결합하면 강력한 데이터 처리 능력을 만들 수 있습니다. 이 조합은 목록 표시부터 통계 계산에 이르기까지 많은 프로그래밍 작업의 기본입니다. 전통적 배열 처리: 각 접근법 살펴보기: - 배열 길이 속성을 사용해 반복 경계를 정함 - 전통적 for 반복문에서는 인덱스로 요소 접근 - for...of에서는 직접 요소에 접근 가능 - 배열 각 요소를 한 번씩 정확히 처리 실용적 데이터 처리 예: 이 코드 동작 원리: - 합계와 극값을 추적할 변수 초기화 - 하나의 효율적 반복문으로 각 점수 처리 - 평균 계산을 위한 총합 누적 - 반복 중 최고, 최저 점수 추적 - 반복 완료 후 통계 계산 ✅ 브라우저 콘솔에서 직접 만든 배열을 대상으로 반복문을 실행해보세요. --- ## GitHub Copilot Agent 챌린지 🚀 에이전트 모드를 사용해 다음 과제를 완료하세요: 설명: 배열과 반복문을 결합해 데이터셋을 분석하고 의미 있는 통계 정보를 생성하는 포괄적 데이터 처리 함수를 만드세요. 요구사항: 학생 이름과 점수 속성을 갖는 학생 성적 객체 배열을 인자로 받고, 최고 점수, 최저 점수, 평균 점수, 70점 이상 통과 학생 수, 평균 이상 점수를 받은 학생 이름 배열을 반환하는 analyzeGrades 함수를 작성하세요. 두 가지 이상의 서로 다른 반복문 유형을 사용해야 합니다. agent mode 에 대해 더 알아보세요. ## 🚀 챌린지 JavaScript는 특정 작업에 대해 전통적인 루프를 대체할 수 있는 여러 현대적인 배열 메서드를 제공합니다. forEach, for-of, map, filter, 및 reduce를 탐색해보세요. 당신의 도전 과제: 학생 성적 예제를 세 가지 이상의 서로 다른 배열 메서드를 사용하여 리팩토링하세요. 현대적인 JavaScript 문법으로 얼마나 코드가 더 깔끔하고 읽기 쉬워지는지 주목하세요. ## 강의 후 퀴즈 강의 후 퀴즈 ## 복습 및 자기 학습 JavaScript의 배열에는 데이터 조작에 매우 유용한 많은 메서드가 포함되어 있습니다. 이 메서드들에 대해 읽어보고 직접 몇 가지를 사용해보세요 (예: push, pop, slice, splice) 자신이 만든 배열에서. ## 과제 배열 반복하기 --- ## 📊 당신의 배열 및 루프 도구 요약 --- ## 🚀 당신의 배열 및 루프 마스터리 타임라인 ### ⚡ 다음 5분 내에 할 수 있는 것 - [ ] 좋아하는 영화 배열을 만들고 특정 요소에 접근하기 - [ ] 1부터 10까지 세는 for 루프 작성하기 - [ ] 강의에서 다룬 현대 배열 메서드 도전 과제 시도하기 - [ ] 브라우저 콘솔에서 배열 인덱싱 연습하기 ### 🎯 이번 한 시간에 성취할 수 있는 것 - [ ] 강의 후 퀴즈 완성하고 어려운 개념 복습하기 - [ ] GitHub Copilot 도전 과제에서 종합 성적 분석기 만들기 - [ ] 아이템 추가 및 제거가 가능한 간단한 쇼핑 카트 만들기 - [ ] 서로 다른 루프 타입 간 변환 연습하기 - [ ] push, pop, slice, splice 같은 배열 메서드 실험하기 ### 📅 한 주 동안의 데이터 처리 여정 - [ ] 창의적으로 개선한 "배열 반복하기" 과제 완성하기 - [ ] 배열 및 루프를 활용한 할 일 목록 애플리케이션 만들기 - [ ] 수치 데이터를 위한 간단한 통계 계산기 만들기 - [ ] MDN 배열 메서드 연습하기 - [ ] 사진 갤러리 또는 음악 재생목록 인터페이스 만들기 - [ ] map, filter, reduce와 함께 함수형 프로그래밍 탐색하기 ### 🌟 한 달 동안의 변화 - [ ] 고급 배열 작업 및 성능 최적화 마스터하기 - [ ] 완전한 데이터 시각화 대시보드 구축하기 - [ ] 데이터 처리 관련 오픈 소스 프로젝트에 기여하기 - [ ] 실용적인 예제와 함께 다른 사람에게 배열 및 루프 가르치기 - [ ] 재사용 가능한 데이터 처리 함수 개인 라이브러리 만들기 - [ ] 배열을 기반으로 한 알고리즘 및 데이터 구조 탐구하기 ### 🏆 최종 데이터 처리 챔피언 점검 당신의 배열 및 루프 마스터리를 축하합니다: - 실제 애플리케이션에 가장 유용한 배열 작업은 무엇이었나요? - 어떤 루프 타입이 가장 자연스러운지, 그 이유는 무엇인가요? - 배열과 루프를 이해하면서 데이터 구성 방식에 어떤 변화가 있었나요? - 다음에 도전하고 싶은 복잡한 데이터 처리 작업은 무엇인가요? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나, 자동 번역에는 오류나 부정확한 부분이 있을 수 있음을 양지해 주시기 바랍니다. 원문은 해당 언어의 원본 문서가 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Įvadas į JavaScript

JavaScript yra interneto kalba. Šiose keturiose pamokose išmoksite jos pagrindus. ### Temos 1. Kintamieji ir duomenų tipai 2. Funkcijos ir metodai 3. Sprendimų priėmimas naudojant JavaScript 4. Masyvai ir ciklai ### Kreditas Šias pamokas su ♥️ parašė Jasmine Greenaway, Christopher Harrison ir Chris Noring --- Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo.

javascript

JavaScript pagrindai: duomenų tipai

Duomenų tipai yra vienas iš pagrindinių JavaScript konceptų, su kuriais susidursite rašydami kiekvieną programą. Galvokite apie duomenų tipus kaip apie archyvo sistemą, kurią naudojo senovės Aleksandrijos bibliotekininkai – jie turėjo atskiras vietas pergamentams, kuriuose buvo poezija, matematika ir istoriniai įrašai. JavaScript organizuoja informaciją panašiai, skirstydama ją į skirtingas kategorijas skirtingų duomenų tipams. Šioje pamokoje nagrinėsime pagrindinius duomenų tipus, kurie leidžia JavaScript veikti. Išmoksite dirbti su skaičiais, tekstu, tiesa/netiesa reikšmėmis ir suprasite, kodėl svarbu pasirinkti tinkamą tipą savo programoms. Šios sąvokos iš pradžių gali atrodyti abstrakčios, bet su praktika jos taps antrąja prigimtimi. Supratimas apie duomenų tipus padarys viską JavaScript daug aiškesnį. Kaip architektai turi suprasti skirtingas statybines medžiagas prieš pradėdami katedros statybą, taip šie pagrindai palaikys viską, ką kursite ateityje. ## Priešpaskaitinė viktorina Priešpaskaitinė viktorina Ši pamoka apima JavaScript pagrindus – kalbą, kuri suteikia interaktyvumą internete. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Kintamieji JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Duomenų tipai JavaScript") Pradėkime nuo kintamųjų ir duomenų tipų, kurie juos užpildo! ## Kintamieji Kintamieji yra pagrindiniai programavimo elementai. Kaip viduramžių alchemikai žymėjo indelius, skirtus skirtingoms medžiagoms laikyti, taip kintamieji leidžia saugoti informaciją ir suteikti jai aprašomą pavadinimą, kad galėtumėte ją naudoti vėliau. Reikia prisiminti kieno nors amžių? Laikykite jį kintamajame pavadinimu age. Norite sekti vartotojo vardą? Laikykite jį kintamajame pavadinimu userName. Mes sutelksime dėmesį į modernų būdą kurti kintamuosius JavaScript. Čia išmoktos technikos atsirado po daug metų kalbos evoliucijos ir geriausių praktikų, sukurtų programavimo bendruomenės. Kintamojo kūrimas ir deklaravimas turi šią sintaksę: [raktažodis] [vardas]. Tai sudaryta iš dviejų dalių: - Raktažodis. Naudokite let kintamiesiems, kurie gali keistis, arba const reikšmėms, kurios lieka nepakitusios. - Kintamojo pavadinimas, tai aprašomas vardas, kurį pasirenkate patys. ✅ Raktažodis let buvo įvestas ES6 ir suteikia jūsų kintamajam vadinamąją _blokinio lygio apimtį_. Rekomenduojama naudoti let arba const vietoje senojo raktažodžio var. Blokinių apimčių nagrinėjimą aptarsime detaliau vėlesniuose skyriuose. ### Užduotis – darbas su kintamaisiais 1. Deklaruokite kintamąjį. Pradėkime nuo pirmojo kintamojo sukūrimo: ```javascript let myVariable; ``` Ką tai veikia: - JavaScript įsakoma sukurti saugyklą pavadinimu myVariable - JavaScript rezervuoja atminties vietą šiam kintamajam - Kintamasis šiuo metu neturi jokios reikšmės (undefined) 2. Priskirkite reikšmę. Dabar įdėkime kažką į mūsų kintamąjį: ```javascript myVariable = 123; ``` Kaip veikia priskyrimas: - Operatorius = priskiria reikšmę 123 mūsų kintamajam - Kintamasis dabar turi šią reikšmę, o ne undefined - Galite naudoti šią reikšmę visame kode, nurodydami myVariable > Pastaba: šiame pamokoje = reiškia priskyrimo operatorių, kuris naudojamas reikšmės priskyrimui kintamajam. Tai nereiškia lygybės. 3. Padarykite tai protingai. Iš tiesų, sujunkime šiuos du veiksmus: ```javascript let myVariable = 123; ``` Šis metodas yra efektyvesnis: - Deklaruojate kintamąjį ir priskiriate jam reikšmę viename sakinyje - Tai yra įprasta programavimo praktika - Tai sumažina kodo apimtį, išlaikant aiškumą 4. Pakeiskite mintį. O kas, jei norime saugoti kitą skaičių? ```javascript myVariable = 321; ``` Supratimas apie pakartotinį priskyrimą: - Kintamasis dabar saugo 321 vietoje 123 - Ankstesnė vertė pakeičiama – kintamieji saugo tik vieną vertę vienu metu - Šis keičiamumas yra pagrindinė let deklaruotų kintamųjų savybė ✅ Išbandykite! JavaScript galite rašyti tiesiai naršyklėje. Atidarykite naršyklės langą ir pereikite į Kūrėjų įrankius. Konsolėje rasite komandų eilutę; įveskite let myVariable = 123, paspauskite Enter, tada įveskite myVariable. Kas nutiko? Toliau pamokoje sužinosite daugiau apie šias sąvokas. ### 🧠 Kintamųjų meistriškumo patikrinimas: atsipalaiduokite Pažiūrėkime, kaip jaučiatės dėl kintamųjų: - Ar galite paaiškinti skirtumą tarp kintamojo deklaravimo ir priskyrimo? - Kas nutinka, jei bandote naudoti kintamąjį prieš jį deklaruodami? - Kada rinktumėtės let vietoje const kintamajam? ## Konstanta Kartais reikia saugoti informaciją, kuri negali keistis programos vykdymo metu. Galvokite apie konstantas kaip apie matematikos principus, kuriuos Euklidas nustatė senovės Graikijoje – kartą įrodžius ir užfiksavus, jie liko nepakeičiami ateičiai. Konstanta veikia panašiai kaip kintamasis, bet turi svarbią ribą: kai priskiriate reikšmę, jos nebegalima pakeisti. Ši nekintamumas padeda išvengti atsitiktinių reikšmių pakeitimų programoje. Konstanta deklaruojama ir inicializuojama tokiu pačiu principu kaip ir kintamasis, tik vietoje let naudojamas raktažodis const. Konstantos dažnai rašomos didžiosiomis raidėmis. Šis kodas daro: - Sukuria konstantą pavadinimu MY_VARIABLE su reikšme 123 - Naudoja didžiųjų raidžių vartojimą konstantoms - Neleidžia ateityje keisti šios reikšmės Konstantoms galioja dvi pagrindinės taisyklės: - Jūs privalote iškart priskirti reikšmę – tuščios konstantos nėra leidžiamos! - Negalima keisti priskirtos reikšmės – jei bandysite, JavaScript parodys klaidą. Pažiūrėkime, ką tai reiškia: Paprasta reikšmė - Čia NEGALIMA: ```javascript const PI = 3; PI = 4; // neleidžiama ``` Reikia prisiminti: - Bandymas priskirti konstantai kitą reikšmę sukels klaidą - Apsaugo svarbias reikšmes nuo netyčinių pakeitimų - Užtikrina, kad reikšmė visada išliktų pastovi programoje Objekto nuoroda yra apsaugota - Čia NEGALIMA: ```javascript const obj = { a: 3 }; obj = { b: 5 } // neleidžiama ``` Suprantant šias sąvokas: - Neleidžia viso objekto pakeisti nauju - Apsaugo nuorodą į originalų objektą - Išlaiko objekto tapatumą atmintyje Objekto reikšmė nėra apsaugota - Čia LEIDŽIAMA: ```javascript const obj = { a: 3 }; obj.a = 5; // leidžiama ``` Kas čia vyksta: - Keičia savybę objekte - Išlaiko tą pačią nuorodą į objektą - Parodo, kad objekto turinys gali keistis, nors nuoroda lieka pastovi > Pastaba, const reiškia, jog nuoroda yra apsaugota nuo priskyrimo. Tačiau pati reikšmė nėra _nekintama_ ir gali keistis, ypač jei tai sudėtingas objektas. ## Duomenų tipai JavaScript organizuoja informaciją į skirtingas kategorijas, vadinamas duomenų tipais. Ši sąvoka primena, kaip senovės mokytojai skirstė žinias – Aristotelis skyrė skirtingus mąstymo tipus, žinodamas, kad loginiai principai netaikomi vienodai poezijai, matematikai ir gamtos filosofijai. Duomenų tipai yra svarbūs, nes skirtingos operacijos veikia su skirtingų rūšių informacija. Kaip negalite atlikti aritmetinių veiksmų su žmogaus vardu arba rūšiuoti matematinės lygties, taip JavaScript reikalauja tinkamo duomenų tipo kiekvienai operacijai. Tai leidžia išvengti klaidų ir padaryti jūsų kodą patikimesnį. Kintamieji gali saugoti daug skirtingų tipų reikšmių, pavyzdžiui, skaičius ir tekstą. Šie skirtingi reikšmių tipai vadinami duomenų tipu. Duomenų tipai yra svarbi programinės įrangos kūrimo dalis, nes padeda programuotojams nuspręsti, kaip rašyti kodą ir kaip programa turėtų veikti. Be to, kai kurie duomenų tipai turi unikalių savybių, kurios leidžia transformuoti arba išgauti papildomą informaciją iš reikšmės. ✅ Duomenų tipai taip pat vadinami JavaScript pirminiais duomenų tipais, nes jie yra žemiausio lygio duomenų tipai, kuriuos pateikia kalba. Yra 7 pirminiai tipai: string, number, bigint, boolean, undefined, null ir symbol. Skirkite minutę vizualizuoti, ką kiekvienas iš šių tipų gali reikšti. Kas yra zebra? O 0? true? ### Skaičiai Skaičiai yra paprasčiausias duomenų tipas JavaScript. Nesvarbu, ar dirbate su sveikaisiais skaičiais, pavyzdžiui, 42, trupmeniniais, pavyzdžiui, 3.14, ar neigiamais skaičiais, pavyzdžiui, -5, JavaScript tvarko juos vienodai. Prisiminkite mūsų ankstesnį kintamąjį? Tas 123, kurį ten saugojome, buvo skaičiaus duomenų tipas: Pagrindinės savybės: - JavaScript automatiškai atpažįsta skaitines reikšmes - Galite atlikti matematikos operacijas su šiais kintamaisiais - Nereikia aiškiai deklaruoti tipo Kintamieji gali saugoti visų tipų skaičius, įskaitant trupmeninius ar neigiamus. Skaičiai taip pat gali būti naudojami su aritmetiniais operatoriais, aptariami kitame skyriuje. ### Aritmetiniai operatoriai Aritmetiniai operatoriai leidžia atlikti matematikos skaičiavimus JavaScript. Šie operatoriai veikia pagal tuos pačius principus, kuriuos matematikai naudojo amžius – tos pačios simbolikos, kuri pasirodė tokių mokslininkų kaip Al-Chvazimis, sukūrusio algebrai naudojamą notaciją, darbuose. Operatoriai veikia taip, kaip tikitės iš tradicinės matematikos: pliusas sudėčiai, minusas atimčiai ir t.t. Yra kelių tipų operatoriai, kurie naudojami aritmetinėse funkcijose, keletas jų pateikiami žemiau: ✅ Išbandykite! Pabandykite atlikti aritmetinę operaciją naršyklės konsolėje. Ar rezultatai jus nustebino? ### 🧮 Matematikos įgūdžių patikrinimas: skaičiavimai be baimės Patikrinkite savo aritmetikos supratimą: - Kuo skiriasi / (dalyba) ir % (liekana)? - Ar galite nuspėti, kiek yra 10 % 3? (Užuomina: tai nėra 3.33...) - Kam gali būti naudingas liekanos operatorius programavime? ### Tekstai (String) JavaScript tekstiniai duomenys vaizduojami kaip stringai. Žodis "string" kilo iš sąvokos apie simbolių eilę, panašiai kaip viduramžių vienuoliai rašydavo raides, sudarydami žodžius ir sakinius savo rankraščiuose. Stringai yra esminiai žiniatinklio kūrimui. Kiekvienas tekstas tinklalapyje – vartotojo vardai, mygtukų pavadinimai, klaidų pranešimai, turinys – yra tvarkomas kaip tekstinis duomenų tipas. Supratimas apie stringus būtinas kuriant funkcionalias vartotojo sąsajas. Stringai yra simbolių rinkiniai, esantys tarp viengubų arba dvigubų kabučių. Supratimas apie šias sąvokas: - Naudoja viengubas ' arba dvigubas " kabutes stringams apibrėžti - Saugo tekstinius duomenis, kurie gali apimti raides, skaičius ir simbolius - Priskiria stringo reikšmes kintamiesiems vėlesniam naudojimui - Reikalauja kabučių, kad atskirtų tekstą nuo kintamųjų vardų Atminkite, kad rašant stringą reikalingos kabutės, kitaip JavaScript laiko tai kintamojo vardu. ### Stringų formatavimas Stringų manipuliacija leidžia sujungti tekstinius elementus, įterpti kintamuosius ir kurti dinaminį turinį, kuris reaguoja į programos būseną. Ši technika leidžia programiškai kurti tekstą. Dažnai reikia sujungti kelis stringus – šis procesas vadinamas sujungimu (konkatenacija). Norėdami sujungti du ar daugiau tekstų, arba juos sudėti kartu, naudokite + operatorių. Žingsnis po žingsnio, štai kas vyksta: - Sujungia kelis tekstus naudodamas + operatorių - Jungia tekstus tiesiogiai be tarpų pirmajame pavyzdyje - Įterpia tarpų simbolius " " tarp tekstų dėl skaitomumo - Įterpia skyrybos ženklus, tokius kaip kableliai, tinkamam formatavimui ✅ Kodėl JavaScript 1 + 1 = 2, bet '1' + '1' = 11? Pagalvokite. O kaip '1' + 1? Šabloniniai tekstai yra dar vienas būdas formatuoti tekstus, tik vietoje kabučių naudojamas atgalinis apostrofas. Viskas, kas nėra paprastas tekstas, turi būti dedama į vietas su ${ }. Tai apima ir kintamuosius, kurie gali būti tekstai. Supraskime kiekvieną dalį: - Naudoja atgalinius apostrofus ` `` vietoje įprastų kabučių šabloniniams tekstams kurti - Įterpia kintamuosius tiesiogiai naudodamas ${} vietų sintaksę - Išlaiko tarpų ir formatavimo tiksliai kaip parašyta - Suteikia švaresnį būdą kurti sudėtingus tekstus su kintamaisiais Galite pasiekti savo formatavimo tikslus bet kuriuo būdu, tačiau šabloniniai tekstai gerbia visus tarpus ir eilutės pertraukimus. ✅ Kada naudotumėte šabloninį tekstą, o kada įprastą tekstą? ### 🔤 Teksto meistriškumo patikra: Teksto manipuliavimo pasitikėjimas Įvertinkite savo teksto įgūdžius: - Ar galite paaiškinti, kodėl '1' + '1' lygu '11', o ne 2? - Kurią teksto metodiką laikote lengviau skaitoma: sujungimą ar šabloninius tekstus? - Kas nutinka, jei pamiršite kabutes aplink tekstą? ### Būlio tipas (Booleans) Būlio tipas reiškia paprasčiausią duomenų formą: jis gali turėti tik vieną iš dviejų reikšmių – true arba false. Ši dvejetainė logikos sistema kyla iš XIX a. matematiko George'o Boole'o darbų, kuris sukūrė Būlio algebrą. Nors jie paprasti, būliai yra būtini programos logikai. Jie leidžia jūsų kodui priimti sprendimus pagal sąlygas – ar vartotojas prisijungęs, ar mygtukas paspaustas, arba ar tam tikri kriterijai įvykdyti. Būlio tipas gali būti tik viena iš dviejų reikšmių: true arba false. Būliai padeda apsispręsti, kurios kodo eilutės vykdytinos, kai įvykdomos tam tikros sąlygos. Daugeliu atvejų operatoriai padeda nustatyti būlio vertę, ir jūs dažnai pamatysite bei rašysite kintamuosius, kurie yra inicializuojami arba atnaujinami su operatoriais. Aukščiau mes: - Sukūrėme kintamąjį, kuriame saugoma būlio reikšmė true - Parodėme, kaip saugoti būlio reikšmę false - Naudojome tikruosius raktažodžius true ir false (kabutės nereikalingos) - Paruošėme šiuos kintamuosius naudoti sąlyginiuose sakiniuose ✅ Kintamąjį galima laikyti 'tiesos' verte, jei jis įvertinamas kaip būlio true. Įdomu, kad JavaScript visos reikšmės yra pripažįstamos kaip tiesos, nebent apibrėžiamos kaip klaidingos. ### 🎯 Būlio logikos patikra: sprendimų priėmimo įgūdžiai Patikrinkite savo būlio supratimą: - Kodėl, jūsų manymu, JavaScript turi "tiesos" ir "klaidingas" reikšmes, be true ir false? - Ar galite prognozuoti, kuris iš šių yra klaidingas: 0, "0", [], "false"? - Kaip būliai gali būti naudingi programuoto programos eigos valdymui? --- ## 📊 Jūsų duomenų tipų įrankių santrauka ## GitHub Copilot agento iššūkis 🚀 Naudokite Agent režimą, kad įvykdytumėte šį iššūkį: Aprašymas: Sukurkite asmeninio informacijos vadybininką, kuris demonstruoja visas JavaScript duomenų tipus, išmoktas šiame pamokoje, sprendžiant realaus pasaulio duomenų situacijas. Uždavinys: Parašykite JavaScript programą, kuri sukuria vartotojo profilio objektą, turintį: asmens vardą (tekstas), amžių (skaičius), studento statusą (būlio tipas), mėgstamas spalvas kaip masyvą ir adresą kaip objektą su gatvės, miesto ir pašto kodo ypatybėmis. Įtraukite funkcijas profilio informacijos rodymui ir atskirų laukų atnaujinimui. Būtinai parodykite teksto sujungimą, šabloninius tekstus, aritmetines operacijas su amžiumi ir būlio logiką studento statusui. Daugiau sužinokite apie agent režimą čia. ## 🚀 Iššūkis JavaScript turi keletą elgsenų, kurios gali nustebinti programuotojus. Štai klasikinis pavyzdys: įrašykite šį kodą savo naršyklės konsolėje: let age = 1; let Age = 2; age == Age ir stebėkite rezultatą. Jis grąžina false – galite nustatyti kodėl? Tai viena iš daugelio JavaScript savybių, kurią verta suprasti. Pažintis su šiomis keistenybėmis padės rašyti patikimesnį kodą ir veiksmingiau taisyti klaidas. ## Po paskaitos testas Po paskaitos testas ## Peržiūra ir savarankiškas mokymasis Peržiūrėkite JavaScript užduočių sąrašą ir išbandykite vieną. Ką išmokote? ## Namų darbas Duomenų tipų praktika ## 🚀 Jūsų JavaScript duomenų tipų meistriškumo kelio planas ### ⚡ Ką galite padaryti per artimiausias 5 minutes - [ ] Atidaryti naršyklės konsolę ir sukurti 3 kintamuosius su skirtingais duomenų tipais - [ ] Išbandyti iššūkį: let age = 1; let Age = 2; age == Age ir suprasti, kodėl tai klaidinga - [ ] Praktikuoti teksto sujungimą su savo vardu ir mėgstamu skaičiumi - [ ] Išbandyti, kas nutinka, kai prie teksto pridedate skaičių ### 🎯 Ką galite pasiekti šią valandą - [ ] Atlikti po pamokos testą ir peržiūrėti neaiškias temas - [ ] Sukurti mini skaičiuotuvą, kuris sudeda, atima, dauginą ir dalija du skaičius - [ ] Parašyti paprastą vardo formatavimo funkciją naudojant šabloninius tekstus - [ ] Išnagrinėti skirtumus tarp == ir === palyginimo operatorių - [ ] Praktikuoti konvertuoti tarp skirtingų duomenų tipų ### 📅 Jūsų savaitės JavaScript pagrindai - [ ] Atlikti užduotį su pasitikėjimu ir kūrybiškumu - [ ] Sukurti asmeninį profilio objektą naudodami visus išmoktus duomenų tipus - [ ] Praktikuotis su JavaScript užduotimis iš CSS-Tricks - [ ] Parašyti paprastą formos tikrintuvą naudojant būlio logiką - [ ] Eksperimentuoti su masyvų ir objektų duomenų tipais (bus ateinančiuose pamokose) - [ ] Prisijungti prie JavaScript bendruomenės ir užduoti klausimus apie duomenų tipus ### 🌟 Jūsų mėnesio ilgalaikis transformacijos planas - [ ] Integruoti duomenų tipų žinias į didesnius programavimo projektus - [ ] Suprasti, kada ir kodėl naudoti kiekvieną duomenų tipą realiose programose - [ ] Padėti kitiems pradedantiesiems suprasti JavaScript pagrindus - [ ] Sukurti mažą programėlę, kuri tvarko įvairių tipų vartotojo duomenis - [ ] Išnagrinėti pažangias duomenų tipų sąvokas, tokias kaip tipo perauga ir griežtas lyginimas - [ ] Prisidėti prie atviro kodo JavaScript projektų tobulinimo dokumentacijoje ### 🧠 Galutinis duomenų tipų meistriškumo patikrinimas Švęskite savo JavaScript pagrindus: - Kuris duomenų tipas jus labiausiai nustebino dėl savo elgesio? - Kaip gerai jaučiatės aiškindami kintamuosius ir konstantas draugui? - Koks įdomiausias dalykas, kurį atradote apie JavaScript tipų sistemą? - Kokią realią programėlę įsivaizduojate kurdami su šiomis pagrindinėmis žiniomis? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors stengiamės užtikrinti tikslumą, prašome atkreipti dėmesį, kad automatizuoti vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas oficialiu šaltiniu. Svarbiai informacijai rekomenduojama kreiptis į profesionalius vertėjus. Mes neatsakome už jokius nesusipratimus ar neteisingus aiškinimus, kylančius dėl šio vertimo naudojimo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript pagrindai: metodai ir funkcijos

## Priešpaskaitinis testas Priešpaskaitinis testas Tas pats kodas kelis kartus yra vienas iš dažniausių programavimo erzinimų. Funkcijos išsprendžia šią problemą leidžiant supakuoti kodą į pakartotinai naudojamus blokus. Pagalvokite apie funkcijas kaip standartizuotas dalis, kurios padarė Henry Ford surinkimo liniją revoliucine – kai sukuri patikimą komponentą, jį gali naudoti bet kur, nereikalaudamas perkurti nuo nulio. Funkcijos leidžia sugrupuoti kodo dalis, kad galėtumėte jas naudoti visame savo programoje. Vietoj to, kad visur kopijuotumėte ir įklijuotumėte tą pačią logiką, galite sukurti funkciją vieną kartą ir ją kviesti, kai reikia. Šis požiūris padeda palaikyti jūsų kodą tvarkingą ir palengvina atnaujinimus. Šiame pamokoje sužinosite, kaip sukurti savo funkcijas, perduoti joms informaciją ir gauti naudingus rezultatus. Išmoksite skirtumą tarp funkcijų ir metodų, susipažinsite su šiuolaikinėmis sintaksės priemonėmis ir pamatysite, kaip funkcijos gali bendradarbiauti su kitomis funkcijomis. Mes apžvelgsime šias sąvokas žingsnis po žingsnio. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metodai ir funkcijos") ## Funkcijos Funkcija yra savarankiškas kodo blokas, atliekantis tam tikrą užduotį. Ji apima logiką, kurią galite vykdyti kada tik reikia. Vietoj to, kad rašytumėte tą patį kodą kelis kartus visoje programoje, galite supakuoti jį į funkciją ir kviesti šią funkciją, kai reikia. Šis požiūris palaiko jūsų kodą švarų ir palengvina atnaujinimus. Pagalvokite, kokia būtų palaikymo kliūtis, jei reikėtų keisti logiką, išmėtytą net 20 skirtingų vietų jūsų kodo bazėje. Labai svarbu funkcijoms suteikti aprašomuosius pavadinimus. Gerai pavadinta funkcija aiškiai perteikia savo paskirtį – kai matote cancelTimer(), iš karto suprantate, ką ji daro, kaip ir aiškiai pažymėtas mygtukas tiksliai nurodo, kas nutiks, kai jį spustelėsite. ## Funkcijos kūrimas ir kvietimas Pažiūrėkime, kaip sukurti funkciją. Sintaksė laikosi nuoseklaus modelio: Išskaidykime tai: - Raktažodis function sako JavaScript „Ei, aš kuriu funkciją!“ - nameOfFunction yra vieta, kur suteikiate funkcijai aprašomą pavadinimą - Skliaustai () – čia galite pridėti parametrų (apie juos kalbėsime netrukus) - Garbanotosios kabutės {} talpina tikrąjį kodą, kuris vykdomas, kai kviečiate funkciją Sukurkime paprastą pasisveikinimo funkciją, kad tai pamatytume praktiškai: Ši funkcija išveda „Hello, world!“ į konsolę. Kai ją apibrėžiate, galite ją naudoti tiek kartų, kiek reikia. Kad paleistumėte (arba „kvietumėte“) funkciją, rašykite jos pavadinimą, po kurio eina skliaustai. JavaScript leidžia apibrėžti funkciją prieš arba po jos kvietimo – JavaScript variklis pasirūpins vykdymo tvarka. Paleidus šią eilutę, bus vykdomas visas kodas jūsų displayGreeting funkcijoje, rodantis „Hello, world!“ naršyklės konsolėje. Šią funkciją galite kviesti kelis kartus. ### 🧠 Funkcijos pagrindų patikra: Pirmųjų funkcijų kūrimas Pažiūrėkime, kaip jaučiatės dėl pagrindinių funkcijų: - Kodėl funkcijos apibrėžime naudojamos garbanotosios kabutės {}? - Kas nutinka, jei parašote displayGreeting be skliaustų? - Kodėl norėtumėte tą pačią funkciją kviesti kelis kartus? ### Geriausios funkcijų rašymo praktikos Štai kelios gairės, padedančios kurti puikias funkcijas: - Suteikite funkcijoms aiškius, aprašomuosius pavadinimus – ateities jūs jums padėkos! - Naudokite camelCase kelių žodžių pavadinimams (pvz., calculateTotal vietoje calculate_total) - Laikykite kiekvieną funkciją vienoje užduotyje ir atlikite ją gerai ## Informacijos perdavimas funkcijai Mūsų funkcija displayGreeting yra ribota – ji gali rodyti tik „Hello, world!“ visiems. Parametrai leidžia mums padaryti funkcijas lankstesnes ir naudingesnes. Parametrai elgiasi kaip vietos užtvarai, kuriuose galite įstatyti skirtingas vertes kiekvieną kartą naudodami funkciją. Taip ta pati funkcija kiekvieną kartą dirbs su skirtinga informacija. Parametrai išvardijami skliaustuose funkcijos apibrėžime, atskirti kableliais: Kiekvienas parametras elgiasi kaip vietos užtvaras – kai kas nors kviečia jūsų funkciją, jis pateikia tikrąsias vertes, kurios įterpiamos į šias vietas. Pakeiskime mūsų pasisveikinimo funkciją, kad ji priimtų vardą: Atkreipkite dėmesį, kad naudojame kabliataškius (` `) ir ${}` – tokiu būdu vardas yra tiesiogiai įterpiamas į mūsų žinutę – tai vadinama šablonine eilute (template literal) ir yra labai patogi eilutės kūrimo su kintamaisiais technika. Dabar, kai kviesime funkciją, galime perduoti bet kokį vardą: JavaScript paima eilutę 'Christopher', priskiria ją parametrui name ir sukuria suasmenintą žinutę „Hello, Christopher!“ ## Numatytoji reikšmė O kas, jei norime, kad kai kurie parametrai būtų neprivalomi? Štai čia praverčia numatytosios reikšmės! Tarkime, norime, kad žmonės galėtų pritaikyti pasisveikinimo žodį, bet jei jo nenurodys, naudokime „Hello“ kaip atsarginę vertę. Galite nustatyti numatytąsias reikšmes naudodami lygybės ženklą, kaip kintamajam: Čia name dar vis reikalingas, tačiau salutation turi atsarginę vertę 'Hello', jei niekas nepateikia kito pasisveikinimo žodžio. Dabar galime iškviesti funkciją dviem būdais: Pirmuoju atveju JavaScript naudoja numatytąjį „Hello“, nes nenurodėme pasisveikinimo žodžio. Antruoju atveju jis naudoja mūsų pasirinktą „Hi“. Šis lankstumas leidžia funkcijoms prisitaikyti prie skirtingų situacijų. ### 🎛️ Parametrų įvaldymo patikra: funkcijų lankstumas Patikrinkite savąjį parametrų supratimą: - Kuo skiriasi parametras ir argumentas? - Kodėl numatytosios reikšmės svarbios realiame programavime? - Ar galite numatyti, kas nutiks, jei perduosite daugiau argumentų nei parametrų? ## Grąžinamosios reikšmės Mūsų funkcijos iki šiol tik spausdino pranešimus į konsolę, bet ką daryti, jei norite, kad funkcija apskaičiuotų kažką ir grąžintų rezultatą? Čia praverčia grąžinamosios reikšmės. Vietoj to, kad tiesiog kažką rodytų, funkcija gali grąžinti reikšmę, kurią galite priskirti kintamajam arba naudoti kitose kodo vietose. Norėdami grąžinti reikšmę, naudokite raktažodį return ir po jo parašykite, ką norite grąžinti: Svarbu žinoti: kai funkcija pasiekia return sakinį, ji iš karto sustoja ir grąžina tą reikšmę tam, kuris ją pašaukė. Pakeiskime mūsų pasisveikinimo funkciją, kad ji grąžintų žinutę, o ne spausdintų ją: Dabar, vietoj to, kad atspausdintų pasisveikinimą, ši funkcija sukuria žinutę ir perduoda ją mums. Norėdami naudoti grąžintą reikšmę, galite ją priskirti kintamajam, kaip ir bet kokią kitą vertę: Dabar greetingMessage laikys „Hello, Christopher“ ir galime ją naudoti bet kur programoje – parodyti tinklalapyje, įtraukti el. laiške ar perduoti kitai funkcijai. ### 🔄 Grąžinamųjų reikšmių patikra: gavimas atgal Įvertinkite supratimą apie grąžinamas reikšmes: - Kas nutinka kodui po return sakinio funkcijoje? - Kodėl grąžinti reikšmes dažnai yra geriau nei tiesiog atspausdinti konsolėje? - Ar funkcija gali grąžinti skirtingų tipų reikšmes (eilutę, skaičių, loginę reikšmę)? ## Funkcijos kaip parametrų perdavimas funkcijoms Funkcijos gali būti perduodamos kaip parametrai kitoms funkcijoms. Nors ši sąvoka iš pradžių gali pasirodyti sudėtinga, tai galinga funkcija, leidžianti kurti lankstų programavimo stilių. Šis modelis labai dažnas, kai norima pasakyti „kai kas nors įvyksta, padaryk šį kitą dalyką“. Pavyzdžiui, „kai laikmatis pasibaigia, paleisk šį kodą“ arba „kai vartotojas spaudžia mygtuką, iškviesk šią funkciją“. Pažiūrėkime į setTimeout, kuri yra integruota funkcija, kuri laukia tam tikrą laiką ir tada vykdo kodą. Turime pasakyti, ką vykdyti – puikus atvejis perduoti funkciją! Išbandykite šį kodą – po 3 sekundžių pamatysite pranešimą: Atkreipkite dėmesį, kaip perduodame displayDone (be skliaustų) į setTimeout. Mes patys nekviečiame funkcijos – perduodame ją setTimeout ir sakome „iškviesk tai po 3 sekundžių“. ### Anoniminės funkcijos Kartais jums reikia funkcijos tik vienai užduočiai ir nenorite suteikti jai pavadinimo. Pagalvokite – jei naudosite funkciją tik vieną kartą, kam apkrauti kodą papildomu vardu? JavaScript leidžia kurti anoniminias funkcijas – funkcijas be pavadinimo, kurias galite apibrėžti tiesiai ten, kur jų reikia. Štai kaip galime perrašyti mūsų laikmačio pavyzdį naudodami anoniminę funkciją: Tai pasiekia tą patį rezultatą, bet funkcija yra apibrėžta tiesiai setTimeout kvietime, nereikia atskiro deklaravimo. ### Trumpųjų rodyklių (fat arrow) funkcijos Šiuolaikinis JavaScript turi dar trumpesnį būdą rašyti funkcijas, vadinamas rodyklinėmis funkcijomis (arrow functions). Jos naudoja => (atrodo kaip rodyklė – supratote?) ir yra labai populiarios tarp programuotojų. Rodyklinės funkcijos leidžia praleisti raktažodį function ir rašyti trumpesnį kodą. Štai mūsų laikmačio pavyzdys naudojant rodyklinę funkciją: Skliaustai () – tai vieta, kur būtų parametrai (šiuo atveju tušti), po jų eina rodyklė =>, o po jos – funkcijos turinys garbanotose kabutėse. Tai suteikia tą pačią funkcionalumą su trumpesne sintakse. ### Kada naudoti kurią strategiją Kada verta rinktis kurią? Praktinė taisyklė: jeigu funkciją naudositės kelis kartus, suteikite jai pavadinimą ir apibrėžkite atskirai. Jeigu funkcija skirta vienai specifinei užduočiai, apsvarstykite anoniminę funkciją. Abu – tiek rodyklinės, tiek tradicinės funkcijos – yra tinkamos, nors rodyklinės funkcijos vyrauja šiuolaikiniame JavaScript kode. ### 🎨 Funkcijų stiliaus patikra: tinkamos sintaksės pasirinkimas Patikrinkite savo sintaksės supratimą: - Kada galėtumėte rinktis rodyklines funkcijas prieš tradicinę sintaksę? - Koks anoniminių funkcijų pagrindinis privalumas? - Ar galite įsivaizduoti situaciją, kur varduota funkcija būtų geresnė už anoniminę? --- ## 🚀 Iššūkis Ar galite vienu sakiniu apibrėžti skirtumą tarp funkcijų ir metodų? Išbandykite! ## GitHub Copilot agento iššūkis 🚀 Naudokite Agent režimą, kad įvykdytumėte šį iššūkį: Aprašymas: Sukurkite matematikos funkcijų pagalbinę biblioteką, kuri demonstruoja įvairias šiame pamokoje apžvelgtas funkcijų sąvokas, įskaitant parametrus, numatytąsias reikšmes, grąžinamas reikšmes ir rodyklines funkcijas. Užduotis: Sukurkite JavaScript failą mathUtils.js, kuriame būtų šios funkcijos: 1. Funkcija add, kuri priima du parametrus ir grąžina jų sumą 2. Funkcija multiply su numatytosiomis parametrų reikšmėmis (antras parametras numatytas lygiu 1) 3. Rodyklinė funkcija square, kuri priima skaičių ir grąžina jo kvadratą 4. Funkcija calculate, kuri priima kitą funkciją kaip parametrą ir du skaičius, tada taiko funkciją tiems skaičiams 5. Demonstracija, kaip kiekviena funkcija kviečiama su tinkamais testiniais atvejais Daugiau apie agentų režimą skaitykite čia. ## Po paskaitos testas Po paskaitos testas ## Peržiūra ir savarankiškas mokymasis Vertėtų pažvelgti šiek tiek giliau apie rodyklines funkcijas, nes jos vis dažniau naudojamos kodų bazėse. Praktikuokite rašyti funkciją ir tada perrašykite ją šia sintakse. ## Namų darbai Žaidžiame su funkcijomis --- ## 🧰 Jūsų JavaScript funkcijų įrankių rinkinio santrauka --- ## 🚀 Jūsų JavaScript funkcijų įvaldymo laiko juosta ### ⚡ Ką galite padaryti per kitą 5 minutes - [ ] Parašyti paprastą funkciją, grąžinančią jūsų mėgstamiausią skaičių - [ ] Sukurti funkciją su dviem parametrais, kuri juos sudeda - [ ] Išbandykite tradicinės funkcijos konvertavimą į rodyklių funkcijų sintaksę - [ ] Praktikuokite užduotį: paaiškinkite skirtumą tarp funkcijų ir metodų ### 🎯 Ką galite pasiekti per šią valandą - [ ] Užbaikite pamokos pabaigos testą ir peržiūrėkite painias sąvokas - [ ] Sukurkite matematikos įrankių biblioteką iš GitHub Copilot iššūkio - [ ] Sukurkite funkciją, kuri naudoja kitą funkciją kaip parametrą - [ ] Praktikuokite rašyti funkcijas su numatytosiomis reikšmėmis - [ ] Eksperimentuokite su šablonų literaliais funkcijų grąžinimo reikšmėse ### 📅 Jūsų savaitės trukmės funkcijų įvaldymas - [ ] Kūrybiškai atlikite užduotį „Smagiai su funkcijomis“ - [ ] Pertvarkykite kai kurį pasikartojantį kodą į pakartotinai naudojamas funkcijas - [ ] Sukurkite mažą skaičiuotuvą naudodami tik funkcijas (be globalių kintamųjų) - [ ] Praktikuokite rodyklių funkcijas su masyvo metodais kaip map() ir filter() - [ ] Sudarykite naudingų funkcijų rinkinį dažnai pasitaikantiems darbams - [ ] Išstudijuokite aukštesnio lygio funkcijas ir funkcinio programavimo koncepcijas ### 🌟 Jūsų mėnesio trukmės transformacija - [ ] Įvaldykite pažangias funkcijų sąvokas kaip uždarymus ir apimtį - [ ] Sukurkite projektą, kuris daugiausia remiasi funkcijų sudėtimi - [ ] Prisidėkite prie atviro kodo gerindami funkcijų dokumentaciją - [ ] Mokykite kitus apie funkcijas ir skirtingus sintaksės stilius - [ ] Tyrinėkite funkcinio programavimo paradigmas JavaScripte - [ ] Sukurkite asmeninę pakartotinai naudojamų funkcijų biblioteką būsimiesiems projektams ### 🏆 Galutinis funkcijų čempiono patikrinimas Švęskite savo funkcijų įvaldymą: - Kokia naudingiausia funkcija, kurią iki šiol sukūrėte? - Kaip funkcijų mokymasis pakeitė jūsų požiūrį į kodo organizavimą? - Kuria funkcijų sintakse teikiate pirmenybę ir kodėl? - Kokią realaus pasaulio problemą išspręstumėte rašydami funkciją? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors mes siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojamas profesionalus vertimas žmogaus. Mes neatsakome už klaidingą supratimą ar neteisingą interpretaciją, kilusią dėl šio vertimo naudojimo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript pagrindai: sprendimų priėmimas

Ar kada nors susimąstėte, kaip programos priima protingus sprendimus? Pavyzdžiui, kaip navigacijos sistema pasirenka greičiausią maršrutą arba kaip termostatas nusprendžia, kada įjungti šildymą? Tai yra pagrindinė sprendimų priėmimo programavime sąvoka. Kaip Charlesas Babbage'as savo Analitinį variklį sukūrė taip, kad jis vykdytų skirtingas veiksmų sekas pagal sąlygas, taip ir šiuolaikinės JavaScript programos turi priimti sprendimus pagal įvairias aplinkybes. Ši gebėjimas šakotis ir priimti sprendimus yra tai, kas paverčia statinį kodą į jautrias, protingas programas. Šiame pamokoje išmoksite, kaip įgyvendinti sąlyginę logiką savo programose. Tyrinėsime sąlygines sakinius, palyginimo operatorius ir loginės išraiškas, kurios leidžia jūsų kodui įvertinti situacijas ir tinkamai sureaguoti. ## Priešpamokos testas Priešpamokos testas Gebėjimas priimti sprendimus ir valdyti programos srautą yra esminė programavimo dalis. Šioje dalyje aptariama, kaip valdyti savo JavaScript programų vykdymo kelią naudojant Boolean reikšmes ir sąlyginę logiką. [](https://youtube.com/watch?v=SxTp8j-fMMY "Sprendimų priėmimas") ## Trumpas Boole'io reikšmių prisiminimas Prieš gilindamiesi į sprendimų priėmimą, prisiminkime Boolean reikšmes iš ankstesnės pamokos. Jos pavadintos matematikos George'o Boole'o garbei ir reiškia dvejopą būseną – arba true, arba false. Nėra jokios neapibrėžtumo, jokios vidurinės būsenos. Šios dvejopos reikšmės sudaro visos kompiuterinės logikos pagrindą. Kiekvienas sprendimas, kurį priima jūsų programa, galiausiai sumažėja iki Boolean įvertinimo. Boolean kintamųjų kūrimas yra paprastas: Tai sukuria du kintamuosius su aiškiomis Boolean reikšmėmis. ✅ Boolean vardai kilę nuo anglų matematikos, filosofijos ir logikos mokslininko George'o Boole'o (1815–1864). ## Palyginimo operatoriai ir Boolean Praktikoje retai kada Boolean reikšmės nustatomos rankiniu būdu. Vietoje to, jos generuojamos vertinant sąlygas: „Ar šis skaičius didesnis už tą?“ arba „Ar šios reikšmės lygios?“ Palyginimo operatoriai leidžia šias vertinimo operacijas atlikti. Jie palygina reikšmes ir grąžina Boolean rezultatus pagal operandų santykį. ✅ Patikrinkite savo žinias rašydami palyginimus naršyklės konsolėje. Ar kuris nors rezultatas jus nustebino? ### 🧠 Palyginimo gebėjimų patikra: Boolean logikos supratimas Išbandykite savo palyginimo supratimą: - Kodėl manote, kad === (griežtas lygybės tikrinimas) dažniausiai yra pageidautinas prieš == (laisvą lygybės tikrinimą)? - Ar galite nuspėti, ką grąžins 5 === '5'? O kaip 5 == '5'? - Kuo skiriasi !== ir !=? ## If sakinys if sakinys yra tarsi klausimas jūsų kode. „Jei ši sąlyga tiesa, tada atlik tai.“ Tai tikriausiai svarbiausias įrankis sprendimams priimti JavaScripte. Štai kaip tai veikia: Sąlyga įrašoma tarp skliaustų, ir jei ji yra true, JavaScript vykdo kodą viduje garbanotųjų skliaustų. Jei ji yra false, JavaScript praleidžia tą visą bloką. Dažnai naudojate palyginimo operatorius, kad sukurtumėte šias sąlygas. Pažiūrėkime praktinį pavyzdį: Kadangi 1000 >= 800 įvertinama kaip true, kodas bloko viduje vykdomas ir konsolėje atsiranda pranešimas „Getting a new laptop!“. ## If..Else sakinys Bet kas jei norite, kad programa atliktų kažką kito, kai sąlyga yra netiesa? Čia praverčia else – lyg atsarginis planas. else sakinys leidžia pasakyti „jei ši sąlyga nėra tiesa, tada daryk ką nors kitą.“ Kadangi 500 >= 800 yra false, JavaScript praleidžia pirmąjį bloką ir vykdo else bloką. Konsolėje matysite „Can't afford a new laptop, yet!“. ✅ Išbandykite šį ir toliau pateiktą kodą naršyklės konsolėje. Pakeiskite kintamųjų currentMoney ir laptopPrice reikšmes, kad pakeistumėte console.log() išvestį. ### 🎯 If-Else logikos patikra: Šakoti keliai Įvertinkite sąlyginės logikos supratimą: - Kas nutiks, jei currentMoney tiksliai lygus laptopPrice? - Ar galite įsivaizduoti realią situaciją, kur if-else logika būtų naudinga? - Kaip galėtumėte išplėsti tai kelioms kainų riboms apdoroti? ## Switch sakinys Kartais reikia palyginti vieną reikšmę su keliomis galimybėmis. Nors galėtumėte naudoti keletą sujungtų if..else sakinių, toks požiūris tampa nepatogus. switch sakinys suteikia tvarkingesnę struktūrą kelių atskirų reikšmių apdorojimui. Ši sąvoka primena mechaninius jungiklius, naudojamus ankstyvuosiuose telefonų centruose – viena įvesties reikšmė nulemia, kurį konkretų kelią vykdymas pasirinks. Štai kaip jis struktūruojamas: - JavaScript įvertina išraišką vieną kartą - Ieško kiekvieno case, kad rastų atitikimą - Radęs atitikimą, vykdo tą kodo bloką - break nurodo JavaScript sustoti ir išeiti iš switch - Jei jokie case neatitinka, vykdo default bloką (jei jis yra) Šiame pavyzdyje JavaScript mato, kad dayNumber yra 2, randa atitinkantį case 2, priskiria dayName reikšmę „Tuesday“ ir išeina iš switch. Rezultatas? Konsolėje atsiranda „Today is Tuesday“. ✅ Išbandykite šį ir tolesnį kodą naršyklės konsolėje. Pakeiskite kintamojo a reikšmę, kad pakeistumėte console.log() išvestį. ### 🔄 Switch sakinio meistriškumo patikra: Kelios pasirinktys Testuokite switch supratimą: - Kas nutiks, jei pamiršite break sakinį? - Kada naudotumėte switch vietoje kelių if-else sakinių? - Kodėl default atvejis yra naudingas net jei manote, kad apėmėte visas galimybes? ## Loginiai operatoriai ir Boole'ai Sudėtingi sprendimai dažnai reikalauja vienu metu įvertinti kelias sąlygas. Kaip Boolean algebra leidžia matematikams jungti loginės išraiškas, taip programavimas suteikia loginės operatorius kelioms Boolean sąlygoms sujungti. Šie operatoriai leidžia sudėtingą sąlyginę logiką kurti sujungiant paprastus tiesa/netiesa vertinimus. Šie operatoriai leidžia sujungti sąlygas naudingu būdu: - IR (&&) reiškia, kad abi sąlygos turi būti tiesos - ARBA (||) reiškia, kad bent viena sąlyga turi būti tiesos - NE (!) pakeičia tiesą į netiesą (ir atvirkščiai) ## Sąlygos ir sprendimai su loginiais operatoriais Pažiūrėkime šiuos loginės operacijas praktiškai: Šiame pavyzdyje: apskaičiuojame 20% nuolaidos kainą (640), tada vertiname, ar turimi pinigai padengia pilną kainą ARBA nuolaidą. Kadangi 600 pasiekia nuolaidą (640), sąlyga įvertinama kaip tiesa. ### 🧮 Loginiai operatoriai: sąlygų jungimas Išbandykite loginės logikos supratimą: - Išraiškoje A && B, kas nutinka, jei A yra klaidinga? Ar B net tikrinama? - Ar galite įsivaizduoti situaciją, kur jums reikėtų naudoti visus tris operatorius (&&, ||, !) kartu? - Kuo skiriasi !user.isActive ir user.isActive !== true? ### Neigimo operatorius Kartais lengviau galvoti apie tai, kada kažkas NĖRA tiesa. Pavyzdžiui, vietoje klausimo „Ar vartotojas prisijungęs?“, galite klausti „Ar vartotojas NĖRA prisijungęs?“ Išsikirtimo ženklas (!) apverčia loginę reikšmę. ! operatorius tarsi sako „priešingai nei...“ – jei kažkas yra true, ! paverčia jį į false, ir atvirkščiai. ### Ternarinės išraiškos Paprastoms sąlyginiams priskyrimams JavaScript siūlo ternarinį operatorių. Ši koncentruota sintaksė leidžia parašyti sąlyginę išraišką vienoje eilutėje, naudinga kai reikia priskirti vieną iš dviejų reikšmių priklausomai nuo sąlygos. Tai skaitosi kaip klausimas: „Ar ši sąlyga tiesa? Jei taip, naudok šią reikšmę. Jei ne, naudok tą reikšmę.“ Žemiau pateiktas konkretus pavyzdys: ✅ Paskirkite minutę peržiūrėti šį kodą keletą kartų. Ar suprantate, kaip veikia šie operatoriai? Tai reiškia: „Ar firstNumber didesnis už secondNumber? Jei taip, į biggestNumber įrašyk firstNumber. Jei ne, įrašyk secondNumber.“ Ternarinis operatorius yra trumpesnis būdas parašyti tradicinį if..else sakinį: Abi priemonės duoda identiškus rezultatus. Ternarinis operatorius suteikia glaustumą, tuo tarpu tradicinis if-else kodas gali būti labiau suprantamas sudėtingoms sąlygoms. --- ## 🚀 Iššūkis Sukurkite programą, kuri pirmiausia parašyta naudojant loginius operatorius, o po to perrašykite ją naudodami ternarinę išraišką. Kuria sintakse verčiau naudojate? --- ## GitHub Copilot agento iššūkis 🚀 Naudokite Agento režimą, kad įgyvendintumėte šį iššūkį: Aprašymas: Sukurkite išsamų pažymių skaičiuoklę, kuri demonstruotų kelias sprendimų priėmimo sąvokas iš šios pamokos, įskaitant if-else sakinius, switch sakinius, loginius operatorius ir ternarines išraiškas. Užduotis: Parašykite JavaScript programą, kuri priima studento skaitinį rezultatą (0-100) ir nustato jų raidinį pažymį pagal šiuos kriterijus: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: žemiau 60 Reikalavimai: 1. Naudokite if-else sakinį raidiniam pažymiui nustatyti 2. Naudokite loginį operatorių patikrinti, ar studentas išlaikė (balas >= 60) IR turi pagyrimus (balas >= 90) 3. Naudokite switch sakinį, kad suteiktumėte konkrečią grįžtamąją informaciją kiekvienam raidiniam balui 4. Naudokite ternarinį operatorių, norėdami nustatyti, ar studentas yra tinkamas kitam kursui (balas >= 70) 5. Įtraukite įvesties tikrinimą, kad įsitikintumėte, jog balas yra nuo 0 iki 100 Išbandykite savo programą su įvairiais balais, įskaitant kraštutinius atvejus, tokius kaip 59, 60, 89, 90, ir netinkamomis įvestimis. Sužinokite daugiau apie agent mode čia. ## Po paskaitos testas Po paskaitos testas ## Peržiūra ir savarankiškas mokymasis Skaitykite daugiau apie daugybę vartotojui prieinamų operatorių MDN svetainėje. Peržiūrėkite Josh Comeau nuostabų operatorių žinyną! ## Užduotis Operatoriai --- ## 🧠 Jūsų sprendimų priėmimo įrankių rinkinys – santrauka --- ## 🚀 Jūsų JavaScript sprendimų priėmimo meistriškumo laiko juosta ### ⚡ Ką galite padaryti per artimiausias 5 minutes - [ ] Praktikuoti palyginimo operatorius naršyklės konsolėje - [ ] Parašyti paprastą if-else sakinį, kuris tikrina jūsų amžių - [ ] Iššūkis: perrašykite if-else naudojant ternarinį operatorių - [ ] Išbandykite, kas nutinka su skirtingomis „truthy“ ir „falsy“ reikšmėmis ### 🎯 Ką galite pasiekti šią valandą - [ ] Užbaikite po pamokos testą ir peržiūrėkite neaiškius konceptus - [ ] Sukurkite išsamų pažymių skaičiuoklį pagal GitHub Copilot iššūkį - [ ] Sukurkite paprastą sprendimų medį realaus pasaulio situacijai (pvz., ką apsirengti) - [ ] Praktikuokite kelių sąlygų derinimą naudojant loginės operacijas - [ ] Eksperimentuokite su switch sakiniais skirtingiems naudojimo atvejams ### 📅 Jūsų savaitės trukmės loginio meistriškumo planas - [ ] Užbaikite operatorių užduotį su kūrybingais pavyzdžiais - [ ] Sukurkite mini testų programą naudodami įvairias sąlygines struktūras - [ ] Sukurkite formos validatorių, tikrinantį kelias įvesties sąlygas - [ ] Praktikuokite Josh Comeau operatorių žinyno užduotis - [ ] Refaktorizuokite esamą kodą, naudodami tinkamesnes sąlygines struktūras - [ ] Išnagrinėkite trumpųjų jungčių (short-circuit) įvertinimą ir našumo poveikį ### 🌟 Jūsų mėnesio trukmės transformacija - [ ] Įvaldykite sudėtingas suskilusias sąlygas ir išlaikykite kodo skaitomumą - [ ] Sukurkite programą su pažangia sprendimų logika - [ ] Prisidėkite prie atviro kodo projektų, tobulindami sąlyginę logiką - [ ] Mokykite kitus apie skirtingas sąlygines struktūras ir kada jas naudoti - [ ] Tyrinėkite funkcinių programavimo požiūrius į sąlyginę logiką - [ ] Sukurkite asmeninį sąlyginių gerosios praktikos gairių vadovą ### 🏆 Galutinis sprendimų priėmimo čempiono tikrinimas Švęskite savo loginio mąstymo meistriškumą: - Kokia sudėtingiausia sprendimų logika, kurią sėkmingai įgyvendinote? - Kuri sąlyginė struktūra jums atrodo labiausiai natūrali ir kodėl? - Kaip loginiai operatoriai pakeitė jūsų problemų sprendimo būdą? - Kuri realaus pasaulio programa galėtų pasinaudoti pažangia sprendimų logika? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors stengiamės užtikrinti tikslumą, prašome atkreipti dėmesį, kad automatizuoti vertimai gali turėti klaidų ar netikslumų. Pirminis dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojamas profesionalus žmogaus atliktas vertimas. Mes neatsakome už jokius nesusipratimus ar neteisingas interpretacijas, kylančias dėl šio vertimo naudojimo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript pagrindai: masyvai ir ciklai

## Prieš paskaitą testas Prieš paskaitą testas Ar kada nors svarstėte, kaip svetainės seka prekių krepšelio elementus arba rodo jūsų draugų sąrašą? Čia į pagalbą ateina masyvai ir ciklai. Masyvai – tai skaitmeniniai konteineriai, kurie laiko kelis duomenų gabalus, o ciklai leidžia efektyviai tvarkyti tuos duomenis be pasikartojančio kodo. Šios dvi sąvokos kartu sudaro pagrindą informacijos tvarkymui programose. Išmoksite pereiti nuo kiekvieno žingsnio rašymo ranka prie protingo, efektyvaus kodo, kuris gali greitai apdoroti šimtus ar net tūkstančius elementų. Pamokos pabaigoje suprasite, kaip sudėtingas duomenų užduotis atlikti vos keliais kodo sakiniais. Pasinerkime į šias esmines programavimo sąvokas. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Masyvai Įsivaizduokite masyvus kaip skaitmeninę segtuvą - vietoj to, kad saugotumėte vieną dokumentą viename skyriuje, galite sutvarkyti kelis susijusius elementus viename struktūruotame konteineryje. Programavimo terminais masyvai leidžia saugoti kelis duomenų vienetus viename organizuotame pakete. Nesvarbu, ar kuriate nuotraukų galeriją, valdote darbų sąrašą, ar laikote aukščiausių rezultatų sąrašą žaidime, masyvai suteikia duomenų organizavimo pagrindą. Pažiūrėkime, kaip jie veikia. ✅ Masyvai mus supa visur! Ar galite įvardyti realų gyvenimo pavyzdį, kaip saulės modulių masyvą? ### Masyvų kūrimas Masyvą sukurti labai paprasta – tiesiog naudokite kvadratines skliaustelius! Kas čia vyksta? Jūs ką tik sukūrėte tuščią konteinerį naudodami kvadratinius skliaustelius []. Tai panašu į tuščią bibliotekos lentyną – ją galima užpildyti bet kokiomis norimomis knygomis. Taip pat galite iš karto užpildyti savo masyvą pradinėmis reikšmėmis: Įdomūs pastebėjimai: - Galite saugoti tekstą, skaičius ar net true/false reikšmes tame pačiame masyve - Elementus atskirkite kableliu – labai paprasta! - Masyvai puikiai tinka saugoti susijusią informaciją kartu ### Masyvo indeksavimas Štai kas iš pradžių gali pasirodyti neįprasta: masyvai numeruoja elementus nuo 0, o ne nuo 1. Šis nulinis indeksavimas kilo iš kompiuterinės atminties veikimo principų – tai programavimo konvencija nuo ankstyvųjų C kalbos laikų. Kiekviena vieta masyve turi savo adresą, vadinamą indeksu. ✅ Ar jus stebina, kad masyvo indeksavimas prasideda nuo nulio? Kai kuriose programavimo kalbose indeksai prasideda nuo 1. Įdomią istoriją apie tai galite perskaityti Vikipedijoje. Prieigos prie masyvo elementų išraiška: Išskaidykime, kas vyksta čia: - Naudoja kvadratinius skliaustelius su indeksu elementų pasiekimui - Grąžina reikšmę, esančią nurodytoje pozicijoje masyve - Skaičiuoja nuo 0, todėl pirmo elemento indeksas yra 0 Masyvo elementų keitimas: Aukščiau mes: - Pakeitėme elementą su indeksu 4 iš "Rocky Road" į "Sviesto pekano" - Pridėjome naują elementą "Cookie Dough" su indeksu 5 - Automatiškai išplėtėme masyvo ilgį pridėdami elementą už dabartinių ribų ### Masyvo ilgis ir dažniausiai naudojami metodai Masyvai turi įmontuotas savybes ir metodus, kurie labai palengvina darbą su duomenimis. Masyvo ilgio gavimas: Svarbiausi dalykai: - Grąžina bendrą masyvo elementų kiekį - Automatiškai atnaujinamas kai elementai pridedami ar pašalinami - Svarbus ciklams ir validacijai Esminiai masyvo metodai: Svarbu suprasti šiuos metodus: - Prideda elementus su push() (pabaigoje) ir unshift() (pradžioje) - Šalina elementus su pop() (pabaigoje) ir shift() (pradžioje) - Randa elementus su indexOf() ir tikrina egzistavimą su includes() - Grąžina naudingas reikšmes, pvz., pašalintus elementus ar pozicijų indeksus ✅ Išbandykite patys! Naudokite naršyklės konsolę kurdami ir manipuliuodami savo sukurtu masyvu. ### 🧠 Masyvų pagrindų patikrinimas: organizuokite savo duomenis Patikrinkite savo žinias apie masyvus: - Kodėl manote, kad masyvai skaičiuoja nuo 0, o ne nuo 1? - Kas nutinka, jei bandote pasiekti neegzistuojantį indeksą (pvz., arr[100] penkių elementų masyve)? - Ar galite įvardinti tris realaus gyvenimo situacijas, kur masyvai būtų naudingi? ## Ciklai Įsivaizduokite Charleso Dickenso romanų bausmę, kai mokiniai turėjo kelis kartus ant lentelės parašyti tą pačią frazę. O jeigu galėtumėte paprasčiausiai nurodyti „rašyk šią frazę 100 kartų“ ir tai būtų atlikta automatiškai? Būtent tai ciklai ir daro jūsų kode. Ciklai yra kaip nepavargstantis asistentas, kuris gali be klaidų pakartoti užduotis. Nesvarbu, ar reikia patikrinti kiekvieną prekių krepšelio elementą, ar parodyti visas nuotraukas albume – ciklai efektyviai tvarko pasikartojimus. JavaScript siūlo keletą ciklų tipų. Pažiūrėkime kiekvieną ir supraskime, kada juos naudoti. ### For ciklas for ciklas yra panašus į laikmatį – jūs žinote, kiek kartų norite kažką atlikti. Jis labai organizuotas ir nuspėjamas, todėl puikiai tinka darbui su masyvais arba kai reikia kažką suskaičiuoti. For ciklo struktūra: Žingsnis po žingsnio, kas vyksta: - Inicijuoja skaitiklio kintamąjį i su 0 pradžioje - Tikrina sąlygą i < 10 prieš kiekvieną iteraciją - Vykdo kodo bloką, kai sąlyga yra teisinga - Didina i vienetu po kiekvienos iteracijos su i++ - Sustoja, kai sąlyga tampa melaginga (kai i pasiekia 10) ✅ Išbandykite šį kodą naršyklės konsolėje. Kas nutinka, jei šiek tiek pakeičiate skaitiklį, sąlygą ar iteracijos išraišką? Ar galite jį paleisti atgaline eiga, sukurdami atskaitą? ### 🗓️ For ciklo mokėjimo patikrinimas: kontroliuojamas kartojimas Įvertinkite savo for ciklo supratimą: - Kokios yra trys for ciklo dalys ir ką kiekviena daro? - Kaip sukaupti masyvą atgaline tvarka? - Kas nutinka, jei pamiršite inkrementavimo dalį (i++)? ### While ciklas while ciklas yra kaip sakyti „daryk tai tol, kol...“ – gali būti, kad nežinote tiksliai, kiek kartų jis bus vykdomas, bet žinote, kada sustoti. Puikiai tinka situacijoms, kai vartotoją reikia klausti, kol gaunate norimą atsakymą, arba ieškoti duomenyse, kol randate tai, ko ieškote. While ciklo ypatybės: - Tęsiasi tol, kol sąlyga yra teisinga - Reikalauja rankinio skaitiklių valdymo - Tikrina sąlygą prieš kiekvieną iteraciją - Gali sukelti begalinius ciklus, jei sąlyga niekada nesikeičia į melagingą Šių pavyzdžių paaiškinimas: - Rankiniu būdu valdo kintamąjį i ciklo viduje - Didina skaitiklį, kad išvengtų begalinio ciklo - Rodo praktinį panaudojimą su vartotojo įvestimi ir bandymų ribojimu - Apima saugos mechanizmus, kad nebūtų nepabaigiamas vykdymas ### ♾️ While ciklo išminties patikrinimas: sąlygų pagrindu vykdomas kartojimas Išbandykite savo while ciklo supratimą: - Kokia yra pagrindinė while ciklų pavojų priežastis? - Kada rinktumėtės while ciklą vietoje for ciklo? - Kaip galima išvengti begalinių ciklų? ### Šiuolaikinės ciklų alternatyvos JavaScript siūlo modernią ciklų sintaksę, kuri gali padaryti jūsų kodą skaitomesnį ir mažiau klaidinamą. For...of ciklas (ES6+): Svarbiausios for...of privalumai: - Pašalina indeksų valdymo poreikį ir galimas klaidas - Tiesiogiai suteikia prieigą prie masyvo elementų - Pagerina kodo skaitomumą ir sumažina sintaksės sudėtingumą forEach metodas: Svarbu žinoti apie forEach: - Vykdo funkciją kiekvienam masyvo elementui - Suteikia elementų reikšmę ir indeksą kaip parametrus - Negalima jo sustabdyti anksčiau (priešingai nei tradiciniai ciklai) - Grąžina undefined (nekuria naujo masyvo) ✅ Kodėl rinktumėtės for ciklą vietoje while ciklo? 17 tūkst. žiūrovų StackOverflow turėjo tą patį klausimą ir kai kurios nuomonės gali būti jums įdomios. ### 🎨 Šiuolaikinės ciklų sintaksės patikrinimas: ES6+ priėmimas Įvertinkite savo moderniojo JavaScript supratimą: - Kokie privalumai naudojant for...of palyginti su tradiciniais for ciklais? - Kada vis dar galėtumėte rinktis tradicinius for ciklus? - Kuo skiriasi forEach nuo map? ## Ciklai ir masyvai Masyvų ir ciklų derinys suteikia galingas duomenų apdorojimo galimybes. Šis derinys yra pagrindas daugeliui programavimo užduočių – nuo sąrašų rodymo iki statistikos skaičiavimo. Tradiciškas masyvo apdorojimas: Pažiūrėkime, kaip veikia kiekvienas metodas: - Naudoja masyvo ilgį ciklo ribai nustatyti - Pasiekia elementus pagal indeksą tradiciniame for cikle - Suteikia tiesioginę prieigą prie elementų for...of cikle - Apdoroja kiekvieną masyvo elementą tik vieną kartą Praktinis duomenų apdorojimo pavyzdys: Kaip veikia šis kodas: - Inicijuoja kintamuosius sumai ir riboms sekti - Apdoroja kiekvieną pažymį per vieną efektyvų ciklą - Kaupia bendrą sumą vidurkiui apskaičiuoti - Stebi aukščiausią ir žemiausią vertes iteracijos metu - Apskaičiuoja galutines statistikas ciklui pasibaigus ✅ Eksperimentuokite su savo sukurtu masyvu naršyklės konsolėje. --- ## GitHub Copilot agento iššūkis 🚀 Naudokite Agent režimą, kad atliktumėte šį iššūkį: Aprašymas: Sukurkite išsamų duomenų apdorojimo funkciją, kuri derina masyvus ir ciklus, analizuoja duomenų rinkinį ir generuoja prasmingas įžvalgas. Užduotis: Sukurkite funkciją analyzeGrades, kuri priima masyvą su mokinių pažymių objektais (kiekvienas objektas turi name ir score savybes) ir grąžina objektą su statistika: aukščiausias balas, žemiausias balas, vidutinis balas, sėkmingai išlaikiusių (balas >= 70) skaičius bei masyvas su mokinių vardais, kurių balai viršija vidurkį. Naudokite bent du skirtingus ciklų tipus sprendime. Sužinokite daugiau apie agent režimą čia. ## 🚀 Iššūkis JavaScript siūlo keletą modernių masyvų metodų, kurie gali pakeisti tradicines ciklus specifinėms užduotims. Išmokite naudotis forEach, for-of, map, filter ir reduce. Jūsų iššūkis: Pertvarkykite studentų pažymių pavyzdį naudodami bent tris skirtingus masyvų metodus. Pastebėsite, kaip daug švaresnis ir suprantamesnis tampa kodas su modernia JavaScript sintakse. ## Po paskaitos testas Po paskaitos testas ## Peržiūra ir savarankiškas mokymasis JavaScript masyvai turi daug metodų, kurie yra labai naudingi duomenų manipuliavimui. Susipažinkite su šiais metodais ir išbandykite kai kuriuos iš jų (pvz., push, pop, slice ir splice) su savo sukurtu masyvu. ## Užduotis Ciklas masyve --- ## 📊 Jūsų masyvų ir ciklų įrankių santrauka --- ## 🚀 Jūsų masyvų ir ciklų meistriškumo laiko planas ### ⚡ Ką galite padaryti per artimiausias 5 minutes - [ ] Sukurkite mėgstamų filmų masyvą ir pasiekite konkrečius elementus - [ ] Parašykite for ciklą, kuris skaičiuoja nuo 1 iki 10 - [ ] Išbandykite šiuolaikinių masyvo metodų iššūkį iš pamokos - [ ] Praktikuokite masyvų indeksavimą savo naršyklės konsolėje ### 🎯 Ką galite pasiekti šią valandą - [ ] Atlikite po pamokos testą ir peržiūrėkite sudėtingesnes temas - [ ] Sukurkite išsamų pažymių analizatorių pagal GitHub Copilot iššūkį - [ ] Sukurkite paprastą pirkinių krepšelį, kuris prideda ir pašalina prekes - [ ] Praktikuokite konvertuoti tarp skirtingų ciklų tipų - [ ] Eksperimentuokite su masyvo metodais, tokiais kaip push, pop, slice ir splice ### 📅 Jūsų savaitės duomenų apdorojimo kelionė - [ ] Atlikite užduotį „Ciklas masyve“ su kūrybiniais patobulinimais - [ ] Sukurkite darbų sąrašų programėlę naudodami masyvus ir ciklus - [ ] Sukurkite paprastą statistikos skaičiuoklę skaitiniams duomenims - [ ] Praktikuokitės su MDN masyvų metodais - [ ] Sukurkite nuotraukų galerijos arba muzikos grojaraščio sąsają - [ ] Išbandykite funkcinį programavimą naudodami map, filter ir reduce ### 🌟 Jūsų mėnesio transformacija - [ ] Įvaldykite pažangias masyvų operacijas ir našumo optimizavimą - [ ] Sukurkite pilną duomenų vizualizacijos informacijos suvestinę - [ ] Prisidėkite prie atviro kodo projektų, susijusių su duomenų apdorojimu - [ ] Mokykite kitus apie masyvus ir ciklus su praktiškais pavyzdžiais - [ ] Sukurkite asmeninę biblioteką pakartotinai naudojamoms duomenų apdorojimo funkcijoms - [ ] Ištyrinėkite algoritmus ir duomenų struktūras, pagrįstas masyvais ### 🏆 Galutinė duomenų apdorojimo čempiono grįžtamojo ryšio dalis Švęskite savo masyvų ir ciklų meistriškumą: - Kokia naudingiausia masyvų operacija, kurią išmokote naudoti realaus pasaulio programose? - Koks ciklo tipas jums atrodo natūraliausias ir kodėl? - Kaip masyvų ir ciklų supratimas pakeitė jūsų būdą organizuoti duomenis? - Kokį sudėtingą duomenų apdorojimo uždavinį norėtumėte spręsti toliau? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Atsakomybės atsisakymas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Svarbiai informacijai rekomenduojama kreiptis į profesionalų žmogaus vertėją. Mes neprisiimame atsakomybės už bet kokius nesusipratimus ar klaidingą interpretaciją, kilusią dėl šio vertimo naudojimo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ജാവാസ്‌ക്രിപ്റ്റ് പരിചയം

ജാവാസ്‌ക്രിപ്റ്റ് വെബിന്റെ ഭാഷയാണ്. ഈ നാല് പാഠങ്ങളിലൂടെ, നിങ്ങൾ അതിന്റെ അടിസ്ഥാനങ്ങൾ പഠിക്കും. ### വിഷയങ്ങൾ 1. ചരങ്ങൾക്കും ഡാറ്റാ തരംകളും 2. ഫംഗ്ഷനുകളും മേത്തഡുകളും 3. ജാവാസ്‌ക്രിപ്റ്റ് ഉപയോഗിച്ച് തീരുമാനം എടുക്കൽ 4. അറേകളും ലൂപ്പുകളും ### ക്രെഡിറ്റുകൾ ഈ പാഠങ്ങൾ ♥️ ഉള്ളിൽ നിന്ന് ജാസ്മിൻ ഗ്രീൻവേ, ക്രിസ്റ്റഫർ ഹാരിസൺ жана ക്രിസ് നോറിങ് എഴുതിയവയാണ്. --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> വിവരണം: ഈ ദസ്താവേസ് Co-op Translator എന്ന AI തർജ്ജുമ സേവനം ഉപയോഗിച്ച് തർജ്ജമ ചെയ്തതാണ്. കൃത്യതക്കായി ഞങ്ങൾ ശ്രമിച്ച ကြသော်, യന്ത്രം തർജ്ജമ ചെയ്യുന്നപ്പോൾ പിഴവുകളും അസൂയകളും ഉണ്ടായിരിക്കാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. പ്രധാന ഭാഷയിലെ അസൽ ദസ്താവേസാണ് അധികാരപരമായ ഉറവിടം എന്ന് പരിഗണിക്കണം. നിർണായക വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യാവകാശ തർജ്ജുമ പരിഗണിക്കുക. ഈ തർജ്ജുമ ഉപയോഗത്തിൽ നിന്നും ഉണ്ടായേക്കാവുന്ന അർത്ഥക്കുറവുകൾക്കും തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ: ഡേറ്റാ ടൈപ്പുകൾ

ജാവാസ്ക്രിപ്റ്റിലെ ഡേറ്റാ ടൈപ്പുകൾ നിങ്ങളുടെ ഓരോ പ്രോഗ്രാമിലും കാണാൻ ലഭിക്കുന്ന അടിസ്ഥാന ആശയങ്ങളിൽ ഒന്നാണ്. ഡേറ്റാ ടൈപ്പുകളെ നിങ്ങൾക്ക് ആലക്സാൻഡ്രിയയിലെ പ്രാചീന ഗ്രന്ഥശാലാരോഹിതാക്കൾ ഉപയോഗിച്ചിരുന്ന ഫയലിംഗ് സിസ്റ്റം പോലെ കരുതാം – അവാർക്കു വേണ്ടി പേറുകൾക്കായുള്ള പ്രത്യേക ഇടങ്ങൾ ഉണ്ടായിരുന്നു, അവയിൽ കവിത, ഗണിതം, ചരിത്ര രേഖകൾ അടങ്ങിയിരുന്നു. ജാവാസ്ക്രിപ്റ്റ് അറിഞ്ഞ കാര്യങ്ങൾ വ്യത്യസ്ഥ നിങ്ങളുടെ വിവരങ്ങൾ വ്യത്യസ്ത തരത്തിലുള്ള ഡേറ്റാകൾക്കായി വ്യത്യസ്ത വിഭാഗങ്ങളായി ക്രമീകരിക്കുന്നു. ഈ പാഠത്തിൽ, ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തിക്കാൻ സഹായിക്കുന്ന മുൽ ഡേറ്റാ ടൈപ്പുകൾ നമ്മൾ പരിശോധിക്കും. നിങ്ങൾ നമ്പറുകൾ, പേരു, ട്രൂ/ഫാൾസ് മൂല്യങ്ങൾ കൈകാര്യം ചെയ്യുന്നത് എങ്ങനെ പോലുള്ള കാര്യങ്ങൾ പഠിക്കും, കൂടാതെ ശരിയായ ടൈപ്പ് തിരഞ്ഞെടുക്കുന്നത് നിങ്ങളുടെ പ്രോഗ്രാമുകൾക്കായി എങ്ങനെ അത്യന്താപേക്ഷണീയമാണ് എന്ന് മനസ്സിലാക്കും. ആദ്യതായി ഈ ആശയങ്ങൾ സങ്കീർണമായി തോന്നാം, എന്നാൽ പരിശീലനത്തോടെ അവ രണ്ടാമത്തെ സ്വഭാവമായിത്തീരും. ഡേറ്റാ ടൈപ്പുകൾ മനസ്സിലാക്കുന്നത് ജാവാസ്ക്രിപ്റ്റിൽ മറ്റെല്ലാം കാര്യങ്ങളും വളരെ കൂടുതൽ വ്യക്തവും മനസ്സിലാവുകയും ചെയ്യും. ഒരു ബൃഹദാളയം നിർമ്മിക്കാൻ നിർമ്മാതാക്കൾ വിവിധ നിർമ്മാണ വസ്തുക്കൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു മനസ്സിലാക്കേണ്ടതുപോലെ, ഈ അടിസ്ഥാനങ്ങളും നിങ്ങൾ നിർമ്മിക്കുന്ന എല്ലാവർഷങ്ങളും പിന്തുണയ്ക്കും. ## പ്രീ-ലെക്ചർ ക്വിസ് Pre-lecture quiz വെബിൽ ഇന്ററാക്റ്റിവിറ്റി നൽകുന്ന ഭാഷയായ ജാവാസ്ക്രിപ്റ്റിന്റെ അടിസ്ഥാനങ്ങൾ ഈ പാഠത്തിൽ ഉൾക്കൊള്ളുന്നു. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") നമുക്ക് variableസും അവയിൽ ഡേറ്റാ ടൈപ്പുകളും കൂടെ തുടങ്ങാം! ## Variables പ്രോഗ്രാമിങ്ങിൽ മൂലഭൂത ഘടകങ്ങളാണ് variableസ്. മധ്യകാല കാലഘട്ടത്തിലെ ആൽക്കമിസ്റ്റ്മാർ വ്യത്യസ്ത പദാർത്ഥങ്ങൾ സൂക്ഷിക്കാൻ ഉപയോഗിച്ച ലേബലുചെയ്‌ത ജാർകൾ പോലെ, variableസ് നിങ്ങളെ വിവരങ്ങൾ സൂക്ഷിക്കാൻ സഹായിക്കുന്നു, പിന്നീട് അവയെ സൂചിപ്പിക്കാൻ വിവരണാത്മക നാമം നൽകാനനുവദിക്കുന്നു. ആരുടെയും വയസ് ഓർമ്മിക്കാൻ പറ്റുമോ? അത് age എന്ന variableൽ സൂക്ഷിക്കുക. ഒരു യൂസറിന്റെ പേര് ട്രാക്ക് ചെയ്യണമെന്ന് ആണെങ്കിൽ, അത് userName എന്ന variableൽ സൂക്ഷിക്കുക. ജാവാസ്ക്രിപ്റ്റിൽ ക്ലാസ്യമായ രീതിയാണിവിടെ variableസ് സൃഷ്ടിക്കുന്നത്. നിങ്ങൾ ഇവിടെ പഠിക്കുന്ന സാങ്കേതിക വിദ്യകൾ ഭാഷയുടെ വർഷങ്ങളായ വികാസവും പ്രോഗ്രാമിങ് കമ്മ്യൂണിറ്റിയുടെ മികച്ച രീതികളും പ്രതിനിധീകരിക്കുന്നു. ഒരു variable സൃഷ്ടിച്ച് പ്രഖ്യാപിക്കുന്നതിന് നിങ്ങൾക്ക് ഫോളോ ചെയ്തുള്ള സിന്ടക്‌സ് ഉണ്ട് [keyword] [name]. ഇരട്ട ഭാഗങ്ങളാൽ നിർമ്മിക്കപ്പെട്ടതാണ്: - Keyword. മാറ്റാവുന്ന variablesക് let, സ്ഥിരമായ മൂല്യങ്ങൾക്ക് const ഉപയോഗിക്കുക. - Variable നാമം, ഇത് നിങ്ങൾ തന്നെ തെരഞ്ഞെടുത്ത ഒരു വിവരണാത്മക നാമമാണ്. ✅ let keyword ES6 ൽ പരിചയപ്പെടുത്തി, variableന് ഒരു _block scope_ ഏർപ്പെടുത്തുന്നു. പാരമ്പര്യമായ var കൂടുതൽ ഉപയോഗിക്കാതെ let അല്ലെങ്കിൽ const ഉപയോഗിക്കണമെന്ന് ശുപാർശ ചെയ്യപ്പെടുന്നു. Block scope പിന്നീടുള്ള ഭാഗങ്ങളിൽ വിശദമായി പഠിക്കും. ### ടെസ്ക് - variableസുമായി ജോലി ചെയ്യുക 1. ഒരു variable പ്രഖ്യാപിക്കു. നമുക്ക് ആദ്യ variable സൃഷ്ടിക്കുന്നത് തുടങ്ങാം: ```javascript let myVariable; ``` ഇത് ചെയ്യുന്നത്: - ജാവാസ്ക്രിപ്റ്റ് myVariable എന്ന് പേരുള്ള ഒരു ശേഖരണ സ്ഥാനമുണ്ടാക്കിയതായി അറിയിക്കുന്നു - ജാവാസ്ക്രിപ്റ്റ് ഈ variableക്ക് മെമ്മറിയിൽ സ്ഥലം നൽകുന്നു - variableക്ക് നിലവിൽ മൂല്യം ഇല്ല (അവ്യക്തം) 2. മೂಲ്യം നൽകുക. ഒന്നു variableൽ എന്തെങ്കിലും അടക്കി കാണാം: ```javascript myVariable = 123; ``` നിയമനം എങ്ങനെ പ്രവർത്തിക്കുന്നു: - = ഓപ്പറേറ്റർ ഈ variable-ന് 123 എന്ന മൂല്യം നിയോഗിക്കുന്നു - variable ഇപ്പോൾ അവ്യക്തമായി നിലനിൽക്കുന്ന മൂല്യം പകരം ഈ മൂല്യം ഉറപ്പുനൽക്കുന്നു - myVariable ഉപയോഗിച്ച് ഈ മൂല്യത്തെ നിങ്ങളുടെ കോഡിലെ എവിടെയും സൂചിപ്പിക്കാം > ശ്രദ്ധിക്കുക: ഈ പാഠത്തിൽ = ഉപയോഗിക്കുന്നത് "നിയോഗ ഓപ്പറേറ്റർ" എന്നർത്ഥം, ഇതു ഒരൊറ്റ variable-ന് മൂല്യം നൽകാൻ ഉപയോഗിക്കുന്നു. സമവാക്യമല്ല. 3. ബുദ്ധിമുട്ടില്ലാതെ ചെയ്യൂ. നീണ്ടത് രണ്ട് പടികൾ ഒരുമാക്കി ചെയ്യാം: ```javascript let myVariable = 123; ``` ഈ രീതിയ്ര് കൂടുതൽ കാര്യക്ഷമമാണ്: - ഒരു സ്ഥിരം സ്റ്റേറ്റ്‌മെന്റിൽ variable പ്രഖ്യാപിക്കുകയും മൂല്യം നൽകുകയും ചെയ്യുന്നു - വികസിപ്പകരുടെ ഇടയിൽ ഈ രീതിയാണ് സാധാരണം - ദൈർഘ്യം കുറയ്ക്കുന്നു കൂടാതെ വ്യക്തത നിലനിർത്തുന്നു 4. മനസ്സിലൂരുന്നു. വ്യത്യസ്ത ഒരു നമ്പർ സൂക്ഷിക്കണമെങ്കിൽ? ```javascript myVariable = 321; ``` പുന:നിയോഗം മനസ്സിലാക്കുക: - variable ഇപ്പോൾ 321 അടക്കുന്നു, മുമ്പുണ്ടായിരുന്ന 123 പകരം - മുന്‍ മൂല്യം മാറ്റി വച്ചിരിക്കുന്നു – variableസ് ഒരേസമയം ഒരു മൂല്യം മാത്രമേ സൂക്ഷിക്കൂ - ഇത് let ഉപയോഗിച്ച് variable പ്രഖ്യാപനത്തിന്റെ മുഖ്യ ഗുണമാണ് ✅ പരീക്ഷിക്കൂ! നിങ്ങൾക്ക് ബ്രൗസറിൽ നേരിട്ട് ജാവാസ്ക്രിപ്റ്റ് എഴുതാനാകും. ബ്രൗസർ തുറന്ന് ഡിസെൽപ്പർ ടൂളുകളിലേക്ക് പോവുക. കോൺസോളിൽ let myVariable = 123 എന്ന് ടൈപ്പ് ചെയ്ത് റിട്ടേൺ അമർത്തുക, തുടർന്ന് myVariable ടൈപ്പ് ചെയ്യുക. എന്ത് സംഭവിക്കുന്നു? ഈ ആശയങ്ങളെക്കുറിച്ച് അടുത്ത പാഠങ്ങളിൽ കൂടുതൽ പഠിക്കും. ### 🧠 Variables മെടറിയൽ ചെയ്‌യൽ: സ്വന്തം ബോധത്തിൽ ഉറപ്പിക്കുക variables സംബന്ധിച്ച നിങ്ങൾ എത്രത്തോളം മനസ്സിലാക്കുന്നു കാണാം: - variable പ്രഖ്യാപണവും നിയമനവും തമ്മിലുള്ള വ്യത്യാസം വിശദീകരിക്കാമോ? - ഒരു variable പ്രഖ്യാപിക്കുന്നതിന് മുമ്പ് ഉപയോഗിക്കുമ്പോൾ എന്ത് സംഭവിക്കും? - variableയ്‌ക്കായി let എന്ത് സമയത്ത് const നെക്കാൾ തിരഞ്ഞെടുക്കും? ## Constants പ്രോഗ്രാം പ്രവർത്തനത്തിനിടെ മാറ്റം വരുത്താൻ പാടില്ലാത്ത വിവരങ്ങൾ സൂക്ഷിക്കാൻ ചിലപ്പോൾ ആവശ്യമുണ്ട്. പ്രാചീന ഗ്രീസിലെ യൂക്ലിഡ് സ്ഥാപിച്ച ഗണിത സിദ്ധാന്തങ്ങളായി constants കരുതാം – ഒരിക്കൽ തെളിഞ്ഞു രേഖപ്പെടുത്തിയതിന് ശേഷം അത് മുഴുവൻ ഭാവിയിൽ സ്ഥിരതയാണ്. constants variables പോലെ പ്രവർത്തിക്കുന്നു, എന്നാൽ ഒരു പ്രധാന നിയന്ത്രണവുമുണ്ട്: നിങ്ങൾ മൂല്യം നിയമിച്ചതിനു ശേഷം അതു മാറ്റാനാകില്ല. ഈ സ്ഥിതിസ്ഥാപകത സാങ്കേതികപ്രവർത്തനത്തിലെ പ്രധാന മൂല്യങ്ങളെ തെളിവുകൾ സംരക്ഷിക്കാൻ സഹായിക്കുന്നു. constants പ്രഖ്യാപനവും ആരംഭവും variableപോലെയാണെങ്കിലും const keyword ഉപയോഗിക്കുന്നു. constants സാധാരണ നിർദ്ദേശത്തിൽ ഏതാണ്ട് മുഴുവൻ അക്ഷരങ്ങൾ capital ആണ്. ഈ കോഡ് ചെയ്യുന്നത്: - MY_VARIABLE എന്ന പേരിൽ ഒരു constant സൃഷ്ടിക്കുന്നു, മൂല്യം 123 - constants ക്ക് capital നാമകരണ രീതിയാണ് ഉപയോഗിക്കുന്നത് - ഇതിനുള്ള മൂല്യം ഭാവിയിൽ മാറ്റാൻ പാടില്ല constants ന് രണ്ട് പ്രധാന നിയമങ്ങളുണ്ട്: - തടവായ സ്ഥിരമായ മൂല്യം ഉടൻ നൽകണം – ശൂന്യമായ constants അനുവദനീയമല്ല! - ആ മൂല്യം മാറ്റാനാകില്ല – നിങ്ങളുടെ ശ്രമം ജാവാസ്ക്രിപ്റ്റ് പിശക് എറർ തരുമ്. താഴെ കാണിച്ചുകഴിഞ്ഞാൽ: സാധാരണ മൂല്യം - താഴെ കാണിക്കുന്നത് അനുവദനീയമല്ല: ```javascript const PI = 3; PI = 4; // അനുവദനീയമല്ല ``` സ്മരണയിൽ വയ്ക്കേണ്ടത്: - constant പുന:നിയോഗത്തിനുള്ള ശ്രമം പിശക് സൃഷ്ടിക്കും - പ്രധാന മൂല്യങ്ങളെ തെറ്റായ മാറ്റങ്ങളിൽ നിന്നും സംരക്ഷിക്കുന്നു - പ്രോഗ്രാമിന്റെ മുഴുവൻ കാലയളവിൽ മൂല്യം സൃഷ്ടിക്കുന്നു ഓബ്ജക്റ്റ് റഫറൻസ് സംരക്ഷിച്ചു - താഴെ കാണുന്നത് അനുവദനീയമല്ല: ```javascript const obj = { a: 3 }; obj = { b: 5 } // അനുവദനീയമല്ല ``` ഈ ആശയങ്ങൾ മനസ്സിലാക്കുക: - മുഴുവൻ ഓബ്ജക്റ്റ് മാറ്റുന്നത് തടയുന്നു - ഒറിജിനൽ ഓബ്ജക്റ്റിലേക്കുള്ള റഫറൻസ് സുരക്ഷിതമാക്കുന്നു - ഓബ്ജക്റ്റിന്റെ മെമ്മറിയിലെ ഐഡന്റിറ്റി നിലനിർത്തുന്നു ഓബ്ജക്റ്റിന്റെ മൂല്യം മാറ്റാൻ കഴിയും - താഴെ കാണുന്നത് അനുവദനീയമാണ്: ```javascript const obj = { a: 3 }; obj.a = 5; // അനുവദനീയമാണ് ``` ഇവിടെ എന്ത് സംഭവിക്കുന്നു: - ഓബ്ജക്റ്റിനുള്ളിൽ ഉള്ള പ്രോപ്പർട്ടി മൂല്യം മാറ്റുന്നു - റഫറൻസ് നിലനിർത്തുന്നു - ഓബ്ജക്റ്റ് ഉള്ളടക്കം മാറാം, എന്നാൽ റഫറൻസ് സ്ഥിരമാണ് എന്ന് കാണിക്കുന്നു > ശ്രദ്ധിക്കുക, const എന്നത് റഫറൻസിനെ പുന:നിയോഗത്തിൽ നിന്നും സംരക്ഷിക്കുന്നു. മൂല്യം _അമ്യൂറ്റബിൾ_ അല്ല, ഒരാദ്ധരം കോംപ്ലക്സ് ഘടനയായ ഓബ്ജക്റ്റ് പോലുള്ളത് മാറ്റം വരുത്താൻ കഴിയും. ## Data Types ജാവാസ്ക്രിപ്റ്റ് വിവിധ തരത്തിലുള്ള വിവരങ്ങളെ ഡേറ്റാ ടൈപ്പുകൾ എന്ന വിഭാഗങ്ങളായി ക്രമീകരിക്കുന്നു. ഈ ആശയം പ്രാചീന പണ്ഡിതർ അറിഞ്ഞിരുന്നതുപോലെ ആണ് – അലിസ്റ്റോട്ടിൽ വേർതിരിച്ചുകൊണ്ടിരുന്നത് വിവേക തത്ത്വങ്ങൾക്കിടയിൽ വ്യത്യാസം, കാരണം ലേഖനം, ഗണിതം, പ്രകൃതി തത്ത്വശാസ്ത്രം എന്നിവയിൽ ഒരേ തരം നിയമങ്ങൾ ബാധകമല്ല. ഡേറ്റാ ടൈപ്പുകൾ പ്രധാനമാണ് കാരണം വ്യത്യസ്ത പ്രവർത്തനങ്ങൾക്ക് വ്യത്യസ്ത വിധത്തിലുള്ള വിവരങ്ങൾ വേണം. മനുഷ്യനാമത്തിൽ ഗണിതം നടത്താനാകില്ല, ഗണിത സമവാക്യത്തിന് ആൽഫബെറ്റ് ക്രമം പാലിക്കാനാകില്ല, അതുപോലെ ജാവാസ്ക്രിപ്റ്റും ഓരോ ഓപ്പറേഷനിനും അനുയോജ്യമായ ഡേറ്റാ ടൈപ്പ് ആവശ്യപ്പെടുന്നു. ഇത് തെറ്റായി പ്രോഗ്രാമുകൾ വരുന്നത് തടയുകയും കോഡ് വിശ്വാസയോഗ്യമാക്കുകയും ചെയ്യുന്നു. Variableസ് നിരവധി വ്യത്യസ്ത മൂല്യങ്ങൾ സൂക്ഷിക്കാനാകും, എങ്കിൽ നമ്പറുകളും ടെക്സ്റ്റുകളും ഉൾപ്പെടെ. ഈ വ്യത്യസ്ത ടൈപ്പുകളെയാണ് ഡേറ്റാ ടൈപ്പുകൾ എന്ന് വിളിക്കുന്നത്. സോഫ്റ്റ്വെയർ വികസനത്തിൽ ഡേറ്റാ ടൈപ്പുകൾ സുപ്രധാനമാണ്, കാരണം ഇത് ഡെവലപർമാരെ എങ്ങനെ കോഡ് എഴുതണം, സോഫ്റ്റ്വെയർ എങ്ങനെ പ്രവർത്തിക്കണം എന്ന കാര്യത്തിൽ തീരുമാനിക്കേണ്ട സഹായം നൽകുന്നു. കൂടാതെ, ചില ഡേറ്റാ ടൈപ്പുകൾ പ്രത്യേക സവിശേഷതകൾക്കായി ഉള്ളവയാണ്, മൂല്യത്തിൽ നിന്ന് കൂടുതൽ വിവരങ്ങൾ മാറ്റി പകരാനോ പ്രക്രിയചെയ്യാനോ സഹായിക്കുന്നു. ✅ ഡേറ്റാ ടൈപ്പുകൾ ജാവാസ്ക്രിപ്റ്റ് ഡേറ്റാ പ്രിമിറ്റിവുകൾ എന്നും പറയുന്നു. ഭാഷ നൽകിയ ഏറ്റവും താഴ്ന്ന നിലവാരത്തിലുള്ള ഡാറ്റാ ടൈപ്പുകളാണ് ഇവ. 7 പ്രിമിറ്റീവ് ഡേറ്റാ ടൈപ്പുകൾ ഉണ്ട്: string, number, bigint, boolean, undefined, null, symbol. ഓരോ പ്രിമിറ്റീവ് എന്തെല്ലാം പ്രതിനിധീകരിക്കാം എന്നത് ഒരു നിമിഷം മനസ്സിലാക്കുക. ഒരു zebra എന്താണെന്നും 0 എന്നത് എന്തെന്നും true എന്നത് എന്തെന്നും ചോദിക്കുക. ### Numbers നമ്പറുകൾ ജാവാസ്ക്രിപ്റ്റിലെ ഏറ്റവും എളുപ്പത്തിലുള്ള ഡേറ്റാ ടൈപ്പാണ്. 42 പോലുള്ള പൂർണ്ണസംഖ്യകളും 3.14 പോലുള്ള ദശാംശങ്ങളും -5 പോലുള്ള നെഗറ്റീവ് സംഖ്യകളും എല്ലാ തരത്തിലുള്ള with വാഹനം ജാവാസ്ക്രിപ്റ്റ് സമാനമാകും. നമുക്ക് മുമ്പ് variableവുമായുള്ള 123 നോർഡ്നം നമ്പർ ഡേറ്റാ ടൈപ്പ് ആണ്: പ്രധാന സവിശേഷതകൾ: - ജാവാസ്ക്രിപ്റ്റ് സ്വയം സംഖ്യാത്മക മൂല്യങ്ങളായി തിരിച്ചറിയുന്നു - ഈ variableസുമായി ഗണിത പ്രവർത്തനങ്ങൾ നടത്താം - വ്യക്തമായ ടൈപ്പ് പ്രഖ്യാപനം ആവശ്യമില്ല variableസ് എല്ലാ തരത്തിലുള്ള നബറുകളും സൂക്ഷിക്കാം, ദശാംശങ്ങളോ നെഗറ്റീവ് സംഖ്യകളോ ഉൾപ്പെടെ. നബറുകൾ ഗണിത ഓപ്പറേറ്റർമാരുമായും ഉപയോഗിക്കാം, അടുത്ത വിഭാഗത്തിൽ പഠിപ്പിക്കും. ### Arithmetic Operators ഗണിത ഓപ്പറേറ്ററുകൾ ജാവാസ്ക്രിപ്റ്റിൽ നിങ്ങൾക്ക് ഗണിത ഗ്രഹണങ്ങൾ നടത്താൻ അനുവദിക്കുന്നു. ഈ ഓപ്പറേറ്ററുകൾ പൈതൃക ഗണിതീയമായ സിദ്ധാന്തങ്ങളനുസരിച്ച് പ്രവർത്തിക്കുന്നു – ആൽഖ്വാരിസ്മി പോലുള്ള പണ്ഡിതൻ്റെ ശാസ്ത്രീയ പ്രമാണങ്ങളിൽ കാണിച്ചിരിന്ന ചിഹ്നങ്ങൾ. ഓപ്പറേറ്ററുകൾ പാരമ്പര്യ ഗണിതത്തോടനുബന്ധിച്ച സ്വഭാവങ്ങളുള്ളതാണ്: കൂട്ടൽക്ക് പ്ലസ്, വിയോഗത്തിന് മൈനസ്, ഗുണനത്തിനും പങ്കുവയ്ക്കുന്നതിനും എന്നിവ. നിങ്ങൾക്ക് ഗണിത പ്രവർത്തനങ്ങളിൽ ഉപയോഗിക്കുന്ന ചില പ്രധാന ഓപ്പറേറ്റർമാർ ചുവടെ നൽകുന്നു: ✅ പരീക്ഷിക്കൂ! നിങ്ങളുടെ ബ്രൗസറിലെ കോൺസോളിൽ ഒരു ഗണിത പ്രവർത്തനം ചെയ്യൂ. ഫലങ്ങൾ നിങ്ങളെ അമ്പരപ്പിക്കുമോ? ### 🧮 ഗണിതക്ഷമത പരിശോധന: ആത്മവിശ്വാസത്തോടെ കണക്കുകൂട്ടൽ നിങ്ങളുടെ ഗണിതഈടംപ്പിലൂടെ: - / (ഭാഗം) ഉം % (ശേഷി) ഉം തമ്മിലുള്ള വ്യത്യാസം എന്ത്? - 10 % 3 എന്നത് ഇടത്തേയ്ക്ക് എന്ത് തുല്യമാണ് (ഹിങ്ക്: 3.33 അല്ല...) - പ്രോഗ്രാമിങ്ങിൽ ശേഷിക്കണക്കുകാർഎന്തിന് പ്രയോജനപ്പെടുന്നു? ### Strings ജാവാസ്ക്രിപ്റ്റിൽ, ടെക്സ്റ്റ് ഡാറ്റ strings ആയി പ്രതിനിധീകരിക്കുന്നു. "string" എന്ന പദം ഒരു കൂടി ചിഹ്നങ്ങൾ കയറി നിരക്കായി ചേർക്കപ്പെടുന്നത് കാണിക്കുന്നു, മധ്യകാല സമ്മേളനങ്ങൾ എഴുതിയ ഡോക്യുമെന്റുകളിലെ അതേ പോലെ. Strings വെബ് വികസനത്തിന് അടിസ്ഥാനം ആണ്. ഓരോ വെബ്സൈറ്റിലെ ടെക്സ്റ്റ്, യൂസർനേം, ബട്ടൺ ലേബലുകൾ, പിഴവ് സന്ദേശങ്ങൾ, ഉള്ളടക്കം എന്നിവ എല്ലാം string ഡാറ്റയായി കൈകാര്യം ചെയ്യുന്നു. strings മനസ്സിലാക്കുന്നത് ഉപയോക്തൃ ഇന്റർഫേസുകൾ സൃഷ്ടിക്കാൻ അനിവാര്യമാണ്. Strings ഒറ്റ ഉദ്ധരണ ചിഹ്നങ്ങളോ ഇരട്ട ഉദ്ധരണ ചിഹ്നങ്ങളോ തമ്മിലുള്ള അക്ഷരശ്രേണികളാണ്. ഈ ആശയങ്ങൾ മനസ്സിലാക്കുക: - strings നിർവചിക്കാൻ ' ഒറ്റ ഉദ്ധരണ ചിഹ്നം അല്ലെങ്കിൽ " ഇരട്ട ഉദ്ധരണ ചിഹ്നം ഉപയോഗിക്കുന്നു - അക്ഷരങ്ങൾ, സംഖ്യകൾ, ചിഹ്നങ്ങൾ ഉൾപ്പെടുന്ന ടെക്സ്റ്റ് ഡേറ്റാ സൂക്ഷിക്കുന്നു - variableസിന് string മൂല്യം നിയമിക്കുന്നു വരാനുള്ള ഉപയോഗത്തിനായി - variable നാമങ്ങളിൽ നിന്നു കീഴടങ്ങാതിരിക്കാൻ ഉദ്ധരണികൾ ആവശ്യമാണ് String എഴുതുമ്പോൾ ഉദ്ധരണികൾ ഉപയോഗിക്കുക അല്ലെങ്കിൽ, ജാവാസ്ക്രിപ്റ്റ് അത് variable നാമം എന്നു കരുതും. ### Strings രൂപകൽപ്പന ചെയ്യൽ String manipulation നിങ്ങളുടെ ടെക്സ്റ്റ് ഭാഗങ്ങൾ ചേർക്കാനും, variableസ് ഉൾപ്പെടുത്താനും, പ്രോഗ്രാമിന്റെ നില അനുസരിച്ച് ഗതാഗത ഉള്ളടക്കം സൃഷ്ടിക്കാനും സഹായിക്കുന്നു. ഈ പോലുള്ള സാങ്കേതിക വിദ്യ ടെക്സ്റ്റ് പ്രോഗ്രാമാറ്റിക്ക് ആയി നിർമ്മിക്കാൻ സഹായിക്കുന്നു. സാധാരണയായി, നിങ്ങൾക്ക് പല strings ഉണ്ടാകുമ്പോൾ അവ ചേർക്കണം – ഇതാണ് concatenation എന്നു പറയുന്നു. രണ്ട് അല്ലെങ്കിൽ അതിലധികം സ്ട്രിങ്ങുകൾ concatenate ചെയ്യാനും, അവയെ ചേർക്കാനും, + ഓപ്പറേറ്റർ ഉപയോഗിക്കുക. പടിപടിയായി, സംഭവിക്കുകയാണ്: - + ഓപ്പറേറ്റർ ഉപയോഗിച്ച് നിരവധി സ്ട്രിങ്ങുകൾ ചേർക്കുന്നു - ആദ്യ ഉദാഹരണത്തിൽ സ്ട്രിങ്ങുകൾ സ്പേസുകൾ ഇല്ലാതെ നേരിട്ട് ചേർക്കുന്നു - വായനാസൗകര്യത്തിനായി സ്ട്രിങ്ങിനിടെ സ്‌പേസ് അക്ഷരങ്ങൾ " " ചേർക്കുന്നു - ശരിയായ ഫോർമാറ്റിങ്ങിനായി കോമകൾ പോലുള്ള പദചിഹ്നങ്ങൾ ചേർക്കുന്നു ✅ ജാവാസ്ക്രിപ്റ്റിൽ 1 + 1 = 2 എങ്ങനെ ആയിട്ടും '1' + '1' = 11 ആക്കുന്നു? താളുക. '1' + 1 എങ്കിൽ എന്താകും? ടെംപ്ലേറ്റ് ലിറ്ററലുകൾ എന്നത് സ്ട്രിങ്ങുകൾ ഫോർമാറ്റ് ചെയ്യാനുള്ള മറ്റൊരു മാർഗമാണ്, എന്നാൽ ക്വോട്ടിന്റെ പകരം ബാക്ക്‌ടിക്ക് ഉപയോഗിക്കുന്നു. സാധാരണ ടെക്സ്റ്റല്ലാത്തത് ${ } പ്ലേസ്‌ഹോൾഡറുകളിനുള്ളിടത്ത് ചേർക്കണം. ഇത് സ്ട്രിങ്ങുകൾ ആയിരിക്കാവുന്ന ഏതെല്ലാം വെറിയബിളുകളും ഉൾപ്പെടുന്നു. ഓരോ ഭാഗവും മനസ്സിലാക്കുക: - ടെംപ്ലേറ്റ് ലിറ്ററലുകൾ സൃഷ്ടിക്കാൻ സാധാരണ ക്വോട്ടുകളുടെ പകരം ബാക്ക്‌ടിക്കും ` `` ഉപയോഗിക്കുന്നു - ${} പ്ലേസ്‌ഹോൾഡർ സിന്‍ടാക്സ് ഉപയോഗിച്ച് വേരിയബിൾസ് നേരിട്ട് ഇടുകയാണ് - സ്‌പേസുകൾക്കും ഫോർമാറ്റിങ്ങിനും അക്ഷരശരിയായി സംരക്ഷണം ചെയ്യുന്നു - വേരിയബിൾസുള്ള പരികളാളമായ സ്ട്രിങ്ങുകൾ സൃഷ്ടിക്കാൻ കൂടുതൽ ശുഭ്രമായ മാർഗമാണ് നൽകുന്നത് നിങ്ങൾക്ക് ഏതെന്തെങ്കിലും രീതിയിൽ ഫോർമാറ്റ് ലക്ഷ്യങ്ങൾ നേടാം, എന്നാൽ ടെംപ്ലേറ്റ് ലിറ്ററലുകൾ സ്‌പേസുകളും ലൈൻ ബ്രേക്കുകളും ആദരിച്ചു. ✅ plain string-നു പകരം template literal ഏപ്പോൾ ഉപയോഗിക്കും? ### 🔤 String Mastery Check: എഴുത്ത് മാനേജുമെന്റ് വിശ്വാസം നിങ്ങളുടെ സ്ട്രിംഗ് കഴിവുകൾ വിലയിരുത്തുക: - '1' + '1' ഇതിന് 2 അല്ലാതെ '11' എവിടെനിന്ന് ഉണ്ടാകുന്നു എന്ന് വിശദീകരിക്കാമോ? - സ്ട്രിംഗ് մեթഡ്സിൽ ഏത് വായന സാധ്യമാക്കുന്നത് кремис്തോഹർശകര്: concatenate അല്ലെങ്കിൽ template literals? - സ്ട്രിങ്ങിന്റെ ചുറ്റുമുള്ള ക്വോട്ടുകൾ മറക്കുകയാണെങ്കിൽ എന്ത് സംഭവിക്കും? ### ബൂലിയൻസ് ബൂലിയൻസ് ഏറ്റവും ലളിതമായ ഡാറ്റ ഫോമായി പ്രതിനിധീകരിക്കുന്നു: അവക്ക് രണ്ട് മൂല്യങ്ങളിൽ ഒന്നേയുള്ളൂ – true അല്ലെങ്കിൽ false. ഈ ബൈനറി ലാജിക് സിസ്റ്റം 19-ആം നൂറ്റാണ്ടിൽ ജോർജ് ബൂൽ എന്ന ഗണിതജ്ഞൻ രൂപവത്കരിച്ച ബൂലിയൻ ആൽജാബ്രയിൽ നിന്നാണ് ഉത്ഭവിച്ചത്. വളരെ ലളിതമായിട്ടും, ബൂലിയൻസ് പ്രോഗ്രാം ലാജിക്‌ക്കായി അനിവാര്യമാണ്. ഉപയോക്താവ് ലോഗിൻ ചെയ്തു തുടങ്ങിയോ, ഒരു ബട്ടൺ ക്ലിക്ക് ചെയ്തോ തുടങ്ങിയ ശരത്കാരണങ്ങളുടെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ കോഡ് തീരുമാനങ്ങൾ എടുക്കാൻ അവ കഴിയും. ബൂലിയൻസ് രണ്ട് മൂല്യങ്ങളിലേ ഉള്ളവ മാത്രം: true അല്ലെങ്കിൽ false. ബൂലിയൻസ് ചില ശരത്കരണങ്ങൾ പാലിക്കുമ്പോൾ കോഡിന്റെ ഏതെവിടെ വരികൾ പ്രവർത്തിക്കുമെന്ന് തീരുമാനിക്കാൻ സഹായിക്കുന്നു. പല കേസുകളിലും, operators ബൂലിയൻസ് മൂല്യം നിശ്ചയിക്കാൻ സഹായിക്കുന്നു, നിങ്ങൾ പലപ്പോഴും ഒരു വെറിയബിള്‍ ആരംഭിക്കുകയും അവരുടെ മൂല്യങ്ങൾ ഒരു ഓപ്പറേറ്ററിലൂടെ അപ്ഡേറ്റ് ചെയ്യപ്പെടുന്നത് കാണുകയും ചെയ്യും. മുകളിലുള്ളത്: - ബൂലിയൻ മൂല്യം true സൂക്ഷിക്കുന്ന ഒരു വെറിയബിള്‍ സൃഷ്ടിച്ചു - ബൂലിയൻ മൂല്യം false സൂക്ഷിക്കുന്ന വിധം പ്രദർശിപ്പിച്ചു - ക്വോട്ടുകൾ ഇല്ലാതെ true എന്നും false എന്നും കീവേഡുകൾ ഉപയോഗിച്ചു - ഇവ conditional statements-ൽ ഉപയോഗിക്കാൻ സജ്ജമാക്കി ✅ ഒരു വെറിയബിള്‍ ബൂലിയൻ true ആയി വ്യക്തരൂപം കണ്ടാൽ അതിനെ 'truthy' ആയി പരിഗണിക്കാം. അതിഥിയിൽ, ജാവാസ്ക്രിപ്റ്റിൽ, അവ എല്ലാ മൂല്യങ്ങളും falsy ആയി നിർവ്വചിച്ചിട്ടില്ലെങ്കിൽ truthy ആണ്. ### 🎯 Boolean Logic Check: തീരുമാനവേർതിരിക്കൽ കഴിവുകൾ നിങ്ങളുടെ ബൂലിയൻ മനസ്സിലാക്കൽ പരീക്ഷിക്കുക: - ജാവാസ്ക്രിപ്റ്റിൽ true അല്ലെങ്കിൽ false മാത്രമല്ല, "truthy" കൂടാതെ "falsy" മൂല്യങ്ങൾ എന്തുകൊണ്ട് ഉണ്ട് എന്ന് കരുതുന്നു? - ഇവയിൽ ഏത് falsy ആണ് എന്ന് പ്രവചിക്കാമോ: 0, "0", [], "false"? - പ്രോഗ്രാം ഫ്ലോ നിയന്ത്രണത്തിൽ ബൂലിയൻസ് എങ്ങനെ സഹായകരമായിരിക്കും? --- ## 📊 നിങ്ങളുടെ ഡാറ്റാ ടൈപ്പുകളുടെ ടൂൾകിറ്റ് സംഗ്രഹം ## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀 അടുത്ത ചലഞ്ച് പൂർത്തിയാക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കൂ: വിവരണം: ഈ പാഠത്തിൽ പഠിച്ച എല്ലാ ജാവാസ്ക്രിപ്റ്റ് ഡാറ്റാ ടൈപ്പുകളും പ്രയോഗിച്ച്, യഥാർത്ഥ ലോക ഡാറ്റാ സീനാരിയോകൾ കൈകാര്യം ചെയ്യുന്ന വ്യക്തിഗത വിവര മാനേജറെ നിർമ്മിക്കുക. പ്രോമ്പ്റ്റ്: വ്യക്തിയുടെ പേര് (സ്ട്രിംഗ്), പ്രായം (നമ്പർ), വിദ്യാർഥിയായിരിക്കുന്ന പദവി (ബിูลിയൻ), ഇഷ്ടനിറങ്ങൾ ഒരു അറേ ആയി, പത്തിടം, നഗരം, Zip കോഡ് ഉൾപ്പെടുന്ന അഡ്രസ് ഒബ്ജക്റ്റ് ഉള്ള ഒരു ഉപയോക്തൃ പ്രൊഫൈൽ ഒബ്ജക്റ്റ് ഒരുക്കുക. പ്രൊഫൈൽ വിവരങ്ങൾ പ്രദർശിപ്പിക്കുന്ന ഫങ്ഷനുകളും, വ്യക്തിഗത ഫീൽഡുകൾ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിനുള്ള ഫങ്ഷനുകളും ഉൾക്കൊള്ളിക്കുക. സ്ട്രിംഗ് concatenate, ടെംപ്ലേറ്റ് ലിറ്ററൽ, പ്രായത്തോടുകൂടിയ അക്കമാറ്റങ്ങൾ, വിദ്യാർഥി നിലക്കുള്ള ബൂലിയൻ ലജിക് എന്നിവയുടെ പ്രയോഗം കാണിക്കുക. അജന്റ് മോഡ് ഇവിടെ കൂടി അറിയാം. ## 🚀 ചലഞ്ച് ജാവാസ്ക്രിപ്റ്റിന് ചില പെരുമാറ്റങ്ങളുണ്ട് ഡെവലപ്പർമാരെ അത്ഭുതപ്പെടുത്തുന്ന. ദയവായി ഇങ്ങനെ ഒരു ക്ലാസിക് ഉദാഹരണത്തിൽ പരീക്ഷിക്കൂ: ബ്രൗസർ കോൺസോളിൽ ടൈപ്പ് ചെയ്യുക: let age = 1; let Age = 2; age == Age തുടർന്ന് ഫലം ഓബ്സർവ് ചെയ്യുക. ഇത് false ആണ് തിരിച്ചു നൽകുന്നത് – കാരണം എന്തെന്ന് കണ്ടെത്ത முடியുമോ? ഇത് അറിഞ്ഞിരിക്കേണ്ട ജാവാസ്ക്രിപ്റ്റ് പെരുമാറ്റങ്ങൾക്കുള്ള ഒന്ന് മാത്രം ഉദാഹരണമാണ്. ഈ അർത്ഥം മനസ്സിലാക്കിയാൽ നിങ്ങളുടെ കോഡിംഗ് വിശ്വാസ്യത മെച്ചപ്പെടുത്താനും ഡീബഗ് ചെയ്യാനും സഹായിക്കും. ## ലക്ചറിന് ശേഷം ചോദ്യാവള Post-lecture quiz ## അവലോകനവും സ്വയം പഠനവും ഈ ജാവാസ്ക്രിപ്റ്റ് വ്യായാമങ്ങളുടെ പട്ടിക ഒരു പരീക്ഷണമെടുക്കൂ. നിങ്ങൾ എന്തു പഠിച്ചു? ## അസൈന്മെന്റ് ഡാറ്റാ ടൈപ്പുകൾ പ്രാക്ടീസ് ## 🚀 നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ഡാറ്റാ ടൈപ്പുകളുടെ മാസ്റ്ററി ടൈംലൈൻ ### ⚡ അടുത്ത 5 മിനിറ്റിൽ എന്ത് ചെയ്യാം - [ ] ബ്രൗസർ കോൺസോളിൽ 3 വ്യത്യസ്ത ഡാറ്റാ ടൈപ്പുള്ള വെറിയബിളുകൾ സൃഷ്ടിക്കുക - [ ] ചലഞ്ച് പരീക്ഷിക്കുക: let age = 1; let Age = 2; age == Age എന്തുകൊണ്ട് false ആണ് എന്ന് കണ്ടെത്തുക - [ ] നിങ്ങളുടെ പേര്, ഇഷ്ട നമ്പറില്‍ സ്ട്രിംഗ് concatenate ചെയ്യൽ പ്രാക്ടീസ് ചെയ്യുക - [ ] ഒരു നമ്പർ ഒരു സ്ട്രിംഗ് ചേർത്താൽ എന്ത് സംഭവിക്കും എന്ന് പരീക്ഷിക്കുക ### 🎯 ഈ മണിക്കൂറിൽ നേടുമെന്ത് - [ ] പാഠത്തിനു ശേഷം ചോദ്യാവളം പൂർത്തിയാക്കുകയും സംശയങ്ങൾ അവലോകനം ചെയ്യുക - [ ] രണ്ട് നമ്പറുകൾ കൂട്ടും, കുറയും, ഗുണിക്കുകയും, വിഭജിക്കുകയും ചെയ്യുന്ന സുലഭ കാൽക്കുലേറ്റർ സൃഷ്ടിക്കുക - [ ] ടെംപ്ലേറ്റ് ലിറ്ററൽ ഉപയോഗിച്ച് ഒരു ലളിതം പേരിന്റെ ഫോർമാറ്റർ बनിക്കുക - [ ] == മേൽ === താരതമ്യ ഓപ്പറേറ്റർമാരില്‍ വ്യത്യാസം പഠിക്കുക - [ ] വ്യത്യസ്ത ഡാറ്റാ ടൈപ്പുകൾ തമ്മിൽ പരിവർത്തനം ചെയ്യുന്നതിനുള്ള പ്രാക്ടീസ് ### 📅 നിങ്ങളുടെ ആഴ്ചവാരി ജാവാസ്ക്രിപ്റ്റ് ഫൗണ്ടേഷൻ - [ ] നിറഞ്ഞ ആത്മവിശ്വാസത്തോടെയും സൃഷ്ടിപരമായതുമായ അസൈൻമെന്റ് പൂർത്തിയാക്കുക - [ ] പഠിച്ച എല്ലാ ഡാറ്റാ ടൈപ്പുകളും ഉപയോഗിച്ച് വ്യക്തിഗത പ്രൊഫൈൽ ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുക - [ ] CSS-Tricks-ലെ ജാവാസ്ക്രിപ്റ്റ് വ്യായാമങ്ങൾ ഉപയോഗിച്ച് പ്രാക്ടീസ് ചെയ്യുക - [ ] ബൂലിയൻ ലാജിക്കിനെ ഉപയോഗിച്ച് ലളിതമായ ഫോർം വാലിഡേറ്റർ നിർമ്മിക്കുക - [ ] അറേയും ഒബ്ജക്റ്റും (എന്നും വരാനിരിക്കുന്ന പാഠങ്ങളിൽ വിശദമായി കാണും) ഉപയോഗിച്ച് പരീക്ഷണം നടത്തുക - [ ] ജാവാസ്ക്രിപ്റ്റ് കമ്മ്യൂണിറ്റിയിൽ ചേരുകയും ഡാറ്റാ ടൈപ്പുകളെക്കുറിച്ച് ചോദ്യങ്ങൾ ചോദിക്കുകയും ചെയ്യുക ### 🌟 നിങ്ങളുടെ മാസം നീളുന്ന മാറ്റം - [ ] വലിയ പ്രോഗ്രാമിംഗ് പ്രോജెక్టുകളിൽ ഡാറ്റാ ടൈപ്പ് അറിവ് സംയോജിപ്പിക്കുക - [ ] യാഥാർത്ഥ്യ പ്രയോഗങ്ങളിൽ ഏത് ഡാറ്റാ ടൈപ്പ് എപ്പോഴും വേണം എന്ന് മനസ്സിലാക്കുക - [ ] മറ്റ് തുടക്കക്കാരെ ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ മനസ്സിലാക്കാൻ സഹായിക്കുക - [ ] വിവിധ ഉപയോക്തൃ ഡാറ്റ കൈകാര്യം ചെയ്യുന്ന സ്മോൾ ആപ്ലിക്കേഷൻ നിർമ്മിക്കുക - [ ] ടൈപ്പ് കോപ്ഷൻ, കഠിനമായ സമത്വം പോലുള്ള ഉയർന്ന ഡാറ്റാ ടൈപ്പ് ആശയങ്ങൾ അഭ്യസിക്കുക - [ ] ഡോകുമെന്റേഷന്‍ മെച്ചപ്പെടുത്തലുകൾ ഉൾപ്പെടുത്തി ഓപ്പൺ സോഴ്‌സ് ജാവാസ്ക്രിപ്റ്റ് പ്രോജക്ടുകളിൽ പങ്കാളിയായി ### 🧠 അവസാന ഡാറ്റാ ടൈപ്പ് മാസ്റ്ററി പരിശോധന നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ ആഘോഷിക്കുക: - അവൾ/അവൻ പെരുമാറ്റത്തിന് ഏറ്റവും അത്ഭുതമുള്ള ഡാറ്റാ ടൈപ്പ് ഏതാണ്? - വേരിയബിളുകളെക്കാൾ കോൺസ്റ്റന്റുകൾ എങ്ങനെ വ്യത്യസ്‌തമാണ് എന്ന് ഒരു സുഹൃത്തിനോട് വിശദീകരിക്കാൻ എത്രത്തോളം ആത്മവിശ്വാസമാണ്? - ജാവാസ്ക്രിപ്റ്റ് ടൈപ്പ് സിസ്റ്റത്തെക്കുറിച്ച് കണ്ടെത്തിയ ഏറ്റവും രസകരമായ കാര്യം എന്ത്? - ഈ അടിസ്ഥാനങ്ങളിൽക്കൈയ്യുള്ള യാഥാർത്ഥ്യ ആപ്ലിക്കേഷൻ ഏതാണ് രചനാവിന് ഏറ്റവും അനുയോജ്യം? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> അസാധുതാ കുറിപ്പ്: ഈ പ്രമാണം AI ഭാഷാന്തര സേവനം Co-op Translator ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തിട്ടുണ്ട്. ഞങ്ങൾ യഥാർത്ഥതയ്ക്കായി ശ്രമിക്കുനെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനത്തിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിവരങ്ങൾ ഉണ്ടാകാമെന്ന് മനസ്സിലാക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള原始 പ്രമാണം അനുവദനീയമായ പ്രാമാണിക ഉറവിടമായിരിക്കണം. പ്രധാന വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശിപാർശ ചെയ്യുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നാകുന്ന quaisquer തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾക്ക് ഉത്തരവാദിത്വമില്ല. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ: മെത്തഡുകളും ഫങ്ഷനുകളും

## പ്രീ-ലെക്ചർ ക്വിസ് പ്രി-ലെക്ചർ ക്വിസ് ഒരേ കോഡ് വീണ്ടും വീണ്ടും എഴുതുന്നത് പ്രോഗ്രാമിങ് രംഗത്തെ ഏറ്റവും സാധാരണമായ അസൂയകളിലൊന്നാണ്. ഫങ്ഷനുകൾ ഈ പ്രശ്നം പരിഹരിക്കുന്നു, കോഡ് പുനരുപയോഗയോഗമുള്ള ബ്ലോക്കുകളായി പാക്ക് ചെയ്യാനായി. ഫങ്ഷനുകളെ ആസംബ്ലി ലൈൻ വിപ്ലവമ 만든 ഹെൻറി ഫോർഡിന്റെ സ്റ്റാൻഡേർഡൈസുചെയ്ത് ഭാഗങ്ങളായി കരുതാം – നിങ്ങൾ ഒരു വിശ്വാസയോഗ്യമായ ഘടകം സൃഷ്ടിച്ച ശേഷം, അത് എവിടെയും ആവശ്യമുള്ളപ്പോൾ വീണ്ടും നിർമ്മിക്കാതെ ഉപയോഗിക്കാം. ഫങ്ഷനുകൾ നിങ്ങൾക്ക് കോഡിന്റെ ഭാഗങ്ങൾ കൂട്ടിച്ചേർത്തെടുക്കാനും അവ നിങ്ങളുടെ പ്രോഗ്രാമിലൊട്ടും പുനരുപയോഗിക്കാനും അനുയോജ്യമാണ്. ഒരേ ലോജിക്ക് എല്ലായിടത്തും കോപി-പേസ്റ്റ് ചെയ്യാനിടയുടെ പകരം, ഒരു function സൃഷ്ടിച്ച് ആവശ്യമുള്ളപ്പോൾ അത് വിളിക്കാം. ഈ സമീപനം നിങ്ങളുടെ കോഡ് ക്രമപ്പെടുത്തിയതാക്കുകയും അപ്ഡേറ്റുകൾ എളുപ്പമാക്കുകയും ചെയ്യും. ഈ പാഠത്തിൽ, നിങ്ങൾ നിങ്ങളുടെ സ്വന്തം ഫങ്ഷനുകൾ എങ്ങനെ സൃഷ്ടിക്കാമെന്ന്, അവയ്ക്ക് വിവരം എങ്ങനെ പാസ്സ് ചെയ്യാമെന്നും, അവയിൽ നിന്ന് പ്രയോജനപ്രദമായ ഫലങ്ങൾ എങ്ങനെ ലഭിക്കാമെന്നുമാണ് പഠിക്കുക. ഫങ്ഷനുകളും മെത്തഡുകളും തമ്മിലുള്ള വ്യത്യാസം, ആധുനിക സിന്താക്സ് സമീപനങ്ങൾ, ഫങ്ഷനുകൾ മറ്റൊരു ഫങ്ഷനുകളോടൊത്തുപോകുന്നത് എന്നിവ കാണും. ഈ ആശയങ്ങൾ പടിറ്റ് പടിറ്റ് നിർമ്മിക്കും. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## ഫങ്ഷനുകൾ ഒരു function എന്നത് ഒരു സ്വ-സംയുക്തമായ കോഡ് ബ്ലോക്കാണ്, പ്രത്യേകമായ ഒരു പ്രവൃത്തി നിർവഹിക്കുന്നു. നിങ്ങൾക്ക് ആവശ്യമുള്ളപ്പോൾ എപ്പോൾ വേണമെങ്കിലും പ്രവർത്തിപ്പിക്കാവുന്ന ലൊജിക്ക് ഇതിൽ ഉൾക്കൊള്ളിച്ചിരിക്കുന്നു. പ്രോഗ്രാമിന്റെ വിവിധ ഭാഗങ്ങളിൽ ഒരേ കോഡ് ഭാവത്തിൽ കുറിപെടുത്തുന്നതിന് പകരം, അത് ഒരു ഫങ്ഷനിൽ പാക്ക് ചെയ്ത് ആവശ്യമുള്ളപ്പോൾ ആ ഫങ്ഷനു വിളിക്കുക. ഈ സമീപനം നിങ്ങളുടെ കോഡ് ശുദ്ധവും മെച്ചപ്പെട്ടതുമായതാക്കുകയും അപ്ഡേറ്റുകൾ എളുപ്പമാക്കുകയും ചെയ്യും. നിങ്ങളുടെ കോഡ്‌ബേസിലെ 20 വ്യത്യസ്ത സ്ഥലങ്ങളിൽ വ്യത്യസ്തമായ ലോജിക്ക് മാറ്റേണ്ടിവന്നാൽ അതിന്റെ പരിപാലന വെല്ലുവിളി കണക്കാക്കുക. നിങ്ങളുടെ ഫങ്ഷനുകൾക്ക് വിവരണാത്മകമായ പേരുകൾ നൽകുന്നത് மிக പ്രധാനമാണ്. നല്ല പേരിട്ടു function-ന് അവരുടെ ഉദ്ദേശ്യം വ്യക്തമായി അറിയിക്കാം—cancelTimer() കാണുമ്പോൾ അത് എന്ത് ചെയ്യുമെന്ന് ചെയ്യാണെന്ന് നทันായിപ്പോകും; ഒരു വ്യക്തമായി ലേബൽ ചെയ്ത ബട്ടൺ ബട്ടൺ ക്ലിക്ക് ചെയ്താൽ എന്ത് സംഭവിക്കും എന്ന് വ്യക്തമാക്കുന്നതുപോലെ. ## ഫങ്ഷൻ സൃഷ്ടിക്കുകയും വിളിക്കുകയും ചെയ്യൽ ഒരു function സൃഷ്ടിക്കുന്നത് പരിശോധിക്കാം. സിന്താക്സ് സ്ഥിരതയുള്ള ഒരു മാതൃക പിന്തുടരുന്നു: ഇത് വിശദീകരിക്കാം: - function കീവേർഡ് ജാവാസ്ക്രിപ്റ്റിന് "ഞാൻ ഒരു function സൃഷ്ടിക്കുന്നു!" എന്ന സന്ദേശം നൽകുന്നു - nameOfFunction നിങ്ങളുടെ function-ന് വിവരണാത്മകമായ പേര് നൽകുന്നിടം - പരിതസ്ഥിതികളുള്ള parentheses () ആണ്, അവയ്ക്ക് ഞങ്ങൾ ഉടൻ എത്തും - കർളി ബ്രേസസ് {} function വിളിക്കുമ്പോൾ പ്രവർത്തിക്കുന്ന യഥാർത്ഥ കോഡ് ഉൾക്കൊള്ളുന്നു ഈ പ്രവർത്തനം കാണാൻ ഒരു ലളിതമായ ഗ്രീറ്റിങ് function സൃഷ്ടിക്കാം: ഈ function "Hello, world!" കോൺസോളിൽ പ്രിന്റ് ചെയ്യും. നിങ്ങൾ അത് നിർവചിച്ചശേഷം, ആവശ്യമുള്ളപ്പോൾ എത്രവും ഉപയോഗിക്കാം. നിങ്ങളുടെ function-നെ എക്സിക്യൂട്ട് അല്ലെങ്കിൽ "വിളിക്കാൻ", function നാമം യടുത്ത parentheses-നൊപ്പം എഴുതുക. ജാവാസ്ക്രിപ്റ്റ് function-നെ വിളിക്കാനുമുമ്പോ പിന്നിലോ നിർവചിക്കാൻ അനുവദിക്കുന്നു — ജാവാസ്ക്രിപ്റ്റ് എഞ്ചിൻ പ്രവർത്തനക്രമം കൈകാര്യം ചെയ്യും. ഈ വരി പ്രവർത്തിപ്പിക്കുമ്പോൾ, അത് നിങ്ങളുടെ displayGreeting function-ലുള്ള എല്ലാ കോഡും എക്സിക്യൂട്ട് ചെയ്ത്, വെബ് ബ്രൗസറിന്റെ കോൺസോളിൽ "Hello, world!" പ്രദർശിപ്പിക്കും. നിങ്ങൾ ഈ function ആവർത്തിച്ച് വിളിക്കാവുന്നു. ### 🧠 ഫങ്ഷൻ അടിസ്ഥാന പരിശോധന: നിങ്ങളുടെ ആദ്യ ഫങ്ഷനുകൾ നിർമ്മിക്കൽ ഫങ്ഷനുകളുടെ അടിസ്ഥാനങ്ങൾ എങ്ങനെ നിങ്ങൾക്ക് മനസ്സിലായെന്ന് നോക്കാം: - function നിർവചിക്കുമ്പോൾ മൂന്നൻത്ര curly braces {} ഉപയോഗിക്കുന്നത് എന്തുകൊണ്ടാണ്? - parentheses ഇല്ലാതെ displayGreeting എഴുതിയാൽ എന്തായി? - ഒരേ function പല തവണ വിളിക്കാൻ എന്തുകൊണ്ട് ആഗ്രഹിക്കണം? ### ഫങ്ഷൻ മികച്ച കരുത്തുകൾ നിങ്ങളുടെ ഫങ്ഷനുകൾ മികച്ചതാക്കാൻ പരിഗണിക്കേണ്ട ചില ടിപ്പുകൾ: - ഫങ്ഷനുകൾക്ക് സ്പഷ്‌ടവും വിവരണാത്മകവുമായ പേര് നൽകുക – ഭാവിയിലെ നിങ്ങൾ നന്ദി പറയുമ്! - പലയിടങ്ങളുള്ള പേര് എഴുതുമ്പോൾ camelCase ഉപയോഗിക്കുക (calculateTotal എന്നറിയുന്നത് നല്ലത്, calculate_total-നേക്കാൾ) - ഓരോ ഫങ്ഷനും ഒരു കാര്യത്തിൽ മാത്രം ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ ശ്രമിക്കുക ## function-க்கு വിവരം പാസ്സ് ചെയ്യൽ നമ്മുടെ displayGreeting function പരിമിതമാണ് – എല്ലാവർക്കും "Hello, world!" മാത്രം പ്രദർശിപ്പിക്കുന്നു. പാരാമീറ്ററുകൾ function-നെ കൂടുതൽ ഫ്ലെക്സിബിളും പ്രയോജനപ്രദവുമാക്കുന്നു. പാരാമീറ്ററുകൾ function ഉപയോഗിക്കുന്ന ഓരോ തവണ വ്യത്യസ്ത മൂല്യങ്ങൾ നൽകാനുള്ള പ്ലേസ്‌ഹോൾഡറുകൾ പോലെ ആണ്. ഇതുപോലെ, ഒരേ function ഓരോ വിളുപ്പിലും വ്യത്യസ്ത വിവരങ്ങളോടെ പ്രവർത്തിക്കും. function നിർവചിക്കുമ്പോൾ parentheses-ലുള്ള പാരാമീറ്ററുകൾ comma കൊണ്ട് വേർതിരിച്ച് പട്ടികവത്‌ക്കരിക്കുന്നു: ഓരോ പാരാമീറ്ററും പ്ലേസ്‌ഹോൾഡർ പോലെയാണ് – function വിളിക്കുന്നവർ യഥാർത്ഥ മൂല്യങ്ങൾ നൽകും, അവ ഇവിടെ പൂരിപ്പിക്കും. നമുക്ക് greet ചെയ്യാനുള്ള function നംൗൻ സ്വീകരിക്കാൻ തിരുത്താം: നാം backticks (` `)യും ${}` ഉപയോഗിച്ച് പേര് നേരിട്ട് സന്ദേശത്തിൽ ചേർക്കുന്നതായി ശ്രദ്ധിക്കുക – ഇതിനെ template literal എന്ന് പറയുന്നു, ഉപയോഗിച്ച് വേരിയബിൾസ് ഉള്‍പ്പെടുത്തിയുള്ള സ്ട്രിംഗ് നിർമ്മിക്കാനുള്ള വളരെ സുഖകരമായ മാർഗമാണ്. ഇപ്പോൾ function വിളിക്കുമ്പോൾ, എല്ലാ പേരുകളും പാസ്സ് ചെയ്യാം: ജാവാസ്ക്രിപ്റ്റ് സ്റ്റ്രിംഗ് 'Christopher'-നെ name പാരാമീറ്ററിന് നിയോഗിച്ച് "Hello, Christopher!" എന്ന വ്യക്തിഗത സന്ദേശം സൃഷ്ടിക്കുന്നു. ## ഡിഫോൾട്ട് മൂല്യങ്ങൾ എന്തെങ്കിൽ ചില പാരാമീറ്ററുകൾ നിർബന്ധമല്ലാത്തതാക്കാൻ ആഗ്രഹിച്ചാൽ? അപ്പോൾ ഡിഫോൾട്ട് മൂല്യങ്ങൾ സഹായിക്കും! നമുക്ക് പറയാം ആരും greet ചെയ്യാനുള്ള വാക്ക് തങ്ങൾ ഇച്ഛിച്ചില്ലെങ്കിൽ "Hello" എന്ന ഡിഫോൾട്ട് ഉപയോഗിക്കാം. ഡിഫോൾട്ട് മൂല്യങ്ങൾ variables സൃഷ്ടിക്കുമ്പോൾ നടക്കുന്നതാണ് പോലെ, = ചിഹ്നം ഉപയോഗിച്ച് നൽകാം: ഇവിടെ, name ഇപ്പോഴും ആവശ്യമാണ്, പക്ഷേ salutation-ക്ക് 'Hello' എന്ന ബാക്കപ്പ് മൂല്യം ഉണ്ടാകും, വേറെ greet പ്രവർത്തന ദിവസം നൽകിയില്ലെങ്കിൽ. ഇപ്പോൾ ഈ function നാം എങ്ങനെ രണ്ട് വ്യത്യസ്ത രീതിയിൽ വിളിക്കാമെന്നും കാണാം: ആദ്യ വിളിപ്പിയിൽ, നാം salutation നൽകിയില്ല, അതുകൊണ്ട് ജാവാസ്ക്രിപ്റ്റ് ഡിഫോൾട്ട് "Hello" ഉപയോഗിക്കുന്നു. രണ്ടാം വിളിപ്പിയിൽ, നാം "Hi" personalizado ഉപയോഗിക്കുന്നു. ഇത് function-നെ വ്യത്യസ്ത സന്നിവേശങ്ങളിൽ അനുയോജ്യമായവതാക്കുന്നു. ### 🎛️ പാരാമീറ്ററുകളുടെ കാര്യക്ഷമ പരിശോധന: ഫങ്ഷനുകൾ ഫ്ലെക്സിബിളാക്കൽ പാരാമീറ്ററുകൾ എങ്ങനെ മനസ്സിലായെന്ന് പരിശോദിക്കാം: - പാരാമീറ്ററും argument-ഉം തമ്മിലുള്ള വ്യത്യാസം എന്താണ്? - യഥാർത്ഥ പ്രോഗ്രാമിൽ ഡിഫോൾട്ട് മൂല്യങ്ങൾ എന്തുകൊണ്ട് സഹായകരമാണ്? - പാരാമീറ്ററുകളുടെ എണ്ണംമщие argument-ന്മേൽ കൂടുതലായി പാസ്സ് ചെയ്താൽ എന്ത് സംഭവിക്കുന്നു എന്ന് പ്രവചിക്കാമോ? ## തിരിച്ചുള്ള മൂല്യങ്ങൾ ഇപ്പോൾവരെ നമ്മുടെ ഫങ്ഷനുകൾ സന്ദേശങ്ങൾ പ്രിന്റ് ചെയ്യുകയായിരുന്നു, പക്ഷേ എന്തെങ്കിലും കണക്കാക്കാനും ഫലം തിരിച്ച് നൽകാനും ആഗ്രഹിക്കുന്നുവെങ്കിൽ? അത് return values മുഖേന പറ്റും. Function വെറുതെ പ്രദർശിപ്പിക്കുന്നതിനുപകരം, ഒരു മൂല്യം തിരിച്ച് നൽകുന്നു, അത് നിങ്ങൾ വേരിയബിളിൽ സംഭരിച്ചു പ്രോഗ്രാമിന്റെ മറ്റു ഭാഗങ്ങളിൽ ഉപയോഗിക്കാം. ഒരു മൂല്യം തിരിച്ച് നൽകാൻ, return കീവേർഡ് ഉപയോഗിച്ച് അതിനുശേഷം തിരികെ നൽകേണ്ട സംഖ്യ/വിവരമെന്നു എഴുതുക: മുന്നറിയിപ്പ്: function return സ്റ്റേറ്റ്മെന്റ് കണ്ടാൽ ഉടനെ പ്രവർത്തനം നിർത്തി ആ മൂല്യം function വിളിച്ചവർക്കാണ് അയയ്ക്കുക. നമുക്ക് greet function മാറ്റി സന്ദേശം പ്രിന്റ് ചെയ്യാതെ തിരിച്ച് നൽകാൻ ഒറ്റുവരിപോലെ എഴുതാം: ഇപ്പോൾ function സന്ദേശം നിർമ്മിച്ച് തിരിച്ച് നൽകുന്നു, പ്രിന്റ് ചെയ്യുന്നു അല്ല. തിരികെ ലഭിച്ച മൂല്യത്തെ ഉപയോഗിക്കാൻ, അത് ഒരു വേരിയബിളിൽ സേവ് ചെയ്യാം: ഇപ്പോൾ greetingMessage "Hello, Christopher" വാല്യു ഇട്ടു സൂക്ഷിക്കുന്നു, അത് വെബ്പേജിലോ, ഇമെയിൽ ഉൾപ്പെടെയോ, മറ്റൊരു function-ിനും പാരാമീറ്ററായി ഉപയോഗിക്കാവുന്നുണ്ട്. ### 🔄 തിരികെ വരുന്ന മൂല്യങ്ങൾ സംബന്ധിച്ച പരിശോധന തിരികെ വരുന്ന മൂല്യങ്ങളെ കുറിച്ച് നിങ്ങൾ എന്ത് മനസ്സിലാക്കിയതായി വിലയിരുത്തുക: - function ഒന്ന് return statement കണ്ട ശേഷം ബാക്കിയുള്ള കോഡ് എങ്ങനെ നടക്കും? - മൂല്യങ്ങൾ return ചെയ്യുന്നത് പ്രിന്റ് ചെയ്യുന്നതിനേക്കാൾ എന്തുകൊണ്ട് ഉത്തമമാണ്? - function വ്യത്യസ്ത തരത്തിലുള്ള മൂല്യങ്ങൾ (string, number, boolean) തിരിച്ചു നൽകാമോ? ## functions as parameters for functions ഫങ്ഷനുകൾ മറ്റൊരു ഫങ്ഷന്റെ പാരാമീറ്ററായി നൽകാം. ഇത് ആദ്യം വളരെ സങ്കീർണ്ണമെന്നു തോന്നാമെങ്കിലും, ഇത് ശക്തമായ ഒരു സവിശേഷതയാണ്, ആത്മീയ പ്രോഗ്രാമിംഗ് മാതൃകകൾക്ക് സഹായകമാണിത്. ഈ മാതൃക സാധാരണയായി "ചെയ്താൽ, ഈ ചെയ്യുക" എന്നുള്ള സന്ദേശം നൽകുമ്പോഴാണ് ഉപയോഗിക്കുന്നത്: "ടൈമർ പൂർത്തിയായാൽ ഈ കോഡ് പ്രവർത്തിപ്പിക്കുക" അല്ലെങ്കിൽ "ഉപയോക്താവ് ബട്ടൺ ക്ലിക്ക് ചെയ്യുമ്പോൾ ഈ function-നെ വിളിക്കുക." setTimeout function കാണാം – ഇത് നിർദ്ദിഷ്ട സമയത്തേക്ക് കാത്തിരിപ്പു ചെയ്തു ശേഷം ചില കോഡ് പ്രവർത്തിപ്പിക്കുന്നു. നമുക്ക് അത് എന്ത് കോഡ് പ്രവർത്തിപ്പിക്കണമെന്ന് പറയണം – function പാസ്സ് ചെയ്യാനുള്ള അനുയോജ്യ അവസരം! ഇതുപോലെ ഒരു കോഡ് പരീക്ഷിക്കുക – 3 സെക്കൻഡ് കഴിഞ്ഞാൽ സന്ദേശം കാണും: displayDone function parentheses ഇല്ലാതെ setTimeout-നു പാസ്സ് ചെയ്യുന്നു. നാം function വിളിക്കുന്നില്ല, സെറ്റ് ടൈമൗട്ടിന് ഞങ്ങൾ function കൈമാറി 3 സെക്കന്റ് കഴിഞ്ഞ് വിളിക്കണമെന്നു പറയുന്നു. ### അനാമിത ഫങ്ഷനുകൾ ഒറേ function നിഷ്‌ക്കർഷമായി ഒരിക്കൽ മാത്രം ആവശ്യമുണ്ടെങ്കില്‍, അതിനൊരു പേര് നൽകാതെ നിർവചിക്കാം. കാരണം ഒരിക്കൽ മാത്രമെങ്കിലും ഉപയോഗിക്കുമ്പോൾ function-നെ പേരോടെ പുറത്തെടുക്കുന്നത് കോഡ് അട്ടുപടുക്കാൻ ഇടയാക്കും. ജാവാസ്ക്രിപ്റ്റ് അനോനിമസ് functions നിർമ്മിക്കാൻ അനുവദിക്കുന്നു – പേരില്ലെ function-കൾ, നിങ്ങള്‍ അവ ആവശ്യമായിടത്ത് തന്നെ നിർവചിക്കാൻ കഴിയും. നമുക്ക് ടൈമർ ഉദാഹരണത്തിൽ അനോനിമസ് function ഉപയോഗിച്ച് ആ ഉപായം പരീക്ഷിക്കാം: ഫലം സമാനമാണ്, പക്ഷേ function setTimeout വിളിക്കുമ്പോൾ നേരിട്ട് നിർവചിക്കുന്നു. വേറെ function നിർവചനം വേണ്ടാതിരിക്കും. ### ഫാറ്റ് ആറോ functions ആധുനിക ജാവാസ്ക്രിപ്റ്റിന് functions എഴുതി സ്ക്രിപ്റ്റ് കുറയ്ക്കാനുള്ള ഒരു സംക്ഷിപ്ത മാർഗ്ഗം ഉണ്ട്, ഇതിനെ ആറോ functions എന്നാണ് വിളിക്കുന്നത്. അവയ്ക്ക് => ചിഹ്നം ഉപയോഗിക്കുന്നു (ഒരു ുെറോ പോലെയാണ് – മനസ്സിലായി?), ഡെവലപ്പർമാർക്കിടയിൽ വളരെ ജനപ്രിയമാണ്. ആറോ functions function കീവേർഡ് ഒഴിവാക്കി കൂടുതൽ സംക്ഷിപ്തമായി എഴുതാൻ സഹായിക്കുന്നു. ടൈമർ ഉദാഹരണത്തിനു താഴെ കാണാം: ()-ലാണ് പാരാമീറ്ററുകൾ പോകുന്നത് (ഇവിടം ശൂന്യമാണ്), തുടർന്ന് arrow =>, ഒടുവിൽ curly braces-ൽ function body. ഇത് ഫങ്ഷനിലെ പ്രവർത്തനം എളുപ്പത്തോടെ എത്തിക്കുന്നു. ### ഓരോ വിധേയം എപ്പോൾ ഉപയോഗിക്കണം? ഏത് സമീപനം ഏപ്പോൾ വേണ്ട? ഒരു പ്രായോഗിക മാർഗ്ഗം: function പല തവണ ഉപയോഗിക്കാൻ പോകുമ്പോൾ അതിന് പേര് നൽകുക കൂടാതെ വേർതിരിച്ച് നിർവചിക്കുക. ഒരു പ്രാവശ്യത്തിനായിരിക്കും function എങ്കിൽ അനാമിത function പരിഗണിക്കുക. ആധുനിക ജാവാസ്ക്രിപ്റ്റിൽ arrow functions വ്യത്യസ്ത രീതികളെയാണ് കാണുന്നത്, പക്ഷേ പരമ്പരാഗത function സിന്താക്സും പ്രസക്തമാണ്. ### 🎨 ഫങ്ഷൻ ശൈലികൾ കൊഴുപ്പിക്കൽ പരീക്ഷണം: ശരിയായ സിന്താക്സ് തിരഞ്ഞെടുക്കൽ നിങ്ങളുടെ സിന്താക്സ് അറിവ് പരിശോധിക്കുക: - പരമ്പരാഗത function സിന്താക്സിന് പകരം arrow functions എന്തുകൊണ്ട് ഇഷ്ടപ്പെടാം? - അനാമിത functions പ്രധാന ഗുണം എന്താണ്? - പേര് നൽകിയ function അനാമിതയിൽ നിന്ന് മെച്ചമുള്ള അവസ്ഥ എന്തൊക്കെയാണ്ിള? --- ## 🚀 വെല്ലുവിളി ഫങ്ഷനുകളുടെയും മെത്തഡുകളുടെയും വ്യത്യാസം ഒരു വാക്യത്തിൽ വിശദീകരിക്കാം? ശ്രമിക്കൂ! ## GitHub Copilot Agent വെല്ലുവിളി 🚀 Agent മോഡ് ഉപയോഗിച്ച് താഴെ കൊടുക്കുന്ന വെല്ലുവിളി പൂർത്തിയാക്കുക: വിവരണം: ഈ പാഠത്തിൽ പറഞ്ഞ function ആശയങ്ങൾ ഉൾക്കൊള്ളുന്ന, പാരാമീറ്ററുകൾ, ഡിഫോൾട്ട് മൂല്യങ്ങൾ, return മൂല്യങ്ങൾ, arrow functions എന്നിവയും ഉൾപ്പെടുന്ന ഗണിത functions-യുടെ ഒരു utility ലൈബ്രറി സൃഷ്ടിക്കുക. പ്രോമ്പ്റ്റ്: mathUtils.js എന്ന ജാവാസ്ക്രിപ്റ്റ് ഫയൽ സൃഷ്ടിച്ച് ഇതിൽ താഴെ പറയപ്പെട്ട function-കൾ ഉൾപ്പെടുത്തുക: 1. രണ്ട് പാരാമീറ്ററുകൾ സ്വീകരിച്ച് ആകെ ഗണനം ചെയ്യുന്ന add function 2. ഡിഫോൾട്ട് പാരാമീറ്ററൊപ്പം (രണ്ടാം പാരാമീറ്റർ 1 യായി ഡിഫോൾട്ട്) ഉള്ള multiply function 3. ഒരു സംഖ്യ എടുത്ത് അതിന്റെ വർഗം തിരിച്ചിടുന്ന arrow function square 4. മറ്റൊരു function പാരാമീറ്ററായി സ്വീകരിച്ച് രണ്ട് സംഖ്യകൾക്ക് ആ function ഉപയോഗിക്കുന്ന calculate function 5. ഓരോ function-ഉം യോജിച്ച പരീക്ഷണങ്ങളിൽ വിളിച്ചു പ്രదర్శിക്കുക agent modeയെക്കുറിച്ച് കൂടുതൽ അറിയുക. ## പോസ്റ്റ്-ലെക്ചർ ക്വിസ് പോസ്റ്റ്-ലെക്ചർ ക്വിസ് ## റിവ്യൂ & സ്വയം പഠനം ആറോ functions സംബന്ധിച്ച കൂടുതൽ വായിക്കാൻ mozilla developer പേജ് സന്ദർശിക്കുക, കാരണം കോഡ് ബേസുകളിൽ അവ വ്യാപകമായി ഉപയോഗിക്കുന്നു. ഒരു function എഴുതാനും പിന്നീട് അതിനെ ഈ സിന്താക്സിൽ പുനഃലേഖനം ചെയ്യാൻ പരിശീലിക്കുക. ## അസൈൻമെന്റ് Fun with Functions --- ## 🧰 നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് Functions ടൂള്കിറ്റ് സംഗ്രഹം --- ## 🚀 നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ഫങ്ഷൻ മാസ്ടറി ടൈംലൈൻ ### ⚡ അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്നത് - [ ] നിങ്ങളുടെ ഇഷ്ട സംഖ്യ തിരികെ നൽകുന്ന ലളിതമായ function എഴുതുക - [ ] രണ്ട് പാരാമീറ്ററുകളുള്ള function സൃഷ്ടിച്ച് അവ കൂട്ടാണ് ചെയ്തു നൽകുക - [ ] പരമ്പരാഗത ഫംഗ്ഷനെ ആറോ ഫംഗ്ഷൻ സിന്റാക്സ് ആയി മാറ്റാൻ ശ്രമിക്കുക - [ ] ചേലഞ്ച് ചെയ്യുക: ഫംഗ്ഷനുകളും മെത്തഡുകളും തമ്മിലുള്ള വ്യത്യാസം വിശദീകരിക്കുക ### 🎯 ഈ മണിക്കൂറിൽ നിങ്ങൾ കൈവരിക്കാവുന്ന കാര്യങ്ങൾ - [ ] പോസ്റ്റ്-പാഠം ക്വിസ് പൂർത്തിയാക്കുകയും സംശയാസ്പദമായ ആശയങ്ങൾ പുനപരിശോധിക്കുക - [ ] GitHub Copilot ചേലഞ്ചിൽ നിന്നുള്ള ഗണിത സഹായക ഗ്രന്ഥാലയം നിർമ്മിക്കുക - [ ] മറ്റൊരു ഫംഗ്ഷൻ പാരാമീറ്ററായി ഉപയോഗിക്കുന്ന ഫംഗ്ഷൻ സൃഷ്ടിക്കുക - [ ] ഡീഫോൾട്ട് പാരാമീറ്ററുകളുള്ള ഫംഗ്ഷനുകൾ എഴുതാൻ പരിശീലിക്കുക - [ ] ഫംഗ്ഷൻ റിട്ടേൺ മൂല്യങ്ങളിൽ ടെംപ്ലേറ്റ് ലിറ്ററലുകൾ പരീക്ഷിക്കുക ### 📅 നിങ്ങളുടെ ആഴ്ച പകുതി ഫംഗ്ഷൻ നൈപുണ്യം - [ ] "ഫൺ വിത്ത് ഫംഗ്ഷൻസ്" അസൈൻമെന്റ് സൃഷ്ടിപരമായിട്ടു പൂർത്തിയാക്കുക - [ ] നിങ്ങൾ എഴുതിയ ആവർത്തന കോഡ് പുന: രൂപപ്പെടുത്തുകയും ഉപയോഗിക്കാവുന്ന ഫംഗ്ഷനുകളായി മാറ്റുക - [ ] മാത്രം ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് ഒരു ചെറിയ കാൽക്കുലേറ്റർ നിർമ്മിക്കുക (ഗ്ലോബൽ വേരിയബിളുകൾ ഇല്ലാതെ) - [ ] map() and filter() പോലുള്ള ആരേ മെത്തഡുകളുമായി ആറോ ഫംഗ്ഷനുകൾ പരിശീലിക്കുക - [ ] സാധാരണ ജോലികൾക്കായി ഉപകരണ ഫംഗ്ഷനുകളുടെ കൾക്ഷൻ സൃഷ്ടിക്കുക - [ ] ഹൈയർ-ഓർഡർ ഫംഗ്ഷനുകളും ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗും പഠിക്കുക ### 🌟 നിങ്ങളുടെ മാസത്തിലൊടുവിൽ രൂപാന്തരണം - [ ] ക്ലോസറുകളും സ്കോപ്പും പോലുള്ള അഗ്രഗത ഫംഗ്ഷൻ ആശയങ്ങളിൽ നിപുണത കൈവരിക്കുക - [ ] ഫംഗ്ഷൻ കോംപോസിഷൻ ഗാഢമായി ഉപയോഗിക്കുന്ന പ്രോജക്റ്റ് നിർമ്മിക്കുക - [ ] ഓപ്പൺ സോഴ്‌സിലേക്ക് ഫംഗ്ഷൻ ഡോക്യുമെന്റേഷൻ മെച്ചപ്പെടുത്തലിൽ സംഭാവന നൽകുക - [ ] മറ്റാരെയെങ്കിലും ഫംഗ്ഷനുകളും വ്യത്യസ്ത സിന്റാക്സ് സ്റ്റൈലുകളും പഠിപ്പിക്കുക - [ ] ജാവാസ്ക്രിപ്റ്റിലുള്ള ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗ് പരി Paradigms അന്വേഷിക്കുക - [ ] ഭാവിയിലെ പ്രോജക്റ്റുകൾക്കായി പുന: ഉപയോഗിക്കാവുന്ന വ്യക്തിഗത ഫംഗ്ഷൻ ഗ്രന്ഥാലയം സൃഷ്ടിക്കുക ### 🏆 അंतിമ ഫംഗ്ഷൻസ് ചാമ്പ്യൻ ചെക്ക്-ഇൻ നിങ്ങളുടെ ഫംഗ്ഷൻ നൈപുണ്യം ആഘോഷിക്കൂ: - ഇതുവരെ നിങ്ങൾ സൃഷ്ടിച്ച ഏറ്റവും പ്രയോജനപ്രദമായ ഫംഗ്ഷൻ ഏതാണ്? - ഫംഗ്ഷനുകൾ പഠിച്ചതിലൂടെ കോഡ് ക്രമീകരണത്തെ എങ്ങനെ വ്യത്യസ്തമായി കണ്ടു? - ഏത് ഫംഗ്ഷൻ സിന്റാക്സ് നിങ്ങൾക്ക് ഇഷ്ടമാണ്, എന്തുകൊണ്ട്? - ഒരു യാഥാർത്ഥ്യ പ്രശ്നം ഫംഗ്ഷൻ എഴുതിയാൽ നിങ്ങൾ എങ്ങനെ പരിഹരിക്കും? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ഡിസ്‌ക്ലെയിമർ: ഈ രേഖ AI വിവർത്തന സേവനം Co-op Translator ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നമുക്ക് വിദഗ്ധതയ്ക്കായി ശ്രമിച്ചുവെങ്കിലും, യന്ത്ര വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ അശുദ്ധതകൾ ഉണ്ടാകാനാകും. അതിനാൽ, ഈ രേഖയുടെ യഥാർത്ഥ ഭാഷയിലുള്ള המקורי ദਸਤാവേജിനെ അധികാരമുള്ള ഉറവിടമായി കണക്കാക്കണം. നിർണ്ണായക വിവരങ്ങൾക്കായി, ഒരു പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നതാണു. ഈ വിവർത്തനം ഉപയോഗിച്ച് ഉണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റായ അർത്ഥവത്കരണങ്ങൾക്കോ തെറ്റിദ്ധാരണകൾക്കോ ഞങ്ങൾ ഉത്തരവാദിത്വം വഹിക്കുന്നില്ല. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ: തീരുമാനങ്ങൾ എടുക്കൽ

ആപ്ലിക്കേഷനുകൾ എങ്ങനെ ബുദ്ധിമുട്ടുള്ള തീരുമാനങ്ങൾ എടുക്കുന്നു എന്ന് നിങ്ങൾ ഒരിക്കലെങ്കിലും ആലോചിച്ചിട്ടുണ്ടോ? ഒരു നാവിഗേഷൻ സിസ്റ്റം എങ്ങനെ ഏറ്റവും വേഗതയുള്ള മാർഗം തിരഞ്ഞെടുക്കുന്നു, അല്ലെങ്കിൽ ഒരു തർമോസ്റ്റാറ്റ് എപ്പോൾ ഹീട്ട് ഓണാക്കണം എന്ന് എങ്ങനെ തീരുമാനിക്കുന്നു? ഇത് പ്രോഗ്രാമിംഗിലെ രചനാത്മകമായ തീരുമാനമെടുക്കലിന്റെ അടിസ്ഥാന സാധ്യതയാണ്. ചാൾസ് ബാബേജ് നിർമിച്ച അനലിറ്റിക്കൽ എഞ്ചിനും വ്യത്യസ്ത പൊതു പ്രവർത്തനക്രമങ്ങൾ അനുസരിച്ച് ഞെളിച്ചുവരുത്താൻ രൂപകൽപ്പന ചെയ്തതുപോലെ, ആധുനിക ജാവാസ്ക്രിപ്റ്റ് പ്രോഗ്രാമുകൾ വ്യത്യസ്ത സാഹചര്യങ്ങൾ അനുസരിച്ച് തിരഞ്ഞെടുക്കേണ്ടതുണ്ട്. ഈ ശാഖാവിവരണം കഴിവാണ് സ്റ്റാറ്റിക് കോഡിനെ പ്രതികരണക്ഷമവും ബുദ്ധിമുട്ടുള്ള ആപ്ലിക്കേഷനുകളായി മാറ്റുന്നത്. ഈ പാഠത്തിൽ, പ്രോഗ്രാമുകളിൽ സാന്ദർഭിക ബുദ്ധിമുട്ടുള്ളതിന്റെ അടിസ്ഥാനത്തിൽ രേഖപ്പെടുത്തുന്നത് എങ്ങനെ ചെയ്യാമെന്ന് നിങ്ങൾ പഠിക്കും. നാം സാഹചര്യ പ്രസ്താവനകൾ, താരതമ്യ ഓപ്പറേറ്ററുകൾ, ലജിക്കൽ പ്രകടനങ്ങൾ എന്നിവ പരീക്ഷിക്കും, കോഡ് സാഹചര്യത്തെ നിർണ്ണയിച്ച് അനുയോജ്യമായി പ്രതികരിക്കാൻ സഹായിക്കുന്നു. ## പൂർവ-പാഠം ക്വിസ് Pre-lecture quiz നെറ്റിവായി തീരുമാനങ്ങൾ എടുക്കുക, പ്രോഗ്രാം പ്രവാഹം നിയന്ത്രിക്കുക പ്രോഗ്രാമിംഗിന്റെ അടിസ്ഥാന ഘടകമാണ്. ഈ വിഭാഗം ബൂളിയൻ മൂല്യങ്ങളും സാന്ദർഭിക ബുദ്ധിമുട്ടുള്ളതും ഉപയോഗിച്ച് ജാവാസ്ക്രിപ്റ്റ് പ്രോഗ്രാമുകളുടെ പ്രവർത്തന പാത നിയന്ത്രിക്കുന്നതിനെക്കുറിച്ചു അവതരിപ്പിക്കുന്നു. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## ബൂളിയനുകളുടെ ഒരു സംക്ഷിപ്തമായ പുനരാവർത്തനം നമ്മുടെ മുൻപത്തെ പാഠത്തിൽ നിന്ന് ബൂളിയൻ മൂല്യങ്ങളെ വീണ്ടും അവലോകനം ചെയ്യാം. ഗണിതശാസ്ത്രജ്ഞൻ ജോർജ് ബൂൾ എന്ന പേരിൽ പേരിട്ടിട്ടുള്ള ഈ മൂല്യങ്ങൾ രണ്ടു അവസ്ഥകളെ പ്രതിനിധിക്കുന്നു – true അല്ലെങ്കിൽ false. ഇത് മിഷ്രിതമായോ ഇടത്തരം നിലയോ ഉള്ളതല്ല. ഈ ഇരട്ട മൂല്യങ്ങൾ എല്ലാ കംപ്യൂട്ടേഷണൽ ബുദ്ധിപരമായ അടിത്തറയാവും. നിങ്ങളുടെ പ്രോഗ്രാം എടുക്കുന്ന ഓരോ തീരുമാനവും അവസാനമായി ബൂളിയൻ മൂല്യനിർണയത്തിലേക്ക് അയക്കപ്പെടുന്നു. ബൂളിയൻ വേരിയബിളുകൾ സൃഷ്ടിക്കുന്നത് വളരെ ലളിതമാണ്: ഇത് രണ്ട് വേരിയബിളുകൾ സൃഷ്ടിക്കുന്നു, സാന്ദർഭികമായ ബൂളിയൻ മൂല്യങ്ങളും ചേർന്ന്. ✅ ബൂളിയൻസ് ഇംഗ്ലീഷ് ഗണിതശാസ്ത്രജ്ഞന്‍, фലാസഫർ, ലജിഷൻ ജോർജ് ബൂൾ (1815-1864) ന്റെ പേരിൽ പേരിട്ടതാണ്. ## താരതമ്യ ഓപ്പറേറ്ററുകളും ബൂളിയൻമാരും വ്യാപകമായും നാം ബൂളിയൻ മൂല്യങ്ങൾ കൈയോടെ സജ്ജീകരിക്കുന്നില്ല. പകരം, അവനെ സൂചനകളെ വിലയിരുത്തി സൃഷ്ടിക്കുന്നു: "ഈ സംഖ്യ അതിനേക്കാൾ വലിയതാണോ?" അല്ലെങ്കിൽ "ഈ മൂല്യങ്ങൾ സമാനമോ?" ഫലിതങ്ങളെ കണ്ടെത്താൻ താരതമ്യ ഓപ്പറേറ്ററുകൾ ഉപയോഗിക്കുന്നു. ഔദ്യോഗികമായി മൂല്യങ്ങളെ താരതമ്യം ചെയ്ത് വലതുഭാഗത്തെ കാരണം അനുസരിച്ച് ബൂളിയൻ ഫലങ്ങൾ തിരികെ നൽകുന്നു. ✅ നിങ്ങളുടെ അറിവ് വർദ്ധിപ്പിക്കാൻ, ചില താരതമ്യങ്ങൾ നിങ്ങളുടെ ബ്രൗസറിന്റെ കോൺസോളിൽ എഴുതുകയും പരീക്ഷിക്കുകയും ചെയ്യൂ. വരുന്ന ഫലങ്ങൾ നിങ്ങൾക്ക് പുതിയതായി തോന്നുമോ? ### 🧠 തമത്യ പരിചയക്കുറിപ്പ്: ബൂളിയൻ ലജിക് മനസ്സിലാക്കുക നിങ്ങളുടെ താരതമ്യ ധാരണ പരിശോധിക്കുക: - === (കടുത്ത സമത്വം) യെ സാധാരണ == (സരള സമത്വം) പകരം ഉപയോഗിക്കുന്നത് എന്തുകൊണ്ട്? - 5 === '5' ന്തിൽ എന്ത് ഫലം പ്രതീക്ഷിക്കാം? 5 == '5' എങ്ങനെയാണ്? - !== ന്റേയും != ന്റേയും വ്യത്യാസം എന്താണ്? ## If പ്രസ്താവന if പ്രസ്താവന നിങ്ങളുടെ കോഡിൽ ഒരു ചോദ്യം ചോദിക്കുന്നതു പോലെയാണ്. "ഈ സാന്ദർഭികം true ആണെങ്കിൽ, ഇത് ചെയ്യുക." ജാവാസ്ക്രിപ്റ്റിൽ നിശ്ചയങ്ങൾ എടുക്കാൻ ഏറ്റവും പ്രധാനപ്പെട്ട ഉപകരണം ഇതാണ്. ഇതു പ്രവർത്തിക്കുന്നത് ഈ പ്രകാരം: പരീക്ഷണം പുറംകഴുകിയ ചുറ്റളവിൽ വരുന്നു, അത് true ആണെങ്കിൽ, ജാവാസ്ക്രിപ്റ്റ് കർളി ബ്രേസുകൾക്കകത്തുള്ള കോഡ് പ്രവർത്തിപ്പിക്കും. false ആണെങ്കിൽ, ജാവാസ്ക്രിപ്റ്റ് ആ ബ്ളോക്കിനെല്ലാം മറികടക്കും. നിങ്ങൾ സാധാരണയായി താരതമ്യ ഓപ്പറേറ്ററുകൾ ഉപയോഗിച്ച് ഈ സാഹചര്യങ്ങൾ സൃഷ്ടിക്കും. ഉദാഹരണത്തിൽ നോക്കാം: 1000 >= 800 true ആയി വിലയിരുത്തുന്നുവെന്ന് കൊണ്ടു കോഡ് അവയവം പ്രവർത്തിപ്പിക്കുകയും, കോൺസോളിൽ "Getting a new laptop!" എന്നു പ്രദർശിപ്പിക്കുകയും ചെയ്യും. ## If..Else പ്രസ്താവന എന്ത് സംഭവിക്കും എന്നാലും നിങ്ങൾക്ക് നിങ്ങളുടെ പ്രോഗ്രാം സാന്ദർഭികം false ആണെങ്കിൽ മറ്റൊരു കാര്യം നടത്തണമെങ്കിൽ? അപ്പോൾ else പ്രയോഗിക്കും – ഇത് ഒരു ബാക്കപ്പ് പദ്ധതി പോലെയാണ്. else പ്രസ്താവന നിങ്ങൾക്ക് പറയാനുള്ള മാർഗ്ഗമാണ്: "ഈ സാന്ദർഭികം true അല്ലെങ്കിൽ, പകരം ഇത് ചെയ്യുക." 500 >= 800 false ആകാൻ കാരണം, ജാവാസ്ക്രിപ്റ്റ് ആദ്യത്തെ ബ്ലോക്ക് ഒഴിവാക്കി else ബ്ലോക്ക് പ്രവർത്തിപ്പിക്കും. നിങ്ങൾക്ക് കോൺസോളിൽ "Can't afford a new laptop, yet!" കാണാം. ✅ ഈ കോഡ് നിങ്ങളുടെ ബ്രൗസർ കോൺസോളിൽ പ്രവർത്തിപ്പിച്ചറിയൂ. currentMoney, laptopPrice വേരിയബിളുകളുടെ മൂല്യങ്ങൾ മാറ്റി console.log() ഫലം മാറുന്നതു നോക്കൂ. ### 🎯 If-Else ലജിക് പരിശോധന: ശാഖാക്കാർമങ്ങൾ നിങ്ങളുടെ സാന്ദർഭിക ധാരണ വിലയിരുത്തുക: - currentMoney എന്നാൽ laptopPrice തുല്യം ആണെങ്കിൽ എന്ത് സംഭവിക്കും? - യഥാർത്ഥ ലോകത്തിൽ if-else ലജികിന് പ്രയോജനമുള്ള ഒരു സാഹചര്യം നിങ്ങൾക്ക് പറയാമോ? - ഈ കോഡ് നിരത്തിന് വ്യത്യസ്ത വില പരിധികൾക്കെന്തൊരു വികസനം നിങ്ങൾ ചെയ്യാമെന്ന് നിങ്ങൾ കരുതുന്നു? ## Switch പ്രസ്താവന സമയം ചിലപ്പോൾ മൂല്യം ഒന്ന് പല ഓപ്ഷനുകളുമായി താരതമ്യം ചെയ്യേണ്ടി വരും. നിങ്ങൾ പല if..else പ്രസ്താവനകൾ ചേർക്കാമെങ്കിലും, അത് കൈകാര്യം ചെയ്യാൻ പ്രയാസമേറും. switch പ്രസ്താവന വിവിധ വ്യത്യസ്ത മൂല്യങ്ങൾ കൈകാര്യം ചെയ്യാനുള്ള ക്ലീൻ രൂപമാണ്. ഈ ആശയം പ്രാഥമിക ടെലിഫോൺ എക്സ്ചേഞ്ചുകളിലെ യന്ത്രങ്ങളായ സ്വിച്ച് സിസ്റ്റങ്ങളിൽ പോലെയാണ് – ഒരു ഇൻപുട്ട് മൂല്യം എന്തു വഴി നടത്തണമെന്നും നിശ്ചയിക്കുന്നു. ഇത് എങ്ങനെ ഘടിപ്പിച്ചിരിക്കുന്നു: - ജാവാസ്ക്രിപ്റ്റ് പ്രസ്താവന ഒരിക്കൽ മാത്രം വാലുലേറ്റു ചെയ്യും - ഓരോ caseമും പരിശോധിച്ച് പൊരുത്തം കാണുന്നു - പൊരുത്തമാകുമ്പോൾ ആ കോഡ് ബ്ലോക്ക് പ്രവർത്തിപ്പിക്കും - break ജാവാസ്ക്രിപ്റ്റ് സ്വിച്ച് പൂർത്തിയാക്കുകയും പുറത്തേക്കു പോയും - പൊരുത്തമില്ലായ്മയെങ്കിൽ default (ഉണ്ടെങ്കിൽ) പ്രവർത്തിക്കും ഉദാഹരണത്തിൽ, ജാവാസ്ക്രിപ്റ്റ് dayNumber 2 ആണെന്ന് കണ്ടു, case 2 കണ്ടെത്തി, dayName "Tuesday" ആയി സജ്ജീകരിച്ച് സ്വിച്ച് ൽ നിന്നും അകന്നു. ഫലം? "Today is Tuesday" കോൺസോളിൽ പ്രദർശിപ്പിക്കുന്നു. ✅ ഈ കോഡ് ഇത് ഉൾപ്പെടെ ബ്രൗസർ കോൺസോളിൽ പ്രവർത്തിപ്പിച്ച് പഠിക്കുക. വ്യത്യസ്ത a മൂല്യങ്ങൾ നൽകി കിട്ടുന്ന console.log() വ്യത്യാസം കാണുക. ### 🔄 Switch പ്രസ്താവന കാഴ്ചപ്പാട്: ഒട്ടേറെ ഓപ്ഷനുകൾ നിങ്ങളുടെ Switch ബോധം പരിശോധിക്കുക: - നമുക്ക് break പ്രസ്താവന മറന്നാൽ എന്ത് സംഭവിക്കും? - ഒരുപാട് if-else പ്രസ്താവനകൾക്ക് പകരം നിങ്ങൾ എപ്പോൾ switch ഉപയോഗിക്കും? - നിങ്ങൾ എല്ലാ സാധ്യതകളും പരിഗണിച്ചേക്കും എന്ന് എങ്കിലും എന്തുകൊണ്ട് default കേസ് പ്രയോജനപ്പെടും? ## ലജിക്കൽ ഓപ്പറേറ്ററുകളും ബൂളിയൻ സങ്കീർണ തീരുമാനങ്ങൾ സ്‌നേഹത്തോടെ അനേകം സാന്ദർഭങ്ങൾ ഒരുമിച്ച് പരിശോധിക്കണമെന്നും വരും. ഗണിതജ്ഞർ ലജിക്കൽ എൽജിബ്ര ഉപയോഗിച്ച് ലജിക്കൽ പ്രകടനങ്ങൾ സംയോജിപ്പിച്ചതുപോലെ, പ്രോഗ്രാമിംഗിൽ ലജിക്കൽ ഓപ്പറേറ്ററുകൾ പല ബൂളിയൻ സാഹചര്യങ്ങൾ ബന്ധിപ്പിക്കുന്നു. ഈ ഓപ്പറേറ്ററുകൾ ലളിതമായ true/false മൂല്യനിർണ്ണയങ്ങൾ കൂടുതൽ ഗർഭിതമായ സാന്ദർഭിക ബുദ്ധിമുട്ടുള്ളതായി സംയോജിപ്പിക്കാൻ സഹായിക്കുന്നു. ഈ ഓപ്പറേറ്ററുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് സാന്ദർഭങ്ങൾ സഹായകരമായി കൂട്ടിച്ചേർക്കാം: - AND (&&): രണ്ട് സാന്ദർഭങ്ങളും true ആകണം - OR (||): കുറഞ്ഞത് ഒന്നു true ആകണം - NOT (!): true-നെ false ആക്കും (മറ്റുവഴി) ## ലജിക്കൽ ഓപ്പറേറ്ററുകളോടെയുള്ള സാഹചര്യങ്ങളും തീരുമാനങ്ങളും ഇവയെ പ്രവർത്തനത്തിലുള്ള ഒരു യാഥാർത്ഥ്യ ഉദാഹരണത്തിൽ കാണാം: ഈ ഉദാഹരണത്തിൽ: 20% ഡിസ്കൗണ്ട് വില (640) കണക്കാക്കി, ലഭ്യമായ നിധികൾ മുഴുവൻ വിലയോ ഡിസ്കൗണ്ടും നിറയ്ക്കുമോ എന്ന് പരിശോധിക്കുന്നു. 600 ആണ് കഥയെങ്കിൽ, 640ൽ കുറഞ്ഞത് വേണം, അതിനാൽ സാന്ദർഭം true ആകുന്നു. ### 🧮 ലജിക്കൽ ഓപ്പറേറ്ററുകൾ പരിശോധന: സാന്ദർഭങ്ങൾ സംയോജിപ്പിക്കൽ നിങ്ങളുടെ ലജിക്കൽ ഓപ്പറേറ്റർ ബോധം പരിശോധിക്കുക: - A && B പ്രകടനത്തിൽ A false ആണെങ്കിൽ എന്ത് സംഭവിക്കും? Bൻറെ മൂല്യം വിലയിരുത്തപ്പെടും? - &&, ||, ! – ആ മൂന്ന് ഓപ്പറേറ്ററുകളും ഒരുമിച്ച് ഉപയോഗിക്കേണ്ടതായി വരുന്ന ഒരു സാഹചര്യം പറയാമോ? - !user.isActive ന്റെയും user.isActive !== true ന്റേയും വ്യത്യാസം എന്താണ്? ### നേഗേഷൻ ഓപ്പറേറ്റർ ഒരിക്കൽ എന്തെങ്കിലും true അല്ല എന്ന കാര്യത്തെക്കുറിച്ച് ചിന്തിക്കുക എളുപ്പം ആകാം. ഉദാഹരണത്തിന് "ഉപയോക്താവ് ലോഗിൻ ചെയ്തിട്ടുണ്ടോ?" എന്ന പകരം "ഉപയോക്താവ് ലോഗിൻ ചെയ്തിട്ടില്ലേ?" എന്ന് ചോദിക്കാവുന്നതാണ്. ! ഓപ്പറേറ്റർ അത്തരം ലജിക്ക് വഴിവെക്കുന്നു. ! ഓപ്പറേറ്റർ "viruddha..." എന്നു പറയുന്നതുപോലെയാണ് – എന്തെങ്കിലും true ആണെങ്കിൽ, ! അത് false ആക്കും, വും. ### ടേണറി പ്രകടനങ്ങൾ ലളിതമായ സാന്ദർഭിക നിയുക്തികൾക്കായി, ജാവാസ്ക്രിപ്റ്റ് ടേണറി ഓപ്പറേറ്റർ നൽകുന്നു. ഈ ചുരുക്കമാർഗ്ഗം ഒരേ സ്ട്രിങ്ങിൽ സാന്ദർഭ പ്രകടനം എഴുതാൻ അനുവദിക്കുന്നു, രണ്ടു മൂല്യങ്ങളിൽ ഒന്നിനെതിരായ തീരുമാനത്തിനായി ഉത്തമം. ഇത് ഒരു ചോദ്യം പോലെ വായിക്കുന്നു: "ഈ സാന്ദർഭം true ആണോ? ആണെങ്കിൽ ഈ മൂല്യം ഉപയോഗിക്കുക. അല്ലെങ്കിൽ ആ മൂല്യം ഉപയോഗിക്കുക." താഴെ ഒരു കൂടുതൽ സുസ്ഥിര ഉദാഹരണം: ✅ ഈ കോഡ് കുറേതവണ വായിക്കാൻ ഒരു മിനിറ്റ് മതി. ഈ ഓപ്പറേറ്ററുകൾ എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത് നിങ്ങൾ മനസ്സിലാക്കുന്നുണ്ടോ? ഈ വരി പറയുന്നതു: "firstNumber secondNumber-നെക്കാൾ വലിയതാണോ? ആണെങ്കിൽ, biggestNumber-ൽ firstNumber വയ്ക്കുക. അല്ലെങ്കിൽ secondNumber വയ്ക്കുക." ടേണറി ഓപ്പറേറ്റർ ഈ പരമ്പരാഗത if..else പ്രസ്താവനയെ കുറിച്ച് ചുരുക്കി എഴുതാനുള്ള മാർഗ്ഗമാണ്: രണ്ട് സമീപനങ്ങളും ഒരുപോലെ ഫലം നൽകുന്നു. ടേണറി ഓപ്പറേറ്റർ ലഘുവായി എഴുതാനാകും, എന്നാൽ പരമ്പരാഗത if-else സ്ട്രക്ചർ സങ്കീർണ സാഹചര്യങ്ങളിൽ കൂടുതൽ വായനാസൗകര്യപ്രദമാണ്. --- ## 🚀 ചാലഞ്ച് ലജിക്കൽ ഓപ്പറേറ്ററുകളാൽ എഴുതിയ ഒരു പ്രോഗ്രാം സൃഷ്ടിച്ച്, തുടർന്ന് ടേണറി പ്രകടനം ഉപയോഗിച്ച് അത് വീണ്ടും എഴുതുക. ജൂഡമായി നിങ്ങൾക്ക് ഇഷ്ടപ്പെടുന്ന സിന്താക്സ് എന്താണ്? --- ## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀 താഴെപ്പറയുന്ന ചാലഞ്ച് ബ്രഹത്രീകൃതമാക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കുക: വിവരണം: ഈ പാഠത്തിലെ വിവിധ സാന്ദർഭിക ആശയങ്ങൾ ഉൾക്കൊള്ളുന്ന സമഗ്ര ഗ്രേഡ് കാൽക്കുലേറ്റർ സൃഷ്ടിക്കുക; if-else പ്രസ്താവനകൾ, switch പ്രസ്താവനകൾ, ലജിക്കൽ ഓപ്പറേറ്ററുകൾ, ടേണറി പ്രകടനങ്ങൾ എന്നിവ ഉൾപ്പെടെയുള്ളവ ഉൾക്കൊള്ളണം. പ്രോംപ്റ്റ്: ഒരു വിദ്യാർത്ഥിയുടെ സംഖ്യാത്മക സ്കോർ (0-100) സ്വീകരിച്ച്, താഴെയുള്ള മാനദണ്ഡങ്ങൾ ഉപയോഗിച്ച് അവന്റെ അക്ഷര ഗ്രേഡ് നിർണ്ണയിക്കുന്ന ജാവാസ്ക്രിപ്റ്റ് പ്രോഗ്രാം എഴുതുക: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60-നേക്കാൾ താഴെ ആവശ്യങ്ങൾ: 1. അക്ഷര ഗ്രേഡ് നിർണ്ണയിക്കാൻ if-else പ്രസ്താവന ഉപയോഗിക്കുക 2. വിദ്യാര്‍ത്ഥി പാസ് ചെയ്യുന്നുണ്ടോ എന്ന് പരിശോധിക്കാൻ ലൊജിക്കൽ ഓപ്പറേറ്ററുകൾ ഉപയോഗിക്കുക (grade >= 60) ഒപ്പം ഹൊണേഴ്സ് ഉണ്ടോ എന്നും (grade >= 90) 3. ഓരോ ലെറ്റർ ഗ്രേഡിനും പ്രത്യേക പ്രതികരണം നൽകാൻ switch സ്റ്റേറ്റ്മെന്റ് ഉപയോഗിക്കുക 4. വിദ്യാർത്ഥി അടുത്ത കോഴ്സ് ചെയ്യാൻ യോഗ്യൻ ആകുന്നത് (grade >= 70) ternary ഓപ്പറേറ്റർ ഉപയോഗിച്ച് നിശ്ചയിക്കുക 5. സ്കോർ 0നും 100ന്റെയും ഇടയിൽ ആണ് എന്നത് ഉറപ്പാക്കാൻ ഇൻപുട്ട് വാലിഡേഷൻ ഉൾപ്പെടുത്തുക 59, 60, 89, 90 പോലുള്ള എഡ്ജ് കേസുകൾ അടങ്ങിയ വിവിധ സ്കോറുകൾ ഉപയോഗിച്ച് നിങ്ങളുടെ പ്രോഗ്രാം പരീക്ഷിക്കുക. agent mode സംബന്ധിച്ച് കൂടുതൽ അറിയാൻ ഈ ലിങ്ക് സന്ദർശിക്കൂ. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study ഉപയോക്താവിന് ലഭ്യമായ വിവിധ ഓപ്പറേറ്ററുകൾ MDN-ൽ കൂടുതൽ വായിക്കുക. Josh Comeauയുടെ ആകർഷകമായ operator lookup പരിശോധിക്കുക! ## Assignment Operators --- ## 🧠 നിങ്ങളുടെ തീരുമാനം എടുക്കാനുള്ള ടൂൾകിറ്റ് സംഗ്രഹം --- ## 🚀 നിങ്ങളുടെ JavaScript തീരുമാനം എടുക്കൽ മാസ്റ്ററി ടൈംലൈൻ ### ⚡ അടുത്ത 5 മിനിറ്റിനുള്ളിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്ന കാര്യങ്ങൾ - [ ] ബ്രൗസർ കോൺസോളിൽ താരതമ്യ ഓപ്പറേറ്ററുകൾ പ്രാക്ടീസ് ചെയ്യുക - [ ] നിങ്ങളുടെ പ്രായം പരിശോധിക്കുന്ന ഒരു ലളിതമായ if-else സ്റ്റേറ്റ്മെന്റ് എഴുതുക - [ ] ചാരിത്രിക ഓപ്പറേറ്റർ ഉപയോഗിച്ച് if-else പുനരാഖ്യാനം ചെയ്യാനുള്ള ചാലഞ്ച് പരീക്ഷിക്കുക - [ ] വ്യത്യസ്ത "truthy" ഒപ്പം "falsy" മൂല്യങ്ങൾ ഉപയോഗിച്ച് പരീക്ഷണം നടത്തുക ### 🎯 ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടാൻ കഴിയുന്ന കാര്യങ്ങൾ - [ ] പാഠം കഴിഞ്ഞ് ക്വിസ് പൂർത്തിയാക്കി ആശയക്കുഴപ്പമുള്ള ആശയങ്ങൾ അവലോകനം ചെയ്യുക - [ ] GitHub Copilot ചാലഞ്ചിൽ നിന്ന് സമഗ്ര ഗ്രേഡ് കാൽക്കുലേറ്റർ നിർമ്മിക്കുക - [ ] യാഥാർത്ഥ്യ സാഹചര്യത്തിന് ലളിതമായ തീരുമാന മരം സൃഷ്ടിക്കുക (ഉദാഹരണം: എന്ത് ധരിക്കണമെന്ന് തയാറാക്കൽ) - [ ] ലൊജിക്കൽ ഓപ്പറേറ്ററുകൾ ഉപയോഗിച്ച് നിരവധി ഉൾപ്പെട്ട വ്യവസ്ഥകൾ സംയോജിപ്പിച്ച് പ്രാക്ടീസ് ചെയ്യുക - [ ] വ്യത്യസ്ത ഉപയോഗങ്ങൾക്കായി switch സ്റ്റേറ്റ്മെന്റുകൾ പരീക്ഷിക്കുക ### 📅 നിങ്ങളുടെ ആഴ്ചപ്പിരി ലൊജിക് മാസ്റ്ററി - [ ] സൃഷ്ടിപരമായ ഉദാഹരണങ്ങളോടൊപ്പം ഓപ്പറേറ്ററുകളുടെ അസൈൻമെന്റ് പൂർത്തിയാക്കുക - [ ] വിവിധ നിബന്ധനാ ഘടനകൾ ഉപയോഗിച്ച് ഒരു മിനി ക്വിസ് ആപ്ലിക്കേഷൻ നിർമ്മിക്കുക - [ ] ബഹുഭൂരി ഇൻപുട്ട് നിർദേശങ്ങൾ പരിശോധന ചെയ്യുന്ന ഒരു ഫോർം വാലിഡേറ്റർ സൃഷ്ടിക്കുക - [ ] Josh Comeauയുടെ operator lookup വ്യായാമങ്ങൾ പ്രാക്ടീസ് ചെയ്യുക - [ ] നിലവിലുള്ള കോഡ് കൂടുതൽ യോജിച്ച നിബന്ധനാ ഘടനകൾ ഉപയോഗിച്ച് പുനർക്രമീകരിക്കുക - [ ] പാർശ്വികമായി വിലയിരുത്തൽ(short-circuit evaluation) ഒപ്പം പ്രവര്‍ത്തനക്ഷമതയെക്കുറിച്ചറിയുക ### 🌟 നിങ്ങളുടെ മാസം ദൈർഘ്യമുള്ള മാറ്റം - [ ] സങ്കീർണ്ണമായ ന്യൂസ്റ്റഡ് നിബന്ധനകൾ പഠിച്ച് കോഡ് വായനാസൗകര്യം ഉറപ്പാക്കുക - [ ] പുതിയ അവയവങ്ങൾ ചേർത്ത് sofisticated തീരുമാനമെടുക്കൽ ലൊജിക്ക് അടക്കിയുള്ള ആപ്ലിക്കേഷൻ നിർമ്മിക്കുക - [ ] നിലവിലുള്ള പ്രോജക്ടുകളിൽ നിബന്ധനാ ലൊജിക്കിനെ മെച്ചപ്പെടുത്തുന്നതിലൂടെ ഓപ്പൺ സോഴ്‌സിന് സംഭാവന നൽകുക - [ ] വിവിധ നിബന്ധനാ ഘടനകൾക്കുറിച്ച് മറ്റൊരാളിനെ പഠിപ്പിക്കുക - [ ] നിബന്ധനാ ലൊജിക്കിനുള്ള ഫംഗ്ഷനൽ പ്രോഗ്രാമിംഗ് സമീപനങ്ങൾ അന്വേഷിക്കുക - [ ] നിബന്ധനാ മികച്ച പ്രാക്ടീസുകൾക്കായി വ്യക്തിഗത റഫറൻസ് ഗൈഡ് സൃഷ്ടിക്കുക ### 🏆 അവസാന തീരുമാനം-എടുക്കൽ ചാമ്പ്യൻ ചെക്ക്-ഇൻ നിങ്ങളുടെ ലൊജിക്കൽ ചിന്തന മാപ്പതെടുത്ത് ആഘോഷിക്കൂ: - നിങ്ങൾ സഫലമായി നടപ്പിലാക്കിയ ഏറ്റവും സങ്കീർണ്ണ തീരുമാന ലൊജിക് എന്താണ്? - ഏത് നിബന്ധനാ ഘടന നിങ്ങള്ക്ക് സ്വാഭാവികമായി അനുഭവപ്പെടുന്നു, അതിന്റെ കാരണം എന്താണ്? - ലൊജിക്കൽ ഓപ്പറേറ്ററുകൾ പഠിച്ചതോടെ നിങ്ങളുടെ പ്രശ്നപരിഹാര സമീപനം എങ്ങനെ മാറി? - യഥാർത്ഥ ലോക അപ്ലിക്കേഷനുകളിൽ ഏത് സങ്കീർണ്ണ തീരുമാനം എടുക്കൽ ലൊജിക്ക് കൂടുതൽ പ്രയോജനപ്പെടുത്തും? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> പരാമർശം: ഈ രേഖ AI പരിഭാഷാപരിശോധനാ സേവനം Co-op Translator ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. നൂതനത്വത്തിനായി ഞങ്ങൾ ശ്രമിക്കുന്നുവെങ്കിലും, യന്ത്രത്തിൽ നിന്നുള്ള പരിഭാഷകൾ പിശകുകളോ അസ്ഥിരതകളോ ഉണ്ടായിരിക്കാമെന്നത് ശ്രദ്ധിക്കാൻ ആവശ്യമാണ്. അതിന്റെ സ്വദേശഭാഷയിലുള്ള ഒറിജിനൽ രേഖ പ്രാമാണികമായ ഉറവിടമായി പരിഗണിക്കേണ്ടതാണ്. നിർണ്ണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ആവശ്യമാണെന്ന് ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിക്കുന്നതിൽ നിന്നു സൃഷ്ടിച്ച തെറ്റിദ്ധാരണകളോ വ്യാഖ്യാന പിശകുകളോ ഞങ്ങൾക്ക് ഉത്തരവാദിത്വമില്ല. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ: നിരകളും ലൂപ്പുകളും

## പ്രീ-ലെക്ചർ ക്വിസ് പ്രി-ലെക്ചർ ക്വിസ് വെബ്‌സൈറ്റുകൾ ഷോപ്പിംഗ് കാർട്ട് ഇനങ്ങൾ എങ്ങനെ ട്രാക്ക് ചെയ്യുന്നു അല്ലെങ്കിൽ നിങ്ങളുടെ സ്നേഹിതർ ലിസ്റ്റ് എങ്ങനെ പ്രദർശിപ്പിക്കുന്നു എന്ന് ഒരുപാട് ചിന്തിച്ചു നോക്കിയിട്ടുണ്ടോ? അപ്പോൾ തന്നെ നിരകളും ലൂപ്പുകളും ഉപയോഗിക്കുന്നു. നിരകള്‍ അനേകം വിവരങ്ങൾ നിലനിർത്തുന്ന ഡിജിറ്റൽ കണ്ടെയ്‌നറുകളായി പ്രവർത്തിക്കുന്നു, ലൂപ്പുകൾ ആവർത്തന മുക്തമായി ആ വിവരങ്ങൾ മുഴുവനായി പ്രവര്‍ത്തിപ്പിക്കാൻ സഹായിക്കുന്നു. ഈ രണ്ട് ആശയങ്ങളും ചേർന്ന് നിങ്ങളുടെ പ്രോഗ്രാമുകളിൽ വിവരങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള അടിസ്ഥാനം രൂപപ്പെടുത്തുന്നു. ഓരോ ഘട്ടവും സ്വയം എഴുതുന്നതിൽ നിന്ന് നിങ്ങൾ മികവാർന്ന, കാര്യക്ഷമമായ കോഡ് എഴുതാൻ പഠിക്കും, അതേ സമയം നൂറുകളിൽ അല്ലെങ്കിൽ ആയിരത്തിലധികം ഇനങ്ങൾ വേഗത്തിൽ പ്രോസസ് ചെയ്യാം. പാഠത്തിന്റെ അവസാനത്തേക്ക്, ചെറു ചിലവുകളും ഉപയോഗിച്ച് സമ്പ്രേക്ഷിത വിവര പ്രവർത്തനങ്ങൾ എങ്ങനെ ചെയ്യാമെന്ന് നിങ്ങൾ മനസിലാക്കും. ഈ അനിവാര്യമായ പ്രോഗ്രാമിംഗ് ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്യാം. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## നിരകൾ നിരകൾ ഒരു ഡിജിറ്റൽ ഫയൽ കണ്ടെയ്‍നർ എന്ന് കരുതുക – ഓരോ ഡ്രോയർ കഴിയും ഒറ്റ ഡോക്യുമെന്റ് സൂക്ഷിക്കുന്നതിന് പകരം, നിങ്ങൾക്ക് ബന്ധപ്പെട്ട നിരവധി ഇനങ്ങൾ ഒറ്റ, ക്രമീകരിച്ച കണ്ടെയ്‌നറിൽ ഓർഗനൈസ് ചെയ്യാം. പ്രോഗ്രാമിങ്ങിൽ, നിരകൾ അനേകം വിവരങ്ങൾ ഒരുമിച്ചായി സംരക്ഷിക്കാൻ സഹായിക്കുന്നു. നിങ്ങൾ ഫോട്ടോ ഗാലറി നിർമ്മിക്കുകയായിരിക്കുക, ടു-ഡു ലിസ്റ്റ് മാനേജ് ചെയ്യുകയായിരിക്കുക, അല്ലെങ്കിൽ ഒരു ഗെയിമിലെ ഉയർന്ന സ്കോറുകൾ ട്രാക്ക് ചെയ്യുകയായിരിക്കുക, നിബന്ധനകൾ വിവരങ്ങളുടെ ക്രമീകരണത്തിനായുള്ള അടിസ്ഥാനം നൽകുന്നു. എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് നോക്കാം. ✅ നിരകൾ നമ്മുടെ ചുറ്റുപാടുകളിലൊന്നായി! ഒരു യാഥാർത്ഥ്യ ഉദാഹരണമെന്നാവർത്തനം നിൽക്കൂ, ഉദാഹരണത്തിന് ഒരു സൂര്യപാനൽ നിര? ### നിരകൾ സൃഷ്ടിക്കുന്നത് നിര സൃഷ്ടിക്കൽ വളരെ ലളിതമാണ് – വെറും ചതുരകോണം ബ്രാക്കറ്റുകൾ ഉപയോഗിക്കുക! ഇവിടെ എന്ത് സംഭവിക്കുന്നു? നിങ്ങൾ വെറും ചതുരകോണം ബ്രാക്കറ്റുകൾ [] ഉപയോഗിച്ച് ഒരു ശൂന്യവായ കംടെയ്‌നർ ഉണ്ടാക്കി. ഇത് ശൂന്യമായ ലൈബ്രറി ഷെല്‍ഫ് പോലെ ചിന്തിക്കാം – നിങ്ങൾക്ക് അവിടെ ഏത് പുസ്തകങ്ങൾ ആഗ്രഹിച്ചും ക്രമീകരിക്കാം. നിങ്ങൾക്ക് നിങ്ങളുടെ നിരക്ക് ആരംഭത്തിൽ തന്നെ ആദ്യം മൂല്യങ്ങൾ നൽകാനും കഴിയും: കൂൾ കാര്യം ശ്രദ്ധിക്കേണ്ടത്: - ഒരേ നിരയിൽ വാചകം, സംഖ്യകൾ അല്ലെങ്കിൽ true/false മൂല്യങ്ങൾ ഉൾപ്പെടുത്താം - ഓരോ ഇനവും കോമ ഉപയോഗിച്ച് വേർതിരിക്കുക – എളുപ്പം! - നിരകൾ ബന്ധപ്പെട്ട വിവരങ്ങൾ ഒരുമിച്ചിട്ട് സൂക്ഷിക്കാൻ അനുയോജ്യമാണ് ### നിര ഇൻഡക്സിങ്ങ് ആദ്യം ചിലപ്പോൾ അന്യമായ തോന്നാം: നിരകൾ ഇനങ്ങളെ 0-ആം സ്ഥാനത്ത് നിന്ന് എണ്ണുന്നു, 1-ൽ നിന്ന് അല്ല. ഈ സീറോ അടിസ്ഥാനമുള്ള ഇൻഡക്സിങ് കമ്പ്യൂട്ടർ മെമ്മറിയുടെ പ്രവർത്തന രീതി മുതൽ ഉത്തപ്പൂർത്തിയുളളതാണ് – C പോലുള്ള പ്രോഗ്രാമിംഗ് ഭാഷകളുടെ തുടക്കക്കാലങ്ങളിൽ നിന്നുള്ള മാനദണ്ഡമാണ്. നിരയിലെ ഓരോ സ്ഥാനത്തും അതിന്റെ സ്വന്തം നമ്പർ ഉപയോഗിച്ച് ഇൻഡക്സ് എന്ന് വിളിക്കുന്നു. ✅ നിരകൾ 0-ൽ നിന്ന് ആരംഭിക്കുന്നത് നിങ്ങൾക്ക് അത്ഭുതം തോന്നുന്നുണ്ടോ? ചില പ്രോഗ്രാമിങ് ഭാഷകളിൽ ഇൻഡക്സുകൾ 1-ൽ നിന്ന് ആരംഭിക്കുന്നു. ഇതിന് മേൽ അറിയാനായി വിക്കിപീഡിയയിൽ വായിക്കാം. നിര ഘടകങ്ങൾ ആക്‌സസ് ചെയ്യുക: ഇവിടെ സംഭവിക്കുന്ന കാര്യം വിശദീകരണം: - ഇൻഡക്സ് നമ്പർ ഉപയോഗിച്ച് ചതുരബ്രാക്കറ്റുകാര്യം ഉപയോഗിച്ച്ിച്ച് ഘടകങ്ങൾ ആക്‌സസ് ചെയ്യുന്നു - നിർബന്ധമായ സ്ഥിതിയില്‍ സൂക്ഷിച്ച മൂല്യം തിരികെ നൽകുന്നു - 0-ൽ നിന്ന് എണ്ണൽ ആരംഭിക്കുന്നു, അതിനാൽ ആദ്യ ഘടകത്തിൻ്റെ ഇൻഡക്സ് 0 ആണ് നിര ഘടകങ്ങൾ മാറ്റം വരുത്തുന്നത്: മുകളിൽ ഞങ്ങൾ ചെയ്തതിൻ്റെ വിശദീകരണം: - ഇൻഡക്സ് 4-ൽ තිබുന്ന "റോക്കി റോഡ്" "ബട്ടർ പീക്കൻ" ആയി മാറ്റി - ഇൻഡക്സ് 5-ൽ പുതിയ ഘടകം "കുക്കി ഡോ" ചേർത്തു - നിലവിലെ പരിധിക്ക് മുകളിൽ അധികം മൂല്യങ്ങൾ ചേർക്കുമ്പോൾ നിരയുടെ നീളം സ്വയം വിപുലീകരിക്കുന്നു ### നിര നീളം மற்றும் സാധാരണ രീതികൾ നിരകൾ ഉള്ളടക്ക കാര്യക്ഷമതയ്ക്കായി പ്രയോഗിക്കാൻ ധാരാളം ആന്തരിക ഗുണങ്ങളും രീതികളും നൽകുന്നു. നിരയുടെ നീളം കണ്ടെത്തൽ: പ്രധാņa അറിയേണ്ട കാര്യങ്ങൾ: - നിരയിൽ ഉള്ള ഘടകങ്ങളുടെ മൊത്തം എണ്ണം തിരികെ നൽകുന്നു - ഘടകങ്ങൾ ചേർക്കുന്നതോ അല്ലെങ്കിൽ നീക്കംചെയ്യുന്നതോ ആയപ്പോൾ സ്വയം പുതുക്കപ്പെടുന്നു - ലൂപ്പുകൾക്കും സാധുത പരിശോധനകൾക്കും കൂട്ടിച്ചേർക്കാനുള്ള ഡൈനാമിക് എണ്ണം നൽകുന്നു അവശ്യമായ നിര രീതികൾ: ഈ രീതി പെട്ടെന്ന് മനസ്സിലാക്കുക: - push() ഉപയോഗിച്ച് ചേർക്കുന്നു (അവസാനത്തിൽ) unshift() (ആരംഭത്തിൽ) - pop() ഉപയോഗിച്ച് നീക്കംചെയ്യുന്നു (അവസാനത്തിൽ) shift() ഉപയോഗിച്ച് (ആരംഭത്തിൽ) - indexOf() ഉപയോഗിച്ച് സ്ഥാനം കണ്ടെത്തുന്നു, includes() ഉപയോഗിച്ച് നിലവാരം പരിശോധിക്കുന്നു - നീക്കംചെയ്‌തിരിക്കുന്ന ഘടകങ്ങൾ, സ്ഥാനനമ്ബർ എന്നിവ തിരികെ നൽകുന്നു ✅ സ്വയം ശ്രമിക്കൂ! നിങ്ങളുടെ ബ്രൗസറിന്റെ കോൺസോളിൽ കുറച്ച് നിര സൃഷ്ടിച്ച് അവ പ്രയോഗിച്ച് നോക്കൂ. ### 🧠 നിരമൂലാസ്ഥാനങ്ങൾ പരിശോദനം: നിങ്ങളുടെ ഡാറ്റ ക്രമീകരിക്കൽ നിര മനസ്സിലാക്കൽ പരിശോധിക്കുക: - നിങ്ങൾക്ക് എന്തുകൊണ്ട് നിരകൾ 1-നെക്കാൾ 0-ൽ മുതൽ എണ്ണുന്നത് ഇഷ്ടമാണ്? - നിങ്ങൾ നീലിഭാഗത്തില്ലാത്ത ഇൻഡക്സ് ഉപയോഗിച്ച് ആക്‌സസ് ചെയ്യാൻ ശ്രമിച്ചാൽ (ഉദാഹরণത്തിന് arr[100] 5 ഘടകങ്ങളുള്ള നിരയിൽ) എന്തായിരിക്കും? - നിരകൾ പ്രയോജനപ്പെടുന്ന യാഥാർത്ഥ്യ സാഹചര്യങ്ങൾ മൂന്ന് ചിന്തിക്കാമോ? ## ലൂപ്പുകൾ ചാൾസ് ഡിക്കൻസിന്റെ നോവലുകളിൽ വിദ്യാർത്ഥികൾ slate-ലേക്ക് ആവർത്തിച്ച് വരികൾ എഴുതേണ്ടി വന്ന ശിക്ഷയെപ്പറ്റി ചിന്തിക്കൂ. നിങ്ങൾക്ക് ഒരാൾക്ക് "ഈ വാചകം 100 പ്രാവശ്യം എഴുതുക" എന്നു പറഞ്ഞാൽ അത് സ്വയം സംഭവിച്ചിരുന്നെങ്കിൽ എങ്ങനെ? അങ്ങനെ, ലൂപ്പുകൾ നിങ്ങളുടെ കോഡിനായി ചെയ്യുന്നത്. ലൂപ്പുകൾ ഒരു ക്ഷീണരഹിത സഹായി പോലെയാണ്, ജോലി പിഴച്ചില്ലാതെ ആവർത്തിക്കുന്നു. നിങ്ങൾ ഷോപ്പിംഗ് കാർട്ടിലെ ഓരോ ഇനവും പരിശോധിക്കണം, അല്ലെങ്കിൽ ഓരോ ഫോട്ടോയും ആൽബത്തിലെ പ്രദർശിപ്പിക്കണം എങ്കിൽ, ലൂപ്പുകൾ ആവർത്തനങ്ങൾ കാര്യക്ഷമമായി കൈകാര്യം ചെയ്യുന്നു. ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗത്തിനായി വിവിധ ലൂപ്പ് തരം നൽകുന്നു. ഓരോന്നും നോക്കാം, എപ്പോൾ ഉപയോഗിക്കണമെന്ന് മനസ്സിലാക്കാം. ### ഫോർ ലൂപ്പ് for ലൂപ്പ് ഒരു ടൈമർ സെറ്റ് ചെയ്യുന്നതുപോലെ ആണ് – നമ്മക്ക് എത്ര പ്രാവശ്യം ഒരു കാര്യം ഉണ്ടാകണമെന്ന് നിശ്ചിതമുണ്ട്. അതിനാൽ വളരെ ക്രമീകരിച്ചും മുൻകൂട്ടി പ്രവചിക്കാവുന്നതുമായ രീതിയിലാണ് ഇത്, പ്രത്യേകിച്ച് നിങ്ങൾ നിരകൾ കൈകാര്യം ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ എണ്ണങ്ങളെ കണക്കാക്കുമ്പോൾ. ഫോർ ലൂപ്പ് ഘടന: ഓരോ ഘട്ടവും എന്താണ് സംഭവിക്കുന്നത്: - ആരംഭിക്കുന്നു കൗണ്ടർ വേരിയബിൾ i നെ 0 ആയി - ഓരോ പടിയിലുമ്ബോഴും നിബന്ധന പരിശോധിക്കുന്നു i < 10 - പ്രവർത്തന കോഡ് ബ്ലോക്ക് നിബന്ധനം സത്യമെങ്കിൽ നടപ്പാക്കുന്നു - ഓരോ പടിയിലും i++ ഉപയോഗിച്ച് i 1-ന് കൂട്ടിച്ചേർക്കുന്നു - നിബന്ധനം തള്ളിലായത് വരെ (i 10 ആയപ്പോൾ) നിന്നിരിക്കുന്നു ✅ ബ്രൗസർ കോൺസോളിൽ ഇത് റൺ ചെയ്യൂ. കൗണ്ടറിലെ, നിബന്ധനയിലെ, അല്ലെങ്കിൽ ഇറ്ററേഷൻ എക്സ്പ്രഷനിൽ ചെറിയ മാറ്റങ്ങൾ വരുത്തുമ്പോൾ എന്ത് സംഭവിക്കുന്നു? ഇത് റവേഴ്സ് ഓപ്പറേഷൻ ചെയ്‌താൽ, കണക്കുകൂട്ടൽ കുറവ് ഉണ്ടാക്കാമോ? ### 🗓️ ഫോർ ലൂപ്പ് പ്രാവീണ്യ പരീക്ഷ: നിയന്ത്രിത ആവർത്തനം നിങ്ങളുടെ ഫോർ ലൂപ്പ് മനസിലാക്കൽ വിലയിരുത്തുക: - ഫോർ ലൂപ്പിന്റെ മൂന്ന് ഭാഗങ്ങൾ എന്തെല്ലാം, ഓരോന്നും എന്ത് ചെയ്യുന്നു? - ഒരു നിര പിന്നോട്ടു ദൃശ്യവല്‍ക്കരിക്കാന്‍ എങ്ങനെ ലൂപ്പ് ഉപയോഗിക്കും? - ഇൻക്രീമെന്റ് (i++) മറന്നാൽ എന്ത് സംഭവിക്കും? ### while ലൂപ്പ് while ലൂപ്പ് "ഇത് ചെയ്യിയത് തുടർന്നുപോവുക..." എന്ന പോലെ ആണ് – എത്ര തവണ ഓടുമെന്ന് നിശ്ചയമില്ലെങ്കിലും എപ്പോൾ നിർത്തണമെന്നും അറിയാം. ഒരു ഉപയോക്താവിൽ നിന്നും ശരിയായ ഇൻപുട്ട് വരുമ്പോഴേക്കും ലൂപ്പിൽ നിന്നു നിർത്താനുള്ളതിനും, ഡയറക്ടറിയിൽ നിന്നു സാധനം കണ്ടെത്തുന്നത് വരെയാണ് ഇത് സഹായിക്കുന്നത്. while ലൂപ്പ് സവിശേഷതകൾ: - നിബന്ധനം സത്യമാകുന്ന വരെയാണ് തുടർച്ചയായി ഓടുക - കൗണ്ടർ വേരിയബിൾകൾ മാനുവലായി നിയന്ത്രിക്കണം - ലൂപ്പ് ഓരോ തവണയ്ക്കും മുമ്പ് നിബന്ധനം പരിശോധിക്കും - നിബന്ധനം ഒരിക്കലും തള്ളിലാക്കാതെ വയ്ക്കുമ്പോൾ അനന്ത ലൂപ്പുകൾ ഉണ്ടാകാനുള്ള അപകടം ഈ ഉദാഹരണങ്ങൾ വിശദീകരണം: - ലൂപ്പ് ശരീരത്തിനുള്ളിൽ കൗണ്ടർ മാനേജ്മെന്റ് - അനന്തം ലൂപ്പുകൾ തടയാൻ കൗണ്ടർ കൂട്ടിക്കുന്നതിന്റെ ഉദാഹരണം - ഉപയോക്തൃ ഇൻപുട്ടും ശ്രമ പരിധിയും അടങ്ങിയ സമ്പ്രേക്ഷിത ഉപയോഗം - അനന്തം പ്രവർത്തനങ്ങൾ തടയാൻ സുരക്ഷാ സംവിധാനങ്ങൾ ### ♾️ while ലൂപ്പ് ജ്ഞാനം പരിശോധന: നിബന്ധന അടിസ്ഥാനമായ ആവർത്തനം നിങ്ങളുടെ while ലൂപ്പ് ധാരണ പരിശോധിക്കുക: - while ലൂപ്പുകളിൽ പ്രധാന അപകടം എന്താണ്? - ഫോർ ലൂപ്പിനേക്കാൾ while ലൂപ്പ് എപ്പോൾ തിരഞ്ഞെടുക്കും? - അനന്ത ലൂപ്പുകൾ എങ്ങനെ തടയാനാകും? ### ആധുനിക ലൂപ്പ് മാറ്റുകൾ ജാവാസ്ക്രിപ്റ്റിൽ പുതിയ ലൂപ്പ് വാക്യരചനകൾ ലഭ്യമാണ്, ഇത് നിങ്ങളുടെ കോഡ് കൂടുതൽ വായിക്കാൻ എളുപ്പവും പിശകുകൾ കുറവുമായിരിക്കും. For...of ലൂപ്പ് (ES6+): for...of ന്റെ പ്രധാന ഗുണങ്ങൾ: - ഇൻഡക്സ് മാനേജ്മെന്റ് ഒഴിവാക്കുന്നു, ഒഫ്-ബൈ-വൺ പിശകുകൾ ഒഴിവാക്കുന്നു - നിരയുടെ ഘടകങ്ങൾക്ക് നേരിട്ടുള്ള ആക്‌സസ് നൽകുന്നു - കോഡ് വായനവേഗം മെച്ചപ്പെടുത്തുന്നു, സിന്റാക്‌സ് സങ്കീർണ്ണത കുറയ്ക്കുന്നു forEach രീതി: forEach-നെപ്പറ്റി അറിയേണ്ടത്: - ഓരോ നിര ഘടകത്തിനും ഒരു ഫംഗ്ഷൻ സംപ്രേഷണം ചെയ്യുന്നു - ഘടക മൂല്യവും ഇൻഡക്സും പാരാമീറ്ററുകളായി നൽകുന്നു - ഡിഫോൾട് ലൂപ്പുപോലെ മുൻകാലത്ത് നിർത്താൻ കഴിയില്ല - തിരിച്ചുകൊടുക്കുന്നത് undefined ആണ് (പുതിയ നിര സൃഷ്ടിക്കാറില്ല) ✅ നിങ്ങൾ എന്തുകൊണ്ട് ഫോർ ലൂപ്പ് ഇഷ്ടപ്പെടുക അതോ while ലൂപ്പ്? StackOverflow വിൽ 17K കാണികൾക്ക് ഇതേ പ്രഷ്‌നം ഉണ്ടായിട്ടുണ്ട്, ചില അഭിപ്രായങ്ങളും നിങ്ങൾക്ക് വിഷയത്തിൽതാൽപ്പര്യമുണ്ടാവാം. ### 🎨 ആധുനിക ലൂപ്പ് വാക്യരചന പരിശോധന: ES6+ സ്വീകരിക്കൽ നിങ്ങളുടെ ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ധാരണ വിലയിരുത്തുക: - പരമ്പരാഗത ഫോർ ലൂപ്പുകളോട് താരതമ്യേന for...of ന്റെ ഗുണങ്ങൾ എന്തെല്ലാം? - പരമ്പരാഗത ഫോർ ലൂപ്പ് നിങ്ങൾക്ക് ഇനിയും തെരഞ്ഞെടുക്കേണ്ടതായി വരാനിടയുണ്ടോ? - forEachനും mapനും ഉള്ള വ്യത്യാസം എന്താണ്? ## ലൂപ്പുകളും നിരകളും നിരകളും ലൂപ്പുകളും ചേർന്ന് ശക്തമായ ഡാറ്റ 프로സ്സിങ്ങ് കഴിവുകൾ നൽകുന്നു. ലിസ്റ്റുകൾ പ്രദർശിപ്പിക്കുന്നതിൽ നിന്നും ഗണിതത്തിലെ വിദഗ്ധ പ്രവർത്തനങ്ങൾ വരെയുള്ള പല പ്രോഗ്രാമിംഗ് ജോലി പൂർത്തിയാക്കാൻ ഇത് അടിസ്ഥാനമാണ്. പരമ്പരാഗത നിര പ്രോസസ്സിംഗ്: ഓരോ സമീപനം മനസ്സിലാക്കാം: - ലൂപ്പ് പരിധി നിർണയിക്കാൻ length പ്രോപ്പർട്ടി ഉപയോഗിക്കുന്നു - പരമ്പരാഗത ഫോർ ലൂപ്പിൽ ഇൻഡക്സ് ഉപയോഗിച്ച് ഘടകങ്ങൾ ആക്‌സസ് ചെയ്യുന്നു - for...of ലൂപ്പിൽ നേരിട്ടു ഘടകങ്ങൾ കൈകാര്യം ചെയ്യുന്നു - ഓരോ ഘടകവും ഒരിക്കൽ മാത്രം പ്രോസസ്സ് ചെയ്യുന്നു പ്രായോഗിക ഡാറ്റ പ്രോസസ്സിംഗ് ഉദാഹരണം: ഈ കോഡ് എങ്ങനെ പ്രവർത്തിക്കുന്നു: - കൂട്ടിച്ചേർക്കുന്നതിനുയേർവും കുറഞ്ഞതും ട്രാക്കിങ്ങ് വേരിയബിളുകളായി ആർഭാടിക്കുന്നു - എല്ലായ് ഗ്രേഡ് ഒറ്റ ലൂപ്പിൽ കാര്യക്ഷമമായി പ്രോസസ്സ് ചെയ്യുന്നു - ശരാശരി കണക്കാക്കാൻ മൊത്തം കൂട്ടം ശേഖരിക്കുന്നു - ലൂപ്പ് അന്ത്യത്തിൽ ശരാശരിയും മറ്റ് സ്റ്റാറ്റിസ്റ്റിക്സും കണക്കാക്കുന്നു ✅ നിങ്ങളുടെ സ്വന്തം നിർമിത നിര ബ്രൗസറിന്റെ കോൺസോളിൽ ഉപയോഗിച്ച് പരീക്ഷിക്കുക. --- ## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀 ഈ ചലഞ്ച് പൂർത്തിയാക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കുക: വിവരണം: നിരകളും ലൂപ്പുകളും കൂട്ടിച്ച് ഡാറ്റ വിശകലനം ചെയ്ത് പ്രയോജനപ്രദമായ അറിവുകൾ നൽകുന്ന ഒരു സമഗ്ര ഡാറ്റ പ്രോസസിംഗ് ഫംഗ്ഷൻ നിർമ്മിക്കുക. പ്രോംപ്റ്റ്: analyzeGrades എന്ന ഫംഗ്ഷൻ സൃഷ്ടിക്കുക, ഇത് വിദ്യാർത്ഥികളുടെ നാമവും സ്കോറും ഉള്ള grade ഒബ്ജക്റ്റുകളുടെ നിര സ്വീകരിച്ച്, ഉയർന്ന സ്കോർ, ഏറ്റവും കുറഞ്ഞ സ്കോർ, ശരാശരി സ്കോർ, പാസ്സായവരുടെ എണ്ണം (സ്കോർ >= 70), ശരാശരിയിലധികമുള്ള സ്കോർ നേടുന്ന വിദ്യാർത്ഥികളുടെ പേര് എന്നിവ അടങ്ങിയ ഒരു ഒബ്ജക്റ്റ് തിരികെ നൽകും. നിങ്ങളുടെ പരിഹാരത്തിൽ കുറഞ്ഞത് രണ്ട് വ്യത്യസ്ത ലൂപ്പ് തരം ഉപയോഗിക്കുക. agent mode ന്റെ കുറിച്ച് കൂടുതൽ പഠിക്കാം. ## 🚀 ചലഞ്ച് JavaScript ആധികാരിക ജോലികൾക്ക് പരമ്പരാഗത ലൂപ്പുകളെ പകരം വെയ്ക്കാൻ കഴിയുന്ന നിരവധി ആധുനിക അരേ മെത്തഡുകൾ നൽകുന്നു. forEach, for-of, map, filter, എന്നിവയും reduceയും അന്വേഷിക്കുക. നിങ്ങളുടെ വെല്ലുവിളി: കുറഞ്ഞത് മൂന്ന് വ്യത്യസ്ത അരേ മെത്തഡുകൾ ഉപയോഗിച്ച് വിദ്യാർത്ഥികളുടെ ഗ്രേഡ് ഉദാഹരണം പുനരാലോചിക്കുക. ആധുനിക ജാവാസ്ക്രിപ്റ്റ് സിന്റ്റാക്സുകൾ ഉപയോഗിക്കുമ്പോൾ കോഡ് എത്രത്തോളം ശുദ്ധവും വായിക്കാൻ എളുപ്പവുമാണ് ആകുന്നത് ശ്രദ്ധിക്കുക. ## പോസ്റ്റ്-ലക്ചർ ക്വിസ് Post-lecture quiz ## അവലോകനം & സ്വയംപഠനം ജാവാസ്ക്രിപ്റ്റിലുള്ള അരേസുകളിൽ നിരവധി മെത്തഡുകൾ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, ഇവ ഡാറ്റ മാനിപ്പുലേഷനിലേക്ക് അതിയായ ഉപയോഗപ്രദമാണ്. ഈ മെത്തഡുകൾ വായിക്കുക കൂടാതെ ഏതാനും പരീക്ഷിക്കുക (ഉദാഹരണത്തിന് push, pop, slice, splice) നിങ്ങൾ സൃഷ്ടിച്ച ഒരു അറേയിലൂടെ. ## അസൈൻമെന്റ് Loop an Array --- ## 📊 നിങ്ങളുടെ അറേ & ലൂപ്പ് ടൂൾകിറ്റ് സംക്ഷേപം --- ## 🚀 നിങ്ങളുടെ അറേയും ലൂപുകളും മാസ്റ്ററി ടൈംസ്ലൈൻ ### ⚡ അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്നതുകൾ - [ ] നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന സിനിമകളുടെ അരേ സൃഷ്‌ടിച്ച് പ്രത്യേക ഘടകങ്ങൾ ആക്സസ് ചെയ്യുക - [ ] 1 മുതൽ 10 വരെ എണ്ണിപ്പിക്കുന്ന ഒരു for ലൂപ്പ് എഴുതുക - [ ] പാഠത്തിൽ നിന്നുള്ള ആധുനിക അറേ മെത്തഡുകൾ വെല്ലുവിളി പരീക്ഷിക്കുക - [ ] ബ്രൗസർ കൺസോളിൽ അറേ ഇൻഡെക്സിംഗ് അഭ്യാസം ചെയ്യുക ### 🎯 ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടുവാനുള്ളത് - [ ] പോസ്റ്റ്-ലെഷൻ ക്വിസ് പൂർത്തിയാക്കി ഏതെങ്കിലും പ്രയാസമുള്ള ആശയങ്ങൾ അവലോകനം ചെയ്യുക - [ ] GitHub Copilot വെല്ലുവിളിയിൽ നിന്നുള്ള സമഗ്ര ഗ്രേഡ് വിശകലകൻ നിർമ്മിക്കുക - [ ] വില്പന കാർട്ട് സാദാരണമായി സൃഷ്ടിച്ച് ഇനങ്ങൾ ചേർക്കുകയും നീക്കുകയും ചെയ്യുക - [ ] വ്യത്യസ്ത ലൂപ്പ് തരം പരസ്പരം മാറ്റിത്തുടങ്ങുക - [ ] push, pop, slice, splice പോലുള്ള അറേ മെത്തഡുകൾ പരീക്ഷിക്കുക ### 📅 നിങ്ങളുടെ ആഴ്ചകാല ഡാറ്റ പ്രോസസ്സിങ് യാത്ര - [ ] "Loop an Array" അസൈൻമെന്റ് സൃഷ്ടിപരമായി മെച്ചപ്പെടുത്തുക - [ ] അറേയും ലൂപ്പുകളും ഉപയോഗിച്ച് ടുഡു ലിസ്റ്റ് ആപ്ലിക്കേഷൻ നിർമ്മിക്കുക - [ ] സംഖ്യാത്മക ഡാറ്റയ്ക്ക് ലളിതമായ സ്റ്റാറ്റിസ്റ്റിക്സ് കാൽക്കുലേറ്റർ നിർമ്മിക്കുക - [ ] MDN അറേ മെത്തഡുകൾ അഭ്യാസം ചെയ്യുക - [ ] ഫോട്ടോ ഗ്യാലറി അല്ലെങ്കിൽ മ്യൂസിക് പ്ലേലിസ്റ്റ് ഇന്റർഫേസ് സൃഷ്ടിക്കുക - [ ] map, filter, reduce എന്നിവ ഉപയോഗിച്ച് ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗ് വിശദമായി മനസിലാക്കുക ### 🌟 നിങ്ങളുടെ മാസഘട്ടം പരിവർത്തനം - [ ] അസംഖ്യ അറേ പ്രവർത്തനങ്ങളും പ്രകടന മെച്ചപ്പെടുത്തലുകളും പരിചയപ്പെടുക - [ ] പരിപൂർണ ഡാറ്റ ദൃശ്യമാനം ഡാഷ്ബോർഡ് നിർമ്മിക്കുക - [ ] ഡാറ്റ പ്രോസസ്സിങ് ഉൾപ്പെട്ട ഓപ്പൺ സോഴ്‌സ് പ്രോജക്റ്റുകളിൽ സംഭാവന നൽകുക - [ ] പ്രായോഗിക ഉദാഹരണങ്ങളോടെ മറ്റൊരാളെ അറേയും ലൂപ്പുകളും പഠിപ്പിക്കുക - [ ] പുനരുപയോഗയോഗ്യമാകുന്ന ഡാറ്റ പ്രോസസ്സിംഗ് ഫങ്ഷനുകളുടെ വ്യക്തിഗത ലൈബ്രറി സൃഷ്ടിക്കുക - [ ] അറേയുടെ അടിസ്ഥാനത്തിൽ ഡാറ്റാ ഘടനകളും ആലഗോരിതങ്ങളും പഠിക്കുക ### 🏆 അവസാന ഡാറ്റ പ്രോസസ്സിങ് ചാമ്പ്യൻ ചെക്കിൻ നിങ്ങളുടെ അറേയും ലൂപ്പുകളും മാസ്റ്ററിയെ ആഘോഷിക്കുക: - യാഥാർത്ഥ ലോക ഉപയോക്തൃപ്രയോഗങ്ങൾക്ക് ഏറ്റവും പ്രയോജനപ്പെട്ട അറേ പ്രവർത്തനം ഏതാണ്? - ഏത് ലൂപ്പ് തരം നിങ്ങൾക്ക് ഏറ്റവും സ്വാഭാവികമായാണ് തോന്നുന്നത്, കാരണം എന്താണ്? - അറേയും ലൂപ്പുകളും മനസിലാകുന്നതിലൂടെ നിങ്ങളുടെ ഡാറ്റ ക്രമീകരണ സമീപനം എങ്ങനെ മാറി? - അടുത്തതായി കൈകാര്യം ചെയ്യാൻ ആഗ്രഹിക്കുന്ന സങ്കീർണ്ണ ഡാറ്റ പ്രോസസ്സിങ് പ്രവൃത്തി ഏതാണ്? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> വിവരണം: ഈ രേഖ AI വിവർത്തന സേവനം Co-op Translator ഉപയോഗിച്ച് വിവർത്തനം ചെയ്‌തതാണ്. നാം ശുദ്ധതയ്ക്കായി ശ്രമിക്കുന്നിട്ടും, യാന്ത്രിക വിവർത്തനങ്ങളിൽ പിശകുകളും തെറ്റുകളും ഉണ്ടാകാവുന്നതാണ്. അതിനാൽ, അടിസ്ഥാന ഭാഷയിലുള്ള പ്രമാണം സത്യസന്ധമായ ഉറവിടമായി കണക്കാക്കണം. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ഉപയോഗിക്കേണ്ടതാണ്. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന യാതൊരു തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

जावास्क्रिप्टची ओळख

जावास्क्रिप्ट ही वेबची भाषा आहे. या चार धड्यांमध्ये, तुम्ही याचे मूलभूत ज्ञान शिकाल. ### विषय 1. व्हेरिएबल्स आणि डेटा प्रकार 2. फंक्शन्स आणि मेथड्स 3. जावास्क्रिप्टसह निर्णय घेणे 4. अॅरेज आणि लूप्स ### श्रेय हे धडे ♥️ सह लिहिले आहेत जॅस्मिन ग्रीनवे, क्रिस्टोफर हॅरिसन आणि क्रिस नॉरिंग यांच्याकडून. अस्वीकरण: हा दस्तऐवज AI भाषांतर सेवा Co-op Translator चा वापर करून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपया लक्षात घ्या की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील मूळ दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.

web,development

JavaScript मूलभूत गोष्टी: डेटा प्रकार

डेटा प्रकार हे JavaScript मधील मूलभूत संकल्पनांपैकी एक आहेत, जे तुम्ही लिहिलेल्या प्रत्येक प्रोग्राममध्ये तुम्हाला भेटतील. डेटा प्रकारांना अलेक्झांड्रियातील प्राचीन ग्रंथालयातील फाइलिंग सिस्टमसारखे समजून घ्या – त्यांनी कविता, गणित आणि ऐतिहासिक नोंदी असलेल्या स्क्रोल्ससाठी विशिष्ट जागा ठेवल्या होत्या. JavaScript माहिती वेगवेगळ्या प्रकारच्या डेटासाठी वेगवेगळ्या श्रेणींमध्ये अशाच प्रकारे आयोजित करते. या धड्यात, आपण JavaScript कार्य करण्यासाठी मुख्य डेटा प्रकारांचा अभ्यास करू. तुम्ही संख्या, मजकूर, खरे/खोटे मूल्ये हाताळण्यास शिकाल आणि योग्य प्रकार निवडणे तुमच्या प्रोग्रामसाठी का आवश्यक आहे हे समजून घ्याल. सुरुवातीला हे संकल्पना थोड्या गोंधळात टाकणाऱ्या वाटू शकतात, परंतु सरावाने, त्या सहजपणे समजतील. डेटा प्रकार समजून घेणे JavaScript मधील इतर सर्व गोष्टी अधिक स्पष्ट करेल. जसे की वास्तुविशारदांना कॅथेड्रल बांधण्यापूर्वी वेगवेगळ्या बांधकाम साहित्याचा अभ्यास करावा लागतो, तसेच हे मूलभूत गोष्टी तुम्ही पुढे जे काही तयार कराल त्यासाठी आधार देतील. ## प्री-लेक्चर क्विझ प्री-लेक्चर क्विझ हा धडा JavaScript च्या मूलभूत गोष्टींचा समावेश करतो, ही भाषा वेबवर संवाद साधण्यासाठी वापरली जाते. [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript मधील Variables") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript मधील डेटा प्रकार") चला variables आणि त्यामध्ये असलेल्या डेटा प्रकारांपासून सुरुवात करूया! ## Variables प्रोग्रामिंगमध्ये variables हे मूलभूत घटक आहेत. जसे की मध्ययुगीन अल्केमिस्ट्सने वेगवेगळ्या पदार्थांसाठी लेबल असलेल्या जार्सचा वापर केला, तसेच variables तुम्हाला माहिती साठवण्याची आणि त्याला वर्णनात्मक नाव देण्याची परवानगी देतात जेणेकरून तुम्ही नंतर त्याचा संदर्भ घेऊ शकता. कोणाचे वय लक्षात ठेवायचे आहे? age नावाच्या variable मध्ये साठवा. वापरकर्त्याचे नाव ट्रॅक करायचे आहे? userName नावाच्या variable मध्ये ठेवा. JavaScript मध्ये variables तयार करण्यासाठी आधुनिक दृष्टिकोनावर आपण लक्ष केंद्रित करू. तुम्ही येथे शिकाल त्या तंत्रांमध्ये भाषा उत्क्रांती आणि प्रोग्रामिंग समुदायाने विकसित केलेल्या सर्वोत्तम पद्धतींचा समावेश आहे. Variable तयार करणे आणि declare करणे खालील syntax मध्ये आहे [keyword] [name]. हे दोन भागांपासून बनलेले आहे: - Keyword. बदलू शकणाऱ्या variables साठी let वापरा, किंवा कायमस्वरूपी राहणाऱ्या मूल्यांसाठी const वापरा. - Variable name, हे एक वर्णनात्मक नाव आहे जे तुम्ही स्वतः निवडता. ✅ ES6 मध्ये let keyword सादर केले गेले आणि तुमच्या variable ला तथाकथित _block scope_ देते. let किंवा const वापरण्याची शिफारस केली जाते, जुन्या var keyword च्या ऐवजी. आपण पुढील भागांमध्ये block scopes अधिक सविस्तरपणे कव्हर करू. ### कार्य - variables सोबत काम करणे 1. Variable declare करा. चला आपला पहिला variable तयार करूया: ```javascript let myVariable; ``` याने काय साध्य होते: - हे JavaScript ला myVariable नावाचे एक स्टोरेज स्थान तयार करण्यास सांगते - JavaScript या variable साठी मेमरीमध्ये जागा वाटप करते - सध्या या variable ला कोणतेही मूल्य नाही (undefined) 2. त्याला एक मूल्य द्या. आता आपल्या variable मध्ये काहीतरी ठेऊया: ```javascript myVariable = 123; ``` Assignment कसे कार्य करते: - = ऑपरेटर आमच्या variable ला 123 मूल्य असाइन करते - variable आता undefined ऐवजी हे मूल्य ठेवते - तुम्ही तुमच्या कोडमध्ये myVariable वापरून या मूल्याचा संदर्भ घेऊ शकता > टीप: या धड्यात = चा वापर "assignment operator" म्हणून केला जातो, जो variable ला मूल्य सेट करण्यासाठी वापरला जातो. याचा समानतेचा अर्थ नाही. 3. स्मार्ट पद्धतीने करा. प्रत्यक्षात, चला त्या दोन चरणांना एकत्र करूया: ```javascript let myVariable = 123; ``` हा दृष्टिकोन अधिक कार्यक्षम आहे: - तुम्ही एकाच विधानात variable declare आणि मूल्य असाइन करत आहात - हे विकसकांमध्ये मानक पद्धत आहे - कोडची लांबी कमी करते आणि स्पष्टता राखते 4. तुमचे मन बदला. जर आपल्याला वेगळी संख्या साठवायची असेल तर काय? ```javascript myVariable = 321; ``` Reassignment समजून घेणे: - variable आता 123 ऐवजी 321 ठेवते - पूर्वीचे मूल्य बदलले जाते – variables एकावेळी फक्त एकच मूल्य साठवतात - let ने घोषित केलेल्या variables ची ही बदलण्याची क्षमता मुख्य वैशिष्ट्य आहे ✅ प्रयत्न करा! तुम्ही तुमच्या ब्राउझरमध्ये JavaScript लिहू शकता. ब्राउझर विंडो उघडा आणि Developer Tools मध्ये जा. कन्सोलमध्ये तुम्हाला एक prompt सापडेल; let myVariable = 123 टाइप करा, return दाबा, नंतर myVariable टाइप करा. काय होते? लक्षात ठेवा, तुम्ही पुढील धड्यांमध्ये या संकल्पनांबद्दल अधिक शिकाल. ### 🧠 Variables Mastery Check: आरामदायक होणे चला पाहूया तुम्ही variables बद्दल कसे वाटत आहात: - तुम्ही variable declare करणे आणि assign करणे यातील फरक स्पष्ट करू शकता का? - जर तुम्ही variable declare करण्यापूर्वी वापरण्याचा प्रयत्न केला तर काय होते? - तुम्ही variable साठी let ऐवजी const कधी निवडाल? ## Constants कधी कधी तुम्हाला अशी माहिती साठवायची असते जी प्रोग्राम चालू असताना कधीही बदलू नये. Constants म्हणजे गणितीय तत्त्वांसारखे आहेत जे युक्लिडने प्राचीन ग्रीस मध्ये स्थापन केले – एकदा सिद्ध आणि दस्तऐवजीकरण केल्यानंतर, ते सर्व भविष्यातील संदर्भासाठी निश्चित राहिले. Constants variables प्रमाणेच कार्य करतात, परंतु एक महत्त्वाचे बंधन आहे: एकदा तुम्ही त्यांचे मूल्य असाइन केले की, ते बदलले जाऊ शकत नाही. ही स्थिरता तुमच्या प्रोग्राममधील महत्त्वाच्या मूल्यांमध्ये चुकून बदल होण्यापासून प्रतिबंधित करते. Constant च्या declaration आणि initialization चा variable प्रमाणेच विचार केला जातो, फक्त const keyword चा अपवाद वगळता. Constants सामान्यतः सर्व uppercase अक्षरांमध्ये घोषित केले जातात. या कोडने काय करते: - एक constant तयार करते ज्याचे नाव MY_VARIABLE आहे आणि मूल्य 123 आहे - Uppercase naming convention चा constants साठी वापर करते - भविष्यातील कोणतेही बदल प्रतिबंधित करते या मूल्यावर Constants साठी दोन मुख्य नियम आहेत: - तुम्हाला त्यांना लगेच मूल्य द्यावे लागेल – रिक्त constants परवानगी नाही! - तुम्ही ते मूल्य कधीही बदलू शकत नाही – जर तुम्ही प्रयत्न केला तर JavaScript एक त्रुटी फेकते. याचा अर्थ काय आहे ते पाहूया: साधे मूल्य - खालील गोष्ट परवानगी नाही: ```javascript const PI = 3; PI = 4; // परवानगी नाही ``` तुम्हाला काय लक्षात ठेवायचे आहे: - पुन्हा असाइन करण्याचा प्रयत्न केल्यास त्रुटी येईल - महत्त्वाच्या मूल्यांना चुकून बदलण्यापासून संरक्षण देते - मूल्य प्रोग्राममध्ये सातत्याने राहते याची खात्री करते Object reference संरक्षित आहे - खालील गोष्ट परवानगी नाही: ```javascript const obj = { a: 3 }; obj = { b: 5 } // परवानगी नाही ``` या संकल्पना समजून घेणे: - संपूर्ण object बदलण्यापासून प्रतिबंधित करते - मूळ object च्या reference चे संरक्षण करते - मेमरीमध्ये object ची ओळख कायम ठेवते Object value संरक्षित नाही - खालील गोष्ट परवानगी आहे: ```javascript const obj = { a: 3 }; obj.a = 5; // परवानगी आहे ``` येथे काय होते ते समजून घेणे: - Object च्या property value बदलते - समान object reference ठेवते - दर्शवते की object contents बदलू शकतात परंतु reference स्थिर राहते > टीप, const म्हणजे reference पुनः असाइन करण्यापासून संरक्षित आहे. मूल्य _immutable_ नाही आणि बदलू शकते, विशेषतः जर ते object सारखे जटिल construct असेल. ## डेटा प्रकार JavaScript माहिती वेगवेगळ्या श्रेणींमध्ये आयोजित करते ज्याला डेटा प्रकार म्हणतात. ही संकल्पना प्राचीन विद्वानांनी ज्ञान वर्गीकृत करण्याच्या पद्धतीशी जुळते – अरिस्टॉटलने वेगवेगळ्या प्रकारच्या विचारसरणीमध्ये फरक केला, हे जाणून की तर्कशास्त्रीय तत्त्वे कविता, गणित आणि नैसर्गिक तत्त्वज्ञानावर समान रीतीने लागू केली जाऊ शकत नाहीत. डेटा प्रकार महत्त्वाचे आहेत कारण वेगवेगळ्या प्रकारच्या माहितीवर वेगवेगळ्या प्रकारचे ऑपरेशन्स कार्य करतात. जसे तुम्ही एखाद्या व्यक्तीच्या नावावर गणित करू शकत नाही किंवा गणितीय समीकरणाचे वर्णमालानुसार वर्गीकरण करू शकत नाही, तसेच JavaScript प्रत्येक ऑपरेशनसाठी योग्य डेटा प्रकार आवश्यक आहे. हे समजून घेणे त्रुटी टाळते आणि तुमचा कोड अधिक विश्वासार्ह बनवते. Variables अनेक प्रकारच्या मूल्ये साठवू शकतात, जसे की संख्या आणि मजकूर. या विविध प्रकारच्या मूल्यांना डेटा प्रकार म्हणून ओळखले जाते. डेटा प्रकार सॉफ्टवेअर विकासाचा महत्त्वाचा भाग आहे कारण यामुळे विकसकांना कोड कसा लिहायचा आणि सॉफ्टवेअर कसे चालवायचे यावर निर्णय घेण्यास मदत होते. याशिवाय, काही डेटा प्रकारांमध्ये अशी अनोखी वैशिष्ट्ये असतात जी मूल्यामध्ये अतिरिक्त माहिती रूपांतरित किंवा काढण्यास मदत करतात. ✅ डेटा प्रकारांना JavaScript डेटा प्रिमिटिव्ह्स असेही म्हणतात, कारण ते भाषेद्वारे प्रदान केलेले सर्वात कमी-स्तरीय डेटा प्रकार आहेत. 7 प्रिमिटिव्ह डेटा प्रकार आहेत: string, number, bigint, boolean, undefined, null आणि symbol. प्रत्येक प्रिमिटिव्ह काय दर्शवते याची कल्पना करण्यासाठी एक मिनिट घ्या. zebra म्हणजे काय? 0 कसे आहे? true? ### Numbers Numbers हे JavaScript मधील सर्वात सोपे डेटा प्रकार आहेत. तुम्ही 42 सारख्या पूर्णांकांवर काम करत असाल, 3.14 सारख्या दशांशांवर किंवा -5 सारख्या नकारात्मक संख्यांवर, JavaScript त्यांना एकसमानपणे हाताळते. आपल्या पूर्वीच्या variable ला लक्षात ठेवा? आपण साठवलेले 123 प्रत्यक्षात एक number डेटा प्रकार होते: महत्त्वाचे वैशिष्ट्ये: - JavaScript आपोआप संख्यात्मक मूल्ये ओळखते - तुम्ही या variables सह गणितीय ऑपरेशन्स करू शकता - कोणत्याही प्रकारची स्पष्ट प्रकार घोषणा आवश्यक नाही Variables सर्व प्रकारच्या संख्यांना साठवू शकतात, ज्यामध्ये दशांश किंवा नकारात्मक संख्या समाविष्ट आहे. Numbers arithmetic operators सह वापरले जाऊ शकतात, जे पुढील विभागात कव्हर केले आहे. ### Arithmetic Operators Arithmetic operators तुम्हाला JavaScript मध्ये गणितीय गणना करण्याची परवानगी देतात. हे ऑपरेटर शतकानुशतके गणितज्ञांनी वापरलेल्या तत्त्वांचे अनुसरण करतात – अल-ख्वारिज्मी सारख्या विद्वानांच्या कार्यांमध्ये दिसणारे समान चिन्ह, ज्यांनी बीजगणितीय संकेतन विकसित केले. ऑपरेटर पारंपरिक गणिताप्रमाणे कार्य करतात: बेरीजसाठी प्लस, वजाबाकीसाठी मायनस, इत्यादी. गणितीय कार्ये करताना वापरण्यासाठी अनेक प्रकारचे ऑपरेटर आहेत, आणि त्यापैकी काही येथे सूचीबद्ध आहेत: ✅ प्रयत्न करा! तुमच्या ब्राउझरच्या कन्सोलमध्ये एक arithmetic operation करून पहा. परिणाम तुम्हाला आश्चर्यचकित करतो का? ### 🧮 Math Skills Check: आत्मविश्वासाने गणना करणे तुमच्या arithmetic समजून घेण्याची चाचणी करा: - / (division) आणि % (remainder) यामधील फरक काय आहे? - तुम्ही अंदाज लावू शकता का की 10 % 3 काय आहे? (सूचना: ते 3.33 नाही...) - remainder operator प्रोग्रामिंगमध्ये उपयुक्त का असू शकतो? ### Strings JavaScript मध्ये, मजकूर डेटा strings म्हणून दर्शवला जातो. "String" हा शब्द अक्षरे अनुक्रमाने जोडण्याच्या संकल्पनेतून आला आहे, जसे की मध्ययुगीन मठांतील लेखक त्यांच्या हस्तलिखितांमध्ये शब्द आणि वाक्य तयार करण्यासाठी अक्षरे जोडत असत. Strings वेब विकासासाठी मूलभूत आहेत. वेबसाइटवर प्रदर्शित होणारा प्रत्येक मजकूर – usernames, बटण लेबल्स, त्रुटी संदेश, सामग्री – string डेटा म्हणून हाताळला जातो. कार्यक्षम वापरकर्ता इंटरफेस तयार करण्यासाठी strings समजून घेणे आवश्यक आहे. Strings ही अक्षरे आहेत जी single किंवा double quotes मध्ये असतात. या संकल्पना समजून घेणे: - Single quotes ' किंवा double quotes " वापरते strings define करण्यासाठी - मजकूर डेटा साठवते ज्यामध्ये अक्षरे, संख्या आणि चिन्हे समाविष्ट असतात - Strings ला variables मध्ये assign करते जे नंतर वापरले जाऊ शकतात - Quotes आवश्यक आहेत मजकूर variable नावांपासून वेगळा करण्यासाठी Strings लिहिताना quotes वापरणे लक्षात ठेवा, अन्यथा JavaScript त्याला variable नाव समजेल. ### Strings चे स्वरूप String manipulation तुम्हाला मजकूर घटक एकत्र करण्याची, variables समाविष्ट करण्याची आणि प्रोग्रामच्या स्थितीला प्रतिसाद देणारी dynamic सामग्री तयार करण्याची परवानगी देते. ही तंत्रज्ञान तुम्हाला प्रोग्रामेटिक पद्धतीने मजकूर तयार करण्य दोन किंवा अधिक स्ट्रिंग्स जोडण्यासाठी, किंवा त्यांना एकत्र करण्यासाठी, + ऑपरेटर वापरा. पायरी-पायरीने काय घडत आहे ते समजून घ्या: - एकत्र करते अनेक स्ट्रिंग्स + ऑपरेटर वापरून - जोडते स्ट्रिंग्स थेट एकत्र, पहिल्या उदाहरणात जागा न ठेवता - जोडते वाचनीयतेसाठी स्ट्रिंग्समध्ये जागा " " - घालते योग्य स्वरूपासाठी अल्पविरामासारखे चिन्ह ✅ का 1 + 1 = 2 जावास्क्रिप्टमध्ये, पण '1' + '1' = 11? विचार करा. '1' + 1 बद्दल काय? टेम्पलेट लिटरल्स स्ट्रिंग्स स्वरूपित करण्याचा आणखी एक मार्ग आहे, परंतु कोट्सऐवजी बॅकटिक वापरला जातो. जे काही साधा मजकूर नाही ते ${ } प्लेसहोल्डरमध्ये ठेवले पाहिजे. यामध्ये स्ट्रिंग्स असलेल्या कोणत्याही व्हेरिएबल्सचा समावेश होतो. प्रत्येक भाग समजून घेऊया: - वापरते बॅकटिक्स ` `` नियमित कोट्सऐवजी टेम्पलेट लिटरल्स तयार करण्यासाठी - थेट समाविष्ट करते व्हेरिएबल्स ${} प्लेसहोल्डर सिंटॅक्स वापरून - जतन करते जागा आणि स्वरूप जसे लिहिले आहे तसेच - सुलभ करते व्हेरिएबल्ससह जटिल स्ट्रिंग्स तयार करण्याचा स्वच्छ मार्ग तुमच्या स्वरूपनाच्या उद्दिष्टांसाठी तुम्ही कोणताही पद्धत वापरू शकता, परंतु टेम्पलेट लिटरल्स जागा आणि ओळींचे ब्रेक जसे आहे तसे ठेवतील. ✅ तुम्ही टेम्पलेट लिटरल्स कधी वापराल आणि साधा स्ट्रिंग कधी वापराल? ### 🔤 स्ट्रिंग मास्टरी चेक: टेक्स्ट मॅनिप्युलेशन आत्मविश्वास तुमच्या स्ट्रिंग कौशल्यांचे मूल्यांकन करा: - तुम्ही स्पष्ट करू शकता का की '1' + '1' का '11' आहे 2 ऐवजी? - कोणती स्ट्रिंग पद्धत तुम्हाला अधिक वाचनीय वाटते: कन्सॅटनेशन की टेम्पलेट लिटरल्स? - जर तुम्ही स्ट्रिंगभोवती कोट्स विसरलात तर काय होईल? ### बूलियन्स बूलियन्स डेटा प्रकारातील सर्वात सोपी फॉर्म दर्शवतात: ते फक्त दोन मूल्ये ठेवू शकतात – true किंवा false. ही बायनरी लॉजिक प्रणाली 19व्या शतकातील गणितज्ञ जॉर्ज बूल यांच्या कार्याशी संबंधित आहे, ज्यांनी बूलियन बीजगणित विकसित केले. त्यांच्या साधेपणानंतरही, बूलियन्स प्रोग्राम लॉजिकसाठी अत्यावश्यक आहेत. ते तुमच्या कोडला अटींवर आधारित निर्णय घेण्यास सक्षम करतात – वापरकर्ता लॉग इन आहे का, बटण क्लिक केले गेले आहे का, किंवा विशिष्ट निकष पूर्ण झाले आहेत का. बूलियन्स फक्त दोन मूल्ये असू शकतात: true किंवा false. बूलियन्स विशिष्ट अटी पूर्ण झाल्यावर कोणत्या ओळींचा कोड चालवायचा आहे हे ठरविण्यास मदत करू शकतात. अनेक प्रकरणांमध्ये, ऑपरेटर बूलियनचे मूल्य सेट करण्यासाठी मदत करतात आणि तुम्ही अनेकदा व्हेरिएबल्स सुरू करताना किंवा त्यांचे मूल्य ऑपरेटरसह अपडेट करताना पाहाल. वरील उदाहरणात, आम्ही: - तयार केले एक व्हेरिएबल जे बूलियन मूल्य true साठवते - दाखवले बूलियन मूल्य false कसे साठवायचे - वापरले अचूक कीवर्ड्स true आणि false (कोट्सची गरज नाही) - तयार केले हे व्हेरिएबल्स अटींच्या विधानांमध्ये वापरण्यासाठी ✅ जर एखाद्या व्हेरिएबलला बूलियन true म्हणून मूल्यांकन केले गेले तर त्याला 'truthy' मानले जाऊ शकते. गंमत म्हणजे, जावास्क्रिप्टमध्ये, सर्व मूल्ये truthy असतात जोपर्यंत ती स्पष्टपणे falsy म्हणून परिभाषित केलेली नसतात. ### 🎯 बूलियन लॉजिक चेक: निर्णय घेण्याची कौशल्ये तुमच्या बूलियन समजून घेण्याची चाचणी करा: - तुम्हाला का वाटते की जावास्क्रिप्टमध्ये true आणि false व्यतिरिक्त "truthy" आणि "falsy" मूल्ये आहेत? - तुम्ही अंदाज लावू शकता का की यापैकी कोणते falsy आहे: 0, "0", [], "false"? - बूलियन्स प्रोग्राम फ्लो नियंत्रित करण्यात कसे उपयुक्त ठरू शकतात? --- ## 📊 तुमचे डेटा प्रकार टूलकिट सारांश ## GitHub Copilot Agent Challenge 🚀 Agent मोड वापरून खालील आव्हान पूर्ण करा: वर्णन: एक वैयक्तिक माहिती व्यवस्थापक तयार करा जो तुम्ही या धड्यात शिकलेल्या सर्व जावास्क्रिप्ट डेटा प्रकारांचे प्रदर्शन करतो आणि वास्तविक डेटा परिस्थिती हाताळतो. प्रॉम्प्ट: एक जावास्क्रिप्ट प्रोग्राम तयार करा जो एक युजर प्रोफाइल ऑब्जेक्ट तयार करतो ज्यामध्ये समाविष्ट आहे: व्यक्तीचे नाव (स्ट्रिंग), वय (संख्या), विद्यार्थी स्थिती (बूलियन), आवडते रंग एक अ‍ॅरे म्हणून, आणि एक पत्ता ऑब्जेक्ट ज्यामध्ये स्ट्रीट, शहर, आणि झिप कोड गुणधर्म आहेत. प्रोफाइल माहिती प्रदर्शित करण्यासाठी आणि वैयक्तिक फील्ड्स अपडेट करण्यासाठी फंक्शन्स समाविष्ट करा. स्ट्रिंग कन्सॅटनेशन, टेम्पलेट लिटरल्स, वयासह अंकगणितीय ऑपरेशन्स, आणि विद्यार्थी स्थितीसाठी बूलियन लॉजिक प्रदर्शित करा. Agent मोड बद्दल अधिक जाणून घ्या. ## 🚀 आव्हान जावास्क्रिप्टमध्ये काही वर्तन आहेत जे विकसकांना गोंधळात टाकू शकतात. येथे एक क्लासिक उदाहरण आहे: तुमच्या ब्राउझर कन्सोलमध्ये हे टाइप करा: let age = 1; let Age = 2; age == Age आणि परिणाम पाहा. ते false परत करते – तुम्ही का ते ठरवू शकता? हे जावास्क्रिप्टच्या अनेक वर्तनांपैकी एक आहे जे समजून घेण्यासारखे आहे. या विचित्र गोष्टींची ओळख तुम्हाला अधिक विश्वासार्ह कोड लिहिण्यास आणि समस्यांचे निराकरण अधिक प्रभावीपणे करण्यास मदत करेल. ## पोस्ट-लेक्चर क्विझ पोस्ट-लेक्चर क्विझ ## पुनरावलोकन आणि स्व-अभ्यास जावास्क्रिप्ट सराव यादी पहा आणि एक प्रयत्न करा. तुम्ही काय शिकलात? ## असाइनमेंट डेटा प्रकार सराव ## 🚀 तुमचा जावास्क्रिप्ट डेटा प्रकार मास्टरी टाइमलाइन ### ⚡ पुढील 5 मिनिटांत तुम्ही काय करू शकता - [ ] तुमच्या ब्राउझर कन्सोलमध्ये 3 वेगवेगळ्या डेटा प्रकारांसह व्हेरिएबल्स तयार करा - [ ] आव्हानाचा प्रयत्न करा: let age = 1; let Age = 2; age == Age आणि का false आहे ते शोधा - [ ] तुमचे नाव आणि आवडता क्रमांक वापरून स्ट्रिंग कन्सॅटनेशन सराव करा - [ ] जेव्हा तुम्ही स्ट्रिंगमध्ये संख्या जोडता तेव्हा काय होते ते तपासा ### 🎯 तुम्ही या तासात काय साध्य करू शकता - [ ] पोस्ट-लेसन क्विझ पूर्ण करा आणि कोणतेही गोंधळात टाकणारे संकल्पना पुनरावलोकन करा - [ ] दोन संख्यांची बेरीज, वजाबाकी, गुणाकार, आणि भागाकार करणारा एक मिनी कॅल्क्युलेटर तयार करा - [ ] टेम्पलेट लिटरल्स वापरून एक साधा नाव स्वरूपक तयार करा - [ ] == आणि === तुलना ऑपरेटरमधील फरक एक्सप्लोर करा - [ ] वेगवेगळ्या डेटा प्रकारांमध्ये रूपांतर सराव करा ### 📅 तुमचा आठवडाभराचा जावास्क्रिप्ट पाया - [ ] आत्मविश्वासाने आणि सर्जनशीलतेने असाइनमेंट पूर्ण करा - [ ] शिकलेल्या सर्व डेटा प्रकारांचा वापर करून वैयक्तिक प्रोफाइल ऑब्जेक्ट तयार करा - [ ] CSS-Tricks मधील जावास्क्रिप्ट सराव करा - [ ] बूलियन लॉजिक वापरून एक साधा फॉर्म व्हॅलिडेटर तयार करा - [ ] अ‍ॅरे आणि ऑब्जेक्ट डेटा प्रकारांसह प्रयोग करा (आगामी धड्यांचा पूर्वावलोकन) - [ ] जावास्क्रिप्ट समुदायात सामील व्हा आणि डेटा प्रकारांबद्दल प्रश्न विचारा ### 🌟 तुमचा महिनाभराचा बदल - [ ] मोठ्या प्रोग्रामिंग प्रोजेक्ट्समध्ये डेटा प्रकार ज्ञान समाकलित करा - [ ] वास्तविक अनुप्रयोगांमध्ये प्रत्येक डेटा प्रकार कधी आणि का वापरायचा ते समजून घ्या - [ ] इतर नवशिक्यांना जावास्क्रिप्ट मूलभूत गोष्टी समजून घेण्यास मदत करा - [ ] विविध प्रकारच्या युजर डेटाचा व्यवस्थापन करणारा एक छोटा अनुप्रयोग तयार करा - [ ] टाइप कोएर्शन आणि स्ट्रिक्ट इक्वॅलिटीसारख्या प्रगत डेटा प्रकार संकल्पना एक्सप्लोर करा - [ ] ओपन सोर्स जावास्क्रिप्ट प्रोजेक्ट्समध्ये दस्तऐवज सुधारणा करून योगदान द्या ### 🧠 अंतिम डेटा प्रकार मास्टरी चेक-इन तुमच्या जावास्क्रिप्ट पायाचा उत्सव साजरा करा: - कोणता डेटा प्रकार तुम्हाला त्याच्या वर्तनाच्या दृष्टीने सर्वात जास्त आश्चर्यचकित करतो? - तुम्ही व्हेरिएबल्स आणि कॉन्स्टंट्स मित्राला स्पष्ट करण्यात किती आरामदायक आहात? - जावास्क्रिप्टच्या टाइप सिस्टमबद्दल तुम्हाला सर्वात मनोरंजक गोष्ट काय सापडली? - तुम्ही या मूलभूत गोष्टींसह कोणता वास्तविक अनुप्रयोग तयार करण्याची कल्पना करू शकता? --- अस्वीकरण: हा दस्तऐवज AI भाषांतर सेवा Co-op Translator वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण झालेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.

javascript

जावास्क्रिप्ट मूलभूत गोष्टी: पद्धती आणि फंक्शन्स

## व्याख्यानपूर्व प्रश्नमंजुषा व्याख्यानपूर्व प्रश्नमंजुषा प्रोग्रामिंगमध्ये वारंवार एकच कोड लिहिणे ही एक सामान्य निराशा आहे. फंक्शन्स या समस्येचे निराकरण करतात कारण ते कोड पुनर्वापर करण्यायोग्य ब्लॉक्समध्ये पॅकेज करण्याची परवानगी देतात. फंक्शन्स म्हणजे हेन्री फोर्डच्या असेंब्ली लाइनला क्रांतिकारी बनवणाऱ्या मानक भागांसारखे – एकदा तुम्ही विश्वासार्ह घटक तयार केला की, तुम्ही तो पुन्हा तयार न करता जिथे आवश्यक असेल तिथे वापरू शकता. फंक्शन्स तुम्हाला कोडचे तुकडे एकत्र करण्याची परवानगी देतात जेणेकरून तुम्ही ते तुमच्या प्रोग्राममध्ये पुन्हा वापरू शकता. एकाच लॉजिकची कॉपी आणि पेस्ट करण्याऐवजी, तुम्ही एकदा फंक्शन तयार करू शकता आणि आवश्यकतेनुसार ते कॉल करू शकता. ही पद्धत तुमचा कोड व्यवस्थित ठेवते आणि अपडेट्स करणे खूप सोपे बनवते. या धड्यात, तुम्ही स्वतःचे फंक्शन्स कसे तयार करायचे, त्यांना माहिती कशी द्यायची आणि उपयुक्त परिणाम कसे मिळवायचे हे शिकाल. तुम्ही फंक्शन्स आणि पद्धतींमधील फरक शोधाल, आधुनिक सिंटॅक्स पद्धती शिकाल आणि फंक्शन्स इतर फंक्शन्ससह कसे कार्य करू शकतात हे पाहाल. आपण या संकल्पना टप्प्याटप्प्याने तयार करू. [](https://youtube.com/watch?v=XgKsD6Zwvlc "पद्धती आणि फंक्शन्स") ## फंक्शन्स फंक्शन म्हणजे विशिष्ट कार्य करणारा स्वयंपूर्ण कोड ब्लॉक. हे लॉजिक समाविष्ट करते जे तुम्ही आवश्यकतेनुसार अंमलात आणू शकता. तुमच्या प्रोग्राममध्ये एकच कोड अनेक वेळा लिहिण्याऐवजी, तुम्ही तो फंक्शनमध्ये पॅकेज करू शकता आणि तुम्हाला आवश्यक असताना ते फंक्शन कॉल करू शकता. ही पद्धत तुमचा कोड स्वच्छ ठेवते आणि अपडेट्स करणे खूप सोपे बनवते. विचार करा की तुम्हाला तुमच्या कोडबेसमधील 20 वेगवेगळ्या ठिकाणी विखुरलेले लॉजिक बदलायचे असल्यास देखभाल करणे किती आव्हानात्मक होईल. तुमच्या फंक्शन्सचे वर्णनात्मक नाव देणे आवश्यक आहे. चांगल्या नावाचा फंक्शन त्याचा हेतू स्पष्टपणे सांगतो – जेव्हा तुम्ही cancelTimer() पाहता, तेव्हा तुम्हाला लगेच समजते की ते काय करते, जसे की स्पष्टपणे लेबल केलेले बटण तुम्हाला सांगते की तुम्ही त्यावर क्लिक केल्यावर काय होईल. ## फंक्शन तयार करणे आणि कॉल करणे आम्ही फंक्शन कसे तयार करायचे ते तपासूया. सिंटॅक्स एकसारख्या पद्धतीचे अनुसरण करते: याचे विश्लेषण करूया: - function कीवर्ड जावास्क्रिप्टला सांगतो "अरे, मी एक फंक्शन तयार करत आहे!" - nameOfFunction हे तुमच्या फंक्शनला वर्णनात्मक नाव देण्याचे ठिकाण आहे - कंस () हे जिथे तुम्ही पॅरामीटर्स जोडू शकता (आम्ही लवकरच त्यावर येऊ) - कर्ली ब्रेसेस {} वास्तविक कोड समाविष्ट करतात जेव्हा तुम्ही फंक्शन कॉल करता तेव्हा चालते चला एक साधे ग्रीटिंग फंक्शन तयार करूया आणि ते कसे कार्य करते ते पाहूया: हे फंक्शन "Hello, world!" कन्सोलवर प्रिंट करते. एकदा तुम्ही ते परिभाषित केल्यानंतर, तुम्ही ते आवश्यकतेनुसार कितीही वेळा वापरू शकता. तुमचे फंक्शन अंमलात आणण्यासाठी (किंवा "कॉल" करण्यासाठी), त्याचे नाव कंसासह लिहा. जावास्क्रिप्ट तुम्हाला तुमचे फंक्शन कॉल करण्यापूर्वी किंवा नंतर परिभाषित करण्याची परवानगी देते – जावास्क्रिप्ट इंजिन अंमलबजावणी क्रम हाताळेल. जेव्हा तुम्ही ही ओळ चालवता, तेव्हा तुमच्या displayGreeting फंक्शनमधील सर्व कोड अंमलात आणते, तुमच्या ब्राउझरच्या कन्सोलमध्ये "Hello, world!" प्रदर्शित करते. तुम्ही हे फंक्शन वारंवार कॉल करू शकता. ### 🧠 फंक्शन मूलभूत गोष्टी तपासणी: तुमचे पहिले फंक्शन्स तयार करणे चला पाहूया की तुम्हाला मूलभूत फंक्शन्सबद्दल कसे वाटते: - तुम्ही फंक्शन डिफिनिशन्समध्ये कर्ली ब्रेसेस {} का वापरतो हे स्पष्ट करू शकता का? - जर तुम्ही displayGreeting कंसांशिवाय लिहिले तर काय होईल? - तुम्ही एकाच फंक्शनला अनेक वेळा कॉल का करू इच्छिता? ### फंक्शन सर्वोत्तम पद्धती उत्तम फंक्शन्स लिहिण्यासाठी काही टिप्स येथे आहेत: - तुमच्या फंक्शन्सना स्पष्ट, वर्णनात्मक नावे द्या – तुमचे भविष्याचे स्वतः तुम्हाला धन्यवाद देतील! - मल्टी-वर्ड नावांसाठी camelCasing वापरा (उदा. calculateTotal ऐवजी calculate_total) - प्रत्येक फंक्शन एकाच गोष्टीवर लक्ष केंद्रित करून चांगले करण्यावर लक्ष केंद्रित करा ## फंक्शनला माहिती देणे आमचे displayGreeting फंक्शन मर्यादित आहे – ते प्रत्येकासाठी फक्त "Hello, world!" प्रदर्शित करू शकते. पॅरामीटर्स आम्हाला फंक्शन्स अधिक लवचिक आणि उपयुक्त बनवण्याची परवानगी देतात. पॅरामीटर्स प्लेसहोल्डर्ससारखे कार्य करतात जिथे तुम्ही प्रत्येक वेळी फंक्शन वापरता तेव्हा वेगवेगळ्या मूल्ये घालू शकता. अशा प्रकारे, समान फंक्शन प्रत्येक कॉलवर वेगवेगळ्या माहितीवर कार्य करू शकते. तुम्ही तुमचे फंक्शन परिभाषित करताना पॅरामीटर्स कंसामध्ये सूचीबद्ध करता, एकाधिक पॅरामीटर्स अल्पविरामाने वेगळे करतात: प्रत्येक पॅरामीटर प्लेसहोल्डरप्रमाणे कार्य करते – जेव्हा कोणी तुमचे फंक्शन कॉल करतो, तेव्हा ते वास्तविक मूल्ये प्रदान करतात जी या ठिकाणी प्लग इन केली जातात. चला आमचे ग्रीटिंग फंक्शन अपडेट करूया जेणेकरून ते कोणाचे तरी नाव स्वीकारेल: लक्षात घ्या की आम्ही नाव थेट आमच्या संदेशात घालण्यासाठी बॅकटिक्स (` `) आणि ${}` वापरत आहोत – याला टेम्पलेट लिटरल म्हणतात आणि व्हेरिएबल्स मिसळलेल्या स्ट्रिंग्स तयार करण्याचा हा एक खूप उपयुक्त मार्ग आहे. आता जेव्हा आम्ही आमचे फंक्शन कॉल करतो, तेव्हा आम्ही कोणतेही नाव पास करू शकतो: जावास्क्रिप्ट स्ट्रिंग 'Christopher' घेते, ते name पॅरामीटरला असाइन करते आणि वैयक्तिकृत संदेश तयार करते "Hello, Christopher!" ## डीफॉल्ट मूल्ये आपण काही पॅरामीटर्स वैकल्पिक बनवू इच्छित असल्यास काय करावे? तेथे डीफॉल्ट मूल्ये उपयुक्त ठरतात! म्हणून म्हणायचे आहे की लोकांना ग्रीटिंग शब्द सानुकूलित करण्यास सक्षम करायचे आहे, परंतु जर त्यांनी एक निर्दिष्ट केले नाही तर, आम्ही फक्त "Hello" बॅकअप म्हणून वापरू. तुम्ही डीफॉल्ट मूल्ये सेट करू शकता ज्याप्रमाणे व्हेरिएबल सेट करतो: येथे, name अजूनही आवश्यक आहे, परंतु salutation ला बॅकअप मूल्य 'Hello' आहे जर कोणी वेगळा ग्रीटिंग प्रदान केला नाही. आता आम्ही हे फंक्शन दोन वेगवेगळ्या प्रकारे कॉल करू शकतो: पहिल्या कॉलमध्ये, जावास्क्रिप्ट डीफॉल्ट "Hello" वापरते कारण आम्ही ग्रीटिंग निर्दिष्ट केले नाही. दुसऱ्या कॉलमध्ये, ते आमचे सानुकूल "Hi" वापरते. ही लवचिकता फंक्शन्सना वेगवेगळ्या परिस्थितींशी जुळवून घेण्यास सक्षम करते. ### 🎛️ पॅरामीटर्स मास्टरी तपासणी: फंक्शन्स लवचिक बनवणे तुमच्या पॅरामीटर्सची समज तपासा: - पॅरामीटर आणि आर्ग्युमेंटमध्ये काय फरक आहे? - वास्तविक-जगातील प्रोग्रामिंगमध्ये डीफॉल्ट मूल्ये का उपयुक्त आहेत? - जर तुम्ही पॅरामीटर्सपेक्षा जास्त आर्ग्युमेंट्स पास केले तर काय होईल याचा अंदाज तुम्ही लावू शकता का? ## रिटर्न मूल्ये आमचे फंक्शन्स आतापर्यंत फक्त कन्सोलवर संदेश प्रिंट करत आहेत, पण जर तुम्हाला फंक्शन काहीतरी गणना करायचे असेल आणि तुम्हाला परिणाम परत द्यायचा असेल तर काय? तेथे रिटर्न मूल्ये येतात. काहीतरी प्रदर्शित करण्याऐवजी, फंक्शन तुम्हाला एक मूल्य परत देऊ शकते जे तुम्ही व्हेरिएबलमध्ये संग्रहित करू शकता किंवा तुमच्या कोडच्या इतर भागांमध्ये वापरू शकता. मूल्य परत पाठवण्यासाठी, तुम्ही return कीवर्ड वापरता आणि त्यानंतर तुम्हाला जे परत करायचे आहे ते लिहा: येथे एक महत्त्वाची गोष्ट आहे: जेव्हा फंक्शन return स्टेटमेंटवर पोहोचते, तेव्हा ते त्वरित चालणे थांबवते आणि ते मूल्य परत पाठवते ज्याने ते कॉल केले आहे. चला आमचे ग्रीटिंग फंक्शन बदलूया जेणेकरून ते संदेश परत पाठवेल त्याऐवजी प्रिंट करेल: आता ग्रीटिंग प्रिंट करण्याऐवजी, हे फंक्शन संदेश तयार करते आणि तो आम्हाला परत देतो. परत दिलेले मूल्य वापरण्यासाठी, आम्ही ते इतर कोणत्याही मूल्याप्रमाणे व्हेरिएबलमध्ये संग्रहित करू शकतो: आता greetingMessage मध्ये "Hello, Christopher" आहे आणि आम्ही ते आमच्या कोडमध्ये कुठेही वापरू शकतो – वेबपेजवर प्रदर्शित करण्यासाठी, ईमेलमध्ये समाविष्ट करण्यासाठी किंवा दुसऱ्या फंक्शनला पास करण्यासाठी. ### 🔄 रिटर्न मूल्ये तपासणी: परिणाम परत मिळवणे तुमच्या रिटर्न मूल्ये समजून घ्या: - फंक्शनमधील return स्टेटमेंटनंतर कोडला काय होते? - फक्त कन्सोलवर प्रिंट करण्याऐवजी मूल्ये परत करणे का चांगले आहे? - फंक्शन वेगवेगळ्या प्रकारची मूल्ये परत करू शकते का (स्ट्रिंग, नंबर, बूलियन)? ## फंक्शन्स फंक्शन्ससाठी पॅरामीटर्स म्हणून फंक्शन्स इतर फंक्शन्ससाठी पॅरामीटर्स म्हणून पास केले जाऊ शकतात. सुरुवातीला ही संकल्पना जटिल वाटू शकते, परंतु हे एक शक्तिशाली वैशिष्ट्य आहे जे लवचिक प्रोग्रामिंग पॅटर्न सक्षम करते. जेव्हा तुम्हाला "काहीतरी घडते तेव्हा हे दुसरे काहीतरी करा" असे म्हणायचे असते तेव्हा हा पॅटर्न खूप सामान्य असतो. उदाहरणार्थ, "जेव्हा टाइमर संपतो, तेव्हा हा कोड चालवा" किंवा "जेव्हा वापरकर्ता बटणावर क्लिक करतो, तेव्हा हे फंक्शन कॉल करा." चला setTimeout पाहूया, जे एक बिल्ट-इन फंक्शन आहे जे काही वेळ थांबते आणि नंतर काही कोड चालवते. आम्हाला ते कोणता कोड चालवायचा आहे ते सांगावे लागेल – फंक्शन पास करण्यासाठी योग्य केस! हा कोड वापरून पहा – 3 सेकंदांनंतर तुम्हाला एक संदेश दिसेल: लक्षात घ्या की आम्ही displayDone (कंसांशिवाय) setTimeout ला पास करतो. आम्ही स्वतः फंक्शन कॉल करत नाही – आम्ही ते setTimeout ला देत आहोत आणि म्हणत आहोत "हे 3 सेकंदात कॉल करा." ### अनामिक फंक्शन्स कधी कधी तुम्हाला फक्त एका गोष्टीसाठी फंक्शनची आवश्यकता असते आणि त्याला नाव देण्याची इच्छा नसते. विचार करा – जर तुम्ही फक्त एकदाच फंक्शन वापरत असाल, तर अतिरिक्त नावाने तुमचा कोड का भरावा? जावास्क्रिप्ट तुम्हाला अनामिक फंक्शन्स तयार करण्याची परवानगी देते – नाव नसलेले फंक्शन्स जे तुम्ही जिथे आवश्यक असेल तिथे परिभाषित करू शकता. आमच्या टाइमर उदाहरणाला अनामिक फंक्शन वापरून पुन्हा लिहिण्यासाठी येथे आहे: हे समान परिणाम साध्य करते, परंतु फंक्शन थेट setTimeout कॉलमध्ये परिभाषित केले जाते, स्वतंत्र फंक्शन डिक्लरेशनची आवश्यकता दूर करते. ### फॅट अरो फंक्शन्स आधुनिक जावास्क्रिप्टमध्ये फंक्शन्स लिहिण्याचा आणखी एक संक्षिप्त मार्ग आहे ज्याला अरो फंक्शन्स म्हणतात. ते => वापरतात (जे अरोसारखे दिसते – समजले का?) आणि विकसकांमध्ये खूप लोकप्रिय आहेत. अरो फंक्शन्स तुम्हाला function कीवर्ड वगळण्याची आणि अधिक संक्षिप्त कोड लिहिण्याची परवानगी देतात. आमच्या टाइमर उदाहरणाला अरो फंक्शन वापरून येथे आहे: () हे जिथे पॅरामीटर्स जातील (या प्रकरणात रिक्त), नंतर अरो => येते आणि शेवटी कर्ली ब्रेसेसमध्ये फंक्शन बॉडी. हे अधिक संक्षिप्त सिंटॅक्ससह समान कार्यक्षमता प्रदान करते. ### प्रत्येक रणनीती कधी वापरायची प्रत्येक दृष्टिकोन कधी वापरायचा? एक व्यावहारिक मार्गदर्शक: जर तुम्ही फंक्शन अनेक वेळा वापरणार असाल, तर त्याला नाव द्या आणि वेगळे परिभाषित करा. जर ते एका विशिष्ट वापरासाठी असेल, तर अनामिक फंक्शन विचारात घ्या. अरो फंक्शन्स आणि पारंपरिक सिंटॅक्स दोन्ही वैध पर्याय आहेत, जरी अरो फंक्शन्स आधुनिक जावास्क्रिप्ट कोडबेसमध्ये प्रचलित आहेत. ### 🎨 **फंक - [ ] पारंपरिक फंक्शनला अॅरो फंक्शन सिंटॅक्समध्ये रूपांतरित करण्याचा प्रयत्न करा - [ ] आव्हानाचा सराव करा: फंक्शन्स आणि मेथड्समधील फरक समजावून सांगा ### 🎯 या तासात तुम्ही काय साध्य करू शकता - [ ] पोस्ट-लेसन क्विझ पूर्ण करा आणि कोणतेही गोंधळात टाकणारे संकल्पना पुनरावलोकन करा - [ ] GitHub Copilot चॅलेंजमधून गणित युटिलिटी लायब्ररी तयार करा - [ ] दुसऱ्या फंक्शनला पॅरामीटर म्हणून वापरणारा फंक्शन तयार करा - [ ] डिफॉल्ट पॅरामीटर्ससह फंक्शन्स लिहिण्याचा सराव करा - [ ] फंक्शन रिटर्न व्हॅल्यूमध्ये टेम्प्लेट लिटरल्स वापरण्याचा प्रयोग करा ### 📅 तुमचा आठवडाभराचा फंक्शन मास्टरी - [ ] "Fun with Functions" असाइनमेंट सर्जनशीलतेने पूर्ण करा - [ ] तुम्ही लिहिलेल्या पुनरावृत्ती कोडचे पुनरावलोकन करा आणि त्याला पुनर्वापर करण्यायोग्य फंक्शन्समध्ये रूपांतरित करा - [ ] फक्त फंक्शन्स वापरून एक छोटा कॅल्क्युलेटर तयार करा (कोणतेही ग्लोबल व्हेरिएबल्स नाहीत) - [ ] map() आणि filter() सारख्या अॅरे मेथड्ससह अॅरो फंक्शन्सचा सराव करा - [ ] सामान्य कार्यांसाठी युटिलिटी फंक्शन्सचा संग्रह तयार करा - [ ] हायर-ऑर्डर फंक्शन्स आणि फंक्शनल प्रोग्रामिंग संकल्पनांचा अभ्यास करा ### 🌟 तुमचा महिनाभराचा परिवर्तन - [ ] क्लोजर्स आणि स्कोपसारख्या प्रगत फंक्शन संकल्पनांमध्ये प्राविण्य मिळवा - [ ] फंक्शन कंपोझिशनचा मोठ्या प्रमाणावर वापर करणारा प्रकल्प तयार करा - [ ] फंक्शन डोक्युमेंटेशन सुधारण्यासाठी ओपन सोर्समध्ये योगदान द्या - [ ] इतरांना फंक्शन्स आणि वेगवेगळ्या सिंटॅक्स शैलींबद्दल शिकवा - [ ] जावास्क्रिप्टमधील फंक्शनल प्रोग्रामिंग पॅराडाइम्स एक्सप्लोर करा - [ ] भविष्यातील प्रकल्पांसाठी पुनर्वापर करण्यायोग्य फंक्शन्सची वैयक्तिक लायब्ररी तयार करा ### 🏆 अंतिम फंक्शन्स चॅम्पियन चेक-इन तुमच्या फंक्शन मास्टरीचा उत्सव साजरा करा: - आतापर्यंत तुम्ही तयार केलेला सर्वात उपयुक्त फंक्शन कोणता आहे? - फंक्शन्सबद्दल शिकल्यामुळे कोडचे आयोजन करण्याबद्दल तुमच्या विचारांमध्ये कसा बदल झाला आहे? - तुम्हाला कोणता फंक्शन सिंटॅक्स जास्त आवडतो आणि का? - कोणती वास्तविक समस्या तुम्ही फंक्शन लिहून सोडवाल? --- अस्वीकरण: हा दस्तऐवज AI भाषांतर सेवा Co-op Translator वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण झालेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.

web,development

JavaScript मूलभूत गोष्टी: निर्णय घेणे

कधी तुम्हाला विचार आला आहे का की अ‍ॅप्लिकेशन्स स्मार्ट निर्णय कसे घेतात? जसे की नेव्हिगेशन सिस्टम सर्वात जलद मार्ग निवडते किंवा थर्मोस्टॅट उष्णता चालू करण्याचा निर्णय कसा घेतो? प्रोग्रामिंगमधील निर्णय घेण्याची ही मूलभूत संकल्पना आहे. जसे चार्ल्स बॅबेजच्या अ‍ॅनालिटिकल इंजिनला परिस्थितीनुसार वेगवेगळ्या ऑपरेशन्सचे अनुक्रम अनुसरण करण्यासाठी डिझाइन केले गेले होते, आधुनिक JavaScript प्रोग्राम्सला बदलत्या परिस्थितीनुसार निवडी करणे आवश्यक आहे. स्थिर कोडला प्रतिसाद देणाऱ्या, बुद्धिमान अ‍ॅप्लिकेशन्समध्ये रूपांतरित करण्यासाठी ही शाखा आणि निर्णय घेण्याची क्षमता महत्त्वाची आहे. या धड्यात, तुम्ही तुमच्या प्रोग्राम्समध्ये अटींचा वापर कसा करायचा ते शिकाल. आम्ही अटींचे विधान, तुलना ऑपरेटर आणि लॉजिकल एक्सप्रेशन्स एक्सप्लोर करू जे तुमच्या कोडला परिस्थितीचे मूल्यांकन करण्यास आणि योग्य प्रतिसाद देण्यास सक्षम करतात. ## व्याख्यानपूर्व प्रश्नमंजुषा व्याख्यानपूर्व प्रश्नमंजुषा निर्णय घेण्याची आणि प्रोग्राम फ्लो नियंत्रित करण्याची क्षमता प्रोग्रामिंगचा मूलभूत पैलू आहे. या विभागात Boolean मूल्ये आणि अटींचा वापर करून तुमच्या JavaScript प्रोग्राम्सच्या अंमलबजावणीचा मार्ग कसा नियंत्रित करायचा ते समाविष्ट आहे. [](https://youtube.com/watch?v=SxTp8j-fMMY "निर्णय घेणे") ## Boolean बद्दल थोडक्यात पुनरावलोकन निर्णय घेण्यापूर्वी, आपल्या मागील धड्यातील Boolean मूल्ये पुन्हा पाहूया. गणितज्ञ जॉर्ज बूल यांच्या नावावरून ठेवलेली ही मूल्ये द्वि-राज्ये दर्शवतात – true किंवा false. यात कोणतीही अस्पष्टता नाही, कोणतेही मध्यम क्षेत्र नाही. ही द्वि-मूल्ये सर्व संगणकीय तर्कशास्त्राचा पाया आहेत. तुमचा प्रोग्राम घेत असलेला प्रत्येक निर्णय शेवटी Boolean मूल्यांकनावर आधारित असतो. Boolean व्हेरिएबल्स तयार करणे सोपे आहे: हे दोन व्हेरिएबल्स स्पष्ट Boolean मूल्यांसह तयार करते. ✅ Boolean हे इंग्रजी गणितज्ञ, तत्त्वज्ञ आणि तर्कशास्त्रज्ञ जॉर्ज बूल (1815–1864) यांच्या नावावरून ठेवले गेले आहे. ## तुलना ऑपरेटर आणि Boolean प्रत्यक्षात, तुम्ही क्वचितच Boolean मूल्ये मॅन्युअली सेट कराल. त्याऐवजी, तुम्ही अटींचे मूल्यांकन करून ती तयार कराल: "हा नंबर त्या नंबरपेक्षा मोठा आहे का?" किंवा "ही मूल्ये समान आहेत का?" तुलना ऑपरेटर या मूल्यांकनांना सक्षम करतात. ते मूल्यांची तुलना करतात आणि ऑपरेटरच्या संबंधांवर आधारित Boolean परिणाम परत करतात. ✅ तुमच्या ब्राउझरच्या कन्सोलमध्ये काही तुलना लिहून तुमचे ज्ञान तपासा. परत आलेल्या डेटाने तुम्हाला आश्चर्य वाटले का? ### 🧠 तुलना तज्ञ तपासणी: Boolean तर्कशास्त्र समजून घेणे तुमचे तुलना समजून घेणे तपासा: - तुम्हाला का वाटते की === (कठोर समानता) सामान्यतः == (सैल समानता) पेक्षा प्राधान्य दिले जाते? - तुम्ही अंदाज लावू शकता का की 5 === '5' काय परत करेल? 5 == '5' बद्दल काय? - !== आणि != यामध्ये काय फरक आहे? ## If विधान if विधान म्हणजे तुमच्या कोडमध्ये प्रश्न विचारण्यासारखे आहे. "जर ही अट खरी असेल, तर हे काम करा." JavaScript मध्ये निर्णय घेण्यासाठी तुम्ही वापरणारे हे कदाचित सर्वात महत्त्वाचे साधन आहे. हे कसे कार्य करते ते येथे आहे: अट कंसात जाते आणि जर ती true असेल तर JavaScript कर्ली ब्रेसेसच्या आत कोड चालवते. जर ती false असेल, तर JavaScript संपूर्ण ब्लॉक वगळते. तुम्ही या अटी तयार करण्यासाठी तुलना ऑपरेटर वापराल. व्यावहारिक उदाहरण पाहूया: 1000 >= 800 हे true म्हणून मूल्यांकन करते, त्यामुळे ब्लॉकमधील कोड अंमलात आणला जातो, कन्सोलमध्ये "Getting a new laptop!" प्रदर्शित होते. ## If..Else विधान पण जर तुम्हाला तुमच्या प्रोग्रामला अट खोटी असल्यावर काहीतरी वेगळे करायचे असेल तर? तिथे else येते – जणू तुमच्याकडे बॅकअप योजना आहे. else विधान तुम्हाला "जर ही अट खरी नसेल, तर त्याऐवजी हे दुसरे काम करा" असे सांगण्याचा मार्ग देते. आता 500 >= 800 हे false असल्याने, JavaScript पहिला ब्लॉक वगळते आणि त्याऐवजी else ब्लॉक चालवते. तुम्हाला कन्सोलमध्ये "Can't afford a new laptop, yet!" दिसेल. ✅ तुमच्या ब्राउझर कन्सोलमध्ये हे कोड चालवून तुमचे ज्ञान तपासा. currentMoney आणि laptopPrice व्हेरिएबल्सच्या मूल्यांमध्ये बदल करा आणि परत आलेल्या console.log() मध्ये बदल पहा. ### 🎯 If-Else लॉजिक तपासणी: शाखा मार्ग तुमचे अटींचे तर्कशास्त्र समजून घेणे तपासा: - काय होते जर currentMoney नेमके laptopPrice च्या बरोबर असेल? - तुम्ही वास्तविक जीवनातील परिस्थिती विचार करू शकता जिथे if-else तर्कशास्त्र उपयुक्त ठरेल? - तुम्ही हे अनेक किंमतींच्या श्रेणींना हाताळण्यासाठी कसे वाढवू शकता? ## Switch विधान कधी कधी तुम्हाला एक मूल्य अनेक पर्यायांशी तुलना करायचे असते. तुम्ही अनेक if..else विधानांची साखळी तयार करू शकता, परंतु हा दृष्टिकोन अव्यवस्थित होतो. अनेक विशिष्ट मूल्ये हाताळण्यासाठी स्वच्छ रचना प्रदान करण्यासाठी switch विधान उपयुक्त आहे. हा संकल्पना सुरुवातीच्या टेलिफोन एक्सचेंजमध्ये वापरल्या जाणाऱ्या यांत्रिक स्विचिंग सिस्टमसारखी आहे – एक इनपुट मूल्य अंमलबजावणी कोणत्या विशिष्ट मार्गाने जाईल ते ठरवते. हे कसे संरचित आहे: - JavaScript एकदा अभिव्यक्तीचे मूल्यांकन करते - प्रत्येक case शोधते जो जुळतो - जुळणारा कोड ब्लॉक चालवते - break JavaScript ला थांबवते आणि switch मधून बाहेर पडते - जर कोणतेही केस जुळत नसतील, तर ते default ब्लॉक चालवते (जर तुम्ही तो ठेवला असेल तर) या उदाहरणात, JavaScript पाहते की dayNumber 2 आहे, जुळणारा case 2 शोधते, dayName ला "Tuesday" सेट करते आणि नंतर switch मधून बाहेर पडते. परिणाम? "Today is Tuesday" कन्सोलमध्ये लॉग केले जाते. ✅ तुमच्या ब्राउझर कन्सोलमध्ये हे कोड चालवून तुमचे ज्ञान तपासा. व्हेरिएबल a च्या मूल्यांमध्ये बदल करा आणि परत आलेल्या console.log() मध्ये बदल पहा. ### 🔄 Switch विधान तज्ञ: अनेक पर्याय तुमचे switch समजून घेणे तपासा: - काय होते जर तुम्ही break विधान विसरला? - तुम्ही अनेक if-else विधानांऐवजी switch कधी वापराल? - तुम्ही विचार करता की तुम्ही सर्व शक्यता कव्हर केल्या आहेत तरीही default केस का उपयुक्त आहे? ## लॉजिकल ऑपरेटर आणि Boolean जटिल निर्णयांमध्ये अनेक अटी एकाच वेळी मूल्यांकन करणे आवश्यक असते. जसे Boolean बीजगणित गणितज्ञांना लॉजिकल अभिव्यक्ती एकत्र करण्यास अनुमती देते, प्रोग्रामिंग लॉजिकल ऑपरेटर प्रदान करते जे अनेक Boolean अटींना जोडतात. हे ऑपरेटर साध्या true/false मूल्यांकन एकत्र करून परिष्कृत अटींचा तर्कशास्त्र सक्षम करतात. हे ऑपरेटर तुम्हाला अटी उपयुक्त पद्धतीने एकत्र करण्यास अनुमती देतात: - AND (&&) म्हणजे दोन्ही अटी true असणे आवश्यक आहे - OR (||) म्हणजे किमान एक अट true असणे आवश्यक आहे - NOT (!) true ला false मध्ये बदलते (आणि उलट) ## लॉजिकल ऑपरेटरसह अटी आणि निर्णय चला या लॉजिकल ऑपरेटरचा वापर करून अधिक वास्तववादी उदाहरण पाहूया: या उदाहरणात: आम्ही 20% डिस्काउंट किंमत (640) मोजतो, नंतर मूल्यांकन करतो की आमची उपलब्ध निधी पूर्ण किंमत किंवा सवलतीच्या किंमतीसाठी पुरेशी आहे का. कारण 600 सवलतीच्या किंमतीच्या मर्यादेत (640) बसते, अट true म्हणून मूल्यांकन करते. ### 🧮 लॉजिकल ऑपरेटर तपासणी: अटी एकत्र करणे तुमचे लॉजिकल ऑपरेटर समजून घेणे तपासा: - अभिव्यक्ती A && B मध्ये, काय होते जर A false असेल? B चे मूल्यांकन केले जाते का? - तुम्ही अशी परिस्थिती विचार करू शकता जिथे तुम्हाला सर्व तीन ऑपरेटर (&&, ||, !) एकत्र आवश्यक असतील? - !user.isActive आणि user.isActive !== true यामध्ये काय फरक आहे? ### नकार ऑपरेटर कधी कधी काहीतरी खरे नाही ते विचारणे सोपे असते. जसे "वापरकर्ता लॉग इन आहे का?" विचारण्याऐवजी, तुम्ही विचार करू शकता "वापरकर्ता लॉग इन नाही का?" उद्गार चिन्ह (!) ऑपरेटर तुमच्यासाठी तर्कशास्त्र उलटवतो. ! ऑपरेटर म्हणजे "त्याच्या उलट..." असे म्हणणे – जर काहीतरी true असेल, तर ! त्याला false बनवते आणि उलट. ### टर्नरी अभिव्यक्ती सोप्या अटींच्या असाइनमेंटसाठी, JavaScript टर्नरी ऑपरेटर प्रदान करते. ही संक्षिप्त सिंटॅक्स तुम्हाला एकाच ओळीत अटींची अभिव्यक्ती लिहिण्याची परवानगी देते, जेव्हा तुम्हाला अटीवर आधारित दोन मूल्यांपैकी एक असाइन करायचा असेल तेव्हा उपयुक्त. हे प्रश्नासारखे वाचते: "ही अट खरी आहे का? जर होय, तर हे मूल्य वापरा. जर नाही, तर ते मूल्य वापरा." खाली एक अधिक ठोस उदाहरण आहे: ✅ या कोडला काही वेळा वाचा. तुम्हाला समजते का की हे ऑपरेटर कसे कार्य करत आहेत? या ओळीत काय सांगितले आहे: "firstNumber secondNumber पेक्षा मोठा आहे का? जर होय, तर firstNumber biggestNumber मध्ये ठेवा. जर नाही, तर secondNumber biggestNumber मध्ये ठेवा." टर्नरी ऑपरेटर हा पारंपरिक if..else विधान लिहिण्याचा फक्त एक छोटा मार्ग आहे: दोन्ही दृष्टिकोन समान परिणाम तयार करतात. टर्नरी ऑपरेटर संक्षिप्तता प्रदान करतो, तर पारंपरिक if-else रचना जटिल अटींसाठी अधिक वाचनीय असू शकते. --- ## 🚀 आव्हान लॉजिकल ऑपरेटरसह प्रथम लिहिलेले प्रोग्राम तयार करा आणि नंतर ते टर्नरी अभिव्यक्ती वापरून पुन्हा लिहा. तुमची पसंतीची सिंटॅक्स कोणती आहे? --- ## GitHub Copilot Agent Challenge 🚀 Agent मोड वापरून खालील आव्हान पूर्ण करा: वर्णन: या धड्याच्या अनेक निर्णय घेण्याच्या संकल्पनांचा समावेश करणारा व्यापक ग्रेड कॅल्क्युलेटर तयार करा, ज्यामध्ये if-else विधान, switch विधान, लॉजिकल ऑपरेटर आणि टर्नरी अभिव्यक्ती समाविष्ट आहे. प्रॉम्प्ट: JavaScript प्रोग्राम लिहा जो विद्यार्थ्याच्या संख्यात्मक स्कोअर (0-100) घेतो आणि खालील निकषांनुसार त्यांचा लेटर ग्रेड ठरवतो: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 च्या खाली आवश्यकता: 1. लेटर ग्रेड ठ 2. विद्यार्थ्याने पास होतो का (grade >= 60) आणि त्याला सन्मान मिळतो का (grade >= 90) हे तपासण्यासाठी लॉजिकल ऑपरेटर वापरा. 3. प्रत्येक अक्षर ग्रेडसाठी विशिष्ट फीडबॅक देण्यासाठी switch स्टेटमेंट वापरा. 4. विद्यार्थ्याला पुढच्या कोर्ससाठी पात्रता आहे का (grade >= 70) हे ठरवण्यासाठी टर्नरी ऑपरेटर वापरा. 5. स्कोअर 0 ते 100 दरम्यान आहे याची खात्री करण्यासाठी इनपुट व्हॅलिडेशन समाविष्ट करा. 59, 60, 89, 90 आणि अमान्य इनपुट्स यासारख्या विविध स्कोअर्ससह तुमचा प्रोग्राम टेस्ट करा. एजंट मोड बद्दल अधिक जाणून घ्या. ## पोस्ट-लेक्चर क्विझ पोस्ट-लेक्चर क्विझ ## पुनरावलोकन आणि स्व-अभ्यास वापरकर्त्यासाठी उपलब्ध असलेल्या अनेक ऑपरेटरबद्दल अधिक वाचा MDN वर. जॉश कोमाऊच्या अप्रतिम ऑपरेटर लुकअप वरून जा! ## असाइनमेंट ऑपरेटर --- ## 🧠 तुमचे निर्णय घेण्याचे टूलकिट सारांश --- ## 🚀 तुमचा जावास्क्रिप्ट निर्णय घेण्याचा मास्टरी टाइमलाइन ### ⚡ पुढील 5 मिनिटांत तुम्ही काय करू शकता - [ ] तुमच्या ब्राउझर कन्सोलमध्ये तुलना ऑपरेटर सराव करा - [ ] तुमचे वय तपासणारे साधे if-else स्टेटमेंट लिहा - [ ] आव्हानाचा प्रयत्न करा: टर्नरी ऑपरेटर वापरून if-else पुन्हा लिहा - [ ] वेगवेगळ्या "truthy" आणि "falsy" मूल्यांसह काय होते ते तपासा ### 🎯 तुम्ही या तासात काय साध्य करू शकता - [ ] पोस्ट-लेसन क्विझ पूर्ण करा आणि कोणतेही गोंधळात टाकणारे संकल्पना पुनरावलोकन करा - [ ] GitHub Copilot चॅलेंजमधून सर्वसमावेशक ग्रेड कॅल्क्युलेटर तयार करा - [ ] वास्तविक जीवनातील परिस्थितीसाठी साधा निर्णय वृक्ष तयार करा (जसे की काय घालायचे ते निवडणे) - [ ] लॉजिकल ऑपरेटरसह एकाधिक अटी एकत्र करण्याचा सराव करा - [ ] विविध उपयोगांसाठी switch स्टेटमेंट्ससह प्रयोग करा ### 📅 तुमचा आठवडाभराचा लॉजिक मास्टरी - [ ] सर्जनशील उदाहरणांसह ऑपरेटर असाइनमेंट पूर्ण करा - [ ] विविध सशर्त संरचना वापरून मिनी क्विझ अॅप्लिकेशन तयार करा - [ ] एक फॉर्म व्हॅलिडेटर तयार करा जो एकाधिक इनपुट अटी तपासतो - [ ] जॉश कोमाऊच्या ऑपरेटर लुकअप सराव करा - [ ] अधिक योग्य सशर्त संरचना वापरण्यासाठी विद्यमान कोड पुनर्रचना करा - [ ] शॉर्ट-सर्किट मूल्यांकन आणि कार्यप्रदर्शन परिणामांचा अभ्यास करा ### 🌟 तुमचा महिनाभराचा परिवर्तन - [ ] जटिल नेस्टेड अटींमध्ये प्रभुत्व मिळवा आणि कोड वाचनीयता टिकवा - [ ] परिष्कृत निर्णय घेण्याच्या लॉजिकसह अॅप्लिकेशन तयार करा - [ ] विद्यमान प्रकल्पांमध्ये सशर्त लॉजिक सुधारण्यासाठी ओपन सोर्समध्ये योगदान द्या - [ ] वेगवेगळ्या सशर्त संरचनांबद्दल आणि प्रत्येकाचा वापर कधी करायचा याबद्दल इतरांना शिकवा - [ ] सशर्त लॉजिकसाठी फंक्शनल प्रोग्रामिंग दृष्टिकोन एक्सप्लोर करा - [ ] सशर्त सर्वोत्तम पद्धतींसाठी वैयक्तिक संदर्भ मार्गदर्शक तयार करा ### 🏆 अंतिम निर्णय घेण्याचा चॅम्पियन चेक-इन तुमच्या लॉजिकल थिंकिंग मास्टरीचा उत्सव साजरा करा: - तुम्ही यशस्वीरित्या अंमलात आणलेला सर्वात जटिल निर्णय लॉजिक कोणता आहे? - कोणती सशर्त रचना तुम्हाला सर्वात नैसर्गिक वाटते आणि का? - लॉजिकल ऑपरेटरबद्दल शिकल्याने तुमच्या समस्या सोडवण्याच्या दृष्टिकोनात कसा बदल झाला आहे? - कोणत्या वास्तविक जीवनातील अॅप्लिकेशनला परिष्कृत निर्णय घेण्याच्या लॉजिकचा फायदा होईल? --- अस्वीकरण: हा दस्तऐवज AI भाषांतर सेवा Co-op Translator वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून झालेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.

javascript

JavaScript मूलभूत गोष्टी: Arrays आणि Loops

## व्याख्यानपूर्व प्रश्नमंजुषा व्याख्यानपूर्व प्रश्नमंजुषा कधी विचार केला आहे की वेबसाइट्स शॉपिंग कार्ट आयटम कसे ट्रॅक करतात किंवा तुमची मित्र यादी कशी दाखवतात? यासाठी arrays आणि loops उपयोगी ठरतात. Arrays म्हणजे डिजिटल कंटेनर आहेत जे अनेक माहितीचे तुकडे ठेवतात, तर loops तुम्हाला ती माहिती कार्यक्षमतेने हाताळण्यास मदत करतात, पुनरावृत्ती कोडशिवाय. एकत्रितपणे, हे दोन संकल्पना तुमच्या प्रोग्राम्समध्ये माहिती हाताळण्यासाठी पाया तयार करतात. तुम्ही प्रत्येक पायरी मॅन्युअली लिहिण्यापासून स्मार्ट, कार्यक्षम कोड तयार करण्याकडे जाल, जो शेकडो किंवा हजारो आयटम जलद प्रक्रिया करू शकतो. या धड्याच्या शेवटी, तुम्ही काही ओळींच्या कोडसह जटिल डेटा कार्ये कशी साध्य करायची ते समजून घ्याल. चला या महत्त्वाच्या प्रोग्रामिंग संकल्पनांचा अभ्यास करूया. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Arrays म्हणजे डिजिटल फाइलिंग कॅबिनेटसारखे - एका ड्रॉवरमध्ये एक दस्तऐवज साठवण्याऐवजी, तुम्ही एकाच संरचित कंटेनरमध्ये अनेक संबंधित आयटम व्यवस्थित करू शकता. प्रोग्रामिंगच्या दृष्टीने, arrays तुम्हाला अनेक माहितीचे तुकडे एका व्यवस्थित पॅकेजमध्ये साठवण्याची परवानगी देतात. तुम्ही फोटो गॅलरी तयार करत असाल, टू-डू लिस्ट व्यवस्थापित करत असाल किंवा गेममध्ये उच्च स्कोर्स ट्रॅक करत असाल, arrays डेटा संघटनासाठी पाया प्रदान करतात. चला ते कसे कार्य करतात ते पाहूया. ✅ Arrays सर्वत्र आहेत! तुम्ही arrays चा वास्तविक जीवनातील उदाहरण विचार करू शकता का, जसे की सौर पॅनेल array? ### Arrays तयार करणे Array तयार करणे खूप सोपे आहे - फक्त चौकोनी कंस वापरा! इथे काय घडत आहे? तुम्ही चौकोनी कंस [] वापरून एक रिकामे कंटेनर तयार केले आहे. याचा विचार रिकाम्या लायब्ररी शेल्फसारखा करा - ते तुम्हाला हवे असलेले कोणतेही पुस्तक व्यवस्थित ठेवण्यासाठी तयार आहे. तुम्ही तुमच्या array ला सुरुवातीपासूनच प्रारंभिक मूल्ये भरून देखील तयार करू शकता: थंड गोष्टी लक्षात ठेवा: - तुम्ही एकाच array मध्ये मजकूर, संख्या किंवा अगदी true/false मूल्ये साठवू शकता - प्रत्येक आयटमला अल्पविरामाने वेगळे करा - सोपे! - संबंधित माहिती एकत्र ठेवण्यासाठी arrays योग्य आहेत ### Array Indexing इथे काहीतरी असामान्य वाटू शकते: arrays त्यांच्या आयटम्सची संख्या 0 पासून सुरू करतात, 1 पासून नाही. ही zero-based indexing संगणक मेमरी कशी कार्य करते याच्या मुळाशी आहे - प्रोग्रामिंग भाषांमध्ये C सारख्या सुरुवातीच्या दिवसांपासून ही एक परंपरा आहे. Array मधील प्रत्येक जागेला index नावाचा स्वतःचा पत्ता क्रमांक मिळतो. ✅ तुम्हाला आश्चर्य वाटते का की arrays 0 index पासून सुरू होतात? काही प्रोग्रामिंग भाषांमध्ये indexes 1 पासून सुरू होतात. यामागे एक मनोरंजक इतिहास आहे, जो तुम्ही Wikipedia वर वाचू शकता. Array घटकांमध्ये प्रवेश करणे: इथे काय घडते ते समजून घ्या: - वापरते square bracket notation index क्रमांकासह घटकांमध्ये प्रवेश करण्यासाठी - परत करते त्या विशिष्ट स्थानावर साठवलेले मूल्य - सुरू करते 0 पासून मोजणे, पहिला घटक index 0 बनवणे Array घटक बदलणे: वर दिलेल्या उदाहरणात, आम्ही: - बदलले index 4 वरील घटक "Rocky Road" वरून "Butter Pecan" मध्ये - जोडले नवीन घटक "Cookie Dough" index 5 वर - स्वतःहून वाढवले array लांबी जेव्हा विद्यमान मर्यादेपेक्षा जास्त जोडले ### Array लांबी आणि सामान्य पद्धती Arrays मध्ये अंगभूत गुणधर्म आणि पद्धती असतात जे डेटा हाताळणे खूप सोपे करतात. Array लांबी शोधणे: लक्षात ठेवण्याचे महत्त्वाचे मुद्दे: - परत करते array मधील एकूण घटकांची संख्या - स्वतःहून अपडेट होते जेव्हा घटक जोडले किंवा काढले जातात - प्रदान करते loops आणि validation साठी एक गतिशील संख्या महत्त्वाच्या Array पद्धती: या पद्धती समजून घ्या: - जोडते घटक push() (शेवटी) आणि unshift() (सुरुवातीला) सह - काढते घटक pop() (शेवटी) आणि shift() (सुरुवातीला) सह - शोधते घटक indexOf() सह आणि अस्तित्व तपासते includes() सह - परत करते उपयुक्त मूल्ये जसे की काढलेले घटक किंवा स्थान क्रमांक ✅ स्वतः प्रयत्न करा! तुमच्या ब्राउझरच्या कन्सोलमध्ये स्वतः तयार केलेल्या array वर प्रक्रिया करा. ### 🧠 Array मूलभूत गोष्टी तपासणी: तुमचा डेटा व्यवस्थित करणे तुमच्या array समज तपासा: - तुम्हाला का वाटते की arrays 0 पासून मोजायला सुरुवात करतात, 1 पासून नाही? - जर तुम्ही अस्तित्वात नसलेल्या index वर प्रवेश करण्याचा प्रयत्न केला (जसे की arr[100] एका 5-घटकांच्या array मध्ये) तर काय होते? - तुम्ही arrays च्या उपयोगासाठी तीन वास्तविक जीवनातील परिस्थिती विचार करू शकता का? ## Loops चार्ल्स डिकन्सच्या कादंबऱ्यांमधील प्रसिद्ध शिक्षा विचार करा जिथे विद्यार्थ्यांना स्लेटवर ओळी वारंवार लिहाव्या लागायच्या. कल्पना करा की तुम्ही कोणाला "ही वाक्ये 100 वेळा लिहा" असे सांगू शकता आणि ते आपोआप पूर्ण होईल. Loops तुमच्या कोडसाठी हेच करतात. Loops म्हणजे एक tireless सहायक आहे जो कार्ये पुनरावृत्तीशिवाय अचूकपणे करू शकतो. तुम्हाला शॉपिंग कार्टमधील प्रत्येक आयटम तपासायचा असेल किंवा अल्बममधील सर्व फोटो दाखवायचे असतील, loops पुनरावृत्ती कार्यक्षमतेने हाताळतात. JavaScript अनेक प्रकारचे loops प्रदान करते. प्रत्येक प्रकार तपासूया आणि ते कधी वापरायचे ते समजून घेऊया. ### For Loop for loop म्हणजे टाइमर सेट करणे - तुम्हाला नक्की किती वेळा काहीतरी घडायचे आहे ते माहित आहे. हे खूप व्यवस्थित आणि अंदाजानुसार आहे, जेव्हा तुम्ही arrays सह काम करत असता किंवा गोष्टी मोजण्याची गरज असते तेव्हा ते परिपूर्ण बनते. For Loop संरचना: पायरी-पायरीने, इथे काय घडत आहे: - सुरुवात करते counter variable i ला 0 वर सेट करून - तपासते condition i < 10 प्रत्येक iteration च्या आधी - अंमलात आणते code block जेव्हा condition true असते - वाढवते i प्रत्येक iteration नंतर 1 ने i++ सह - थांबते जेव्हा condition false होते (जेव्हा i 10 वर पोहोचते) ✅ हा कोड ब्राउझर कन्सोलमध्ये चालवा. Counter, condition किंवा iteration expression मध्ये छोटे बदल केल्यावर काय होते? तुम्ही ते उलट चालवू शकता का, countdown तयार करत? ### 🗓️ For Loop मास्टरी तपासणी: नियंत्रित पुनरावृत्ती तुमच्या for loop समज तपासा: - For loop चे तीन भाग कोणते आहेत आणि प्रत्येक भाग काय करतो? - तुम्ही array मधून उलट कसे loop करू शकता? - Increment भाग (i++) विसरल्यास काय होते? ### While Loop while loop म्हणजे "हे करत रहा जोपर्यंत..." - तुम्हाला नक्की किती वेळा ते चालेल हे माहित नसते, पण तुम्हाला कधी थांबायचे आहे ते माहित असते. हे अशा गोष्टींसाठी परिपूर्ण आहे जसे की वापरकर्त्याला आवश्यक इनपुट देईपर्यंत विचारणे किंवा तुम्हाला हवे असलेले डेटा शोधेपर्यंत शोधणे. While Loop वैशिष्ट्ये: - सुरू ठेवते condition true असताना अंमलात आणणे - मागणी करते कोणत्याही counter variables चे मॅन्युअल व्यवस्थापन - तपासते condition प्रत्येक iteration च्या आधी - धोक्याचा सामना करते infinite loops चा जर condition कधी false होत नसेल या उदाहरणे समजून घ्या: - व्यवस्थापित करते counter variable i loop body मध्ये मॅन्युअली - वाढवते counter infinite loops टाळण्यासाठी - प्रात्यक्षिक देते वापरकर्ता इनपुट आणि प्रयत्न मर्यादेसह व्यावहारिक उपयोग केस - सुरक्षितता यंत्रणा समाविष्ट करते अंतहीन अंमलात टाळण्यासाठी ### ♾️ While Loop ज्ञान तपासणी: Condition-Based पुनरावृत्ती तुमच्या while loop समज तपासा: - While loops वापरताना मुख्य धोका काय आहे? - तुम्ही for loop ऐवजी while loop कधी निवडाल? - तुम्ही infinite loops कसे टाळू शकता? ### आधुनिक Loop पर्याय JavaScript आधुनिक loop syntax प्रदान करते जे तुमचा कोड अधिक वाचनीय आणि कमी त्रुटी-प्रवण बनवू शकतो. For...of Loop (ES6+): For...of चे मुख्य फायदे: - काढून टाकते index व्यवस्थापन आणि संभाव्य off-by-one त्रुटी - प्रदान करते array घटकांमध्ये थेट प्रवेश - सुधारते कोड वाचनीयता आणि syntax जटिलता कमी करते forEach पद्धत: forEach बद्दल तुम्हाला काय माहित असणे आवश्यक आहे: - अंमलात आणते प्रत्येक array घटकासाठी एक function - प्रदान करते घटक मूल्य आणि index दोन्ही parameters म्हणून - थांबवू शकत नाही लवकर (पारंपरिक loops च्या विपरीत) - परत करते undefined (नवीन array तयार करत नाही) ✅ तुम्ही for loop vs. while loop का निवडाल? StackOverflow वर 17K दर्शकांना याच प्रश्नाचे उत्तर हवे होते, आणि काही मते तुमच्यासाठी मनोरंजक असू शकतात. ### 🎨 आधुनिक Loop Syntax तपासणी: ES6+ स्वीकारणे तुमच्या आधुनिक JavaScript समज तपासा: - पारंपरिक for loops च्या तुलनेत for...of चे फायदे काय आहेत? - तुम्ही अजूनही पारंपरिक for loops का निवडाल? - forEach आणि map मध्ये काय फरक आहे? ## Loops आणि Arrays Arrays सह loops एकत्र करणे शक्तिशाली डेटा प्रक्रिया क्षमता तयार करते. ही जोडणी अनेक प्रोग्रामिंग कार्यांसाठी मूलभूत आहे, यादी दाखवण्यापासून ते आकडेवारी मोजण्यापर्यंत. पारंपरिक Array प्रक्रिया: प्रत्येक दृष्टिकोन समजून घ्या: - वापरते array लांबी गुणधर्म loop सीमा निश्चित करण्यासाठी - प्रवेश करते घटक index द्वारे पारंपरिक for loops मध्ये - प्रदान करते थेट घटक प्रवेश for...of loops मध्ये - प्रक्रिया करते प्रत्येक array घटक एकदाच अचूकपणे व्यावहारिक डेटा प्रक्रिया उदाहरण: हा कोड कसा कार्य करतो: - सुरुवात करते sum आणि extremes साठी tracking variables - प्रक्रिया करते प्रत्येक grade एकाच कार्यक्षम loop सह - संचयित करते average calculation साठी एकूण - ट्रॅक करते iteration दरम्यान उच्चतम आणि न्यूनतम मूल्ये - मोजते अंतिम आकडेवारी loop पूर्ण झाल्यानंतर ✅ तुमच्या ब्राउझरच्या कन्सोलमध्ये स्वतः तयार केलेल्या array वर loop करून प्रयोग करा. --- ## GitHub Copilot Agent Challenge 🚀 Agent mode वापरून खालील challenge पूर्ण करा: वर्णन: एक व्यापक डेटा प्रक्रिया function तयार करा जे arrays आणि loops एकत्र करून dataset चे विश्लेषण करते आणि अर्थपूर्ण अंतर्दृष्टी निर्माण करते. Prompt: analyzeGrades नावाचे function तयार करा जे student grade objects च्या array (प्रत्येकात name आणि score गुणधर्म असतो) घेते आणि statistics सह object परत करते ज्यामध्ये उच्चतम score, न्यूनतम score, सरासरी score, पास झालेल्या विद्यार्थ्यांची संख्या (score >= 70), आणि सरासरीपेक्षा जास्त score असलेल्या विद्यार्थ्यांची नावे असलेला array समाविष्ट आहे. तुमच्या solution मध्ये किमान दोन वेगवेगळ्या loop प्रकारांचा वापर करा. Agent mode बद्दल अधिक जाणून घ्या इथे. ## 🚀 Challenge JavaScript अनेक आधुनिक array पद्धती प्रदान करते ज्या विशिष्ट कार्यांसाठी पारंपरिक loops ची जागा घेऊ शकतात. forEach, for-of, map, filter, आणि reduce यांचा अभ्यास करा. तुमचं आव्हान: कमीतकमी तीन वेगवेगळ्या array पद्धती वापरून विद्यार्थ्यांच्या गुणांचे उदाहरण पुन्हा लिहा. आधुनिक JavaScript सिंटॅक्ससह कोड किती स्वच्छ आणि वाचनीय होतो ते लक्षात घ्या. ## व्याख्यानानंतरचा क्विझ व्याख्यानानंतरचा क्विझ ## पुनरावलोकन आणि स्व-अभ्यास JavaScript मधील arrays मध्ये अनेक पद्धती असतात ज्या डेटा manipulation साठी अत्यंत उपयुक्त असतात. या पद्धतींबद्दल वाचा आणि तुमच्या स्वतःच्या array वर काही पद्धती (जसे की push, pop, slice आणि splice) वापरून पहा. ## असाइनमेंट Loop an Array --- ## 📊 तुमचं Arrays & Loops टूलकिट सारांश --- ## 🚀 तुमचं Arrays & Loops मास्टरी टाइमलाइन ### ⚡ पुढील ५ मिनिटांत तुम्ही काय करू शकता - [ ] तुमच्या आवडत्या चित्रपटांचा एक array तयार करा आणि विशिष्ट घटक access करा - [ ] १ ते १० पर्यंत मोजणारा एक for loop लिहा - [ ] व्याख्यानातील आधुनिक array पद्धतींचं आव्हान पूर्ण करा - [ ] तुमच्या ब्राउझर कन्सोलमध्ये array indexing सराव करा ### 🎯 तुमच्या एका तासात साध्य होणाऱ्या गोष्टी - [ ] व्याख्यानानंतरचा क्विझ पूर्ण करा आणि कोणतेही आव्हानात्मक संकल्पना पुनरावलोकन करा - [ ] GitHub Copilot चॅलेंजमधील comprehensive grade analyzer तयार करा - [ ] एक साधा shopping cart तयार करा जो वस्तू add आणि remove करतो - [ ] वेगवेगळ्या loop प्रकारांमध्ये रूपांतर करण्याचा सराव करा - [ ] push, pop, slice, आणि splice सारख्या array पद्धतींचा प्रयोग करा ### 📅 तुमचा आठवडाभराचा डेटा प्रोसेसिंग प्रवास - [ ] "Loop an Array" असाइनमेंट क्रिएटिव enhancements सह पूर्ण करा - [ ] arrays आणि loops वापरून एक to-do list application तयार करा - [ ] संख्यात्मक डेटासाठी एक साधा statistics calculator तयार करा - [ ] MDN array पद्धती वापरून सराव करा - [ ] एक photo gallery किंवा music playlist interface तयार करा - [ ] map, filter, आणि reduce सह functional programming चा अभ्यास करा ### 🌟 तुमचा महिनाभराचा परिवर्तन - [ ] प्रगत array ऑपरेशन्स आणि कार्यक्षमता ऑप्टिमायझेशनमध्ये प्रावीण्य मिळवा - [ ] एक पूर्ण डेटा व्हिज्युअलायझेशन डॅशबोर्ड तयार करा - [ ] डेटा प्रोसेसिंगसाठी ओपन सोर्स प्रोजेक्ट्समध्ये योगदान द्या - [ ] व्यावहारिक उदाहरणांसह कोणाला तरी arrays आणि loops बद्दल शिकवा - [ ] पुन्हा वापरता येणाऱ्या डेटा प्रोसेसिंग फंक्शन्सची वैयक्तिक लायब्ररी तयार करा - [ ] arrays वर आधारित अल्गोरिदम आणि डेटा स्ट्रक्चर्सचा अभ्यास करा ### 🏆 अंतिम डेटा प्रोसेसिंग चॅम्पियन चेक-इन तुमच्या array आणि loop प्रावीण्याचा उत्सव साजरा करा: - वास्तविक जगातील अनुप्रयोगांसाठी तुम्हाला शिकलेली सर्वात उपयुक्त array ऑपरेशन कोणती आहे? - कोणता loop प्रकार तुम्हाला सर्वात नैसर्गिक वाटतो आणि का? - arrays आणि loops समजून घेतल्यामुळे डेटा आयोजित करण्याच्या तुमच्या दृष्टिकोनात कसा बदल झाला आहे? - पुढे कोणते जटिल डेटा प्रोसेसिंग कार्य तुम्ही हाताळू इच्छिता? --- अस्वीकरण: हा दस्तऐवज AI भाषांतर सेवा Co-op Translator वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपयास लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.

javascript,array,loop

Pengenalan kepada JavaScript

JavaScript adalah bahasa untuk web. Dalam empat pelajaran ini, anda akan mempelajari asas-asasnya. ### Topik 1. Pembolehubah dan Jenis Data 2. Fungsi dan Kaedah 3. Membuat Keputusan dengan JavaScript 4. Array dan Gelung ### Kredit Pelajaran ini ditulis dengan ♥️ oleh Jasmine Greenaway, Christopher Harrison dan Chris Noring --- Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.

javascript

Asas JavaScript: Jenis Data

Jenis data adalah salah satu konsep asas dalam JavaScript yang akan anda temui dalam setiap program yang anda tulis. Fikirkan jenis data seperti sistem pengarkiban yang digunakan oleh pustakawan kuno di Alexandria – mereka mempunyai tempat khusus untuk gulungan yang mengandungi puisi, matematik, dan rekod sejarah. JavaScript mengatur maklumat dengan cara yang serupa dengan kategori yang berbeza untuk pelbagai jenis data. Dalam pelajaran ini, kita akan meneroka jenis data teras yang membuat JavaScript berfungsi. Anda akan belajar bagaimana mengendalikan nombor, teks, nilai benar/palsu, dan memahami mengapa memilih jenis yang betul adalah penting untuk program anda. Konsep ini mungkin kelihatan abstrak pada mulanya, tetapi dengan latihan, ia akan menjadi kebiasaan. Memahami jenis data akan menjadikan segala-galanya dalam JavaScript lebih jelas. Sama seperti arkitek perlu memahami bahan binaan yang berbeza sebelum membina katedral, asas ini akan menyokong segala yang anda bina pada masa akan datang. ## Kuiz Pra-Pelajaran Kuiz pra-pelajaran Pelajaran ini merangkumi asas JavaScript, bahasa yang menyediakan interaktiviti di web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Pemboleh ubah dalam JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Jenis Data dalam JavaScript") Mari kita mulakan dengan pemboleh ubah dan jenis data yang mengisinya! ## Pemboleh Ubah Pemboleh ubah adalah blok binaan asas dalam pengaturcaraan. Seperti balang berlabel yang digunakan oleh ahli alkimia zaman pertengahan untuk menyimpan bahan yang berbeza, pemboleh ubah membolehkan anda menyimpan maklumat dan memberikannya nama deskriptif supaya anda boleh merujuknya kemudian. Perlu ingat umur seseorang? Simpan dalam pemboleh ubah bernama age. Mahu menjejaki nama pengguna? Simpan dalam pemboleh ubah bernama userName. Kami akan memberi tumpuan kepada pendekatan moden untuk mencipta pemboleh ubah dalam JavaScript. Teknik yang akan anda pelajari di sini mewakili evolusi bahasa selama bertahun-tahun dan amalan terbaik yang dibangunkan oleh komuniti pengaturcaraan. Mencipta dan mengisytiharkan pemboleh ubah mempunyai sintaks berikut [keyword] [name]. Ia terdiri daripada dua bahagian: - Kata kunci. Gunakan let untuk pemboleh ubah yang boleh berubah, atau const untuk nilai yang kekal. - Nama pemboleh ubah, ini adalah nama deskriptif yang anda pilih sendiri. ✅ Kata kunci let diperkenalkan dalam ES6 dan memberikan pemboleh ubah anda apa yang dipanggil _skop blok_. Adalah disyorkan agar anda menggunakan let atau const dan bukannya kata kunci var yang lebih lama. Kami akan membincangkan skop blok dengan lebih mendalam dalam bahagian seterusnya. ### Tugasan - bekerja dengan pemboleh ubah 1. Isytiharkan pemboleh ubah. Mari mulakan dengan mencipta pemboleh ubah pertama kita: ```javascript let myVariable; ``` Apa yang dicapai: - Ini memberitahu JavaScript untuk mencipta lokasi storan bernama myVariable - JavaScript memperuntukkan ruang dalam memori untuk pemboleh ubah ini - Pemboleh ubah pada masa ini tidak mempunyai nilai (undefined) 2. Berikan nilai. Sekarang mari kita letakkan sesuatu dalam pemboleh ubah kita: ```javascript myVariable = 123; ``` Bagaimana tugasan berfungsi: - Operator = memberikan nilai 123 kepada pemboleh ubah kita - Pemboleh ubah kini mengandungi nilai ini dan bukannya undefined - Anda boleh merujuk nilai ini sepanjang kod anda menggunakan myVariable > Nota: penggunaan = dalam pelajaran ini bermaksud kita menggunakan "operator tugasan", digunakan untuk menetapkan nilai kepada pemboleh ubah. Ia tidak menunjukkan kesamaan. 3. Lakukan dengan cara yang bijak. Sebenarnya, mari kita gabungkan kedua-dua langkah itu: ```javascript let myVariable = 123; ``` Pendekatan ini lebih cekap: - Anda mengisytiharkan pemboleh ubah dan memberikan nilai dalam satu pernyataan - Ini adalah amalan standard di kalangan pembangun - Ia mengurangkan panjang kod sambil mengekalkan kejelasan 4. Ubah fikiran anda. Bagaimana jika kita mahu menyimpan nombor yang berbeza? ```javascript myVariable = 321; ``` Memahami penugasan semula: - Pemboleh ubah kini mengandungi 321 dan bukannya 123 - Nilai sebelumnya digantikan – pemboleh ubah hanya menyimpan satu nilai pada satu masa - Kebolehubahan ini adalah ciri utama pemboleh ubah yang diisytiharkan dengan let ✅ Cuba! Anda boleh menulis JavaScript terus dalam pelayar anda. Buka tetingkap pelayar dan navigasi ke Alat Pembangun. Dalam konsol, anda akan menemui prompt; taip let myVariable = 123, tekan enter, kemudian taip myVariable. Apa yang berlaku? Nota, anda akan belajar lebih lanjut tentang konsep ini dalam pelajaran seterusnya. ### 🧠 Semakan Penguasaan Pemboleh Ubah: Menjadi Selesa Mari lihat bagaimana perasaan anda tentang pemboleh ubah: - Bolehkah anda menerangkan perbezaan antara mengisytiharkan dan memberikan pemboleh ubah? - Apa yang berlaku jika anda cuba menggunakan pemboleh ubah sebelum anda mengisytiharkannya? - Bilakah anda akan memilih let berbanding const untuk pemboleh ubah? ## Konstanta Kadang-kadang anda perlu menyimpan maklumat yang tidak boleh berubah semasa pelaksanaan program. Fikirkan konstanta seperti prinsip matematik yang Euclid tetapkan di Yunani kuno – setelah dibuktikan dan didokumentasikan, ia kekal tetap untuk semua rujukan masa depan. Konstanta berfungsi sama seperti pemboleh ubah, tetapi dengan sekatan penting: setelah anda memberikan nilainya, ia tidak boleh diubah. Ketidakbolehubahan ini membantu mencegah pengubahsuaian tidak sengaja kepada nilai kritikal dalam program anda. Pengisytiharan dan inisialisasi konstanta mengikuti konsep yang sama seperti pemboleh ubah, dengan pengecualian kata kunci const. Konstanta biasanya diisytiharkan dengan huruf besar semua. Inilah yang dilakukan oleh kod ini: - Mencipta konstanta bernama MY_VARIABLE dengan nilai 123 - Menggunakan konvensyen penamaan huruf besar untuk konstanta - Menghalang sebarang perubahan masa depan kepada nilai ini Konstanta mempunyai dua peraturan utama: - Anda mesti memberikan nilai dengan segera – tiada konstanta kosong dibenarkan! - Anda tidak boleh mengubah nilai itu – JavaScript akan membuang ralat jika anda mencuba. Mari lihat apa yang saya maksudkan: Nilai mudah - Yang berikut TIDAK dibenarkan: ```javascript const PI = 3; PI = 4; // tidak dibenarkan ``` Apa yang perlu anda ingat: - Percubaan untuk menetapkan semula konstanta akan menyebabkan ralat - Melindungi nilai penting daripada perubahan tidak sengaja - Memastikan nilai kekal konsisten sepanjang program anda Rujukan objek dilindungi - Yang berikut TIDAK dibenarkan: ```javascript const obj = { a: 3 }; obj = { b: 5 } // tidak dibenarkan ``` Memahami konsep ini: - Menghalang penggantian keseluruhan objek dengan yang baru - Melindungi rujukan kepada objek asal - Menjaga identiti objek dalam memori Nilai objek tidak dilindungi - Yang berikut DIBENARKAN: ```javascript const obj = { a: 3 }; obj.a = 5; // dibenarkan ``` Memecahkan apa yang berlaku di sini: - Mengubah nilai sifat dalam objek - Menjaga rujukan objek yang sama - Menunjukkan bahawa kandungan objek boleh berubah sementara rujukan kekal tetap > Nota, const bermaksud rujukan dilindungi daripada penugasan semula. Walau bagaimanapun, nilai itu tidak _tidak boleh diubah_ dan boleh berubah, terutamanya jika ia adalah struktur kompleks seperti objek. ## Jenis Data JavaScript mengatur maklumat ke dalam kategori yang berbeza yang dipanggil jenis data. Konsep ini mencerminkan bagaimana sarjana kuno mengkategorikan pengetahuan – Aristotle membezakan antara jenis penaakulan yang berbeza, mengetahui bahawa prinsip logik tidak boleh digunakan secara seragam untuk puisi, matematik, dan falsafah semula jadi. Jenis data penting kerana operasi yang berbeza berfungsi dengan jenis maklumat yang berbeza. Sama seperti anda tidak boleh melakukan aritmetik pada nama seseorang atau mengabjadkan persamaan matematik, JavaScript memerlukan jenis data yang sesuai untuk setiap operasi. Memahami ini menghalang ralat dan menjadikan kod anda lebih boleh dipercayai. Pemboleh ubah boleh menyimpan pelbagai jenis nilai, seperti nombor dan teks. Pelbagai jenis nilai ini dikenali sebagai jenis data. Jenis data adalah bahagian penting dalam pembangunan perisian kerana ia membantu pembangun membuat keputusan tentang bagaimana kod harus ditulis dan bagaimana perisian harus berjalan. Selain itu, beberapa jenis data mempunyai ciri unik yang membantu mengubah atau mengekstrak maklumat tambahan dalam nilai. ✅ Jenis Data juga dirujuk sebagai primitif data JavaScript, kerana ia adalah jenis data peringkat terendah yang disediakan oleh bahasa. Terdapat 7 primitif data: string, number, bigint, boolean, undefined, null dan symbol. Luangkan masa untuk membayangkan apa yang setiap primitif ini mungkin wakili. Apa itu zebra? Bagaimana dengan 0? true? ### Nombor Nombor adalah jenis data yang paling mudah dalam JavaScript. Sama ada anda bekerja dengan nombor bulat seperti 42, perpuluhan seperti 3.14, atau nombor negatif seperti -5, JavaScript mengendalikannya secara seragam. Ingat pemboleh ubah kita dari tadi? 123 yang kita simpan sebenarnya adalah jenis data nombor: Ciri utama: - JavaScript secara automatik mengenali nilai berangka - Anda boleh melakukan operasi matematik dengan pemboleh ubah ini - Tiada pengisytiharan jenis eksplisit diperlukan Pemboleh ubah boleh menyimpan semua jenis nombor, termasuk perpuluhan atau nombor negatif. Nombor juga boleh digunakan dengan operator aritmetik, yang dibincangkan dalam bahagian seterusnya. ### Operator Aritmetik Operator aritmetik membolehkan anda melakukan pengiraan matematik dalam JavaScript. Operator ini mengikuti prinsip yang sama yang digunakan oleh ahli matematik selama berabad-abad – simbol yang sama yang muncul dalam karya sarjana seperti Al-Khwarizmi, yang membangunkan notasi algebra. Operator berfungsi seperti yang anda jangkakan daripada matematik tradisional: tambah untuk penjumlahan, tolak untuk penolakan, dan sebagainya. Terdapat beberapa jenis operator untuk digunakan semasa melakukan fungsi aritmetik, dan beberapa disenaraikan di sini: ✅ Cuba! Cuba operasi aritmetik dalam konsol pelayar anda. Adakah hasilnya mengejutkan anda? ### 🧮 Semakan Kemahiran Matematik: Mengira dengan Yakin Uji pemahaman aritmetik anda: - Apakah perbezaan antara / (pembahagian) dan % (baki)? - Bolehkah anda meramalkan apa yang 10 % 3 sama dengan? (Petunjuk: ia bukan 3.33...) - Mengapa operator baki mungkin berguna dalam pengaturcaraan? ### String Dalam JavaScript, data teks diwakili sebagai string. Istilah "string" berasal dari konsep watak yang disusun bersama dalam urutan, seperti cara penulis di biara zaman pertengahan akan menghubungkan huruf untuk membentuk perkataan dan ayat dalam manuskrip mereka. String adalah asas kepada pembangunan web. Setiap bahagian teks yang dipaparkan di laman web – nama pengguna, label butang, mesej ralat, kandungan – dikendalikan sebagai data string. Memahami string adalah penting untuk mencipta antara muka pengguna yang berfungsi. String adalah set aksara yang berada di antara tanda petik tunggal atau berganda. Memahami konsep ini: - Menggunakan sama ada tanda petik tunggal ' atau tanda petik berganda " untuk mentakrifkan string - Menyimpan data teks yang boleh termasuk huruf, nombor, dan simbol - Menetapkan nilai string kepada pemboleh ubah untuk digunakan kemudian - Memerlukan tanda petik untuk membezakan teks daripada nama pemboleh ubah Ingat untuk menggunakan tanda petik semasa menulis string, jika tidak JavaScript akan menganggap ia adalah nama pemboleh ubah. ### Pemformatan String Manipulasi string membolehkan anda menggabungkan elemen teks, menggabungkan pemboleh ubah, dan mencipta kandungan dinamik yang bertindak balas kepada keadaan program. Teknik ini membolehkan anda membina teks secara programatik. Selalunya anda perlu menggabungkan beberapa string bersama – proses ini dipanggil penggabungan. Untuk menggabungkan dua atau lebih string, atau menyatukannya, gunakan operator +. Langkah demi langkah, inilah yang berlaku: - Menggabungkan beberapa string menggunakan operator + - Menyatukan string secara langsung tanpa ruang dalam contoh pertama - Menambah ruang " " antara string untuk memudahkan pembacaan - Menyisipkan tanda baca seperti koma untuk mencipta format yang betul ✅ Kenapa 1 + 1 = 2 dalam JavaScript, tetapi '1' + '1' = 11? Fikirkan tentang ini. Bagaimana pula dengan '1' + 1? Template literals adalah cara lain untuk memformat string, tetapi bukannya menggunakan tanda petik, ia menggunakan backtick. Apa sahaja yang bukan teks biasa mesti diletakkan dalam placeholder ${ }. Ini termasuk sebarang pemboleh ubah yang mungkin berupa string. Mari kita fahami setiap bahagian: - Menggunakan backtick ` `` dan bukannya tanda petik biasa untuk mencipta template literals - Menyisipkan pemboleh ubah secara langsung menggunakan sintaks placeholder ${} - Memelihara ruang dan format seperti yang ditulis - Menyediakan cara yang lebih kemas untuk mencipta string kompleks dengan pemboleh ubah Anda boleh mencapai matlamat pemformatan anda dengan mana-mana kaedah, tetapi template literals akan mengekalkan sebarang ruang dan baris baru. ✅ Bilakah anda akan menggunakan template literal berbanding string biasa? ### 🔤 Semak Penguasaan String: Keyakinan Manipulasi Teks Uji kemahiran string anda: - Bolehkah anda jelaskan kenapa '1' + '1' sama dengan '11' dan bukannya 2? - Kaedah string mana yang anda rasa lebih mudah dibaca: penggabungan atau template literals? - Apa yang berlaku jika anda terlupa meletakkan tanda petik di sekeliling string? ### Booleans Boolean mewakili bentuk data yang paling mudah: ia hanya boleh memegang salah satu daripada dua nilai – true atau false. Sistem logik binari ini berasal dari kerja George Boole, seorang ahli matematik abad ke-19 yang membangunkan algebra Boolean. Walaupun ringkas, boolean sangat penting untuk logik program. Ia membolehkan kod anda membuat keputusan berdasarkan syarat – sama ada pengguna telah log masuk, jika butang telah diklik, atau jika kriteria tertentu dipenuhi. Boolean hanya boleh mempunyai dua nilai: true atau false. Boolean membantu membuat keputusan tentang baris kod mana yang harus dijalankan apabila syarat tertentu dipenuhi. Dalam banyak kes, operator membantu menetapkan nilai Boolean dan anda sering akan melihat dan menulis pemboleh ubah yang diinisialisasi atau nilainya dikemas kini dengan operator. Dalam contoh di atas, kita telah: - Mencipta pemboleh ubah yang menyimpan nilai Boolean true - Menunjukkan cara menyimpan nilai Boolean false - Menggunakan kata kunci tepat true dan false (tanpa tanda petik) - Menyediakan pemboleh ubah ini untuk digunakan dalam pernyataan bersyarat ✅ Pemboleh ubah boleh dianggap 'truthy' jika ia dinilai sebagai boolean true. Menariknya, dalam JavaScript, semua nilai adalah truthy kecuali ditakrifkan sebagai falsy. ### 🎯 Semak Logik Boolean: Kemahiran Membuat Keputusan Uji pemahaman boolean anda: - Kenapa anda fikir JavaScript mempunyai nilai "truthy" dan "falsy" selain hanya true dan false? - Bolehkah anda ramalkan mana yang falsy: 0, "0", [], "false"? - Bagaimana boolean boleh berguna dalam mengawal aliran program? --- ## 📊 Ringkasan Toolkit Jenis Data Anda ## Cabaran Ejen GitHub Copilot 🚀 Gunakan mod Ejen untuk melengkapkan cabaran berikut: Penerangan: Cipta pengurus maklumat peribadi yang menunjukkan semua jenis data JavaScript yang telah anda pelajari dalam pelajaran ini sambil mengendalikan senario data dunia nyata. Arahan: Bina program JavaScript yang mencipta objek profil pengguna yang mengandungi: nama seseorang (string), umur (nombor), status pelajar (boolean), warna kegemaran sebagai array, dan objek alamat dengan sifat jalan, bandar, dan kod pos. Sertakan fungsi untuk memaparkan maklumat profil dan mengemas kini medan individu. Pastikan untuk menunjukkan penggabungan string, template literals, operasi aritmetik dengan umur, dan logik boolean untuk status pelajar. Ketahui lebih lanjut tentang mod ejen di sini. ## 🚀 Cabaran JavaScript mempunyai beberapa tingkah laku yang boleh mengejutkan pembangun. Berikut adalah contoh klasik untuk diterokai: cuba taip ini dalam konsol pelayar anda: let age = 1; let Age = 2; age == Age dan perhatikan hasilnya. Ia akan mengembalikan false – bolehkah anda tentukan kenapa? Ini mewakili salah satu daripada banyak tingkah laku JavaScript yang patut difahami. Memahami keunikan ini akan membantu anda menulis kod yang lebih boleh dipercayai dan menyelesaikan masalah dengan lebih berkesan. ## Kuiz Selepas Kuliah Kuiz selepas kuliah ## Ulasan & Kajian Sendiri Lihat senarai latihan JavaScript ini dan cuba satu. Apa yang anda pelajari? ## Tugasan Latihan Jenis Data ## 🚀 Garis Masa Penguasaan Jenis Data JavaScript Anda ### ⚡ Apa yang Boleh Anda Lakukan Dalam 5 Minit Seterusnya - [ ] Buka konsol pelayar anda dan cipta 3 pemboleh ubah dengan jenis data yang berbeza - [ ] Cuba cabaran: let age = 1; let Age = 2; age == Age dan cari tahu kenapa ia false - [ ] Latih penggabungan string dengan nama anda dan nombor kegemaran anda - [ ] Uji apa yang berlaku apabila anda menambah nombor kepada string ### 🎯 Apa yang Boleh Anda Capai Dalam Satu Jam - [ ] Lengkapkan kuiz selepas pelajaran dan ulas sebarang konsep yang mengelirukan - [ ] Cipta kalkulator mini yang menambah, menolak, mendarab, dan membahagi dua nombor - [ ] Bina pemformat nama ringkas menggunakan template literals - [ ] Terokai perbezaan antara operator perbandingan == dan === - [ ] Latih menukar antara jenis data yang berbeza ### 📅 Asas JavaScript Anda Sepanjang Minggu - [ ] Lengkapkan tugasan dengan keyakinan dan kreativiti - [ ] Cipta objek profil peribadi menggunakan semua jenis data yang telah dipelajari - [ ] Latih dengan latihan JavaScript dari CSS-Tricks - [ ] Bina validator borang ringkas menggunakan logik boolean - [ ] Eksperimen dengan jenis data array dan objek (pratonton pelajaran akan datang) - [ ] Sertai komuniti JavaScript dan ajukan soalan tentang jenis data ### 🌟 Transformasi Sebulan Anda - [ ] Gabungkan pengetahuan jenis data ke dalam projek pengaturcaraan yang lebih besar - [ ] Fahami bila dan kenapa menggunakan setiap jenis data dalam aplikasi sebenar - [ ] Bantu pemula lain memahami asas JavaScript - [ ] Bina aplikasi kecil yang menguruskan pelbagai jenis data pengguna - [ ] Terokai konsep jenis data lanjutan seperti paksaan jenis dan kesetaraan ketat - [ ] Sumbang kepada projek JavaScript sumber terbuka dengan penambahbaikan dokumentasi ### 🧠 Semakan Akhir Penguasaan Jenis Data Raikan asas JavaScript anda: - Jenis data mana yang paling mengejutkan anda dari segi tingkah lakunya? - Sejauh mana anda selesa menjelaskan perbezaan antara pemboleh ubah dan pemalar kepada rakan? - Apa perkara paling menarik yang anda temui tentang sistem jenis JavaScript? - Aplikasi dunia nyata apa yang anda bayangkan boleh dibina dengan asas ini? --- Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.

javascript,data

Asas JavaScript: Kaedah dan Fungsi

## Kuiz Pra-Kuliah Kuiz pra-kuliah Menulis kod yang sama berulang kali adalah salah satu kekecewaan paling biasa dalam pengaturcaraan. Fungsi menyelesaikan masalah ini dengan membolehkan anda membungkus kod ke dalam blok yang boleh digunakan semula. Fikirkan fungsi seperti bahagian standard yang menjadikan barisan pemasangan Henry Ford revolusioner – setelah anda mencipta komponen yang boleh dipercayai, anda boleh menggunakannya di mana sahaja diperlukan tanpa perlu membina semula dari awal. Fungsi membolehkan anda mengumpulkan bahagian kod supaya anda boleh menggunakannya semula di seluruh program anda. Daripada menyalin dan menampal logik yang sama di mana-mana, anda boleh mencipta fungsi sekali dan memanggilnya bila-bila masa diperlukan. Pendekatan ini menjadikan kod anda lebih teratur dan memudahkan kemas kini. Dalam pelajaran ini, anda akan belajar cara mencipta fungsi anda sendiri, menghantar maklumat kepadanya, dan mendapatkan hasil yang berguna kembali. Anda akan menemui perbezaan antara fungsi dan kaedah, mempelajari pendekatan sintaks moden, dan melihat bagaimana fungsi boleh berfungsi dengan fungsi lain. Kami akan membina konsep ini langkah demi langkah. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Kaedah dan Fungsi") ## Fungsi Fungsi ialah blok kod yang berdiri sendiri yang melaksanakan tugas tertentu. Ia merangkumi logik yang boleh anda laksanakan bila-bila masa diperlukan. Daripada menulis kod yang sama berulang kali di seluruh program anda, anda boleh membungkusnya dalam fungsi dan memanggil fungsi itu bila-bila masa anda memerlukannya. Pendekatan ini menjadikan kod anda bersih dan memudahkan kemas kini. Fikirkan cabaran penyelenggaraan jika anda perlu menukar logik yang tersebar di 20 lokasi berbeza dalam pangkalan kod anda. Menamakan fungsi anda dengan deskriptif adalah penting. Fungsi yang dinamakan dengan baik menyampaikan tujuannya dengan jelas – apabila anda melihat cancelTimer(), anda segera memahami apa yang dilakukannya, sama seperti butang yang dilabel dengan jelas memberitahu anda dengan tepat apa yang akan berlaku apabila anda mengkliknya. ## Mencipta dan memanggil fungsi Mari kita lihat cara mencipta fungsi. Sintaksnya mengikuti corak yang konsisten: Mari kita pecahkan: - Kata kunci function memberitahu JavaScript "Hei, saya sedang mencipta fungsi!" - nameOfFunction ialah tempat anda memberikan nama deskriptif kepada fungsi anda - Kurungan () ialah tempat anda boleh menambah parameter (kita akan sampai ke situ sebentar lagi) - Kurungan keriting {} mengandungi kod sebenar yang dijalankan apabila anda memanggil fungsi Mari kita cipta fungsi ucapan ringkas untuk melihat ini dalam tindakan: Fungsi ini mencetak "Hello, world!" ke konsol. Setelah anda mendefinisikannya, anda boleh menggunakannya sebanyak mana yang diperlukan. Untuk melaksanakan (atau "memanggil") fungsi anda, tulis namanya diikuti dengan kurungan. JavaScript membolehkan anda mendefinisikan fungsi anda sebelum atau selepas anda memanggilnya – enjin JavaScript akan mengendalikan susunan pelaksanaan. Apabila anda menjalankan baris ini, ia melaksanakan semua kod dalam fungsi displayGreeting anda, memaparkan "Hello, world!" dalam konsol pelayar anda. Anda boleh memanggil fungsi ini berulang kali. ### 🧠 Semakan Asas Fungsi: Membina Fungsi Pertama Anda Mari lihat bagaimana perasaan anda tentang fungsi asas: - Bolehkah anda terangkan mengapa kita menggunakan kurungan keriting {} dalam definisi fungsi? - Apa yang berlaku jika anda menulis displayGreeting tanpa kurungan? - Mengapa anda mungkin mahu memanggil fungsi yang sama beberapa kali? ### Amalan terbaik fungsi Berikut adalah beberapa petua untuk membantu anda menulis fungsi yang hebat: - Berikan nama yang jelas dan deskriptif kepada fungsi anda – diri anda di masa depan akan berterima kasih! - Gunakan camelCasing untuk nama berbilang perkataan (seperti calculateTotal dan bukannya calculate_total) - Pastikan setiap fungsi memberi tumpuan kepada melakukan satu perkara dengan baik ## Menghantar maklumat kepada fungsi Fungsi displayGreeting kita terhad – ia hanya boleh memaparkan "Hello, world!" untuk semua orang. Parameter membolehkan kita menjadikan fungsi lebih fleksibel dan berguna. Parameter bertindak seperti tempat letak di mana anda boleh memasukkan nilai yang berbeza setiap kali anda menggunakan fungsi. Dengan cara ini, fungsi yang sama boleh berfungsi dengan maklumat yang berbeza pada setiap panggilan. Anda menyenaraikan parameter di dalam kurungan apabila anda mendefinisikan fungsi anda, memisahkan parameter berbilang dengan koma: Setiap parameter bertindak seperti tempat letak – apabila seseorang memanggil fungsi anda, mereka akan memberikan nilai sebenar yang dimasukkan ke dalam tempat ini. Mari kita kemas kini fungsi ucapan kita untuk menerima nama seseorang: Perhatikan bagaimana kita menggunakan tanda belakang (` `) dan ${}` untuk memasukkan nama terus ke dalam mesej kita – ini dipanggil literal templat, dan ia adalah cara yang sangat berguna untuk membina rentetan dengan pembolehubah bercampur. Sekarang apabila kita memanggil fungsi kita, kita boleh menghantar sebarang nama: JavaScript mengambil rentetan 'Christopher', memberikannya kepada parameter name, dan mencipta mesej peribadi "Hello, Christopher!" ## Nilai lalai Bagaimana jika kita mahu menjadikan beberapa parameter pilihan? Di sinilah nilai lalai berguna! Katakan kita mahu orang dapat menyesuaikan perkataan ucapan, tetapi jika mereka tidak menentukan satu, kita hanya akan menggunakan "Hello" sebagai sandaran. Anda boleh menyediakan nilai lalai dengan menggunakan tanda sama, sama seperti menetapkan pembolehubah: Di sini, name masih diperlukan, tetapi salutation mempunyai nilai sandaran 'Hello' jika tiada siapa yang memberikan ucapan yang berbeza. Sekarang kita boleh memanggil fungsi ini dengan dua cara berbeza: Dalam panggilan pertama, JavaScript menggunakan "Hello" lalai kerana kita tidak menentukan ucapan. Dalam panggilan kedua, ia menggunakan "Hi" tersuai kita. Fleksibiliti ini menjadikan fungsi boleh disesuaikan dengan senario yang berbeza. ### 🎛️ Semakan Penguasaan Parameter: Menjadikan Fungsi Fleksibel Uji pemahaman parameter anda: - Apakah perbezaan antara parameter dan argumen? - Mengapa nilai lalai berguna dalam pengaturcaraan dunia sebenar? - Bolehkah anda meramalkan apa yang berlaku jika anda menghantar lebih banyak argumen daripada parameter? ## Nilai pulangan Fungsi kita setakat ini hanya mencetak mesej ke konsol, tetapi bagaimana jika anda mahu fungsi mengira sesuatu dan memberikan hasilnya kembali kepada anda? Di sinilah nilai pulangan masuk. Daripada hanya memaparkan sesuatu, fungsi boleh memberikan nilai kepada anda yang boleh anda simpan dalam pembolehubah atau gunakan di bahagian lain kod anda. Untuk menghantar nilai kembali, anda menggunakan kata kunci return diikuti dengan apa sahaja yang anda mahu kembalikan: Ini sesuatu yang penting: apabila fungsi mencapai pernyataan return, ia segera berhenti berjalan dan menghantar nilai itu kembali kepada sesiapa yang memanggilnya. Mari kita ubah suai fungsi ucapan kita untuk mengembalikan mesej dan bukannya mencetaknya: Sekarang, bukannya mencetak ucapan, fungsi ini mencipta mesej dan memberikannya kembali kepada kita. Untuk menggunakan nilai yang dikembalikan, kita boleh menyimpannya dalam pembolehubah seperti mana-mana nilai lain: Sekarang greetingMessage mengandungi "Hello, Christopher" dan kita boleh menggunakannya di mana-mana sahaja dalam kod kita – untuk memaparkannya di laman web, memasukkannya ke dalam e-mel, atau menghantarnya ke fungsi lain. ### 🔄 Semakan Nilai Pulangan: Mendapatkan Hasil Kembali Nilai pemahaman nilai pulangan anda: - Apa yang berlaku kepada kod selepas pernyataan return dalam fungsi? - Mengapa mengembalikan nilai sering lebih baik daripada hanya mencetak ke konsol? - Bolehkah fungsi mengembalikan jenis nilai yang berbeza (rentetan, nombor, boolean)? ## Fungsi sebagai parameter untuk fungsi Fungsi boleh dihantar sebagai parameter kepada fungsi lain. Walaupun konsep ini mungkin kelihatan kompleks pada mulanya, ia adalah ciri yang kuat yang membolehkan corak pengaturcaraan yang fleksibel. Corak ini sangat biasa apabila anda mahu berkata "apabila sesuatu berlaku, lakukan perkara lain ini." Sebagai contoh, "apabila pemasa selesai, jalankan kod ini" atau "apabila pengguna mengklik butang, panggil fungsi ini." Mari kita lihat setTimeout, yang merupakan fungsi terbina dalam yang menunggu masa tertentu dan kemudian menjalankan beberapa kod. Kita perlu memberitahunya kod apa yang hendak dijalankan – kes penggunaan yang sempurna untuk menghantar fungsi! Cuba kod ini – selepas 3 saat, anda akan melihat mesej: Perhatikan bagaimana kita menghantar displayDone (tanpa kurungan) kepada setTimeout. Kita tidak memanggil fungsi itu sendiri – kita menyerahkannya kepada setTimeout dan berkata "panggil ini dalam 3 saat." ### Fungsi tanpa nama Kadang-kadang anda memerlukan fungsi untuk satu perkara sahaja dan tidak mahu memberikannya nama. Fikirkan – jika anda hanya menggunakan fungsi sekali, mengapa menyemakkan kod anda dengan nama tambahan? JavaScript membolehkan anda mencipta fungsi tanpa nama – fungsi tanpa nama yang boleh anda tentukan di mana anda memerlukannya. Berikut adalah cara kita boleh menulis semula contoh pemasa kita menggunakan fungsi tanpa nama: Ini mencapai hasil yang sama, tetapi fungsi itu ditakrifkan secara langsung dalam panggilan setTimeout, menghapuskan keperluan untuk deklarasi fungsi yang berasingan. ### Fungsi anak panah JavaScript moden mempunyai cara yang lebih pendek untuk menulis fungsi yang dipanggil fungsi anak panah. Ia menggunakan => (yang kelihatan seperti anak panah – faham?) dan sangat popular dalam kalangan pembangun. Fungsi anak panah membolehkan anda melangkau kata kunci function dan menulis kod yang lebih ringkas. Berikut adalah contoh pemasa kita menggunakan fungsi anak panah: () ialah tempat parameter akan pergi (kosong dalam kes ini), kemudian datang anak panah =>, dan akhirnya badan fungsi dalam kurungan keriting. Ini memberikan fungsi yang sama dengan sintaks yang lebih ringkas. ### Bila hendak menggunakan setiap strategi Bilakah anda harus menggunakan setiap pendekatan? Garis panduan praktikal: jika anda akan menggunakan fungsi beberapa kali, berikan nama dan tentukan secara berasingan. Jika ia untuk satu kegunaan tertentu, pertimbangkan fungsi tanpa nama. Kedua-dua fungsi anak panah dan sintaks tradisional adalah pilihan yang sah, walaupun fungsi anak panah adalah lazim dalam pangkalan kod JavaScript moden. ### 🎨 Semakan Penguasaan Gaya Fungsi: Memilih Sintaks yang Tepat Uji pemahaman sintaks anda: - Bilakah anda mungkin lebih suka fungsi anak panah berbanding sintaks fungsi tradisional? - Apakah kelebihan utama fungsi tanpa nama? - Bolehkah anda memikirkan situasi di mana fungsi bernama lebih baik daripada fungsi tanpa nama? --- ## 🚀 Cabaran Bolehkah anda menjelaskan dalam satu ayat perbezaan antara fungsi dan kaedah? Cuba! ## Cabaran Ejen GitHub Copilot 🚀 Gunakan mod Ejen untuk melengkapkan cabaran berikut: Penerangan: Cipta perpustakaan utiliti fungsi matematik yang menunjukkan konsep fungsi yang berbeza yang dibincangkan dalam pelajaran ini, termasuk parameter, nilai lalai, nilai pulangan, dan fungsi anak panah. Arahan: Cipta fail JavaScript bernama mathUtils.js yang mengandungi fungsi berikut: 1. Fungsi add yang mengambil dua parameter dan mengembalikan jumlahnya 2. Fungsi multiply dengan nilai parameter lalai (parameter kedua lalai kepada 1) 3. Fungsi anak panah square yang mengambil nombor dan mengembalikan kuadratnya 4. Fungsi calculate yang menerima fungsi lain sebagai parameter dan dua nombor, kemudian menggunakan fungsi itu pada nombor tersebut 5. Tunjukkan panggilan setiap fungsi dengan kes ujian yang sesuai Ketahui lebih lanjut tentang mod ejen di sini. ## Kuiz Pasca-Kuliah Kuiz pasca-kuliah ## Ulasan & Kajian Sendiri Ia berbaloi membaca sedikit lagi tentang fungsi anak panah, kerana ia semakin digunakan dalam pangkalan kod. Latih menulis fungsi, dan kemudian menulis semula dengan sintaks ini. ## Tugasan Keseronokan dengan Fungsi --- ## 🧰 Ringkasan Toolkit Fungsi JavaScript Anda --- ## 🚀 Garis Masa Penguasaan Fungsi JavaScript Anda ### ⚡ Apa Yang Anda Boleh Lakukan Dalam 5 Minit Seterusnya - [ ] Tulis fungsi ringkas yang mengembalikan nombor kegemaran anda - [ ] Cipta fungsi dengan dua parameter yang menambahkannya bersama-sama - [ ] Cuba tukar fungsi tradisional kepada sintaks fungsi anak panah - [ ] Latih cabaran: terangkan perbezaan antara fungsi dan kaedah ### 🎯 Apa Yang Boleh Anda Capai Dalam Jam Ini - [ ] Lengkapkan kuiz selepas pelajaran dan semak konsep yang mengelirukan - [ ] Bina perpustakaan utiliti matematik daripada cabaran GitHub Copilot - [ ] Cipta fungsi yang menggunakan fungsi lain sebagai parameter - [ ] Latih menulis fungsi dengan parameter lalai - [ ] Bereksperimen dengan literal templat dalam nilai pulangan fungsi ### 📅 Penguasaan Fungsi Sepanjang Minggu Anda - [ ] Lengkapkan tugasan "Seronok dengan Fungsi" dengan kreativiti - [ ] Refaktor kod berulang yang telah anda tulis kepada fungsi yang boleh digunakan semula - [ ] Bina kalkulator kecil menggunakan hanya fungsi (tanpa pemboleh ubah global) - [ ] Latih fungsi anak panah dengan kaedah array seperti map() dan filter() - [ ] Cipta koleksi fungsi utiliti untuk tugas-tugas biasa - [ ] Kajian fungsi peringkat tinggi dan konsep pengaturcaraan fungsional ### 🌟 Transformasi Sepanjang Bulan Anda - [ ] Kuasai konsep fungsi lanjutan seperti penutupan dan skop - [ ] Bina projek yang banyak menggunakan komposisi fungsi - [ ] Sumbang kepada sumber terbuka dengan meningkatkan dokumentasi fungsi - [ ] Ajar orang lain tentang fungsi dan gaya sintaks yang berbeza - [ ] Terokai paradigma pengaturcaraan fungsional dalam JavaScript - [ ] Cipta perpustakaan peribadi fungsi yang boleh digunakan semula untuk projek masa depan ### 🏆 Pemeriksaan Akhir Juara Fungsi Raikan penguasaan fungsi anda: - Apakah fungsi paling berguna yang telah anda cipta setakat ini? - Bagaimana pembelajaran tentang fungsi mengubah cara anda berfikir tentang pengorganisasian kod? - Sintaks fungsi mana yang anda lebih suka dan mengapa? - Masalah dunia nyata apa yang akan anda selesaikan dengan menulis fungsi? --- Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.

javascript

Asas JavaScript: Membuat Keputusan

Pernahkah anda tertanya-tanya bagaimana aplikasi membuat keputusan yang bijak? Seperti bagaimana sistem navigasi memilih laluan terpantas, atau bagaimana termostat memutuskan bila untuk menghidupkan pemanas? Inilah konsep asas membuat keputusan dalam pengaturcaraan. Seperti Mesin Analitik Charles Babbage yang direka untuk mengikuti urutan operasi yang berbeza berdasarkan keadaan, program JavaScript moden perlu membuat pilihan berdasarkan keadaan yang berubah-ubah. Keupayaan untuk bercabang dan membuat keputusan inilah yang mengubah kod statik menjadi aplikasi yang responsif dan pintar. Dalam pelajaran ini, anda akan belajar cara melaksanakan logik bersyarat dalam program anda. Kita akan meneroka pernyataan bersyarat, operator perbandingan, dan ekspresi logik yang membolehkan kod anda menilai situasi dan bertindak balas dengan sewajarnya. ## Kuiz Pra-Kuliah Kuiz pra-kuliah Keupayaan untuk membuat keputusan dan mengawal aliran program adalah aspek asas pengaturcaraan. Bahagian ini merangkumi cara mengawal laluan pelaksanaan program JavaScript anda menggunakan nilai Boolean dan logik bersyarat. [](https://youtube.com/watch?v=SxTp8j-fMMY "Membuat Keputusan") ## Ulang Kaji Ringkas tentang Boolean Sebelum meneroka membuat keputusan, mari kita ulang kaji nilai Boolean dari pelajaran sebelumnya. Dinamakan sempena ahli matematik George Boole, nilai-nilai ini mewakili keadaan binari – sama ada true atau false. Tiada kekaburan, tiada pertengahan. Nilai binari ini membentuk asas semua logik pengiraan. Setiap keputusan yang dibuat oleh program anda akhirnya dikurangkan kepada penilaian Boolean. Mencipta pemboleh ubah Boolean adalah mudah: Ini mencipta dua pemboleh ubah dengan nilai Boolean yang jelas. ✅ Boolean dinamakan sempena ahli matematik, ahli falsafah dan ahli logik Inggeris George Boole (1815–1864). ## Operator Perbandingan dan Boolean Dalam amalan, anda jarang menetapkan nilai Boolean secara manual. Sebaliknya, anda akan menjana mereka dengan menilai keadaan: "Adakah nombor ini lebih besar daripada yang itu?" atau "Adakah nilai-nilai ini sama?" Operator perbandingan membolehkan penilaian ini. Mereka membandingkan nilai dan mengembalikan hasil Boolean berdasarkan hubungan antara operand. ✅ Uji pengetahuan anda dengan menulis beberapa perbandingan dalam konsol penyemak imbas anda. Adakah data yang dikembalikan mengejutkan anda? ### 🧠 Ujian Penguasaan Perbandingan: Memahami Logik Boolean Uji pemahaman perbandingan anda: - Mengapa anda fikir === (kesamaan ketat) biasanya lebih disukai daripada == (kesamaan longgar)? - Bolehkah anda meramalkan apa yang 5 === '5' kembalikan? Bagaimana pula dengan 5 == '5'? - Apakah perbezaan antara !== dan !=? ## Pernyataan If Pernyataan if adalah seperti bertanya soalan dalam kod anda. "Jika keadaan ini benar, maka lakukan perkara ini." Ia mungkin alat paling penting yang anda gunakan untuk membuat keputusan dalam JavaScript. Inilah cara ia berfungsi: Keadaan pergi ke dalam kurungan, dan jika ia true, JavaScript menjalankan kod di dalam kurungan keriting. Jika ia false, JavaScript hanya melangkau keseluruhan blok itu. Anda sering menggunakan operator perbandingan untuk mencipta keadaan ini. Mari lihat contoh praktikal: Oleh kerana 1000 >= 800 menilai kepada true, kod di dalam blok dilaksanakan, memaparkan "Mendapatkan komputer riba baru!" dalam konsol. ## Pernyataan If..Else Tetapi bagaimana jika anda mahu program anda melakukan sesuatu yang berbeza apabila keadaan adalah palsu? Di sinilah else masuk – ia seperti mempunyai rancangan sandaran. Pernyataan else memberi anda cara untuk mengatakan "jika keadaan ini tidak benar, lakukan perkara lain ini sebagai gantinya." Sekarang kerana 500 >= 800 adalah false, JavaScript melangkau blok pertama dan menjalankan blok else sebagai gantinya. Anda akan melihat "Belum mampu membeli komputer riba baru!" dalam konsol. ✅ Uji pemahaman anda tentang kod ini dan kod berikut dengan menjalankannya dalam konsol penyemak imbas. Tukar nilai pemboleh ubah currentMoney dan laptopPrice untuk menukar console.log() yang dikembalikan. ### 🎯 Ujian Logik If-Else: Laluan Bercabang Nilai pemahaman logik bersyarat anda: - Apa yang berlaku jika currentMoney sama dengan laptopPrice? - Bolehkah anda memikirkan senario dunia sebenar di mana logik if-else akan berguna? - Bagaimana anda boleh melanjutkan ini untuk menangani pelbagai julat harga? ## Pernyataan Switch Kadang-kadang anda perlu membandingkan satu nilai dengan pelbagai pilihan. Walaupun anda boleh menggabungkan beberapa pernyataan if..else, pendekatan ini menjadi tidak praktikal. Pernyataan switch menyediakan struktur yang lebih bersih untuk menangani pelbagai nilai diskret. Konsep ini menyerupai sistem pensuisan mekanikal yang digunakan dalam pertukaran telefon awal – satu nilai input menentukan laluan spesifik yang diikuti pelaksanaan. Inilah cara ia disusun: - JavaScript menilai ekspresi sekali - Ia melihat setiap case untuk mencari padanan - Apabila ia menemui padanan, ia menjalankan blok kod itu - break memberitahu JavaScript untuk berhenti dan keluar dari switch - Jika tiada kes yang sepadan, ia menjalankan blok default (jika anda ada) Dalam contoh ini, JavaScript melihat bahawa dayNumber adalah 2, mencari padanan case 2, menetapkan dayName kepada "Tuesday", dan kemudian keluar dari switch. Hasilnya? "Hari ini adalah Selasa" dipaparkan dalam konsol. ✅ Uji pemahaman anda tentang kod ini dan kod berikut dengan menjalankannya dalam konsol penyemak imbas. Tukar nilai pemboleh ubah a untuk menukar console.log() yang dikembalikan. ### 🔄 Penguasaan Pernyataan Switch: Pelbagai Pilihan Uji pemahaman switch anda: - Apa yang berlaku jika anda terlupa pernyataan break? - Bilakah anda akan menggunakan switch dan bukannya beberapa pernyataan if-else? - Mengapa kes default berguna walaupun anda fikir anda telah meliputi semua kemungkinan? ## Operator Logik dan Boolean Keputusan yang kompleks sering memerlukan penilaian pelbagai keadaan secara serentak. Seperti algebra Boolean yang membolehkan ahli matematik menggabungkan ekspresi logik, pengaturcaraan menyediakan operator logik untuk menghubungkan pelbagai keadaan Boolean. Operator ini membolehkan logik bersyarat yang canggih dengan menggabungkan penilaian benar/palsu yang mudah. Operator ini membolehkan anda menggabungkan keadaan dengan cara yang berguna: - AND (&&) bermaksud kedua-dua keadaan mesti benar - OR (||) bermaksud sekurang-kurangnya satu keadaan mesti benar - NOT (!) membalikkan benar kepada palsu (dan sebaliknya) ## Keadaan dan Keputusan dengan Operator Logik Mari lihat operator logik ini beraksi dengan contoh yang lebih realistik: Dalam contoh ini: kita mengira harga diskaun 20% (640), kemudian menilai sama ada dana yang tersedia kita mencukupi untuk harga penuh ATAU harga diskaun. Oleh kerana 600 memenuhi ambang harga diskaun 640, keadaan menilai kepada benar. ### 🧮 Ujian Operator Logik: Menggabungkan Keadaan Uji pemahaman operator logik anda: - Dalam ekspresi A && B, apa yang berlaku jika A adalah palsu? Adakah B akan dinilai? - Bolehkah anda memikirkan situasi di mana anda memerlukan ketiga-tiga operator (&&, ||, !) bersama-sama? - Apakah perbezaan antara !user.isActive dan user.isActive !== true? ### Operator Negasi Kadang-kadang lebih mudah untuk memikirkan apabila sesuatu TIDAK benar. Seperti bukannya bertanya "Adakah pengguna log masuk?", anda mungkin mahu bertanya "Adakah pengguna TIDAK log masuk?" Tanda seru (!) membalikkan logik untuk anda. Operator ! adalah seperti mengatakan "yang bertentangan dengan..." – jika sesuatu adalah true, ! menjadikannya false, dan sebaliknya. ### Ekspresi Ternari Untuk tugasan bersyarat yang mudah, JavaScript menyediakan operator ternari. Sintaks ringkas ini membolehkan anda menulis ekspresi bersyarat dalam satu baris, berguna apabila anda perlu menetapkan salah satu daripada dua nilai berdasarkan keadaan. Ia dibaca seperti soalan: "Adakah keadaan ini benar? Jika ya, gunakan nilai ini. Jika tidak, gunakan nilai itu." Di bawah adalah contoh yang lebih nyata: ✅ Luangkan masa sebentar untuk membaca kod ini beberapa kali. Adakah anda memahami bagaimana operator ini berfungsi? Inilah yang dikatakan oleh baris ini: "Adakah firstNumber lebih besar daripada secondNumber? Jika ya, letakkan firstNumber dalam biggestNumber. Jika tidak, letakkan secondNumber dalam biggestNumber." Operator ternari hanyalah cara yang lebih pendek untuk menulis pernyataan if..else tradisional ini: Kedua-dua pendekatan menghasilkan hasil yang sama. Operator ternari menawarkan ringkasan, manakala struktur if-else tradisional mungkin lebih mudah dibaca untuk keadaan yang kompleks. --- ## 🚀 Cabaran Cipta program yang ditulis terlebih dahulu dengan operator logik, dan kemudian tulis semula menggunakan ekspresi ternari. Apakah sintaks pilihan anda? --- ## Cabaran Ejen GitHub Copilot 🚀 Gunakan mod Ejen untuk melengkapkan cabaran berikut: Penerangan: Cipta kalkulator gred yang komprehensif yang menunjukkan pelbagai konsep membuat keputusan dari pelajaran ini, termasuk pernyataan if-else, pernyataan switch, operator logik, dan ekspresi ternari. Arahan: Tulis program JavaScript yang mengambil skor numerik pelajar (0-100) dan menentukan gred huruf mereka menggunakan kriteria berikut: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Di bawah 60 Keperluan: 1. Gunakan pernyataan if-else untuk menentukan gred huruf 2. Gunakan operator logik untuk memeriksa sama ada pelajar lulus (gred >= 60) DAN mendapat penghormatan (gred >= 90) 3. Gunakan pernyataan switch untuk memberikan maklum balas khusus bagi setiap gred huruf 4. Gunakan operator ternary untuk menentukan sama ada pelajar layak untuk kursus seterusnya (gred >= 70) 5. Sertakan pengesahan input untuk memastikan skor berada di antara 0 dan 100 Uji program anda dengan pelbagai skor termasuk kes tepi seperti 59, 60, 89, 90, dan input tidak sah. Ketahui lebih lanjut tentang agent mode di sini. ## Kuiz Selepas Kuliah Kuiz selepas kuliah ## Ulasan & Kajian Kendiri Baca lebih lanjut tentang pelbagai operator yang tersedia untuk pengguna di MDN. Lihat panduan operator yang hebat oleh Josh Comeau operator lookup! ## Tugasan Operators --- ## 🧠 Ringkasan Toolkit Pengambilan Keputusan Anda --- ## 🚀 Garis Masa Penguasaan Pengambilan Keputusan JavaScript Anda ### ⚡ Apa Yang Boleh Anda Lakukan Dalam 5 Minit Seterusnya - [ ] Latih operator perbandingan dalam konsol pelayar anda - [ ] Tulis pernyataan if-else mudah yang memeriksa umur anda - [ ] Cuba cabaran: tulis semula if-else menggunakan operator ternary - [ ] Uji apa yang berlaku dengan nilai "truthy" dan "falsy" yang berbeza ### 🎯 Apa Yang Boleh Anda Capai Dalam Satu Jam - [ ] Lengkapkan kuiz selepas pelajaran dan ulas konsep yang mengelirukan - [ ] Bina kalkulator gred komprehensif daripada cabaran GitHub Copilot - [ ] Cipta pokok keputusan mudah untuk senario dunia sebenar (seperti memilih pakaian) - [ ] Latih gabungan pelbagai syarat dengan operator logik - [ ] Eksperimen dengan pernyataan switch untuk pelbagai kegunaan ### 📅 Penguasaan Logik Anda Sepanjang Minggu - [ ] Lengkapkan tugasan operator dengan contoh kreatif - [ ] Bina aplikasi kuiz mini menggunakan pelbagai struktur bersyarat - [ ] Cipta validator borang yang memeriksa pelbagai syarat input - [ ] Latih latihan operator lookup oleh Josh Comeau - [ ] Refaktor kod sedia ada untuk menggunakan struktur bersyarat yang lebih sesuai - [ ] Kajian penilaian pintasan dan implikasi prestasi ### 🌟 Transformasi Anda Sepanjang Bulan - [ ] Kuasai syarat bersarang yang kompleks dan kekalkan kebolehbacaan kod - [ ] Bina aplikasi dengan logik pengambilan keputusan yang canggih - [ ] Sumbang kepada sumber terbuka dengan meningkatkan logik bersyarat dalam projek sedia ada - [ ] Ajarkan orang lain tentang pelbagai struktur bersyarat dan bila untuk menggunakannya - [ ] Terokai pendekatan pengaturcaraan fungsional untuk logik bersyarat - [ ] Cipta panduan rujukan peribadi untuk amalan terbaik bersyarat ### 🏆 Pemeriksaan Akhir Juara Pengambilan Keputusan Raikan penguasaan pemikiran logik anda: - Apakah logik keputusan paling kompleks yang telah anda laksanakan dengan berjaya? - Struktur bersyarat mana yang paling sesuai dengan anda dan mengapa? - Bagaimana pembelajaran tentang operator logik mengubah pendekatan penyelesaian masalah anda? - Aplikasi dunia sebenar apa yang akan mendapat manfaat daripada logik pengambilan keputusan yang canggih? --- Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.

javascript

Asas JavaScript: Array dan Gelung

## Kuiz Pra-Kuliah Kuiz pra-kuliah Pernah terfikir bagaimana laman web menyimpan rekod item dalam troli belian atau memaparkan senarai rakan anda? Di sinilah array dan gelung memainkan peranan. Array adalah seperti bekas digital yang menyimpan pelbagai maklumat, manakala gelung membolehkan anda bekerja dengan data tersebut secara efisien tanpa perlu menulis kod berulang kali. Kedua-dua konsep ini menjadi asas untuk menguruskan maklumat dalam program anda. Anda akan belajar bagaimana beralih daripada menulis setiap langkah secara manual kepada mencipta kod pintar dan efisien yang boleh memproses ratusan atau ribuan item dengan cepat. Pada akhir pelajaran ini, anda akan memahami cara menyelesaikan tugas data yang kompleks dengan hanya beberapa baris kod. Mari kita terokai konsep penting dalam pengaturcaraan ini. [](https://youtube.com/watch?v=1U4qTyq02Xw "Array") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Gelung") ## Array Bayangkan array sebagai kabinet fail digital - daripada menyimpan satu dokumen setiap laci, anda boleh mengatur pelbagai item berkaitan dalam satu bekas yang terstruktur. Dalam istilah pengaturcaraan, array membolehkan anda menyimpan pelbagai maklumat dalam satu pakej yang teratur. Sama ada anda sedang membina galeri foto, menguruskan senarai tugasan, atau menyimpan rekod skor tinggi dalam permainan, array menyediakan asas untuk pengurusan data. Mari kita lihat bagaimana ia berfungsi. ✅ Array ada di mana-mana! Bolehkah anda fikirkan contoh kehidupan sebenar untuk array, seperti susunan panel solar? ### Membuat Array Membuat array sangat mudah - hanya gunakan kurungan segi empat! Apa yang berlaku di sini? Anda baru sahaja mencipta bekas kosong menggunakan kurungan segi empat []. Anggap ia seperti rak perpustakaan kosong - ia sedia untuk menyimpan apa sahaja buku yang anda ingin susun di situ. Anda juga boleh mengisi array anda dengan nilai awal dari awal: Perkara menarik untuk diperhatikan: - Anda boleh menyimpan teks, nombor, atau nilai benar/palsu dalam array yang sama - Hanya pisahkan setiap item dengan koma - mudah! - Array sangat sesuai untuk menyimpan maklumat berkaitan bersama-sama ### Pengindeksan Array Ini mungkin kelihatan pelik pada mulanya: array menomborkan item mereka bermula dari 0, bukan 1. Pengindeksan berasaskan sifar ini berasal daripada cara memori komputer berfungsi - ia telah menjadi konvensyen pengaturcaraan sejak zaman awal bahasa pengaturcaraan seperti C. Setiap tempat dalam array mendapat nombor alamat sendiri yang dipanggil indeks. ✅ Adakah anda terkejut bahawa array bermula pada indeks sifar? Dalam beberapa bahasa pengaturcaraan, indeks bermula pada 1. Ada sejarah menarik tentang ini, yang boleh anda baca di Wikipedia. Mengakses Elemen Array: Memecahkan apa yang berlaku di sini: - Menggunakan notasi kurungan segi empat dengan nombor indeks untuk mengakses elemen - Mengembalikan nilai yang disimpan di kedudukan tertentu dalam array - Bermula mengira dari 0, menjadikan elemen pertama indeks 0 Mengubah Elemen Array: Dalam contoh di atas, kita telah: - Mengubah elemen pada indeks 4 daripada "Rocky Road" kepada "Butter Pecan" - Menambah elemen baru "Cookie Dough" pada indeks 5 - Memperluas panjang array secara automatik apabila menambah di luar sempadan semasa ### Panjang Array dan Kaedah Biasa Array dilengkapi dengan sifat dan kaedah terbina yang memudahkan kerja dengan data. Mencari Panjang Array: Perkara penting untuk diingat: - Mengembalikan jumlah elemen dalam array - Mengemas kini secara automatik apabila elemen ditambah atau dibuang - Menyediakan kiraan dinamik yang berguna untuk gelung dan pengesahan Kaedah Array Penting: Memahami kaedah ini: - Menambah elemen dengan push() (akhir) dan unshift() (permulaan) - Membuang elemen dengan pop() (akhir) dan shift() (permulaan) - Mencari elemen dengan indexOf() dan memeriksa kewujudan dengan includes() - Mengembalikan nilai berguna seperti elemen yang dibuang atau indeks kedudukan ✅ Cuba sendiri! Gunakan konsol pelayar anda untuk mencipta dan memanipulasi array ciptaan anda sendiri. ### 🧠 Semakan Asas Array: Mengatur Data Anda Uji pemahaman anda tentang array: - Mengapa anda fikir array mula mengira dari 0 dan bukan 1? - Apa yang berlaku jika anda cuba mengakses indeks yang tidak wujud (seperti arr[100] dalam array 5-elemen)? - Bolehkah anda fikirkan tiga senario dunia sebenar di mana array akan berguna? ## Gelung Bayangkan hukuman terkenal dari novel Charles Dickens di mana pelajar perlu menulis baris berulang kali di papan tulis. Bayangkan jika anda boleh hanya mengarahkan seseorang untuk "tulis ayat ini 100 kali" dan ia dilakukan secara automatik. Itulah yang dilakukan oleh gelung untuk kod anda. Gelung adalah seperti mempunyai pembantu yang tidak pernah letih yang boleh mengulangi tugas tanpa kesilapan. Sama ada anda perlu memeriksa setiap item dalam troli belian atau memaparkan semua foto dalam album, gelung mengendalikan pengulangan dengan efisien. JavaScript menyediakan beberapa jenis gelung untuk dipilih. Mari kita periksa setiap satu dan fahami bila untuk menggunakannya. ### Gelung For Gelung for adalah seperti menetapkan pemasa - anda tahu dengan tepat berapa kali anda mahu sesuatu berlaku. Ia sangat teratur dan boleh diramal, yang menjadikannya sempurna apabila anda bekerja dengan array atau perlu mengira sesuatu. Struktur Gelung For: Langkah demi langkah, inilah yang berlaku: - Menginisialisasi pembolehubah pengira i kepada 0 pada permulaan - Memeriksa keadaan i < 10 sebelum setiap iterasi - Melaksanakan blok kod apabila keadaan adalah benar - Meningkatkan i sebanyak 1 selepas setiap iterasi dengan i++ - Berhenti apabila keadaan menjadi palsu (apabila i mencapai 10) ✅ Jalankan kod ini dalam konsol pelayar. Apa yang berlaku apabila anda membuat perubahan kecil pada pengira, keadaan, atau ekspresi iterasi? Bolehkah anda membuatnya berjalan ke belakang, mencipta kiraan mundur? ### 🗓️ Semakan Penguasaan Gelung For: Pengulangan Terkawal Nilai pemahaman anda tentang gelung for: - Apakah tiga bahagian gelung for, dan apa yang dilakukan oleh setiap satu? - Bagaimana anda akan mengulangi array ke belakang? - Apa yang berlaku jika anda lupa bahagian peningkatan (i++)? ### Gelung While Gelung while adalah seperti mengatakan "teruskan melakukan ini sehingga..." - anda mungkin tidak tahu dengan tepat berapa kali ia akan berjalan, tetapi anda tahu bila untuk berhenti. Ia sempurna untuk perkara seperti meminta input pengguna sehingga mereka memberikan apa yang anda perlukan, atau mencari data sehingga anda menemui apa yang anda cari. Ciri-ciri Gelung While: - Teruskan melaksanakan selagi keadaan adalah benar - Memerlukan pengurusan manual pembolehubah pengira - Memeriksa keadaan sebelum setiap iterasi - Berisiko gelung tak terhingga jika keadaan tidak pernah menjadi palsu Memahami contoh-contoh ini: - Menguruskan pembolehubah pengira i secara manual dalam badan gelung - Meningkatkan pengira untuk mengelakkan gelung tak terhingga - Menunjukkan kes penggunaan praktikal dengan input pengguna dan had percubaan - Termasuk mekanisme keselamatan untuk mengelakkan pelaksanaan tanpa henti ### ♾️ Semakan Kebijaksanaan Gelung While: Pengulangan Berdasarkan Keadaan Uji pemahaman anda tentang gelung while: - Apakah bahaya utama apabila menggunakan gelung while? - Bila anda akan memilih gelung while berbanding gelung for? - Bagaimana anda boleh mengelakkan gelung tak terhingga? ### Alternatif Gelung Moden JavaScript menawarkan sintaks gelung moden yang boleh menjadikan kod anda lebih mudah dibaca dan kurang terdedah kepada kesilapan. Gelung For...of (ES6+): Kelebihan utama for...of: - Menghapuskan pengurusan indeks dan potensi kesilapan off-by-one - Menyediakan akses langsung kepada elemen array - Meningkatkan kebolehbacaan kod dan mengurangkan kerumitan sintaks Kaedah forEach: Apa yang perlu anda tahu tentang forEach: - Melaksanakan fungsi untuk setiap elemen array - Menyediakan nilai elemen dan indeks sebagai parameter - Tidak boleh dihentikan awal (tidak seperti gelung tradisional) - Mengembalikan undefined (tidak mencipta array baru) ✅ Mengapa anda akan memilih gelung for berbanding gelung while? 17K penonton mempunyai soalan yang sama di StackOverflow, dan beberapa pendapat mungkin menarik untuk anda. ### 🎨 Semakan Sintaks Gelung Moden: Menggunakan ES6+ Nilai pemahaman JavaScript moden anda: - Apakah kelebihan for...of berbanding gelung for tradisional? - Bila anda mungkin masih memilih gelung for tradisional? - Apa perbezaan antara forEach dan map? ## Gelung dan Array Menggabungkan array dengan gelung mencipta keupayaan pemprosesan data yang kuat. Gabungan ini adalah asas kepada banyak tugas pengaturcaraan, daripada memaparkan senarai kepada mengira statistik. Pemprosesan Array Tradisional: Mari fahami setiap pendekatan: - Menggunakan sifat panjang array untuk menentukan sempadan gelung - Mengakses elemen melalui indeks dalam gelung for tradisional - Menyediakan akses langsung kepada elemen dalam gelung for...of - Memproses setiap elemen array tepat sekali Contoh Pemprosesan Data Praktikal: Inilah cara kod ini berfungsi: - Menginisialisasi pembolehubah penjejakan untuk jumlah dan nilai ekstrem - Memproses setiap gred dengan satu gelung yang efisien - Mengumpulkan jumlah untuk pengiraan purata - Menjejaki nilai tertinggi dan terendah semasa iterasi - Mengira statistik akhir selepas gelung selesai ✅ Bereksperimen dengan mengulangi array ciptaan anda sendiri dalam konsol pelayar anda. --- ## Cabaran Ejen GitHub Copilot 🚀 Gunakan mod Ejen untuk menyelesaikan cabaran berikut: Penerangan: Bina fungsi pemprosesan data yang komprehensif yang menggabungkan array dan gelung untuk menganalisis set data dan menghasilkan wawasan yang bermakna. Arahan: Cipta fungsi bernama analyzeGrades yang mengambil array objek gred pelajar (setiap satu mengandungi sifat nama dan skor) dan mengembalikan objek dengan statistik termasuk skor tertinggi, skor terendah, skor purata, bilangan pelajar yang lulus (skor >= 70), dan array nama pelajar yang mendapat skor di atas purata. Gunakan sekurang-kurangnya dua jenis gelung yang berbeza dalam penyelesaian anda. Ketahui lebih lanjut tentang mod ejen di sini. ## 🚀 Cabaran JavaScript menawarkan beberapa kaedah moden untuk array yang boleh menggantikan gelung tradisional bagi tugas tertentu. Terokai forEach, for-of, map, filter, dan reduce. Cabaran anda: Refaktor contoh gred pelajar menggunakan sekurang-kurangnya tiga kaedah array yang berbeza. Perhatikan betapa lebih bersih dan mudah dibaca kod tersebut dengan sintaks JavaScript moden. ## Kuiz Selepas Kuliah Kuiz selepas kuliah ## Ulasan & Kajian Kendiri Array dalam JavaScript mempunyai banyak kaedah yang sangat berguna untuk manipulasi data. Baca tentang kaedah-kaedah ini dan cuba beberapa daripadanya (seperti push, pop, slice dan splice) pada array ciptaan anda sendiri. ## Tugasan Gelung Array --- ## 📊 Ringkasan Toolkit Array & Gelung Anda --- ## 🚀 Garis Masa Penguasaan Array & Gelung Anda ### ⚡ Apa Yang Boleh Anda Lakukan Dalam 5 Minit Seterusnya - [ ] Cipta array filem kegemaran anda dan akses elemen tertentu - [ ] Tulis gelung for yang mengira dari 1 hingga 10 - [ ] Cuba cabaran kaedah array moden dari pelajaran - [ ] Latih pengindeksan array dalam konsol pelayar anda ### 🎯 Apa Yang Boleh Anda Capai Dalam Satu Jam - [ ] Lengkapkan kuiz selepas pelajaran dan ulas konsep yang mencabar - [ ] Bina penganalisis gred komprehensif dari cabaran GitHub Copilot - [ ] Cipta troli membeli-belah ringkas yang menambah dan membuang item - [ ] Latih menukar antara jenis gelung yang berbeza - [ ] Bereksperimen dengan kaedah array seperti push, pop, slice, dan splice ### 📅 Perjalanan Pemprosesan Data Anda Selama Seminggu - [ ] Lengkapkan tugasan "Gelung Array" dengan penambahbaikan kreatif - [ ] Bina aplikasi senarai tugasan menggunakan array dan gelung - [ ] Cipta kalkulator statistik ringkas untuk data numerik - [ ] Latih dengan kaedah array MDN - [ ] Bina antara muka galeri foto atau senarai main muzik - [ ] Terokai pengaturcaraan fungsional dengan map, filter, dan reduce ### 🌟 Transformasi Anda Selama Sebulan - [ ] Kuasai operasi array lanjutan dan pengoptimuman prestasi - [ ] Bina papan pemuka visualisasi data yang lengkap - [ ] Sumbang kepada projek sumber terbuka yang melibatkan pemprosesan data - [ ] Ajarkan seseorang tentang array dan gelung dengan contoh praktikal - [ ] Cipta perpustakaan peribadi fungsi pemprosesan data yang boleh digunakan semula - [ ] Terokai algoritma dan struktur data yang dibina atas array ### 🏆 Pemeriksaan Akhir Juara Pemprosesan Data Raikan penguasaan array dan gelung anda: - Apakah operasi array yang paling berguna yang telah anda pelajari untuk aplikasi dunia sebenar? - Jenis gelung mana yang paling sesuai dengan anda dan mengapa? - Bagaimana pemahaman tentang array dan gelung mengubah pendekatan anda terhadap pengorganisasian data? - Tugas pemprosesan data kompleks apa yang ingin anda tangani seterusnya? --- Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.

javascript,array

JavaScript အကြောင်းမိတ်ဆက်

JavaScript သည် ဝဘ်၏ programming ဘာသာစကားဖြစ်သည်။ ဒီသင်ခန်းစာလေးခုအတွင်းမှာ၊ ၎င်း၏ အခြေခံများကို သင်လေ့လာနိုင်ပါမည်။ ### ခေါင်းစဉ်များ 1. Variables နှင့် Data Types 2. Functions နှင့် Methods 3. JavaScript ဖြင့် ဆုံးဖြတ်ချက်များချခြင်း 4. Arrays နှင့် Loops ### အားကျေးဇူးတင်စကား ဒီသင်ခန်းစာများကို Jasmine Greenaway, Christopher Harrison နှင့် Chris Noring တို့မှ ♥️ ဖြင့် ရေးသားထားပါသည်။ --- အကြောင်းကြားချက်: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်ခြင်းတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါရှိနိုင်သည်ကို သတိပြုပါ။ မူရင်းစာရွက်စာတမ်းကို ၎င်း၏ မူရင်းဘာသာစကားဖြင့် အာဏာရှိသောအရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပရော်ဖက်ရှင်နယ် ဘာသာပြန်ခြင်းကို အကြံပြုပါသည်။ ဤဘာသာပြန်ကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။

javascript

JavaScript အခြေခံ: ဒေတာအမျိုးအစားများ

ဒေတာအမျိုးအစားများသည် JavaScript တွင် အခြေခံအကြောင်းအရာများထဲမှ တစ်ခုဖြစ်ပြီး သင်ရေးသားသည့် အစီအစဉ်တိုင်းတွင် တွေ့ရမည်ဖြစ်သည်။ ဒေတာအမျိုးအစားများကို Alexandria ရှိ အဟောင်းစာကြည့်တိုက်များတွင် အသုံးပြုခဲ့သည့် စာရွက်များကို အမျိုးအစားအလိုက် သိုလှောင်ထားသည့် စနစ်နှင့် တူသည်ဟု စဉ်းစားပါ။ JavaScript သည် အချက်အလက်များကို အမျိုးအစားအလိုက် စီစဉ်ထားသည်။ ဒီသင်ခန်းစာမှာ JavaScript ကို အလုပ်လုပ်စေတဲ့ အဓိက ဒေတာအမျိုးအစားများကို လေ့လာပါမည်။ သင်နံပါတ်များ၊ စာသားများ၊ true/false တန်ဖိုးများကို ကိုင်တွယ်နည်းနှင့် အမျိုးအစားမှန်ကန်သော ဒေတာကို ရွေးချယ်ခြင်းက သင့်အစီအစဉ်များအတွက် အရေးကြီးသောကြောင်းကို နားလည်ပါမည်။ ဒီအကြောင်းအရာများသည် အစမှာ အနည်းငယ် ရှုပ်ထွေးနေမည်ဖြစ်သော်လည်း လေ့ကျင့်မှုများနှင့်အတူ သင်၏အလိုအလျောက်ကျွမ်းကျင်မှုဖြစ်လာမည်။ ဒေတာအမျိုးအစားများကို နားလည်ခြင်းသည် JavaScript တွင် အခြားအရာအားလုံးကို ပိုမိုရှင်းလင်းစေပါမည်။ အိမ်တော်ကြီးတစ်ခုကို တည်ဆောက်မည့် အင်ဂျင်နီယာများသည် အဆောက်အအုံပစ္စည်းများကို နားလည်ရန်လိုအပ်သလို၊ ဒီအခြေခံအကြောင်းအရာများသည် သင်တည်ဆောက်မည့် အရာအားလုံးကို အထောက်အကူပြုမည်ဖြစ်သည်။ ## သင်ခန်းစာမတိုင်မီမေးခွန်း သင်ခန်းစာမတိုင်မီမေးခွန်း ဒီသင်ခန်းစာသည် JavaScript အခြေခံများကို ဖော်ပြပါသည်၊ အင်တာနက်တွင် အပြန်အလှန်လုပ်ဆောင်မှုကို ပေးစွမ်းသော ဘာသာစကားဖြစ်သည်။ [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Variables နှင့် ဒေတာအမျိုးအစားများကို စတင်လေ့လာကြစို့! ## Variables Variables သည် အစီအစဉ်ရေးသားမှုတွင် အခြေခံအဆောက်အအုံများဖြစ်သည်။ အလယ်ခေတ်ရှိ ဓာတုဗေဒပညာရှင်များသည် အမျိုးမျိုးသော ပစ္စည်းများကို သိုလှောင်ရန် အသုံးပြုခဲ့သည့် အမှတ်အသားပါသော အခွက်များကဲ့သို့ Variables သည် အချက်အလက်များကို သိုလှောင်ရန်နှင့် နောက်ပိုင်းတွင် ပြန်လည်ရယူရန် အမည်ပေးနိုင်သည်။ တစ်စုံတစ်ဦး၏ အသက်ကို မှတ်မိလိုပါသလား? age ဟုခေါ်သော Variable တွင် သိုလှောင်ပါ။ အသုံးပြုသူ၏အမည်ကို ထိန်းသိမ်းလိုပါသလား? userName ဟုခေါ်သော Variable တွင် ထားပါ။ JavaScript တွင် Variable များကို ဖန်တီးခြင်းနှင့် ကြေညာခြင်း၏ Syntax သည် [keyword] [name] ဖြစ်သည်။ ၎င်းသည် အောက်ပါ အစိတ်အပိုင်းနှစ်ခုဖြင့် ဖွဲ့စည်းထားသည်- - Keyword။ Variable များကို ပြောင်းလဲနိုင်ရန် let ကို အသုံးပြုပါ၊ တန်ဖိုးများကို အတူတူထားရန် const ကို အသုံးပြုပါ။ - Variable အမည်၊ ၎င်းသည် သင်ကိုယ်တိုင် ရွေးချယ်သော ဖော်ပြချက်အမည်ဖြစ်သည်။ ✅ let Keyword သည် ES6 တွင် မိတ်ဆက်ခဲ့ပြီး Variable ကို _block scope_ ဟုခေါ်သော အကျယ်အဝန်းပေးသည်။ let သို့မဟုတ် const ကို အသုံးပြုရန် အကြံပြုသည်။ var Keyword သည် အဟောင်းဖြစ်သည်။ block scopes ကို နောက်ပိုင်းတွင် ပိုမိုအသေးစိတ်လေ့လာပါမည်။ ### လုပ်ငန်း - Variables နှင့် အလုပ်လုပ်ခြင်း 1. Variable ကို ကြေညာပါ။ ပထမဆုံး Variable ကို ဖန်တီးခြင်းဖြင့် စတင်ပါ: ```javascript let myVariable; ``` ဒီအရာက ဘာကို ပြုလုပ်သလဲ: - JavaScript ကို myVariable ဟုခေါ်သော သိုလှောင်မှုနေရာကို ဖန်တီးရန် ပြောသည် - JavaScript သည် Variable အတွက် memory တွင် နေရာကို သတ်မှတ်ပေးသည် - Variable သည် လက်ရှိတွင် တန်ဖိုးမရှိသေးပါ (undefined) 2. တန်ဖိုးပေးပါ။ အခုတော့ Variable ထဲမှာ တစ်ခုခု ထည့်ပါ: ```javascript myVariable = 123; ``` တန်ဖိုးပေးခြင်းအလုပ်လုပ်ပုံ: - = Operator သည် 123 ကို Variable သို့ ပေးသည် - Variable သည် undefined ဖြစ်ခြင်းမရှိတော့ဘဲ ဒီတန်ဖိုးကို ထည့်ထားသည် - သင်၏ Code တစ်ခုလုံးတွင် myVariable ကို အသုံးပြု၍ ဒီတန်ဖိုးကို ပြန်လည်ရယူနိုင်သည် > မှတ်ချက်: ဒီသင်ခန်းစာတွင် = သည် "assignment operator" ကို အသုံးပြုသည်၊ Variable သို့ တန်ဖိုးကို သတ်မှတ်ရန် အသုံးပြုသည်။ ၎င်းသည် တန်းတူမှုကို မဆိုလိုပါ။ 3. အဆင်ပြေတဲ့နည်းနဲ့လုပ်ပါ။ အမှန်တကယ်တော့ ဒီအဆင့်နှစ်ခုကို ပေါင်းစပ်ပါ: ```javascript let myVariable = 123; ``` ဒီနည်းလမ်းက ပိုထိရောက်သည်: - Variable ကို ကြေညာခြင်းနှင့် တန်ဖိုးပေးခြင်းကို တစ်ကြောင်းထဲတွင် ပြုလုပ်သည် - Developer များအကြား စံနည်းလမ်းဖြစ်သည် - Code အရှည်ကို လျှော့ချပြီး ရှင်းလင်းမှုကို ထိန်းသိမ်းထားသည် 4. သင့်အမြင်ကို ပြောင်းပါ။ နောက်တစ်ခုကို သိမ်းလိုပါက ဘာလုပ်မလဲ? ```javascript myVariable = 321; ``` Reassignment ကို နားလည်ခြင်း: - Variable သည် 123 အစား 321 ကို ထည့်ထားသည် - ယခင်တန်ဖိုးကို အစားထိုးသည် – Variable များသည် တစ်ကြိမ်တွင် တန်ဖိုးတစ်ခုသာ သိမ်းထားသည် - let ဖြင့် ကြေညာထားသော Variable များ၏ အဓိကလက္ခဏာဖြစ်သည် ✅ စမ်းကြည့်ပါ! သင်၏ Browser တွင် JavaScript ကို ရေးနိုင်သည်။ Browser Window ကို ဖွင့်ပြီး Developer Tools သို့ သွားပါ။ Console တွင် prompt ကို တွေ့ပါမည်။ let myVariable = 123 ဟု ရိုက်ပါ၊ return ကို နှိပ်ပြီး myVariable ကို ရိုက်ပါ။ ဘာဖြစ်သလဲ? ဒီအကြောင်းအရာများကို နောက်ပိုင်းသင်ခန်းစာများတွင် ပိုမိုလေ့လာပါမည်။ ### 🧠 Variables ကျွမ်းကျင်မှုစစ်ဆေးခြင်း: အဆင်ပြေမှုရရှိခြင်း Variables အကြောင်း သင့်အမြင်ကို စစ်ဆေးပါ: - Variable ကို ကြေညာခြင်းနှင့် တန်ဖိုးပေးခြင်း၏ ကွာခြားချက်ကို ရှင်းပြနိုင်ပါသလား? - Variable ကို ကြေညာမီ အသုံးပြုလိုပါက ဘာဖြစ်မလဲ? - Variable အတွက် let ကို const အစား ရွေးချယ်မည့်အခါ ဘာဖြစ်မလဲ? ## Constants တစ်ခါတစ်ရံ သင်၏အစီအစဉ်အတွင်း ပြောင်းလဲမရသော အချက်အလက်များကို သိမ်းဆည်းရန်လိုအပ်သည်။ Constants ကို အဟောင်းဂရိရှိ Euclid သည် သက်သေပြပြီး မှတ်တမ်းတင်ထားသော သင်္ချာဆိုင်ရာ မူများကဲ့သို့ စဉ်းစားပါ – တစ်ခါ သက်သေပြပြီးမှ အနာဂတ်အတွက် အတည်ပြုထားသည်။ Constants သည် Variable များနှင့် တူသည်၊ သို့သော် အရေးကြီးသော ကန့်သတ်ချက်တစ်ခုရှိသည် – တန်ဖိုးကို သတ်မှတ်ပြီးနောက် ပြောင်းလဲ၍ မရပါ။ ဒီမပြောင်းလဲနိုင်မှုသည် သင်၏အစီအစဉ်တွင် အရေးကြီးသော တန်ဖိုးများကို မတော်တဆ ပြောင်းလဲမှုမှ ကာကွယ်ပေးသည်။ Constant ကို ကြေညာခြင်းနှင့် စတင်သတ်မှတ်ခြင်းသည် Variable နှင့် တူသည်၊ const Keyword ကို အသုံးပြုခြင်းမှသာ ကွာခြားသည်။ Constants များကို အများအားဖြင့် အကြီးစာလုံးများဖြင့် ကြေညာသည်။ ဒီ Code က ဘာလုပ်သလဲ: - ဖန်တီးသည် MY_VARIABLE ဟုခေါ်သော Constant ကို 123 တန်ဖိုးဖြင့် - အသုံးပြုသည် Constants အတွက် အကြီးစာလုံးပုံစံ - ကာကွယ်သည် ဒီတန်ဖိုးကို အနာဂတ်တွင် ပြောင်းလဲမှုမှ Constants တွင် အဓိကစည်းကမ်းနှစ်ခုရှိသည်- - တန်ဖိုးကို ချက်ချင်းပေးရမည် – အလွတ် Constants မရှိပါ! - တန်ဖိုးကို ဘယ်တော့မှ ပြောင်းလဲ၍ မရပါ – ပြောင်းလဲရန် ကြိုးစားပါက JavaScript သည် အမှားပြပါမည်။ ဥပမာကြည့်ပါ: ရိုးရှင်းသောတန်ဖိုး - အောက်ပါအရာသည် မဖြစ်နိုင်ပါ: ```javascript const PI = 3; PI = 4; // မဖြစ်နိုင်ပါ ``` သင့်အတွက် မှတ်မိရန်: - ပြောင်းလဲရန် ကြိုးစားမှုသည် အမှားဖြစ်စေသည် - အရေးကြီးသော တန်ဖိုးများကို မတော်တဆ ပြောင်းလဲမှုမှ ကာကွယ်သည် - အစီအစဉ်တစ်ခုလုံးတွင် တန်ဖိုးကို တူညီစေသည် Object reference ကို ကာကွယ်ထားသည် - အောက်ပါအရာသည် မဖြစ်နိုင်ပါ: ```javascript const obj = { a: 3 }; obj = { b: 5 } // မဖြစ်နိုင်ပါ ``` ဒီအကြောင်းအရာများကို နားလည်ခြင်း: - Object တစ်ခုလုံးကို အသစ်ဖြင့် အစားထိုးခြင်းကို ကာကွယ်သည် - မူရင်း Object ကို reference ကာကွယ်သည် - Object ၏ identity ကို memory တွင် ထိန်းသိမ်းထားသည် Object value ကို မကာကွယ်ထားပါ - အောက်ပါအရာသည် ဖြစ်နိုင်ပါ: ```javascript const obj = { a: 3 }; obj.a = 5; // ဖြစ်နိုင်ပါ ``` ဒီမှာ ဘာဖြစ်သလဲ: - Object အတွင်းရှိ property value ကို ပြောင်းလဲသည် - တူညီသော Object reference ကို ထိန်းသိမ်းထားသည် - Object ၏ အကြောင်းအရာများကို ပြောင်းလဲနိုင်သည်၊ reference သည် တူညီနေသည် > မှတ်ချက်၊ const သည် reference ကို ပြောင်းလဲမှုမှ ကာကွယ်သည်။ သို့သော် တန်ဖိုးသည် _immutable_ မဟုတ်ပါ၊ အထူးသဖြင့် Object ကဲ့သို့သော ရှုပ်ထွေးသော ဖွဲ့စည်းမှုများတွင် ပြောင်းလဲနိုင်သည်။ ## ဒေတာအမျိုးအစားများ JavaScript သည် အချက်အလက်များကို ဒေတာအမျိုးအစားများဟုခေါ်သော အမျိုးအစားများအလိုက် စီစဉ်ထားသည်။ ဒီအကြောင်းအရာသည် အဟောင်းပညာရှင်များက ဗဟုသုတကို အမျိုးအစားခွဲထားသည့် နည်းလမ်းနှင့် တူသည် – Aristotle သည် reasoning အမျိုးအစားများကို ခွဲခြားခဲ့ပြီး logic principle များကို ကဗျာ၊ သင်္ချာနှင့် သဘာဝပညာတွင် တူညီစွာ မသုံးနိုင်ကြောင်း သိခဲ့သည်။ ဒေတာအမျိုးအစားများသည် အရေးကြီးသည်၊ အကြောင်းမှာ အမျိုးမျိုးသော အချက်အလက်များအတွက် အမျိုးမျိုးသော လုပ်ဆောင်မှုများ လိုအပ်သည်။ လူတစ်ဦး၏အမည်ကို သင်္ချာဆိုင်ရာ လုပ်ဆောင်မှုများတွင် အသုံးပြု၍ မရသလို၊ သင်္ချာဆိုင်ရာ equation ကို အက္ခရာစဉ်အလိုက် စီစဉ်၍ မရပါ။ JavaScript သည် လိုအပ်သော ဒေတာအမျိုးအစားကို လိုအပ်သည်။ ၎င်းကို နားလည်ခြင်းသည် အမှားများကို ကာကွယ်ပေးပြီး သင်၏ Code ကို ပိုမိုယုံကြည်စိတ်ချရစေသည်။ Variables တွင် နံပါတ်များနှင့် စာသားများကဲ့သို့သော တန်ဖိုးအမျိုးမျိုးကို သိမ်းဆည်းနိုင်သည်။ ဒီအမျိုးမျိုးသော တန်ဖိုးများကို ဒေတာအမျိုးအစား ဟုခေါ်သည်။ ဒေတာအမျိုးအစားများသည် Software Development တွင် အရေးကြီးသည်၊ အကြောင်းမှာ Developer များအတွက် Code ကို ရေးသားပုံနှင့် Software ကို အလုပ်လုပ်စေမည့် နည်းလမ်းများကို ဆုံးဖြတ်ရန် အထောက်အကူပြုသည်။ ထို့အပြင် ဒေတာအမျိုးအစားအချို့တွင် တန်ဖိုးအတွင်းရှိ အချက်အလက်များကို ပြောင်းလဲခြင်း သို့မဟုတ် ထုတ်ယူခြင်းအတွက် ထူးခြားသော လက္ခဏာများရှိသည်။ ✅ ဒေတာအမျိုးအစားများကို JavaScript data primitives ဟုလည်း ခေါ်သည်၊ ဘာသာစကားမှ ပေးထားသော အနိမ့်ဆုံးအဆင့် ဒေတာအမျိုးအစားများဖြစ်သည်။ Primitive data types ၇ မျိုးရှိသည်- string, number, bigint, boolean, undefined, null နှင့် symbol။ ဒီ primitives တစ်ခုချင်းစီသည် ဘာကို ကိုယ်စားပြုနိုင်မည်ကို စဉ်းစားရန် အချိန်ယူပါ။ zebra ဆိုတာဘာလဲ? 0 ကော? true ကော? ### နံပါတ်များ နံပါတ်များသည် JavaScript တွင် အလွယ်ကူဆုံး ဒေတာအမျိုးအစားဖြစ်သည်။ သင် 42 ကဲ့သို့သော အပြည့်နံပါတ်များ၊ 3.14 ကဲ့သို့သော ဒဿမများ သို့မဟုတ် -5 ကဲ့သို့သော အနုတ်နံပါတ်များနှင့် အ String များကို ပေါင်းစပ်ရန် (concatenate) သို့မဟုတ် တစ်ခုတည်းအဖြစ် ပေါင်းစည်းရန် + operator ကို အသုံးပြုပါ။ အဆင့်ဆင့်ဖြင့် ဖြစ်ပျက်နေသည်မှာ: - String များကို + operator ဖြင့် ပေါင်းစပ်သည် - String များကို ပထမဥပမာတွင် အလွယ်တကူ space မပါဘဲ ပေါင်းစည်းသည် - Space အကွာအဝေး " " ကို ထည့်သွင်း၍ ဖတ်ရှုရလွယ်ကူစေရန် - သတ်ပုံအမှန်အတိုင်း comma များကို ထည့်သွင်းသည် ✅ ဘာကြောင့် 1 + 1 = 2 ဟု JavaScript တွင်ဖြစ်သော်လည်း '1' + '1' = 11 ဖြစ်သနည်း? '1' + 1 ကိုလည်း စဉ်းစားကြည့်ပါ။ Template literals သည် string များကို format ပြုလုပ်ရန် အခြားနည်းလမ်းတစ်ခုဖြစ်ပြီး quotes မဟုတ်ဘဲ backtick ကို အသုံးပြုသည်။ Plain text မဟုတ်သည့် အရာအားလုံးကို ${ } placeholder အတွင်း ထည့်သွင်းရမည်။ ဤအရာတွင် string ဖြစ်နိုင်သော variables များပါဝင်သည်။ အပိုင်းတစ်ခုချင်းစီကို နားလည်ပါ: - Backtick ` `` ကို Template literals ဖန်တီးရန် regular quotes မဟုတ်ဘဲ အသုံးပြုသည် - Variables များကို ${} placeholder syntax ဖြင့် တိုက်ရိုက်ထည့်သွင်းသည် - Spaces နှင့် formatting ကို ရေးသားထားသည့်အတိုင်း ထိန်းသိမ်းထားသည် - Variables များနှင့် ရှုပ်ထွေးသော string များကို ဖန်တီးရန် ပိုမိုသန့်ရှင်းသောနည်းလမ်းကို ပေးသည် သင့် formatting ရည်မှန်းချက်များကို နည်းလမ်းနှစ်ခုစလုံးဖြင့် ရရှိနိုင်သော်လည်း Template literals သည် spaces နှင့် line break များကို လေးစားပါသည်။ ✅ Template literal ကို plain string နှင့် ဘယ်အချိန်တွင် အသုံးပြုမည်ဆိုတာ သင်သိပါသလား? ### 🔤 String Mastery Check: Text Manipulation Confidence String skills ကို စမ်းသပ်ပါ: - '1' + '1' သည် 2 မဟုတ်ဘဲ '11' ဖြစ်သည့်အကြောင်းကို ရှင်းပြနိုင်ပါသလား? - Concatenation နှင့် Template literals တို့အနက် ဘယ်နည်းလမ်းကို ပိုမိုဖတ်ရှုရလွယ်ကူသည်ဟု သင်ထင်ပါသလဲ? - String အပေါ် quotes မထည့်သွင်းမိပါက ဘာဖြစ်မည်ကို သိပါသလား? ### Booleans Booleans သည် အလွယ်ဆုံးသော data အမျိုးအစားဖြစ်ပြီး true သို့မဟုတ် false ဆိုသည့် အဖွဲ့နှစ်ခုသာ ပါဝင်နိုင်သည်။ ဤ binary logic system သည် ၁၉ ရာစု mathematician George Boole ၏ Boolean algebra အလုပ်များမှ စတင်ခဲ့သည်။ Booleans သည် ရိုးရှင်းသော်လည်း program logic အတွက် အရေးကြီးသည်။ User login ဖြစ်/မဖြစ်၊ Button click ဖြစ်/မဖြစ်၊ သတ်မှတ် criteria များကို ဖြည့်ဆည်း/မဖြည့်ဆည်း စသည်တို့အပေါ် အခြေခံ၍ သင့် code ကို ဆုံးဖြတ်နိုင်စေသည်။ Booleans တွင် true သို့မဟုတ် false ဆိုသည့် အဖွဲ့နှစ်ခုသာ ပါဝင်နိုင်သည်။ Booleans သည် သတ်မှတ်ထားသော conditions များကို ဖြည့်ဆည်းသည့်အခါ code line များကို run လုပ်ရန် ဆုံးဖြတ်နိုင်စေသည်။ အများအားဖြင့် operators များသည် Boolean တန်ဖိုးကို သတ်မှတ်ရန် အကူအညီပေးပြီး variables များကို initialize လုပ်ခြင်း သို့မဟုတ် operator ဖြင့် value များကို update လုပ်ခြင်းများကို သင်တွေ့ရမည်။ အထက်ပါတွင်: - Boolean value true ကို သိမ်းဆည်းသည့် variable တစ်ခုကို ဖန်တီးထားသည် - Boolean value false ကို သိမ်းဆည်းပုံကို ပြသထားသည် - Keywords true နှင့် false ကို တိတိကျကျ အသုံးပြုထားသည် (quotes မလိုအပ်ပါ) - Conditional statements တွင် variable များကို အသုံးပြုရန် ပြင်ဆင်ထားသည် ✅ Variable တစ်ခုသည် boolean true အဖြစ် အကဲဖြတ်နိုင်ပါက 'truthy' ဟု ခေါ်နိုင်သည်။ စိတ်ဝင်စားစရာကောင်းသည်မှာ JavaScript တွင် falsy အဖြစ် သတ်မှတ်ထားသော value များအပြင် အခြား value များအားလုံးသည် truthy ဖြစ်သည်။ ### 🎯 Boolean Logic Check: Decision Making Skills Boolean နားလည်မှုကို စမ်းသပ်ပါ: - ဘာကြောင့် JavaScript တွင် true နှင့် false အပြင် "truthy" နှင့် "falsy" values များရှိသည်ဟု သင်ထင်ပါသလဲ? - 0, "0", [], "false" တို့အနက် ဘယ်ဟာကို falsy ဟု သတ်မှတ်မည်ကို ခန့်မှန်းနိုင်ပါသလား? - Booleans များသည် program flow ကို ထိန်းချုပ်ရာတွင် ဘယ်လို အသုံးဝင်နိုင်မည်လဲ? --- ## 📊 Your Data Types Toolkit Summary ## GitHub Copilot Agent Challenge 🚀 Agent mode ကို အသုံးပြု၍ အောက်ပါ challenge ကို ပြီးမြောက်စေပါ: Description: JavaScript data types များကို အသုံးပြု၍ အမှန်တကယ် data scenarios များကို handle လုပ်နိုင်သော personal information manager တစ်ခုကို ဖန်တီးပါ။ Prompt: JavaScript program တစ်ခုကို ဖန်တီးပြီး user profile object တစ်ခုကို ဖန်တီးပါ။ ထို object တွင် အောက်ပါအချက်အလက်များပါဝင်ရမည်: လူတစ်ဦး၏နာမည် (string), အသက် (number), ကျောင်းသားဖြစ်/မဖြစ် (boolean), အကြိုက်ဆုံးအရောင်များ (array), နှင့် street, city, zip code properties များပါဝင်သော address object တစ်ခု။ Profile information ကို ပြသရန် function များနှင့် individual fields များကို update လုပ်ရန် function များပါဝင်ရမည်။ String concatenation, Template literals, အသက်နှင့် arithmetic operations, ကျောင်းသားဖြစ်/မဖြစ် status အတွက် boolean logic ကို ပြသပါ။ agent mode အကြောင်းကို ဒီမှာ ပိုမိုလေ့လာပါ။ ## 🚀 Challenge JavaScript တွင် developer များကို အံ့အားသင့်စေသော behavior များရှိသည်။ ဤ classic ဥပမာကို စမ်းကြည့်ပါ: let age = 1; let Age = 2; age == Age ကို သင့် browser console တွင် ရိုက်ထည့်ပြီး ရလဒ်ကို ကြည့်ပါ။ false ကို ပြန်ပေးမည် – အကြောင်းရင်းကို သင်ရှာဖွေနိုင်ပါသလား? JavaScript ၏ ဤ behavior များကို နားလည်ခြင်းသည် သင့် code ကို ပိုမိုယုံကြည်စိတ်ချစွာ ရေးသားနိုင်စေပြီး issue များကို ပိုမိုထိရောက်စွာ debug လုပ်နိုင်စေပါသည်။ ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study JavaScript exercises များ ကို ကြည့်ရှုပြီး တစ်ခုခုကို စမ်းကြည့်ပါ။ သင်ဘာတွေ သင်ယူခဲ့ပါသလဲ? ## Assignment Data Types Practice ## 🚀 Your JavaScript Data Types Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] သင့် browser console ကို ဖွင့်ပြီး data type မတူညီသော variables ၃ ခုကို ဖန်တီးပါ - [ ] Challenge ကို စမ်းကြည့်ပါ: let age = 1; let Age = 2; age == Age နှင့် false ဖြစ်သည့်အကြောင်းကို ရှာဖွေပါ - [ ] သင့်နာမည်နှင့် အကြိုက်ဆုံးနံပါတ်ကို အသုံးပြု၍ string concatenation ကို လေ့ကျင့်ပါ - [ ] Number ကို string နှင့် ပေါင်းစပ်မည်ဆိုလျှင် ဘာဖြစ်မည်ကို စမ်းကြည့်ပါ ### 🎯 What You Can Accomplish This Hour - [ ] Post-lesson quiz ကို ပြီးမြောက်စေပြီး မသေချာသော concept များကို ပြန်လည်သုံးသပ်ပါ - [ ] Number နှစ်ခုကို ပေါင်း, နှုတ်, များနှင့် ခွဲနိုင်သော mini calculator တစ်ခုကို ဖန်တီးပါ - [ ] Template literals ကို အသုံးပြု၍ ရိုးရှင်းသော နာမည် format လုပ်ပုံကို ဖန်တီးပါ - [ ] == နှင့် === comparison operators များ၏ ကွာခြားချက်ကို လေ့လာပါ - [ ] Data type များအကြား ပြောင်းလဲမှုကို လေ့ကျင့်ပါ ### 📅 Your Week-Long JavaScript Foundation - [ ] Assignment ကို ယုံကြည်မှုနှင့် ဖန်တီးမှုဖြင့် ပြီးမြောက်စေပါ - [ ] သင်လေ့လာခဲ့သော data type များအားလုံးကို အသုံးပြု၍ personal profile object တစ်ခုကို ဖန်တီးပါ - [ ] CSS-Tricks မှ JavaScript exercises များကို လေ့ကျင့်ပါ - [ ] Boolean logic ကို အသုံးပြု၍ ရိုးရှင်းသော form validator တစ်ခုကို ဖန်တီးပါ - [ ] Array နှင့် object data type များကို စမ်းကြည့်ပါ (လာမည့်သင်ခန်းစာများ၏ preview) - [ ] JavaScript community တစ်ခုကို ဝင်ရောက်ပြီး data type များအကြောင်း မေးမြန်းပါ ### 🌟 Your Month-Long Transformation - [ ] Data type အကြောင်း သိရှိမှုကို ပိုမိုကြီးမားသော programming project များတွင် ပေါင်းစပ်ပါ - [ ] အမှန်တကယ် application များတွင် data type တစ်ခုချင်းစီကို ဘယ်အချိန်တွင် အသုံးပြုမည်ဆိုတာ နားလည်ပါ - [ ] JavaScript fundamentals ကို နားလည်ရန် အခြေခံသူများကို ကူညီပါ - [ ] User data များကို စီမံနိုင်သော application သေးသေးလေးတစ်ခုကို ဖန်တီးပါ - [ ] Type coercion နှင့် strict equality ကဲ့သို့သော အဆင့်မြင့် data type concept များကို လေ့လာပါ - [ ] Documentation အဆင့်တိုးတက်မှုများဖြင့် open source JavaScript projects များတွင် ပါဝင်ပါ ### 🧠 Final Data Types Mastery Check-in JavaScript foundation ကို ကျေးဇူးတင်ပါ: - ဘယ် data type သည် behavior အပေါ် အံ့အားသင့်စေသလဲ? - Variables နှင့် constants များကို မိတ်ဆွေတစ်ဦးအား ရှင်းပြရန် သင်ဘယ်လောက်အဆင်ပြေပါသလဲ? - JavaScript type system အကြောင်း သင်ရှာဖွေတွေ့ရှိခဲ့သည့် အစိတ်အပိုင်းအထူးကောင်းဆုံးက ဘာလဲ? - ဤ fundamentals များဖြင့် သင်ဖန်တီးနိုင်မည့် အမှန်တကယ် application သည် ဘာလဲ? --- အကြောင်းကြားချက်: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရားရှိသော အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များကို အသုံးပြုရန် အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။

javascript

JavaScript အခြေခံ: Methods နှင့် Functions

## မသင်ခန်းစာမတိုင်မီ Quiz Pre-lecture quiz တူညီတဲ့ code ကို အကြိမ်ကြိမ်ရေးရတာက programming မှာ အများဆုံး စိတ်ပျက်စရာတွေထဲက တစ်ခုပါ။ Functions တွေက code ကို အသုံးပြန်နိုင်တဲ့ block တွေထဲမှာ ထည့်ပေးနိုင်တာကြောင့် ဒီပြဿနာကို ဖြေရှင်းပေးပါတယ်။ Functions တွေကို Henry Ford ရဲ့ assembly line ကို revolutionary ဖြစ်စေတဲ့ standardized parts တွေလိုပဲ စဉ်းစားနိုင်ပါတယ် – reliable component တစ်ခုကို ဖန်တီးပြီးရင် လိုအပ်တဲ့နေရာတိုင်းမှာ အသုံးပြုနိုင်ပါတယ်၊ အစမှ ပြန်တည်ဆောက်စရာမလိုပါဘူး။ Functions တွေက code အပိုင်းအစတွေကို bundle လုပ်ပြီး program တစ်ခုလုံးမှာ အသုံးပြုနိုင်အောင်လုပ်ပေးပါတယ်။ တူညီတဲ့ logic ကို နေရာတိုင်းမှာ copy-paste လုပ်တာမလိုဘဲ function တစ်ခုကို တစ်ခါဖန်တီးပြီး လိုအပ်တဲ့အခါမှာ ခေါ်သုံးနိုင်ပါတယ်။ ဒီနည်းလမ်းက code ကို စနစ်တကျထားရှိစေပြီး update လုပ်ရတာလွယ်ကူစေပါတယ်။ ဒီသင်ခန်းစာမှာ သင့်ကိုယ်ပိုင် functions တွေဖန်တီးနည်း၊ အချက်အလက်တွေကို functions တွေထဲကို ပေးပို့နည်း၊ အသုံးဝင်တဲ့ရလဒ်တွေကို ပြန်ရယူနည်းကို သင်ယူပါမယ်။ Functions နဲ့ Methods တွေကြားက ကွာခြားချက်၊ modern syntax နည်းလမ်းတွေ၊ Functions တွေက Functions အခြားတစ်ခုနဲ့ ဘယ်လိုအလုပ်လုပ်နိုင်တယ်ဆိုတာကို သိရှိရပါမယ်။ ဒီအကြောင်းအရာတွေကို အဆင့်ဆင့်တိုးတက်စေမှာပါ။ [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Functions Function ဆိုတာက တစ်ခုခုလုပ်ဆောင်တဲ့ အလုပ်တစ်ခုကို အကောင်အထည်ဖော်ပေးတဲ့ code block တစ်ခုပါ။ Logic ကို encapsulate လုပ်ပြီး လိုအပ်တဲ့အခါမှာ အလုပ်လုပ်နိုင်အောင်လုပ်ပေးပါတယ်။ Program တစ်ခုလုံးမှာ တူညီတဲ့ code ကို အကြိမ်ကြိမ်ရေးရတာမလိုဘဲ function တစ်ခုထဲမှာ ထည့်ပြီး လိုအပ်တဲ့အခါမှာ ခေါ်သုံးနိုင်ပါတယ်။ ဒီနည်းလမ်းက code ကို သန့်ရှင်းစေပြီး update လုပ်ရတာလွယ်ကူစေပါတယ်။ Codebase ရဲ့ 20 နေရာမှာ logic ကို ပြောင်းလဲရမယ်ဆိုရင် maintenance challenge ကို စဉ်းစားကြည့်ပါ။ Functions တွေကို အဓိပ္ပါယ်ရှိတဲ့နာမည်တွေပေးဖို့ အရေးကြီးပါတယ်။ နာမည်က function ရဲ့ ရည်ရွယ်ချက်ကို ရှင်းလင်းစွာဖော်ပြပေးပါတယ် – cancelTimer() ဆိုတာကို မြင်တာနဲ့ ဘာလုပ်မယ်ဆိုတာ ချက်ချင်းနားလည်နိုင်သလို၊ အတိအကျ label လုပ်ထားတဲ့ button က click လုပ်တဲ့အခါ ဘာဖြစ်မယ်ဆိုတာကို ပြောပြပေးပါတယ်။ ## Function တစ်ခုဖန်တီးခြင်းနှင့် ခေါ်သုံးခြင်း Function တစ်ခုကို ဘယ်လိုဖန်တီးမလဲဆိုတာကို ကြည့်ကြမယ်။ Syntax က တစ်မျိုးတည်း pattern ကို လိုက်နာပါတယ်။ ဒီကို ခွဲခြမ်းစိတ်ဖြာကြည့်ရအောင်: - function keyword က JavaScript ကို "Hey, function တစ်ခုဖန်တီးနေပါတယ်!" လို့ပြောပါတယ်။ - nameOfFunction က function ကို အဓိပ္ပါယ်ရှိတဲ့နာမည်ပေးတဲ့နေရာပါ။ - Parentheses () က parameters တွေထည့်နိုင်တဲ့နေရာပါ (ဒီအကြောင်းကို မကြာခင်မှာ ပြောပါမယ်) - Curly braces {} က function ကို ခေါ်သုံးတဲ့အခါ အလုပ်လုပ်မယ့် code ကို ထည့်ထားတဲ့နေရာပါ။ Function တစ်ခုကို လက်တွေ့လုပ်ဆောင်ကြည့်ရအောင်: ဒီ function က "Hello, world!" ကို console မှာ print လုပ်ပေးပါတယ်။ Once you've defined it, သင့်အတွက် လိုအပ်တဲ့အခါတိုင်း အသုံးပြုနိုင်ပါတယ်။ Function ကို အလုပ်လုပ်စေဖို့ (သို့မဟုတ် "call" လုပ်ဖို့) နာမည်နဲ့ parentheses ကိုရေးပါ။ JavaScript က function ကို သင့် code မှာ ဘယ်နေရာမှာ define လုပ်ထားတယ်ဆိုတာကို မူတည်ပြီး execution order ကို handle လုပ်ပေးပါမယ်။ ဒီ line ကို run လုပ်တဲ့အခါမှာ displayGreeting function ရဲ့ code အားလုံးကို အလုပ်လုပ်စေပြီး browser ရဲ့ console မှာ "Hello, world!" ကို ပြသပေးပါမယ်။ ဒီ function ကို အကြိမ်ကြိမ်ခေါ်သုံးနိုင်ပါတယ်။ ### 🧠 Function အခြေခံ Check: သင့်ပထမဆုံး Functions တွေကို တည်ဆောက်ခြင်း Basic functions အပေါ် သင့်ခံစားချက်ကို စစ်ဆေးကြည့်ရအောင်: - Function definitions မှာ curly braces {} ကို ဘာကြောင့်သုံးရတာလဲဆိုတာ ရှင်းပြနိုင်ပါသလား? - displayGreeting ကို parentheses မပါဘဲရေးရင် ဘာဖြစ်မလဲ? - တူညီတဲ့ function ကို အကြိမ်ကြိမ်ခေါ်သုံးဖို့ ဘာကြောင့်လိုအပ်မလဲ? ### Function ရေးသားမှုအကောင်းဆုံးနည်းလမ်းများ Function တွေကို ရေးသားတဲ့အခါ အောက်ပါအချက်တွေကို သတိထားပါ: - Function တွေကို ရှင်းလင်းတဲ့နာမည်တွေ ပေးပါ – သင့်အနာဂတ်ကိုယ်တိုင်က ကျေးဇူးတင်ပါလိမ့်မယ်! - camelCasing ကို multi-word နာမည်တွေအတွက် သုံးပါ (ဥပမာ calculateTotal ကို calculate_total အစား) - Function တစ်ခုစီကို တစ်ခုခုကို အကောင်းဆုံးလုပ်ဆောင်စေပါ ## Function တစ်ခုကို အချက်အလက်ပေးခြင်း displayGreeting function က အကန့်အသတ်ရှိပါတယ် – "Hello, world!" ကို လူတိုင်းအတွက်သာ ပြသနိုင်ပါတယ်။ Parameters တွေက functions တွေကို ပို flexible ဖြစ်စေပြီး အသုံးဝင်စေပါတယ်။ Parameters တွေက function ကို ခေါ်သုံးတဲ့အခါမှာ value တွေကို ထည့်နိုင်တဲ့ placeholder တွေလိုပါပဲ။ ဒီနည်းလမ်းက function တစ်ခုကို ခေါ်သုံးတဲ့အခါ마다 အခြားအချက်အလက်တွေနဲ့ အလုပ်လုပ်နိုင်စေပါတယ်။ Function ကို define လုပ်တဲ့အခါ parentheses ထဲမှာ parameters တွေကို comma နဲ့ ခွဲပြီး ထည့်ပါ: Parameter တစ်ခုစီက placeholder တစ်ခုလိုပါပဲ – function ကို ခေါ်သုံးတဲ့အခါမှာ actual values တွေကို ထည့်ပေးရပါမယ်။ Greeting function ကို update လုပ်ပြီး တစ်စုံတစ်ယောက်ရဲ့နာမည်ကို လက်ခံနိုင်အောင်လုပ်ကြည့်ရအောင်: နာမည်ကို message ထဲမှာ တိုက်ရိုက်ထည့်ဖို့ backticks (` `) နဲ့ ${}` ကို သုံးနည်းကို သတိထားပါ – ဒီကို template literal လို့ခေါ်ပြီး variable တွေကို string တွေထဲမှာ ထည့်ဖို့ အလွန်အသုံးဝင်ပါတယ်။ Function ကို ခေါ်သုံးတဲ့အခါမှာ နာမည်ကို ထည့်ပေးနိုင်ပါပြီ: JavaScript က string 'Christopher' ကို name parameter မှာ ထည့်ပြီး "Hello, Christopher!" ဆိုတဲ့ personalized message ကို ဖန်တီးပေးပါတယ်။ ## Default values Parameters တစ်ချို့ကို optional ဖြစ်စေချင်ရင် default values တွေကို အသုံးပြုနိုင်ပါတယ်! Greeting word ကို customize လုပ်နိုင်ဖို့လိုချင်ပေမယ့် specify မလုပ်ရင် "Hello" ကို fallback အနေနဲ့ သုံးချင်တယ်ဆိုရင် default values တွေကို variable တစ်ခုကို set လုပ်သလိုပဲ သုံးနိုင်ပါတယ်: ဒီမှာ name က still required ဖြစ်ပေမယ့် salutation က backup value 'Hello' ကို default အနေနဲ့ သုံးထားပါတယ်။ Function ကို အမျိုးမျိုးသောနည်းလမ်းနဲ့ ခေါ်သုံးနိုင်ပါပြီ: ပထမဆုံးခေါ်သုံးမှုမှာ salutation ကို specify မလုပ်တဲ့အတွက် default "Hello" ကို JavaScript သုံးပါတယ်။ ဒုတိယခေါ်သုံးမှုမှာ custom "Hi" ကို သုံးပါတယ်။ ဒီ flexibility က functions တွေကို အခြေအနေအမျိုးမျိုးနဲ့ အလုပ်လုပ်နိုင်စေပါတယ်။ ### 🎛️ Parameters Mastery Check: Functions တွေကို Flexible ဖြစ်စေခြင်း Parameter အပေါ် သင့်နားလည်မှုကို စစ်ဆေးကြည့်ပါ: - Parameter နဲ့ argument ကြားက ကွာခြားချက်က ဘာလဲ? - Default values တွေက အမှန်တကယ် programming မှာ ဘာကြောင့်အသုံးဝင်လဲ? - Parameters ထက် arguments ပိုများရင် ဘာဖြစ်မလဲဆိုတာ ခန့်မှန်းနိုင်ပါသလား? ## Return values Function တွေက console မှာ message တွေကို print လုပ်ပေးတာသာလုပ်ခဲ့ပေမယ့် calculation တစ်ခုလုပ်ပြီး ရလဒ်ကို ပြန်ပေးချင်ရင်ရော? ဒီအခါမှာ return values တွေကို အသုံးပြုနိုင်ပါတယ်။ Function က တစ်ခုခုကို display လုပ်ပေးတာအစား value တစ်ခုကို ပြန်ပေးပြီး variable တစ်ခုမှာ သိမ်းထားနိုင်သလို၊ code ရဲ့ အခြားနေရာတွေမှာ အသုံးပြုနိုင်ပါတယ်။ Value ကို ပြန်ပေးဖို့ return keyword ကို သုံးပြီး ပြန်ပေးလိုတဲ့အရာကို ရေးပါ: အရေးကြီးတာက function က return statement ကို ရောက်တဲ့အခါမှာ ချက်ချင်းရပ်ပြီး value ကို ပြန်ပေးပါတယ်။ Greeting function ကို message ကို return လုပ်အောင် ပြောင်းလဲကြည့်ရအောင်: ဒီ function က greeting ကို print လုပ်တာမဟုတ်ဘဲ message ကို ဖန်တီးပြီး ပြန်ပေးပါတယ်။ Return လုပ်တဲ့ value ကို variable တစ်ခုမှာ သိမ်းပြီး အခြားနေရာမှာ အသုံးပြုနိုင်ပါတယ်: အခု greetingMessage က "Hello, Christopher" ကို သိမ်းထားပြီး code ရဲ့ အခြားနေရာမှာ အသုံးပြုနိုင်ပါတယ် – webpage မှာ ပြသဖို့၊ email မှာ ထည့်ဖို့၊ function တစ်ခုကို pass လုပ်ဖို့ စသည်တို့။ ### 🔄 Return Values Check: ရလဒ်တွေကို ပြန်ရယူခြင်း Return value အပေါ် သင့်နားလည်မှုကို စစ်ဆေးကြည့်ပါ: - Function မှာ return statement ရောက်ပြီး code က ဘာဖြစ်မလဲ? - Console မှာ print လုပ်တာအစား return လုပ်တာက ဘာကြောင့်ပိုကောင်းသလဲ? - Function တစ်ခုက value အမျိုးမျိုး (string, number, boolean) ကို return လုပ်နိုင်ပါသလား? ## Functions တွေကို Functions အခြားတစ်ခုရဲ့ parameter အနေနဲ့ အသုံးပြုခြင်း Functions တွေကို အခြား function ရဲ့ parameter အနေနဲ့ pass လုပ်နိုင်ပါတယ်။ ဒီ concept က အစမှာ ခက်ခဲစေနိုင်ပေမယ့် flexible programming patterns တွေကို ဖန်တီးနိုင်စေတဲ့ အင်အားကြီး feature တစ်ခုပါ။ ဒီ pattern က "တစ်ခုခုဖြစ်တဲ့အခါ ဒီအရာကိုလုပ်ပါ" ဆိုတဲ့အခါမှာ အလွန်အသုံးဝင်ပါတယ်။ ဥပမာ "timer ပြီးတဲ့အခါ ဒီ code ကို run လုပ်ပါ" သို့မဟုတ် "user က button ကို click လုပ်တဲ့အခါ ဒီ function ကို call လုပ်ပါ" စသည်တို့။ setTimeout ကို ကြည့်ရအောင်၊ timer တစ်ခုပြီးတဲ့အခါ code တစ်ခုကို run လုပ်စေတဲ့ built-in function တစ်ခုပါ။ Run လုပ်မယ့် code ကို ပြောပြဖို့လိုပါတယ် – function ကို pass လုပ်ဖို့ perfect use case ပါ! ဒီ code ကို try လုပ်ကြည့်ပါ – 3 seconds ပြည့်တဲ့အခါ message တစ်ခုကို မြင်ရပါမယ်: setTimeout ကို displayDone (parentheses မပါဘဲ) pass လုပ်ပေးတာကို သတိထားပါ။ Function ကို ကိုယ်တိုင် call လုပ်တာမဟုတ်ဘဲ setTimeout ကို "3 seconds မှာ ဒီ function ကို call လုပ်ပါ" လို့ပြောပါတယ်။ ### Anonymous functions တစ်ခါတစ်ရံ function တစ်ခုကို တစ်ခါတည်းအတွက်သာလိုအပ်ပြီး နာမည်ပေးချင်မိမိမိမိမိမိမိမိမိမိမိမိမိမိမိမိမိမိ - [ ] ရိုးရာ function ကို arrow function syntax သို့ ပြောင်းလဲကြည့်ပါ - [ ] စိန်ခေါ်မှုကို လေ့ကျင့်ပါ - function နှင့် method များ၏ ကွာခြားချက်ကို ရှင်းပြပါ ### 🎯 ဒီတစ်နာရီအတွင်း ပြုလုပ်နိုင်မည့်အရာများ - [ ] သင်ခန်းစာပြီးဆုံးပြီးနောက် quiz ကို ပြီးမြောက်စေပြီး မရှင်းလင်းသေးသော အကြောင်းအရာများကို ပြန်လည်သုံးသပ်ပါ - [ ] GitHub Copilot စိန်ခေါ်မှုမှ math utilities library ကို တည်ဆောက်ပါ - [ ] အခြား function ကို parameter အဖြစ် အသုံးပြုသော function တစ်ခုကို ဖန်တီးပါ - [ ] default parameters ဖြင့် function များရေးသားခြင်းကို လေ့ကျင့်ပါ - [ ] function return values တွင် template literals ကို စမ်းသပ်ပါ ### 📅 သင်၏ တစ်ပတ်တာ Function Mastery - [ ] "Fun with Functions" အလုပ်ကို ဖန်တီးမှုနှင့် ပြီးမြောက်စေပါ - [ ] သင်ရေးသားထားသော ထပ်တလဲလဲ code များကို ပြန်လည်ပြုပြင်ပြီး reusable functions အဖြစ် ပြောင်းလဲပါ - [ ] function များကိုသာ အသုံးပြု၍ (global variables မပါ) ကိန်းဂဏန်းတွက်ချက်စက် တစ်ခုကို တည်ဆောက်ပါ - [ ] map() နှင့် filter() ကဲ့သို့သော array methods များနှင့်အတူ arrow functions ကို လေ့ကျင့်ပါ - [ ] အများအားဖြင့် အသုံးဝင်သော tasks များအတွက် utility functions များကို ဖန်တီးပါ - [ ] higher-order functions နှင့် functional programming concepts ကို လေ့လာပါ ### 🌟 သင်၏ တစ်လတာ Transformation - [ ] closures နှင့် scope ကဲ့သို့သော အဆင့်မြင့် function အကြောင်းအရာများကို ကျွမ်းကျင်ပါ - [ ] function composition ကို အလေးထားအသုံးပြုသော project တစ်ခုကို တည်ဆောက်ပါ - [ ] function documentation ကို တိုးတက်စေရန် open source တွင် ပါဝင်ဆောင်ရွက်ပါ - [ ] function နှင့် syntax ပုံစံများကို တစ်ဦးတစ်ယောက်ကို သင်ကြားပါ - [ ] JavaScript တွင် functional programming paradigms ကို ရှာဖွေပါ - [ ] အနာဂတ် project များအတွက် reusable functions များကို ကိုယ်ပိုင် library အဖြစ် ဖန်တီးပါ ### 🏆 Final Functions Champion Check-in သင်၏ function mastery ကို ကျေးဇူးတင်ပါ: - သင်ဖန်တီးထားသော အကျိုးရှိဆုံး function သည် အဘယ်နည်း? - function အကြောင်းကို သင်လေ့လာပြီးနောက် code organization အပေါ် သင်၏အတွေးအမြင် ဘယ်လိုပြောင်းလဲသနည်း? - သင်နှစ်သက်သော function syntax သည် အဘယ်နည်း၊ အဘယ်ကြောင့်? - function တစ်ခုရေးသားခြင်းဖြင့် သင်ဖြေရှင်းလိုသော အမှန်တကယ်ပြဿနာသည် အဘယ်နည်း? --- အကြောင်းကြားချက်: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူက ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။

javascript,function

JavaScript အခြေခံ: ဆုံးဖြတ်ချက်များလုပ်ခြင်း

အက်ပလီကေးရှင်းတွေ ဘယ်လိုအလွယ်တကူ ဆုံးဖြတ်ချက်တွေ လုပ်နိုင်သလဲဆိုတာ သင်ဘယ်တော့မှ စဉ်းစားဖူးပါသလား။ ဥပမာ - လမ်းကြောင်းအမြန်ဆုံးကို ရွေးချယ်တဲ့ navigation system, ဒါမှမဟုတ် အပူပေးစနစ်က အပူပေးဖို့အချိန်ကို ဆုံးဖြတ်တဲ့အခါ။ ဒါက programming မှာ ဆုံးဖြတ်ချက်လုပ်ခြင်းရဲ့ အခြေခံအယူအဆပဲဖြစ်ပါတယ်။ Charles Babbage ရဲ့ Analytical Engine က အခြေအနေအပေါ်မူတည်ပြီး လုပ်ဆောင်မှုအဆင့်တွေကို လိုက်နာဖို့ ဒီဇိုင်းဆွဲထားသလိုပဲ၊ ယနေ့ခေတ် JavaScript အစီအစဉ်တွေက အခြေအနေအမျိုးမျိုးအပေါ်မူတည်ပြီး ရွေးချယ်မှုတွေ လုပ်ဖို့ လိုအပ်ပါတယ်။ ဒီ branching နဲ့ ဆုံးဖြတ်ချက်လုပ်နိုင်စွမ်းက static code ကို responsive, intelligent applications အဖြစ် ပြောင်းလဲပေးပါတယ်။ ဒီသင်ခန်းစာမှာ သင့်ရဲ့အစီအစဉ်တွေမှာ conditional logic ကို အသုံးပြုဖို့ သင်ယူပါမယ်။ Conditional statements, comparison operators, logical expressions တွေကို လေ့လာပြီး သင့် code က အခြေအနေတွေကို အကဲဖြတ်ပြီး သင့်တော်တဲ့အဖြေကို ပြန်လည်ပေးနိုင်ဖို့ သင်ယူပါမယ်။ ## သင်ခန်းစာမတိုင်မီ Quiz Pre-lecture quiz အစီအစဉ်တွေ ဆုံးဖြတ်ချက်လုပ်နိုင်စွမ်းနဲ့ program flow ကို ထိန်းချုပ်နိုင်စွမ်းက programming ရဲ့ အခြေခံအပိုင်းတစ်ခုဖြစ်ပါတယ်။ ဒီအပိုင်းမှာ Boolean values နဲ့ conditional logic ကို အသုံးပြုပြီး သင့် JavaScript အစီအစဉ်တွေကို ထိန်းချုပ်ဖို့ လေ့လာပါမယ်။ [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Booleans အကြောင်း အကျဉ်းချုပ် ဆုံးဖြတ်ချက်လုပ်ခြင်းကို လေ့လာမယ့်အခါမှာ အရင်ဆုံး Boolean values ကို ပြန်လည်သုံးသပ်ပါမယ်။ George Boole ဆိုတဲ့ သင်္ချာပညာရှင်ရဲ့ နာမည်နဲ့ အမည်ပေးထားတဲ့ ဒီ values တွေက binary states ကို ကိုယ်စားပြုပါတယ် - true ဒါမှမဟုတ် false။ အဓိပ္ပါယ်မရှုပ်ထွေးဘဲ၊ အလယ်အလတ်မရှိပါဘူး။ ဒီ binary values တွေက computational logic အားလုံးရဲ့ အခြေခံဖြစ်ပါတယ်။ သင့်ရဲ့အစီအစဉ်က ဆုံးဖြတ်ချက်လုပ်တဲ့အခါမှာ အဆုံးသတ်မှာ Boolean အကဲဖြတ်ချက်တစ်ခုအဖြစ် လျှော့ချပါတယ်။ Boolean variables ဖန်တီးခြင်းက ရိုးရှင်းပါတယ်။ ဒီ code က explicit Boolean values နဲ့ variables နှစ်ခုကို ဖန်တီးပေးပါတယ်။ ✅ Booleans တွေကို အင်္ဂလိပ်သင်္ချာပညာရှင်၊ အတွေးအခေါ်ပညာရှင်နဲ့ logic ပညာရှင် George Boole (1815–1864) ရဲ့ နာမည်နဲ့ အမည်ပေးထားပါတယ်။ ## Comparison Operators နဲ့ Booleans အလေ့အကျင့်မှာ Boolean values တွေကို လက်နက်ဖြင့် သတ်မှတ်တာ ရှားပါးပါတယ်။ အစားအစား "ဒီနံပါတ်က အဲဒီနံပါတ်ထက် ကြီးသလား?" ဒါမှမဟုတ် "ဒီ values တွေ တူသလား?" ဆိုတဲ့ အခြေအနေတွေကို အကဲဖြတ်ပြီး ဖန်တီးပါတယ်။ Comparison operators တွေက ဒီအကဲဖြတ်ချက်တွေကို လုပ်ဆောင်နိုင်စေပါတယ်။ ဒါတွေက values တွေကို နှိုင်းယှဉ်ပြီး operands တွေရဲ့ ဆက်နွယ်မှုအပေါ်မူတည်ပြီး Boolean results တွေကို ပြန်ပေးပါတယ်။ ✅ သင့် browser ရဲ့ console မှာ comparison တွေကို ရေးပြီး သင့်ရဲ့ အသိပညာကို စမ်းသပ်ပါ။ ပြန်ပေးတဲ့ data တွေထဲမှာ အံ့ဩစရာရှိပါသလား? ### 🧠 Comparison Mastery Check: Boolean Logic ကို နားလည်ခြင်း သင့်ရဲ့ comparison နားလည်မှုကို စမ်းသပ်ပါ: - === (strict equality) ကို == (loose equality) ထက် ပိုသုံးတတ်ကြောင်း ဘာကြောင့်လဲ? - 5 === '5' က ဘာကို ပြန်ပေးမလဲ? 5 == '5' ကရော? - !== နဲ့ != ရဲ့ ကွာခြားချက်က ဘာလဲ? ## If Statement if statement က သင့် code မှာ မေးခွန်းတစ်ခု မေးတာလိုပါပဲ။ "ဒီအခြေအနေက true ဖြစ်ရင် ဒီအရာကို လုပ်ပါ။" JavaScript မှာ ဆုံးဖြတ်ချက်လုပ်ဖို့ အရေးကြီးဆုံး tool တစ်ခုပါ။ ဒါကို ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ ကြည့်ပါ: Condition ကို parentheses အတွင်းမှာ ထည့်ပြီး true ဖြစ်ရင် JavaScript က curly braces အတွင်းက code ကို run လုပ်ပါတယ်။ False ဖြစ်ရင်တော့ JavaScript က အဲဒီ block ကို skip လုပ်ပြီး မလုပ်ပါဘူး။ Comparison operators တွေကို conditions ဖန်တီးဖို့ အများအားဖြင့် အသုံးပြုပါတယ်။ အကဲဖြတ်ချက်တစ်ခုကို ကြည့်ပါ: 1000 >= 800 က true ဖြစ်တဲ့အတွက် block အတွင်းက code ကို run လုပ်ပြီး console မှာ "Getting a new laptop!" ကို ပြသပါတယ်။ ## If..Else Statement ဒါပေမယ့် condition က false ဖြစ်တဲ့အခါမှာ အခြားအရာတစ်ခုကို လုပ်ချင်ရင်ရော? ဒီအချိန်မှာ else က အရေးပါတဲ့အခန်းကဏ္ဍပါ - backup plan တစ်ခုလိုပါပဲ။ else statement က "ဒီ condition true မဖြစ်ရင် အခြားအရာကို လုပ်ပါ" ဆိုတဲ့နည်းလမ်းကို ပေးပါတယ်။ အခုတော့ 500 >= 800 က false ဖြစ်တဲ့အတွက် JavaScript က ပထမ block ကို skip လုပ်ပြီး else block ကို run လုပ်ပါတယ်။ Console မှာ "Can't afford a new laptop, yet!" ကို တွေ့ရပါမယ်။ ✅ ဒီ code နဲ့ အောက်မှာပါတဲ့ code ကို browser console မှာ run လုပ်ပြီး သင့်ရဲ့ နားလည်မှုကို စမ်းသပ်ပါ။ currentMoney နဲ့ laptopPrice variables တွေကို ပြောင်းလဲပြီး console.log() ရဲ့ output ကို ပြောင်းလဲပါ။ ### 🎯 If-Else Logic Check: Branching Paths သင့်ရဲ့ conditional logic နားလည်မှုကို စမ်းသပ်ပါ: - currentMoney က laptopPrice နဲ့ တိတိတူရင် ဘာဖြစ်မလဲ? - If-else logic ကို အသုံးပြုဖို့ သင့်တော်တဲ့ အမှန်တကယ်အခြေအနေတစ်ခုကို စဉ်းစားနိုင်ပါသလား? - Price ranges အမျိုးမျိုးကို handle လုပ်ဖို့ ဒီ logic ကို ဘယ်လို တိုးချဲ့နိုင်မလဲ? ## Switch Statement တစ်ခါတစ်ရံမှာ value တစ်ခုကို အမျိုးမျိုးနဲ့ နှိုင်းယှဉ်ဖို့ လိုအပ်ပါတယ်။ if..else statements အများကြီးကို chain လုပ်နိုင်ပေမယ့် ဒီနည်းလမ်းက ရှုပ်ထွေးလာနိုင်ပါတယ်။ switch statement က အမျိုးမျိုးသော discrete values တွေကို handle လုပ်ဖို့ ပိုသန့်ရှင်းတဲ့ structure ကို ပေးပါတယ်။ ဒီ concept က telephone exchanges ရဲ့ mechanical switching systems တွေလိုပါပဲ - input value တစ်ခုက execution path ကို သတ်မှတ်ပေးပါတယ်။ ဒီ structure က အလုပ်လုပ်ပုံက: - JavaScript က expression ကို တစ်ခါ evaluate လုပ်တယ် - case တစ်ခုချင်းစီကို match ဖြစ်မဖြစ် ကြည့်တယ် - Match ဖြစ်တဲ့ code block ကို run လုပ်တယ် - break က JavaScript ကို switch ထဲကနေ ထွက်ခွာစေတယ် - Case တွေမကိုက်ရင် default block ကို run လုပ်တယ် (ရှိရင်) ဒီဥပမာမှာ JavaScript က dayNumber ကို 2 ဖြစ်တာကို တွေ့ပြီး case 2 ကို match လုပ်တယ်၊ dayName ကို "Tuesday" အဖြစ် သတ်မှတ်ပြီး switch ထဲကနေ ထွက်သွားတယ်။ အရလဒ်က "Today is Tuesday" ကို console မှာ ပြသတယ်။ ✅ ဒီ code နဲ့ အောက်မှာပါတဲ့ code ကို browser console မှာ run လုပ်ပြီး သင့်ရဲ့ နားလည်မှုကို စမ်းသပ်ပါ။ Variable a ရဲ့ value ကို ပြောင်းလဲပြီး console.log() ရဲ့ output ကို ပြောင်းလဲပါ။ ### 🔄 Switch Statement Mastery: Multiple Options Switch နားလည်မှုကို စမ်းသပ်ပါ: - break statement ကို မမေ့ရင် ဘာဖြစ်မလဲ? - Multiple if-else statements အစား switch ကို ဘယ်အချိန်မှာ သုံးမလဲ? - default case က ဘာကြောင့် အသုံးဝင်သလဲ? ## Logical Operators နဲ့ Booleans ရှုပ်ထွေးတဲ့ ဆုံးဖြတ်ချက်တွေက conditions အများကြီးကို တစ်ချိန်တည်းမှာ အကဲဖြတ်ဖို့ လိုအပ်ပါတယ်။ Boolean algebra က mathematicians တွေကို logical expressions တွေကို ပေါင်းစည်းဖို့ ခွင့်ပြုသလိုပဲ၊ programming ကလည်း logical operators တွေကို ပေးထားပြီး simple true/false evaluations တွေကို ပေါင်းစည်းနိုင်ပါတယ်။ ဒီ operators တွေက simple conditions တွေကို ပေါင်းစည်းပြီး ရှုပ်ထွေးတဲ့ conditional logic တွေကို ဖန်တီးနိုင်စေပါတယ်။ ဒီ operators တွေက conditions တွေကို အသုံးဝင်တဲ့နည်းလမ်းတွေနဲ့ ပေါင်းစည်းနိုင်စေပါတယ်: - AND (&&) ဆိုတာ နှစ်ခုလုံး true ဖြစ်ရမယ် - OR (||) ဆိုတာ တစ်ခုခု true ဖြစ်ရမယ် - NOT (!) ဆိုတာ true ကို false ပြောင်းတယ် (နဲ့ ဆန့်ကျင်ဘက်) ## Logical Operators နဲ့ Decisions Logical operators တွေကို အသုံးပြုပြီး ပိုမိုလက်တွေ့ကျတဲ့ဥပမာကို ကြည့်ပါ: ဒီဥပမာမှာ - 20% discount price (640) ကိုတွက်ပြီး၊ full price ဒါမှမဟုတ် discounted price ကို cover လုပ်နိုင်မလားဆိုတာ available funds ကို အကဲဖြတ်တယ်။ 600 က discounted price threshold (640) ကို ဖြတ်နိုင်တဲ့အတွက် condition က true ဖြစ်တယ်။ ### 🧮 Logical Operators Check: Combining Conditions Logical operator နားလည်မှုကို စမ်းသပ်ပါ: - Expression A && B မှာ A က false ဖြစ်ရင် B ကို evaluate လုပ်ပါသလား? - &&, ||, ! သုံးခုလုံးကို တစ်ခါတည်းမှာ သုံးဖို့လိုအပ်တဲ့ အခြေအနေတစ်ခုကို စဉ်းစားနိုင်ပါသလား? - !user.isActive နဲ့ user.isActive !== true ရဲ့ ကွာခြားချက်က ဘာလဲ? ### Negation Operator တစ်ခါတစ်ရံမှာ တစ်ခုခု NOT true ဖြစ်တဲ့အခါကို စဉ်းစားရတာ ပိုလွယ်တယ်။ ဥပမာ - "User logged in ဖြစ်လား?" ဆိုတဲ့အစား "User NOT logged in ဖြစ်လား?" ဆိုတာကို မေးချင်တယ်။ Exclamation mark (!) operator က သင့် logic ကို ပြောင်းပေးပါတယ်။ ! operator က "ဆန့်ကျင်ဘက်..." ဆိုတာလိုပါပဲ - တစ်ခုခု true ဖြစ်ရင် ! က false ဖြစ်စေတယ် 2. ကျောင်းသားသည် အောင်မြင်မှု (grade >= 60) နှင့် ဂုဏ်ထူး (grade >= 90) ရရှိမရှိကို logical operators အသုံးပြု၍ စစ်ဆေးပါ။ 3. ကျောင်းသား၏ အက္ခရာအဆင့်တစ်ခုချင်းစီအတွက် အထူးတုံ့ပြန်မှုပေးရန် switch statement ကို အသုံးပြုပါ။ 4. ကျောင်းသားသည် နောက်တစ်ခုသော သင်တန်းအတွက် အရည်အချင်းပြည့်မီမီ (grade >= 70) ရှိမရှိကို ternary operator အသုံးပြု၍ ဆုံးဖြတ်ပါ။ 5. အမှတ်သည် 0 နှင့် 100 အကြားရှိသည်ကို အတည်ပြုရန် input validation ထည့်သွင်းပါ။ 59, 60, 89, 90 နှင့် မမှန်ကန်သော input များကဲ့သို့သော edge cases များနှင့်အတူ သင်၏ program ကို စမ်းသပ်ပါ။ agent mode အကြောင်းပိုမိုလေ့လာရန် ဒီမှာကြည့်ပါ။ ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study အသုံးပြုသူများအတွက် ရရှိနိုင်သော operator များအကြောင်း MDN တွင်ပိုမိုဖတ်ရှုပါ။ Josh Comeau ရဲ့အလွန်အမင်းအံ့ဩစရာကောင်းတဲ့ operator lookup ကိုလေ့လာပါ! ## Assignment Operators --- ## 🧠 သင့်ဆုံးဖြတ်မှု Toolkit အကျဉ်းချုပ် --- ## 🚀 JavaScript Decision-Making ကို ကျွမ်းကျင်မှုရရှိရန် Timeline ### ⚡ နောက် ၅ မိနစ်အတွင်းလုပ်နိုင်သောအရာများ - [ ] သင့် browser console တွင် comparison operators ကို လေ့ကျင့်ပါ။ - [ ] သင့်အသက်ကို စစ်ဆေးသော ရိုးရှင်းသော if-else statement တစ်ခုရေးပါ။ - [ ] စိန်ခေါ်မှုကို စမ်းကြည့်ပါ - if-else ကို ternary operator အသုံးပြု၍ ပြန်ရေးပါ။ - [ ] "truthy" နှင့် "falsy" values များကို စမ်းကြည့်ပါ။ ### 🎯 ဒီတစ်နာရီအတွင်း ပြီးမြောက်နိုင်သောအရာများ - [ ] သင်ခန်းစာပြီးဆုံးပြီး quiz ကို ပြီးမြောက်စေပြီး မရှင်းလင်းသောအကြောင်းအရာများကို ပြန်လည်သုံးသပ်ပါ။ - [ ] GitHub Copilot challenge မှ comprehensive grade calculator ကို တည်ဆောက်ပါ။ - [ ] အကောင်းဆုံးဝတ်စုံရွေးချယ်မှုကဲ့သို့သော အမှန်တကယ်ဖြစ်ရပ်အခြေအနေတစ်ခုအတွက် ရိုးရှင်းသော decision tree တစ်ခုဖန်တီးပါ။ - [ ] logical operators များနှင့် အခြေအနေများစုံလင်စွာပေါင်းစပ်၍ လေ့ကျင့်ပါ။ - [ ] switch statements ကို အမျိုးမျိုးသောအသုံးပြုမှုများအတွက် စမ်းသပ်ပါ။ ### 📅 Logic ကို တစ်ပတ်အတွင်း ကျွမ်းကျင်မှုရရှိရန် - [ ] စိတ်ဖန်တီးမှုရှိသော ဥပမာများဖြင့် operators assignment ကို ပြီးမြောက်ပါ။ - [ ] အခြေအနေဆိုင်ရာဖွဲ့စည်းမှုများကို အသုံးပြု၍ mini quiz application တစ်ခုတည်ဆောက်ပါ။ - [ ] အခြေအနေများစုံလင်စွာစစ်ဆေးသော form validator တစ်ခုဖန်တီးပါ။ - [ ] Josh Comeau ရဲ့ operator lookup လေ့ကျင့်မှုများကို လေ့ကျင့်ပါ။ - [ ] ရှိပြီးသား code ကို ပိုမိုသင့်လျော်သော အခြေအနေဆိုင်ရာဖွဲ့စည်းမှုများအသုံးပြုရန် ပြန်လည်ပြင်ဆင်ပါ။ - [ ] short-circuit evaluation နှင့် performance implications ကို လေ့လာပါ။ ### 🌟 Logic ကို တစ်လအတွင်း ပြောင်းလဲမှု - [ ] ရှုပ်ထွေးသော nested conditions များကို ကျွမ်းကျင်ပြီး code readability ကို ထိန်းသိမ်းပါ။ - [ ] ရှုပ်ထွေးသောဆုံးဖြတ်မှု logic ပါဝင်သော application တစ်ခုတည်ဆောက်ပါ။ - [ ] ရှိပြီးသား project များတွင် conditional logic ကို တိုးတက်စေရန် open source တွင် ပါဝင်ပါ။ - [ ] အခြေအနေဆိုင်ရာဖွဲ့စည်းမှုများနှင့် သုံးစွဲရန်အချိန်ကို တစ်ဦးတစ်ယောက်ကို သင်ကြားပါ။ - [ ] conditional logic အတွက် functional programming နည်းလမ်းများကို လေ့လာပါ။ - [ ] conditional best practices အတွက် ကိုယ်ပိုင်အညွှန်းစာအုပ်တစ်ခုဖန်တီးပါ။ ### 🏆 Final Decision-Making Champion Check-in သင့် logical thinking ကျွမ်းကျင်မှုကို ကျေးဇူးပြု၍ ကျေးဇူးတင်ပါ: - သင်အောင်မြင်စွာ အကောင်အထည်ဖော်နိုင်ခဲ့သော ရှုပ်ထွေးသောဆုံးဖြတ်မှု logic သည် ဘာလဲ။ - သင့်အတွက် အလွယ်တကူအသုံးပြုနိုင်သော အခြေအနေဆိုင်ရာဖွဲ့စည်းမှုက ဘာလဲ၊ အဘယ်ကြောင့်လဲ။ - logical operators အကြောင်းလေ့လာခြင်းက သင့်ပြဿနာဖြေရှင်းနည်းကို ဘယ်လိုပြောင်းလဲစေခဲ့သလဲ။ - ရှုပ်ထွေးသောဆုံးဖြတ်မှု logic က အကျိုးရှိမည့် အမှန်တကယ်ဖြစ်ရပ် application သည် ဘာလဲ။ --- အကြောင်းကြားချက်: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူက ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားယူမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။

javascript

JavaScript အခြေခံ: Arrays နှင့် Loops

## မိမိသင်ခန်းစာမတိုင်မီ စမ်းမေးခွန်း Pre-lecture quiz ဝက်ဘ်ဆိုဒ်တွေက ဘယ်လို Shopping Cart item တွေကို သိမ်းထားနိုင်သလဲ၊ ဒါမှမဟုတ် မိတ်ဆွေစာရင်းကို ပြသနိုင်သလဲဆိုတာ စဉ်းစားဖူးပါသလား။ ဒါတွေကို Arrays နဲ့ Loops က အကူအညီပေးပါတယ်။ Arrays ဆိုတာ အချက်အလက်များစွာကို သိမ်းဆည်းထားတဲ့ ဒစ်ဂျစ်တယ်ကွန်တိန်နာလိုမျိုးဖြစ်ပြီး Loops က အဲဒီအချက်အလက်တွေကို ထပ်တလဲလဲ ကုဒ်မရေးဘဲ အလွယ်တကူ အလုပ်လုပ်နိုင်စေပါတယ်။ ဒီနှစ်ခုကို ပေါင်းစပ်ပြီး သင့်ရဲ့ပရိုဂရမ်တွေမှာ အချက်အလက်တွေကို စနစ်တကျ ကိုင်တွယ်နိုင်ဖို့ အခြေခံအုတ်မြစ်ဖြစ်ပါတယ်။ သင်တန်းပြီးဆုံးချိန်မှာ အဆင့်မြင့်တဲ့ အချက်အလက်လုပ်ငန်းတွေကို အနည်းငယ်သော ကုဒ်လိုင်းများဖြင့် ပြုလုပ်နိုင်မည်ဖြစ်သည်။ ဒီအရေးကြီးတဲ့ ပရိုဂရမ်မင်းဆိုင်ရာ အကြောင်းအရာတွေကို လေ့လာကြမယ်။ [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Arrays ကို ဒစ်ဂျစ်တယ်ဖိုင်လင်ဘက်လိုပဲ စဉ်းစားပါ - တစ်ခုချင်းစီကို သီးသန့်သိမ်းဆည်းမယ့်အစား ဆက်စပ်နေတဲ့ အချက်အလက်များစွာကို တစ်ခုတည်းသော စနစ်တကျကွန်တိန်နာထဲမှာ စီစဉ်ထားနိုင်ပါတယ်။ ဓာတ်ပုံပြခန်းတစ်ခုတည်ဆောက်ခြင်း၊ To-do List ကို စီမံခြင်း၊ ဒါမှမဟုတ် ဂိမ်းထဲမှာ အမြင့်ဆုံးအမှတ်တွေကို သိမ်းဆည်းခြင်းဖြစ်စေ၊ Arrays က အချက်အလက်တွေကို စနစ်တကျ စီမံဖို့ အခြေခံအုတ်မြစ်ပေးပါတယ်။ ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ ကြည့်ကြမယ်။ ✅ Arrays က သင့်အနားမှာရှိနေပါတယ်! Solar Panel Array လို တစ်ခုခုကို စဉ်းစားနိုင်ပါသလား? ### Arrays ဖန်တီးခြင်း Array တစ်ခုဖန်တီးဖို့ အလွန်လွယ်ကူပါတယ် - Square Brackets ကို သုံးပါ! ဒီမှာ ဘာဖြစ်နေလဲ? Square Brackets [] ကို သုံးပြီး အလွတ်ကွန်တိန်နာတစ်ခု ဖန်တီးလိုက်ပါပြီ။ ဒါကို အလွတ်စာကြည့်တိုက်စင်လိုမျိုး စဉ်းစားပါ - သင်စီစဉ်ချင်တဲ့ စာအုပ်တွေကို သိမ်းဆည်းဖို့ အဆင်သင့်ဖြစ်နေပါပြီ။ Array ကို စတင်ဖန်တီးချိန်မှာ အချက်အလက်တွေကို ထည့်သွင်းထားနိုင်ပါတယ်။ သတိထားစရာအချက်များ: - Text, Numbers, ဒါမှမဟုတ် True/False Values ကို တစ်ခုတည်းသော Array ထဲမှာ သိမ်းဆည်းနိုင်ပါတယ်။ - Item တစ်ခုချင်းစီကို Comma နဲ့ ခွဲထားရုံပါပဲ - လွယ်ကူပါတယ်! - Arrays က ဆက်စပ်နေတဲ့ အချက်အလက်တွေကို စုပေါင်းထားဖို့ အကောင်းဆုံးဖြစ်ပါတယ်။ ### Array Indexing Array တွေက သူ့ထဲမှာရှိတဲ့ Item တွေကို 0 ကနေ စတင်နံပါတ်ပေးတယ်ဆိုတာ အစမှာတော့ ထူးဆန်းစရာဖြစ်နိုင်ပါတယ်။ ဒီ Zero-based Indexing က Computer Memory အလုပ်လုပ်ပုံနဲ့ ဆက်စပ်ပြီး Programming Language တွေဖြစ်တဲ့ C ကစတင်ခဲ့တဲ့ အဆင့်ဆင့်အခြေခံစနစ်တစ်ခုဖြစ်ပါတယ်။ Array ထဲမှာရှိတဲ့ Item တစ်ခုချင်းစီမှာ Index လို့ခေါ်တဲ့ နံပါတ်တစ်ခုရရှိပါတယ်။ ✅ Arrays က 0 Index ကနေ စတင်တာ အံ့ဩစရာလား? Programming Language တချို့မှာ Index တွေကို 1 ကနေ စတင်ပါတယ်။ ဒီအကြောင်းရင်းကို Wikipedia မှာ ဖတ်ရှုနိုင်ပါတယ်။ Array Element တွေကို Access လုပ်ခြင်း: ဒီမှာ ဘာတွေဖြစ်နေလဲဆိုရင်: - Square Bracket Notation ကို သုံးပြီး Index နံပါတ်နဲ့ Element တွေကို Access လုပ်ပါတယ်။ - Value ကို Array ထဲမှာရှိတဲ့ အတိအကျနေရာကနေ ပြန်ပေးပါတယ်။ - 0 ကနေ စတင် နေရာပေးတာကြောင့် ပထမ Element က Index 0 ဖြစ်ပါတယ်။ Array Element တွေကို ပြင်ဆင်ခြင်း: အထက်က ကုဒ်မှာ: - Index 4 မှာရှိတဲ့ Element ကို "Rocky Road" ကနေ "Butter Pecan" အဖြစ် ပြောင်းလဲထားပါတယ်။ - Index 5 မှာ "Cookie Dough" ဆိုတဲ့ Element အသစ်ကို ထည့်သွင်းထားပါတယ်။ - Array Length ကို အလိုအလျောက် တိုးချဲ့ထားပါတယ်။ ### Array Length နှင့် Common Methods Arrays တွေမှာ အချက်အလက်တွေကို အလွယ်တကူ ကိုင်တွယ်နိုင်စေတဲ့ Built-in Properties နဲ့ Methods တွေပါရှိပါတယ်။ Array Length ရှာဖွေခြင်း: သတိထားစရာအချက်များ: - Array ထဲမှာရှိတဲ့ Element အရေအတွက် ကို ပြန်ပေးပါတယ်။ - Element တွေကို ထည့်သွင်းခြင်း၊ ဖယ်ရှားခြင်း ပြုလုပ်တဲ့အခါမှာ အလိုအလျောက် Update လုပ်ပါတယ်။ - Loops နဲ့ Validation တွေအတွက် Dynamic Count ကို ပေးပါတယ်။ Array Methods အရေးကြီးများ: ဒီ Methods တွေကို နားလည်ပါ: - push() (အဆုံး) နဲ့ unshift() (အစ) ကို သုံးပြီး Element တွေကို ထည့်သွင်းနိုင်ပါတယ်။ - pop() (အဆုံး) နဲ့ shift() (အစ) ကို သုံးပြီး Element တွေကို ဖယ်ရှားနိုင်ပါတယ်။ - indexOf() နဲ့ includes() ကို သုံးပြီး Element တွေကို ရှာဖွေပြီး ရှိ/မရှိ စစ်ဆေးနိုင်ပါတယ်။ - ဖယ်ရှားထားတဲ့ Element တွေ ဒါမှမဟုတ် နေရာ Index တွေလို အသုံးဝင်တဲ့ Value တွေကို ပြန်ပေးပါတယ်။ ✅ Browser Console မှာ သင့်ကိုယ်ပိုင် Array တစ်ခု ဖန်တီးပြီး ကိုင်တွယ်ကြည့်ပါ။ ### 🧠 Array အခြေခံစစ်ဆေးမှု: သင့်အချက်အလက်ကို စီမံခြင်း Array နားလည်မှုကို စမ်းသပ်ပါ: - Arrays တွေက 0 ကနေ စတင်တာ ဘာကြောင့်လို့ ထင်ပါသလဲ? - Array ထဲမှာ Element 5 ခုရှိတဲ့အခါ arr[100] ကို Access လုပ်ရင် ဘာဖြစ်မလဲ? - Arrays အသုံးပြုဖို့ သင့်အနေနဲ့ အသုံးဝင်တဲ့ အခြေအနေ ၃ ခုကို စဉ်းစားနိုင်ပါသလား? ## Loops Charles Dickens ရဲ့ ဝတ္ထုတွေထဲမှာ ကျောင်းသားတွေက စာကြောင်းတွေကို ထပ်တလဲလဲ ရေးရတဲ့ အပြစ်ဒဏ်ကို စဉ်းစားပါ။ "ဒီစာကြောင်းကို ၁၀၀ ကြိမ် ရေးပါ" လို့ ပြောလိုက်ရုံနဲ့ အလိုအလျောက် ပြုလုပ်နိုင်ရင် ဘယ်လိုလဲ။ Loops က သင့်ကုဒ်အတွက် အဲဒီလို အလုပ်လုပ်ပေးပါတယ်။ Loops တွေက အလုပ်မပျက်တဲ့ အကူအညီပေးသူလိုမျိုးဖြစ်ပြီး တစ်ခုချင်းစီကို စစ်ဆေးဖို့၊ Shopping Cart ထဲမှာရှိတဲ့ Item တွေကို စစ်ဆေးဖို့၊ ဒါမှမဟုတ် Album ထဲမှာရှိတဲ့ ဓာတ်ပုံတွေကို ပြသဖို့ အလွယ်တကူ အလုပ်လုပ်ပေးပါတယ်။ JavaScript မှာ Loop အမျိုးအစားများစွာ ရွေးချယ်နိုင်ပါတယ်။ တစ်ခုချင်းစီကို လေ့လာပြီး ဘယ်အခါမှာ အသုံးပြုရမလဲဆိုတာ နားလည်ကြမယ်။ ### For Loop for loop က Timer တစ်ခုလိုမျိုးဖြစ်ပြီး ဘာကို ဘယ်နှစ်ကြိမ်လုပ်ချင်တယ်ဆိုတာ သေချာသိပါတယ်။ အလွန်စနစ်တကျနဲ့ ခန့်မှန်းနိုင်တဲ့ Loop ဖြစ်ပြီး Arrays တွေကို ကိုင်တွယ်တဲ့အခါ ဒါမှမဟုတ် အရေအတွက်ကို ရေတွက်တဲ့အခါ အကောင်းဆုံးဖြစ်ပါတယ်။ For Loop Structure: အဆင့်ဆင့် ဘာတွေဖြစ်နေလဲဆိုရင်: - Counter Variable i ကို 0 အဖြစ် စတင်သတ်မှတ်ပါတယ်။ - Condition i < 10 ကို Loop တစ်ကြိမ်စီမှာ စစ်ဆေးပါတယ်။ - Code Block ကို Condition မှန်တဲ့အခါမှာ အလုပ်လုပ်ပါတယ်။ - Increment i++ ကို Loop တစ်ကြိမ်ပြီးတိုင်း Update လုပ်ပါတယ်။ - Condition မမှန်တော့တဲ့အခါ Loop ရပ်တန့်ပါတယ်။ ✅ ဒီကုဒ်ကို Browser Console မှာ Run လုပ်ပါ။ Counter, Condition, Iteration Expression တွေကို အနည်းငယ် ပြောင်းလဲလိုက်ရင် ဘာဖြစ်မလဲဆိုတာ ကြည့်ပါ။ Loop ကို နောက်ပြန်လည်ပြီး Countdown ဖန်တီးနိုင်ပါသလား? ### 🗓️ For Loop Mastery Check: Controlled Repetition For Loop နားလည်မှုကို စမ်းသပ်ပါ: - For Loop ရဲ့ အစိတ်အပိုင်း ၃ ခုက ဘာတွေဖြစ်ပြီး တစ်ခုချင်းစီက ဘာလုပ်ပေးသလဲ? - Array ကို နောက်ပြန် Loop လုပ်ဖို့ ဘယ်လိုလုပ်မလဲ? - Increment (i++) ကို မထည့်လိုက်ရင် ဘာဖြစ်မလဲ? ### While Loop while loop က "ဒီအရာကို ဆက်လုပ်ပါ၊ အထိ..." လို့ ပြောတာလိုမျိုးဖြစ်ပြီး ဘယ်နှစ်ကြိမ် Run လုပ်မလဲဆိုတာ မသိပေမယ့် ဘယ်အချိန်ရပ်မလဲဆိုတာ သိပါတယ်။ User Input ကို လိုအပ်တဲ့အထိ မေးမြန်းခြင်း၊ ဒါမှမဟုတ် အချက်အလက်တွေကို ရှာဖွေပြီး လိုအပ်တာကို ရှာတွေ့တဲ့အထိ စစ်ဆေးခြင်းလိုမျိုးအတွက် အကောင်းဆုံးဖြစ်ပါတယ်။ While Loop Characteristics: - Condition မှန်နေသရွေ့ ဆက်လုပ်ပါတယ်။ - Counter Variable ကို Manual စီမံရပါတယ်။ - Iteration တစ်ကြိမ်စီမှာ Condition ကို စစ်ဆေးပါတယ်။ - Condition မမှန်တော့တဲ့အထိ Loop ရပ်တန့်မှာမဟုတ်လို့ Infinite Loop ဖြစ်နိုင်ပါတယ်။ ဒီဥပမာတွေကို နားလည်ပါ: - Counter Variable i ကို Loop Body ထဲမှာ Manual စီမံပါတယ်။ - Counter ကို Increment လုပ်ပြီး Infinite Loop ဖြစ်တာကို ကာကွယ်ပါတယ်။ - User Input နဲ့ Attempt Limiting ကို Practical Example အနေနဲ့ ပြသပါတယ်။ - Safety Mechanisms ပါဝင်ပြီး Endless Execution ဖြစ်တာကို ကာကွယ်ပါတယ်။ ### ♾️ While Loop Wisdom Check: Condition-Based Repetition While Loop နားလည်မှုကို စမ်းသပ်ပါ: - While Loop တွေကို အသုံးပြုတဲ့အခါ အဓိကအန္တရာယ်က ဘာလဲ? - For Loop အစား While Loop ကို ရွေးချယ်ရတဲ့အခါ ဘာအခြေအနေတွေမှာလဲ? - Infinite Loop ဖြစ်တာကို ဘယ်လို ကာကွယ်နိုင်မလဲ? ### Modern Loop Alternatives JavaScript မှာ Loop Syntax အသစ်တွေ ပါဝင်ပြီး သင့်ကုဒ်ကို ပိုမိုဖတ်ရှုရလွယ်ကူစေပြီး အမှားဖြစ်နိုင်မှုကို လျော့ကျစေပါတယ်။ For...of Loop (ES6+): For...of ရဲ့ အကျိုးကျေးဇူးများ: - Index Management ကို ဖယ်ရှားပြီး Off-by-one Errors ဖြစ်နိုင်မှုကို လျော့ကျစေပါတယ်။ - Array Element တွေကို Direct Access လုပ်နိုင်ပါတယ်။ - Code Readability ကို တိုးတက်စေပြီး Syntax ကို လျှော့ချပါတယ်။ forEach Method: forEach အကြောင်း သိထားရမယ့်အချက်များ: - Array Element တစ်ခုချင်းစီအတွက် Function ကို Execute လုပ်ပါတယ်။ - Element Value နဲ့ Index ကို Parameter အနေနဲ့ ပေးပါတယ်။ - Traditional Loops လို Early Stop လုပ်လို့မရပါဘူး။ - Undefined ကို Return လုပ်ပြီး Array အသစ်ကို မဖန်တီးပါဘူး။ ✅ For Loop နဲ့ While Loop ကို ဘာကြောင့် ရွေးချယ်ရမလဲဆိုတာ StackOverflow မှာ 17K Viewer တွေက မေးခဲ့ပါတယ်။ အဲဒီအမြင်တွေ ကို စိတ်ဝင်စားနိုင်ပါတယ်။ ### 🎨 Modern Loop Syntax Check: Embracing ES6+ Modern JavaScript နားလည်မှုကို စမ်းသပ်ပါ: - for...of ရဲ့ Traditional For Loop တွေထက် အကျိုးကျေးဇူးက ဘာလဲ? - Traditional For Loop တွေကို ဘယ်အခါမှာ သုံးသင့်သလဲ? - forEach နဲ့ map ရဲ့ ကွာခြားချက်က ဘာလ JavaScript သည် အချို့သော ခေတ်မီ Array Method များကို ပေးထားပြီး အထူးလုပ်ဆောင်ချက်များအတွက် ရိုးရိုး Loop များကို အစားထိုးနိုင်သည်။ forEach, for-of, map, filter, reduce များကို လေ့လာပါ။ သင်၏ စိန်ခေါ်မှု: ကျောင်းသားများ၏ အဆင့်များကို Refactor လုပ်ပြီး Array Method သုံးမျိုးအနည်းဆုံး အသုံးပြုပါ။ ခေတ်မီ JavaScript Syntax သုံးပြီး Code သည် အလွန်သန့်ရှင်းပြီး ဖတ်ရလွယ်ကူလာသည်ကို သတိပြုပါ။ ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study JavaScript တွင် Array များသည် Data Manipulation အတွက် အလွန်အသုံးဝင်သော Method များစွာ ပါရှိသည်။ ဒီ Method များကို ဖတ်ရှုပါ၊ သင်ဖန်တီးထားသော Array တွင် push, pop, slice, splice စသည်တို့ကို စမ်းသုံးပါ။ ## Assignment Loop an Array --- ## 📊 သင်၏ Arrays & Loops Toolkit အကျဉ်းချုပ် --- ## 🚀 သင်၏ Arrays & Loops ကျွမ်းကျင်မှု အချိန်ဇယား ### ⚡ နောက် ၅ မိနစ်အတွင်း လုပ်နိုင်သောအရာများ - [ ] သင်နှစ်သက်သော ရုပ်ရှင်များ၏ Array တစ်ခု ဖန်တီးပြီး အထူး Element များကို Access လုပ်ပါ - [ ] 1 မှ 10 အထိ ရေတွက်သော for loop တစ်ခု ရေးပါ - [ ] သင်ခန်းစာမှ ခေတ်မီ Array Method စိန်ခေါ်မှုကို စမ်းသုံးပါ - [ ] Browser Console တွင် Array Indexing ကို လေ့ကျင့်ပါ ### 🎯 ဒီတစ်နာရီအတွင်း ပြီးမြောက်နိုင်သောအရာများ - [ ] သင်ခန်းစာပြီးလျှင် Quiz ကို ပြီးမြောက်ပြီး စိန်ခေါ်မှုများကို ပြန်လည်သုံးသပ်ပါ - [ ] GitHub Copilot စိန်ခေါ်မှုမှ Comprehensive Grade Analyzer တစ်ခု တည်ဆောက်ပါ - [ ] ပစ္စည်းများ ထည့်သွင်းခြင်းနှင့် ဖယ်ရှားခြင်းလုပ်ဆောင်နိုင်သော ရိုးရှင်းသော Shopping Cart တစ်ခု ဖန်တီးပါ - [ ] Loop အမျိုးအစားများကို ပြောင်းလဲခြင်းကို လေ့ကျင့်ပါ - [ ] push, pop, slice, splice ကဲ့သို့သော Array Method များကို စမ်းသုံးပါ ### 📅 သင်၏ တစ်ပတ်တာ Data Processing ခရီး - [ ] "Loop an Array" အလုပ်ကို ဖန်တီးမှုများဖြင့် ပြီးမြောက်ပါ - [ ] Arrays နှင့် Loops အသုံးပြု၍ To-Do List Application တစ်ခု တည်ဆောက်ပါ - [ ] ကိန်းဂဏန်း Data အတွက် ရိုးရှင်းသော စာရင်းဇယား Calculator တစ်ခု ဖန်တီးပါ - [ ] MDN Array Method ကို လေ့လာပါ - [ ] ဓာတ်ပုံပြခန်း သို့မဟုတ် ဂီတ Playlist Interface တစ်ခု တည်ဆောက်ပါ - [ ] map, filter, reduce ဖြင့် Functional Programming ကို လေ့လာပါ ### 🌟 သင်၏ တစ်လတာ Transformation - [ ] ခက်ခဲသော Array လုပ်ဆောင်ချက်များနှင့် Performance Optimization ကို ကျွမ်းကျင်ပါ - [ ] အပြည့်အစုံသော Data Visualization Dashboard တစ်ခု တည်ဆောက်ပါ - [ ] Data Processing ပါဝင်သော Open Source Project များတွင် ပါဝင်ပါ - [ ] အခြေခံ ဥပမာများဖြင့် Arrays နှင့် Loops ကို တစ်စုံတစ်ဦးကို သင်ကြားပါ - [ ] အသုံးပြုနိုင်သော Data Processing Function များကို ကိုယ်ပိုင် Library တစ်ခု ဖန်တီးပါ - [ ] Arrays အပေါ် အခြေခံထားသော Algorithm နှင့် Data Structure များကို လေ့လာပါ ### 🏆 Data Processing Champion အဖြစ် နောက်ဆုံးအခြေအနေ သင်၏ Arrays နှင့် Loops ကျွမ်းကျင်မှုကို ကျေးဇူးပြု၍ ချီးမြှင့်ပါ: - အမှန်တကယ် အသုံးဝင်သော Array လုပ်ဆောင်ချက်များထဲမှ သင်လေ့လာခဲ့သော အရာများမှာ ဘာတွေလဲ? - သင်အတွက် သဘာဝကျသော Loop အမျိုးအစားက ဘာလဲ၊ အဘယ်ကြောင့်လဲ? - Arrays နှင့် Loops ကို နားလည်ခြင်းက သင်၏ Data စီမံခန့်ခွဲမှုနည်းလမ်းကို ဘယ်လိုပြောင်းလဲစေခဲ့သလဲ? - နောက်တစ်ခုမှာ သင်လုပ်ဆောင်လိုသော ခက်ခဲသော Data Processing လုပ်ငန်းက ဘာလဲ? --- အကြောင်းကြားချက်: ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု Co-op Translator ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှန်ကန်မှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရားရှိသော အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူသားပညာရှင်များမှ ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားယူမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။

javascript,array,loop

जाभास्क्रिप्टको परिचय

जाभास्क्रिप्ट वेबको भाषा हो। यी चार पाठहरूमा, तपाईं यसको आधारभूत कुराहरू सिक्नुहुनेछ। ### विषयवस्तुहरू 1. भेरिएबल्स र डाटा प्रकारहरू 2. फङ्सनहरू र मेथडहरू 3. जाभास्क्रिप्टसँग निर्णय लिनु 4. एरेहरू र लूपहरू ### श्रेय यी पाठहरू ♥️ सहित ज्यास्मिन ग्रीनअवे, क्रिस्टोफर ह्यारिसन र क्रिस नोरिङ द्वारा लेखिएका हुन्। अस्वीकरण: यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।

web,development

जाभास्क्रिप्ट आधारभूत: डाटा प्रकारहरू

डाटा प्रकारहरू जाभास्क्रिप्टको आधारभूत अवधारणाहरू मध्ये एक हो जुन तपाईंले लेख्ने प्रत्येक प्रोग्राममा भेट्नुहुनेछ। डाटा प्रकारहरूलाई अलेक्जान्ड्रिया शहरका प्राचीन पुस्तकालयका पुस्तकहरू वर्गीकरण गर्ने प्रणाली जस्तै सोच्नुहोस् – उनीहरूले कविता, गणित, र ऐतिहासिक अभिलेखहरू समेट्ने स्क्रोलहरूका लागि विशेष स्थानहरू राखेका थिए। जाभास्क्रिप्टले विभिन्न प्रकारका डाटाहरूलाई वर्गीकृत गरेर यस्तै तरिकाले जानकारी व्यवस्थित गर्दछ। यस पाठमा, हामी जाभास्क्रिप्टलाई काम गर्न बनाउने मुख्य डाटा प्रकारहरूको अन्वेषण गर्नेछौं। तपाईंले नम्बरहरू, पाठ, सत्य/झुटो मानहरू कसरी ह्यान्डल गर्ने र किन सही प्रकार चयन गर्नु महत्त्वपूर्ण छ भन्ने कुरा बुझ्नुहुनेछ। यी अवधारणाहरू सुरुमा केही जटिल लाग्न सक्छन्, तर अभ्यासले गर्दा यी स्वाभाविक हुनेछन्। डाटा प्रकारहरू बुझ्नाले जाभास्क्रिप्टको अन्य सबै कुरा धेरै स्पष्ट बनाउँछ। जस्तै वास्तुकारहरूले क्याथेड्रल निर्माण गर्नु अघि विभिन्न निर्माण सामग्रीहरू बुझ्न आवश्यक छ, यी आधारभूत कुराहरूले तपाईंले अगाडि निर्माण गर्ने सबै कुरालाई समर्थन गर्नेछ। ## पाठ अघि क्विज पाठ अघि क्विज यो पाठ जाभास्क्रिप्टको आधारभूत कुराहरू समेट्छ, जुन वेबमा अन्तरक्रियात्मकता प्रदान गर्ने भाषा हो। [](https://youtube.com/watch?v=JNIXfGiDWM8 "जाभास्क्रिप्टमा भेरिएबलहरू") [](https://youtube.com/watch?v=AWfA95eLdq8 "जाभास्क्रिप्टमा डाटा प्रकारहरू") आउनुहोस्, भेरिएबलहरू र तिनीहरूमा राखिने डाटा प्रकारहरूबाट सुरु गरौं! ## भेरिएबलहरू भेरिएबलहरू प्रोग्रामिङको आधारभूत निर्माण ब्लकहरू हुन्। जस्तै मध्यकालीन रसायनशास्त्रीहरूले विभिन्न पदार्थहरू भण्डारण गर्न लेबल गरिएको जारहरू प्रयोग गर्थे, भेरिएबलहरूले तपाईंलाई जानकारी भण्डारण गर्न र त्यसलाई पछि सन्दर्भ गर्न वर्णनात्मक नाम दिन अनुमति दिन्छ। कसैको उमेर सम्झनु छ? age नामको भेरिएबलमा राख्नुहोस्। प्रयोगकर्ताको नाम ट्र्याक गर्न चाहनुहुन्छ? userName नामको भेरिएबलमा राख्नुहोस्। हामी जाभास्क्रिप्टमा भेरिएबलहरू सिर्जना गर्ने आधुनिक दृष्टिकोणमा ध्यान केन्द्रित गर्नेछौं। यहाँ तपाईंले सिक्ने प्रविधिहरू भाषा विकास र प्रोग्रामिङ समुदायद्वारा विकसित गरिएको उत्कृष्ट अभ्यासहरूको प्रतिनिधित्व गर्दछ। भेरिएबल सिर्जना र घोषणा गर्ने निम्नलिखित सिन्ट्याक्स छ [keyword] [name]। यो दुई भागहरू मिलेर बनेको छ: - कीवर्ड। परिवर्तन गर्न सकिने भेरिएबलहरूको लागि let प्रयोग गर्नुहोस्, वा स्थिर रहने मानहरूको लागि const प्रयोग गर्नुहोस्। - भेरिएबल नाम, यो तपाईंले आफैं चयन गर्ने वर्णनात्मक नाम हो। ✅ let कीवर्ड ES6 मा परिचय गराइएको थियो र तपाईंको भेरिएबललाई _ब्लक स्कोप_ दिन्छ। let वा const प्रयोग गर्न सिफारिस गरिन्छ पुरानो var कीवर्डको सट्टा। हामी भविष्यका भागहरूमा ब्लक स्कोपहरू थप गहिरो रूपमा कभर गर्नेछौं। ### कार्य - भेरिएबलहरूसँग काम गर्ने 1. भेरिएबल घोषणा गर्नुहोस्। आउनुहोस् हाम्रो पहिलो भेरिएबल सिर्जना गरेर सुरु गरौं: ```javascript let myVariable; ``` यसले के हासिल गर्छ: - यसले जाभास्क्रिप्टलाई myVariable नामको भण्डारण स्थान सिर्जना गर्न भन्छ - जाभास्क्रिप्टले यस भेरिएबलको लागि मेमोरीमा ठाउँ छुट्याउँछ - भेरिएबल हाल कुनै मान (undefined) छैन 2. यसलाई मान दिनुहोस्। अब हाम्रो भेरिएबलमा केही राखौं: ```javascript myVariable = 123; ``` असाइनमेन्ट कसरी काम गर्छ: - = अपरेटरले हाम्रो भेरिएबललाई 123 मान असाइन गर्छ - भेरिएबलले अब यो मान समावेश गर्दछ, undefined नभई - तपाईं आफ्नो कोडमा myVariable प्रयोग गरेर यो मान सन्दर्भ गर्न सक्नुहुन्छ > नोट: यस पाठमा = को प्रयोगले "असाइनमेन्ट अपरेटर" को प्रयोगलाई जनाउँछ, जसले भेरिएबलमा मान सेट गर्न प्रयोग गरिन्छ। यसले समानता जनाउँदैन। 3. स्मार्ट तरिकाले गर्नुहोस्। वास्तवमा, आउनुहोस् ती दुई चरणहरूलाई संयोजन गरौं: ```javascript let myVariable = 123; ``` यो दृष्टिकोण अधिक प्रभावकारी छ: - तपाईं एकै वक्तव्यमा भेरिएबल घोषणा गर्दै र मान असाइन गर्दै हुनुहुन्छ - यो विकासकर्ताहरू बीचको मानक अभ्यास हो - यसले कोडको लम्बाइ घटाउँछ र स्पष्टता कायम राख्छ 4. आफ्नो विचार परिवर्तन गर्नुहोस्। यदि हामीले फरक नम्बर भण्डारण गर्न चाह्यौं भने के हुन्छ? ```javascript myVariable = 321; ``` पुनः असाइनमेन्ट बुझ्दै: - भेरिएबलले अब 123 को सट्टा 321 समावेश गर्दछ - अघिल्लो मान प्रतिस्थापित गरिएको छ – भेरिएबलहरूले एक पटकमा मात्र एक मान भण्डारण गर्छन् - यो परिवर्तनशीलता let द्वारा घोषणा गरिएको भेरिएबलहरूको मुख्य विशेषता हो ✅ प्रयास गर्नुहोस्! तपाईं आफ्नो ब्राउजरमै जाभास्क्रिप्ट लेख्न सक्नुहुन्छ। ब्राउजर विन्डो खोल्नुहोस् र डेभलपर टूल्समा जानुहोस्। कन्सोलमा तपाईंले एक प्रम्प्ट पाउनुहुनेछ; let myVariable = 123 टाइप गर्नुहोस्, रिटर्न थिच्नुहोस्, त्यसपछि myVariable टाइप गर्नुहोस्। के हुन्छ? नोट गर्नुहोस्, तपाईंले यी अवधारणाहरू थप पाठहरूमा सिक्नुहुनेछ। ### 🧠 भेरिएबल मास्टरी चेक: सहज महसुस गर्दै आउनुहोस्, भेरिएबलहरूको बारेमा तपाईं कत्तिको सहज महसुस गर्दै हुनुहुन्छ हेर्नुहोस्: - के तपाईं भेरिएबल घोषणा र असाइन गर्ने बीचको फरक व्याख्या गर्न सक्नुहुन्छ? - यदि तपाईंले भेरिएबल घोषणा गर्नु अघि प्रयोग गर्न खोज्नुभयो भने के हुन्छ? - तपाईं कहिले let को सट्टा const चयन गर्नुहुन्छ? ## स्थिरांकहरू कहिलेकाहीं तपाईंलाई प्रोग्रामको कार्यान्वयनको क्रममा कहिल्यै परिवर्तन गर्न नहुने जानकारी भण्डारण गर्न आवश्यक हुन्छ। स्थिरांकहरू प्राचीन ग्रीसका गणितीय सिद्धान्तहरू जस्तै हुन् – एकपटक प्रमाणित र दस्तावेज गरिएको, तिनीहरू भविष्यको सन्दर्भका लागि स्थिर रहन्छन्। स्थिरांकहरू भेरिएबलहरू जस्तै काम गर्छन्, तर एउटा महत्त्वपूर्ण प्रतिबन्धका साथ: एकपटक तपाईंले तिनीहरूको मान असाइन गरेपछि, यसलाई परिवर्तन गर्न सकिँदैन। यो अपरिवर्तनीयताले तपाईंको प्रोग्राममा महत्त्वपूर्ण मानहरूमा अनियन्त्रित परिवर्तनहरू रोक्न मद्दत गर्दछ। स्थिरांकको घोषणा र आरम्भ भेरिएबलको जस्तै अवधारणाहरू अनुसरण गर्दछ, const कीवर्डको अपवादको साथ। स्थिरांकहरू सामान्यतया सबै क्याप्स अक्षरहरूमा घोषणा गरिन्छ। यस कोडले के गर्छ: - सिर्जना गर्छ MY_VARIABLE नामको स्थिरांक जसको मान 123 छ - प्रयोग गर्छ स्थिरांकहरूको लागि अपरकेस नामकरण परम्परा - रोक्छ भविष्यमा यस मानमा कुनै परिवर्तन स्थिरांकहरूको दुई मुख्य नियमहरू छन्: - तपाईंले तिनीहरूलाई तुरुन्तै मान दिनुपर्छ – खाली स्थिरांकहरू अनुमति छैन! - तपाईंले कहिल्यै त्यो मान परिवर्तन गर्न सक्नुहुन्न – यदि तपाईंले प्रयास गर्नुभयो भने जाभास्क्रिप्टले त्रुटि फ्याँक्छ। आउनुहोस्, म के भन्न चाहन्छु हेर्नुहोस्: साधारण मान - निम्न अनुमति छैन: ```javascript const PI = 3; PI = 4; // अनुमति छैन ``` तपाईंले सम्झनुपर्ने कुरा: - पुनः असाइन गर्ने प्रयासहरू स्थिरांकमा त्रुटि उत्पन्न गर्छ - महत्त्वपूर्ण मानहरूलाई अनियन्त्रित परिवर्तनबाट जोगाउँछ - प्रोग्रामभरि मानलाई स्थिर राख्छ अवजेक्ट सन्दर्भ सुरक्षित छ - निम्न अनुमति छैन: ```javascript const obj = { a: 3 }; obj = { b: 5 } // अनुमति छैन ``` यी अवधारणाहरू बुझ्दै: - सम्पूर्ण वस्तु प्रतिस्थापन गर्नबाट रोक्छ - मूल वस्तुको सन्दर्भलाई सुरक्षित राख्छ - मेमोरीमा वस्तुको पहिचान कायम राख्छ अवजेक्ट मान सुरक्षित छैन - निम्न अनुमति छ: ```javascript const obj = { a: 3 }; obj.a = 5; // अनुमति छ ``` यहाँ के हुन्छ भन्ने कुरा तोड्दै: - वस्तु भित्रको सम्पत्ति मानलाई परिवर्तन गर्छ - उही वस्तु सन्दर्भ राख्छ - देखाउँछ कि वस्तु सामग्री परिवर्तन गर्न सकिन्छ जबकि सन्दर्भ स्थिर रहन्छ > नोट, const ले सन्दर्भलाई पुनः असाइनमेन्टबाट सुरक्षित राख्छ। मान _अपरिवर्तनीय_ भने होइन र परिवर्तन गर्न सकिन्छ, विशेष गरी यदि यो वस्तु जस्तो जटिल संरचना हो भने। ## डाटा प्रकारहरू जाभास्क्रिप्टले जानकारीलाई विभिन्न वर्गहरूमा व्यवस्थित गर्दछ जसलाई डाटा प्रकारहरू भनिन्छ। यो अवधारणाले प्राचीन विद्वानहरूले ज्ञान वर्गीकरण गरेको तरिकालाई प्रतिबिम्बित गर्दछ – अरिस्टोटलले विभिन्न प्रकारका तर्कहरू छुट्याए, थाहा पाएर कि तार्किक सिद्धान्तहरू कविता, गणित, र प्राकृतिक दर्शनमा समान रूपमा लागू गर्न सकिँदैन। डाटा प्रकारहरू महत्त्वपूर्ण छन् किनभने विभिन्न कार्यहरू विभिन्न प्रकारका जानकारीहरूसँग काम गर्छन्। जस्तै तपाईंले कसैको नाममा अंकगणित गर्न सक्नुहुन्न वा गणितीय समीकरणलाई वर्णमालामा राख्न सक्नुहुन्न, जाभास्क्रिप्टले प्रत्येक कार्यका लागि उपयुक्त डाटा प्रकार आवश्यक गर्दछ। यसलाई बुझ्नाले त्रुटिहरू रोक्छ र तपाईंको कोडलाई बढी भरपर्दो बनाउँछ। भेरिएबलहरूले नम्बरहरू र पाठ जस्ता विभिन्न प्रकारका मानहरू भण्डारण गर्न सक्छन्। यी विभिन्न प्रकारका मानहरूलाई डाटा प्रकार भनिन्छ। डाटा प्रकारहरू सफ्टवेयर विकासको महत्त्वपूर्ण हिस्सा हुन् किनभने यसले विकासकर्ताहरूलाई कोड कसरी लेख्नुपर्छ र सफ्टवेयर कसरी चल्नुपर्छ भन्ने निर्णय गर्न मद्दत गर्दछ। साथै, केही डाटा प्रकारहरूमा अनौठो विशेषताहरू हुन्छन् जसले मानमा थप जानकारी परिवर्तन गर्न वा निकाल्न मद्दत गर्दछ। ✅ डाटा प्रकारहरूलाई जाभास्क्रिप्ट डाटा प्रिमिटिभहरू पनि भनिन्छ, किनभने तिनीहरू भाषा द्वारा प्रदान गरिएका सबैभन्दा तल्लो स्तरका डाटा प्रकारहरू हुन्। त्यहाँ ७ प्रिमिटिभ डाटा प्रकारहरू छन्: string, number, bigint, boolean, undefined, null र symbol। यी प्रत्येक प्रिमिटिभहरूले के प्रतिनिधित्व गर्न सक्छन् भनेर कल्पना गर्न एक मिनेट समय लिनुहोस्। zebra के हो? 0 कस्तो छ? true? ### नम्बरहरू नम्बरहरू जाभास्क्रिप्टमा सबैभन्दा सरल डाटा प्रकार हुन्। तपाईं 42 जस्ता पूर्णांक, 3.14 जस्ता दशमलव, वा -5 जस्ता नकारात्मक संख्याहरूमा काम गरिरहनु भएको भए पनि, जाभास्क्रिप्टले तिनीहरूलाई समान रूपमा ह्यान्डल गर्छ। हाम्रो पहिलेको भेरिएबल सम्झनुहोस्? त्यो 123 हामीले भण्डारण गरेको वास्तवमा नम्बर डाटा प्रकार थियो: मुख्य विशेषताहरू: - जाभास्क्रिप्टले स्वचालित रूपमा संख्यात्मक मानहरू पहिचान गर्छ - तपाईं यी भेरिएबलहरूसँग गणितीय कार्यहरू गर्न सक्नुहुन्छ - कुनै स्पष्ट प्रकार घोषणा आवश्यक छैन भेरिएबलहरूले सबै प्रकारका नम्बरहरू भण्डारण गर्न सक्छन्, जसमा दशमलव वा नकारात्मक नम्बरहरू समावेश छन्। नम्बरहरू अंकगणित अपरेटरहरूसँग पनि प्रयोग गर्न सकिन्छ, जुन अर्को खण्डमा समेटिएको छ। ### अंकगणित अपरेटरहरू अंकगणित अपरेटरहरूले तपाईंलाई जाभास्क्रिप्टमा गणितीय गणना गर्न अनुमति दिन्छ। यी अपरेटरहरूले गणितज्ञहरूले शताब्दीयौंदेखि प्रयोग गरेका समान सिद्धान्तहरू अनुसरण गर्छन् – अल-ख्वारिज्मी जस्ता विद्वानहरूले विकास गरेको बीजगणितीय नोटेशनमा देखा पर्ने समान प्रतीकहरू। अपरेटरहरूले परम्परागत गणितबाट अपेक्षित रूपमा काम गर्छन्: थप्नको लागि प्लस, घटाउनको लागि माइनस, र यस्तै। अंकगणित कार्यहरू गर्दा प्रयोग गर्न सकिने अपरेटरहरूको विभिन्न प्रकारहरू छन्, र केही यहाँ सूचीबद्ध छन्: ✅ प्रयास गर्नुहोस्! आफ्नो ब्राउजरको कन्सोलमा अंकगणित कार्य प्रयास गर्नुहोस्। नतिजाले तपाईंलाई अचम्मित बनाउँछ? ### 🧮 गणित सीप जाँच: आत्मविश्वासका साथ गणना गर्दै आफ्नो अंकगणित बुझाइको परीक्षण गर्नुहोस्: - / (भाग) र % (बाकी) बीचको फरक के हो? - तपाईं अनुमान गर्न सक्नुहुन्छ कि 10 % 3 के बराबर छ? (संकेत: यो 3.33 होइन...) - किन बाँकी अपरेटर प्रोग्रामिङमा उपयोगी हुन सक्छ? ### स्ट्रिङहरू जाभास्क्रिप्टमा, पाठ्य डाटालाई स्ट्रिङको रूपमा प्रतिनिधित्व गरिन्छ। "स्ट्रिङ" शब्द अक्षरहरूलाई अनुक्रममा जोड्ने अवधारणाबाट आएको हो, जस्तै मध्यकालीन मठहरूमा लेखकहरूले शब्दहरू र वाक्यहरू बनाउन अक्षरहरू जोड्थे। स्ट्रिङहरू वेब विकासका लागि आधारभूत हुन्। वेबसाइटमा देखाइने प्रत्येक पाठ – प्रयोगकर्ता नामहरू, बटन लेबलहरू, त्रुटि सन्देशहरू, सामग्री – स्ट्रिङ डाटा रूपमा ह्यान्डल गरिन्छ। कार्यात्मक प्रयोगकर्ता इन्टरफेसहरू सिर्जना गर्न स्ट्रिङहरू बुझ्न आवश्यक छ। स्ट्रिङहरू अक्षरहरूको सेट हुन् जुन एकल वा दोहोरो उद्धरण चिन्हहरू बीचमा हुन्छन्। **यी अवध दुई वा बढी स्ट्रिङहरूलाई जोड्न, वा एकसाथ मिलाउन, + अपरेटर प्रयोग गर्नुहोस्। चरणबद्ध रूपमा, यहाँ के भइरहेको छ: - जोड्छ धेरै स्ट्रिङहरू + अपरेटर प्रयोग गरेर - पहिलो उदाहरणमा स्ट्रिङहरूलाई सिधै बिना स्पेस जोड्छ - स्पेस क्यारेक्टरहरू " " स्ट्रिङहरू बीचमा थप्छ ताकि पढ्न सजिलो होस् - विराम चिन्हहरू जस्तै कमाहरू थप्छ ताकि सही ढाँचामा बनाइयोस् ✅ किन 1 + 1 = 2 हुन्छ JavaScript मा, तर '1' + '1' = 11 हुन्छ? सोच्नुहोस्। अनि '1' + 1 को बारेमा के भन्नुहुन्छ? टेम्प्लेट लिटरलहरू स्ट्रिङहरूलाई ढाँचाबद्ध गर्ने अर्को तरिका हो, जहाँ उद्धरणको सट्टा ब्याकटिक प्रयोग गरिन्छ। कुनै पनि साधारण पाठ नभएको कुरा ${ } प्लेसहोल्डरभित्र राख्नुपर्छ। यसमा स्ट्रिङ हुन सक्ने कुनै पनि भेरिएबलहरू समावेश छन्। प्रत्येक भागलाई बुझौं: - ब्याकटिकहरू ` `` प्रयोग गर्दछ नियमित उद्धरणको सट्टा टेम्प्लेट लिटरलहरू बनाउन - ${} प्लेसहोल्डर सिन्ट्याक्स प्रयोग गरेर भेरिएबलहरू सिधै समावेश गर्दछ - स्पेसहरू र ढाँचालाई ठीक त्यस्तै जोगाउँछ जस्तो लेखिएको छ - जटिल स्ट्रिङहरू भेरिएबलहरूसँग बनाउनको लागि सफा तरिका प्रदान गर्दछ तपाईं आफ्नो ढाँचाबद्ध लक्ष्यहरू कुनै पनि विधिबाट प्राप्त गर्न सक्नुहुन्छ, तर टेम्प्लेट लिटरलहरूले कुनै पनि स्पेस र लाइन ब्रेकलाई सम्मान गर्दछ। ✅ कहिले टेम्प्लेट लिटरल प्रयोग गर्नुहुन्छ र कहिले साधारण स्ट्रिङ? ### 🔤 स्ट्रिङ मास्टरी चेक: टेक्स्ट म्यानिपुलेसन आत्मविश्वास आफ्नो स्ट्रिङ सीप मूल्यांकन गर्नुहोस्: - के तपाईं व्याख्या गर्न सक्नुहुन्छ किन '1' + '1' बराबर '11' हुन्छ 2 को सट्टा? - कुन स्ट्रिङ विधि तपाईंलाई बढी पढ्न सजिलो लाग्छ: कन्काटेनेसन वा टेम्प्लेट लिटरल? - के हुन्छ यदि तपाईं स्ट्रिङ वरिपरि उद्धरणहरू बिर्सनुहुन्छ? ### बूलियनहरू बूलियनहरू सबैभन्दा सरल डेटा रूपलाई प्रतिनिधित्व गर्छन्: तिनीहरूले केवल दुई मानहरू राख्न सक्छन् – true वा false। यो द्विपक्षीय तर्क प्रणाली १९ औं शताब्दीका गणितज्ञ जर्ज बूलको काममा आधारित छ जसले बूलियन एल्जेब्रा विकास गरे। तिनीहरूको सरलताका बाबजुद, बूलियनहरू प्रोग्राम तर्कको लागि अत्यावश्यक छन्। तिनीहरूले तपाईंको कोडलाई सर्तहरूमा आधारित निर्णय लिन सक्षम बनाउँछन् – चाहे प्रयोगकर्ता लग इन भएको छ, बटन क्लिक गरिएको छ, वा निश्चित मापदण्डहरू पूरा भएका छन्। बूलियनहरू केवल दुई मानहरू हुन सक्छन्: true वा false। बूलियनहरूले सर्तहरू पूरा हुँदा कुन लाइनको कोड चलाउनुपर्छ भन्ने निर्णय गर्न मद्दत गर्छ। धेरै अवस्थामा, अपरेटरहरू बूलियनको मान सेट गर्न मद्दत गर्छन् र तपाईं अक्सर भेरिएबलहरू आरम्भ गरिएको वा तिनीहरूको मानहरू अपरेटरको साथ अपडेट गरिएको देख्नुहुनेछ। माथिको उदाहरणमा, हामीले: - भेरिएबल सिर्जना गरेका छौं जसले बूलियन मान true भण्डारण गर्छ - बूलियन मान false भण्डारण गर्ने तरिका प्रदर्शन गरेका छौं - ठीक शब्दहरू true र false प्रयोग गरेका छौं (कुनै उद्धरण आवश्यक छैन) - यी भेरिएबलहरू सर्तात्मक कथनहरूमा प्रयोगको लागि तयार गरेका छौं ✅ कुनै भेरिएबललाई 'truthy' मान्न सकिन्छ यदि यो बूलियन true मा मूल्याङ्कन हुन्छ। रोचक कुरा, JavaScript मा, सबै मानहरू truthy हुन्छन् जबसम्म तिनीहरू falsy भनेर परिभाषित गरिएको छैन। ### 🎯 बूलियन तर्क चेक: निर्णय लिने सीप आफ्नो बूलियन बुझाइ परीक्षण गर्नुहोस्: - किन तपाईंलाई लाग्छ JavaScript मा true र false बाहेक "truthy" र "falsy" मानहरू छन्? - तपाईं अनुमान गर्न सक्नुहुन्छ कुन falsy हो: 0, "0", [], "false"? - बूलियनहरू प्रोग्राम फ्लो नियन्त्रण गर्न कसरी उपयोगी हुन सक्छन्? --- ## 📊 तपाईंको डेटा प्रकार टूलकिट सारांश ## GitHub Copilot Agent Challenge 🚀 Agent मोड प्रयोग गरेर निम्न चुनौती पूरा गर्नुहोस्: विवरण: व्यक्तिगत जानकारी प्रबन्धक बनाउनुहोस् जसले तपाईंले यस पाठमा सिकेका सबै JavaScript डेटा प्रकारहरू प्रदर्शन गर्दछ र वास्तविक संसारको डेटा परिदृश्यहरूलाई ह्यान्डल गर्दछ। प्रेरणा: एउटा JavaScript प्रोग्राम बनाउनुहोस् जसले प्रयोगकर्ता प्रोफाइल वस्तु सिर्जना गर्छ जसमा समावेश छ: व्यक्तिको नाम (स्ट्रिङ), उमेर (संख्या), विद्यार्थी स्थिति (बूलियन), मनपर्ने रंगहरूको सूची, र ठेगाना वस्तु जसमा सडक, शहर, र जिप कोड गुणहरू छन्। प्रोफाइल जानकारी प्रदर्शन गर्न र व्यक्तिगत क्षेत्रहरू अपडेट गर्न कार्यहरू समावेश गर्नुहोस्। स्ट्रिङ कन्काटेनेसन, टेम्प्लेट लिटरल, उमेरसँग गणितीय अपरेसनहरू, र विद्यार्थी स्थितिको लागि बूलियन तर्क प्रदर्शन गर्न सुनिश्चित गर्नुहोस्। agent mode को बारेमा थप जान्नुहोस्। ## 🚀 चुनौती JavaScript मा केही व्यवहारहरू छन् जसले विकासकर्ताहरूलाई चकित पार्न सक्छ। यहाँ अन्वेषण गर्नको लागि एक क्लासिक उदाहरण छ: यो तपाईंको ब्राउजर कन्सोलमा टाइप गर्नुहोस्: let age = 1; let Age = 2; age == Age र परिणाम अवलोकन गर्नुहोस्। यसले false फर्काउँछ – तपाईं किन निर्धारण गर्न सक्नुहुन्छ? यो JavaScript को धेरै व्यवहारहरू मध्ये एक हो जुन बुझ्न लायक छ। यी विचित्रताहरूको परिचितताले तपाईंलाई अधिक विश्वसनीय कोड लेख्न र समस्याहरूलाई प्रभावकारी रूपमा डिबग गर्न मद्दत गर्नेछ। ## पोस्ट-व्याख्यान क्विज पोस्ट-व्याख्यान क्विज ## समीक्षा र आत्म अध्ययन JavaScript अभ्यासहरूको यो सूची हेर्नुहोस् र एउटा प्रयास गर्नुहोस्। तपाईंले के सिक्नुभयो? ## असाइनमेन्ट डेटा प्रकार अभ्यास ## 🚀 तपाईंको JavaScript डेटा प्रकार मास्टरी टाइमलाइन ### ⚡ तपाईंले अर्को ५ मिनेटमा गर्न सक्ने कुरा - [ ] आफ्नो ब्राउजर कन्सोल खोल्नुहोस् र विभिन्न डेटा प्रकारका ३ भेरिएबलहरू सिर्जना गर्नुहोस् - [ ] चुनौती प्रयास गर्नुहोस्: let age = 1; let Age = 2; age == Age र किन false हो भनेर पत्ता लगाउनुहोस् - [ ] आफ्नो नाम र मनपर्ने नम्बरसँग स्ट्रिङ कन्काटेनेसन अभ्यास गर्नुहोस् - [ ] स्ट्रिङमा नम्बर थप्दा के हुन्छ परीक्षण गर्नुहोस् ### 🎯 तपाईंले यो घण्टामा पूरा गर्न सक्ने कुरा - [ ] पोस्ट-पाठ क्विज पूरा गर्नुहोस् र कुनै पनि भ्रमित अवधारणाहरू समीक्षा गर्नुहोस् - [ ] दुई नम्बरहरू थप्ने, घटाउने, गुणा गर्ने, र भाग गर्ने एउटा सानो क्यालकुलेटर बनाउनुहोस् - [ ] टेम्प्लेट लिटरल प्रयोग गरेर एउटा साधारण नाम ढाँचाबद्धकर्ता बनाउनुहोस् - [ ] == र === तुलना अपरेटरहरूको बीचको भिन्नता अन्वेषण गर्नुहोस् - [ ] विभिन्न डेटा प्रकारहरू बीच रूपान्तरण अभ्यास गर्नुहोस् ### 📅 तपाईंको हप्ताको JavaScript आधार - [ ] आत्मविश्वास र रचनात्मकतासँग असाइनमेन्ट पूरा गर्नुहोस् - [ ] सिकेका सबै डेटा प्रकारहरू प्रयोग गरेर व्यक्तिगत प्रोफाइल वस्तु बनाउनुहोस् - [ ] CSS-Tricks बाट JavaScript अभ्यासहरू संग अभ्यास गर्नुहोस् - [ ] बूलियन तर्क प्रयोग गरेर एउटा साधारण फारम मान्यकर्ता बनाउनुहोस् - [ ] सूची र वस्तु डेटा प्रकारहरू (आगामी पाठहरूको पूर्वावलोकन) संग प्रयोग गर्नुहोस् - [ ] JavaScript समुदायमा सामेल हुनुहोस् र डेटा प्रकारहरूको बारेमा प्रश्नहरू सोध्नुहोस् ### 🌟 तपाईंको महिनाको रूपान्तरण - [ ] ठूलो प्रोग्रामिङ परियोजनाहरूमा डेटा प्रकार ज्ञान समाहित गर्नुहोस् - [ ] वास्तविक अनुप्रयोगहरूमा प्रत्येक डेटा प्रकार कहिले र किन प्रयोग गर्ने बुझ्नुहोस् - [ ] अन्य प्रारम्भिक सिक्नेहरूलाई JavaScript आधारभूत कुरा बुझ्न मद्दत गर्नुहोस् - [ ] विभिन्न प्रकारका प्रयोगकर्ता डेटा प्रबन्ध गर्ने सानो अनुप्रयोग बनाउनुहोस् - [ ] उन्नत डेटा प्रकार अवधारणाहरू जस्तै प्रकार कोअर्सन र कडा समानता अन्वेषण गर्नुहोस् - [ ] खुला स्रोत JavaScript परियोजनाहरूमा प्रलेखन सुधारको साथ योगदान गर्नुहोस् ### 🧠 अन्तिम डेटा प्रकार मास्टरी चेक-इन तपाईंको JavaScript आधारभूत कुरा मनाउनुहोस्: - कुन डेटा प्रकारले तपाईंलाई यसको व्यवहारको सन्दर्भमा सबैभन्दा चकित बनायो? - तपाईंलाई साथीलाई भेरिएबलहरू र स्थिरांकहरू व्याख्या गर्न कति सहज महसुस हुन्छ? - JavaScript को प्रकार प्रणालीको बारेमा तपाईंले पत्ता लगाएको सबैभन्दा रोचक कुरा के हो? - यी आधारभूत कुराहरूको साथ तपाईंले निर्माण गर्न सक्ने वास्तविक अनुप्रयोग के हो? --- अस्वीकरण: यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।

web,development

जाभास्क्रिप्ट आधारभूत: मेथड्स र फङ्सन्स

## प्रि-लेक्चर क्विज प्रि-लेक्चर क्विज एकै कोड बारम्बार लेख्नु प्रोग्रामिङको सबैभन्दा सामान्य निराशाजनक पक्ष हो। फङ्सन्सले यो समस्या समाधान गर्छन् जसले कोडलाई पुनः प्रयोग गर्न मिल्ने ब्लकहरूमा प्याकेज गर्न अनुमति दिन्छ। फङ्सन्सलाई हेनरी फोर्डको असेंब्ली लाइनलाई क्रान्तिकारी बनाउने मानकीकृत भागहरू जस्तै सोच्नुहोस् – एकपटक तपाईंले भरपर्दो कम्पोनेन्ट बनाउनु भयो भने, तपाईंले यसलाई जहाँ आवश्यक छ त्यहाँ पुनः निर्माण नगरी प्रयोग गर्न सक्नुहुन्छ। फङ्सन्सले कोडका टुक्राहरूलाई एकसाथ बाँध्न अनुमति दिन्छ ताकि तपाईंले आफ्नो प्रोग्रामभरि तिनीहरूलाई पुनः प्रयोग गर्न सक्नुहुन्छ। एउटै तर्कलाई सबै ठाउँमा प्रतिलिपि गरेर टाँस्नुको सट्टा, तपाईंले एकपटक फङ्सन बनाउन सक्नुहुन्छ र जहाँ आवश्यक छ त्यहाँ कल गर्न सक्नुहुन्छ। यसले तपाईंको कोडलाई व्यवस्थित राख्छ र अपडेटहरू धेरै सजिलो बनाउँछ। यस पाठमा, तपाईंले आफ्नै फङ्सन्स कसरी बनाउने, तिनीहरूलाई जानकारी पास गर्ने, र उपयोगी परिणामहरू फिर्ता प्राप्त गर्ने सिक्नुहुनेछ। तपाईंले फङ्सन्स र मेथड्सको बीचको भिन्नता पत्ता लगाउनुहुनेछ, आधुनिक सिन्ट्याक्स दृष्टिकोणहरू सिक्नुहुनेछ, र फङ्सन्सले अन्य फङ्सन्ससँग कसरी काम गर्न सक्छन् भन्ने देख्नुहुनेछ। हामी यी अवधारणाहरू चरणबद्ध रूपमा निर्माण गर्नेछौं। [](https://youtube.com/watch?v=XgKsD6Zwvlc "मेथड्स र फङ्सन्स") ## फङ्सन्स फङ्सन भनेको एक स्व-समावेशित कोड ब्लक हो जसले विशिष्ट कार्य गर्दछ। यसले तर्कलाई समेट्छ जुन तपाईंले आवश्यक पर्दा कार्यान्वयन गर्न सक्नुहुन्छ। तपाईंको प्रोग्रामभरि एउटै कोड बारम्बार लेख्नुको सट्टा, तपाईंले यसलाई फङ्सनमा प्याकेज गर्न सक्नुहुन्छ र जहाँ आवश्यक छ त्यहाँ फङ्सन कल गर्न सक्नुहुन्छ। यसले तपाईंको कोडलाई सफा राख्छ र अपडेटहरू धेरै सजिलो बनाउँछ। कल्पना गर्नुहोस् यदि तपाईंले आफ्नो कोडबेसका २० विभिन्न स्थानहरूमा फैलिएको तर्क परिवर्तन गर्नुपर्ने चुनौती सामना गर्नुपरेको छ भने। तपाईंको फङ्सन्सलाई वर्णनात्मक नाम दिनु महत्त्वपूर्ण छ। राम्रो नाम दिइएको फङ्सनले यसको उद्देश्य स्पष्ट रूपमा सञ्चार गर्दछ – जब तपाईंले cancelTimer() देख्नुहुन्छ, तपाईंले तुरुन्तै बुझ्नुहुन्छ कि यसले के गर्छ, जस्तै स्पष्ट रूपमा लेबल गरिएको बटनले तपाईंलाई बताउँछ कि तपाईंले क्लिक गर्दा के हुनेछ। ## फङ्सन बनाउने र कल गर्ने आउनुहोस् फङ्सन कसरी बनाउने भनेर हेर्नुहोस्। सिन्ट्याक्सले एक सुसंगत ढाँचा पछ्याउँछ: यसलाई टुक्रा-टुक्रामा बुझौं: - function कीवर्डले जाभास्क्रिप्टलाई "हे, म फङ्सन बनाउँदैछु!" भन्छ। - nameOfFunction तपाईंले आफ्नो फङ्सनलाई वर्णनात्मक नाम दिने ठाउँ हो। - कोष्ठक () तपाईंले प्यारामिटरहरू थप्न सक्ने ठाउँ हो (हामी चाँडै यसमा पुग्नेछौं)। - कर्ली ब्रेसेस {}ले वास्तविक कोड समावेश गर्दछ जुन तपाईंले फङ्सन कल गर्दा चल्छ। आउनुहोस् एउटा साधारण अभिवादन फङ्सन बनाऔं र यसलाई कार्यमा हेर्नुहोस्: यो फङ्सनले "Hello, world!" कन्सोलमा प्रिन्ट गर्छ। एकपटक तपाईंले यसलाई परिभाषित गरेपछि, तपाईंले यसलाई आवश्यक पर्दा जति पटक पनि प्रयोग गर्न सक्नुहुन्छ। तपाईंको फङ्सनलाई कार्यान्वयन गर्न (वा "कल" गर्न), यसको नाम लेख्नुहोस् र त्यसपछि कोष्ठक राख्नुहोस्। जाभास्क्रिप्टले तपाईंलाई फङ्सन परिभाषित गर्नु अघि वा पछि कल गर्न अनुमति दिन्छ – जाभास्क्रिप्ट इन्जिनले कार्यान्वयन क्रमलाई ह्यान्डल गर्नेछ। जब तपाईंले यो लाइन चलाउनुहुन्छ, यसले तपाईंको displayGreeting फङ्सनभित्रको सबै कोड कार्यान्वयन गर्छ, "Hello, world!" तपाईंको ब्राउजरको कन्सोलमा देखाउँछ। तपाईंले यो फङ्सन बारम्बार कल गर्न सक्नुहुन्छ। ### 🧠 फङ्सन आधारभूत जाँच: तपाईंको पहिलो फङ्सन्स निर्माण गर्दै आउनुहोस् तपाईंको आधारभूत फङ्सन्सको बारेमा कस्तो महसुस गर्दै हुनुहुन्छ हेर्नुहोस्: - तपाईं फङ्सन परिभाषामा कर्ली ब्रेसेस {} किन प्रयोग गर्छौं भनेर व्याख्या गर्न सक्नुहुन्छ? - यदि तपाईंले displayGreeting कोष्ठक बिना लेख्नुभयो भने के हुन्छ? - तपाईंले एउटै फङ्सन बारम्बार कल गर्न किन चाहनुहुन्छ? ### फङ्सनको राम्रो अभ्यासहरू यहाँ तपाईंलाई उत्कृष्ट फङ्सन्स लेख्न मद्दत गर्ने केही सुझावहरू छन्: - तपाईंको फङ्सन्सलाई स्पष्ट, वर्णनात्मक नाम दिनुहोस् – तपाईंको भविष्यको स्वयम्ले तपाईंलाई धन्यवाद दिनेछ! - बहु-शब्द नामहरूको लागि camelCasing प्रयोग गर्नुहोस् (जस्तै calculateTotal को सट्टा calculate_total) - प्रत्येक फङ्सनलाई एक काम राम्रोसँग गर्न केन्द्रित राख्नुहोस् ## फङ्सनमा जानकारी पास गर्दै हाम्रो displayGreeting फङ्सन सीमित छ – यसले सबैका लागि "Hello, world!" मात्र देखाउन सक्छ। प्यारामिटरहरूले फङ्सन्सलाई अझ लचिलो र उपयोगी बनाउँछन्। प्यारामिटरहरू प्लेसहोल्डर जस्तै काम गर्छन् जहाँ तपाईंले प्रत्येक पटक फङ्सन प्रयोग गर्दा विभिन्न मानहरू राख्न सक्नुहुन्छ। यसरी, एउटै फङ्सनले प्रत्येक कलमा विभिन्न जानकारीसँग काम गर्न सक्छ। तपाईंले फङ्सन परिभाषा गर्दा कोष्ठकभित्र प्यारामिटरहरूको सूची बनाउनुहुन्छ, धेरै प्यारामिटरहरूलाई कमासँग छुट्याउनुहोस्: प्रत्येक प्यारामिटर प्लेसहोल्डर जस्तै काम गर्छ – जब कसैले तपाईंको फङ्सन कल गर्छ, तिनीहरूले वास्तविक मानहरू प्रदान गर्नेछन् जुन यी स्थानहरूमा प्लग गरिन्छ। आउनुहोस् हाम्रो अभिवादन फङ्सनलाई कसैको नाम स्वीकार गर्न अद्यावधिक गरौं: ध्यान दिनुहोस् हामीले कसरी ब्याकटिक्स (` `) र ${}` प्रयोग गरेर नामलाई सन्देशमा सिधै राख्दैछौं – यसलाई टेम्प्लेट लिटरल भनिन्छ, र यो चरहरूसँग मिसिएको स्ट्रिङहरू निर्माण गर्नको लागि धेरै उपयोगी तरिका हो। अब जब हामीले हाम्रो फङ्सन कल गर्छौं, हामीले कुनै पनि नाम पास गर्न सक्छौं: जाभास्क्रिप्टले स्ट्रिङ 'Christopher' लिन्छ, यसलाई name प्यारामिटरमा असाइन गर्छ, र व्यक्तिगत सन्देश "Hello, Christopher!" बनाउँछ। ## डिफल्ट मानहरू यदि हामीले केही प्यारामिटरहरू वैकल्पिक बनाउन चाह्यौं भने के हुन्छ? त्यहाँ डिफल्ट मानहरू उपयोगी हुन्छन्! मानौं हामी चाहन्छौं कि मानिसहरूले अभिवादन शब्दलाई अनुकूलित गर्न सकून्, तर यदि तिनीहरूले कुनै निर्दिष्ट गरेनन् भने, हामीले "Hello" लाई ब्याकअपको रूपमा प्रयोग गर्नेछौं। तपाईंले डिफल्ट मानहरू सेट गर्न सक्नुहुन्छ बराबर चिन्ह प्रयोग गरेर, ठीक चर सेट गरेजस्तै: यहाँ, name अझै आवश्यक छ, तर salutation को ब्याकअप मान 'Hello' छ यदि कसैले फरक अभिवादन प्रदान गरेन भने। अब हामीले यो फङ्सनलाई दुई फरक तरिकामा कल गर्न सक्छौं: पहिलो कलमा, जाभास्क्रिप्टले डिफल्ट "Hello" प्रयोग गर्छ किनभने हामीले कुनै सल्युटेसन निर्दिष्ट गरेका छैनौं। दोस्रो कलमा, यसले हाम्रो अनुकूलित "Hi" प्रयोग गर्छ। यो लचकताले फङ्सन्सलाई विभिन्न परिदृश्यहरूमा अनुकूल बनाउँछ। ### 🎛️ प्यारामिटर मास्टरी जाँच: फङ्सन्सलाई लचिलो बनाउँदै तपाईंको प्यारामिटर बुझाइ जाँच गर्नुहोस्: - प्यारामिटर र आर्गुमेन्टको बीचको भिन्नता के हो? - वास्तविक संसारको प्रोग्रामिङमा डिफल्ट मानहरू किन उपयोगी छन्? - यदि तपाईंले प्यारामिटरभन्दा बढी आर्गुमेन्ट पास गर्नुभयो भने के हुन्छ भनेर अनुमान गर्न सक्नुहुन्छ? ## फिर्ता मानहरू हाम्रो फङ्सन्सले अहिलेसम्म कन्सोलमा सन्देशहरू मात्र प्रिन्ट गर्दै आएका छन्, तर यदि तपाईंले फङ्सनलाई केही गणना गर्न र परिणाम फिर्ता दिन चाहनुभयो भने के हुन्छ? त्यहाँ फिर्ता मानहरू आउँछन्। केही देखाउने सट्टा, फङ्सनले तपाईंलाई एउटा मान फिर्ता दिन सक्छ जुन तपाईंले चरमा भण्डारण गर्न वा तपाईंको कोडका अन्य भागहरूमा प्रयोग गर्न सक्नुहुन्छ। मान फिर्ता पठाउन, तपाईंले return कीवर्ड प्रयोग गर्नुहुन्छ र त्यसपछि तपाईंले फिर्ता दिन चाहेको कुरा: यहाँ महत्त्वपूर्ण कुरा छ: जब फङ्सनले return स्टेटमेन्टलाई हिट गर्छ, यसले तुरुन्तै चल्न बन्द गर्छ र त्यो मानलाई फङ्सन कल गर्ने व्यक्तिलाई फिर्ता पठाउँछ। आउनुहोस् हाम्रो अभिवादन फङ्सनलाई सन्देश प्रिन्ट गर्ने सट्टा सन्देश फिर्ता दिन संशोधित गरौं: अब यो फङ्सनले अभिवादन प्रिन्ट गर्ने सट्टा सन्देश बनाउँछ र हामीलाई फिर्ता दिन्छ। फिर्ता गरिएको मान प्रयोग गर्न, हामीले यसलाई अन्य कुनै पनि मान जस्तै चरमा भण्डारण गर्न सक्छौं: अब greetingMessageमा "Hello, Christopher" छ र हामीले यसलाई हाम्रो कोडमा जहाँ पनि प्रयोग गर्न सक्छौं – वेबपेजमा देखाउन, इमेलमा समावेश गर्न, वा अर्को फङ्सनमा पास गर्न। ### 🔄 फिर्ता मान जाँच: परिणामहरू फिर्ता प्राप्त गर्दै तपाईंको फिर्ता मान बुझाइ मूल्याङ्कन गर्नुहोस्: - फङ्सनमा return स्टेटमेन्टपछि कोडमा के हुन्छ? - कन्सोलमा मात्र प्रिन्ट गर्ने सट्टा मान फिर्ता गर्नु किन राम्रो हो? - के फङ्सनले विभिन्न प्रकारका मानहरू (स्ट्रिङ, नम्बर, बूलियन) फिर्ता गर्न सक्छ? ## फङ्सन्सलाई फङ्सन्सका प्यारामिटरको रूपमा प्रयोग गर्दै फङ्सन्सलाई अन्य फङ्सन्सका प्यारामिटरको रूपमा पास गर्न सकिन्छ। यो अवधारणा सुरुमा जटिल लाग्न सक्छ, तर यो एक शक्तिशाली सुविधा हो जसले लचिलो प्रोग्रामिङ ढाँचाहरू सक्षम बनाउँछ। यो ढाँचा धेरै सामान्य छ जब तपाईं भन्न चाहनुहुन्छ "केही हुन्छ भने, यो अर्को कुरा गर।" उदाहरणका लागि, "जब टाइमर समाप्त हुन्छ, यो कोड चलाउनुहोस्" वा "जब प्रयोगकर्ताले बटन क्लिक गर्छ, यो फङ्सन कल गर्नुहोस्।" आउनुहोस् setTimeout हेर्नुहोस्, जुन एक बिल्ट-इन फङ्सन हो जसले निश्चित समय पर्खन्छ र त्यसपछि केही कोड चलाउँछ। हामीले यसलाई के कोड चलाउने बताउनुपर्छ – फङ्सन पास गर्नको लागि उत्तम प्रयोग केस! यो कोड प्रयास गर्नुहोस् – ३ सेकेन्डपछि, तपाईंले सन्देश देख्नुहुनेछ: ध्यान दिनुहोस् हामीले displayDone (कोष्ठक बिना) setTimeoutमा पास गर्दैछौं। हामी आफैंले फङ्सन कल गर्दै छैनौं – हामी यसलाई setTimeoutमा हस्तान्तरण गर्दैछौं र भनिरहेका छौं "यो ३ सेकेन्डमा कल गर्नुहोस्।" ### अनाम फङ्सन्स कहिलेकाहीं तपाईंलाई केवल एक पटकको लागि फङ्सन चाहिन्छ र यसलाई नाम दिन चाहनुहुन्न। सोच्नुहोस् – यदि तपाईंले फङ्सनलाई मात्र एक पटक प्रयोग गर्नुपर्छ भने, किन आफ्नो कोडलाई अतिरिक्त नामले भरमग्दुर बनाउनुहोस्? जाभास्क्रिप्टले तपाईंलाई अनाम फङ्सन्स बनाउन अनुमति दिन्छ – नाम बिना फङ्सन्स जुन तपाईंले जहाँ आवश्यक छ त्यही परिभाषित गर्न सक्नुहुन्छ। यहाँ हामीले हाम्रो टाइमर उदाहरणलाई अनाम फङ्सन प्रयोग गरेर पुनः लेख्न सक्छौं: यसले उस्तै परिणाम प्राप्त गर्छ, तर फङ्सन setTimeout कलभित्रै परिभाषित गरिएको छ, अलग फङ्सन घोषणा आवश्यक छैन। ### फ्याट एरो फङ्सन्स आधुनिक जाभास्क्रिप्टमा फङ्सन्स लेख्न अझ छोटो तरिका छ जसलाई एरो फङ्सन्स भनिन्छ। तिनीहरूले => प्रयोग गर्छन् (जसले एरो जस्तो देखिन्छ – बुझ्नुभयो?) र डेभलपर्ससँग धेरै लोकप्रिय छन्। एरो फङ्सन्सले तपाईंलाई function कीवर्ड छोड्न र अधिक संक्षिप्त कोड लेख्न अनुमति दिन्छ। यहाँ हाम्रो टाइमर उदाहरण एरो फङ्सन प्रयोग गरेर: () प्यारामिटरहरू जाने ठाउँ हो (यो केसमा खाली), त्यसपछि एरो => आउँछ, र अन्तमा कर्ली ब्रेसेसमा फङ्सन बडी। यसले उस्तै कार्यक्षमता प्रदान गर्दछ अधिक संक्षिप्त सिन्ट्याक्ससँग। ### प्रत्येक रणनीति कहिले प्रयोग गर्ने तपाईंले प्रत्येक दृष्टिकोण कहिले प्रयोग गर्नुपर्छ? व्यावहारिक दिशानिर्देश: यदि तपाईंले फङ्सनलाई धेरै पटक प्रयोग गर्नुहुनेछ भने, यसलाई नाम दिनुहोस् र अलग रूपमा परिभाषित गर्नुहोस्। यदि यो एक विशिष्ट प्रयोगको लागि हो भने, अनाम फङ्सन विचार गर्नुहोस्। एरो फङ्सन्स र परम्परागत सिन्ट्याक्स दुवै मान्य विकल्पहरू हुन्, यद्यपि एरो फङ्सन्स आधुनिक जाभास्क्रिप्ट कोडबेसहरूमा प्रचलित छन्। ### 🎨 फङ्सन शैली मास्टरी जाँच: सही सिन्ट्याक्स चयन गर्दै तपाईंको सिन्ट्याक्स बुझाइ जाँच गर्नुहोस्: - तपाईंले परम्परागत फङ्सन सिन्ट्याक्सको सट्टा एरो फङ्सन्स कहिले प्राथमिकता दिनुहुन्छ? - अनाम फङ्सन्सको मुख्य फाइदा के हो? - तपाईंले अनाम फङ्सनभन्दा नाम दिइएको फङ्सन राम्रो हुने स्थिति सोच्न सक्नुहुन्छ? - [ ] परम्परागत फङ्सनलाई एरो फङ्सन सिन्ट्याक्समा परिवर्तन गर्ने प्रयास गर्नुहोस् - [ ] चुनौती अभ्यास गर्नुहोस्: फङ्सन र मेथडको बीचको फरक व्याख्या गर्नुहोस् ### 🎯 यो घण्टामा तपाईंले के हासिल गर्न सक्नुहुन्छ - [ ] पाठपछिको क्विज पूरा गर्नुहोस् र कुनै पनि भ्रमित अवधारणाहरू समीक्षा गर्नुहोस् - [ ] GitHub Copilot चुनौतीबाट गणित उपयोगिता पुस्तकालय निर्माण गर्नुहोस् - [ ] अर्को फङ्सनलाई प्यारामिटरको रूपमा प्रयोग गर्ने फङ्सन सिर्जना गर्नुहोस् - [ ] डिफल्ट प्यारामिटरहरू सहित फङ्सन लेख्ने अभ्यास गर्नुहोस् - [ ] फङ्सनको रिटर्न मानहरूमा टेम्प्लेट लिटरल्स प्रयोग गरेर प्रयोग गर्नुहोस् ### 📅 तपाईंको हप्ताभरि फङ्सन मास्टरी - [ ] "Fun with Functions" असाइनमेन्ट सिर्जनात्मकतासँग पूरा गर्नुहोस् - [ ] तपाईंले लेखेको दोहोरिएको कोडलाई पुन: प्रयोग गर्न मिल्ने फङ्सनहरूमा सुधार गर्नुहोस् - [ ] केवल फङ्सनहरू प्रयोग गरेर सानो क्यालकुलेटर निर्माण गर्नुहोस् (कुनै ग्लोबल भेरिएबलहरू प्रयोग नगरी) - [ ] map() र filter() जस्ता एरो फङ्सनहरू अभ्यास गर्नुहोस् - [ ] सामान्य कार्यहरूको लागि उपयोगिता फङ्सनहरूको संग्रह सिर्जना गर्नुहोस् - [ ] उच्च-स्तरीय फङ्सनहरू र फङ्सनल प्रोग्रामिङ अवधारणाहरू अध्ययन गर्नुहोस् ### 🌟 तपाईंको महिनाभरि रूपान्तरण - [ ] क्लोजर र स्कोप जस्ता उन्नत फङ्सन अवधारणाहरूमा महारत हासिल गर्नुहोस् - [ ] फङ्सन कम्पोजिसनलाई व्यापक रूपमा प्रयोग गर्ने परियोजना निर्माण गर्नुहोस् - [ ] फङ्सन डकुमेन्टेसन सुधार गरेर ओपन सोर्समा योगदान गर्नुहोस् - [ ] कसैलाई फङ्सन र विभिन्न सिन्ट्याक्स शैलीहरूको बारेमा सिकाउनुहोस् - [ ] JavaScript मा फङ्सनल प्रोग्रामिङ पद्धतिहरू अन्वेषण गर्नुहोस् - [ ] भविष्यका परियोजनाहरूको लागि पुन: प्रयोग गर्न मिल्ने फङ्सनहरूको व्यक्तिगत पुस्तकालय सिर्जना गर्नुहोस् ### 🏆 अन्तिम फङ्सन च्याम्पियन चेक-इन तपाईंको फङ्सन मास्टरीको उत्सव मनाउनुहोस्: - अहिलेसम्म तपाईंले सिर्जना गरेको सबैभन्दा उपयोगी फङ्सन के हो? - फङ्सनको बारेमा सिक्दा कोड संगठनको बारेमा तपाईंको सोच कसरी परिवर्तन भयो? - तपाईं कुन फङ्सन सिन्ट्याक्सलाई प्राथमिकता दिनुहुन्छ र किन? - तपाईं कुन वास्तविक समस्या फङ्सन लेखेर समाधान गर्नुहुन्छ? --- अस्वीकरण: यो दस्तावेज AI अनुवाद सेवा Co-op Translator प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेजलाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।

web,development

जाभास्क्रिप्ट आधारभूत: निर्णय लिनु

के तपाईंले कहिल्यै सोच्नुभएको छ कि एप्लिकेसनहरूले कसरी स्मार्ट निर्णय लिन्छन्? जस्तै, नेभिगेसन प्रणालीले छिटो मार्ग कसरी चयन गर्छ, वा थर्मोस्टेटले तापक्रम कहिले चालु गर्ने निर्णय कसरी गर्छ? यो प्रोग्रामिङमा निर्णय लिने आधारभूत अवधारणा हो। जस्तै चार्ल्स बबेजको एनालिटिकल इन्जिन विभिन्न सर्तहरूमा आधारित अपरेशनहरूको क्रम अनुसरण गर्न डिजाइन गरिएको थियो, आधुनिक जाभास्क्रिप्ट प्रोग्रामहरूले विभिन्न परिस्थितिमा आधारित निर्णय लिन आवश्यक छ। यो शाखा बनाउने र निर्णय लिने क्षमता स्थिर कोडलाई प्रतिक्रियाशील, बौद्धिक एप्लिकेसनमा रूपान्तरण गर्ने हो। यस पाठमा, तपाईंले आफ्नो प्रोग्रामहरूमा सर्तात्मक तर्क कार्यान्वयन गर्न सिक्नुहुनेछ। हामी सर्तात्मक कथनहरू, तुलना अपरेटरहरू, र तार्किक अभिव्यक्तिहरू अन्वेषण गर्नेछौं जसले तपाईंको कोडलाई परिस्थितिहरू मूल्याङ्कन गर्न र उपयुक्त रूपमा प्रतिक्रिया दिन अनुमति दिन्छ। ## प्रि-लेक्चर क्विज प्रि-लेक्चर क्विज निर्णय लिनु र प्रोग्रामको प्रवाह नियन्त्रण गर्नु प्रोग्रामिङको आधारभूत पक्ष हो। यो खण्डले तपाईंको जाभास्क्रिप्ट प्रोग्रामहरूको कार्यान्वयन मार्गलाई बूलियन मानहरू र सर्तात्मक तर्क प्रयोग गरेर कसरी नियन्त्रण गर्ने भन्ने कुरा समेट्छ। [](https://youtube.com/watch?v=SxTp8j-fMMY "निर्णय लिनु") ## बूलियनको संक्षिप्त पुनरावलोकन निर्णय लिने कुरा अन्वेषण गर्नु अघि, हाम्रो अघिल्लो पाठबाट बूलियन मानहरूलाई पुनरावलोकन गरौं। गणितज्ञ जर्ज बूलको नाममा राखिएको, यी मानहरूले द्विआधारी अवस्था प्रतिनिधित्व गर्छन् – true वा false। कुनै अस्पष्टता छैन, कुनै बीचको अवस्था छैन। यी द्विआधारी मानहरूले सबै कम्प्युटेशनल तर्कको आधार बनाउँछन्। तपाईंको प्रोग्रामले गर्ने प्रत्येक निर्णय अन्ततः बूलियन मूल्याङ्कनमा घट्छ। बूलियन भेरिएबलहरू सिर्जना गर्नु सरल छ: यसले स्पष्ट बूलियन मानहरू भएका दुई भेरिएबलहरू सिर्जना गर्छ। ✅ बूलियनहरू अंग्रेजी गणितज्ञ, दार्शनिक र तर्कशास्त्री जर्ज बूल (1815–1864) को नाममा राखिएको हो। ## तुलना अपरेटरहरू र बूलियनहरू व्यवहारमा, तपाईंले बूलियन मानहरू म्यानुअल रूपमा सेट गर्न विरलै गर्नुहुन्छ। यसको सट्टा, तपाईंले सर्तहरू मूल्याङ्कन गरेर तिनीहरूलाई उत्पन्न गर्नुहुन्छ: "के यो संख्या त्यो भन्दा ठूलो छ?" वा "के यी मानहरू बराबर छन्?" तुलना अपरेटरहरूले यी मूल्याङ्कनहरू सक्षम बनाउँछन्। तिनीहरूले मानहरू तुलना गर्छन् र अपरेन्डहरू बीचको सम्बन्धको आधारमा बूलियन परिणामहरू फर्काउँछन्। ✅ आफ्नो ज्ञान जाँच गर्न ब्राउजरको कन्सोलमा केही तुलना लेख्नुहोस्। के कुनै फर्काइएको डाटाले तपाईंलाई अचम्मित बनाउँछ? ### 🧠 तुलना तर्कको महारत जाँच: बूलियन तर्क बुझ्न तपाईंको तुलना बुझाइ जाँच गर्नुहोस्: - किन === (सख्त समानता) सामान्यतया == (ढिलो समानता) भन्दा बढी प्राथमिकता दिइन्छ? - के तपाईं अनुमान गर्न सक्नुहुन्छ 5 === '5' के फर्काउँछ? 5 == '5' के हुन्छ? - !== र != बीचको फरक के हो? ## If Statement if कथन तपाईंको कोडमा प्रश्न सोध्ने जस्तै हो। "यदि यो सर्त सत्य हो भने, यो काम गर।" यो सम्भवतः जाभास्क्रिप्टमा निर्णय लिनको लागि तपाईंले प्रयोग गर्ने सबैभन्दा महत्त्वपूर्ण उपकरण हो। यसले कसरी काम गर्छ: सर्त कोष्ठकभित्र जान्छ, र यदि यो true हो भने, जाभास्क्रिप्टले कर्ली ब्रेसेसभित्रको कोड चलाउँछ। यदि यो false हो भने, जाभास्क्रिप्टले त्यो सम्पूर्ण ब्लकलाई छोड्छ। तपाईंले यी सर्तहरू सिर्जना गर्न अक्सर तुलना अपरेटरहरू प्रयोग गर्नुहुनेछ। व्यावहारिक उदाहरण हेरौं: किनभने 1000 >= 800 true मा मूल्याङ्कन हुन्छ, ब्लकभित्रको कोड कार्यान्वयन हुन्छ, कन्सोलमा "नयाँ ल्यापटप प्राप्त गर्दैछु!" देखाउँछ। ## If..Else Statement तर यदि तपाईं चाहनुहुन्छ कि तपाईंको प्रोग्रामले सर्त गलत हुँदा केही फरक काम गरोस् भने के गर्ने? त्यहाँ else आउँछ – यो जस्तै हो कि "यदि यो सर्त सत्य छैन भने, यसको सट्टा यो अर्को काम गर।" else कथनले तपाईंलाई भन्नको लागि एक तरिका दिन्छ "यदि यो सर्त सत्य छैन भने, यसको सट्टा यो अर्को काम गर।" अब किनभने 500 >= 800 false हो, जाभास्क्रिप्टले पहिलो ब्लकलाई छोड्छ र else ब्लक चलाउँछ। तपाईं कन्सोलमा "अहिलेसम्म नयाँ ल्यापटप किन्न सक्दिन!" देख्नुहुनेछ। ✅ ब्राउजर कन्सोलमा यो कोड र तलको कोड चलाएर आफ्नो बुझाइ जाँच गर्नुहोस्। currentMoney र laptopPrice भेरिएबलहरूको मान परिवर्तन गरेर फर्काइएको console.log() परिवर्तन गर्नुहोस्। ### 🎯 If-Else तर्क जाँच: शाखा मार्गहरू तपाईंको सर्तात्मक तर्क बुझाइ मूल्याङ्कन गर्नुहोस्: - के हुन्छ यदि currentMoney ठीक laptopPrice बराबर छ भने? - के तपाईं वास्तविक जीवनको परिदृश्य सोच्न सक्नुहुन्छ जहाँ if-else तर्क उपयोगी हुनेछ? - तपाईं यसलाई कसरी विस्तार गर्न सक्नुहुन्छ धेरै मूल्य दायराहरू सम्हाल्न? ## Switch Statement कहिलेकाहीं तपाईंले एक मानलाई धेरै विकल्पहरूसँग तुलना गर्न आवश्यक पर्न सक्छ। जबकि तपाईंले धेरै if..else कथनहरू श्रृंखला बनाउन सक्नुहुन्छ, यो दृष्टिकोण असुविधाजनक हुन्छ। switch कथनले धेरै छुट्टै मानहरू सम्हाल्न सफा संरचना प्रदान गर्दछ। यो अवधारणा प्रारम्भिक टेलिफोन एक्सचेन्जहरूमा प्रयोग गरिएका मेकानिकल स्विचिङ प्रणालीसँग मिल्दोजुल्दो छ – एक इनपुट मानले कार्यान्वयनले कुन विशिष्ट मार्ग अनुसरण गर्ने निर्धारण गर्छ। यसको संरचना यस प्रकार छ: - जाभास्क्रिप्टले अभिव्यक्तिलाई एकपटक मूल्याङ्कन गर्छ - यसले प्रत्येक case हेर्छ र मिल्दो खोज्छ - जब यसले मिल्दो भेट्छ, यसले त्यो कोड ब्लक चलाउँछ - break ले जाभास्क्रिप्टलाई रोक्न र switch बाट बाहिर जान भन्छ - यदि कुनै केसहरू मिल्दैनन् भने, यसले default ब्लक चलाउँछ (यदि तपाईंसँग छ भने) यस उदाहरणमा, जाभास्क्रिप्टले देख्छ कि dayNumber 2 हो, मिल्दो case 2 भेट्छ, dayName लाई "Tuesday" मा सेट गर्छ, र त्यसपछि switch बाट बाहिर निस्कन्छ। परिणाम? "आज मंगलवार हो" कन्सोलमा देखिन्छ। ✅ आफ्नो बुझाइ जाँच गर्न ब्राउजरको कन्सोलमा यो कोड र तलको कोड चलाउनुहोस्। भेरिएबल a को मान परिवर्तन गरेर फर्काइएको console.log() परिवर्तन गर्नुहोस्। ### 🔄 Switch Statement महारत: धेरै विकल्पहरू तपाईंको switch बुझाइ जाँच गर्नुहोस्: - के हुन्छ यदि तपाईंले break कथन बिर्सनुभयो भने? - तपाईंले कहिले switch प्रयोग गर्नुहुन्छ धेरै if-else कथनहरूको सट्टा? - किन default केस उपयोगी छ, तपाईंले सबै सम्भावनाहरू समेटेको सोच्दा पनि? ## तार्किक अपरेटरहरू र बूलियनहरू जटिल निर्णयहरूले प्रायः एकै समयमा धेरै सर्तहरू मूल्याङ्कन गर्न आवश्यक हुन्छ। जस्तै बूलियन बीजगणितले गणितज्ञहरूलाई तार्किक अभिव्यक्तिहरू संयोजन गर्न अनुमति दिन्छ, प्रोग्रामिङले धेरै बूलियन सर्तहरू जोड्न तार्किक अपरेटरहरू प्रदान गर्दछ। यी अपरेटरहरूले सरल सत्य/झुटो मूल्याङ्कनहरू संयोजन गरेर परिष्कृत सर्तात्मक तर्क सक्षम बनाउँछन्। यी अपरेटरहरूले सर्तहरू उपयोगी तरिकामा संयोजन गर्न अनुमति दिन्छ: - AND (&&) को अर्थ दुवै सर्तहरू सत्य हुनुपर्छ - OR (||) को अर्थ कम्तीमा एक सर्त सत्य हुनुपर्छ - NOT (!) सत्यलाई झुटोमा (र विपरीत) परिवर्तन गर्छ ## तार्किक अपरेटरहरूसँग सर्तहरू र निर्णयहरू आउनुहोस् यी तार्किक अपरेटरहरूलाई थप यथार्थपरक उदाहरणमा प्रयोग गरौं: यस उदाहरणमा: हामी २०% छुट मूल्य (६४०) गणना गर्छौं, त्यसपछि मूल्याङ्कन गर्छौं कि हाम्रो उपलब्ध रकमले पूर्ण मूल्य वा छुट मूल्य किन्न सक्छ। किनभने ६०० छुट मूल्यको सीमा ६४० पूरा गर्छ, सर्त सत्यमा मूल्याङ्कन हुन्छ। ### 🧮 तार्किक अपरेटर जाँच: सर्तहरू संयोजन गर्नु तपाईंको तार्किक अपरेटर बुझाइ जाँच गर्नुहोस्: - अभिव्यक्तिमा A && B, के हुन्छ यदि A झुटो छ भने? के B पनि मूल्याङ्कन हुन्छ? - के तपाईं यस्तो स्थिति सोच्न सक्नुहुन्छ जहाँ तपाईंलाई तीनवटा अपरेटर (&&, ||, !) सँगै आवश्यक पर्छ? - !user.isActive र user.isActive !== true बीचको फरक के हो? ### नकारात्मक अपरेटर कहिलेकाहीं केहि सत्य छैन भने सोच्नु सजिलो हुन्छ। जस्तै "प्रयोगकर्ता लगइन छ?" सोध्नुको सट्टा, तपाईं "प्रयोगकर्ता लगइन छैन?" सोध्न चाहनुहुन्छ। विस्मयादिबोधक चिन्ह (!) अपरेटरले तपाईंको लागि तर्क उल्टाउँछ। ! अपरेटर "विपरीत..." भन्ने जस्तै हो – यदि केहि true छ भने, ! यसलाई false बनाउँछ, र विपरीत। ### टर्नरी अभिव्यक्तिहरू सरल सर्तात्मक असाइनमेन्टहरूको लागि, जाभास्क्रिप्टले टर्नरी अपरेटर प्रदान गर्दछ। यो संक्षिप्त वाक्यविन्यासले तपाईंलाई एकल लाइनमा सर्तात्मक अभिव्यक्ति लेख्न अनुमति दिन्छ, जब तपाईंलाई सर्तको आधारमा दुई मानहरू मध्ये एक असाइन गर्न आवश्यक हुन्छ। यो प्रश्न जस्तै पढिन्छ: "के यो सर्त सत्य हो? यदि हो भने, यो मान प्रयोग गर्नुहोस्। यदि होइन भने, त्यो मान प्रयोग गर्नुहोस्।" तल एक थप ठोस उदाहरण छ: ✅ यो कोडलाई केही पटक पढ्न समय लिनुहोस्। के तपाईं बुझ्न सक्नुहुन्छ कि यी अपरेटरहरू कसरी काम गरिरहेका छन्? यो लाइनले के भन्छ: "के firstNumber secondNumber भन्दा ठूलो छ? यदि हो भने, firstNumber लाई biggestNumber मा राख्नुहोस्। यदि होइन भने, secondNumber लाई biggestNumber मा राख्नुहोस्।" टर्नरी अपरेटरले यो परम्परागत if..else कथन लेख्न छोटो तरिका मात्र हो: दुबै दृष्टिकोणहरूले समान परिणाम उत्पादन गर्छन्। टर्नरी अपरेटरले संक्षिप्तता प्रदान गर्दछ, जबकि परम्परागत if-else संरचना जटिल सर्तहरूको लागि बढी पढ्न योग्य हुन सक्छ। --- ## 🚀 चुनौती पहिले तार्किक अपरेटरहरू प्रयोग गरेर लेखिएको प्रोग्राम सिर्जना गर्नुहोस्, र त्यसपछि यसलाई टर्नरी अभिव्यक्तिको प्रयोग गरेर पुनःलेख्नुहोस्। तपाईंको मनपर्ने वाक्यविन्यास के हो? --- ## GitHub Copilot Agent चुनौती 🚀 Agent मोड प्रयोग गरेर निम्न चुनौती पूरा गर्नुहोस्: विवरण: यस पाठबाट धेरै निर्णय लिने अवधारणाहरू प्रदर्शन गर्ने व्यापक ग्रेड क्यालकुलेटर सिर्जना गर्नुहोस्, जसमा if-else कथनहरू, switch कथनहरू, तार्किक अपरेटरहरू, र टर्नरी अभिव्यक्तिहरू समावेश छन्। प्रोम्प्ट: जाभास्क्रिप्ट प्रोग्राम लेख्नुहोस् जसले विद्यार्थीको संख्यात्मक स्कोर (0-100) लिन्छ र निम्न माप २. विद्यार्थी पास हुन्छ (grade >= 60) र सम्मानित हुन्छ (grade >= 90) भनेर जाँच गर्न तार्किक अपरेटरहरू प्रयोग गर्नुहोस्। ३. प्रत्येक अक्षर ग्रेडको लागि विशेष प्रतिक्रिया दिन switch statement प्रयोग गर्नुहोस्। ४. विद्यार्थी अर्को पाठ्यक्रमको लागि योग्य छ कि छैन (grade >= 70) भनेर निर्धारण गर्न ternary operator प्रयोग गर्नुहोस्। ५. स्कोर ० देखि १०० बीचमा छ भनेर सुनिश्चित गर्न इनपुट मान्यता समावेश गर्नुहोस्। तपाईंको प्रोग्रामलाई विभिन्न स्कोरहरू, जस्तै ५९, ६०, ८९, ९०, र अमान्य इनपुटहरू सहित परीक्षण गर्नुहोस्। agent mode को बारेमा यहाँ थप जान्नुहोस्। ## पोस्ट-व्याख्यान क्विज पोस्ट-व्याख्यान क्विज ## समीक्षा र आत्म-अध्ययन प्रयोगकर्ताले प्रयोग गर्न सक्ने धेरै अपरेटरहरूको बारेमा MDN मा थप पढ्नुहोस्। जोश कमाउको उत्कृष्ट अपरेटर लुकअप हेर्नुहोस्! ## असाइनमेन्ट अपरेटरहरू --- ## 🧠 तपाईंको निर्णय-लिने उपकरणको सारांश --- ## 🚀 तपाईंको जाभास्क्रिप्ट निर्णय-लिने सीपको समयरेखा ### ⚡ तपाईंले अर्को ५ मिनेटमा गर्न सक्ने कुरा - [ ] तपाईंको ब्राउजर कन्सोलमा तुलना अपरेटरहरू अभ्यास गर्नुहोस्। - [ ] तपाईंको उमेर जाँच गर्ने एउटा साधारण if-else statement लेख्नुहोस्। - [ ] चुनौती प्रयास गर्नुहोस्: if-else लाई ternary operator प्रयोग गरेर पुनःलेखन गर्नुहोस्। - [ ] विभिन्न "truthy" र "falsy" मानहरूको साथ के हुन्छ परीक्षण गर्नुहोस्। ### 🎯 तपाईंले यो घण्टामा हासिल गर्न सक्ने कुरा - [ ] पाठ-पछिको क्विज पूरा गर्नुहोस् र कुनै पनि भ्रमित अवधारणाहरू समीक्षा गर्नुहोस्। - [ ] GitHub Copilot चुनौतीबाट व्यापक ग्रेड क्यालकुलेटर बनाउनुहोस्। - [ ] वास्तविक जीवनको परिदृश्यको लागि एउटा साधारण निर्णय वृक्ष बनाउनुहोस् (जस्तै के लगाउने छनोट गर्नु)। - [ ] तार्किक अपरेटरहरूसँग धेरै सर्तहरू संयोजन गर्ने अभ्यास गर्नुहोस्। - [ ] विभिन्न प्रयोगहरूको लागि switch statement प्रयोग गरेर परीक्षण गर्नुहोस्। ### 📅 तपाईंको हप्ताको तार्किक सीपको मास्टरी - [ ] रचनात्मक उदाहरणहरूको साथ अपरेटरहरूको असाइनमेन्ट पूरा गर्नुहोस्। - [ ] विभिन्न सर्त संरचनाहरू प्रयोग गरेर एउटा सानो क्विज एप्लिकेसन बनाउनुहोस्। - [ ] धेरै इनपुट सर्तहरू जाँच गर्ने फर्म मान्यता बनाउनुहोस्। - [ ] जोश कमाउको अपरेटर लुकअप अभ्यासहरू अभ्यास गर्नुहोस्। - [ ] अधिक उपयुक्त सर्त संरचनाहरू प्रयोग गर्न विद्यमान कोडलाई पुनःलेखन गर्नुहोस्। - [ ] छोटो-सर्किट मूल्यांकन र प्रदर्शन प्रभावहरूको अध्ययन गर्नुहोस्। ### 🌟 तपाईंको महिनाको रूपान्तरण - [ ] जटिल नेस्टेड सर्तहरूमा महारत हासिल गर्नुहोस् र कोड पढ्न सजिलो बनाउनुहोस्। - [ ] परिष्कृत निर्णय-लिने तर्कको साथ एप्लिकेसन बनाउनुहोस्। - [ ] विद्यमान परियोजनाहरूमा सर्त तर्क सुधार गरेर ओपन सोर्समा योगदान गर्नुहोस्। - [ ] विभिन्न सर्त संरचनाहरूको बारेमा अरूलाई सिकाउनुहोस् र प्रत्येक कहिले प्रयोग गर्ने। - [ ] सर्त तर्कको लागि कार्यात्मक प्रोग्रामिङ दृष्टिकोण अन्वेषण गर्नुहोस्। - [ ] सर्तहरूको उत्कृष्ट अभ्यासहरूको लागि व्यक्तिगत सन्दर्भ मार्गदर्शक बनाउनुहोस्। ### 🏆 अन्तिम निर्णय-लिने च्याम्पियन जाँच तपाईंको तार्किक सोचको मास्टरीको उत्सव मनाउनुहोस्: - तपाईंले सफलतापूर्वक कार्यान्वयन गरेको सबैभन्दा जटिल निर्णय तर्क के हो? - कुन सर्त संरचना तपाईंलाई सबैभन्दा प्राकृतिक लाग्छ र किन? - तार्किक अपरेटरहरूको बारेमा सिक्नाले तपाईंको समस्या समाधान गर्ने दृष्टिकोणलाई कसरी परिवर्तन गरेको छ? - कुन वास्तविक जीवनको एप्लिकेसन परिष्कृत निर्णय-लिने तर्कबाट लाभ उठाउँछ? --- अस्वीकरण: यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।

web,development

जाभास्क्रिप्ट आधारभूत: एरेहरू र लूपहरू

## व्याख्यान अघि क्विज व्याख्यान अघि क्विज के तपाईंले कहिल्यै सोच्नुभएको छ कि वेबसाइटहरूले किन किनमेल कार्टका वस्तुहरू ट्र्याक गर्छन् वा तपाईंको साथीहरूको सूची देखाउँछन्? यहीँ एरेहरू र लूपहरू काममा आउँछन्। एरेहरू डिजिटल कन्टेनर जस्तै हुन् जसले धेरै जानकारीहरू राख्छन्, जबकि लूपहरूले तपाईंलाई त्यो डेटा कुशलतापूर्वक काम गर्न अनुमति दिन्छन् बिना दोहोरिने कोड। यी दुई अवधारणाहरूले तपाईंको प्रोग्रामहरूमा जानकारी व्यवस्थापनको आधार बनाउँछन्। तपाईंले प्रत्येक चरण म्यानुअल रूपमा लेख्नेबाट स्मार्ट, कुशल कोड सिर्जना गर्न सिक्नुहुनेछ जसले सयौं वा हजारौं वस्तुहरू छिटो प्रक्रिया गर्न सक्छ। यस पाठको अन्त्यसम्ममा, तपाईंले केही लाइनको कोडले जटिल डेटा कार्यहरू कसरी पूरा गर्ने भन्ने बुझ्नुहुनेछ। यी आवश्यक प्रोग्रामिङ अवधारणाहरू अन्वेषण गरौं। [](https://youtube.com/watch?v=1U4qTyq02Xw "एरेहरू") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "लूपहरू") ## एरेहरू एरेहरूलाई डिजिटल फाइलिङ क्याबिनेटको रूपमा सोच्नुहोस् - एउटा दराजमा एउटा कागजात भण्डारण गर्ने सट्टा, तपाईं धेरै सम्बन्धित वस्तुहरूलाई एउटै संरचित कन्टेनरमा व्यवस्थित गर्न सक्नुहुन्छ। प्रोग्रामिङ सन्दर्भमा, एरेहरूले तपाईंलाई धेरै जानकारीहरू एउटै संगठित प्याकेजमा भण्डारण गर्न अनुमति दिन्छ। तपाईं फोटो ग्यालरी बनाउँदै हुनुहुन्छ, टु-डु सूची व्यवस्थापन गर्दै हुनुहुन्छ, वा खेलमा उच्च स्कोरहरू ट्र्याक गर्दै हुनुहुन्छ भने, एरेहरूले डेटा संगठनको आधार प्रदान गर्छन्। आउनुहोस्, यसले कसरी काम गर्छ हेर्नुहोस्। ✅ एरेहरू हरेक ठाउँमा छन्! के तपाईं एरेको वास्तविक जीवन उदाहरण सोच्न सक्नुहुन्छ, जस्तै सौर्य प्यानल एरे? ### एरेहरू सिर्जना गर्दै एरे सिर्जना गर्नु धेरै सरल छ - केवल वर्ग ब्र्याकेटहरू प्रयोग गर्नुहोस्! यहाँ के भइरहेको छ? तपाईंले ती वर्ग ब्र्याकेटहरू [] प्रयोग गरेर खाली कन्टेनर सिर्जना गर्नुभएको छ। यसलाई खाली पुस्तकालय शेल्फ जस्तै सोच्नुहोस् - यो तपाईंले त्यहाँ व्यवस्थित गर्न चाहनुभएको किताबहरू राख्न तयार छ। तपाईं आफ्नो एरेलाई सुरुवातमै प्रारम्भिक मानहरूद्वारा भरिन पनि सक्नुहुन्छ: ध्यान दिन लायक कुराहरू: - तपाईंले एउटै एरेमा पाठ, संख्या, वा सत्य/झुटो मानहरू भण्डारण गर्न सक्नुहुन्छ - प्रत्येक वस्तुलाई अल्पविरामले छुट्याउनुहोस् - सजिलो! - एरेहरू सम्बन्धित जानकारीहरू सँगै राख्नका लागि उत्तम छन् ### एरे इन्डेक्सिङ यहाँ केहि असामान्य लाग्न सक्छ: एरेहरूले आफ्नो वस्तुहरू 0 बाट सुरु गरेर नम्बर गर्छन्, 1 बाट होइन। यो शून्य-आधारित इन्डेक्सिङ कम्प्युटर मेमोरी कसरी काम गर्छ भन्ने कुरामा आधारित छ - यो प्रोग्रामिङ परम्परा कम्प्युटिङ भाषाहरू जस्तै C को प्रारम्भिक दिनदेखि चल्दै आएको छ। एरेको प्रत्येक स्थानले आफ्नो ठेगाना नम्बर पाउँछ जसलाई इन्डेक्स भनिन्छ। ✅ के तपाईंलाई एरेहरू शून्य इन्डेक्सबाट सुरु हुन्छ भन्ने कुरा अचम्म लाग्छ? केही प्रोग्रामिङ भाषाहरूमा, इन्डेक्सहरू 1 बाट सुरु हुन्छ। यसको बारेमा रोचक इतिहास छ, जुन तपाईं विकिपिडियामा पढ्न सक्नुहुन्छ। एरे तत्वहरू पहुँच गर्दै: यहाँ के भइरहेको छ: - प्रयोग गर्छ इन्डेक्स नम्बरको साथ वर्ग ब्र्याकेट नोटेशन तत्वहरू पहुँच गर्न - फिर्ता दिन्छ एरेको सो विशेष स्थानमा भण्डारण गरिएको मान - सुरु गर्छ 0 बाट गणना गर्दै, पहिलो तत्व इन्डेक्स 0 बनाउँदै एरे तत्वहरू परिमार्जन गर्दै: माथिको उदाहरणमा हामीले: - परिमार्जन गर्‍यौं इन्डेक्स 4 मा रहेको तत्व "रकी रोड" बाट "बटर पेकन" मा - नयाँ तत्व थप्यौं "कुकी डो" इन्डेक्स 5 मा - स्वचालित रूपमा विस्तार गर्‍यो एरेको लम्बाइ जब वर्तमान सीमा भन्दा पर थपियो ### एरे लम्बाइ र सामान्य विधिहरू एरेहरूमा बिल्ट-इन गुणहरू र विधिहरू छन् जसले डेटा काम गर्न धेरै सजिलो बनाउँछ। एरे लम्बाइ पत्ता लगाउँदै: महत्वपूर्ण बुँदाहरू सम्झनुहोस्: - फिर्ता दिन्छ एरेमा कुल तत्वहरूको संख्या - स्वचालित रूपमा अपडेट हुन्छ जब तत्वहरू थपिन्छन् वा हटाइन्छन् - प्रदान गर्छ लूपहरू र मान्यताका लागि गतिशील गणना आवश्यक एरे विधिहरू: यी विधिहरू बुझ्दै: - थप्छ push() (अन्त्यमा) र unshift() (सुरुमा) द्वारा तत्वहरू - हटाउँछ pop() (अन्त्यमा) र shift() (सुरुमा) द्वारा तत्वहरू - पत्ता लगाउँछ indexOf() द्वारा तत्वहरू र includes() द्वारा अस्तित्व जाँच्छ - फिर्ता दिन्छ उपयोगी मानहरू जस्तै हटाइएका तत्वहरू वा स्थिति इन्डेक्सहरू ✅ आफैं प्रयास गर्नुहोस्! आफ्नो ब्राउजरको कन्सोलमा एरे सिर्जना गरेर परिमार्जन गर्नुहोस्। ### 🧠 एरे आधारभूत जाँच: तपाईंको डेटा व्यवस्थित गर्दै तपाईंको एरे बुझाइ परीक्षण गर्नुहोस्: - तपाईंलाई किन लाग्छ एरेहरू 0 बाट गणना सुरु गर्छन् 1 बाट होइन? - के हुन्छ यदि तपाईंले त्यस्तो इन्डेक्स पहुँच गर्न खोज्नुभयो जुन अस्तित्वमा छैन (जस्तै arr[100] 5-तत्व एरेमा)? - एरेहरू उपयोगी हुने तीन वास्तविक जीवन परिदृश्य सोच्न सक्नुहुन्छ? ## लूपहरू चार्ल्स डिकेन्सका उपन्यासहरूमा प्रसिद्ध सजायको बारेमा सोच्नुहोस् जहाँ विद्यार्थीहरूले स्लेटमा लाइनहरू बारम्बार लेख्नुपर्थ्यो। कल्पना गर्नुहोस् यदि तपाईं कसैलाई "यो वाक्य 100 पटक लेख" भन्न सक्नुहुन्छ र यो स्वचालित रूपमा पूरा हुन्छ। यही कुरा लूपहरूले तपाईंको कोडका लागि गर्छन्। लूपहरू tireless सहायक जस्तै हुन् जसले कार्यहरू दोहोर्याउन सक्छन् बिना त्रुटि। तपाईंलाई किनमेल कार्टको प्रत्येक वस्तु जाँच गर्न वा एल्बममा सबै फोटोहरू देखाउन आवश्यक छ भने, लूपहरूले दोहोर्याइलाई कुशलतापूर्वक व्यवस्थापन गर्छन्। जाभास्क्रिप्टले छनोट गर्नका लागि धेरै प्रकारका लूपहरू प्रदान गर्दछ। प्रत्येकलाई जाँच गरौं र कहिले प्रयोग गर्ने बुझौं। ### फोर लूप for लूप टाइमर सेट गर्ने जस्तै हो - तपाईंलाई थाहा छ कि तपाईंले कति पटक केहि गर्न चाहनुहुन्छ। यो धेरै व्यवस्थित र पूर्वानुमान योग्य छ, जसले यसलाई एरेहरूसँग काम गर्दा वा वस्तुहरू गणना गर्न उत्तम बनाउँछ। फोर लूप संरचना: चरणबद्ध रूपमा, यहाँ के भइरहेको छ: - सुरु गर्छ काउन्टर भेरिएबल i लाई 0 मा सेट गर्दै - जाँच गर्छ सर्त i < 10 प्रत्येक पुनरावृत्तिको अघि - कार्यान्वयन गर्छ कोड ब्लक जब सर्त सत्य हुन्छ - वृद्धि गर्छ i लाई प्रत्येक पुनरावृत्तिपछि 1 द्वारा i++ प्रयोग गर्दै - रोक्छ जब सर्त झुटो हुन्छ (जब i 10 पुग्छ) ✅ यो कोड ब्राउजर कन्सोलमा चलाउनुहोस्। काउन्टर, सर्त, वा पुनरावृत्ति अभिव्यक्तिमा साना परिवर्तन गर्दा के हुन्छ? के तपाईं यसलाई उल्टो चलाउन सक्नुहुन्छ, काउन्टडाउन सिर्जना गर्दै? ### 🗓️ फोर लूप मास्टरी जाँच: नियन्त्रित दोहोर्याइ तपाईंको फोर लूप बुझाइ मूल्यांकन गर्नुहोस्: - फोर लूपका तीन भागहरू के हुन्, र प्रत्येकले के गर्छ? - तपाईं कसरी एरेलाई उल्टो लूप गर्न सक्नुहुन्छ? - यदि तपाईंले वृद्धि भाग (i++) बिर्सनुभयो भने के हुन्छ? ### ह्वाइल लूप while लूप "यो गरिराख... सम्म" भन्ने जस्तै हो - तपाईंलाई थाहा नहुन सक्छ कि यो कति पटक चल्छ, तर तपाईंलाई थाहा छ कहिले रोक्ने। यो त्यस्तो कुराहरूका लागि उत्तम हो जस्तै प्रयोगकर्ताबाट इनपुट माग्ने जबसम्म उनीहरूले तपाईंलाई चाहिएको कुरा दिन्छन्, वा तपाईंले खोज्न चाहनुभएको डेटा पत्ता लगाउँदासम्म। ह्वाइल लूप विशेषताहरू: - जारी राख्छ सर्त सत्य रहँदासम्म कार्यान्वयन गर्दै - आवश्यक छ कुनै पनि काउन्टर भेरिएबलहरूको म्यानुअल व्यवस्थापन - जाँच गर्छ सर्त प्रत्येक पुनरावृत्तिको अघि - जोखिम छ अनन्त लूपहरू यदि सर्त कहिल्यै झुटो हुँदैन भने यी उदाहरणहरू बुझ्दै: - व्यवस्थापन गर्छ काउन्टर भेरिएबल i लूपको भित्र म्यानुअल रूपमा - वृद्धि गर्छ काउन्टर अनन्त लूपहरू रोक्न - व्यावहारिक प्रयोग केस देखाउँछ प्रयोगकर्ता इनपुट र प्रयास सीमित गर्दै - सुरक्षा संयन्त्रहरू समावेश गर्छ अनन्त कार्यान्वयन रोक्न ### ♾️ ह्वाइल लूप ज्ञान जाँच: सर्त-आधारित दोहोर्याइ तपाईंको ह्वाइल लूप बुझाइ परीक्षण गर्नुहोस्: - ह्वाइल लूप प्रयोग गर्दा मुख्य खतरा के हो? - तपाईंले फोर लूपको सट्टा ह्वाइल लूप कहिले रोज्नुहुन्छ? - तपाईं कसरी अनन्त लूपहरू रोक्न सक्नुहुन्छ? ### आधुनिक लूप विकल्पहरू जाभास्क्रिप्टले आधुनिक लूप सिन्ट्याक्स प्रदान गर्दछ जसले तपाईंको कोडलाई पढ्न योग्य र कम त्रुटिपूर्ण बनाउँछ। फोर...अफ लूप (ES6+): फोर...अफका मुख्य फाइदाहरू: - इन्डेक्स व्यवस्थापन हटाउँछ र सम्भावित त्रुटिहरू कम गर्छ - प्रत्यक्ष पहुँच प्रदान गर्छ एरे तत्वहरूमा - कोड पढ्न सजिलो बनाउँछ र सिन्ट्याक्स जटिलता कम गर्छ forEach विधि: forEachको बारेमा जान्नुपर्ने कुरा: - प्रत्येक एरे तत्वका लागि कार्यान्वयन गर्छ एक कार्य - प्रदान गर्छ तत्व मान र इन्डेक्स दुवैलाई प्यारामिटरको रूपमा - रोक्न सकिँदैन प्रारम्भिक रूपमा (परम्परागत लूपहरू विपरीत) - फिर्ता दिन्छ undefined (नयाँ एरे सिर्जना गर्दैन) ✅ तपाईं किन फोर लूप बनाम ह्वाइल लूप रोज्नुहुन्छ? 17K दर्शकहरूले StackOverflowमा यही प्रश्न गरेका थिए, र केही विचारहरू तपाईंलाई रोचक लाग्न सक्छ। ### 🎨 आधुनिक लूप सिन्ट्याक्स जाँच: ES6+ अपनाउँदै तपाईंको आधुनिक जाभास्क्रिप्ट बुझाइ मूल्यांकन गर्नुहोस्: - परम्परागत फोर लूपहरूमा for...of का फाइदाहरू के हुन्? - तपाईं कहिले परम्परागत फोर लूपहरू रोज्न सक्नुहुन्छ? - forEach र map बीचको फरक के हो? ## लूपहरू र एरेहरू एरेहरूलाई लूपहरूसँग संयोजन गर्दा शक्तिशाली डेटा प्रशोधन क्षमता सिर्जना हुन्छ। यो जोडी धेरै प्रोग्रामिङ कार्यहरूको लागि आधारभूत हो, सूचीहरू देखाउनेदेखि लिएर तथ्याङ्कहरू गणना गर्नसम्म। परम्परागत एरे प्रशोधन: प्रत्येक दृष्टिकोण बुझौं: - प्रयोग गर्छ एरे लम्बाइ गुण लूप सीमा निर्धारण गर्न - पहुंच गर्छ परम्परागत फोर लूपहरूमा इन्डेक्सद्वारा तत्वहरू - प्रत्यक्ष तत्व पहुँच प्रदान गर्छ फोर...अफ लूपहरूमा - प्रत्येक एरे तत्वलाई ठीक एक पटक प्रक्रिया गर्छ व्यावहारिक डेटा प्रशोधन उदाहरण: यो कोड कसरी काम गर्छ: - सुरु गर्छ ट्र्याकिङ भेरिएबलहरू सम, चरम मानहरूको लागि - प्रत्येक ग्रेड प्रक्रिया गर्छ एकल कुशल लूपद्वारा - कुल जम्मा गर्छ औसत गणनाका लागि - ट्र्याक गर्छ उच्चतम र न्यूनतम मानहरू पुनरावृत्तिको क्रममा - अन्तिम तथ्याङ्कहरू गणना गर्छ लूप पूरा भएपछि ✅ आफ्नो ब्राउजरको कन्सोलमा आफ्नै एरेमा लूप गर्दै प्रयोग गर्नुहोस्। --- ## GitHub Copilot एजेन्ट चुनौती 🚀 एजेन्ट मोड प्रयोग गरेर निम्न चुनौती पूरा गर्नुहोस्: विवरण: एरेहरू र लूपहरू संयोजन गरेर डेटासेट विश्लेषण गर्ने र अर्थपूर्ण अन्तर्दृष्टि उत्पन्न गर्ने व्यापक डेटा प्रशोधन कार्य सिर्जना गर्नुहोस्। प्रम्ट: analyzeGrades नामक एक कार्य सिर्जना गर्नुहोस् जसले विद्यार्थी ग्रेड वस्तुहरूको एरे (प्रत्येकमा नाम र स्कोर गुणहरू समावेश छन्) लिन्छ र तथ्याङ्कहरू सहितको वस्तु फिर्ता गर्छ जस्तै उच्चतम स्कोर, न्यूनतम स्कोर, औसत स्कोर, पास भएका विद्यार्थीहरूको संख्या (स्कोर >= 70 जाभास्क्रिप्टले केही आधुनिक एरे मेथडहरू प्रदान गर्दछ जसले विशेष कार्यहरूको लागि परम्परागत लूपहरूलाई प्रतिस्थापन गर्न सक्छ। forEach, for-of, map, filter, र reduce को अन्वेषण गर्नुहोस्। तपाईंको चुनौती: विद्यार्थी ग्रेडको उदाहरणलाई कम्तीमा तीन फरक एरे मेथडहरू प्रयोग गरेर पुनःलेखन गर्नुहोस्। आधुनिक जाभास्क्रिप्ट सिन्ट्याक्सले कोड कति सफा र पढ्न सजिलो बनाउँछ भन्ने कुरामा ध्यान दिनुहोस्। ## पोस्ट-लेक्चर क्विज पोस्ट-लेक्चर क्विज ## समीक्षा र आत्म-अध्ययन जाभास्क्रिप्टमा एरेहरूमा धेरै मेथडहरू जोडिएका छन्, जुन डाटा हेरफेरको लागि अत्यन्त उपयोगी छन्। यी मेथडहरूबारे पढ्नुहोस् र आफ्नो सिर्जनाको एरेमा केही प्रयास गर्नुहोस् (जस्तै push, pop, slice र splice)। ## असाइनमेन्ट एरे लूप गर्नुहोस् --- ## 📊 तपाईंको एरेहरू र लूप टूलकिट सारांश --- ## 🚀 तपाईंको एरेहरू र लूप मास्टरी टाइमलाइन ### ⚡ तपाईंले अर्को ५ मिनेटमा गर्न सक्ने कुरा - [ ] आफ्नो मनपर्ने फिल्महरूको एरे सिर्जना गर्नुहोस् र विशिष्ट तत्वहरू पहुँच गर्नुहोस् - [ ] १ देखि १० सम्म गणना गर्ने एउटा for लूप लेख्नुहोस् - [ ] पाठबाट आधुनिक एरे मेथडहरूको चुनौती प्रयास गर्नुहोस् - [ ] आफ्नो ब्राउजर कन्सोलमा एरे इन्डेक्सिङ अभ्यास गर्नुहोस् ### 🎯 तपाईंले यो घण्टामा हासिल गर्न सक्ने कुरा - [ ] पोस्ट-लेक्चर क्विज पूरा गर्नुहोस् र कुनै चुनौतीपूर्ण अवधारणाहरू समीक्षा गर्नुहोस् - [ ] GitHub Copilot चुनौतीबाट व्यापक ग्रेड एनालाइजर निर्माण गर्नुहोस् - [ ] वस्तुहरू थप्ने र हटाउने एउटा साधारण किनमेल कार्ट बनाउनुहोस् - [ ] विभिन्न लूप प्रकारहरूमा रूपान्तरण अभ्यास गर्नुहोस् - [ ] push, pop, slice, र splice जस्ता एरे मेथडहरूमा प्रयोग गर्नुहोस् ### 📅 तपाईंको हप्ताभरि डाटा प्रोसेसिङ यात्रा - [ ] "एरे लूप गर्नुहोस्" असाइनमेन्ट रचनात्मक सुधारसहित पूरा गर्नुहोस् - [ ] एरेहरू र लूपहरू प्रयोग गरेर टु-डु सूची एप्लिकेसन बनाउनुहोस् - [ ] संख्यात्मक डाटाको लागि साधारण तथ्यांक क्यालकुलेटर बनाउनुहोस् - [ ] MDN एरे मेथडहरू संग अभ्यास गर्नुहोस् - [ ] फोटो ग्यालरी वा संगीत प्लेलिस्ट इन्टरफेस निर्माण गर्नुहोस् - [ ] map, filter, र reduce संग फङ्सनल प्रोग्रामिङ अन्वेषण गर्नुहोस् ### 🌟 तपाईंको महिनाभरि रूपान्तरण - [ ] उन्नत एरे अपरेसनहरू र प्रदर्शन अनुकूलनमा महारत हासिल गर्नुहोस् - [ ] पूर्ण डाटा भिजुअलाइजेसन ड्यासबोर्ड निर्माण गर्नुहोस् - [ ] डाटा प्रोसेसिङ समावेश गर्ने ओपन सोर्स प्रोजेक्टहरूमा योगदान गर्नुहोस् - [ ] व्यावहारिक उदाहरणहरूसँग कसैलाई एरेहरू र लूपहरूबारे सिकाउनुहोस् - [ ] पुनः प्रयोग गर्न मिल्ने डाटा प्रोसेसिङ फङ्सनहरूको व्यक्तिगत पुस्तकालय सिर्जना गर्नुहोस् - [ ] एरेहरूमा आधारित एल्गोरिदम र डाटा संरचनाहरू अन्वेषण गर्नुहोस् ### 🏆 अन्तिम डाटा प्रोसेसिङ च्याम्पियन चेक-इन तपाईंको एरे र लूप मास्टरीको उत्सव मनाउनुहोस्: - वास्तविक संसारको अनुप्रयोगहरूको लागि तपाईंले सिकेको सबैभन्दा उपयोगी एरे अपरेसन के हो? - कुन लूप प्रकार तपाईंलाई सबैभन्दा प्राकृतिक लाग्छ र किन? - एरेहरू र लूपहरूको समझले डाटा व्यवस्थित गर्ने तपाईंको दृष्टिकोणलाई कसरी परिवर्तन गर्यो? - तपाईंले अर्को कुन जटिल डाटा प्रोसेसिङ कार्यलाई सम्बोधन गर्न चाहनुहुन्छ? --- अस्वीकरण: यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरेर अनुवाद गरिएको छ। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।

web,development

Introductie tot JavaScript

JavaScript is de taal van het web. In deze vier lessen leer je de basis. ### Onderwerpen 1. Variabelen en Datatypes 2. Functies en Methoden 3. Beslissingen maken met JavaScript 4. Arrays en Lussen ### Credits Deze lessen zijn met ♥️ geschreven door Jasmine Greenaway, Christopher Harrison en Chris Noring --- Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.

javascript

JavaScript Basisprincipes: Gegevenstypen

Gegevenstypen zijn een van de fundamentele concepten in JavaScript die je in elk programma tegenkomt dat je schrijft. Denk aan gegevenstypen als het archiefsysteem dat oude bibliothecarissen in Alexandrië gebruikten – ze hadden specifieke plekken voor rollen met poëzie, wiskunde en historische verslagen. JavaScript organiseert informatie op een vergelijkbare manier met verschillende categorieën voor verschillende soorten gegevens. In deze les gaan we de kerngegevenstypen verkennen die JavaScript laten werken. Je leert hoe je met getallen, tekst, waar/onwaar-waarden omgaat en waarom het kiezen van het juiste type essentieel is voor je programma's. Deze concepten lijken in het begin misschien abstract, maar met oefening worden ze vanzelfsprekend. Het begrijpen van gegevenstypen maakt alles in JavaScript veel duidelijker. Net zoals architecten verschillende bouwmaterialen moeten begrijpen voordat ze een kathedraal bouwen, zullen deze basisprincipes alles ondersteunen wat je in de toekomst bouwt. ## Quiz voor de les Quiz voor de les Deze les behandelt de basisprincipes van JavaScript, de taal die interactiviteit op het web mogelijk maakt. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variabelen in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Gegevenstypen in JavaScript") Laten we beginnen met variabelen en de gegevenstypen die ze vullen! ## Variabelen Variabelen zijn fundamentele bouwstenen in programmeren. Net zoals de gelabelde potten die middeleeuwse alchemisten gebruikten om verschillende stoffen op te slaan, laten variabelen je informatie opslaan en een beschrijvende naam geven zodat je er later naar kunt verwijzen. Moet je iemands leeftijd onthouden? Sla het op in een variabele genaamd age. Wil je de naam van een gebruiker bijhouden? Bewaar het in een variabele genaamd userName. We richten ons op de moderne aanpak om variabelen te maken in JavaScript. De technieken die je hier leert, vertegenwoordigen jaren van taalontwikkeling en best practices ontwikkeld door de programmeergemeenschap. Het maken en declareren van een variabele heeft de volgende syntaxis [keyword] [name]. Het bestaat uit twee delen: - Keyword. Gebruik let voor variabelen die kunnen veranderen, of const voor waarden die hetzelfde blijven. - De variabelenaam, dit is een beschrijvende naam die je zelf kiest. ✅ Het keyword let werd geïntroduceerd in ES6 en geeft je variabele een zogenaamde _block scope_. Het wordt aanbevolen om let of const te gebruiken in plaats van het oudere var keyword. We zullen block scopes later dieper behandelen. ### Taak - werken met variabelen 1. Declareer een variabele. Laten we beginnen met het maken van onze eerste variabele: ```javascript let myVariable; ``` Wat dit doet: - Dit vertelt JavaScript om een opslaglocatie genaamd myVariable te maken - JavaScript reserveert ruimte in het geheugen voor deze variabele - De variabele heeft momenteel geen waarde (undefined) 2. Geef het een waarde. Laten we nu iets in onze variabele plaatsen: ```javascript myVariable = 123; ``` Hoe toewijzing werkt: - De = operator wijst de waarde 123 toe aan onze variabele - De variabele bevat nu deze waarde in plaats van undefined - Je kunt deze waarde overal in je code gebruiken met myVariable > Opmerking: het gebruik van = in deze les betekent dat we gebruik maken van een "toewijzingsoperator", die wordt gebruikt om een waarde aan een variabele toe te wijzen. Het geeft geen gelijkheid aan. 3. Doe het op de slimme manier. Eigenlijk kunnen we die twee stappen combineren: ```javascript let myVariable = 123; ``` Deze aanpak is efficiënter: - Je declareert de variabele en wijst een waarde toe in één statement - Dit is de standaardpraktijk onder ontwikkelaars - Het verkort de code terwijl de duidelijkheid behouden blijft 4. Van gedachten veranderen. Wat als we een ander nummer willen opslaan? ```javascript myVariable = 321; ``` Begrip van hernieuwde toewijzing: - De variabele bevat nu 321 in plaats van 123 - De vorige waarde wordt vervangen – variabelen slaan slechts één waarde tegelijk op - Deze veranderlijkheid is een belangrijk kenmerk van variabelen die met let zijn gedeclareerd ✅ Probeer het! Je kunt JavaScript direct in je browser schrijven. Open een browservenster en ga naar Developer Tools. In de console vind je een prompt; typ let myVariable = 123, druk op return, en typ vervolgens myVariable. Wat gebeurt er? Let op, je leert meer over deze concepten in volgende lessen. ### 🧠 Variabelen Beheersingscheck: Vertrouwd raken Laten we kijken hoe je je voelt over variabelen: - Kun je het verschil uitleggen tussen het declareren en toewijzen van een variabele? - Wat gebeurt er als je probeert een variabele te gebruiken voordat je deze declareert? - Wanneer zou je let kiezen boven const voor een variabele? ## Constanten Soms moet je informatie opslaan die tijdens de uitvoering van het programma nooit mag veranderen. Denk aan constanten als de wiskundige principes die Euclides vaststelde in het oude Griekenland – eenmaal bewezen en gedocumenteerd, bleven ze vaststaan voor alle toekomstige referenties. Constanten werken vergelijkbaar met variabelen, maar met een belangrijke beperking: zodra je hun waarde toewijst, kan deze niet worden gewijzigd. Deze onveranderlijkheid helpt om onbedoelde wijzigingen van kritieke waarden in je programma te voorkomen. Declaratie en initialisatie van een constante volgen dezelfde concepten als een variabele, met uitzondering van het const keyword. Constanten worden meestal gedeclareerd met alleen hoofdletters. Wat deze code doet: - Maakt een constante genaamd MY_VARIABLE met de waarde 123 - Gebruikt een conventie met hoofdletters voor constanten - Voorkomt toekomstige wijzigingen van deze waarde Constanten hebben twee hoofdregels: - Je moet ze meteen een waarde geven – lege constanten zijn niet toegestaan! - Je kunt die waarde nooit veranderen – JavaScript geeft een foutmelding als je het probeert. Laten we zien wat ik bedoel: Eenvoudige waarde - Het volgende is NIET toegestaan: ```javascript const PI = 3; PI = 4; // niet toegestaan ``` Wat je moet onthouden: - Pogingen om een constante opnieuw toe te wijzen veroorzaken een fout - Beschermt belangrijke waarden tegen onbedoelde wijzigingen - Zorgt ervoor dat de waarde consistent blijft in je programma Objectreferentie is beschermd - Het volgende is NIET toegestaan: ```javascript const obj = { a: 3 }; obj = { b: 5 } // niet toegestaan ``` Begrip van deze concepten: - Voorkomt het vervangen van het hele object door een nieuw object - Beschermt de referentie naar het originele object - Behoudt de identiteit van het object in het geheugen Objectwaarde is niet beschermd - Het volgende IS toegestaan: ```javascript const obj = { a: 3 }; obj.a = 5; // toegestaan ``` Wat hier gebeurt: - Wijzigt de eigenschapswaarde binnen het object - Behoudt dezelfde objectreferentie - Toont aan dat de inhoud van het object kan veranderen terwijl de referentie constant blijft > Opmerking, een const betekent dat de referentie beschermd is tegen hernieuwde toewijzing. De waarde is echter niet _onveranderlijk_ en kan veranderen, vooral als het een complex construct is zoals een object. ## Gegevenstypen JavaScript organiseert informatie in verschillende categorieën, zogenaamde gegevenstypen. Dit concept weerspiegelt hoe oude geleerden kennis categoriseerden – Aristoteles maakte onderscheid tussen verschillende soorten redeneringen, wetende dat logische principes niet uniform konden worden toegepast op poëzie, wiskunde en natuurlijke filosofie. Gegevenstypen zijn belangrijk omdat verschillende bewerkingen werken met verschillende soorten informatie. Net zoals je geen rekenkundige bewerkingen kunt uitvoeren op iemands naam of een wiskundige vergelijking kunt alfabetiseren, vereist JavaScript het juiste gegevenstype voor elke bewerking. Dit voorkomt fouten en maakt je code betrouwbaarder. Variabelen kunnen veel verschillende soorten waarden opslaan, zoals getallen en tekst. Deze verschillende soorten waarden staan bekend als het gegevenstype. Gegevenstypen zijn een belangrijk onderdeel van softwareontwikkeling omdat ze ontwikkelaars helpen beslissingen te nemen over hoe de code moet worden geschreven en hoe de software moet werken. Bovendien hebben sommige gegevenstypen unieke kenmerken die helpen om extra informatie uit een waarde te halen of te transformeren. ✅ Gegevenstypen worden ook wel JavaScript data primitives genoemd, omdat ze de laagste niveau gegevenstypen zijn die door de taal worden geleverd. Er zijn 7 primitieve gegevenstypen: string, number, bigint, boolean, undefined, null en symbol. Neem een minuut de tijd om je voor te stellen wat elk van deze primitieve typen zou kunnen vertegenwoordigen. Wat is een zebra? Hoe zit het met 0? true? ### Getallen Getallen zijn het meest eenvoudige gegevenstype in JavaScript. Of je nu werkt met gehele getallen zoals 42, decimalen zoals 3.14, of negatieve getallen zoals -5, JavaScript behandelt ze uniform. Weet je nog onze variabele van eerder? Die 123 die we opsloegen was eigenlijk een gegevenstype getal: Belangrijke kenmerken: - JavaScript herkent numerieke waarden automatisch - Je kunt wiskundige bewerkingen uitvoeren met deze variabelen - Geen expliciete typeverklaring is vereist Variabelen kunnen alle soorten getallen opslaan, inclusief decimalen of negatieve getallen. Getallen kunnen ook worden gebruikt met rekenkundige operators, behandeld in de volgende sectie. ### Rekenkundige Operators Rekenkundige operators stellen je in staat om wiskundige berekeningen uit te voeren in JavaScript. Deze operators volgen dezelfde principes die wiskundigen al eeuwenlang gebruiken – dezelfde symbolen die verschenen in de werken van geleerden zoals Al-Khwarizmi, die algebraïsche notatie ontwikkelde. De operators werken zoals je zou verwachten van traditionele wiskunde: plus voor optellen, min voor aftrekken, enzovoort. Er zijn verschillende soorten operators die je kunt gebruiken bij het uitvoeren van rekenkundige functies, en enkele worden hier vermeld: ✅ Probeer het! Probeer een rekenkundige bewerking in de console van je browser. Verrassen de resultaten je? ### 🧮 Rekenvaardigheden Check: Berekenen met Vertrouwen Test je begrip van rekenkunde: - Wat is het verschil tussen / (delen) en % (rest)? - Kun je voorspellen wat 10 % 3 oplevert? (Tip: het is niet 3,33...) - Waarom zou de restoperator handig kunnen zijn in programmeren? ### Strings In JavaScript wordt tekstuele data weergegeven als strings. De term "string" komt van het concept van karakters die aan elkaar worden geregen in een reeks, net zoals de manier waarop schrijvers in middeleeuwse kloosters letters met elkaar verbonden om woorden en zinnen te vormen in hun manuscripten. Strings zijn fundamenteel voor webontwikkeling. Elk stukje tekst dat op een website wordt weergegeven – gebruikersnamen, knoplabels, foutmeldingen, inhoud – wordt behandeld als stringdata. Het begrijpen van strings is essentieel voor het maken van functionele gebruikersinterfaces. Strings zijn reeksen van tekens die tussen enkele of dubbele aanhalingstekens staan. Begrip van deze concepten: - Gebruikt ofwel enkele aanhalingstekens ' of dubbele aanhalingstekens " om strings te definiëren - Slaat tekstgegevens op die letters, cijfers en symbolen kunnen bevatten - Wijst stringwaarden toe aan variabelen voor later gebruik - Vereist aanhalingstekens om tekst te onderscheiden van variabelenamen Onthoud dat je aanhalingstekens moet gebruiken bij het schrijven van een string, anders gaat JavaScript ervan uit dat het een variabelenaam is. ### Strings formatteren Stringmanipulatie stelt je in staat om tekstelementen te combineren, variabelen op te nemen en dynamische inhoud te creëren die reageert op de toestand van het programma. Deze techniek stelt je in staat om tekst programmatisch te construeren. Vaak moet je meerdere strings samenvoegen – dit proces wordt concatenatie genoemd. Om twee of meer strings samen te voegen, of ze aan elkaar te koppelen, gebruik je de + operator. Stap voor stap, dit gebeurt er: - Combineert meerdere strings met behulp van de + operator - Voegt strings direct samen zonder spaties in het eerste voorbeeld - Voegt spaties " " toe tussen strings voor leesbaarheid - Voegt leestekens zoals komma's toe om een correcte opmaak te creëren ✅ Waarom is 1 + 1 = 2 in JavaScript, maar '1' + '1' = 11? Denk er eens over na. En wat gebeurt er bij '1' + 1? Template literals zijn een andere manier om strings te formatteren. In plaats van aanhalingstekens gebruik je backticks. Alles wat geen gewone tekst is, moet in placeholders ${ } worden geplaatst. Dit geldt ook voor variabelen die strings kunnen zijn. Laten we elk onderdeel begrijpen: - Gebruikt backticks ` `` in plaats van gewone aanhalingstekens om template literals te maken - Embedt variabelen direct met behulp van de ${} placeholder-syntaxis - Behoudt spaties en opmaak precies zoals geschreven - Biedt een overzichtelijkere manier om complexe strings met variabelen te maken Je kunt je opmaakdoelen bereiken met beide methoden, maar template literals respecteren spaties en regelafbrekingen. ✅ Wanneer zou je een template literal gebruiken in plaats van een gewone string? ### 🔤 Stringvaardigheidstest: Vertrouwen in Tekstmanipulatie Evalueer je stringvaardigheden: - Kun je uitleggen waarom '1' + '1' gelijk is aan '11' in plaats van 2? - Welke stringmethode vind je beter leesbaar: concatenatie of template literals? - Wat gebeurt er als je de aanhalingstekens rond een string vergeet? ### Booleans Booleans vertegenwoordigen de eenvoudigste vorm van gegevens: ze kunnen slechts één van twee waarden bevatten – true of false. Dit binaire logicasysteem gaat terug naar het werk van George Boole, een wiskundige uit de 19e eeuw die de Booleaanse algebra ontwikkelde. Ondanks hun eenvoud zijn booleans essentieel voor de logica in programma's. Ze stellen je code in staat om beslissingen te nemen op basis van voorwaarden – of een gebruiker is ingelogd, of een knop is ingedrukt, of aan bepaalde criteria is voldaan. Booleans kunnen slechts twee waarden hebben: true of false. Booleans helpen bij het nemen van beslissingen over welke regels code moeten worden uitgevoerd wanneer aan bepaalde voorwaarden wordt voldaan. In veel gevallen helpen operators bij het instellen van de waarde van een Boolean en je zult vaak zien dat variabelen worden geïnitialiseerd of hun waarden worden bijgewerkt met een operator. In het bovenstaande hebben we: - Een variabele gemaakt die de Boolean-waarde true opslaat - Gedemonstreerd hoe je de Boolean-waarde false opslaat - De exacte keywords true en false gebruikt (geen aanhalingstekens nodig) - Deze variabelen voorbereid voor gebruik in conditionele statements ✅ Een variabele kan als 'truthy' worden beschouwd als deze evalueert naar een Boolean true. Interessant genoeg zijn in JavaScript alle waarden truthy, tenzij ze als falsy zijn gedefinieerd. ### 🎯 Boolean Logica Test: Besluitvormingsvaardigheden Test je begrip van booleans: - Waarom denk je dat JavaScript "truthy" en "falsy" waarden heeft, naast alleen true en false? - Kun je voorspellen welke van deze falsy is: 0, "0", [], "false"? - Hoe kunnen booleans nuttig zijn bij het controleren van de programmalogica? --- ## 📊 Samenvatting van je Data Types Toolkit ## GitHub Copilot Agent Challenge 🚀 Gebruik de Agent-modus om de volgende uitdaging te voltooien: Beschrijving: Maak een persoonlijke informatiebeheerder die alle JavaScript-datatypes demonstreert die je in deze les hebt geleerd, terwijl je echte datascenario's behandelt. Prompt: Bouw een JavaScript-programma dat een gebruikersprofielobject maakt met: de naam van een persoon (string), leeftijd (nummer), studentstatus (boolean), favoriete kleuren als een array, en een adresobject met straat-, stad- en postcode-eigenschappen. Voeg functies toe om de profielinformatie weer te geven en individuele velden bij te werken. Zorg ervoor dat je stringconcatenatie, template literals, rekenkundige bewerkingen met de leeftijd en Boolean-logica voor de studentstatus demonstreert. Meer informatie over agent mode hier. ## 🚀 Uitdaging JavaScript heeft enkele gedragingen die ontwikkelaars kunnen verrassen. Hier is een klassiek voorbeeld om te verkennen: probeer dit in je browserconsole te typen: let age = 1; let Age = 2; age == Age en observeer het resultaat. Het retourneert false – kun je bepalen waarom? Dit is een van de vele JavaScript-eigenaardigheden die het waard zijn om te begrijpen. Vertrouwdheid met deze eigenaardigheden helpt je om betrouwbaardere code te schrijven en problemen effectiever op te lossen. ## Quiz na de les Quiz na de les ## Review & Zelfstudie Bekijk deze lijst met JavaScript-oefeningen en probeer er een. Wat heb je geleerd? ## Opdracht Data Types Practice ## 🚀 Jouw JavaScript Data Types Meesterschap Tijdlijn ### ⚡ Wat je kunt doen in de komende 5 minuten - [ ] Open je browserconsole en maak 3 variabelen met verschillende datatypes - [ ] Probeer de uitdaging: let age = 1; let Age = 2; age == Age en ontdek waarom het false is - [ ] Oefen stringconcatenatie met je naam en favoriete nummer - [ ] Test wat er gebeurt als je een nummer toevoegt aan een string ### 🎯 Wat je in dit uur kunt bereiken - [ ] Maak de quiz na de les af en bekijk eventuele verwarrende concepten - [ ] Bouw een mini-rekenmachine die twee getallen optelt, aftrekt, vermenigvuldigt en deelt - [ ] Maak een eenvoudige naamformatter met behulp van template literals - [ ] Verken de verschillen tussen de vergelijkingoperators == en === - [ ] Oefen het converteren tussen verschillende datatypes ### 📅 Jouw weeklange JavaScript basis - [ ] Maak de opdracht af met vertrouwen en creativiteit - [ ] Maak een persoonlijk profielobject met alle geleerde datatypes - [ ] Oefen met JavaScript-oefeningen van CSS-Tricks - [ ] Bouw een eenvoudige formuliervalidator met behulp van Boolean-logica - [ ] Experimenteer met array- en objectdatatypes (vooruitblik op komende lessen) - [ ] Word lid van een JavaScript-community en stel vragen over datatypes ### 🌟 Jouw maandlange transformatie - [ ] Integreer kennis over datatypes in grotere programmeerprojecten - [ ] Begrijp wanneer en waarom je elk datatype in echte toepassingen gebruikt - [ ] Help andere beginners om de basisprincipes van JavaScript te begrijpen - [ ] Bouw een kleine applicatie die verschillende soorten gebruikersgegevens beheert - [ ] Verken geavanceerde datatypes zoals type coercion en strikte gelijkheid - [ ] Draag bij aan open source JavaScript-projecten door documentatie te verbeteren ### 🧠 Eindcontrole Data Types Meesterschap Vier je JavaScript basiskennis: - Welk datatype heeft je het meest verrast qua gedrag? - Hoe comfortabel voel je je bij het uitleggen van variabelen versus constanten aan een vriend? - Wat is het meest interessante dat je hebt ontdekt over het type systeem van JavaScript? - Welke toepassing in de echte wereld kun je je voorstellen te bouwen met deze basisprincipes? --- Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.

javascript

JavaScript Basis: Methoden en Functies

## Quiz voor de les Quiz voor de les Het herhaaldelijk schrijven van dezelfde code is een van de meest voorkomende frustraties in programmeren. Functies lossen dit probleem op door je in staat te stellen code te verpakken in herbruikbare blokken. Denk aan functies als de gestandaardiseerde onderdelen die Henry Ford's assemblagelijn revolutionair maakten – zodra je een betrouwbaar onderdeel hebt gemaakt, kun je het overal gebruiken zonder het opnieuw te bouwen. Functies stellen je in staat om stukjes code te bundelen zodat je ze door je hele programma kunt hergebruiken. In plaats van dezelfde logica overal te kopiëren en plakken, kun je een functie één keer maken en deze oproepen wanneer nodig. Deze aanpak houdt je code georganiseerd en maakt updates veel eenvoudiger. In deze les leer je hoe je je eigen functies kunt maken, informatie aan hen kunt doorgeven en nuttige resultaten kunt terugkrijgen. Je ontdekt het verschil tussen functies en methoden, leert moderne syntaxisbenaderingen en ziet hoe functies met andere functies kunnen samenwerken. We bouwen deze concepten stap voor stap op. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methoden en Functies") ## Functies Een functie is een zelfstandig blok code dat een specifieke taak uitvoert. Het bevat logica die je kunt uitvoeren wanneer dat nodig is. In plaats van dezelfde code meerdere keren in je programma te schrijven, kun je deze in een functie verpakken en die functie oproepen wanneer je hem nodig hebt. Deze aanpak houdt je code overzichtelijk en maakt updates veel eenvoudiger. Stel je de onderhoudsuitdaging voor als je logica moest wijzigen die verspreid was over 20 verschillende locaties in je codebase. Het is essentieel om je functies beschrijvende namen te geven. Een goed gekozen naam voor een functie communiceert duidelijk het doel ervan – als je cancelTimer() ziet, begrijp je meteen wat het doet, net zoals een duidelijk gelabelde knop je precies vertelt wat er gebeurt als je erop klikt. ## Een functie maken en oproepen Laten we eens kijken hoe je een functie maakt. De syntaxis volgt een consistent patroon: Laten we dit opsplitsen: - Het sleutelwoord function vertelt JavaScript "Hé, ik maak een functie!" - nameOfFunction is waar je je functie een beschrijvende naam geeft - De haakjes () zijn waar je parameters kunt toevoegen (daar komen we zo op terug) - De accolades {} bevatten de daadwerkelijke code die wordt uitgevoerd wanneer je de functie oproept Laten we een eenvoudige begroetingsfunctie maken om dit in actie te zien: Deze functie print "Hello, world!" naar de console. Zodra je hem hebt gedefinieerd, kun je hem zo vaak gebruiken als nodig. Om je functie uit te voeren (of "op te roepen"), schrijf je de naam gevolgd door haakjes. JavaScript staat je toe om je functie te definiëren vóór of nadat je hem oproept – de JavaScript-engine regelt de uitvoeringsvolgorde. Wanneer je deze regel uitvoert, voert het alle code binnen je displayGreeting-functie uit en toont "Hello, world!" in de console van je browser. Je kunt deze functie herhaaldelijk oproepen. ### 🧠 Basisprincipes van Functies: Bouw je eerste functies Laten we kijken hoe je je voelt over basisfuncties: - Kun je uitleggen waarom we accolades {} gebruiken in functiedefinities? - Wat gebeurt er als je displayGreeting schrijft zonder de haakjes? - Waarom zou je dezelfde functie meerdere keren willen oproepen? ### Beste praktijken voor functies Hier zijn een paar tips om je te helpen geweldige functies te schrijven: - Geef je functies duidelijke, beschrijvende namen – je toekomstige zelf zal je dankbaar zijn! - Gebruik camelCasing voor namen met meerdere woorden (zoals calculateTotal in plaats van calculate_total) - Houd elke functie gericht op het goed uitvoeren van één ding ## Informatie doorgeven aan een functie Onze displayGreeting-functie is beperkt – hij kan alleen "Hello, world!" weergeven voor iedereen. Parameters stellen ons in staat om functies flexibeler en nuttiger te maken. Parameters werken als plaatsvervangers waar je verschillende waarden kunt invoegen elke keer dat je de functie gebruikt. Op deze manier kan dezelfde functie met verschillende informatie werken bij elke oproep. Je vermeldt parameters binnen de haakjes wanneer je je functie definieert, waarbij je meerdere parameters scheidt met komma's: Elke parameter werkt als een plaatsvervanger – wanneer iemand je functie oproept, geven ze daadwerkelijke waarden die in deze plekken worden geplaatst. Laten we onze begroetingsfunctie bijwerken om iemands naam te accepteren: Let op hoe we backticks (` `) en ${}` gebruiken om de naam direct in ons bericht in te voegen – dit wordt een template literal genoemd, en het is een handige manier om strings te bouwen met variabelen erin verwerkt. Nu, wanneer we onze functie oproepen, kunnen we elke naam doorgeven: JavaScript neemt de string 'Christopher', wijst deze toe aan de parameter name, en creëert het gepersonaliseerde bericht "Hello, Christopher!" ## Standaardwaarden Wat als we sommige parameters optioneel willen maken? Daar komen standaardwaarden goed van pas! Stel dat we willen dat mensen het begroetingswoord kunnen aanpassen, maar als ze er geen opgeven, gebruiken we gewoon "Hello" als standaard. Je kunt standaardwaarden instellen door het gelijkheidsteken te gebruiken, net zoals bij het instellen van een variabele: Hier is name nog steeds vereist, maar salutation heeft een reservewaarde van 'Hello' als niemand een andere begroeting opgeeft. Nu kunnen we deze functie op twee verschillende manieren oproepen: Bij de eerste oproep gebruikt JavaScript de standaard "Hello" omdat we geen begroeting hebben opgegeven. Bij de tweede oproep gebruikt het onze aangepaste "Hi" in plaats daarvan. Deze flexibiliteit maakt functies aanpasbaar aan verschillende situaties. ### 🎛️ Parameters Beheersingscontrole: Functies Flexibel Maken Test je begrip van parameters: - Wat is het verschil tussen een parameter en een argument? - Waarom zijn standaardwaarden nuttig in echte programmeersituaties? - Kun je voorspellen wat er gebeurt als je meer argumenten doorgeeft dan parameters? ## Returnwaarden Onze functies hebben tot nu toe alleen berichten naar de console geprint, maar wat als je wilt dat een functie iets berekent en je het resultaat teruggeeft? Daar komen returnwaarden in beeld. In plaats van alleen iets weer te geven, kan een functie een waarde teruggeven die je kunt opslaan in een variabele of gebruiken in andere delen van je code. Om een waarde terug te sturen, gebruik je het sleutelwoord return gevolgd door wat je wilt retourneren: Hier is iets belangrijks: wanneer een functie een return-statement bereikt, stopt het onmiddellijk met uitvoeren en stuurt die waarde terug naar degene die de functie heeft opgeroepen. Laten we onze begroetingsfunctie aanpassen om het bericht terug te geven in plaats van het te printen: Nu, in plaats van de begroeting te printen, maakt deze functie het bericht en geeft het aan ons terug. Om de geretourneerde waarde te gebruiken, kunnen we deze opslaan in een variabele zoals elke andere waarde: Nu bevat greetingMessage "Hello, Christopher" en kunnen we het overal in onze code gebruiken – om het op een webpagina weer te geven, in een e-mail op te nemen, of door te geven aan een andere functie. ### 🔄 Returnwaarden Controle: Resultaten Terugkrijgen Evalueer je begrip van returnwaarden: - Wat gebeurt er met code na een return-statement in een functie? - Waarom is het vaak beter om waarden terug te geven dan alleen naar de console te printen? - Kan een functie verschillende soorten waarden retourneren (string, nummer, boolean)? ## Functies als parameters voor functies Functies kunnen worden doorgegeven als parameters aan andere functies. Hoewel dit concept aanvankelijk complex kan lijken, is het een krachtige functie die flexibele programmeerpatronen mogelijk maakt. Dit patroon is super gebruikelijk wanneer je wilt zeggen "wanneer iets gebeurt, doe dan dit andere ding." Bijvoorbeeld, "wanneer de timer afloopt, voer deze code uit" of "wanneer de gebruiker op de knop klikt, roep deze functie op." Laten we kijken naar setTimeout, een ingebouwde functie die een bepaalde tijd wacht en vervolgens wat code uitvoert. We moeten aangeven welke code moet worden uitgevoerd – perfect gebruik voor het doorgeven van een functie! Probeer deze code – na 3 seconden zie je een bericht: Let op hoe we displayDone (zonder haakjes) doorgeven aan setTimeout. We roepen de functie niet zelf op – we geven deze door aan setTimeout en zeggen "roep dit over 3 seconden op." ### Anonieme functies Soms heb je een functie nodig voor slechts één ding en wil je hem geen naam geven. Denk erover na – als je een functie maar één keer gebruikt, waarom zou je je code vervuilen met een extra naam? JavaScript laat je anonieme functies maken – functies zonder namen die je kunt definiëren waar je ze nodig hebt. Hier is hoe we ons timervoorbeeld kunnen herschrijven met een anonieme functie: Dit bereikt hetzelfde resultaat, maar de functie wordt direct binnen de setTimeout-aanroep gedefinieerd, waardoor een aparte functiedefinitie overbodig wordt. ### Fat arrow functies Modern JavaScript heeft een nog kortere manier om functies te schrijven, genaamd arrow functions. Ze gebruiken => (wat eruitziet als een pijl – snap je?) en zijn super populair bij ontwikkelaars. Arrow functions laten je het sleutelwoord function overslaan en meer beknopte code schrijven. Hier is ons timervoorbeeld met een arrow function: De () is waar parameters zouden gaan (leeg in dit geval), dan komt de pijl =>, en ten slotte de functiebody in accolades. Dit biedt dezelfde functionaliteit met een meer beknopte syntaxis. ### Wanneer gebruik je welke strategie? Wanneer moet je elke aanpak gebruiken? Een praktische richtlijn: als je de functie meerdere keren zult gebruiken, geef hem een naam en definieer hem apart. Als het voor één specifiek gebruik is, overweeg een anonieme functie. Zowel arrow functions als traditionele syntaxis zijn geldige keuzes, hoewel arrow functions veel voorkomen in moderne JavaScript-codebases. ### 🎨 Functiestijlen Beheersingscontrole: Kies de juiste syntaxis Test je begrip van syntaxis: - Wanneer zou je arrow functions verkiezen boven traditionele functiesyntaxis? - Wat is het belangrijkste voordeel van anonieme functies? - Kun je een situatie bedenken waarin een benoemde functie beter is dan een anonieme? --- ## 🚀 Uitdaging Kun je in één zin het verschil tussen functies en methoden uitleggen? Probeer het eens! ## GitHub Copilot Agent Uitdaging 🚀 Gebruik de Agent-modus om de volgende uitdaging te voltooien: Beschrijving: Maak een hulpbibliotheek van wiskundige functies die verschillende functieconcepten demonstreert die in deze les zijn behandeld, inclusief parameters, standaardwaarden, returnwaarden en arrow functions. Prompt: Maak een JavaScript-bestand genaamd mathUtils.js dat de volgende functies bevat: 1. Een functie add die twee parameters neemt en hun som retourneert 2. Een functie multiply met standaardwaarden voor parameters (de tweede parameter standaard op 1) 3. Een arrow function square die een getal neemt en het kwadraat retourneert 4. Een functie calculate die een andere functie accepteert als parameter en twee getallen, en vervolgens de functie toepast op die getallen 5. Demonstreer het oproepen van elke functie met geschikte testcases Meer informatie over agent mode hier. ## Quiz na de les Quiz na de les ## Review & Zelfstudie Het is de moeite waard om wat meer te lezen over arrow functions, aangezien ze steeds vaker worden gebruikt in codebases. Oefen met het schrijven van een functie en herschrijf deze vervolgens met deze syntaxis. ## Opdracht Fun met Functies --- ## 🧰 Samenvatting van je JavaScript Functies Toolkit --- ## 🚀 Je JavaScript Functies Beheersings Tijdlijn ### ⚡ Wat je kunt doen in de komende 5 minuten - [ ] Schrijf een eenvoudige functie die je favoriete nummer retourneert - [ ] Maak een functie met twee parameters die ze bij elkaar optelt - [ ] Probeer een traditionele functie om te zetten naar pijlfunctie-syntaxis - [ ] Oefen de uitdaging: leg het verschil uit tussen functies en methoden ### 🎯 Wat Je Deze Uur Kunt Bereiken - [ ] Maak de quiz na de les en bekijk eventuele verwarrende concepten - [ ] Bouw de wiskundige hulpprogrammabibliotheek uit de GitHub Copilot-uitdaging - [ ] Maak een functie die een andere functie als parameter gebruikt - [ ] Oefen het schrijven van functies met standaardparameters - [ ] Experimenteer met template literals in de returnwaarden van functies ### 📅 Jouw Week-Lange Functiebeheersing - [ ] Maak de opdracht "Plezier met Functies" met creativiteit af - [ ] Refactor wat herhalende code die je hebt geschreven naar herbruikbare functies - [ ] Bouw een kleine rekenmachine met alleen functies (geen globale variabelen) - [ ] Oefen pijlfuncties met array-methoden zoals map() en filter() - [ ] Maak een verzameling hulpfuncties voor veelvoorkomende taken - [ ] Bestudeer hogere-orde functies en concepten van functioneel programmeren ### 🌟 Jouw Maand-Lange Transformatie - [ ] Beheers geavanceerde functieconcepten zoals closures en scope - [ ] Bouw een project dat sterk gebruik maakt van functiecompositie - [ ] Draag bij aan open source door functiedocumentatie te verbeteren - [ ] Leer iemand anders over functies en verschillende syntaxisstijlen - [ ] Verken paradigmas van functioneel programmeren in JavaScript - [ ] Maak een persoonlijke bibliotheek van herbruikbare functies voor toekomstige projecten ### 🏆 Eindcontrole Functiekampioen Vier je beheersing van functies: - Wat is de meest nuttige functie die je tot nu toe hebt gemaakt? - Hoe heeft het leren over functies je manier van denken over codeorganisatie veranderd? - Welke functiesyntaxis heeft jouw voorkeur en waarom? - Welk probleem uit de echte wereld zou je oplossen door een functie te schrijven? --- Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.

javascript

JavaScript Basis: Beslissingen nemen

Heb je je ooit afgevraagd hoe applicaties slimme beslissingen nemen? Zoals hoe een navigatiesysteem de snelste route kiest, of hoe een thermostaat bepaalt wanneer de verwarming aan moet? Dit is het fundamentele concept van besluitvorming in programmeren. Net zoals Charles Babbage's Analytical Engine ontworpen was om verschillende reeksen operaties uit te voeren op basis van voorwaarden, moeten moderne JavaScript-programma's keuzes maken op basis van verschillende omstandigheden. Deze mogelijkheid om te vertakken en beslissingen te nemen, is wat statische code transformeert in responsieve, intelligente applicaties. In deze les leer je hoe je conditionele logica in je programma's implementeert. We gaan conditionele statements, vergelijkingsoperatoren en logische expressies verkennen die je code in staat stellen situaties te evalueren en gepast te reageren. ## Pre-Les Quiz Pre-les quiz De mogelijkheid om beslissingen te nemen en de stroom van een programma te beheersen, is een fundamenteel aspect van programmeren. Dit gedeelte behandelt hoe je het uitvoeringspad van je JavaScript-programma's kunt controleren met behulp van Booleaanse waarden en conditionele logica. [](https://youtube.com/watch?v=SxTp8j-fMMY "Beslissingen nemen") ## Een korte herhaling over Booleans Voordat we besluitvorming verkennen, laten we Booleaanse waarden uit onze vorige les opnieuw bekijken. Genoemd naar wiskundige George Boole, vertegenwoordigen deze waarden binaire toestanden – ofwel true of false. Er is geen ambiguïteit, geen middenweg. Deze binaire waarden vormen de basis van alle computationele logica. Elke beslissing die je programma neemt, komt uiteindelijk neer op een Booleaanse evaluatie. Het maken van Booleaanse variabelen is eenvoudig: Dit creëert twee variabelen met expliciete Booleaanse waarden. ✅ Booleans zijn genoemd naar de Engelse wiskundige, filosoof en logicus George Boole (1815–1864). ## Vergelijkingsoperatoren en Booleans In de praktijk stel je zelden handmatig Booleaanse waarden in. In plaats daarvan genereer je ze door voorwaarden te evalueren: "Is dit getal groter dan dat?" of "Zijn deze waarden gelijk?" Vergelijkingsoperatoren maken deze evaluaties mogelijk. Ze vergelijken waarden en geven Booleaanse resultaten terug op basis van de relatie tussen de operanden. ✅ Test je kennis door enkele vergelijkingen te schrijven in de console van je browser. Verrast een van de geretourneerde gegevens je? ### 🧠 Vergelijkingsvaardigheidstest: Begrijpen van Booleaanse logica Test je begrip van vergelijkingen: - Waarom denk je dat === (strikte gelijkheid) over het algemeen de voorkeur heeft boven == (losse gelijkheid)? - Kun je voorspellen wat 5 === '5' retourneert? En 5 == '5'? - Wat is het verschil tussen !== en !=? ## If Statement De if-statement is als een vraag stellen in je code. "Als deze voorwaarde waar is, doe dan dit." Het is waarschijnlijk het belangrijkste hulpmiddel dat je zult gebruiken om beslissingen te nemen in JavaScript. Zo werkt het: De voorwaarde gaat binnen de haakjes, en als het true is, voert JavaScript de code binnen de accolades uit. Als het false is, slaat JavaScript dat hele blok gewoon over. Je zult vaak vergelijkingsoperatoren gebruiken om deze voorwaarden te creëren. Laten we een praktisch voorbeeld bekijken: Omdat 1000 >= 800 evalueert naar true, wordt de code binnen het blok uitgevoerd, en wordt "Een nieuwe laptop kopen!" weergegeven in de console. ## If..Else Statement Maar wat als je wilt dat je programma iets anders doet wanneer de voorwaarde false is? Daar komt else om de hoek kijken – het is als een back-upplan. De else-statement geeft je een manier om te zeggen "als deze voorwaarde niet waar is, doe dan dit andere ding." Nu, omdat 500 >= 800 false is, slaat JavaScript het eerste blok over en voert het het else-blok uit. Je ziet "Kan nog geen nieuwe laptop betalen!" in de console. ✅ Test je begrip van deze code en de volgende code door deze uit te voeren in een browserconsole. Verander de waarden van de variabelen currentMoney en laptopPrice om de geretourneerde console.log() te wijzigen. ### 🎯 If-Else Logica Check: Vertakkende paden Evalueer je begrip van conditionele logica: - Wat gebeurt er als currentMoney precies gelijk is aan laptopPrice? - Kun je een scenario uit het echte leven bedenken waarin if-else logica nuttig zou zijn? - Hoe zou je dit kunnen uitbreiden om meerdere prijsklassen te behandelen? ## Switch Statement Soms moet je één waarde vergelijken met meerdere opties. Hoewel je verschillende if..else-statements kunt koppelen, wordt deze aanpak onhandig. De switch-statement biedt een overzichtelijkere structuur voor het omgaan met meerdere discrete waarden. Het concept lijkt op de mechanische schakelsystemen die in vroege telefooncentrales werden gebruikt – één invoerwaarde bepaalt welk specifiek pad de uitvoering volgt. Zo is het gestructureerd: - JavaScript evalueert de expressie één keer - Het doorzoekt elke case om een match te vinden - Wanneer het een match vindt, voert het dat codeblok uit - De break vertelt JavaScript om te stoppen en de switch te verlaten - Als geen enkele case overeenkomt, voert het het default-blok uit (als je er een hebt) In dit voorbeeld ziet JavaScript dat dayNumber 2 is, vindt de overeenkomende case 2, stelt dayName in op "Dinsdag", en breekt vervolgens uit de switch. Het resultaat? "Vandaag is het dinsdag" wordt gelogd in de console. ✅ Test je begrip van deze code en de volgende code door deze uit te voeren in een browserconsole. Verander de waarden van de variabele a om de geretourneerde console.log() te wijzigen. ### 🔄 Switch Statement Vaardigheidstest: Meerdere opties Test je begrip van switch: - Wat gebeurt er als je een break-statement vergeet? - Wanneer zou je een switch gebruiken in plaats van meerdere if-else-statements? - Waarom is de default-case nuttig, zelfs als je denkt dat je alle mogelijkheden hebt gedekt? ## Logische operatoren en Booleans Complexe beslissingen vereisen vaak het gelijktijdig evalueren van meerdere voorwaarden. Net zoals Booleaanse algebra wiskundigen in staat stelt logische expressies te combineren, biedt programmeren logische operatoren om meerdere Booleaanse voorwaarden te verbinden. Deze operatoren maken geavanceerde conditionele logica mogelijk door eenvoudige true/false-evaluaties te combineren. Deze operatoren laten je voorwaarden op nuttige manieren combineren: - EN (&&) betekent dat beide voorwaarden waar moeten zijn - OF (||) betekent dat minstens één voorwaarde waar moet zijn - NIET (!) keert true om naar false (en vice versa) ## Voorwaarden en beslissingen met logische operatoren Laten we deze logische operatoren in actie zien met een realistischer voorbeeld: In dit voorbeeld: we berekenen een korting van 20% (640), en evalueren vervolgens of onze beschikbare middelen ofwel de volledige prijs OF de kortingsprijs dekken. Omdat 600 voldoet aan de kortingsprijsdrempel van 640, evalueert de voorwaarde naar true. ### 🧮 Logische operatoren Check: Voorwaarden combineren Test je begrip van logische operatoren: - In de expressie A && B, wat gebeurt er als A false is? Wordt B überhaupt geëvalueerd? - Kun je een situatie bedenken waarin je alle drie de operatoren (&&, ||, !) samen nodig hebt? - Wat is het verschil tussen !user.isActive en user.isActive !== true? ### Negatie-operator Soms is het makkelijker om te denken aan wanneer iets NIET waar is. Zoals in plaats van te vragen "Is de gebruiker ingelogd?", kun je vragen "Is de gebruiker NIET ingelogd?" Het uitroepteken (!) operator keert de logica voor je om. De !-operator is als zeggen "het tegenovergestelde van..." – als iets true is, maakt ! het false, en vice versa. ### Ternary Expressies Voor eenvoudige conditionele toewijzingen biedt JavaScript de ternary operator. Deze beknopte syntaxis stelt je in staat een conditionele expressie in één regel te schrijven, handig wanneer je één van twee waarden moet toewijzen op basis van een voorwaarde. Het leest als een vraag: "Is deze voorwaarde waar? Zo ja, gebruik deze waarde. Zo nee, gebruik die waarde." Hieronder een tastbaarder voorbeeld: ✅ Neem een minuut om deze code een paar keer te lezen. Begrijp je hoe deze operatoren werken? Dit is wat deze regel zegt: "Is firstNumber groter dan secondNumber? Zo ja, zet firstNumber in biggestNumber. Zo nee, zet secondNumber in biggestNumber." De ternary operator is gewoon een kortere manier om deze traditionele if..else-statement te schrijven: Beide benaderingen leveren identieke resultaten op. De ternary operator biedt beknoptheid, terwijl de traditionele if-else structuur mogelijk beter leesbaar is voor complexe voorwaarden. --- ## 🚀 Uitdaging Maak een programma dat eerst wordt geschreven met logische operatoren, en herschrijf het vervolgens met een ternary expressie. Wat is jouw favoriete syntaxis? --- ## GitHub Copilot Agent Uitdaging 🚀 Gebruik de Agent-modus om de volgende uitdaging te voltooien: Beschrijving: Maak een uitgebreide cijfercalculator die meerdere besluitvormingsconcepten uit deze les demonstreert, inclusief if-else statements, switch statements, logische operatoren en ternary expressies. Prompt: Schrijf een JavaScript-programma dat de numerieke score (0-100) van een student neemt en hun lettercijfer bepaalt met behulp van de volgende criteria: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Onder 60 Vereisten: 1. Gebruik een if-else statement om het lettercijfer te bepalen 2. Gebruik logische operatoren om te controleren of de student slaagt (cijfer >= 60) EN met onderscheiding (cijfer >= 90) 3. Gebruik een switch-statement om specifieke feedback te geven voor elk lettercijfer 4. Gebruik een ternary-operator om te bepalen of de student in aanmerking komt voor de volgende cursus (cijfer >= 70) 5. Voeg invoervalidatie toe om ervoor te zorgen dat de score tussen 0 en 100 ligt Test je programma met verschillende scores, inclusief randgevallen zoals 59, 60, 89, 90 en ongeldige invoer. Meer informatie over agent mode vind je hier. ## Quiz na de les Quiz na de les ## Review & Zelfstudie Lees meer over de vele operatoren die beschikbaar zijn voor de gebruiker op MDN. Bekijk Josh Comeau's geweldige operator lookup! ## Opdracht Operatoren --- ## 🧠 Samenvatting van jouw besluitvormingsgereedschap --- ## 🚀 Jouw JavaScript Besluitvormingsmeesterschap Tijdlijn ### ⚡ Wat je in de komende 5 minuten kunt doen - [ ] Oefen met vergelijkingsoperatoren in de console van je browser - [ ] Schrijf een eenvoudige if-else statement die je leeftijd controleert - [ ] Probeer de uitdaging: herschrijf een if-else met een ternary-operator - [ ] Test wat er gebeurt met verschillende "truthy" en "falsy" waarden ### 🎯 Wat je in dit uur kunt bereiken - [ ] Maak de quiz na de les en bekijk eventuele verwarrende concepten - [ ] Bouw de uitgebreide cijfercalculator uit de GitHub Copilot-uitdaging - [ ] Maak een eenvoudige beslisboom voor een scenario uit het dagelijks leven (zoals kiezen wat je aantrekt) - [ ] Oefen met het combineren van meerdere voorwaarden met logische operatoren - [ ] Experimenteer met switch-statements voor verschillende toepassingen ### 📅 Jouw weeklange logica-meesterschap - [ ] Voltooi de opdracht over operatoren met creatieve voorbeelden - [ ] Bouw een mini-quizapplicatie met verschillende conditionele structuren - [ ] Maak een formuliervalidator die meerdere invoercondities controleert - [ ] Oefen met de oefeningen van Josh Comeau's operator lookup - [ ] Refactor bestaande code om meer geschikte conditionele structuren te gebruiken - [ ] Bestudeer short-circuit evaluatie en prestatie-implicaties ### 🌟 Jouw transformatie van een maand - [ ] Beheers complexe geneste voorwaarden en behoud codeleesbaarheid - [ ] Bouw een applicatie met geavanceerde besluitvormingslogica - [ ] Draag bij aan open source door de conditionele logica in bestaande projecten te verbeteren - [ ] Leer iemand anders over verschillende conditionele structuren en wanneer je ze moet gebruiken - [ ] Verken functionele programmeerbenaderingen voor conditionele logica - [ ] Maak een persoonlijke referentiegids voor de beste praktijken van conditionele logica ### 🏆 Eindcontrole voor Besluitvormingskampioen Vier je meesterschap in logisch denken: - Wat is de meest complexe besluitvormingslogica die je succesvol hebt geïmplementeerd? - Welke conditionele structuur voelt het meest natuurlijk voor jou en waarom? - Hoe heeft het leren over logische operatoren je probleemoplossende aanpak veranderd? - Welke toepassing in de echte wereld zou profiteren van geavanceerde besluitvormingslogica? --- Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.

javascript

JavaScript Basis: Arrays en Lussen

## Pre-Les Quiz Pre-les quiz Heb je je ooit afgevraagd hoe websites bijhouden wat er in je winkelwagentje zit of je vriendenlijst weergeven? Dat is waar arrays en lussen van pas komen. Arrays zijn als digitale containers die meerdere stukjes informatie kunnen bevatten, terwijl lussen je in staat stellen om efficiënt met al die gegevens te werken zonder herhalende code. Samen vormen deze twee concepten de basis voor het verwerken van informatie in je programma's. Je leert hoe je van het handmatig uitschrijven van elke stap kunt overstappen naar het maken van slimme, efficiënte code die honderden of zelfs duizenden items snel kan verwerken. Aan het einde van deze les begrijp je hoe je complexe datataken kunt uitvoeren met slechts een paar regels code. Laten we deze essentiële programmeerconcepten verkennen. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Lussen") ## Arrays Denk aan arrays als een digitale archiefkast - in plaats van één document per lade op te slaan, kun je meerdere gerelateerde items organiseren in één gestructureerde container. In programmeertermen stellen arrays je in staat om meerdere stukjes informatie in één georganiseerd pakket op te slaan. Of je nu een fotogalerij bouwt, een takenlijst beheert of de hoogste scores in een spel bijhoudt, arrays vormen de basis voor gegevensorganisatie. Laten we eens kijken hoe ze werken. ✅ Arrays zijn overal om ons heen! Kun je een voorbeeld bedenken van een array in het echte leven, zoals een zonnepaneelarray? ### Arrays maken Het maken van een array is super eenvoudig - gebruik gewoon vierkante haken! Wat gebeurt hier? Je hebt net een lege container gemaakt met die vierkante haken []. Denk eraan als een lege boekenplank - het is klaar om te vullen met de boeken die je daar wilt organiseren. Je kunt je array ook meteen vullen met beginwaarden: Interessante dingen om op te merken: - Je kunt tekst, getallen of zelfs waar/onwaar waarden in dezelfde array opslaan - Scheid elk item gewoon met een komma - simpel! - Arrays zijn perfect om gerelateerde informatie bij elkaar te houden ### Indexering van Arrays Hier is iets dat in het begin misschien ongebruikelijk lijkt: arrays nummeren hun items vanaf 0, niet vanaf 1. Deze nul-gebaseerde indexering heeft zijn oorsprong in hoe computergeheugen werkt - het is een programmeerconventie sinds de vroege dagen van computertalen zoals C. Elk plekje in de array krijgt zijn eigen adresnummer, een index genoemd. ✅ Verrast het je dat arrays beginnen bij index 0? In sommige programmeertalen beginnen indexen bij 1. Er is een interessante geschiedenis hierover, die je kunt lezen op Wikipedia. Toegang tot Array-elementen: Wat gebeurt hier: - Gebruikt vierkante haaknotatie met het indexnummer om elementen te benaderen - Geeft de waarde terug die op die specifieke positie in de array is opgeslagen - Begint te tellen vanaf 0, waardoor het eerste element index 0 heeft Wijzigen van Array-elementen: In het bovenstaande hebben we: - Gewijzigd het element op index 4 van "Rocky Road" naar "Butter Pecan" - Een nieuw element toegevoegd "Cookie Dough" op index 5 - De lengte van de array automatisch uitgebreid bij het toevoegen buiten de huidige grenzen ### Arraylengte en veelgebruikte methoden Arrays hebben ingebouwde eigenschappen en methoden die het werken met gegevens veel eenvoudiger maken. Arraylengte vinden: Belangrijke punten om te onthouden: - Geeft het totale aantal elementen in de array terug - Wordt automatisch bijgewerkt wanneer elementen worden toegevoegd of verwijderd - Biedt een dynamische telling die handig is voor lussen en validatie Essentiële Array-methoden: Begrijp deze methoden: - Voegt elementen toe met push() (einde) en unshift() (begin) - Verwijdert elementen met pop() (einde) en shift() (begin) - Vindt elementen met indexOf() en controleert bestaan met includes() - Geeft nuttige waarden terug zoals verwijderde elementen of positie-indexen ✅ Probeer het zelf! Gebruik de console van je browser om een array te maken en te manipuleren die je zelf hebt bedacht. ### 🧠 Array Basiscontrole: Organiseer je gegevens Test je begrip van arrays: - Waarom denk je dat arrays beginnen te tellen vanaf 0 in plaats van 1? - Wat gebeurt er als je probeert toegang te krijgen tot een index die niet bestaat (zoals arr[100] in een array met 5 elementen)? - Kun je drie scenario's uit het echte leven bedenken waarin arrays nuttig zouden zijn? ## Lussen Denk aan de beroemde straf uit Charles Dickens' romans waar studenten herhaaldelijk regels moesten schrijven op een lei. Stel je voor dat je iemand gewoon kon instrueren om "schrijf deze zin 100 keer" en het automatisch gedaan krijgt. Dat is precies wat lussen doen voor je code. Lussen zijn als een onvermoeibare assistent die taken zonder fouten kan herhalen. Of je nu elk item in een winkelwagentje moet controleren of alle foto's in een album moet weergeven, lussen verwerken de herhaling efficiënt. JavaScript biedt verschillende soorten lussen om uit te kiezen. Laten we ze allemaal bekijken en begrijpen wanneer je ze moet gebruiken. ### For-lus De for-lus is als het instellen van een timer - je weet precies hoe vaak je wilt dat iets gebeurt. Het is super georganiseerd en voorspelbaar, wat het perfect maakt wanneer je met arrays werkt of dingen moet tellen. Structuur van een For-lus: Stap voor stap, wat gebeurt er: - Initialiseert de teller variabele i op 0 aan het begin - Controleert de voorwaarde i < 10 voor elke iteratie - Voert de codeblok uit wanneer de voorwaarde waar is - Verhoogt i met 1 na elke iteratie met i++ - Stopt wanneer de voorwaarde onwaar wordt (wanneer i 10 bereikt) ✅ Voer deze code uit in een browserconsole. Wat gebeurt er als je kleine wijzigingen aanbrengt in de teller, voorwaarde of iteratie-uitdrukking? Kun je het achteruit laten lopen, een aftelling maken? ### 🗓️ For-lus Beheersingscontrole: Gecontroleerde Herhaling Evalueer je begrip van for-lussen: - Wat zijn de drie delen van een for-lus en wat doet elk deel? - Hoe zou je een array achteruit doorlopen? - Wat gebeurt er als je het increment-deel (i++) vergeet? ### While-lus De while-lus is als zeggen "blijf dit doen totdat..." - je weet misschien niet precies hoe vaak het zal draaien, maar je weet wanneer je moet stoppen. Het is perfect voor dingen zoals een gebruiker om input vragen totdat ze geven wat je nodig hebt, of door gegevens zoeken totdat je vindt wat je zoekt. Kenmerken van een While-lus: - Blijft uitvoeren zolang de voorwaarde waar is - Vereist handmatige beheer van eventuele tellervariabelen - Controleert de voorwaarde vóór elke iteratie - Risico op oneindige lussen als de voorwaarde nooit onwaar wordt Begrijp deze voorbeelden: - Beheert de tellervariabele i handmatig binnen de lus - Verhoogt de teller om oneindige lussen te voorkomen - Toont praktisch gebruik met gebruikersinput en poginglimieten - Bevat veiligheidsmechanismen om eindeloze uitvoering te voorkomen ### ♾️ While-lus Wijsheid Controle: Voorwaarde-gebaseerde Herhaling Test je begrip van while-lussen: - Wat is het grootste gevaar bij het gebruik van while-lussen? - Wanneer zou je een while-lus verkiezen boven een for-lus? - Hoe kun je oneindige lussen voorkomen? ### Moderne Alternatieven voor Lussen JavaScript biedt moderne lus-syntaxis die je code leesbaarder en minder foutgevoelig kan maken. For...of-lus (ES6+): Belangrijkste voordelen van for...of: - Elimineert indexbeheer en mogelijke off-by-one fouten - Biedt directe toegang tot array-elementen - Verbetert de leesbaarheid van code en vermindert syntaxiscomplexiteit forEach-methode: Wat je moet weten over forEach: - Voert een functie uit voor elk array-element - Biedt zowel elementwaarde als index als parameters - Kan niet vroegtijdig worden gestopt (in tegenstelling tot traditionele lussen) - Geeft undefined terug (maakt geen nieuwe array) ✅ Waarom zou je een for-lus kiezen boven een while-lus? 17K kijkers hadden dezelfde vraag op StackOverflow, en sommige van de meningen kunnen interessant voor je zijn. ### 🎨 Moderne Lus-syntaxis Controle: Omarm ES6+ Beoordeel je begrip van moderne JavaScript: - Wat zijn de voordelen van for...of boven traditionele for-lussen? - Wanneer zou je nog steeds traditionele for-lussen verkiezen? - Wat is het verschil tussen forEach en map? ## Lussen en Arrays Het combineren van arrays met lussen creëert krachtige mogelijkheden voor gegevensverwerking. Deze combinatie is fundamenteel voor veel programmeertaken, van het weergeven van lijsten tot het berekenen van statistieken. Traditionele Array-verwerking: Laten we elke aanpak begrijpen: - Gebruikt de eigenschap arraylengte om de lusgrens te bepalen - Benadert elementen via index in traditionele for-lussen - Biedt directe toegang tot elementen in for...of-lussen - Verwerkt elk array-element precies één keer Praktisch voorbeeld van gegevensverwerking: Hoe deze code werkt: - Initialiseert trackingvariabelen voor som en extremen - Verwerkt elke score met een enkele efficiënte lus - Accumulateert het totaal voor gemiddelde berekening - Houdt hoogste en laagste waarden bij tijdens iteratie - Bereken uiteindelijke statistieken na voltooiing van de lus ✅ Experimenteer met het doorlopen van een array die je zelf hebt gemaakt in de console van je browser. --- ## GitHub Copilot Agent Uitdaging 🚀 Gebruik de Agent-modus om de volgende uitdaging te voltooien: Beschrijving: Bouw een uitgebreide gegevensverwerkingsfunctie die arrays en lussen combineert om een dataset te analyseren en zinvolle inzichten te genereren. Prompt: Maak een functie genaamd analyzeGrades die een array van studentcijferobjecten (elk met naam- en score-eigenschappen) neemt en een object retourneert met statistieken, waaronder de hoogste score, laagste score, gemiddelde score, aantal studenten die geslaagd zijn (score >= 70), en een array van studentnamen die boven gemiddeld scoorden. Gebruik minstens twee verschillende soorten lussen in je oplossing. Lees meer over agent-modus hier. ## 🚀 Uitdaging JavaScript biedt verschillende moderne array-methoden die traditionele loops kunnen vervangen voor specifieke taken. Ontdek forEach, for-of, map, filter en reduce. Jouw uitdaging: Refactor het voorbeeld van studentencijfers met minstens drie verschillende array-methoden. Merk op hoe veel schoner en leesbaarder de code wordt met moderne JavaScript-syntaxis. ## Quiz na de les Quiz na de les ## Review & Zelfstudie Arrays in JavaScript hebben veel methoden die erg handig zijn voor datamanipulatie. Lees meer over deze methoden en probeer er een paar uit (zoals push, pop, slice en splice) op een array die je zelf maakt. ## Opdracht Loop een Array --- ## 📊 Samenvatting van jouw Arrays & Loops Toolkit --- ## 🚀 Jouw Arrays & Loops Meesterschap Tijdlijn ### ⚡ Wat je in de komende 5 minuten kunt doen - [ ] Maak een array van je favoriete films en raadpleeg specifieke elementen - [ ] Schrijf een for-loop die telt van 1 tot 10 - [ ] Probeer de uitdaging met moderne array-methoden uit de les - [ ] Oefen met array-indexering in de console van je browser ### 🎯 Wat je in dit uur kunt bereiken - [ ] Maak de quiz na de les en bekijk eventuele moeilijke concepten opnieuw - [ ] Bouw de uitgebreide cijferanalysator uit de GitHub Copilot-uitdaging - [ ] Maak een eenvoudige winkelwagen die items toevoegt en verwijdert - [ ] Oefen met het converteren tussen verschillende looptypes - [ ] Experimenteer met array-methoden zoals push, pop, slice en splice ### 📅 Jouw weeklange dataverwerkingsreis - [ ] Voltooi de "Loop een Array"-opdracht met creatieve verbeteringen - [ ] Bouw een to-do lijst applicatie met arrays en loops - [ ] Maak een eenvoudige statistiekcalculator voor numerieke gegevens - [ ] Oefen met MDN array-methoden - [ ] Bouw een fotogalerij of muziekplaylist-interface - [ ] Verken functioneel programmeren met map, filter en reduce ### 🌟 Jouw maandlange transformatie - [ ] Beheers geavanceerde array-bewerkingen en prestatieoptimalisatie - [ ] Bouw een compleet datavisualisatiedashboard - [ ] Draag bij aan open source-projecten die dataverwerking omvatten - [ ] Leer iemand anders over arrays en loops met praktische voorbeelden - [ ] Maak een persoonlijke bibliotheek van herbruikbare dataverwerkingsfuncties - [ ] Verken algoritmen en datastructuren gebaseerd op arrays ### 🏆 Eindcontrole Data Processing Kampioen Vier je meesterschap over arrays en loops: - Wat is de meest nuttige array-bewerking die je hebt geleerd voor toepassingen in de echte wereld? - Welk type loop voelt het meest natuurlijk voor jou en waarom? - Hoe heeft het begrijpen van arrays en loops je aanpak voor het organiseren van gegevens veranderd? - Welke complexe dataverwerkingstaak zou je hierna willen aanpakken? --- Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.

javascript,array

Introduksjon til JavaScript

JavaScript er språket for nettet. I disse fire leksjonene vil du lære det grunnleggende. ### Emner 1. Variabler og Datatyper 2. Funksjoner og Metoder 3. Ta Beslutninger med JavaScript 4. Arrayer og Løkker ### Kreditering Disse leksjonene ble skrevet med ♥️ av Jasmine Greenaway, Christopher Harrison og Chris Noring --- Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.

javascript

JavaScript grunnleggende: Datatyper

Datatyper er et av de grunnleggende konseptene i JavaScript som du vil møte i hvert program du skriver. Tenk på datatyper som arkivsystemet brukt av de gamle bibliotekarene i Alexandria – de hadde spesifikke plasser for ruller som inneholdt poesi, matematikk og historiske opptegnelser. JavaScript organiserer informasjon på lignende måte med forskjellige kategorier for ulike typer data. I denne leksjonen skal vi utforske de kjerne datatypene som gjør at JavaScript fungerer. Du vil lære hvordan du håndterer tall, tekst, true/false verdier, og forstå hvorfor det er viktig å velge riktig datatype for programmene dine. Disse konseptene kan virke abstrakte i starten, men med praksis blir de naturlige. Å forstå datatyper vil gjøre alt annet i JavaScript mye klarere. Akkurat som arkitekter må forstå forskjellige byggematerialer før de konstruerer en katedral, vil disse grunnprinsippene støtte alt du bygger fremover. ## Forhåndsquiz Forhåndsquiz Denne leksjonen dekker det grunnleggende i JavaScript, språket som gir interaktivitet på nettet. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variabler i JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Datatyper i JavaScript") La oss starte med variabler og datatypene som fyller dem! ## Variabler Variabler er grunnleggende byggeklosser i programmering. Som de merkede krukkene som middelalderens alkymister brukte til å lagre forskjellige stoffer, lar variabler deg lagre informasjon og gi den et beskrivende navn slik at du kan referere til det senere. Trenger du å huske noen sin alder? Lagre det i en variabel kalt age. Vil du spore en brukers navn? Ha det i en variabel kalt userName. Vi vil fokusere på den moderne tilnærmingen til å lage variabler i JavaScript. Teknikker du lærer her representerer års utvikling av språket og beste praksis utviklet av programmeringsmiljøet. Å opprette og deklarere en variabel har følgende syntaks [keyword] [name]. Den består av to deler: - Nøkkelord. Bruk let for variabler som kan endres, eller const for verdier som forblir de samme. - Variabelnavnet, dette er et beskrivende navn du velger selv. ✅ Nøkkelordet let ble introdusert i ES6 og gir variabelen din det som kalles _blokksområde_. Det anbefales at du bruker let eller const i stedet for det eldre nøkkelordet var. Vi vil gå mer i dybden på blokksområder i fremtidige deler. ### Oppgave - jobbe med variabler 1. Deklarer en variabel. La oss starte med å lage vår første variabel: ```javascript let myVariable; ``` Hva dette gjør: - Dette forteller JavaScript å opprette et lagringssted kalt myVariable - JavaScript allokerer plass i minnet for denne variabelen - Variabelen har foreløpig ingen verdi (undefined) 2. Gi den en verdi. Nå setter vi noe i variabelen vår: ```javascript myVariable = 123; ``` Hvordan tildeling fungerer: - Operatoren = tildeler verdien 123 til vår variabel - Variabelen inneholder nå denne verdien i stedet for å være undefined - Du kan referere til denne verdien gjennom koden din med myVariable > Merk: Bruken av = i denne leksjonen betyr at vi bruker en "tildelingsoperator", brukt til å sette en verdi til en variabel. Det betyr ikke likhet. 3. Gjør det på den smarte måten. Faktisk, la oss kombinere disse to stegene: ```javascript let myVariable = 123; ``` Denne tilnærmingen er mer effektiv: - Du deklarerer variabelen og tildeler verdi i en og samme setning - Dette er standard praksis blant utviklere - Det reduserer kodelengde samtidig som det opprettholder klarhet 4. Ombestem deg. Hva om vi vil lagre et annet tall? ```javascript myVariable = 321; ``` Forstå omtildeling: - Variabelen inneholder nå 321 i stedet for 123 - Den tidligere verdien erstattes – variabler lagrer bare én verdi om gangen - Denne mutabiliteten er kjennetegnet til variabler deklarert med let ✅ Prøv det! Du kan skrive JavaScript rett i nettleseren din. Åpne Developer Tools i nettleseren. I konsollen vil du finne en prompt; skriv let myVariable = 123, trykk enter, så skriv myVariable. Hva skjer? Du vil lære mer om disse konseptene i kommende leksjoner. ### 🧠 Variabler mestringssjekk: Bli komfortabel La oss se hvordan du føler deg om variabler: - Kan du forklare forskjellen mellom å deklarere og tildele en variabel? - Hva skjer hvis du prøver å bruke en variabel før du deklarerer den? - Når ville du velge let over const for en variabel? ## Konstanter Noen ganger trenger du å lagre informasjon som aldri skal endres under programkjøringen. Tenk på konstanter som de matematiske prinsippene Euclid etablerte i det gamle Hellas – når de var bevist og dokumentert, forble de faste for all fremtid. Konstanter fungerer likt som variabler, men med en viktig begrensning: når du har gitt dem en verdi, kan den ikke endres. Denne uforanderligheten bidrar til å forhindre utilsiktede endringer av kritiske verdier i programmet ditt. Deklarasjon og initialisering av en konstant følger de samme prinsippene som en variabel, med unntak av nøkkelordet const. Konstanter deklareres vanligvis med store bokstaver. Dette gjør koden: - Oppretter en konstant kalt MY_VARIABLE med verdien 123 - Bruker navnekonvensjon med store bokstaver for konstanter - Forhindrer fremtidige endringer i denne verdien Konstanter har to hovedregler: - Du må gi dem en verdi med én gang – ingen tomme konstanter tillatt! - Du kan aldri endre den verdien – JavaScript vil kaste en feil hvis du prøver. La oss se hva jeg mener: Enkel verdi - Følgende er IKKE tillatt: ```javascript const PI = 3; PI = 4; // ikke tillatt ``` Hva du må huske: - Forsøk på å tilordne konstanten på nytt vil forårsake en feil - Beskytter viktige verdier fra utilsiktede endringer - Sikrer at verdien forblir konsekvent gjennom programmet Objektreferanse er beskyttet - Følgende er IKKE tillatt: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ikke tillatt ``` Forstå disse konseptene: - Forhindrer å erstatte hele objektet med et nytt - Beskytter referansen til det opprinnelige objektet - Opprettholder objektets identitet i minnet Objektverdi er ikke beskyttet - Følgende ER tillatt: ```javascript const obj = { a: 3 }; obj.a = 5; // tillatt ``` Forklaring på hva som skjer her: - Endrer egenskapsverdien inne i objektet - Beholder samme objektreferanse - Demonstrerer at objektinnhold kan endres mens referansen forblir konstant > Merk at const betyr at referansen er beskyttet mot ny tildeling. Verdien er ikke _uforanderlig_ og kan endres, spesielt hvis det er en kompleks konstruksjon som et objekt. ## Datatyper JavaScript organiserer informasjon i forskjellige kategorier kalt datatyper. Dette konseptet speiler hvordan gamle lærde kategoriserte kunnskap – Aristoteles skilte mellom ulike typer resonnement, vel vitende om at logiske prinsipper ikke kunne anvendes ensartet på poesi, matematikk og naturfilosofi. Datatyper er viktige fordi ulike operasjoner fungerer med ulike typer informasjon. Akkurat som du ikke kan utføre aritmetikk på en persons navn eller alfabetisere en matematisk likning, krever JavaScript riktig datatype for hver operasjon. Å forstå dette forhindrer feil og gjør koden din mer pålitelig. Variabler kan lagre mange forskjellige typer verdier, som tall og tekst. Disse forskjellige verditypene kalles datatypen. Datatyper er en viktig del av programvareutvikling fordi det hjelper utviklere å ta beslutninger om hvordan koden skal skrives og hvordan programvaren skal kjøre. Videre har noen datatyper unike egenskaper som hjelper til å transformere eller trekke ut ekstra informasjon fra en verdi. ✅ Datatyper kalles også JavaScript-dataprimitiver, ettersom de er de laveste nivåene datatyper språket tilbyr. Det finnes 7 primitive datatyper: string, number, bigint, boolean, undefined, null og symbol. Ta et øyeblikk og visualiser hva hver av disse primitivene kan representere. Hva er en zebra? Hva med 0? true? ### Tall Tall er den mest direkte datatypen i JavaScript. Enten du jobber med hele tall som 42, desimaler som 3.14, eller negative tall som -5, håndterer JavaScript dem ensartet. Husker du variabelen vår fra tidligere? Den 123 vi lagret var faktisk av typen tall: Viktige kjennetegn: - JavaScript gjenkjenner automatisk numeriske verdier - Du kan utføre matematiske operasjoner med disse variablene - Ingen eksplisitt typedeklarasjon er påkrevd Variabler kan lagre alle typer tall, inkludert desimaler eller negative tall. Tall kan også brukes med aritmetiske operatorer, som vi tar for oss i neste seksjon. ### Aritmetiske Operatorer Aritmetiske operatorer lar deg utføre matematiske beregninger i JavaScript. Disse operatorene følger de samme prinsippene som matematikere har brukt i århundrer – de samme symbolene som dukket opp i verkene til lærde som Al-Khwarizmi, som utviklet algebraisk notasjon. Operatorene fungerer slik du forventer fra tradisjonell matematikk: pluss for addisjon, minus for subtraksjon, og så videre. Det finnes flere typer operatorer for aritmetiske funksjoner, noen av dem listet her: ✅ Prøv det! Prøv en aritmetisk operasjon i nettleserens konsoll. Overrasker resultatene deg? ### 🧮 Mattekunnskap sjekk: Beregne med selvtillit Test din forståelse av aritmetikk: - Hva er forskjellen mellom / (divisjon) og % (rest)? - Kan du forutsi hva 10 % 3 er? (Hint: det er ikke 3.33...) - Hvorfor kan restenoperatoren være nyttig i programmering? ### Strenger I JavaScript representeres tekstlig data som strenger. Begrepet "streng" kommer fra konseptet med tegn som er satt sammen i sekvens, på samme måte som skrivere i middelalderklostre koblet bokstaver for å danne ord og setninger i sine manuskripter. Strenger er grunnleggende for webutvikling. Hver tekstbit som vises på et nettsted – brukernavn, knappetiketter, feilmeldinger, innhold – håndteres som strengdata. Å forstå strenger er essensielt for å lage funksjonelle brukergrensesnitt. Strenger er sett med tegn som er plassert mellom enkle eller doble anførselstegn. Forstå disse konseptene: - Bruker enten enkle ' eller doble " anførselstegn for å definere strenger - Lagrer tekstdata som kan inkludere bokstaver, tall og symboler - Tildeler strengverdier til variabler for senere bruk - Krever anførselstegn for å skille tekst fra variabelnavn Husk å bruke anførselstegn når du skriver en streng, ellers antar JavaScript at det er et variabelnavn. ### Formatering av Strenger Strengmanipulasjon lar deg kombinere tekst-elementer, inkorporere variabler og skape dynamisk innhold som reagerer på programtilstand. Denne teknikken gjør det mulig å bygge tekst programmessig. Ofte må du slå sammen flere strenger – denne prosessen kalles konkatenasjon. For å sammenkoble to eller flere strenger, eller koble dem sammen, bruk + operatoren. Steg for steg, dette skjer: - Kombinerer flere strenger ved bruk av + operatoren - Slår sammen strenger direkte uten mellomrom i det første eksempelet - Legger til mellomroms-tegn " " mellom strengene for lesbarhet - Setter inn skilletegn som komma for å lage riktig formatering ✅ Hvorfor blir 1 + 1 = 2 i JavaScript, men '1' + '1' = 11? Tenk over det. Hva med '1' + 1? Malmelitteraler er en annen måte å formatere strenger på, bortsett fra at man bruker backtick i stedet for anførselstegn. Alt som ikke er ren tekst må plasseres inn i plassholdere ${ }. Dette inkluderer variabler som kan være strenger. La oss forstå hver del: - Bruker backticks ` `` i stedet for vanlige anførselstegn for å lage malmelitteraler - Innebygger variabler direkte ved bruk av ${}-plassholder syntaks - Bevarer mellomrom og formatering nøyaktig som skrevet - Gir en renere måte å lage komplekse strenger med variabler på Du kan oppnå formateringsmålene dine med begge metodene, men malmelitteraler respekterer eventuelle mellomrom og linjeskift. ✅ Når ville du brukt en malmelitteral i stedet for en vanlig streng? ### 🔤 Strengmestrings-sjekk: Selvsikkerhet i Tekstmanipulasjon Evaluer dine strengferdigheter: - Kan du forklare hvorfor '1' + '1' blir '11' i stedet for 2? - Hvilken strengmetode synes du er mest lesbar: sammenkobling eller malmelitteraler? - Hva skjer hvis du glemmer anførselstegn rundt en streng? ### Booleans Booleans representerer den enkleste formen for data: de kan bare ha en av to verdier – true eller false. Dette binære logikksystemet stammer fra arbeidet til George Boole, en matematiker fra 1800-tallet som utviklet boolsk algebra. Til tross for sin enkelhet er booleans essensielle for programlogikk. De gjør det mulig for koden din å ta beslutninger basert på betingelser – om en bruker er logget inn, om en knapp ble klikket, eller om visse kriterier er oppfylt. Booleans kan kun ha to verdier: true eller false. Booleans hjelper med å bestemme hvilke kodeblokker som skal kjøres når visse betingelser er oppfylt. I mange tilfeller hjelper operatorer med å sette verdien til en Boolean, og du vil ofte se og skrive variabler som initieres eller får oppdatert verdi med en operator. I eksempelet over har vi: - Opprettet en variabel som lagrer Boolean-verdien true - Vist hvordan man lagrer Boolean-verdien false - Brukt nøkkelordene true og false nøyaktig (ingen anførselstegn nødvendig) - Forberedt disse variablene for bruk i betingede utsagn ✅ En variabel kan anses som 'truthy' hvis den evalueres til en boolean true. Interessant nok er alle verdier sannhetsverdier med mindre definert som falsy i JavaScript. ### 🎯 Boolean Logikk Sjekk: Ferdigheter i Beslutningstaking Test din forståelse av boolean: - Hvorfor tror du JavaScript har "truthy" og "falsy" verdier utover bare true og false? - Kan du forutsi hvilken av disse som er falsy: 0, "0", [], "false"? - Hvordan kan booleans være nyttige ved styring av programflyt? --- ## 📊 Oppsummering av verktøykassen for datatyper ## GitHub Copilot Agent Challenge 🚀 Bruk Agent-modus for å fullføre følgende utfordring: Beskrivelse: Lag en personlig informasjonsbehandler som demonstrerer alle JavaScript-datatypene du har lært i denne leksjonen, samtidig som den håndterer virkelige datasituasjoner. Oppgave: Bygg et JavaScript-program som lager et brukerprofil-objekt som inneholder: en persons navn (streng), alder (nummer), status som student (boolean), favorittfarger som en array, og et adresse-objekt med gate, by og postnummer-egenskaper. Inkluder funksjoner for å vise profilinformasjonen og oppdatere individuelle felt. Sørg for å demonstrere strengsammenkobling, malmelitteraler, aritmetiske operasjoner med alder, og boolsk logikk for studentstatus. Les mer om agent mode her. ## 🚀 Utfordring JavaScript har noen oppførsler som kan overraske utviklere. Her er et klassisk eksempel å utforske: prøv å skrive dette i nettleserkonsollen din: let age = 1; let Age = 2; age == Age og se resultatet. Det returnerer false – kan du finne ut hvorfor? Dette er en av flere JavaScript-atferder det er verdt å forstå. Kjennskap til disse særegenhetene vil hjelpe deg å skrive mer pålitelig kode og feilsøke problemer mer effektivt. ## Post-forelesningsquiz Post-forelesningsquiz ## Gjennomgang og Selvstudium Ta en titt på denne listen med JavaScript-øvelser og prøv en. Hva lærte du? ## Oppgave Datatyper Øvelse ## 🚀 Din JavaScript Datatype-Mestrings Tidslinje ### ⚡ Hva Du Kan Gjøre Innen 5 Minutter - [ ] Åpne nettleserkonsollen din og lag 3 variabler med forskjellige datatyper - [ ] Prøv utfordringen: let age = 1; let Age = 2; age == Age og finn ut hvorfor det er false - [ ] Øv på strengsammenkobling med navnet ditt og favorittnummeret ditt - [ ] Test hva som skjer når du legger et tall til en streng ### 🎯 Hva Du Kan Få Til Denne Timen - [ ] Fullfør post-leksjonsquiz og gå gjennom eventuelle forvirrende konsepter - [ ] Lag en mini kalkulator som legger til, trekker fra, multipliserer og dividerer to tall - [ ] Lag en enkel navneformatterer ved bruk av malmelitteraler - [ ] Utforsk forskjellene mellom == og === sammenligningsoperatorer - [ ] Øv på å konvertere mellom forskjellige datatyper ### 📅 Din JavaScript-uke - [ ] Fullfør oppgaven med selvtillit og kreativitet - [ ] Lag en personlig profil-objekt med alle lærte datatyper - [ ] Øv med JavaScript-øvelser fra CSS-Tricks - [ ] Bygg en enkel skjema-validator med boolsk logikk - [ ] Eksperimenter med array- og objekt-datatyper (forhåndsvisning av kommende leksjoner) - [ ] Bli med i et JavaScript-fellesskap og stille spørsmål om datatyper ### 🌟 Din Månedslange Transformasjon - [ ] Integrer kunnskap om datatyper i større programmeringsprosjekter - [ ] Forstå når og hvorfor man skal bruke hver datatype i virkelige applikasjoner - [ ] Hjelp andre nybegynnere å forstå JavaScripts grunnprinsipper - [ ] Bygg en liten applikasjon som håndterer forskjellige typer brukerdata - [ ] Utforsk avanserte datatypeteknikker som typekoersjon og streng likhet - [ ] Bidra til open source JavaScript-prosjekter med dokumentasjonsforbedringer ### 🧠 Siste Datatype Mestrings-Sjekk Feire din JavaScript-grunnmur: - Hvilken datatype overrasket deg mest med sin oppførsel? - Hvor komfortabel føler du deg med å forklare variabler vs. konstanter til en venn? - Hva er den mest interessante tingen du oppdaget om JavaScripts typesystem? - Hvilken virkelighetsapplikasjon kan du forestille deg å bygge med disse grunnleggende konseptene? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokumentet er oversatt ved bruk av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på dets morsmål skal anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,data

JavaScript Grunnleggende: Metoder og Funksjoner

## Pre-forelesningsquiz Pre-lecture quiz Å skrive den samme koden gjentatte ganger er en av programmeringens vanligste frustrasjoner. Funksjoner løser dette problemet ved å la deg pakke kode inn i gjenbrukbare blokker. Tenk på funksjoner som de standardiserte delene som gjorde Henry Fords samlebånd revolusjonerende – når du oppretter en pålitelig komponent, kan du bruke den hvor som helst uten å bygge den opp fra bunnen av igjen. Funksjoner lar deg samle kodebiter slik at du kan bruke dem på nytt gjennom hele programmet ditt. I stedet for å kopiere og lime inn samme logikk overalt, kan du lage en funksjon én gang og kalle den når du trenger det. Denne tilnærmingen holder koden din organisert og gjør oppdateringer mye enklere. I denne leksjonen vil du lære hvordan du lager dine egne funksjoner, sender informasjon til dem og får nyttige resultater tilbake. Du vil oppdage forskjellen mellom funksjoner og metoder, lære moderne syntaksmetoder, og se hvordan funksjoner kan jobbe sammen med andre funksjoner. Vi bygger opp disse konseptene steg for steg. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funksjoner En funksjon er en selvstendig blokk med kode som utfører en spesifikk oppgave. Den kapsler inn logikk som du kan kjøre når som helst. I stedet for å skrive den samme koden flere ganger gjennom programmet ditt, kan du pakke den inn i en funksjon og kalle funksjonen når du trenger det. Denne tilnærmingen holder koden din ryddig og gjør oppdateringer mye enklere. Tenk på vedlikeholdsutfordringen hvis du måtte endre logikk som var spredt over 20 forskjellige steder i kodebasen din. Å gi funksjonene dine beskrivende navn er essensielt. En godt navngitt funksjon formidler klart hva den gjør – når du ser cancelTimer(), forstår du umiddelbart hva den gjør, akkurat som en tydelig merket knapp forteller deg nøyaktig hva som skjer når du klikker på den. ## Lage og kalle en funksjon La oss se på hvordan man lager en funksjon. Syntaksen følger et konsekvent mønster: La oss bryte dette ned: - Nøkkelordet function sier til JavaScript "Hei, jeg lager en funksjon!" - nameOfFunction er hvor du gir funksjonen et beskrivende navn - Parentesene () er hvor du kan legge til parametere (det kommer vi til snart) - Krøllparentesene {} inneholder selve koden som kjører når du kaller funksjonen La oss lage en enkel hilsningsfunksjon for å se dette i praksis: Denne funksjonen skriver ut "Hello, world!" til konsollen. Når du har definert den, kan du bruke den så mange ganger du trenger. For å kjøre (eller "kalle") funksjonen skriver du navnet etterfulgt av parenteser. JavaScript lar deg definere funksjonen før eller etter du kaller den – JavaScript-motoren tar seg av kjørselsrekkefølgen. Når du kjører denne linjen, utfører den all koden inne i displayGreeting-funksjonen, og viser "Hello, world!" i nettleserens konsoll. Du kan kalle denne funksjonen gjentatte ganger. ### 🧠 Grunnleggende funksjonskontroll: Lage dine første funksjoner La oss se hvordan du forstår grunnleggende funksjoner: - Kan du forklare hvorfor vi bruker krøllparenteser {} i funksjonsdefinisjoner? - Hva skjer hvis du skriver displayGreeting uten parentesene? - Hvorfor kan det være lurt å kalle samme funksjon flere ganger? ### Beste praksis for funksjoner Her er noen tips som hjelper deg å skrive gode funksjoner: - Gi funksjonene dine klare, beskrivende navn – ditt fremtidige jeg vil takke deg! - Bruk camelCase for flersordsnavn (som calculateTotal i stedet for calculate_total) - Hold hver funksjon fokusert på å gjøre én ting godt ## Å sende informasjon til en funksjon Vår displayGreeting-funksjon er begrenset – den kan bare vise "Hello, world!" til alle. Parametere lar oss gjøre funksjoner mer fleksible og nyttige. Parametere fungerer som plassholdere hvor du kan sette inn forskjellige verdier hver gang du bruker funksjonen. På denne måten kan den samme funksjonen jobbe med forskjellig informasjon ved hver kall. Du lister opp parametere inni parentesene når du definerer funksjonen, og skiller flere parametere med komma: Hver parameter fungerer som en plassholder – når noen kaller funksjonen, gir de faktiske verdier som settes inn på disse plassene. La oss oppdatere hilsningsfunksjonen til å ta imot navnet til en person: Legg merke til hvordan vi bruker backticks (` `) og ${}` for å sette inn navnet direkte i meldingen – dette kalles en mal-literal, og er en veldig praktisk måte å bygge strenger med variabler i. Nå kan vi sende inn hvilket som helst navn når vi kaller funksjonen: JavaScript tar strengen 'Christopher', tilordner den til name-parameteren, og lager den personlige meldingen "Hello, Christopher!" ## Standardverdier Hva hvis vi vil gjøre noen parametere valgfrie? Det er her standardverdier kommer til nytte! La oss si at vi vil at folk skal kunne tilpasse hilsningsordet, men hvis de ikke oppgir ett, bruker vi bare "Hello" som reserve. Du kan sette opp standardverdier ved å bruke likhetstegn, akkurat som når du setter en variabel: Her er name fortsatt påkrevd, men salutation har en reserveverdi 'Hello' hvis ingen gir en annen hilsen. Nå kan vi kalle denne funksjonen på to forskjellige måter: I det første kallet bruker JavaScript standard "Hello" siden vi ikke spesifiserte en hilsen. I det andre kallet bruker den vår egen "Hi". Denne fleksibiliteten gjør funksjonene tilpasningsdyktige i ulike situasjoner. ### 🎛️ Parametermesterskap: Gjøre funksjoner fleksible Test kunnskapen din om parametere: - Hva er forskjellen mellom en parameter og et argument? - Hvorfor er standardverdier nyttige i ekte programmering? - Kan du forutsi hva som skjer hvis du sender flere argumenter enn parametere? ## Returnere verdier Så langt har funksjonene våre bare skrevet ut meldinger til konsollen, men hva om du vil at en funksjon skal regne ut noe og gi deg resultatet tilbake? Der kommer returverdier inn i bildet. I stedet for bare å vise noe, kan en funksjon gi deg tilbake en verdi som du kan lagre i en variabel eller bruke andre steder i koden. For å sende en verdi tilbake, bruker du return-nøkkelordet etterfulgt av det du vil returnere: Noe viktig: Når en funksjon treffer en return-setning, slutter den umiddelbart å kjøre og sender denne verdien tilbake til den som kalte funksjonen. La oss endre hilsningsfunksjonen til å returnere meldingen i stedet for å skrive den ut: Nå lager denne funksjonen meldingen og gir den tilbake til oss i stedet for å skrive den ut. For å bruke den returnerte verdien kan vi lagre den i en variabel, akkurat som med andre verdier: Nå inneholder greetingMessage "Hello, Christopher" og vi kan bruke den hvor som helst i koden – vise den på en nettside, inkludere den i en epost, eller sende den til en annen funksjon. ### 🔄 Returverdier - sjekk: Få resultater tilbake Vurder kunnskapen din om returverdier: - Hva skjer med kode som kommer etter en return-setning i en funksjon? - Hvorfor er det ofte bedre å returnere verdier enn bare å skrive ut i konsollen? - Kan en funksjon returnere ulike typer verdier (streng, tall, boolsk)? ## Funksjoner som parametere til funksjoner Funksjoner kan sendes som parametere til andre funksjoner. Selv om dette kan virke komplekst i starten, er det en kraftfull egenskap som muliggjør fleksible programmeringsmønstre. Dette mønsteret er veldig vanlig når du vil si "når noe skjer, gjør dette andre". For eksempel, "når timeren er ferdig, kjør denne koden" eller "når brukeren klikker på knappen, kall denne funksjonen." La oss se på setTimeout, som er en innebygd funksjon som venter en viss tid og så kjører noe kode. Vi må fortelle den hvilken kode den skal kjøre – perfekt bruk av å sende inn en funksjon! Prøv denne koden – etter 3 sekunder ser du en melding: Legg merke til at vi sender displayDone (uten parenteser) til setTimeout. Vi kaller ikke funksjonen selv – vi gir den til setTimeout og sier "kall denne om 3 sekunder." ### Anonyme funksjoner Noen ganger trenger du en funksjon til bare én ting og vil ikke gi den noe navn. Tenk på det – hvis du bare bruker en funksjon én gang, hvorfor kaste bort koden med et ekstra navn? JavaScript lar deg lage anonyme funksjoner – funksjoner uten navn som du kan definere rett der du trenger dem. Slik kan vi skrive om timer-eksemplet vårt med en anonym funksjon: Dette oppnår samme resultat, men funksjonen defineres direkte inni setTimeout-kallet, og vi slipper en egen funksjonsdefinisjon. ### Piler (Arrow) funksjoner Moderne JavaScript har en enda kortere måte å skrive funksjoner på kalt arrow functions. De bruker => (som ser ut som en pil – skjønner du?) og er veldig populære blant utviklere. Arrow-funksjoner lar deg droppe function-nøkkelordet og skrive mer kompakt kode. Her er timer-eksemplet vårt med en arrow-funksjon: () er hvor parametere ville stått (tomt her), så kommer pilen =>, og til slutt funksjonskroppen i krøllparenteser. Dette gir samme funksjonalitet med mer konsis syntaks. ### Når bruke hvilken strategi Når bør du bruke hver tilnærming? En praktisk regel: hvis du skal bruke funksjonen flere ganger, gi den et navn og definer den separat. Hvis det er for et helt spesifikt formål, vurder en anonym funksjon. Både arrow-funksjoner og tradisjonell syntaks er gyldige valg, men arrow-funksjoner er utbredt i moderne JavaScript-kodebaser. ### 🎨 Funksjonsstiler - mestrings-sjekk: Velge riktig syntaks Test forståelsen din av syntaks: - Når kan det være bedre å bruke arrow-funksjoner enn tradisjonell funksjonssyntaks? - Hva er hovedfordelen med anonyme funksjoner? - Kan du tenke deg en situasjon hvor en navngitt funksjon er bedre enn en anonym? --- ## 🚀 Utfordring Kan du formulere i én setning forskjellen mellom funksjoner og metoder? Prøv deg! ## GitHub Copilot Agent-utfordring 🚀 Bruk Agent-modus for å løse følgende utfordring: Beskrivelse: Lag et verktøybibliotek med matematiske funksjoner som demonstrerer ulike funksjonskonsepter dekket i denne leksjonen, inkludert parametere, standardverdier, returverdier og arrow-funksjoner. Prompt: Lag en JavaScript-fil kalt mathUtils.js som inneholder følgende funksjoner: 1. En funksjon add som tar to parametere og returnerer summen deres 2. En funksjon multiply med standardparameterverdier (andre parameter standard til 1) 3. En arrow-funksjon square som tar et tall og returnerer kvadratet av det 4. En funksjon calculate som aksepterer en annen funksjon som parameter og to tall, og så bruker funksjonen på disse tallene 5. Demonstrer å kalle hver funksjon med passende testtilfeller Lær mer om agent-modus her. ## Post-forelesningsquiz Post-lecture quiz ## Gjennomgang og Selvstudium Det er verdt å lese litt mer om arrow-funksjoner, da de brukes mer og mer i kodebaser. Øv på å skrive en funksjon, og deretter omskrive den med denne syntaksen. ## Oppgave Fun with Functions --- ## 🧰 Ditt JavaScript Funksjonsverktøykitt Sammendrag --- ## 🚀 Din JavaScript Funksjonsmestring Tidslinje ### ⚡ Hva du kan gjøre i løpet av de neste 5 minuttene - [ ] Skriv en enkel funksjon som returnerer ditt favorittnummer - [ ] Lag en funksjon med to parametere som legger dem sammen - [ ] Prøv å konvertere en tradisjonell funksjon til pilfunksjon-syntaks - [ ] Øv på utfordringen: forklar forskjellen mellom funksjoner og metoder ### 🎯 Hva du kan oppnå denne timen - [ ] Fullfør quiz etter leksjonen og gå gjennom eventuelle forvirrende konsepter - [ ] Bygg matematikkverktøybiblioteket fra GitHub Copilot-utfordringen - [ ] Lag en funksjon som bruker en annen funksjon som parameter - [ ] Øv på å skrive funksjoner med standardparametere - [ ] Eksperimenter med template literals i funksjonsreturverdier ### 📅 Din uke-lange funksjonsmestring - [ ] Fullfør oppgaven "Moro med funksjoner" med kreativitet - [ ] Refaktorer noe repeterende kode du har skrevet til gjenbrukbare funksjoner - [ ] Bygg en liten kalkulator ved bare å bruke funksjoner (ingen globale variabler) - [ ] Øv på pilfunksjoner med array-metoder som map() og filter() - [ ] Lag en samling med hjelpefunksjoner for vanlige oppgaver - [ ] Studer høyereordensfunksjoner og funksjonell programmeringskonsepter ### 🌟 Din måned-lange transformasjon - [ ] Mestre avanserte funksjonskonsepter som closures og scope - [ ] Bygg et prosjekt som i stor grad bruker funksjonskomposisjon - [ ] Bidra til open source ved å forbedre funksjonsdokumentasjon - [ ] Lær bort til noen andre om funksjoner og ulike syntaksstiler - [ ] Utforsk funksjonell programmering i JavaScript - [ ] Lag et personlig bibliotek av gjenbrukbare funksjoner for fremtidige prosjekter ### 🏆 Sluttkontroll for funksjonsmester Feir funksjonsmestringen din: - Hva er den mest nyttige funksjonen du har laget så langt? - Hvordan har det å lære om funksjoner endret måten du tenker på kodeorganisering? - Hvilken funksjonssyntaks foretrekker du og hvorfor? - Hvilket reelt problem ville du løst ved å skrive en funksjon? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på originalspråket skal anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Grunnleggende: Ta Beslutninger

Har du noen gang lurt på hvordan applikasjoner tar smarte beslutninger? Som hvordan et navigasjonssystem velger den raskeste ruten, eller hvordan en termostat bestemmer når den skal slå på varmen? Dette er det grunnleggende konseptet med beslutningstaking i programmering. Akkurat som Charles Babbages Analytical Engine var designet for å følge forskjellige operasjonssekvenser basert på betingelser, trenger moderne JavaScript-programmer å ta valg basert på varierende omstendigheter. Denne evnen til å forgrene og ta beslutninger er det som forvandler statisk kode til responsive, intelligente applikasjoner. I denne leksjonen vil du lære hvordan du implementerer betinget logikk i programmene dine. Vi skal utforske betingede utsagn, sammenligningsoperatorer og logiske uttrykk som lar koden din evaluere situasjoner og svare hensiktsmessig. ## Forhåndsforelesnings-quiz Forhåndsforelesnings-quiz Evnen til å ta beslutninger og kontrollere programflyt er et grunnleggende aspekt ved programmering. Denne delen dekker hvordan du styrer utførelsesbanen til JavaScript-programmene dine ved hjelp av boolske verdier og betinget logikk. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## En Kort Oppsummering av Boolske Verdier Før vi utforsker beslutningstaking, la oss repetere boolske verdier fra vår forrige leksjon. Oppkalt etter matematikeren George Boole, representerer disse verdiene binære tilstander – enten true eller false. Det er ingen tvetydighet, ingen mellomting. Disse binære verdiene danner grunnlaget for all beregningslogikk. Hver beslutning programmet ditt tar, reduseres til en boolsk evaluering. Å lage boolske variabler er enkelt: Dette oppretter to variabler med eksplisitte boolske verdier. ✅ Boolske er oppkalt etter den engelske matematikeren, filosofen og logikeren George Boole (1815–1864). ## Sammenligningsoperatorer og Boolske I praksis setter du sjelden boolske verdier manuelt. I stedet genererer du dem ved å evaluere betingelser: "Er dette tallet større enn det andre?" eller "Er disse verdiene like?" Sammenligningsoperatorer muliggjør disse evalueringene. De sammenligner verdier og returnerer boolske resultater basert på forholdet mellom operandene. ✅ Test kunnskapen din ved å skrive noen sammenligninger i nettleserens konsoll. Overrasker noen av de returnerte dataene deg? ### 🧠 Sammenligningskontroll: Forstå boolsk logikk Test forståelsen av sammenligninger: - Hvorfor tror du === (streng likhet) generelt foretrekkes fremfor == (løs likhet)? - Kan du forutsi hva 5 === '5' returnerer? Hva med 5 == '5'? - Hva er forskjellen mellom !== og !=? ## If-setning if-setningen er som å stille et spørsmål i koden din. "Hvis denne betingelsen er sann, så gjør dette." Det er sannsynligvis det viktigste verktøyet du vil bruke for å ta beslutninger i JavaScript. Slik fungerer det: Betingelsen går inni parentesene, og hvis den er true, kjører JavaScript koden inne i krøllparentesene. Hvis den er false, hopper JavaScript over hele blokken. Du vil ofte bruke sammenligningsoperatorer for å lage disse betingelsene. La oss se et praktisk eksempel: Siden 1000 >= 800 evalueres til true, kjører koden innenfor blokken og viser "Getting a new laptop!" i konsollen. ## If..Else Setning Men hva om du vil at programmet ditt skal gjøre noe annet når betingelsen er falsk? Det er her else kommer inn – det er som å ha en backup-plan. else-setningen gir deg en måte å si "hvis denne betingelsen ikke er sann, gjør dette i stedet." Nå, siden 500 >= 800 er false, hopper JavaScript over den første blokken og kjører else-blokken i stedet. Du vil se "Can't afford a new laptop, yet!" i konsollen. ✅ Test forståelsen av denne koden og den følgende ved å kjøre den i nettleserens konsoll. Endre verdiene til variablene currentMoney og laptopPrice for å endre det returnerte console.log(). ### 🎯 If-Else Logikk Sjekk: Forgreningsvalg Evaluer forståelsen av betinget logikk: - Hva skjer hvis currentMoney er nøyaktig lik laptopPrice? - Kan du tenke på en virkelighetsnær situasjon hvor if-else logikk ville være nyttig? - Hvordan kan du utvide dette for å håndtere flere prisklasser? ## Switch-setning Noen ganger trenger du å sammenligne én verdi mot flere alternativer. Selv om du kunne lenke flere if..else-setninger, blir denne tilnærmingen tungvint. switch-setningen gir en ryddigere struktur for å håndtere flere diskrete verdier. Konseptet ligner på de mekaniske brytersystemene som ble brukt i tidlige telefonvekslinger – én input-verdi bestemmer hvilken spesifikk vei utførelsen følger. Slik er den strukturert: - JavaScript evaluerer uttrykket én gang - Det ser gjennom hver case for å finne et treff - Når det finner et treff, kjører det den kodeblokken - break sier til JavaScript å stoppe og gå ut av switchen - Hvis ingen cases matcher, kjører den default blokken (hvis du har en) I dette eksemplet ser JavaScript at dayNumber er 2, finner den matchende case 2, setter dayName til "Tuesday", og bryter ut av switchen. Resultatet? "Today is Tuesday" logges i konsollen. ✅ Test forståelsen av denne koden og den følgende ved å kjøre den i nettleserens konsoll. Endre verdien til variabelen a for å endre det returnerte console.log(). ### 🔄 Switch-setningens Mestring: Flere Alternativer Test forståelsen av switch: - Hva skjer hvis du glemmer en break-setning? - Når ville du brukt switch i stedet for flere if-else-setninger? - Hvorfor er default-tilfellet nyttig selv om du tror du har dekket alle muligheter? ## Logiske Operatorer og Boolske Komplekse beslutninger krever ofte evaluering av flere betingelser samtidig. Akkurat som boolsk algebra lar matematikere kombinere logiske uttrykk, tilbyr programmering logiske operatorer for å koble flere boolske betingelser. Disse operatorene muliggjør sofistikert betinget logikk ved å kombinere enkle true/false-evalueringer. Disse operatorene lar deg kombinere betingelser på nyttige måter: - OG (&&) betyr at begge betingelsene må være sanne - ELLER (||) betyr at minst én betingelse må være sann - IKKE (!) snur sann til usann (og omvendt) ## Betingelser og Beslutninger med Logiske Operatorer La oss se disse logiske operatorene i aksjon med et mer realistisk eksempel: I dette eksemplet: Vi kalkulerer en 20% rabattpris (640), og evaluerer deretter om tilgjengelige midler dekker enten fullpris ELLER rabattert pris. Siden 600 møter rabattpriskravet på 640, evalueres betingelsen til sann. ### 🧮 Logiske Operatorer Sjekk: Kombiner Betingelser Test forståelsen av logiske operatorer: - I uttrykket A && B, hva skjer hvis A er usann? Blir B evaluert i det hele tatt? - Kan du tenke deg en situasjon hvor du trenger alle tre operatorene (&&, ||, !) sammen? - Hva er forskjellen mellom !user.isActive og user.isActive !== true? ### Negasjonsoperator Noen ganger er det enklere å tenke på når noe IKKE er sant. Som i stedet for å spørre "Er brukeren logget inn?", vil du kanskje spørre "Er brukeren IKKE logget inn?" Utropstegnet (!) snur logikken for deg. ! operatoren er som å si "det motsatte av..." – hvis noe er true, gjør ! det til false, og omvendt. ### Ternære uttrykk For enkle betingede tildelinger tilbyr JavaScript ternær operator. Denne konsise syntaksen lar deg skrive et betinget uttrykk på én linje, nyttig når du trenger å tildele én av to verdier basert på en betingelse. Det leses som et spørsmål: "Er denne betingelsen sann? Hvis ja, bruk denne verdien. Hvis nei, bruk den verdien." Nedenfor er et mer håndfast eksempel: ✅ Ta et øyeblikk til å lese denne koden flere ganger. Forstår du hvordan disse operatorene fungerer? Denne linjen sier: "Er firstNumber større enn secondNumber? Hvis ja, sett firstNumber i biggestNumber. Hvis nei, sett secondNumber i biggestNumber." Den ternære operatoren er bare en kortere måte å skrive denne tradisjonelle if..else-setningen på: Begge tilnærminger gir identiske resultater. Den ternære operatoren tilbyr korthet, mens den tradisjonelle if-else-strukturen kan være mer lesbar for komplekse betingelser. --- ## 🚀 Utfordring Lag et program som først er skrevet med logiske operatorer, og deretter skriv det om ved å bruke et ternært uttrykk. Hva er din foretrukne syntaks? --- ## GitHub Copilot Agent Utfordring 🚀 Bruk Agent-modus for å løse følgende utfordring: Beskrivelse: Lag en omfattende karakterskala som demonstrerer flere beslutningskonsepter fra denne leksjonen, inkludert if-else setninger, switch-setninger, logiske operatorer og ternære uttrykk. Prompt: Skriv et JavaScript-program som tar en students numeriske poengsum (0-100) og bestemmer deres bokstavkarakter ved å bruke følgende kriterier: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Under 60 Krav: 1. Bruk en if-else setning for å bestemme bokstavkarakteren 2. Bruk logiske operatorer for å sjekke om studenten består (karakter >= 60) OG har utmerkelser (karakter >= 90) 3. Bruk en switch-setning for å gi spesifikk tilbakemelding for hver bokstavkarakter 4. Bruk en ternær operator for å avgjøre om studenten er kvalifisert for neste kurs (karakter >= 70) 5. Inkluder input-validering for å sikre at poengsummen er mellom 0 og 100 Test programmet ditt med forskjellige poengsummer inkludert grenseverdier som 59, 60, 89, 90 og ugyldige input. Lær mer om agent mode her. ## Post-forelesningsquiz Post-forelesningsquiz ## Gjennomgang & Selvstudium Les mer om de mange operatorene som er tilgjengelige for brukeren på MDN. Gå gjennom Josh Comeaus flotte operator lookup! ## Oppgave Operatorer --- ## 🧠 Ditt beslutningsverktøy-sammendrag --- ## 🚀 Din tidslinje for JavaScript beslutningsmestring ### ⚡ Hva du kan gjøre de neste 5 minuttene - [ ] Øv på sammenligningsoperatorer i nettleserkonsollen din - [ ] Skriv en enkel if-else-setning som sjekker alderen din - [ ] Prøv utfordringen: skriv om en if-else med en ternær operator - [ ] Test hva som skjer med forskjellige "truthy" og "falsy" verdier ### 🎯 Hva du kan oppnå denne timen - [ ] Fullfør post-leksjonsquizen og gjennomgå eventuelle forvirrende konsepter - [ ] Bygg den omfattende karakterkalkulatoren fra GitHub Copilot-utfordringen - [ ] Lag et enkelt beslutningstre for et virkelighetsnært scenario (som å velge hva du skal ha på deg) - [ ] Øv på å kombinere flere betingelser med logiske operatorer - [ ] Eksperimenter med switch-setninger for forskjellige brukstilfeller ### 📅 Din ukelange logikkmestring - [ ] Fullfør oppgaven om operatorer med kreative eksempler - [ ] Bygg en mini quiz-applikasjon ved bruk av ulike betingelsesstrukturer - [ ] Lag en formvaliderer som sjekker flere inndataforhold - [ ] Øv på Josh Comeaus operator lookup øvelser - [ ] Refaktorer eksisterende kode for å bruke mer passende betingelsesstrukturer - [ ] Studer short-circuit evaluering og ytelseskonsekvenser ### 🌟 Din månedslange transformasjon - [ ] Mestre komplekse nestede betingelser og oppretthold lesbar kode - [ ] Bygg en applikasjon med sofistikert beslutningslogikk - [ ] Bidra til open source ved å forbedre betingelseslogikken i eksisterende prosjekter - [ ] Lær bort til noen andre om ulike betingelsesstrukturer og når de skal brukes - [ ] Utforsk funksjonelle programmeringstilnærminger til betingelseslogikk - [ ] Lag en personlig referanseguide for beste praksis i betingelser ### 🏆 Siste sjekk for beslutningsmesterskap Feire din mestring av logisk tenkning: - Hva er den mest komplekse beslutningslogikken du har implementert med suksess? - Hvilken betingelsesstruktur føles mest naturlig for deg og hvorfor? - Hvordan har det å lære om logiske operatorer endret måten du løser problemer på? - Hvilken virkelighetsapplikasjon kan ha nytte av sofistikert beslutningslogikk? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på originalspråket skal anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Grunnleggende: Arrays og Løkker

## Forhåndsforelesning Quiz Forhåndsforelesning quiz Har du noen gang lurt på hvordan nettsider holder oversikt over handlekurvartikler eller viser vennelisten din? Det er her arrays og løkker kommer inn. Arrays er som digitale beholdere som holder flere informasjonsbiter, mens løkker lar deg jobbe med all den dataen effektivt uten gjentakende kode. Sammen danner disse to konseptene grunnlaget for å håndtere informasjon i programmene dine. Du vil lære å gå fra manuelt å skrive ut hvert eneste steg til å lage smart, effektiv kode som kan behandle hundrevis eller til og med tusenvis av elementer raskt. På slutten av denne leksjonen vil du forstå hvordan du kan utføre komplekse databehandlingsoppgaver med bare noen få kodelinjer. La oss utforske disse essensielle programmeringskonseptene. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Løkker") ## Arrays Tenk på arrays som et digitalt arkivskap – i stedet for å lagre ett dokument per skuff, kan du organisere flere relaterte elementer i en enkelt, strukturert beholder. I programmeringsspråk lar arrays deg lagre flere biter informasjon i én organisert pakke. Enten du bygger et fotogalleri, administrerer en oppgaveliste, eller holder oversikt over høyeste poeng i et spill, gir arrays grunnlaget for dataorganisering. La oss se hvordan de fungerer. ✅ Arrays finnes overalt rundt oss! Kan du tenke deg et virkelig eksempel på en array, som et solcellepanel-array? ### Lage Arrays Å lage et array er superenkelt – bare bruk firkantede parenteser! Hva skjer her? Du har nettopp laget en tom beholder ved å bruke de firkantede parentesene []. Tenk på det som en tom bibliotekshylle – den er klar til å holde hvilke som helst bøker du vil organisere der. Du kan også fylle arrayen din med startverdier med en gang: Kule ting å legge merke til: - Du kan lagre tekst, tall eller til og med sann/usann-verdier i samme array - Bare skil hvert element med et komma – enkelt! - Arrays er perfekte for å holde relaterte opplysninger samlet ### Array-indeksering Her er noe som kan virke uvanlig i starten: arrays nummererer elementene sine fra 0, ikke 1. Denne nullindekseringen har sin opprinnelse i hvordan datamaskinens minne fungerer – det har vært en programmeringskonvensjon siden de tidlige dagene av programmeringsspråk som C. Hvert sted i arrayen får sitt eget adressenummer kalt en indeks. ✅ Overrasker det deg at arrays starter på indeks null? I noen programmeringsspråk starter indeksene på 1. Det finnes en interessant historie rundt dette, som du kan lese om på Wikipedia. Tilgang til array-elementer: Bryter ned hva som skjer her: - Bruker firkantede parenteser med indeksnummer for å hente elementer - Returnerer verdien som er lagret på den spesifikke posisjonen i arrayen - Starter tellingen fra 0, noe som gjør første element til indeks 0 Endre array-elementer: I eksempelet ovenfor har vi: - Endret elementet på indeks 4 fra "Rocky Road" til "Butter Pecan" - Lagt til et nytt element "Cookie Dough" på indeks 5 - Utvidet arrayens lengde automatisk når vi legger til utenfor gjeldende grenser ### Array-lengde og vanlige metoder Arrays kommer med innebygde egenskaper og metoder som gjør det mye enklere å jobbe med data. Finne array-lengde: Viktige punkter å huske: - Returnerer totalt antall elementer i arrayen - Oppdateres automatisk når elementer legges til eller fjernes - Gir dynamisk telling som er nyttig for løkker og validering Viktige array-metoder: Forstå disse metodene: - Legger til elementer med push() (på slutten) og unshift() (i begynnelsen) - Fjerner elementer med pop() (på slutten) og shift() (i begynnelsen) - Finnes elementer med indexOf() og sjekker eksistens med includes() - Returnerer nyttige verdier som fjernede elementer eller posisjonsindekser ✅ Prøv det selv! Bruk nettleserens konsoll for å opprette og manipulere et array du lager. ### 🧠 Grunnleggende Array-sjekk: Organiser dataene dine Test din forståelse av arrays: - Hvorfor tror du arrays starter å telle fra 0 i stedet for 1? - Hva skjer om du prøver å få tilgang til en indeks som ikke finnes (som arr[100] i et array med 5 elementer)? - Kan du tenke på tre virkelige situasjoner hvor arrays ville være nyttige? ## Løkker Tenk på den kjente straffen i Charles Dickens’ romaner hvor elever måtte skrive linjer gjentatte ganger på en tavle. Tenk om du bare kunne si til noen «skriv denne setningen 100 ganger» og få det gjort automatisk. Det er akkurat det løkker gjør for koden din. Løkker er som å ha en utholdende assistent som kan gjenta oppgaver uten feil. Enten du må sjekke hvert element i en handlekurv eller vise alle bildene i et album, håndterer løkker repetisjonen effektivt. JavaScript tilbyr flere typer løkker å velge mellom. La oss se nærmere på hver av dem og forstå når du bør bruke dem. ### For-løkke for-løkka er som å sette en timer – du vet nøyaktig hvor mange ganger du vil at noe skal skje. Den er superorganisert og forutsigbar, noe som gjør den perfekt når du jobber med arrays eller trenger å telle ting. For-løkkestruktur: Steg for steg, her skjer dette: - Initialiserer tellevariabelen i til 0 i starten - Sjekker betingelsen i < 10 før hver gjennomgang - Utfører kodeblokken når betingelsen er sann - Øker i med 1 etter hver gjennomgang med i++ - Stopper når betingelsen blir usann (når i når 10) ✅ Kjør denne koden i nettleserkonsollen. Hva skjer om du gjør små endringer i tellevariabelen, betingelsen eller inkrementuttrykket? Kan du få den til å gå baklengs, og lage en nedtelling? ### 🗓️ For-løkke mestringssjekk: Kontrollert repetisjon Evaluer din for-løkke-forståelse: - Hva er de tre delene av en for-løkke, og hva gjør hver del? - Hvordan kan du gå gjennom et array baklengs? - Hva skjer hvis du glemmer inkrementdelen (i++)? ### While-løkke while-løkka er som å si «fortsett å gjøre dette til...» – du vet kanskje ikke akkurat hvor mange ganger den skal kjøre, men du vet når den skal stoppe. Den er perfekt for ting som å spørre en bruker om inndata til de gir deg det du trenger, eller søke gjennom data til du finner det du leter etter. Egenskaper ved while-løkke: - Fortsetter å kjøre så lenge betingelsen er sann - Krever manuell håndtering av tellevariabler - Sjekker betingelsen før hver gjennomgang - Risikerer evige løkker hvis betingelsen aldri blir usann Forstå disse eksemplene: - Håndterer telling manuelt inne i løkka - Øker tellevariabelen for å forhindre evige løkker - Demonstrerer praktisk bruk med brukerinput og forsøkstallbegrensning - Inkluderer sikkerhetsmekanismer for å unngå uendelig kjøring ### ♾️ While-løkke visdomssjekk: Betingelsesbasert repetisjon Test din forståelse av while-løkker: - Hva er den største faren ved å bruke while-løkker? - Når ville du velge en while-løkke over en for-løkke? - Hvordan kan du forhindre evige løkker? ### Moderne løkkealternativer JavaScript tilbyr moderne løkkesyntaks som kan gjøre koden din mer lesbar og mindre feilutsatt. For...of løkke (ES6+): Viktige fordeler med for...of: - Fjerner behovet for indeksbehandling og potensielle avvik av én-feil - Gir direkte tilgang til array-elementer - Forbedrer lesbarheten og reduserer syntakskomplisitet forEach-metoden: Det du må vite om forEach: - Kjører en funksjon for hvert array-element - Gir både elementverdi og indeks som parametere - Kan ikke stoppes tidlig (i motsetning til tradisjonelle løkker) - Returnerer undefined (lager ikke et nytt array) ✅ Hvorfor ville du velge en for-løkke fremfor en while-løkke? 17 000 besøkende stilte det samme spørsmålet på StackOverflow, og noen av meningene kan være interessante for deg. ### 🎨 Moderne løkkesyntaks-sjekk: Omfavner ES6+ Vurder din moderne JavaScript-forståelse: - Hva er fordelene med for...of i forhold til tradisjonelle for-løkker? - Når kan du fortsatt foretrekke tradisjonelle for-løkker? - Hva er forskjellen mellom forEach og map? ## Løkker og Arrays Å kombinere arrays med løkker gir kraftige muligheter for databehandling. Denne kombinasjonen er grunnleggende for mange programmeringsoppgaver, fra visning av lister til å kalkulere statistikk. Tradisjonell array-behandling: La oss forstå hver tilnærming: - Bruker array-lengdeegenskap for å bestemme løkkens grense - Tilgår elementer via indeks i tradisjonelle for-løkker - Gir direkte elementtilgang i for...of-løkker - Behandler hvert array-element nøyaktig én gang Praktisk eksempel på databehandling: Slik fungerer denne koden: - Initialiserer variabler for sum og ytterpunkter - Behandler hver karakter med en enkel effektiv løkke - Akkumulerer totalen for gjennomsnittskalkulering - Sporer høyeste og laveste verdi under gjennomgangen - Beregner endelig statistikk etter at løkken er fullført ✅ Eksperimenter med å løpe gjennom et array du lager selv i nettleserkonsollen. --- ## GitHub Copilot Agent Utfordring 🚀 Bruk Agent-modus for å fullføre følgende utfordring: Beskrivelse: Bygg en omfattende databehandlingsfunksjon som kombinerer arrays og løkker for å analysere et datasett og generere meningsfulle innsikter. Oppgave: Lag en funksjon kalt analyzeGrades som tar et array av studentkarakter-objekter (hvert med egenskapene navn og poengsum) og returnerer et objekt med statistikk inkludert høyeste poengsum, laveste poengsum, gjennomsnittlig poengsum, antall studenter som besto (poengsum >= 70), og et array av navn på studenter som fikk over gjennomsnittet. Bruk minst to forskjellige løkketyper i løsningen din. Lær mer om agent modus her. ## 🚀 Utfordring JavaScript tilbyr flere moderne array-metoder som kan erstatte tradisjonelle løkker for spesifikke oppgaver. Utforsk forEach, for-of, map, filter, og reduce. Din utfordring: Omstrukturer elevkarakter-eksemplet ved å bruke minst tre forskjellige array-metoder. Legg merke til hvor mye renere og mer lesbart koden blir med moderne JavaScript-syntaks. ## Post-forelesningsquiz Post-forelesningsquiz ## Gjennomgang & Selvstudium Arrays i JavaScript har mange tilknyttede metoder som er ekstremt nyttige for datamanipulering. Les om disse metodene og prøv noen av dem (som push, pop, slice og splice) på et array du lager. ## Oppgave Loop an Array --- ## 📊 Ditt sammendrag av Arrays & Løkker-verktøykassen --- ## 🚀 Din tidslinje for mestring av Arrays & Løkker ### ⚡ Hva du kan gjøre de neste 5 minuttene - [ ] Lag et array av dine favorittfilmer og få tilgang til spesifikke elementer - [ ] Skriv en for-løkke som teller fra 1 til 10 - [ ] Prøv utfordringen med moderne array-metoder fra leksjonen - [ ] Øv på array-indeksering i nettleserkonsollen din ### 🎯 Hva du kan oppnå denne timen - [ ] Fullfør post-leksjonsquizen og gå gjennom eventuelle utfordrende konsepter - [ ] Bygg den omfattende karakteranalysatoren fra GitHub Copilot-utfordringen - [ ] Lag en enkel handlekurv som legger til og fjerner elementer - [ ] Øv på å konvertere mellom forskjellige løkketyper - [ ] Eksperimenter med array-metoder som push, pop, slice og splice ### 📅 Din ukeslange reise innen databehandling - [ ] Fullfør oppgaven "Loop an Array" med kreative forbedringer - [ ] Bygg en gjøremålsliste-applikasjon som bruker arrays og løkker - [ ] Lag en enkel statistikk-kalkulator for numeriske data - [ ] Øv på MDN array-metoder - [ ] Lag et fotogalleri eller musikkspillelistegrensesnitt - [ ] Utforsk funksjonell programmering med map, filter og reduce ### 🌟 Din månedslange transformasjon - [ ] Mestre avanserte array-operasjoner og ytelsesoptimalisering - [ ] Bygg et komplett dashbord for datavisualisering - [ ] Bidra til open source-prosjekter som involverer databehandling - [ ] Lær bort til andre om arrays og løkker med praktiske eksempler - [ ] Lag et personlig bibliotek med gjenbrukbare funksjoner for databehandling - [ ] Utforsk algoritmer og datastrukturer basert på arrays ### 🏆 Siste sjekkpunkt for databehandlingsmester Feir din mestring av arrays og løkker: - Hva er den mest nyttige array-operasjonen du har lært for virkelige anvendelser? - Hvilken løkketype føles mest naturlig for deg, og hvorfor? - Hvordan har forståelsen av arrays og løkker endret din tilnærming til å organisere data? - Hvilken kompleks databehandlingsoppgave ønsker du å prøve på neste? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på originalspråket skal anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array

ਜਾਵਾਸਕ੍ਰਿਪਟ ਦਾ ਪਰਚੇ

ਜਾਵਾਸਕ੍ਰਿਪਟ ਵੈੱਬ ਦੀ ਭਾਸ਼ਾ ਹੈ। ਇਨ੍ਹਾਂ ਚਾਰ ਪਾਠਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਇਸਦੇ ਬੁਨਿਆਦੀ ਸਿਧਾਂਤ ਸਿੱਖੋਗੇ। ### ਵਿਸ਼ੇ 1. ਵੈਰੀਏਬਲ ਅਤੇ ਡਾਟਾ ਟਾਈਪ 2. ਫੰਕਸ਼ਨ ਅਤੇ ਮੈਥਡ 3. ਜਾਵਾਸਕ੍ਰਿਪਟ ਨਾਲ ਫੈਸਲੇ ਲੈਣਾ 4. ਐਰੇ ਅਤੇ ਲੂਪ ### ਸ਼੍ਰੇਯ ਇਹ ਪਾਠ ♥️ ਨਾਲ ਜੈਸਮਿਨ ਗ੍ਰੀਨਵੇ, ਕ੍ਰਿਸਟੋਫਰ ਹੈਰਿਸਨ ਅਤੇ ਕ੍ਰਿਸ ਨੋਰਿੰਗ ਦੁਆਰਾ ਲਿਖੇ ਗਏ ਹਨ। ਅਸਵੀਕਾਰਨਾ: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਨਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼, ਜੋ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।

web,development

ਜਾਵਾਸਕ੍ਰਿਪਟ ਬੇਸਿਕਸ: ਡਾਟਾ ਟਾਈਪਸ

ਡਾਟਾ ਟਾਈਪਸ ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਮੁੱਢਲੇ ਸੰਕਲਪਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹਨ, ਜੋ ਤੁਹਾਨੂੰ ਹਰ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਮਿਲਣਗੇ ਜੋ ਤੁਸੀਂ ਲਿਖਦੇ ਹੋ। ਡਾਟਾ ਟਾਈਪਸ ਨੂੰ ਉਸ ਪ੍ਰਾਚੀਨ ਲਾਇਬ੍ਰੇਰੀਅਨ ਦੇ ਫਾਈਲਿੰਗ ਸਿਸਟਮ ਵਾਂਗ ਸੋਚੋ ਜੋ ਅਲੈਕਸੈਂਡਰੀਆ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਸੀ - ਉਹਨਾਂ ਕੋਲ ਕਵਿਤਾ, ਗਣਿਤ ਅਤੇ ਇਤਿਹਾਸਕ ਰਿਕਾਰਡ ਵਾਲੇ ਸਕ੍ਰੋਲਸ ਲਈ ਖਾਸ ਸਥਾਨ ਹੁੰਦੇ ਸਨ। ਜਾਵਾਸਕ੍ਰਿਪਟ ਜਾਣਕਾਰੀ ਨੂੰ ਇਸੇ ਤਰ੍ਹਾਂ ਵੱਖ-ਵੱਖ ਸ਼੍ਰੇਣੀਆਂ ਵਿੱਚ ਸੰਗਠਿਤ ਕਰਦਾ ਹੈ। ਇਸ ਪਾਠ ਵਿੱਚ, ਅਸੀਂ ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਮੁੱਖ ਡਾਟਾ ਟਾਈਪਸ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ। ਤੁਸੀਂ ਸੰਖਿਆਵਾਂ, ਲਿਖਤ, ਸੱਚ/ਝੂਠ ਮੁੱਲਾਂ ਨੂੰ ਸੰਭਾਲਣ ਅਤੇ ਸਮਝਣ ਲਈ ਸਿੱਖੋਗੇ ਕਿ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮਾਂ ਲਈ ਸਹੀ ਟਾਈਪ ਚੁਣਨਾ ਕਿਉਂ ਜ਼ਰੂਰੀ ਹੈ। ਇਹ ਸੰਕਲਪ ਸ਼ੁਰੂ ਵਿੱਚ ਅਜੀਬ ਲੱਗ ਸਕਦੇ ਹਨ, ਪਰ ਅਭਿਆਸ ਨਾਲ, ਇਹ ਤੁਹਾਡੇ ਲਈ ਆਮ ਹੋ ਜਾਣਗੇ। ਡਾਟਾ ਟਾਈਪਸ ਨੂੰ ਸਮਝਣਾ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਹੋਰ ਸਭ ਕੁਝ ਸਪਸ਼ਟ ਕਰ ਦੇਵੇਗਾ। ਜਿਵੇਂ ਕਿ ਆਰਕੀਟੈਕਟ ਨੂੰ ਕੈਥੀਡ੍ਰਲ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਵੱਖ-ਵੱਖ ਇਮਾਰਤੀ ਸਮੱਗਰੀਆਂ ਨੂੰ ਸਮਝਣਾ ਪੈਂਦਾ ਹੈ, ਇਹ ਮੁੱਢਲੇ ਸੰਕਲਪ ਤੁਹਾਡੇ ਦੁਆਰਾ ਅੱਗੇ ਬਣਾਈ ਗਈ ਹਰ ਚੀਜ਼ ਦਾ ਆਧਾਰ ਬਣਨਗੇ। ## ਪਾਠ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਪਾਠ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਇਹ ਪਾਠ ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਬੁਨਿਆਦੀ ਪਹਲੂਆਂ ਨੂੰ ਕਵਰ ਕਰਦਾ ਹੈ, ਜੋ ਵੈੱਬ 'ਤੇ ਇੰਟਰਐਕਟਿਵਿਟੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") ਆਓ ਵੈਰੀਏਬਲ ਅਤੇ ਉਹਨਾਂ ਡਾਟਾ ਟਾਈਪਸ ਨਾਲ ਸ਼ੁਰੂ ਕਰੀਏ ਜੋ ਉਹਨਾਂ ਨੂੰ ਭਰਦੇ ਹਨ! ## ਵੈਰੀਏਬਲ ਵੈਰੀਏਬਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ ਬੁਨਿਆਦੀ ਇਮਾਰਤੀ ਬਲਾਕ ਹਨ। ਜਿਵੇਂ ਮੱਧਕਾਲੀ ਕਾਲ ਦੇ ਰਸਾਇਨ ਵਿਗਿਆਨੀਆਂ ਨੇ ਵੱਖ-ਵੱਖ ਪਦਾਰਥਾਂ ਨੂੰ ਸਟੋਰ ਕਰਨ ਲਈ ਲੇਬਲ ਵਾਲੇ ਜਾਰ ਵਰਤੇ, ਵੈਰੀਏਬਲ ਤੁਹਾਨੂੰ ਜਾਣਕਾਰੀ ਸਟੋਰ ਕਰਨ ਅਤੇ ਇਸ ਨੂੰ ਇੱਕ ਵਰਣਨਾਤਮਕ ਨਾਮ ਦੇਣ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ ਤਾਂ ਜੋ ਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਰਿਫਰ ਕਰ ਸਕੋ। ਕਿਸੇ ਦੀ ਉਮਰ ਯਾਦ ਰੱਖਣ ਦੀ ਲੋੜ ਹੈ? ਇਸਨੂੰ age ਨਾਮ ਦੇ ਵੈਰੀਏਬਲ ਵਿੱਚ ਸਟੋਰ ਕਰੋ। ਕਿਸੇ ਯੂਜ਼ਰ ਦਾ ਨਾਮ ਟ੍ਰੈਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? ਇਸਨੂੰ userName ਵਿੱਚ ਰੱਖੋ। ਅਸੀਂ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਵੈਰੀਏਬਲ ਬਣਾਉਣ ਦੇ ਆਧੁਨਿਕ ਤਰੀਕੇ 'ਤੇ ਧਿਆਨ ਦੇਵਾਂਗੇ। ਇੱਥੇ ਤੁਸੀਂ ਜੋ ਤਕਨੀਕਾਂ ਸਿੱਖੋਗੇ ਉਹ ਜ਼ੁਬਾਨ ਦੇ ਵਿਕਾਸ ਦੇ ਸਾਲਾਂ ਅਤੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਕਮਿਊਨਿਟੀ ਦੁਆਰਾ ਵਿਕਸਿਤ ਕੀਤੀਆਂ ਸ੍ਰੇਸ਼ਠ ਅਭਿਆਸਾਂ ਦਾ ਪ੍ਰਤੀਨਿਧਿਤ ਕਰਦੀਆਂ ਹਨ। ਵੈਰੀਏਬਲ ਬਣਾਉਣ ਅਤੇ ਘੋਸ਼ਿਤ ਕਰਨ ਦਾ ਸਿੰਟੈਕਸ ਹੈ [keyword] [name]। ਇਹ ਦੋ ਹਿੱਸਿਆਂ ਤੋਂ ਬਣਿਆ ਹੈ: - ਕੀਵਰਡ। ਉਹ ਵੈਰੀਏਬਲ ਲਈ let ਵਰਤੋ ਜੋ ਬਦਲ ਸਕਦੇ ਹਨ, ਜਾਂ ਉਹ ਮੁੱਲਾਂ ਲਈ const ਜੋ ਸਥਿਰ ਰਹਿੰਦੇ ਹਨ। - ਵੈਰੀਏਬਲ ਦਾ ਨਾਮ, ਇਹ ਇੱਕ ਵਰਣਨਾਤਮਕ ਨਾਮ ਹੈ ਜੋ ਤੁਸੀਂ ਖੁਦ ਚੁਣਦੇ ਹੋ। ✅ ਕੀਵਰਡ let ES6 ਵਿੱਚ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਸੀ ਅਤੇ ਤੁਹਾਡੇ ਵੈਰੀਏਬਲ ਨੂੰ ਇੱਕ _ਬਲਾਕ ਸਕੋਪ_ ਦਿੰਦਾ ਹੈ। ਇਹ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਤੁਸੀਂ ਪੁਰਾਣੇ var ਕੀਵਰਡ ਦੀ ਬਜਾਏ let ਜਾਂ const ਵਰਤੋ। ਅਸੀਂ ਅਗਲੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਬਲਾਕ ਸਕੋਪਸ ਨੂੰ ਵਧੇਰੇ ਗਹਿਰਾਈ ਨਾਲ ਕਵਰ ਕਰਾਂਗੇ। ### ਟਾਸਕ - ਵੈਰੀਏਬਲ ਨਾਲ ਕੰਮ ਕਰਨਾ 1. ਵੈਰੀਏਬਲ ਘੋਸ਼ਿਤ ਕਰੋ। ਆਓ ਆਪਣਾ ਪਹਿਲਾ ਵੈਰੀਏਬਲ ਬਣਾਉਣ ਨਾਲ ਸ਼ੁਰੂ ਕਰੀਏ: ```javascript let myVariable; ``` ਇਸ ਨਾਲ ਕੀ ਹਾਸਲ ਹੁੰਦਾ ਹੈ: - ਇਹ ਜਾਵਾਸਕ੍ਰਿਪਟ ਨੂੰ myVariable ਨਾਮਕ ਸਟੋਰੇਜ ਸਥਾਨ ਬਣਾਉਣ ਲਈ ਕਹਿੰਦਾ ਹੈ - ਜਾਵਾਸਕ੍ਰਿਪਟ ਇਸ ਵੈਰੀਏਬਲ ਲਈ ਮੈਮਰੀ ਵਿੱਚ ਸਥਾਨ ਅਲਾਟ ਕਰਦਾ ਹੈ - ਵੈਰੀਏਬਲ ਦੇ ਕੋਲ ਇਸ ਸਮੇਂ ਕੋਈ ਮੁੱਲ ਨਹੀਂ ਹੈ (undefined) 2. ਇਸਨੂੰ ਮੁੱਲ ਦਿਓ। ਹੁਣ ਆਓ ਆਪਣੇ ਵੈਰੀਏਬਲ ਵਿੱਚ ਕੁਝ ਪਾਓ: ```javascript myVariable = 123; ``` ਅਸਾਈਨਮੈਂਟ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ: - = ਓਪਰੇਟਰ ਸਾਡੇ ਵੈਰੀਏਬਲ ਨੂੰ ਮੁੱਲ 123 ਅਸਾਈਨ ਕਰਦਾ ਹੈ - ਵੈਰੀਏਬਲ ਹੁਣ ਇਸ ਮੁੱਲ ਨੂੰ ਰੱਖਦਾ ਹੈ ਨਾ ਕਿ undefined - ਤੁਸੀਂ ਆਪਣੇ ਕੋਡ ਵਿੱਚ ਕਿਤੇ ਵੀ ਇਸ ਮੁੱਲ ਨੂੰ ਰਿਫਰ ਕਰ ਸਕਦੇ ਹੋ myVariable ਵਰਤ ਕੇ > ਨੋਟ: ਇਸ ਪਾਠ ਵਿੱਚ = ਦੇ ਵਰਤੋਂ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸੀਂ "ਅਸਾਈਨਮੈਂਟ ਓਪਰੇਟਰ" ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ, ਜੋ ਵੈਰੀਏਬਲ ਨੂੰ ਮੁੱਲ ਸੈਟ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਬਰਾਬਰੀ ਨੂੰ ਦਰਸਾਉਂਦਾ ਨਹੀਂ। 3. ਸਮਾਰਟ ਤਰੀਕੇ ਨਾਲ ਕਰੋ। ਅਸਲ ਵਿੱਚ, ਆਓ ਉਹ ਦੋ ਕਦਮ ਮਿਲਾ ਕੇ ਕਰੀਏ: ```javascript let myVariable = 123; ``` ਇਹ ਤਰੀਕਾ ਜ਼ਿਆਦਾ ਕੁਸ਼ਲ ਹੈ: - ਤੁਸੀਂ ਇੱਕ ਹੀ ਬਿਆਨ ਵਿੱਚ ਵੈਰੀਏਬਲ ਘੋਸ਼ਿਤ ਕਰ ਰਹੇ ਹੋ ਅਤੇ ਮੁੱਲ ਅਸਾਈਨ ਕਰ ਰਹੇ ਹੋ - ਇਹ ਡਿਵੈਲਪਰਾਂ ਵਿੱਚ ਮਿਆਰੀ ਅਭਿਆਸ ਹੈ - ਇਹ ਕੋਡ ਦੀ ਲੰਬਾਈ ਘਟਾਉਂਦਾ ਹੈ ਜਦੋਂ ਕਿ ਸਪਸ਼ਟਤਾ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦਾ ਹੈ 4. ਆਪਣਾ ਮਨ ਬਦਲੋ। ਜੇ ਅਸੀਂ ਵੱਖ-ਵੱਖ ਨੰਬਰ ਸਟੋਰ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹਾਂ ਤਾਂ ਕੀ ਹੋਵੇਗਾ? ```javascript myVariable = 321; ``` ਰੀਅਸਾਈਨਮੈਂਟ ਨੂੰ ਸਮਝਣਾ: - ਵੈਰੀਏਬਲ ਹੁਣ 321 ਰੱਖਦਾ ਹੈ ਨਾ ਕਿ 123 - ਪਿਛਲਾ ਮੁੱਲ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ - ਵੈਰੀਏਬਲ ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਸਿਰਫ ਇੱਕ ਮੁੱਲ ਸਟੋਰ ਕਰਦੇ ਹਨ - ਇਹ ਮਿਊਟੇਬਿਲਿਟੀ let ਨਾਲ ਘੋਸ਼ਿਤ ਕੀਤੇ ਵੈਰੀਏਬਲ ਦੀ ਮੁੱਖ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ ✅ ਇਸਨੂੰ ਅਜ਼ਮਾਓ! ਤੁਸੀਂ ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਸਿੱਧੇ ਜਾਵਾਸਕ੍ਰਿਪਟ ਲਿਖ ਸਕਦੇ ਹੋ। ਇੱਕ ਬ੍ਰਾਊਜ਼ਰ ਵਿੰਡੋ ਖੋਲ੍ਹੋ ਅਤੇ ਡਿਵੈਲਪਰ ਟੂਲਜ਼ ਵਿੱਚ ਜਾਓ। ਕਨਸੋਲ ਵਿੱਚ, ਤੁਹਾਨੂੰ ਇੱਕ ਪ੍ਰੰਪਟ ਮਿਲੇਗਾ; let myVariable = 123 ਟਾਈਪ ਕਰੋ, ਰਿਟਰਨ ਦਬਾਓ, ਫਿਰ myVariable ਟਾਈਪ ਕਰੋ। ਕੀ ਹੁੰਦਾ ਹੈ? ਨੋਟ ਕਰੋ, ਤੁਸੀਂ ਅਗਲੇ ਪਾਠਾਂ ਵਿੱਚ ਇਹ ਸੰਕਲਪ ਵਧੇਰੇ ਸਿੱਖੋਗੇ। ### 🧠 ਵੈਰੀਏਬਲ ਮਾਸਟਰੀ ਚੈੱਕ: ਆਰਾਮਦਾਇਕ ਹੋਣਾ ਆਓ ਵੇਖੀਏ ਕਿ ਤੁਸੀਂ ਵੈਰੀਏਬਲ ਬਾਰੇ ਕਿਵੇਂ ਮਹਿਸੂਸ ਕਰ ਰਹੇ ਹੋ: - ਕੀ ਤੁਸੀਂ ਵੈਰੀਏਬਲ ਨੂੰ ਘੋਸ਼ਿਤ ਕਰਨ ਅਤੇ ਅਸਾਈਨ ਕਰਨ ਦੇ ਫਰਕ ਨੂੰ ਸਮਝਾ ਸਕਦੇ ਹੋ? - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ ਵੈਰੀਏਬਲ ਨੂੰ ਘੋਸ਼ਿਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਸਨੂੰ ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ? - ਤੁਸੀਂ ਕਿਸ ਸਮੇਂ let ਨੂੰ const ਦੇ ਉੱਤੇ ਚੁਣੋਗੇ? ## ਕਾਂਸਟੈਂਟਸ ਕਈ ਵਾਰ ਤੁਹਾਨੂੰ ਜਾਣਕਾਰੀ ਸਟੋਰ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਜੋ ਪ੍ਰੋਗਰਾਮ ਦੇ ਚਲਣ ਦੌਰਾਨ ਕਦੇ ਨਹੀਂ ਬਦਲਣੀ ਚਾਹੀਦੀ। ਕਾਂਸਟੈਂਟਸ ਨੂੰ ਉਹ ਗਣਿਤਕ ਸਿਧਾਂਤਾਂ ਵਾਂਗ ਸੋਚੋ ਜੋ ਯੂਕਲਿਡ ਨੇ ਪ੍ਰਾਚੀਨ ਯੂਨਾਨ ਵਿੱਚ ਸਥਾਪਿਤ ਕੀਤੇ - ਇੱਕ ਵਾਰ ਸਾਬਤ ਅਤੇ ਦਸਤਾਵੇਜ਼ ਬਣਾਉਣ ਤੋਂ ਬਾਅਦ, ਉਹ ਸਾਰੇ ਭਵਿੱਖ ਦੇ ਹਵਾਲੇ ਲਈ ਸਥਿਰ ਰਹੇ। ਕਾਂਸਟੈਂਟਸ ਵੈਰੀਏਬਲਾਂ ਵਾਂਗ ਹੀ ਕੰਮ ਕਰਦੇ ਹਨ, ਪਰ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਪਾਬੰਦੀ ਨਾਲ: ਜਦੋਂ ਤੁਸੀਂ ਉਹਨਾਂ ਦਾ ਮੁੱਲ ਅਸਾਈਨ ਕਰਦੇ ਹੋ, ਇਸਨੂੰ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਇਹ ਅਸਥਿਰਤਾ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਮੁੱਲਾਂ ਨੂੰ ਅਨਜਾਣੇ ਤਬਦੀਲੀਆਂ ਤੋਂ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। ਕਾਂਸਟੈਂਟ ਦੇ ਘੋਸ਼ਣਾ ਅਤੇ ਸ਼ੁਰੂਆਤ ਵੈਰੀਏਬਲ ਦੇ ਸਮੇਕਾਂਤਾਂ ਦੀ ਪਾਲਨਾ ਕਰਦੀ ਹੈ, const ਕੀਵਰਡ ਦੇ ਅਲਾਵਾ। ਕਾਂਸਟੈਂਟਸ ਆਮ ਤੌਰ 'ਤੇ ਸਾਰੇ ਅਪਰਕੇਸ ਅੱਖਰਾਂ ਨਾਲ ਘੋਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। ਇਹ ਕੋਡ ਕੀ ਕਰਦਾ ਹੈ: - ਬਣਾਉਂਦਾ ਹੈ ਇੱਕ ਕਾਂਸਟੈਂਟ MY_VARIABLE ਜਿਸਦਾ ਮੁੱਲ 123 ਹੈ - ਵਰਤਦਾ ਹੈ ਕਾਂਸਟੈਂਟਸ ਲਈ ਅਪਰਕੇਸ ਨਾਮਕ ਰੀਤੀ - ਰੋਕਦਾ ਹੈ ਇਸ ਮੁੱਲ ਵਿੱਚ ਕੋਈ ਭਵਿੱਖ ਦੀ ਤਬਦੀਲੀ ਕਾਂਸਟੈਂਟਸ ਦੇ ਦੋ ਮੁੱਖ ਨਿਯਮ ਹਨ: - ਤੁਹਾਨੂੰ ਤੁਰੰਤ ਮੁੱਲ ਦੇਣਾ ਪਵੇਗਾ - ਕੋਈ ਖਾਲੀ ਕਾਂਸਟੈਂਟਸ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ! - ਤੁਸੀਂ ਇਸ ਮੁੱਲ ਨੂੰ ਕਦੇ ਬਦਲ ਨਹੀਂ ਸਕਦੇ - ਜੇ ਤੁਸੀਂ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਤਾਂ ਜਾਵਾਸਕ੍ਰਿਪਟ ਗਲਤੀ ਸੁਟੇਗਾ। ਆਓ ਵੇਖੀਏ ਕਿ ਮੈਂ ਕੀ ਕਹਿ ਰਿਹਾ ਹਾਂ: ਸਧਾਰਨ ਮੁੱਲ - ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਸਵੀਕਾਰ ਨਹੀਂ ਹੈ: ```javascript const PI = 3; PI = 4; // ਸਵੀਕਾਰ ਨਹੀਂ ``` ਤੁਹਾਨੂੰ ਕੀ ਯਾਦ ਰੱਖਣਾ ਚਾਹੀਦਾ ਹੈ: - ਕੋਸ਼ਿਸ਼ਾਂ ਕਾਂਸਟੈਂਟ ਨੂੰ ਮੁੜ ਅਸਾਈਨ ਕਰਨ ਦੀ ਗਲਤੀ ਪੈਦਾ ਕਰੇਗੀ - ਰੱਖਦਾ ਹੈ ਮਹੱਤਵਪੂਰਨ ਮੁੱਲਾਂ ਨੂੰ ਅਨਜਾਣੇ ਤਬਦੀਲੀਆਂ ਤੋਂ - ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਮੁੱਲ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਸਥਿਰ ਰਹੇ ਆਬਜੈਕਟ ਰੀਫਰੈਂਸ ਸੁਰੱਖਿਅਤ ਹੈ - ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਸਵੀਕਾਰ ਨਹੀਂ ਹੈ: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ਸਵੀਕਾਰ ਨਹੀਂ ``` ਇਹ ਸੰਕਲਪਾਂ ਨੂੰ ਸਮਝਣਾ: - ਰੋਕਦਾ ਹੈ ਪੂਰੇ ਆਬਜੈਕਟ ਨੂੰ ਨਵੇਂ ਨਾਲ ਬਦਲਣ ਤੋਂ - ਸੁਰੱਖਿਅਤ ਕਰਦਾ ਹੈ ਮੂਲ ਆਬਜੈਕਟ ਲਈ ਰੀਫਰੈਂਸ - ਮੈਮਰੀ ਵਿੱਚ ਆਬਜੈਕਟ ਦੀ ਪਛਾਣ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦਾ ਹੈ ਆਬਜੈਕਟ ਮੁੱਲ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੈ - ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਸਵੀਕਾਰ ਹੈ: ```javascript const obj = { a: 3 }; obj.a = 5; // ਸਵੀਕਾਰ ਹੈ ``` ਇੱਥੇ ਕੀ ਹੁੰਦਾ ਹੈ: - ਸੰਪਤੀ ਮੁੱਲ ਨੂੰ ਆਬਜੈਕਟ ਦੇ ਅੰਦਰ ਬਦਲਦਾ ਹੈ - ਉਹੀ ਆਬਜੈਕਟ ਰੀਫਰੈਂਸ ਰੱਖਦਾ ਹੈ - ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਆਬਜੈਕਟ ਦੀ ਸਮੱਗਰੀ ਬਦਲ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਰੀਫਰੈਂਸ ਸਥਿਰ ਰਹਿੰਦਾ ਹੈ > ਨੋਟ ਕਰੋ, ਇੱਕ const ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਰੀਫਰੈਂਸ ਮੁੜ ਅਸਾਈਨਮੈਂਟ ਤੋਂ ਸੁਰੱਖਿਅਤ ਹੈ। ਮੁੱਲ _ਅਸਥਿਰ_ ਨਹੀਂ ਹੈ ਅਤੇ ਬਦਲ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜੇਕਰ ਇਹ ਇੱਕ ਜਟਿਲ ਬਣਤਰ ਜਿਵੇਂ ਕਿ ਆਬਜੈਕਟ ਹੈ। ## ਡਾਟਾ ਟਾਈਪਸ ਜਾਵਾਸਕ੍ਰਿਪਟ ਜਾਣਕਾਰੀ ਨੂੰ ਵੱਖ-ਵੱਖ ਸ਼੍ਰੇਣੀਆਂ ਵਿੱਚ ਸੰਗਠਿਤ ਕਰਦਾ ਹੈ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਡਾਟਾ ਟਾਈਪਸ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਸੰਕਲਪ ਉਸ ਤਰੀਕੇ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਜਿਵੇਂ ਪ੍ਰਾਚੀਨ ਵਿਦਵਾਨਾਂ ਨੇ ਗਿਆਨ ਨੂੰ ਸ਼੍ਰੇਣੀਬੱਧ ਕੀਤਾ - ਅਰਸਤੂ ਨੇ ਵੱਖ-ਵੱਖ ਤਰ੍ਹਾਂ ਦੇ ਤਰਕਾਂ ਵਿੱਚ ਫਰਕ ਕੀਤਾ, ਇਹ ਜਾਣਦੇ ਹੋਏ ਕਿ ਕਵਿਤਾ, ਗਣਿਤ ਅਤੇ ਕੁਦਰਤੀ ਦਰਸ਼ਨ 'ਤੇ ਤਰਕਸ਼ੀਲ ਸਿਧਾਂਤਾਂ ਨੂੰ ਇੱਕਸਾਰ ਨਹੀਂ ਲਗਾਇਆ ਜਾ ਸਕਦਾ। ਡਾਟਾ ਟਾਈਪਸ ਮਹੱਤਵਪੂਰਨ ਹਨ ਕਿਉਂਕਿ ਵੱਖ-ਵੱਖ ਕਾਰਵਾਈਆਂ ਵੱਖ-ਵੱਖ ਕਿਸਮ ਦੀ ਜਾਣਕਾਰੀ ਨਾਲ ਕੰਮ ਕਰਦੀਆਂ ਹਨ। ਜਿਵੇਂ ਤੁਸੀਂ ਕਿਸੇ ਵਿਅਕਤੀ ਦੇ ਨਾਮ 'ਤੇ ਗਣਿਤ ਨਹੀਂ ਕਰ ਸਕਦੇ ਜਾਂ ਗਣਿਤਕ ਸਮੀਕਰਨ ਨੂੰ ਅਲਫਾਬੈਟਿਕਲ ਨਹੀਂ ਕਰ ਸਕਦੇ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਹਰ ਕਾਰਵਾਈ ਲਈ ਉਚਿਤ ਡਾਟਾ ਟਾਈਪ ਦੀ ਲੋੜ ਰੱਖਦਾ ਹੈ। ਇਸਨੂੰ ਸਮਝਣ ਨਾਲ ਗਲਤੀਆਂ ਰੋਕੀਆਂ ਜਾਂਦੀਆਂ ਹਨ ਅਤੇ ਤੁਹਾਡਾ ਕੋਡ ਹੋਰ ਭਰੋਸੇਯੋਗ ਬਣਦਾ ਹੈ। ਵੈਰੀਏਬਲ ਵੱਖ-ਵੱਖ ਕਿਸਮ ਦੇ ਮੁੱਲਾਂ ਨੂੰ ਸਟੋਰ ਕਰ ਸਕਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ ਨੰਬਰ ਅਤੇ ਲਿਖਤ। ਇਹ ਵੱਖ-ਵੱਖ ਕਿਸਮ ਦੇ ਮੁੱਲਾਂ ਨੂੰ ਡਾਟਾ ਟਾਈਪਸ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਡਾਟਾ ਟਾਈਪਸ ਸੌਫਟਵੇਅਰ ਵਿਕਾਸ ਦਾ ਇੱਕ ਮਹੱਤਵਪੂ ਦੋ ਜਾਂ ਵਧੇਰੇ ਸਟ੍ਰਿੰਗਜ਼ ਨੂੰ ਜੋੜਨ ਲਈ, ਜਾਂ ਉਨ੍ਹਾਂ ਨੂੰ ਇਕੱਠੇ ਕਰਨ ਲਈ, + ਓਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਹਰ ਕਦਮ ਵਿੱਚ ਕੀ ਹੋ ਰਿਹਾ ਹੈ: - ਕਈ ਸਟ੍ਰਿੰਗਜ਼ ਨੂੰ + ਓਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜੋੜਦਾ ਹੈ - ਪਹਿਲੇ ਉਦਾਹਰਨ ਵਿੱਚ ਸਟ੍ਰਿੰਗਜ਼ ਨੂੰ ਬਿਨਾਂ ਖਾਲੀ ਥਾਂ ਦੇ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਜੋੜਦਾ ਹੈ - ਪੜ੍ਹਨ ਯੋਗ ਬਣਾਉਣ ਲਈ ਸਟ੍ਰਿੰਗਜ਼ ਦੇ ਵਿਚਕਾਰ ਖਾਲੀ ਥਾਂ " " ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ - ਸਹੀ ਫਾਰਮੈਟਿੰਗ ਲਈ ਅੰਕ-ਚਿੰਨ੍ਹ ਜਿਵੇਂ ਕਿ ਕਾਮਾ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ ✅ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ 1 + 1 = 2 ਕਿਉਂ ਹੈ, ਪਰ '1' + '1' = 11 ਕਿਉਂ ਹੈ? ਸੋਚੋ। '1' + 1 ਬਾਰੇ ਕੀ ਖਿਆਲ ਹੈ? ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼ ਸਟ੍ਰਿੰਗਜ਼ ਨੂੰ ਫਾਰਮੈਟ ਕਰਨ ਦਾ ਇੱਕ ਹੋਰ ਤਰੀਕਾ ਹੈ, ਪਰ ਇਸ ਵਿੱਚ quotes ਦੀ ਬਜਾਏ backtick ਦੀ ਵਰਤੋਂ ਹੁੰਦੀ ਹੈ। ਜੋ ਕੁਝ ਸਧਾਰਨ ਟੈਕਸਟ ਨਹੀਂ ਹੈ, ਉਸਨੂੰ ${ } ਪਲੇਸਹੋਲਡਰ ਵਿੱਚ ਰੱਖਣਾ ਪੈਂਦਾ ਹੈ। ਇਸ ਵਿੱਚ ਕੋਈ ਵੀ ਵੈਰੀਏਬਲ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ ਜੋ ਸਟ੍ਰਿੰਗ ਹੋ ਸਕਦੇ ਹਨ। ਹਰ ਹਿੱਸੇ ਨੂੰ ਸਮਝੋ: - ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼ ਬਣਾਉਣ ਲਈ quotes ਦੀ ਬਜਾਏ backticks ` `` ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ - ${} ਪਲੇਸਹੋਲਡਰ ਸਿੰਟੈਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਵੈਰੀਏਬਲਜ਼ ਨੂੰ ਸਿੱਧੇ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ - ਜਿਵੇਂ ਲਿਖਿਆ ਗਿਆ ਹੈ, ਖਾਲੀ ਥਾਂ ਅਤੇ ਫਾਰਮੈਟਿੰਗ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਦਾ ਹੈ - ਵੈਰੀਏਬਲਾਂ ਨਾਲ ਜਟਿਲ ਸਟ੍ਰਿੰਗਜ਼ ਬਣਾਉਣ ਦਾ ਇੱਕ ਸਾਫ਼ ਤਰੀਕਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਤੁਹਾਡੇ ਫਾਰਮੈਟਿੰਗ ਦੇ ਲਕਸ਼ਾਂ ਨੂੰ ਦੋਵੇਂ ਤਰੀਕਿਆਂ ਨਾਲ ਹਾਸਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਪਰ ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼ ਖਾਲੀ ਥਾਂ ਅਤੇ ਲਾਈਨ ਬ੍ਰੇਕਾਂ ਦਾ ਪੂਰਾ ਧਿਆਨ ਰੱਖਦੇ ਹਨ। ✅ ਤੁਸੀਂ ਟੈਂਪਲੇਟ ਲਿਟਰਲ ਕਦੋਂ ਵਰਤੋਂਗੇ ਅਤੇ ਸਧਾਰਨ ਸਟ੍ਰਿੰਗ ਕਦੋਂ? ### 🔤 ਸਟ੍ਰਿੰਗ ਮਾਹਰਤਾ ਚੈੱਕ: ਟੈਕਸਟ ਮੈਨਿਪੂਲੇਸ਼ਨ ਵਿੱਚ ਭਰੋਸਾ ਆਪਣੀਆਂ ਸਟ੍ਰਿੰਗ ਸਿੱਖਣ ਦੀਆਂ ਯੋਗਤਾਵਾਂ ਦਾ ਮੁਲਾਂਕਣ ਕਰੋ: - ਕੀ ਤੁਸੀਂ ਸਮਝਾ ਸਕਦੇ ਹੋ ਕਿ '1' + '1' '11' ਕਿਉਂ ਹੈ ਨਾ ਕਿ 2? - ਤੁਹਾਨੂੰ ਕਿਹੜਾ ਸਟ੍ਰਿੰਗ ਤਰੀਕਾ ਵਧੇਰੇ ਪੜ੍ਹਨ ਯੋਗ ਲੱਗਦਾ ਹੈ: ਜੋੜਨ ਜਾਂ ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼? - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ ਸਟ੍ਰਿੰਗ ਦੇ ਆਸ-ਪਾਸ quotes ਭੁੱਲ ਜਾਂਦੇ ਹੋ? ### ਬੂਲੀਅਨ ਬੂਲੀਅਨ ਡਾਟਾ ਦਾ ਸਭ ਤੋਂ ਸਧਾਰਨ ਰੂਪ ਹੈ: ਇਹ ਸਿਰਫ ਦੋ ਮੁੱਲ ਰੱਖ ਸਕਦੇ ਹਨ – true ਜਾਂ false। ਇਹ ਬਾਈਨਰੀ ਲਾਜਿਕ ਸਿਸਟਮ 19ਵੀਂ ਸਦੀ ਦੇ ਗਣਿਤਜੀ George Boole ਦੇ ਕੰਮ ਤੋਂ ਆਉਂਦਾ ਹੈ, ਜਿਸ ਨੇ ਬੂਲੀਅਨ ਅਲਜਬਰਾ ਵਿਕਸਿਤ ਕੀਤੀ। ਇਹਨਾਂ ਦੀ ਸਧਾਰਨਤਾ ਦੇ ਬਾਵਜੂਦ, ਬੂਲੀਅਨ ਪ੍ਰੋਗਰਾਮ ਲਾਜਿਕ ਲਈ ਬਹੁਤ ਜ਼ਰੂਰੀ ਹਨ। ਇਹ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਹਾਲਾਤਾਂ ਦੇ ਆਧਾਰ 'ਤੇ ਫੈਸਲੇ ਕਰਨ ਦੇ ਯੋਗ ਬਣਾਉਂਦੇ ਹਨ – ਜਿਵੇਂ ਕਿ ਯੂਜ਼ਰ ਲੌਗਇਨ ਹੈ ਜਾਂ ਨਹੀਂ, ਕੀ ਬਟਨ ਕਲਿਕ ਕੀਤਾ ਗਿਆ ਸੀ, ਜਾਂ ਕੀ ਕੁਝ ਮਾਪਦੰਡ ਪੂਰੇ ਕੀਤੇ ਗਏ ਹਨ। ਬੂਲੀਅਨ ਸਿਰਫ ਦੋ ਮੁੱਲ ਰੱਖ ਸਕਦੇ ਹਨ: true ਜਾਂ false। ਬੂਲੀਅਨ ਇਹ ਫੈਸਲਾ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ ਕਿ ਜਦੋਂ ਕੁਝ ਹਾਲਾਤ ਪੂਰੇ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਕਿਹੜੀਆਂ ਕੋਡ ਲਾਈਨਾਂ ਚਲਾਈਆਂ ਜਾਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ। ਬਹੁਤ ਸਾਰੀਆਂ ਸਥਿਤੀਆਂ ਵਿੱਚ, operators ਬੂਲੀਅਨ ਦਾ ਮੁੱਲ ਸੈਟ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ ਅਤੇ ਤੁਸੀਂ ਅਕਸਰ ਵੇਖੋਗੇ ਕਿ ਵੈਰੀਏਬਲਜ਼ ਨੂੰ ਸ਼ੁਰੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜਾਂ ਉਨ੍ਹਾਂ ਦੇ ਮੁੱਲ ਨੂੰ ਇੱਕ ਓਪਰੇਟਰ ਨਾਲ ਅਪਡੇਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਉਪਰੋਕਤ ਵਿੱਚ, ਅਸੀਂ: - ਇੱਕ ਵੈਰੀਏਬਲ ਬਣਾਈ ਜੋ ਬੂਲੀਅਨ ਮੁੱਲ true ਸਟੋਰ ਕਰਦੀ ਹੈ - ਦਿਖਾਇਆ ਕਿ ਬੂਲੀਅਨ ਮੁੱਲ false ਕਿਵੇਂ ਸਟੋਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ - ਸਹੀ keywords true ਅਤੇ false ਦੀ ਵਰਤੋਂ ਕੀਤੀ (quotes ਦੀ ਲੋੜ ਨਹੀਂ) - ਇਨ੍ਹਾਂ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਸ਼ਰਤੀ ਬਿਆਨਾਂ ਵਿੱਚ ਵਰਤਣ ਲਈ ਤਿਆਰ ਕੀਤਾ ✅ ਇੱਕ ਵੈਰੀਏਬਲ 'ਸੱਚਾ' ਮੰਨਿਆ ਜਾ ਸਕਦਾ ਹੈ ਜੇ ਇਹ ਬੂਲੀਅਨ true ਨੂੰ ਮੁੱਲ ਦੇ ਤੌਰ 'ਤੇ ਮਾਨਤਾ ਦਿੰਦਾ ਹੈ। ਦਿਲਚਸਪ ਗੱਲ ਇਹ ਹੈ ਕਿ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ, ਸਾਰੇ ਮੁੱਲ ਸੱਚੇ ਹਨ ਜਦੋਂ ਤੱਕ ਉਹ 'ਝੂਠੇ' ਤੌਰ 'ਤੇ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ। ### 🎯 ਬੂਲੀਅਨ ਲਾਜਿਕ ਚੈੱਕ: ਫੈਸਲੇ ਲੈਣ ਦੀ ਯੋਗਤਾ ਆਪਣੀ ਬੂਲੀਅਨ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਤੁਹਾਨੂੰ ਕਿਉਂ ਲੱਗਦਾ ਹੈ ਕਿ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ true ਅਤੇ false ਤੋਂ ਬਾਹਰ "truthy" ਅਤੇ "falsy" ਮੁੱਲ ਹਨ? - ਕੀ ਤੁਸੀਂ ਅਨੁਮਾਨ ਲਗਾ ਸਕਦੇ ਹੋ ਕਿ ਕਿਹੜਾ ਮੁੱਲ 'falsy' ਹੈ: 0, "0", [], "false"? - ਬੂਲੀਅਨ ਪ੍ਰੋਗਰਾਮ ਦੇ ਪ੍ਰਵਾਹ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਵਿੱਚ ਕਿਵੇਂ ਮਦਦਗਾਰ ਹੋ ਸਕਦੇ ਹਨ? --- ## 📊 ਤੁਹਾਡਾ ਡਾਟਾ ਟਾਈਪਸ ਟੂਲਕਿਟ ਸਾਰ ## GitHub Copilot Agent Challenge 🚀 Agent ਮੋਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੇਠਾਂ ਦਿੱਤੇ ਚੈਲੈਂਜ ਨੂੰ ਪੂਰਾ ਕਰੋ: ਵੇਰਵਾ: ਇੱਕ ਪੈਰਸਨਲ ਇਨਫਰਮੇਸ਼ਨ ਮੈਨੇਜਰ ਬਣਾਓ ਜੋ ਇਸ ਪਾਠ ਵਿੱਚ ਸਿੱਖੇ ਸਾਰੇ ਜਾਵਾਸਕ੍ਰਿਪਟ ਡਾਟਾ ਟਾਈਪਸ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੋਵੇ ਅਤੇ ਅਸਲ-ਦੁਨੀਆ ਦੇ ਡਾਟਾ ਸਥਿਤੀਆਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੋਵੇ। ਪ੍ਰੋਮਪਟ: ਇੱਕ ਜਾਵਾਸਕ੍ਰਿਪਟ ਪ੍ਰੋਗਰਾਮ ਬਣਾਓ ਜੋ ਇੱਕ ਯੂਜ਼ਰ ਪ੍ਰੋਫਾਈਲ ਓਬਜੈਕਟ ਬਣਾਉਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ: ਇੱਕ ਵਿਅਕਤੀ ਦਾ ਨਾਮ (string), ਉਮਰ (number), ਇੱਕ ਵਿਦਿਆਰਥੀ ਸਥਿਤੀ (boolean), ਪਸੰਦੀਦਾ ਰੰਗਾਂ ਇੱਕ array ਦੇ ਰੂਪ ਵਿੱਚ, ਅਤੇ ਇੱਕ ਪਤਾ ਓਬਜੈਕਟ ਜਿਸ ਵਿੱਚ ਗਲੀ, ਸ਼ਹਿਰ, ਅਤੇ zip ਕੋਡ ਗੁਣ ਹਨ। ਪ੍ਰੋਫਾਈਲ ਜਾਣਕਾਰੀ ਦਿਖਾਉਣ ਅਤੇ ਵਿਅਕਤੀਗਤ ਖੇਤਰਾਂ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਫੰਕਸ਼ਨ ਸ਼ਾਮਲ ਕਰੋ। ਸਟ੍ਰਿੰਗ ਜੋੜਨ, ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼, ਉਮਰ ਨਾਲ ਗਣਿਤ ਕਾਰਵਾਈਆਂ, ਅਤੇ ਵਿਦਿਆਰਥੀ ਸਥਿਤੀ ਲਈ ਬੂਲੀਅਨ ਲਾਜਿਕ ਨੂੰ ਦਰਸਾਓ। Agent ਮੋਡ ਬਾਰੇ ਹੋਰ ਜਾਣੋ ਇਥੇ। ## 🚀 ਚੈਲੈਂਜ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਕੁਝ ਵਿਵਹਾਰ ਹਨ ਜੋ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਹੈਰਾਨ ਕਰ ਸਕਦੇ ਹਨ। ਇੱਥੇ ਇੱਕ ਕਲਾਸਿਕ ਉਦਾਹਰਨ ਹੈ ਜੋ ਪੜਤਾਲ ਕਰਨ ਲਈ ਹੈ: ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਇਹ ਟਾਈਪ ਕਰੋ: let age = 1; let Age = 2; age == Age ਅਤੇ ਨਤੀਜੇ ਨੂੰ ਦੇਖੋ। ਇਹ false ਵਾਪਸ ਕਰਦਾ ਹੈ – ਕੀ ਤੁਸੀਂ ਪਤਾ ਲਗਾ ਸਕਦੇ ਹੋ ਕਿ ਕਿਉਂ? ਇਹ ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਬਹੁਤ ਸਾਰੇ ਵਿਵਹਾਰਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ ਜਿਸਨੂੰ ਸਮਝਣ ਦੀ ਲੋੜ ਹੈ। ਇਨ੍ਹਾਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨਾਲ ਜਾਣੂ ਹੋਣਾ ਤੁਹਾਨੂੰ ਵਧੇਰੇ ਭਰੋਸੇਯੋਗ ਕੋਡ ਲਿਖਣ ਅਤੇ ਮੁੱਦਿਆਂ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਡੀਬੱਗ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰੇਗਾ। ## ਪਾਠ-ਪ੍ਰਵਚਨ ਕਵਿਜ਼ ਪਾਠ-ਪ੍ਰਵਚਨ ਕਵਿਜ਼ ## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ-ਅਧਿਐਨ ਜਾਵਾਸਕ੍ਰਿਪਟ ਅਭਿਆਸਾਂ ਦੀ ਇਸ ਸੂਚੀ ਨੂੰ ਵੇਖੋ ਅਤੇ ਇੱਕ ਅਭਿਆਸ ਕਰੋ। ਤੁਸੀਂ ਕੀ ਸਿੱਖਿਆ? ## ਅਸਾਈਨਮੈਂਟ ਡਾਟਾ ਟਾਈਪਸ ਅਭਿਆਸ ## 🚀 ਤੁਹਾਡਾ ਜਾਵਾਸਕ੍ਰਿਪਟ ਡਾਟਾ ਟਾਈਪਸ ਮਾਹਰਤਾ ਟਾਈਮਲਾਈਨ ### ⚡ ਤੁਸੀਂ ਅਗਲੇ 5 ਮਿੰਟਾਂ ਵਿੱਚ ਕੀ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਨੂੰ ਖੋਲ੍ਹੋ ਅਤੇ ਵੱਖ-ਵੱਖ ਡਾਟਾ ਟਾਈਪਸ ਦੇ 3 ਵੈਰੀਏਬਲ ਬਣਾਓ - [ ] ਚੈਲੈਂਜ ਅਭਿਆਸ ਕਰੋ: let age = 1; let Age = 2; age == Age ਅਤੇ ਪਤਾ ਲਗਾਓ ਕਿ ਇਹ false ਕਿਉਂ ਹੈ - [ ] ਆਪਣੇ ਨਾਮ ਅਤੇ ਪਸੰਦੀਦਾ ਨੰਬਰ ਨਾਲ ਸਟ੍ਰਿੰਗ ਜੋੜਨ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਇਹ ਜਾਂਚੋ ਕਿ ਜਦੋਂ ਤੁਸੀਂ ਸਟ੍ਰਿੰਗ ਵਿੱਚ ਨੰਬਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ ਤਾਂ ਕੀ ਹੁੰਦਾ ਹੈ ### 🎯 ਤੁਸੀਂ ਇਸ ਘੰਟੇ ਵਿੱਚ ਕੀ ਹਾਸਲ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਪਾਠ-ਪ੍ਰਵਚਨ ਕਵਿਜ਼ ਪੂਰਾ ਕਰੋ ਅਤੇ ਕੋਈ ਵੀ ਗੁੰਝਲਦਾਰ ਧਾਰਨਾਵਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ - [ ] ਇੱਕ ਮਿਨੀ ਕੈਲਕੂਲੇਟਰ ਬਣਾਓ ਜੋ ਦੋ ਨੰਬਰਾਂ ਨੂੰ ਜੋੜਦਾ, ਘਟਾਉਂਦਾ, ਗੁਣਾ ਕਰਦਾ ਅਤੇ ਵੰਡਦਾ ਹੈ - [ ] ਟੈਂਪਲੇਟ ਲਿਟਰਲਜ਼ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਸਧਾਰਨ ਨਾਮ ਫਾਰਮੈਟਰ ਬਣਾਓ - [ ] == ਅਤੇ === ਤੁਲਨਾ ਓਪਰੇਟਰਾਂ ਦੇ ਵਿਚਕਾਰ ਅੰਤਰਾਂ ਦੀ ਪੜਚੋਲ ਕਰੋ - [ ] ਵੱਖ-ਵੱਖ ਡਾਟਾ ਟਾਈਪਸ ਵਿੱਚ ਤਬਦੀਲ ਕਰਨ ਦਾ ਅਭਿਆਸ ਕਰੋ ### 📅 ਤੁਹਾਡਾ ਹਫ਼ਤੇ-ਲੰਬਾ ਜਾਵਾਸਕ੍ਰਿਪਟ ਅਧਾਰ - [ ] ਅਸਾਈਨਮੈਂਟ ਨੂੰ ਭਰੋਸੇ ਅਤੇ ਰਚਨਾਤਮਕਤਾ ਨਾਲ ਪੂਰਾ ਕਰੋ - [ ] ਸਿੱਖੇ ਸਾਰੇ ਡਾਟਾ ਟਾਈਪਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਵਿਅਕਤੀਗਤ ਪ੍ਰੋਫਾਈਲ ਓਬਜੈਕਟ ਬਣਾਓ - [ ] CSS-Tricks ਤੋਂ ਜਾਵਾਸਕ੍ਰਿਪਟ ਅਭਿਆਸਾਂ ਨਾਲ ਅਭਿਆਸ ਕਰੋ - [ ] ਬੂਲੀਅਨ ਲਾਜਿਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਸਧਾਰਨ ਫਾਰਮ ਵੈਲੀਡੇਟਰ ਬਣਾਓ - [ ] Array ਅਤੇ Object ਡਾਟਾ ਟਾਈਪਸ ਨਾਲ ਅਭਿਆਸ ਕਰੋ (ਆਉਣ ਵਾਲੇ ਪਾਠਾਂ ਦੀ ਝਲਕ) - [ ] ਜਾਵਾਸਕ੍ਰਿਪਟ ਕਮਿਊਨਿਟੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ ਅਤੇ ਡਾਟਾ ਟਾਈਪਸ ਬਾਰੇ ਸਵਾਲ ਪੁੱਛੋ ### 🌟 ਤੁਹਾਡਾ ਮਹੀਨੇ-ਲੰਬਾ ਰੂਪਾਂਤਰ - [ ] ਵੱਡੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਡਾਟਾ ਟਾਈਪਸ ਦੇ ਗਿਆਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰੋ - [ ] ਅਸਲ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਹਰ ਡਾਟਾ ਟਾਈਪ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਸਮਝੋ ਅਤੇ ਕਾਰਨ - [ ] ਹੋਰ ਸ਼ੁਰੂਆਤ ਕਰਨ ਵਾਲਿਆਂ ਨੂੰ ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਮੂਲ ਸਿਧਾਂਤਾਂ ਨੂੰ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰੋ - [ ] ਵੱਖ-ਵੱਖ ਕਿਸਮਾਂ ਦੇ ਯੂਜ਼ਰ ਡਾਟਾ ਨੂੰ ਸੰਭਾਲਣ ਵਾਲਾ ਇੱਕ ਛੋਟਾ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਓ - [ ] ਤਰਕਿਕਤਾ ਅਤੇ ਸਖ਼ਤ ਸਮਾਨਤਾ ਵਰਗੇ ਉੱਚ-ਸਤਰੀ ਡਾਟਾ ਟਾਈਪ ਧਾਰਨਾਵਾਂ ਦੀ ਪੜਚੋਲ ਕਰੋ - [ ] ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਖੁੱਲ੍ਹੇ ਸਰੋਤ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਦਸਤਾਵੇਜ਼ੀ ਸੁਧਾਰਾਂ ਨਾਲ ਯੋਗਦਾਨ ਪਾਓ ### 🧠 ਅੰਤਿਮ ਡਾਟਾ ਟਾਈਪਸ ਮਾਹਰਤਾ ਚੈੱਕ-ਇਨ ਆਪਣੇ ਜਾਵਾਸਕ੍ਰਿਪਟ ਅਧਾਰ ਦਾ ਜਸ਼ਨ ਮਨਾਓ: - ਤੁਹਾਨੂੰ ਕਿਹੜਾ ਡਾਟਾ ਟਾਈਪ ਆਪਣੇ ਵਿਵਹਾਰ ਦੇ ਹਿਸਾਬ ਨਾਲ ਸਭ ਤੋਂ ਹੈਰਾਨ ਕਰਨ ਵਾਲਾ ਲੱਗਾ? - ਤੁਸੀਂ ਇੱਕ ਦੋਸਤ ਨੂੰ ਵੈਰੀਏਬਲਜ਼ ਅਤੇ ਕਾਂਸਟੈਂਟਸ ਦੀ ਵਿਆਖਿਆ ਕਰਨ ਵਿੱਚ ਕਿੰਨਾ ਆਸਾਨੀ ਮਹਿਸੂਸ ਕਰਦੇ ਹੋ? - ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੇ ਟਾਈਪ ਸਿਸਟਮ ਬਾਰੇ ਤੁਹਾਨੂੰ ਸਭ ਤੋਂ ਦਿਲਚਸਪ ਚੀਜ਼ ਕਿਹੜੀ ਲੱਗੀ? - ਤੁਸੀਂ ਕਿਹੜਾ ਅਸਲ-ਦੁਨੀਆ ਦਾ ਐਪਲੀਕੇਸ਼ਨ ਇਮਾਜ਼ਿਨ ਕਰ ਸਕਦੇ ਹੋ ਜੋ ਇਹਨਾਂ ਮੂਲ ਸਿਧਾਂਤਾਂ ਨਾਲ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ? --- ਅਸਵੀਕਰਤਾ: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।

web,development

ਜਾਵਾਸਕ੍ਰਿਪਟ ਬੇਸਿਕਸ: ਮੈਥਡਸ ਅਤੇ ਫੰਕਸ਼ਨ

## ਲੈਕਚਰ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਲੈਕਚਰ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਇੱਕ ਹੀ ਕੋਡ ਨੂੰ ਵਾਰ-ਵਾਰ ਲਿਖਣਾ ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ ਸਭ ਤੋਂ ਆਮ ਨਿਰਾਸ਼ਾਵਾਦੀ ਗੱਲਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਫੰਕਸ਼ਨ ਇਸ ਸਮੱਸਿਆ ਦਾ ਹੱਲ ਕਰਦੇ ਹਨ ਕਿਉਂਕਿ ਇਹ ਤੁਹਾਨੂੰ ਕੋਡ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤਣਯੋਗ ਬਲਾਕਾਂ ਵਿੱਚ ਪੈਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। ਫੰਕਸ਼ਨ ਨੂੰ ਹੈਨਰੀ ਫੋਰਡ ਦੀ ਅਸੈਂਬਲੀ ਲਾਈਨ ਦੇ ਮਿਆਰੀਕ੍ਰਿਤ ਹਿੱਸਿਆਂ ਵਾਂਗ ਸੋਚੋ – ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਭਰੋਸੇਮੰਦ ਕੰਪੋਨੈਂਟ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਜਿੱਥੇ ਵੀ ਲੋੜ ਹੋਵੇ, ਬਿਨਾਂ ਮੁੜ ਤੋਂ ਬਣਾਉਣ ਦੇ ਵਰਤ ਸਕਦੇ ਹੋ। ਫੰਕਸ਼ਨ ਤੁਹਾਨੂੰ ਕੋਡ ਦੇ ਟੁਕੜਿਆਂ ਨੂੰ ਬੰਨ੍ਹਣ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ ਤਾਂ ਜੋ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਆਪਣੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਦੁਬਾਰਾ ਵਰਤ ਸਕੋ। ਇੱਕੋ ਹੀ ਲਾਜਿਕ ਨੂੰ ਹਰ ਜਗ੍ਹਾ ਕਾਪੀ ਅਤੇ ਪੇਸਟ ਕਰਨ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਇੱਕ ਵਾਰ ਫੰਕਸ਼ਨ ਬਣਾਉਂਦੇ ਹੋ ਅਤੇ ਜਦੋਂ ਵੀ ਲੋੜ ਹੋਵੇ ਇਸਨੂੰ ਕਾਲ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਪਹੁੰਚ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਸੰਗਠਿਤ ਰੱਖਦੀ ਹੈ ਅਤੇ ਅੱਪਡੇਟ ਕਰਨਾ ਬਹੁਤ ਆਸਾਨ ਬਣਾਉਂਦੀ ਹੈ। ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਬਣਾਉਣ, ਉਨ੍ਹਾਂ ਨੂੰ ਜਾਣਕਾਰੀ ਪਾਸ ਕਰਨ ਅਤੇ ਉਨ੍ਹਾਂ ਤੋਂ ਲਾਭਦਾਇਕ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰਨ ਦੇ ਤਰੀਕੇ ਸਿੱਖੋਗੇ। ਤੁਸੀਂ ਫੰਕਸ਼ਨ ਅਤੇ ਮੈਥਡਸ ਦੇ ਵਿਚਕਾਰ ਅੰਤਰ ਦੀ ਖੋਜ ਕਰੋਗੇ, ਆਧੁਨਿਕ ਸਿੰਟੈਕਸ ਪਹੁੰਚਾਂ ਬਾਰੇ ਸਿੱਖੋਗੇ, ਅਤੇ ਦੇਖੋਗੇ ਕਿ ਫੰਕਸ਼ਨ ਹੋਰ ਫੰਕਸ਼ਨ ਨਾਲ ਕਿਵੇਂ ਕੰਮ ਕਰ ਸਕਦੇ ਹਨ। ਅਸੀਂ ਇਹ ਧਾਰਨਾਵਾਂ ਕਦਮ-ਦਰ-ਕਦਮ ਬਣਾਉਂਦੇ ਹਾਂ। [](https://youtube.com/watch?v=XgKsD6Zwvlc "ਮੈਥਡਸ ਅਤੇ ਫੰਕਸ਼ਨ") ## ਫੰਕਸ਼ਨ ਫੰਕਸ਼ਨ ਇੱਕ ਸਵੈ-ਨਿਰਭਰਤ ਕੋਡ ਦਾ ਬਲਾਕ ਹੈ ਜੋ ਇੱਕ ਵਿਸ਼ੇਸ਼ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਲਾਜਿਕ ਨੂੰ ਸਮੇਟਦਾ ਹੈ ਜਿਸਨੂੰ ਤੁਸੀਂ ਜਦੋਂ ਵੀ ਲੋੜ ਹੋਵੇ ਚਲਾ ਸਕਦੇ ਹੋ। ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਇੱਕੋ ਹੀ ਕੋਡ ਨੂੰ ਕਈ ਵਾਰ ਲਿਖਣ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਕ ਫੰਕਸ਼ਨ ਵਿੱਚ ਪੈਕ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਜਦੋਂ ਵੀ ਲੋੜ ਹੋਵੇ ਇਸਨੂੰ ਕਾਲ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਪਹੁੰਚ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਸਾਫ ਰੱਖਦੀ ਹੈ ਅਤੇ ਅੱਪਡੇਟ ਕਰਨਾ ਬਹੁਤ ਆਸਾਨ ਬਣਾਉਂਦੀ ਹੈ। ਸੋਚੋ ਕਿ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੋਡਬੇਸ ਦੇ 20 ਵੱਖ-ਵੱਖ ਸਥਾਨਾਂ 'ਤੇ ਫੈਲੇ ਲਾਜਿਕ ਨੂੰ ਬਦਲਣਾ ਪਵੇ ਤਾਂ ਰੱਖ-ਰਖਾਵ ਕਿੰਨਾ ਮੁਸ਼ਕਲ ਹੋਵੇਗਾ। ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਵਿਆਖਿਆਤਮਕ ਨਾਮ ਦੇਣਾ ਬਹੁਤ ਜਰੂਰੀ ਹੈ। ਇੱਕ ਚੰਗਾ-ਨਾਮਿਤ ਫੰਕਸ਼ਨ ਇਸਦੇ ਉਦੇਸ਼ ਨੂੰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਸੰਚਾਰਿਤ ਕਰਦਾ ਹੈ – ਜਦੋਂ ਤੁਸੀਂ cancelTimer() ਨੂੰ ਵੇਖਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਤੁਰੰਤ ਸਮਝ ਆ ਜਾਂਦੀ ਹੈ ਕਿ ਇਹ ਕੀ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ ਸਪਸ਼ਟ ਲੇਬਲ ਵਾਲਾ ਬਟਨ ਤੁਹਾਨੂੰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਦੱਸਦਾ ਹੈ ਕਿ ਜਦੋਂ ਤੁਸੀਂ ਇਸਨੂੰ ਕਲਿਕ ਕਰਦੇ ਹੋ ਤਾਂ ਕੀ ਹੋਵੇਗਾ। ## ਫੰਕਸ਼ਨ ਬਣਾਉਣਾ ਅਤੇ ਕਾਲ ਕਰਨਾ ਆਓ ਵੇਖੀਏ ਕਿ ਫੰਕਸ਼ਨ ਕਿਵੇਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ। ਸਿੰਟੈਕਸ ਇੱਕ ਸਥਿਰ ਪੈਟਰਨ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ: ਆਓ ਇਸਨੂੰ ਤੋੜ ਕੇ ਸਮਝੀਏ: - function ਕੀਵਰਡ ਜਾਵਾਸਕ੍ਰਿਪਟ ਨੂੰ ਦੱਸਦਾ ਹੈ "ਹੇ, ਮੈਂ ਇੱਕ ਫੰਕਸ਼ਨ ਬਣਾ ਰਿਹਾ ਹਾਂ!" - nameOfFunction ਜਿੱਥੇ ਤੁਸੀਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਇੱਕ ਵਿਆਖਿਆਤਮਕ ਨਾਮ ਦਿੰਦੇ ਹੋ - ਪੈਰੈਂਥੀਸਿਸ () ਜਿੱਥੇ ਤੁਸੀਂ ਪੈਰਾਮੀਟਰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ (ਅਸੀਂ ਇਸ 'ਤੇ ਜਲਦੀ ਪਹੁੰਚਾਂਗੇ) - ਕਰਲੀ ਬਰੇਸ {} ਵਿੱਚ ਅਸਲ ਕੋਡ ਹੁੰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਫੰਕਸ਼ਨ ਕਾਲ ਕਰਨ 'ਤੇ ਚਲਾਉਂਦੇ ਹੋ ਆਓ ਇਸਨੂੰ ਕਾਰਵਾਈ ਵਿੱਚ ਵੇਖਣ ਲਈ ਇੱਕ ਸਧਾਰਨ ਗ੍ਰੀਟਿੰਗ ਫੰਕਸ਼ਨ ਬਣਾਈਏ: ਇਹ ਫੰਕਸ਼ਨ "Hello, world!" ਕਨਸੋਲ ਵਿੱਚ ਪ੍ਰਿੰਟ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਇਸਨੂੰ ਡਿਫਾਈਨ ਕਰ ਲੈਂਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਜਿੰਨੀ ਵਾਰ ਲੋੜ ਹੋਵੇ ਵਰਤ ਸਕਦੇ ਹੋ। ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਚਲਾਉਣ (ਜਾਂ "ਕਾਲ" ਕਰਨ) ਲਈ, ਇਸਦਾ ਨਾਮ ਲਿਖੋ ਅਤੇ ਪੈਰੈਂਥੀਸਿਸ ਦੇ ਨਾਲ। ਜਾਵਾਸਕ੍ਰਿਪਟ ਤੁਹਾਨੂੰ ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਜਾਂ ਬਾਅਦ ਡਿਫਾਈਨ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ – ਜਾਵਾਸਕ੍ਰਿਪਟ ਇੰਜਨ ਐਗਜ਼ਿਕਿਊਸ਼ਨ ਆਰਡਰ ਨੂੰ ਸੰਭਾਲੇਗਾ। ਜਦੋਂ ਤੁਸੀਂ ਇਹ ਲਾਈਨ ਚਲਾਉਂਦੇ ਹੋ, ਤਾਂ ਇਹ ਤੁਹਾਡੇ displayGreeting ਫੰਕਸ਼ਨ ਦੇ ਅੰਦਰ ਸਾਰੇ ਕੋਡ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ, "Hello, world!" ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ ਕਨਸੋਲ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ। ਤੁਸੀਂ ਇਸ ਫੰਕਸ਼ਨ ਨੂੰ ਵਾਰ-ਵਾਰ ਕਾਲ ਕਰ ਸਕਦੇ ਹੋ। ### 🧠 ਫੰਕਸ਼ਨ ਫੰਡਾਮੈਂਟਲਸ ਚੈੱਕ: ਆਪਣੇ ਪਹਿਲੇ ਫੰਕਸ਼ਨ ਬਣਾਉਣਾ ਆਓ ਵੇਖੀਏ ਕਿ ਤੁਸੀਂ ਬੇਸਿਕ ਫੰਕਸ਼ਨ ਬਾਰੇ ਕਿਵੇਂ ਮਹਿਸੂਸ ਕਰ ਰਹੇ ਹੋ: - ਕੀ ਤੁਸੀਂ ਸਮਝਾ ਸਕਦੇ ਹੋ ਕਿ ਫੰਕਸ਼ਨ ਡਿਫਿਨੀਸ਼ਨ ਵਿੱਚ ਕਰਲੀ ਬਰੇਸ {} ਕਿਉਂ ਵਰਤਦੇ ਹਨ? - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ displayGreeting ਬਿਨਾਂ ਪੈਰੈਂਥੀਸਿਸ ਲਿਖਦੇ ਹੋ? - ਤੁਸੀਂ ਇੱਕੋ ਫੰਕਸ਼ਨ ਨੂੰ ਕਈ ਵਾਰ ਕਾਲ ਕਰਨ ਦੀ ਇੱਛਾ ਕਿਉਂ ਕਰ ਸਕਦੇ ਹੋ? ### ਫੰਕਸ਼ਨ ਬੈਸਟ ਪ੍ਰੈਕਟਿਸ ਇੱਥੇ ਕੁਝ ਟਿੱਪਸ ਹਨ ਜੋ ਤੁਹਾਨੂੰ ਵਧੀਆ ਫੰਕਸ਼ਨ ਲਿਖਣ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦੇ ਹਨ: - ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਸਪਸ਼ਟ, ਵਿਆਖਿਆਤਮਕ ਨਾਮ ਦਿਓ – ਤੁਹਾਡਾ ਭਵਿੱਖ ਦਾ ਆਪ ਤੁਹਾਡਾ ਧੰਨਵਾਦ ਕਰੇਗਾ! - camelCasing ਨੂੰ ਬਹੁ-ਸ਼ਬਦ ਵਾਲੇ ਨਾਮਾਂ ਲਈ ਵਰਤੋ (ਜਿਵੇਂ calculateTotal ਬਜਾਏ calculate_total) - ਹਰ ਫੰਕਸ਼ਨ ਨੂੰ ਇੱਕ ਚੰਗੀ ਤਰ੍ਹਾਂ ਇੱਕ ਕੰਮ ਕਰਨ 'ਤੇ ਕੇਂਦਰਿਤ ਰੱਖੋ ## ਫੰਕਸ਼ਨ ਨੂੰ ਜਾਣਕਾਰੀ ਪਾਸ ਕਰਨਾ ਸਾਡਾ displayGreeting ਫੰਕਸ਼ਨ ਸੀਮਿਤ ਹੈ – ਇਹ ਸਿਰਫ "Hello, world!" ਹਰ ਕਿਸੇ ਲਈ ਦਿਖਾ ਸਕਦਾ ਹੈ। ਪੈਰਾਮੀਟਰਸ ਸਾਨੂੰ ਫੰਕਸ਼ਨ ਨੂੰ ਹੋਰ ਲਚਕਦਾਰ ਅਤੇ ਲਾਭਦਾਇਕ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। ਪੈਰਾਮੀਟਰਸ ਪਲੇਸਹੋਲਡਰ ਵਾਂਗ ਕੰਮ ਕਰਦੇ ਹਨ ਜਿੱਥੇ ਤੁਸੀਂ ਹਰ ਵਾਰ ਫੰਕਸ਼ਨ ਵਰਤਣ ਸਮੇਂ ਵੱਖ-ਵੱਖ ਮੁੱਲ ਪਾ ਸਕਦੇ ਹੋ। ਇਸ ਤਰੀਕੇ ਨਾਲ, ਇੱਕੋ ਫੰਕਸ਼ਨ ਹਰ ਕਾਲ 'ਤੇ ਵੱਖ-ਵੱਖ ਜਾਣਕਾਰੀ ਨਾਲ ਕੰਮ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਡਿਫਾਈਨ ਕਰਨ ਸਮੇਂ ਪੈਰੈਂਥੀਸਿਸ ਦੇ ਅੰਦਰ ਪੈਰਾਮੀਟਰਸ ਦੀ ਸੂਚੀ ਦਿੰਦੇ ਹੋ, ਕਈ ਪੈਰਾਮੀਟਰਸ ਨੂੰ ਕਾਮਾ ਨਾਲ ਵੱਖ ਕਰਦੇ ਹੋ: ਹਰ ਪੈਰਾਮੀਟਰ ਪਲੇਸਹੋਲਡਰ ਵਾਂਗ ਕੰਮ ਕਰਦਾ ਹੈ – ਜਦੋਂ ਕੋਈ ਤੁਹਾਡੇ ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਹ ਅਸਲ ਮੁੱਲ ਪ੍ਰਦਾਨ ਕਰੇਗਾ ਜੋ ਇਨ੍ਹਾਂ ਸਥਾਨਾਂ ਵਿੱਚ ਪਲੱਗ ਹੁੰਦੇ ਹਨ। ਆਓ ਆਪਣੇ ਗ੍ਰੀਟਿੰਗ ਫੰਕਸ਼ਨ ਨੂੰ ਅਪਡੇਟ ਕਰੀਏ ਤਾਂ ਜੋ ਕਿਸੇ ਦਾ ਨਾਮ ਸਵੀਕਾਰ ਕਰ ਸਕੇ: ਧਿਆਨ ਦਿਓ ਕਿ ਅਸੀਂ ਬੈਕਟਿਕਸ (` `) ਅਤੇ ${}` ਵਰਤ ਰਹੇ ਹਾਂ ਤਾਂ ਜੋ ਨਾਮ ਨੂੰ ਸਿੱਧੇ ਆਪਣੇ ਸੁਨੇਹੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਸਕੇ – ਇਸਨੂੰ ਟੈਂਪਲੇਟ ਲਿਟਰਲ ਕਿਹਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਇਹ ਸਟ੍ਰਿੰਗਸ ਨੂੰ ਵੈਰੀਏਬਲਸ ਦੇ ਨਾਲ ਮਿਲਾਉਣ ਦਾ ਇੱਕ ਬਹੁਤ ਹੀ ਸਹੀ ਤਰੀਕਾ ਹੈ। ਹੁਣ ਜਦੋਂ ਅਸੀਂ ਆਪਣੇ ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਦੇ ਹਾਂ, ਅਸੀਂ ਕੋਈ ਵੀ ਨਾਮ ਪਾਸ ਕਰ ਸਕਦੇ ਹਾਂ: ਜਾਵਾਸਕ੍ਰਿਪਟ ਸਟ੍ਰਿੰਗ 'Christopher' ਲੈਂਦਾ ਹੈ, ਇਸਨੂੰ name ਪੈਰਾਮੀਟਰ ਨੂੰ ਅਸਾਈਨ ਕਰਦਾ ਹੈ, ਅਤੇ ਨਿੱਜੀ ਸੁਨੇਹਾ "Hello, Christopher!" ਬਣਾਉਂਦਾ ਹੈ। ## ਡਿਫਾਲਟ ਮੁੱਲ ਜੇਕਰ ਅਸੀਂ ਕੁਝ ਪੈਰਾਮੀਟਰਸ ਨੂੰ ਵਿਕਲਪਿਕ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ ਤਾਂ? ਇੱਥੇ ਡਿਫਾਲਟ ਮੁੱਲ ਬਹੁਤ ਸਹਾਇਕ ਹੁੰਦੇ ਹਨ! ਆਓ ਕਹੀਏ ਕਿ ਅਸੀਂ ਲੋਕਾਂ ਨੂੰ ਗ੍ਰੀਟਿੰਗ ਸ਼ਬਦ ਨੂੰ ਕਸਟਮਾਈਜ਼ ਕਰਨ ਦੇ ਯੋਗ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਪਰ ਜੇਕਰ ਉਹ ਕੋਈ ਨਿਰਧਾਰਤ ਨਾ ਕਰਨ, ਤਾਂ ਅਸੀਂ "Hello" ਨੂੰ ਬੈਕਅਪ ਵਜੋਂ ਵਰਤਾਂਗੇ। ਤੁਸੀਂ ਡਿਫਾਲਟ ਮੁੱਲ ਸੈਟ ਕਰ ਸਕਦੇ ਹੋ ਜਿਵੇਂ ਕਿ ਵੈਰੀਏਬਲ ਸੈਟ ਕਰਦੇ ਹੋ: ਇੱਥੇ, name ਅਜੇ ਵੀ ਲਾਜ਼ਮੀ ਹੈ, ਪਰ salutation ਦਾ ਬੈਕਅਪ ਮੁੱਲ 'Hello' ਹੈ ਜੇਕਰ ਕੋਈ ਵੱਖ-ਵੱਖ ਗ੍ਰੀਟਿੰਗ ਪ੍ਰਦਾਨ ਨਾ ਕਰੇ। ਹੁਣ ਅਸੀਂ ਇਸ ਫੰਕਸ਼ਨ ਨੂੰ ਦੋ ਵੱਖ-ਵੱਖ ਤਰੀਕਿਆਂ ਨਾਲ ਕਾਲ ਕਰ ਸਕਦੇ ਹਾਂ: ਪਹਿਲੀ ਕਾਲ ਵਿੱਚ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਡਿਫਾਲਟ "Hello" ਵਰਤਦਾ ਹੈ ਕਿਉਂਕਿ ਅਸੀਂ ਗ੍ਰੀਟਿੰਗ ਸਪਸ਼ਟ ਨਹੀਂ ਕੀਤੀ। ਦੂਜੀ ਕਾਲ ਵਿੱਚ, ਇਹ ਸਾਡਾ ਕਸਟਮ "Hi" ਵਰਤਦਾ ਹੈ। ਇਹ ਲਚਕਤਾ ਫੰਕਸ਼ਨ ਨੂੰ ਵੱਖ-ਵੱਖ ਸਥਿਤੀਆਂ ਲਈ ਅਨੁਕੂਲ ਬਣਾਉਂਦੀ ਹੈ। ### 🎛️ ਪੈਰਾਮੀਟਰਸ ਮਾਸਟਰੀ ਚੈੱਕ: ਫੰਕਸ਼ਨ ਨੂੰ ਲਚਕਦਾਰ ਬਣਾਉਣਾ ਆਪਣੀ ਪੈਰਾਮੀਟਰ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਪੈਰਾਮੀਟਰ ਅਤੇ ਆਰਗੂਮੈਂਟ ਵਿੱਚ ਕੀ ਅੰਤਰ ਹੈ? - ਅਸਲ ਦੁਨੀਆ ਦੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ ਡਿਫਾਲਟ ਮੁੱਲ ਕਿਉਂ ਲਾਭਦਾਇਕ ਹਨ? - ਕੀ ਤੁਸੀਂ ਅਨੁਮਾਨ ਲਗਾ ਸਕਦੇ ਹੋ ਕਿ ਜੇਕਰ ਤੁਸੀਂ ਪੈਰਾਮੀਟਰਸ ਤੋਂ ਵੱਧ ਆਰਗੂਮੈਂਟ ਪਾਸ ਕਰੋ ਤਾਂ ਕੀ ਹੁੰਦਾ ਹੈ? ## ਰਿਟਰਨ ਮੁੱਲ ਸਾਡੇ ਫੰਕਸ਼ਨ ਹੁਣ ਤੱਕ ਸਿਰਫ ਸੁਨੇਹੇ ਕਨਸੋਲ ਵਿੱਚ ਪ੍ਰਿੰਟ ਕਰ ਰਹੇ ਹਨ, ਪਰ ਜੇਕਰ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਇੱਕ ਫੰਕਸ਼ਨ ਕੁਝ ਗਣਨਾ ਕਰੇ ਅਤੇ ਤੁਹਾਨੂੰ ਨਤੀਜਾ ਵਾਪਸ ਦੇਵੇ? ਇੱਥੇ ਰਿਟਰਨ ਮੁੱਲ ਆਉਂਦੇ ਹਨ। ਕੁਝ ਦਿਖਾਉਣ ਦੀ ਬਜਾਏ, ਇੱਕ ਫੰਕਸ਼ਨ ਤੁਹਾਨੂੰ ਇੱਕ ਮੁੱਲ ਵਾਪਸ ਦੇ ਸਕਦਾ ਹੈ ਜਿਸਨੂੰ ਤੁਸੀਂ ਇੱਕ ਵੈਰੀਏਬਲ ਵਿੱਚ ਸਟੋਰ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਆਪਣੇ ਕੋਡ ਦੇ ਹੋਰ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵਰਤ ਸਕਦੇ ਹੋ। ਜਦੋਂ ਇੱਕ ਫੰਕਸ਼ਨ return ਸਟੇਟਮੈਂਟ 'ਤੇ ਪਹੁੰਚਦਾ ਹੈ, ਤਾਂ ਇਹ ਤੁਰੰਤ ਚਲਾਉਣਾ ਬੰਦ ਕਰਦਾ ਹੈ ਅਤੇ ਉਹ ਮੁੱਲ ਵਾਪਸ ਭੇਜਦਾ ਹੈ ਜਿਸਨੇ ਇਸਨੂੰ ਕਾਲ ਕੀਤਾ ਸੀ। ਆਓ ਆਪਣੇ ਗ੍ਰੀਟਿੰਗ ਫੰਕਸ਼ਨ ਨੂੰ ਸੋਧੀਏ ਤਾਂ ਜੋ ਸੁਨੇਹਾ ਪ੍ਰਿੰਟ ਕਰਨ ਦੀ ਬਜਾਏ ਇਸਨੂੰ ਵਾਪਸ ਕਰੇ: ਹੁਣ ਗ੍ਰੀਟਿੰਗ ਪ੍ਰਿੰਟ ਕਰਨ ਦੀ ਬਜਾਏ, ਇਹ ਫੰਕਸ਼ਨ ਸੁਨੇਹਾ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਸਾਨੂੰ ਵਾਪਸ ਦਿੰਦਾ ਹੈ। ਹੁਣ greetingMessage ਵਿੱਚ "Hello, Christopher" ਹੈ ਅਤੇ ਅਸੀਂ ਇਸਨੂੰ ਆਪਣੇ ਕੋਡ ਵਿੱਚ ਕਿਤੇ ਵੀ ਵਰਤ ਸਕਦੇ ਹਾਂ – ਇਸਨੂੰ ਇੱਕ ਵੈਬਪੇਜ 'ਤੇ ਦਿਖਾਉਣ ਲਈ, ਇੱਕ ਈਮੇਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਜਾਂ ਇਸਨੂੰ ਕਿਸੇ ਹੋਰ ਫੰਕਸ਼ਨ ਨੂੰ ਪਾਸ ਕਰਨ ਲਈ। ### 🔄 ਰਿਟਰਨ ਮੁੱਲ ਚੈੱਕ: ਨਤੀਜੇ ਵਾਪਸ ਪ੍ਰਾਪਤ ਕਰਨਾ ਆਪਣੀ ਰਿਟਰਨ ਮੁੱਲ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਫੰਕਸ਼ਨ ਵਿੱਚ return ਸਟੇਟਮੈਂਟ ਤੋਂ ਬਾਅਦ ਕੋਡ ਨਾਲ ਕੀ ਹੁੰਦਾ ਹੈ? - ਸਿਰਫ ਕਨਸੋਲ ਵਿੱਚ ਪ੍ਰਿੰਟ ਕਰਨ ਦੀ ਬਜਾਏ ਮੁੱਲ ਵਾਪਸ ਕਰਨਾ ਕਿਉਂ ਵਧੀਆ ਹੈ? - ਕੀ ਇੱਕ ਫੰਕਸ਼ਨ ਵੱਖ-ਵੱਖ ਕਿਸਮਾਂ ਦੇ ਮੁੱਲ (string, number, boolean) ਵਾਪਸ ਕਰ ਸਕਦਾ ਹੈ? - [ ] ਪਰੰਪਰਾਗਤ ਫੰਕਸ਼ਨ ਨੂੰ ਐਰੋ ਫੰਕਸ਼ਨ ਸਿੰਟੈਕਸ ਵਿੱਚ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ - [ ] ਚੁਣੌਤੀ ਦਾ ਅਭਿਆਸ ਕਰੋ: ਫੰਕਸ਼ਨ ਅਤੇ ਮੈਥਡ ਵਿੱਚ ਅੰਤਰ ਦੀ ਵਿਆਖਿਆ ਕਰੋ ### 🎯 ਇਸ ਘੰਟੇ ਵਿੱਚ ਤੁਸੀਂ ਕੀ ਹਾਸਲ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਪੋਸਟ-ਪਾਠ ਕਵਿਜ਼ ਪੂਰਾ ਕਰੋ ਅਤੇ ਕੋਈ ਵੀ ਗੁੰਝਲਦਾਰ ਧਾਰਨਾਵਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ - [ ] GitHub Copilot ਚੁਣੌਤੀ ਤੋਂ ਗਣਿਤ ਯੂਟਿਲਿਟੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਓ - [ ] ਇੱਕ ਫੰਕਸ਼ਨ ਬਣਾਓ ਜੋ ਇੱਕ ਹੋਰ ਫੰਕਸ਼ਨ ਨੂੰ ਪੈਰਾਮੀਟਰ ਵਜੋਂ ਵਰਤਦਾ ਹੈ - [ ] ਡਿਫਾਲਟ ਪੈਰਾਮੀਟਰਾਂ ਨਾਲ ਫੰਕਸ਼ਨ ਲਿਖਣ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਫੰਕਸ਼ਨ ਰਿਟਰਨ ਵੈਲਿਊਜ਼ ਵਿੱਚ ਟੈਂਪਲੇਟ ਲਿਟਰਲਸ ਨਾਲ ਪ੍ਰਯੋਗ ਕਰੋ ### 📅 ਤੁਹਾਡਾ ਹਫਤਾਵਾਰ ਫੰਕਸ਼ਨ ਮਾਹਰਤਾ ਯੋਜਨਾ - [ ] "Fun with Functions" ਅਸਾਈਨਮੈਂਟ ਨੂੰ ਰਚਨਾਤਮਕਤਾ ਨਾਲ ਪੂਰਾ ਕਰੋ - [ ] ਕੁਝ ਦੁਹਰਾਏ ਗਏ ਕੋਡ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤਣਯੋਗ ਫੰਕਸ਼ਨ ਵਿੱਚ ਰਿਫੈਕਟਰ ਕਰੋ - [ ] ਸਿਰਫ ਫੰਕਸ਼ਨ ਵਰਤ ਕੇ ਇੱਕ ਛੋਟਾ ਕੈਲਕੂਲੇਟਰ ਬਣਾਓ (ਕੋਈ ਗਲੋਬਲ ਵੈਰੀਏਬਲ ਨਹੀਂ) - [ ] map() ਅਤੇ filter() ਵਰਗੇ ਐਰੇ ਮੈਥਡ ਨਾਲ ਐਰੋ ਫੰਕਸ਼ਨ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਆਮ ਕੰਮਾਂ ਲਈ ਯੂਟਿਲਿਟੀ ਫੰਕਸ਼ਨ ਦਾ ਸੰਗ੍ਰਹਿ ਬਣਾਓ - [ ] ਹਾਈਅਰ-ਆਰਡਰ ਫੰਕਸ਼ਨ ਅਤੇ ਫੰਕਸ਼ਨਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਧਾਰਨਾਵਾਂ ਦਾ ਅਧਿਐਨ ਕਰੋ ### 🌟 ਤੁਹਾਡਾ ਮਹੀਨਾਵਾਰ ਬਦਲਾਅ - [ ] ਕਲੋਜ਼ਰ ਅਤੇ ਸਕੋਪ ਵਰਗੇ ਉੱਚ-ਸਤਹ ਦੇ ਫੰਕਸ਼ਨ ਧਾਰਨਾਵਾਂ ਵਿੱਚ ਮਾਹਰ ਬਣੋ - [ ] ਇੱਕ ਪ੍ਰੋਜੈਕਟ ਬਣਾਓ ਜੋ ਫੰਕਸ਼ਨ ਕੰਪੋਜ਼ੀਸ਼ਨ ਨੂੰ ਵਧੇਰੇ ਵਰਤਦਾ ਹੋਵੇ - [ ] ਫੰਕਸ਼ਨ ਡੌਕੂਮੈਂਟੇਸ਼ਨ ਨੂੰ ਸੁਧਾਰ ਕੇ ਓਪਨ ਸੋਰਸ ਵਿੱਚ ਯੋਗਦਾਨ ਪਾਓ - [ ] ਕਿਸੇ ਹੋਰ ਨੂੰ ਫੰਕਸ਼ਨ ਅਤੇ ਵੱਖ-ਵੱਖ ਸਿੰਟੈਕਸ ਸ਼ੈਲੀਆਂ ਬਾਰੇ ਸਿਖਾਓ - [ ] ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਫੰਕਸ਼ਨਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਪੈਰਾਡਾਇਮਜ਼ ਦੀ ਖੋਜ ਕਰੋ - [ ] ਭਵਿੱਖ ਦੇ ਪ੍ਰੋਜੈਕਟਾਂ ਲਈ ਦੁਬਾਰਾ ਵਰਤਣਯੋਗ ਫੰਕਸ਼ਨ ਦੀ ਆਪਣੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਓ ### 🏆 ਅੰਤਮ ਫੰਕਸ਼ਨ ਚੈਂਪੀਅਨ ਚੈੱਕ-ਇਨ ਆਪਣੀ ਫੰਕਸ਼ਨ ਮਾਹਰਤਾ ਦਾ ਜਸ਼ਨ ਮਨਾਓ: - ਤੁਹਾਡੇ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸਭ ਤੋਂ ਉਪਯੋਗ ਫੰਕਸ਼ਨ ਕਿਹੜਾ ਹੈ? - ਫੰਕਸ਼ਨ ਬਾਰੇ ਸਿੱਖਣ ਨਾਲ ਕੋਡ ਦੇ ਆਯੋਜਨ ਬਾਰੇ ਤੁਹਾਡੀ ਸੋਚ ਕਿਵੇਂ ਬਦਲੀ ਹੈ? - ਤੁਹਾਨੂੰ ਕਿਹੜਾ ਫੰਕਸ਼ਨ ਸਿੰਟੈਕਸ ਪਸੰਦ ਹੈ ਅਤੇ ਕਿਉਂ? - ਤੁਸੀਂ ਕਿਹੜੀ ਅਸਲ-ਦੁਨੀਆ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਫੰਕਸ਼ਨ ਲਿਖ ਕੇ ਹੱਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? --- ਅਸਵੀਕਰਤਾ: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦਾ ਯਤਨ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।

web,development

ਜਾਵਾਸਕ੍ਰਿਪਟ ਬੇਸਿਕਸ: ਫੈਸਲੇ ਲੈਣਾ

ਕੀ ਤੁਸੀਂ ਕਦੇ ਸੋਚਿਆ ਹੈ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਸਮਾਰਟ ਫੈਸਲੇ ਕਿਵੇਂ ਲੈਂਦੀਆਂ ਹਨ? ਜਿਵੇਂ ਕਿ ਇੱਕ ਨੈਵੀਗੇਸ਼ਨ ਸਿਸਟਮ ਤੇਜ਼ ਰਸਤਾ ਕਿਵੇਂ ਚੁਣਦਾ ਹੈ, ਜਾਂ ਇੱਕ ਥਰਮੋਸਟੈਟ ਗਰਮੀ ਚਾਲੂ ਕਰਨ ਦਾ ਫੈਸਲਾ ਕਿਵੇਂ ਕਰਦਾ ਹੈ? ਇਹ ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ ਫੈਸਲੇ ਲੈਣ ਦਾ ਮੂਲ ਸਿਧਾਂਤ ਹੈ। ਜਿਵੇਂ ਚਾਰਲਸ ਬੈਬੇਜ ਦੇ ਐਨਾਲਿਟਿਕਲ ਇੰਜਨ ਨੂੰ ਹਾਲਾਤਾਂ ਦੇ ਅਧਾਰ 'ਤੇ ਵੱਖ-ਵੱਖ ਕਾਰਵਾਈਆਂ ਦੇ ਕ੍ਰਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰਨ ਲਈ ਡਿਜ਼ਾਈਨ ਕੀਤਾ ਗਿਆ ਸੀ, ਆਧੁਨਿਕ ਜਾਵਾਸਕ੍ਰਿਪਟ ਪ੍ਰੋਗਰਾਮ ਵੱਖ-ਵੱਖ ਹਾਲਾਤਾਂ ਦੇ ਅਧਾਰ 'ਤੇ ਚੋਣਾਂ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਹ ਸ਼ਾਖਾ ਬਣਾਉਣ ਅਤੇ ਫੈਸਲੇ ਲੈਣ ਦੀ ਯੋਗਤਾ ਹੈ ਜੋ ਸਥਿਰ ਕੋਡ ਨੂੰ ਪ੍ਰਤੀਕ੍ਰਿਆਸ਼ੀਲ, ਸਮਰੱਥ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਬਦਲਦੀ ਹੈ। ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਪ੍ਰੋਗਰਾਮਾਂ ਵਿੱਚ ਸ਼ਰਤੀ ਤਰਕ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦਾ ਤਰੀਕਾ ਸਿੱਖੋਗੇ। ਅਸੀਂ ਸ਼ਰਤੀ ਬਿਆਨ, ਤੁਲਨਾ ਆਪਰੇਟਰ ਅਤੇ ਤਰਕਸ਼ੀਲ ਅਭਿਵਿਅਕਤੀਆਂ ਦੀ ਖੋਜ ਕਰਾਂਗੇ ਜੋ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਹਾਲਾਤਾਂ ਦਾ ਮੁਲਾਂਕਣ ਕਰਨ ਅਤੇ ਉਚਿਤ ਤਰੀਕੇ ਨਾਲ ਪ੍ਰਤੀਕ੍ਰਿਆ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। ## ਪਾਠ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਪਾਠ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਫੈਸਲੇ ਲੈਣ ਅਤੇ ਪ੍ਰੋਗਰਾਮ ਦੇ ਪ੍ਰਵਾਹ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਦੀ ਯੋਗਤਾ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦਾ ਇੱਕ ਮੂਲ ਪੱਖ ਹੈ। ਇਹ ਭਾਗ ਕਵਰ ਕਰਦਾ ਹੈ ਕਿ ਜਾਵਾਸਕ੍ਰਿਪਟ ਪ੍ਰੋਗਰਾਮਾਂ ਦੇ ਕਾਰਜ ਪਾਠ ਨੂੰ ਬੂਲੀਅਨ ਮੁੱਲਾਂ ਅਤੇ ਸ਼ਰਤੀ ਤਰਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਿਵੇਂ ਨਿਯੰਤਰਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। [](https://youtube.com/watch?v=SxTp8j-fMMY "ਫੈਸਲੇ ਲੈਣਾ") ## ਬੂਲੀਅਨਸ 'ਤੇ ਇੱਕ ਛੋਟਾ ਸਾਰ ਫੈਸਲੇ ਲੈਣ ਦੀ ਖੋਜ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਆਓ ਪਿਛਲੇ ਪਾਠ ਤੋਂ ਬੂਲੀਅਨ ਮੁੱਲਾਂ ਨੂੰ ਦੁਬਾਰਾ ਵੇਖੀਏ। ਗਣਿਤਜੀ ਜਾਰਜ ਬੂਲ ਦੇ ਨਾਮ 'ਤੇ ਰੱਖੇ ਗਏ, ਇਹ ਮੁੱਲ ਦੋਹਰੇ ਰਾਜਾਂ ਦਾ ਪ੍ਰਤੀਨਿਧਿਤਾ ਕਰਦੇ ਹਨ - ਜਾਂ true ਜਾਂ false। ਕੋਈ ਗੁੰਝਲ ਨਹੀਂ, ਕੋਈ ਮੱਧ ਦਾ ਰਾਹ ਨਹੀਂ। ਇਹ ਦੋਹਰੇ ਮੁੱਲ ਸਾਰੇ ਗਣਨਾਤਮਕ ਤਰਕ ਦੀ ਨੀਂਹ ਬਣਾਉਂਦੇ ਹਨ। ਤੁਹਾਡਾ ਪ੍ਰੋਗਰਾਮ ਜੋ ਵੀ ਫੈਸਲਾ ਲੈਂਦਾ ਹੈ, ਆਖਿਰਕਾਰ ਇੱਕ ਬੂਲੀਅਨ ਮੁਲਾਂਕਣ 'ਤੇ ਘਟਦਾ ਹੈ। ਬੂਲੀਅਨ ਵੈਰੀਏਬਲ ਬਣਾਉਣਾ ਸਿੱਧਾ ਹੈ: ਇਹ ਦੋ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਸਪਸ਼ਟ ਬੂਲੀਅਨ ਮੁੱਲਾਂ ਨਾਲ ਬਣਾਉਂਦਾ ਹੈ। ✅ ਬੂਲੀਅਨਸ ਦਾ ਨਾਮ ਅੰਗਰੇਜ਼ੀ ਗਣਿਤਜੀ, ਦਰਸ਼ਨਸ਼ਾਸਤਰੀ ਅਤੇ ਤਰਕਸ਼ਾਸਤਰੀ ਜਾਰਜ ਬੂਲ (1815–1864) ਦੇ ਨਾਮ 'ਤੇ ਰੱਖਿਆ ਗਿਆ ਹੈ। ## ਤੁਲਨਾ ਆਪਰੇਟਰ ਅਤੇ ਬੂਲੀਅਨਸ ਅਮਲ ਵਿੱਚ, ਤੁਸੀਂ ਬੂਲੀਅਨ ਮੁੱਲਾਂ ਨੂੰ ਹੱਥੋਂ ਸੈਟ ਨਹੀਂ ਕਰਦੇ। ਇਸਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਹਾਲਾਤਾਂ ਦਾ ਮੁਲਾਂਕਣ ਕਰਕੇ ਉਹਨਾਂ ਨੂੰ ਜਨਰੇਟ ਕਰਦੇ ਹੋ: "ਕੀ ਇਹ ਨੰਬਰ ਉਸ ਤੋਂ ਵੱਡਾ ਹੈ?" ਜਾਂ "ਕੀ ਇਹ ਮੁੱਲ ਬਰਾਬਰ ਹਨ?" ਤੁਲਨਾ ਆਪਰੇਟਰ ਇਹ ਮੁਲਾਂਕਣ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। ਉਹ ਮੁੱਲਾਂ ਦੀ ਤੁਲਨਾ ਕਰਦੇ ਹਨ ਅਤੇ ਓਪਰੇਂਡਾਂ ਦੇ ਰਿਸ਼ਤੇ ਦੇ ਅਧਾਰ 'ਤੇ ਬੂਲੀਅਨ ਨਤੀਜੇ ਵਾਪਸ ਕਰਦੇ ਹਨ। ✅ ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ ਕਨਸੋਲ ਵਿੱਚ ਕੁਝ ਤੁਲਨਾਵਾਂ ਲਿਖ ਕੇ ਆਪਣੀ ਜਾਣਕਾਰੀ ਦੀ ਜਾਂਚ ਕਰੋ। ਕੀ ਕੋਈ ਵਾਪਸ ਕੀਤਾ ਡੇਟਾ ਤੁਹਾਨੂੰ ਹੈਰਾਨ ਕਰਦਾ ਹੈ? ### 🧠 ਤੁਲਨਾ ਦੀ ਮਾਹਰਤਾ ਦੀ ਜਾਂਚ: ਬੂਲੀਅਨ ਤਰਕ ਨੂੰ ਸਮਝਣਾ ਆਪਣੀ ਤੁਲਨਾ ਦੀ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਤੁਹਾਨੂੰ ਕਿਉਂ ਲੱਗਦਾ ਹੈ ਕਿ === (ਸਖ਼ਤ ਬਰਾਬਰੀ) ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ == (ਢਿੱਲੀ ਬਰਾਬਰੀ) ਤੋਂ ਵਧੇਰੇ ਤਰਜੀਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ? - ਕੀ ਤੁਸੀਂ ਅਨੁਮਾਨ ਲਗਾ ਸਕਦੇ ਹੋ ਕਿ 5 === '5' ਕੀ ਵਾਪਸ ਕਰਦਾ ਹੈ? 5 == '5' ਬਾਰੇ ਕੀ? - !== ਅਤੇ != ਵਿੱਚ ਕੀ ਅੰਤਰ ਹੈ? ## If ਬਿਆਨ if ਬਿਆਨ ਤੁਹਾਡੇ ਕੋਡ ਵਿੱਚ ਇੱਕ ਸਵਾਲ ਪੁੱਛਣ ਵਾਂਗ ਹੈ। "ਜੇ ਇਹ ਹਾਲਾਤ ਸਹੀ ਹੈ, ਤਾਂ ਇਹ ਕੰਮ ਕਰੋ।" ਇਹ ਸ਼ਾਇਦ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਸੰਦ ਹੈ ਜੋ ਤੁਸੀਂ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਫੈਸਲੇ ਲੈਣ ਲਈ ਵਰਤੋਂਗੇ। ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦਾ ਹੈ: ਹਾਲਾਤ ਨੂੰ ਕੋਠੇ ਵਿੱਚ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਜੇ ਇਹ true ਹੈ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਘੁੰਮਾਏ ਬ੍ਰੇਸਾਂ ਦੇ ਅੰਦਰ ਕੋਡ ਚਲਾਉਂਦਾ ਹੈ। ਜੇ ਇਹ false ਹੈ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਉਸ ਸਾਰੇ ਬਲਾਕ ਨੂੰ ਛੱਡ ਦਿੰਦਾ ਹੈ। ਤੁਸੀਂ ਅਕਸਰ ਇਹ ਹਾਲਾਤ ਬਣਾਉਣ ਲਈ ਤੁਲਨਾ ਆਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋਗੇ। ਆਓ ਇੱਕ ਵਿਹੰਗਮ ਉਦਾਹਰਨ ਵੇਖੀਏ: ਕਿਉਂਕਿ 1000 >= 800 ਦਾ ਮੁਲਾਂਕਣ true ਹੈ, ਬਲਾਕ ਦੇ ਅੰਦਰ ਕੋਡ ਚਲਦਾ ਹੈ, "Getting a new laptop!" ਕਨਸੋਲ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ। ## If..Else ਬਿਆਨ ਪਰ ਜੇ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਜਦੋਂ ਹਾਲਾਤ ਗਲਤ ਹੋਵੇ ਤਾਂ ਤੁਹਾਡਾ ਪ੍ਰੋਗਰਾਮ ਕੁਝ ਵੱਖਰਾ ਕਰੇ? ਇਹਥੇ else ਆਉਂਦਾ ਹੈ - ਇਹ ਜਿਵੇਂ ਕਿ ਇੱਕ ਬੈਕਅਪ ਯੋਜਨਾ ਹੈ। else ਬਿਆਨ ਤੁਹਾਨੂੰ ਇਹ ਕਹਿਣ ਦਾ ਤਰੀਕਾ ਦਿੰਦਾ ਹੈ "ਜੇ ਇਹ ਹਾਲਾਤ ਸਹੀ ਨਹੀਂ ਹੈ, ਤਾਂ ਇਸ ਦੇ ਬਦਲੇ ਵਿੱਚ ਇਹ ਹੋਰ ਕੰਮ ਕਰੋ।" ਹੁਣ ਕਿਉਂਕਿ 500 >= 800 false ਹੈ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਪਹਿਲੇ ਬਲਾਕ ਨੂੰ ਛੱਡ ਦਿੰਦਾ ਹੈ ਅਤੇ else ਬਲਾਕ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ। ਤੁਸੀਂ "Can't afford a new laptop, yet!" ਕਨਸੋਲ ਵਿੱਚ ਦੇਖੋਗੇ। ✅ ਇਸ ਕੋਡ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਨੂੰ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਚਲਾਕੇ ਆਪਣੀ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ। currentMoney ਅਤੇ laptopPrice ਵੈਰੀਏਬਲਾਂ ਦੇ ਮੁੱਲਾਂ ਨੂੰ ਬਦਲੋ ਤਾਂ ਜੋ ਵਾਪਸ ਕੀਤਾ console.log() ਬਦਲ ਜਾਵੇ। ### 🎯 If-Else ਤਰਕ ਦੀ ਜਾਂਚ: ਸ਼ਾਖਾ ਪਾਠ ਆਪਣੀ ਸ਼ਰਤੀ ਤਰਕ ਦੀ ਸਮਝ ਦਾ ਮੁਲਾਂਕਣ ਕਰੋ: - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ currentMoney laptopPrice ਦੇ ਬਰਾਬਰ ਹੈ? - ਕੀ ਤੁਸੀਂ ਇੱਕ ਅਸਲ-ਜਗਤ ਦੀ ਸਥਿਤੀ ਬਾਰੇ ਸੋਚ ਸਕਦੇ ਹੋ ਜਿੱਥੇ if-else ਤਰਕ ਲਾਭਦਾਇਕ ਹੋਵੇਗਾ? - ਤੁਸੀਂ ਇਸਨੂੰ ਕਈ ਕੀਮਤ ਦੀ ਸ਼੍ਰੇਣੀਆਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕਿਵੇਂ ਵਧਾ ਸਕਦੇ ਹੋ? ## Switch ਬਿਆਨ ਕਈ ਵਾਰ ਤੁਹਾਨੂੰ ਇੱਕ ਮੁੱਲ ਦੀ ਕਈ ਵਿਕਲਪਾਂ ਨਾਲ ਤੁਲਨਾ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਤੁਸੀਂ ਕਈ if..else ਬਿਆਨਾਂ ਨੂੰ ਜੁੜ ਸਕਦੇ ਹੋ, ਇਹ ਪਹੁੰਚ ਅਸੁਵਿਧਾਜਨਕ ਬਣ ਜਾਂਦੀ ਹੈ। switch ਬਿਆਨ ਕਈ ਵੱਖਰੇ ਮੁੱਲਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਸਾਫ਼ ਸਟ੍ਰਕਚਰ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਇਸ ਦਾ ਸਿਧਾਂਤ ਸ਼ੁਰੂਆਤੀ ਟੈਲੀਫੋਨ ਐਕਸਚੇਂਜਾਂ ਵਿੱਚ ਵਰਤੇ ਗਏ ਮਕੈਨਿਕਲ ਸਵਿੱਚਿੰਗ ਸਿਸਟਮਾਂ ਦੇ ਸਮਾਨ ਹੈ - ਇੱਕ ਇਨਪੁਟ ਮੁੱਲ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਕਾਰਜਕਾਰੀ ਕਿਹੜੇ ਖਾਸ ਪਾਠ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ। ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਬਣਾਇਆ ਗਿਆ ਹੈ: - ਜਾਵਾਸਕ੍ਰਿਪਟ ਇੱਕ ਵਾਰ ਅਭਿਵਿਅਕਤੀ ਦਾ ਮੁਲਾਂਕਣ ਕਰਦਾ ਹੈ - ਇਹ ਹਰ case ਨੂੰ ਵੇਖਦਾ ਹੈ ਤਾਂ ਜੋ ਇੱਕ ਮੇਲ ਮਿਲੇ - ਜਦੋਂ ਇਹ ਇੱਕ ਮੇਲ ਮਿਲਦਾ ਹੈ, ਇਹ ਉਸ ਕੋਡ ਬਲਾਕ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ - break ਜਾਵਾਸਕ੍ਰਿਪਟ ਨੂੰ ਰੋਕਣ ਅਤੇ switch ਤੋਂ ਬਾਹਰ ਨਿਕਲਣ ਲਈ ਕਹਿੰਦਾ ਹੈ - ਜੇ ਕੋਈ ਕੇਸ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ, ਤਾਂ ਇਹ default ਬਲਾਕ ਚਲਾਉਂਦਾ ਹੈ (ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਹੈ) ਇਸ ਉਦਾਹਰਨ ਵਿੱਚ, ਜਾਵਾਸਕ੍ਰਿਪਟ ਵੇਖਦਾ ਹੈ ਕਿ dayNumber 2 ਹੈ, ਮੇਲ ਖਾਂਦਾ case 2, dayName ਨੂੰ "Tuesday" ਸੈਟ ਕਰਦਾ ਹੈ, ਅਤੇ ਫਿਰ switch ਤੋਂ ਬਾਹਰ ਨਿਕਲ ਜਾਂਦਾ ਹੈ। ਨਤੀਜਾ? "Today is Tuesday" ਕਨਸੋਲ ਵਿੱਚ ਲੌਗ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ✅ ਇਸ ਕੋਡ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਕੋਡ ਨੂੰ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਚਲਾਕੇ ਆਪਣੀ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ। ਵੈਰੀਏਬਲ a ਦੇ ਮੁੱਲਾਂ ਨੂੰ ਬਦਲੋ ਤਾਂ ਜੋ ਵਾਪਸ ਕੀਤਾ console.log() ਬਦਲ ਜਾਵੇ। ### 🔄 Switch ਬਿਆਨ ਦੀ ਮਾਹਰਤਾ: ਕਈ ਵਿਕਲਪ ਆਪਣੀ switch ਦੀ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ break ਬਿਆਨ ਭੁੱਲ ਜਾਂਦੇ ਹੋ? - ਤੁਸੀਂ ਕਈ if-else ਬਿਆਨਾਂ ਦੀ ਬਜਾਏ switch ਦੀ ਵਰਤੋਂ ਕਦੋਂ ਕਰਦੇ ਹੋ? - ਜੇ ਤੁਸੀਂ ਸੋਚਦੇ ਹੋ ਕਿ ਤੁਸੀਂ ਸਾਰੇ ਸੰਭਾਵਨਾਵਾਂ ਨੂੰ ਕਵਰ ਕਰ ਲਿਆ ਹੈ ਤਾਂ default ਕੇਸ ਕਿਉਂ ਲਾਭਦਾਇਕ ਹੈ? ## ਤਰਕਸ਼ੀਲ ਆਪਰੇਟਰ ਅਤੇ ਬੂਲੀਅਨਸ ਜਟਿਲ ਫੈਸਲੇ ਅਕਸਰ ਇੱਕੋ ਸਮੇਂ ਕਈ ਹਾਲਾਤਾਂ ਦਾ ਮੁਲਾਂਕਣ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੇ ਹਨ। ਜਿਵੇਂ ਕਿ ਬੂਲੀਅਨ ਬੀਜਗਣਿਤ ਗਣਿਤਜੀਆਂ ਨੂੰ ਤਰਕਸ਼ੀਲ ਅਭਿਵਿਅਕਤੀਆਂ ਨੂੰ ਜੋੜਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਪ੍ਰੋਗਰਾਮਿੰਗ ਕਈ ਬੂਲੀਅਨ ਹਾਲਾਤਾਂ ਨੂੰ ਜੋੜਨ ਲਈ ਤਰਕਸ਼ੀਲ ਆਪਰੇਟਰ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। ਇਹ ਆਪਰੇਟਰ ਸਧਾਰਨ true/false ਮੁਲਾਂਕਣਾਂ ਨੂੰ ਜੋੜ ਕੇ ਜਟਿਲ ਸ਼ਰਤੀ ਤਰਕ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। 2. ਲਾਜ਼ਮੀ ਔਪਰੇਟਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜਾਂਚ ਕਰੋ ਕਿ ਵਿਦਿਆਰਥੀ ਪਾਸ ਕਰਦਾ ਹੈ (ਗਰੇਡ >= 60) ਅਤੇ ਆਨਰਸ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ (ਗਰੇਡ >= 90) 3. ਹਰ ਲੇਟਰ ਗਰੇਡ ਲਈ ਵਿਸ਼ੇਸ਼ ਫੀਡਬੈਕ ਦੇਣ ਲਈ ਇੱਕ ਸਵਿੱਚ ਸਟੇਟਮ ਦੀ ਵਰਤੋਂ ਕਰੋ 4. ਟਰਨਰੀ ਔਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਹ ਨਿਰਧਾਰਤ ਕਰੋ ਕਿ ਵਿਦਿਆਰਥੀ ਅਗਲੇ ਕੋਰਸ ਲਈ ਯੋਗ ਹੈ (ਗਰੇਡ >= 70) 5. ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਇਨਪੁਟ ਵੈਧਤਾ ਸ਼ਾਮਲ ਕਰੋ ਕਿ ਸਕੋਰ 0 ਤੋਂ 100 ਦੇ ਵਿਚਕਾਰ ਹੈ ਆਪਣੇ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਵੱਖ-ਵੱਖ ਸਕੋਰਾਂ ਨਾਲ ਟੈਸਟ ਕਰੋ, ਜਿਵੇਂ ਕਿ 59, 60, 89, 90, ਅਤੇ ਗਲਤ ਇਨਪੁਟ। agent mode ਬਾਰੇ ਹੋਰ ਜਾਣੋ। ## ਪੋਸਟ-ਲੈਕਚਰ ਕਵਿਜ਼ ਪੋਸਟ-ਲੈਕਚਰ ਕਵਿਜ਼ ## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ ਅਧਿਐਨ ਉਪਭੋਗਤਾ ਲਈ ਉਪਲਬਧ ਕਈ ਔਪਰੇਟਰਾਂ ਬਾਰੇ ਹੋਰ ਪੜ੍ਹੋ MDN 'ਤੇ। Josh Comeau ਦੇ ਸ਼ਾਨਦਾਰ operator lookup ਨੂੰ ਜ਼ਰੂਰ ਦੇਖੋ! ## ਅਸਾਈਨਮੈਂਟ Operators --- ## 🧠 ਤੁਹਾਡਾ ਫੈਸਲਾ-ਲੈਣ ਵਾਲਾ ਟੂਲਕਿਟ ਸਾਰ --- ## 🚀 ਤੁਹਾਡਾ ਜਾਵਾਸਕ੍ਰਿਪਟ ਫੈਸਲਾ-ਲੈਣ ਦਾ ਮਾਹਰ ਬਣਨ ਦਾ ਸਮਾਂ-ਰੇਖਾ ### ⚡ ਅਗਲੇ 5 ਮਿੰਟਾਂ ਵਿੱਚ ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਤੁਲਨਾਤਮਕ ਔਪਰੇਟਰਾਂ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਇੱਕ ਸਧਾਰਨ if-else ਸਟੇਟਮ ਲਿਖੋ ਜੋ ਤੁਹਾਡੀ ਉਮਰ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ - [ ] ਚੁਣੌਤੀ ਅਜਮਾਓ: ਇੱਕ if-else ਨੂੰ ਟਰਨਰੀ ਔਪਰੇਟਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਦੁਬਾਰਾ ਲਿਖੋ - [ ] ਵੱਖ-ਵੱਖ "truthy" ਅਤੇ "falsy" ਮੁੱਲਾਂ ਨਾਲ ਕੀ ਹੁੰਦਾ ਹੈ, ਟੈਸਟ ਕਰੋ ### 🎯 ਇਸ ਘੰਟੇ ਵਿੱਚ ਤੁਸੀਂ ਕੀ ਹਾਸਲ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਪੋਸਟ-ਲੈਸਨ ਕਵਿਜ਼ ਪੂਰਾ ਕਰੋ ਅਤੇ ਕੋਈ ਵੀ ਗੁੰਝਲਦਾਰ ਧਾਰਨਾਵਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ - [ ] GitHub Copilot ਚੁਣੌਤੀ ਤੋਂ ਵਿਸਤ੍ਰਿਤ ਗਰੇਡ ਕੈਲਕੁਲੇਟਰ ਬਣਾਓ - [ ] ਇੱਕ ਅਸਲ-ਜੀਵਨ ਸਥਿਤੀ ਲਈ ਇੱਕ ਸਧਾਰਨ ਫੈਸਲਾ-ਲੈਣ ਵਾਲਾ ਦਰੱਖਤ ਬਣਾਓ (ਜਿਵੇਂ ਕਿ ਕੀ ਪਹਿਨਣਾ ਚੁਣਨਾ) - [ ] ਲਾਜ਼ਮੀ ਔਪਰੇਟਰਾਂ ਨਾਲ ਕਈ ਸ਼ਰਤਾਂ ਨੂੰ ਜੋੜਨ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਵੱਖ-ਵੱਖ ਵਰਤੋਂ ਦੇ ਕੇਸਾਂ ਲਈ ਸਵਿੱਚ ਸਟੇਟਮਾਂ ਦਾ ਅਭਿਆਸ ਕਰੋ ### 📅 ਤੁਹਾਡਾ ਹਫ਼ਤੇ-ਲੰਬਾ ਲਾਜ਼ਮੀ ਮਾਹਰ ਬਣਨ ਦਾ ਯੋਜਨਾ - [ ] ਰਚਨਾਤਮਕ ਉਦਾਹਰਣਾਂ ਨਾਲ ਔਪਰੇਟਰਾਂ ਅਸਾਈਨਮੈਂਟ ਪੂਰਾ ਕਰੋ - [ ] ਵੱਖ-ਵੱਖ ਸ਼ਰਤਾਂ ਵਾਲੇ ਢਾਂਚਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਛੋਟਾ ਕਵਿਜ਼ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਓ - [ ] ਇੱਕ ਫਾਰਮ ਵੈਲੀਡੇਟਰ ਬਣਾਓ ਜੋ ਕਈ ਇਨਪੁਟ ਸ਼ਰਤਾਂ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ - [ ] Josh Comeau ਦੇ operator lookup ਅਭਿਆਸਾਂ ਦਾ ਅਭਿਆਸ ਕਰੋ - [ ] ਮੌਜੂਦਾ ਕੋਡ ਨੂੰ ਵਧੇਰੇ ਉਚਿਤ ਸ਼ਰਤਾਂ ਵਾਲੇ ਢਾਂਚਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਦੁਬਾਰਾ ਲਿਖੋ - [ ] ਛੋਟੇ-ਸਰਕਟ ਮੁਲਾਂਕਨ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਦੇ ਪ੍ਰਭਾਵਾਂ ਦਾ ਅਧਿਐਨ ਕਰੋ ### 🌟 ਤੁਹਾਡਾ ਮਹੀਨੇ-ਲੰਬਾ ਬਦਲਾਅ - [ ] ਜਟਿਲ nested ਸ਼ਰਤਾਂ ਵਿੱਚ ਮਾਹਰ ਬਣੋ ਅਤੇ ਕੋਡ ਪੜ੍ਹਨਯੋਗਤਾ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖੋ - [ ] ਸੁਧਾਰਤ ਫੈਸਲਾ-ਲੈਣ ਵਾਲੇ ਤਰਕ ਨਾਲ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਓ - [ ] ਮੌਜੂਦਾ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਮੌਜੂਦਾ ਲਾਜ਼ਮੀ ਤਰਕ ਨੂੰ ਸੁਧਾਰ ਕੇ ਖੁੱਲੇ ਸਰੋਤ ਵਿੱਚ ਯੋਗਦਾਨ ਪਾਉ - [ ] ਵੱਖ-ਵੱਖ ਸ਼ਰਤਾਂ ਵਾਲੇ ਢਾਂਚਿਆਂ ਬਾਰੇ ਕਿਸੇ ਹੋਰ ਨੂੰ ਸਿਖਾਓ ਅਤੇ ਕਦੋਂ ਕਿਸੇ ਨੂੰ ਵਰਤਣਾ ਹੈ - [ ] ਲਾਜ਼ਮੀ ਤਰਕ ਲਈ ਫੰਕਸ਼ਨਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਪਹੁੰਚਾਂ ਦੀ ਖੋਜ ਕਰੋ - [ ] ਲਾਜ਼ਮੀ ਸ੍ਰੇਸ਼ਠ ਅਭਿਆਸਾਂ ਲਈ ਇੱਕ ਨਿੱਜੀ ਸੰਦਰਭ ਗਾਈਡ ਬਣਾਓ ### 🏆 ਅੰਤਮ ਫੈਸਲਾ-ਲੈਣ ਵਾਲੇ ਚੈਂਪੀਅਨ ਚੈੱਕ-ਇਨ ਤੁਹਾਡੇ ਲਾਜ਼ਮੀ ਸੋਚਣ ਦੇ ਮਾਹਰ ਬਣਨ ਦਾ ਜਸ਼ਨ ਮਨਾਓ: - ਸਭ ਤੋਂ ਜਟਿਲ ਫੈਸਲਾ-ਲੈਣ ਵਾਲਾ ਤਰਕ ਜੋ ਤੁਸੀਂ ਸਫਲਤਾਪੂਰਵਕ ਲਾਗੂ ਕੀਤਾ ਹੈ, ਕੀ ਹੈ? - ਤੁਹਾਨੂੰ ਸਭ ਤੋਂ ਕੁਦਰਤੀ ਲੱਗਣ ਵਾਲਾ ਲਾਜ਼ਮੀ ਢਾਂਚਾ ਕਿਹੜਾ ਹੈ ਅਤੇ ਕਿਉਂ? - ਲਾਜ਼ਮੀ ਔਪਰੇਟਰਾਂ ਬਾਰੇ ਸਿੱਖਣ ਨਾਲ ਤੁਹਾਡੇ ਸਮੱਸਿਆ-ਸੁਲਝਾਉਣ ਦੇ ਤਰੀਕੇ ਵਿੱਚ ਕਿਵੇਂ ਬਦਲਾਅ ਆਇਆ ਹੈ? - ਕਿਹੜੀ ਅਸਲ-ਜੀਵਨ ਐਪਲੀਕੇਸ਼ਨ ਸੁਧਾਰਤ ਫੈਸਲਾ-ਲੈਣ ਵਾਲੇ ਤਰਕ ਤੋਂ ਲਾਭ ਉਠਾ ਸਕਦੀ ਹੈ? --- ਅਸਵੀਕਰਤਾ: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦਾ ਯਤਨ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।

web,development

ਜਾਵਾਸਕ੍ਰਿਪਟ ਬੁਨਿਆਦੀਆਂ: ਐਰੇ ਅਤੇ ਲੂਪ

## ਪੜ੍ਹਾਈ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼ ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼ ਕੀ ਤੁਸੀਂ ਕਦੇ ਸੋਚਿਆ ਹੈ ਕਿ ਵੈਬਸਾਈਟਾਂ ਸ਼ਾਪਿੰਗ ਕਾਰਟ ਆਈਟਮਾਂ ਨੂੰ ਕਿਵੇਂ ਟਰੈਕ ਕਰਦੀਆਂ ਹਨ ਜਾਂ ਤੁਹਾਡੀ ਦੋਸਤਾਂ ਦੀ ਸੂਚੀ ਕਿਵੇਂ ਦਿਖਾਉਂਦੀਆਂ ਹਨ? ਇਹ ਸਾਰਾ ਕੰਮ ਐਰੇ ਅਤੇ ਲੂਪ ਦੀ ਮਦਦ ਨਾਲ ਹੁੰਦਾ ਹੈ। ਐਰੇ ਡਿਜੀਟਲ ਕੰਟੇਨਰਾਂ ਵਾਂਗ ਹਨ ਜੋ ਕਈ ਜਾਣਕਾਰੀ ਦੇ ਟੁਕੜਿਆਂ ਨੂੰ ਰੱਖਦੇ ਹਨ, ਜਦਕਿ ਲੂਪ ਤੁਹਾਨੂੰ ਸਾਰਾ ਡਾਟਾ ਬਿਨਾਂ ਦੁਹਰਾਏ ਹੋਏ ਕੋਡ ਦੇ ਕੁਸ਼ਲਤਾਪੂਰਵਕ ਕੰਮ ਕਰਨ ਦਿੰਦੇ ਹਨ। ਇਹ ਦੋਨੋ ਸੰਕਲਪ ਮਿਲ ਕੇ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮਾਂ ਵਿੱਚ ਜਾਣਕਾਰੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਮਜ਼ਬੂਤ ਬੁਨਿਆਦ ਬਣਾਉਂਦੇ ਹਨ। ਤੁਸੀਂ ਹੱਥੋਂ ਹੱਥ ਹਰ ਕਦਮ ਲਿਖਣ ਤੋਂ ਲੈ ਕੇ ਸੌਖੇ, ਸਮਰਥ ਕੋਡ ਬਣਾਉਣ ਤੱਕ ਸਿੱਖੋਗੇ ਜੋ ਸੈਂਕੜੇ ਜਾਂ ਹਜ਼ਾਰਾਂ ਆਈਟਮਾਂ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਪ੍ਰੋਸੈਸ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਪਾਠ ਦੇ ਅੰਤ ਤੱਕ, ਤੁਸੀਂ ਸਿਰਫ ਕੁਝ ਲਾਈਨਾਂ ਦੇ ਕੋਡ ਨਾਲ ਜਟਿਲ ਡਾਟਾ ਕੰਮ ਪੂਰੇ ਕਰਨ ਦੀ ਸਮਝ ਪ੍ਰਾਪਤ ਕਰ ਲੋਗੇ। ਆਓ, ਇਹ ਜ਼ਰੂਰੀ ਪ੍ਰੋਗਰਾਮਿੰਗ ਸੰਕਲਪਾਂ ਦੀ ਖੋਜ ਕਰੀਏ। [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## ਐਰੇ ਐਰੇ ਨੂੰ ਡਿਜੀਟਲ ਫਾਈਲਿੰਗ ਕੈਬਿਨੇਟ ਵਾਂਗ ਸੋਚੋ - ਇੱਕ ਦਰਾਜ਼ ਵਿੱਚ ਇੱਕ ਦਸਤਾਵੇਜ਼ ਰੱਖਣ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਕਈ ਸੰਬੰਧਿਤ ਆਈਟਮਾਂ ਨੂੰ ਇੱਕ ਸੰਗਠਿਤ ਕੰਟੇਨਰ ਵਿੱਚ ਰੱਖ ਸਕਦੇ ਹੋ। ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੇ ਤੌਰ 'ਤੇ, ਐਰੇ ਤੁਹਾਨੂੰ ਕਈ ਜਾਣਕਾਰੀ ਦੇ ਟੁਕੜਿਆਂ ਨੂੰ ਇੱਕ ਸੰਗਠਿਤ ਪੈਕੇਜ ਵਿੱਚ ਸਟੋਰ ਕਰਨ ਦਿੰਦੇ ਹਨ। ਚਾਹੇ ਤੁਸੀਂ ਫੋਟੋ ਗੈਲਰੀ ਬਣਾਉਣ, ਟੂ-ਡੂ ਲਿਸਟ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਜਾਂ ਖੇਡ ਵਿੱਚ ਉੱਚ ਸਕੋਰ ਟਰੈਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹੋਵੋ, ਐਰੇ ਡਾਟਾ ਸੰਗਠਨ ਲਈ ਬੁਨਿਆਦ ਮੁਹੱਈਆ ਕਰਦੇ ਹਨ। ਆਓ ਵੇਖੀਏ ਕਿ ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦੇ ਹਨ। ✅ ਐਰੇ ਹਰ ਜਗ੍ਹਾ ਹਨ! ਕੀ ਤੁਸੀਂ ਐਰੇ ਦਾ ਕੋਈ ਹਕੀਕਤੀ ਉਦਾਹਰਨ ਦੇ ਬਾਰੇ ਸੋਚ ਸਕਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ ਸੂਰਜੀ ਪੈਨਲ ਐਰੇ? ### ਐਰੇ ਬਣਾਉਣਾ ਐਰੇ ਬਣਾਉਣਾ ਬਹੁਤ ਹੀ ਆਸਾਨ ਹੈ - ਸਿਰਫ਼ ਚੌਰਸ ਬ੍ਰੈਕਟ ਵਰਤੋ! ਇੱਥੇ ਕੀ ਹੋ ਰਿਹਾ ਹੈ? ਤੁਸੀਂ ਉਹ ਚੌਰਸ ਬ੍ਰੈਕਟ [] ਵਰਤ ਕੇ ਇੱਕ ਖਾਲੀ ਕੰਟੇਨਰ ਬਣਾਇਆ ਹੈ। ਇਸ ਨੂੰ ਇੱਕ ਖਾਲੀ ਲਾਇਬ੍ਰੇਰੀ ਸ਼ੈਲਫ ਵਾਂਗ ਸੋਚੋ - ਇਹ ਤਿਆਰ ਹੈ ਜੋ ਵੀ ਕਿਤਾਬਾਂ ਤੁਸੀਂ ਉੱਥੇ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ। ਤੁਸੀਂ ਆਪਣੇ ਐਰੇ ਨੂੰ ਸ਼ੁਰੂ ਤੋਂ ਹੀ ਮੁਲਿਆਂ ਨਾਲ ਭਰ ਸਕਦੇ ਹੋ: ਕੁਝ ਮਜ਼ੇਦਾਰ ਗੱਲਾਂ: - ਤੁਸੀਂ ਇੱਕ ਹੀ ਐਰੇ ਵਿੱਚ ਟੈਕਸਟ, ਨੰਬਰ, ਜਾਂ ਸੱਚ/ਝੂਠ ਮੁੱਲ ਸਟੋਰ ਕਰ ਸਕਦੇ ਹੋ - ਸਿਰਫ਼ ਹਰ ਆਈਟਮ ਨੂੰ ਇੱਕ ਕਾਮਾ ਨਾਲ ਵੱਖ ਕਰੋ - ਆਸਾਨ! - ਐਰੇ ਸੰਬੰਧਿਤ ਜਾਣਕਾਰੀ ਨੂੰ ਇਕੱਠੇ ਰੱਖਣ ਲਈ ਬਹੁਤ ਹੀ ਵਧੀਆ ਹਨ ### ਐਰੇ ਇੰਡੈਕਸਿੰਗ ਇੱਥੇ ਕੁਝ ਅਜਿਹਾ ਹੈ ਜੋ ਸ਼ੁਰੂ ਵਿੱਚ ਅਜੀਬ ਲੱਗ ਸਕਦਾ ਹੈ: ਐਰੇ ਆਪਣੇ ਆਈਟਮਾਂ ਨੂੰ 0 ਤੋਂ ਗਿਣਦੇ ਹਨ, 1 ਤੋਂ ਨਹੀਂ। ਇਹ ਜ਼ੀਰੋ-ਬੇਸਡ ਇੰਡੈਕਸਿੰਗ ਦਾ ਸਬੰਧ ਕੰਪਿਊਟਰ ਮੈਮੋਰੀ ਦੇ ਕੰਮ ਕਰਨ ਦੇ ਤਰੀਕੇ ਨਾਲ ਹੈ - ਇਹ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੀ ਰਵਾਇਤ ਹੈ ਜੋ C ਵਰਗੀਆਂ ਭਾਸ਼ਾਵਾਂ ਦੇ ਸ਼ੁਰੂਆਤੀ ਦਿਨਾਂ ਤੋਂ ਹੈ। ਐਰੇ ਵਿੱਚ ਹਰ ਸਥਾਨ ਨੂੰ ਆਪਣਾ ਪਤਾ ਨੰਬਰ ਮਿਲਦਾ ਹੈ ਜਿਸਨੂੰ ਇੰਡੈਕਸ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ✅ ਕੀ ਇਹ ਤੁਹਾਨੂੰ ਹੈਰਾਨ ਕਰਦਾ ਹੈ ਕਿ ਐਰੇ ਜ਼ੀਰੋ ਇੰਡੈਕਸ ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ? ਕੁਝ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਇੰਡੈਕਸ 1 ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ। ਇਸ ਬਾਰੇ ਦਿਲਚਸਪ ਇਤਿਹਾਸ ਵਿਕੀਪੀਡੀਆ 'ਤੇ ਪੜ੍ਹ ਸਕਦੇ ਹੋ। ਐਰੇ ਤੱਤਾਂ ਨੂੰ ਐਕਸੈਸ ਕਰਨਾ: ਇੱਥੇ ਕੀ ਹੋ ਰਿਹਾ ਹੈ: - ਵਰਤਦਾ ਹੈ ਇੰਡੈਕਸ ਨੰਬਰ ਨਾਲ ਚੌਰਸ ਬ੍ਰੈਕਟ ਨੋਟੇਸ਼ਨ - ਮੁੱਲ ਵਾਪਸ ਕਰਦਾ ਹੈ ਜੋ ਉਸ ਖਾਸ ਸਥਾਨ 'ਤੇ ਸਟੋਰ ਕੀਤਾ ਗਿਆ ਹੈ - ਗਿਣਤੀ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ 0 ਤੋਂ, ਪਹਿਲਾ ਤੱਤ ਇੰਡੈਕਸ 0 ਬਣਦਾ ਹੈ ਐਰੇ ਤੱਤਾਂ ਨੂੰ ਸੋਧਣਾ: ਉਪਰ ਦਿੱਤੇ ਵਿੱਚ, ਅਸੀਂ: - ਸੋਧਿਆ ਇੰਡੈਕਸ 4 'ਤੇ ਤੱਤ "ਰਾਕੀ ਰੋਡ" ਨੂੰ "ਬਟਰ ਪੀਕਨ" ਵਿੱਚ - ਨਵਾਂ ਤੱਤ ਸ਼ਾਮਲ ਕੀਤਾ "ਕੁਕੀ ਡੌ" ਇੰਡੈਕਸ 5 'ਤੇ - ਆਪਣੇ ਆਪ ਐਰੇ ਦੀ ਲੰਬਾਈ ਵਧਾਈ ਜਦੋਂ ਮੌਜੂਦਾ ਸੀਮਾਵਾਂ ਤੋਂ ਬਾਹਰ ਸ਼ਾਮਲ ਕੀਤਾ ### ਐਰੇ ਦੀ ਲੰਬਾਈ ਅਤੇ ਆਮ ਤਰੀਕੇ ਐਰੇ ਵਿੱਚ ਬਿਲਟ-ਇਨ ਪ੍ਰਾਪਰਟੀ ਅਤੇ ਤਰੀਕੇ ਹੁੰਦੇ ਹਨ ਜੋ ਡਾਟਾ ਨਾਲ ਕੰਮ ਕਰਨਾ ਬਹੁਤ ਹੀ ਆਸਾਨ ਬਣਾਉਂਦੇ ਹਨ। ਐਰੇ ਦੀ ਲੰਬਾਈ ਪਤਾ ਕਰਨਾ: ਯਾਦ ਰੱਖਣ ਵਾਲੇ ਮੁੱਖ ਬਿੰਦੂ: - ਵਾਪਸ ਕਰਦਾ ਹੈ ਐਰੇ ਵਿੱਚ ਕੁੱਲ ਤੱਤਾਂ ਦੀ ਗਿਣਤੀ - ਆਪਣੇ ਆਪ ਅਪਡੇਟ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੱਤ ਸ਼ਾਮਲ ਜਾਂ ਹਟਾਏ ਜਾਂਦੇ ਹਨ - ਡਾਇਨਾਮਿਕ ਗਿਣਤੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ ਲੂਪ ਅਤੇ ਵੈਲੀਡੇਸ਼ਨ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਮਹੱਤਵਪੂਰਨ ਐਰੇ ਤਰੀਕੇ: ਇਨ੍ਹਾਂ ਤਰੀਕਿਆਂ ਨੂੰ ਸਮਝਣਾ: - ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ push() (ਅੰਤ) ਅਤੇ unshift() (ਸ਼ੁਰੂ) ਨਾਲ ਤੱਤ - ਹਟਾਉਂਦਾ ਹੈ pop() (ਅੰਤ) ਅਤੇ shift() (ਸ਼ੁਰੂ) ਨਾਲ ਤੱਤ - ਲੋਕੇਟ ਕਰਦਾ ਹੈ indexOf() ਨਾਲ ਤੱਤ ਅਤੇ includes() ਨਾਲ ਮੌਜੂਦਗੀ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ - ਵਾਪਸ ਕਰਦਾ ਹੈ ਲਾਭਦਾਇਕ ਮੁੱਲ ਜਿਵੇਂ ਹਟਾਏ ਗਏ ਤੱਤ ਜਾਂ ਸਥਾਨ ਇੰਡੈਕਸ ✅ ਖੁਦ ਅਜ਼ਮਾਓ! ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ ਕਨਸੋਲ ਵਿੱਚ ਇੱਕ ਐਰੇ ਬਣਾਓ ਅਤੇ ਮੈਨਿਪੁਲੇਟ ਕਰੋ। ### 🧠 ਐਰੇ ਬੁਨਿਆਦੀਆਂ ਦੀ ਜਾਂਚ: ਆਪਣਾ ਡਾਟਾ ਸੰਗਠਿਤ ਕਰਨਾ ਆਪਣੀ ਐਰੇ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਤੁਹਾਨੂੰ ਕਿਉਂ ਲੱਗਦਾ ਹੈ ਕਿ ਐਰੇ 0 ਤੋਂ ਗਿਣਤੀ ਸ਼ੁਰੂ ਕਰਦੇ ਹਨ, 1 ਤੋਂ ਨਹੀਂ? - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ ਇੱਕ ਅਜਿਹੇ ਇੰਡੈਕਸ ਨੂੰ ਐਕਸੈਸ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੋ ਮੌਜੂਦ ਨਹੀਂ ਹੈ (ਜਿਵੇਂ arr[100] ਇੱਕ 5-ਤੱਤਾਂ ਵਾਲੇ ਐਰੇ ਵਿੱਚ)? - ਕੀ ਤੁਸੀਂ ਤਿੰਨ ਹਕੀਕਤੀ ਸਥਿਤੀਆਂ ਬਾਰੇ ਸੋਚ ਸਕਦੇ ਹੋ ਜਿੱਥੇ ਐਰੇ ਲਾਭਦਾਇਕ ਹੋ ਸਕਦੇ ਹਨ? ## ਲੂਪ ਚਾਰਲਸ ਡਿਕਨਜ਼ ਦੇ ਨਾਵਲਾਂ ਵਿੱਚ ਮਸ਼ਹੂਰ ਸਜ਼ਾ ਬਾਰੇ ਸੋਚੋ ਜਿੱਥੇ ਵਿਦਿਆਰਥੀਆਂ ਨੂੰ ਇੱਕ ਵਾਕ ਨੂੰ ਬਾਰ-ਬਾਰ ਸਲੇਟ 'ਤੇ ਲਿਖਣਾ ਪੈਂਦਾ ਸੀ। ਕਲਪਨਾ ਕਰੋ ਕਿ ਜੇ ਤੁਸੀਂ ਕਿਸੇ ਨੂੰ ਸਿਰਫ਼ "ਇਹ ਵਾਕ 100 ਵਾਰ ਲਿਖੋ" ਕਹਿ ਸਕਦੇ ਹੋ ਅਤੇ ਇਹ ਆਪਣੇ ਆਪ ਹੋ ਜਾਵੇ। ਇਹੀ ਕੰਮ ਤੁਹਾਡੇ ਕੋਡ ਲਈ ਲੂਪ ਕਰਦੇ ਹਨ। ਲੂਪ ਇੱਕ ਅਜਿਹੇ ਸਹਾਇਕ ਦੀ ਤਰ੍ਹਾਂ ਹੁੰਦੇ ਹਨ ਜੋ ਕੰਮਾਂ ਨੂੰ ਬਿਨਾਂ ਗਲਤੀ ਦੇ ਦੁਹਰਾਉਂਦੇ ਹਨ। ਚਾਹੇ ਤੁਹਾਨੂੰ ਸ਼ਾਪਿੰਗ ਕਾਰਟ ਵਿੱਚ ਹਰ ਆਈਟਮ ਦੀ ਜਾਂਚ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੋਵੇ ਜਾਂ ਐਲਬਮ ਵਿੱਚ ਸਾਰੇ ਫੋਟੋ ਦਿਖਾਉਣ ਦੀ, ਲੂਪ ਦੁਹਰਾਅ ਨੂੰ ਕੁਸ਼ਲਤਾਪੂਰਵਕ ਸੰਭਾਲਦੇ ਹਨ। ਜਾਵਾਸਕ੍ਰਿਪਟ ਕਈ ਕਿਸਮ ਦੇ ਲੂਪ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਆਓ ਹਰ ਇੱਕ ਨੂੰ ਵੇਖੀਏ ਅਤੇ ਸਮਝੀਏ ਕਿ ਕਦੋਂ ਇਸਨੂੰ ਵਰਤਣਾ ਹੈ। ### ਫੋਰ ਲੂਪ for ਲੂਪ ਇੱਕ ਟਾਈਮਰ ਸੈਟ ਕਰਨ ਵਾਂਗ ਹੈ - ਤੁਹਾਨੂੰ ਪਤਾ ਹੁੰਦਾ ਹੈ ਕਿ ਤੁਹਾਨੂੰ ਕੁਝ ਕਿੰਨੀ ਵਾਰ ਕਰਨਾ ਹੈ। ਇਹ ਬਹੁਤ ਹੀ ਸੰਗਠਿਤ ਅਤੇ ਪੇਸ਼ਕਸ਼ੀ ਹੈ, ਜੋ ਇਸਨੂੰ ਐਰੇ ਨਾਲ ਕੰਮ ਕਰਨ ਜਾਂ ਚੀਜ਼ਾਂ ਦੀ ਗਿਣਤੀ ਕਰਨ ਲਈ ਬਹੁਤ ਹੀ ਵਧੀਆ ਬਣਾਉਂਦਾ ਹੈ। ਫੋਰ ਲੂਪ ਦੀ ਬਣਤਰ: ਕਦਮ-ਦਰ-ਕਦਮ, ਇੱਥੇ ਕੀ ਹੋ ਰਿਹਾ ਹੈ: - ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਕਾਊਂਟਰ ਵੈਰੀਏਬਲ i ਨੂੰ 0 'ਤੇ - ਸ਼ਰਤ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ i < 10 ਹਰ ਚੱਕਰ ਤੋਂ ਪਹਿਲਾਂ - ਕੋਡ ਬਲਾਕ ਚਲਾਉਂਦਾ ਹੈ ਜਦੋਂ ਸ਼ਰਤ ਸੱਚ ਹੈ - ਵਾਧਾ ਕਰਦਾ ਹੈ i ਨੂੰ 1 ਨਾਲ ਹਰ ਚੱਕਰ ਤੋਂ ਬਾਅਦ - ਰੁਕਦਾ ਹੈ ਜਦੋਂ ਸ਼ਰਤ ਝੂਠ ਬਣ ਜਾਂਦੀ ਹੈ (ਜਦੋਂ i 10 'ਤੇ ਪਹੁੰਚਦਾ ਹੈ) ✅ ਇਹ ਕੋਡ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਚਲਾਓ। ਕੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਕਾਊਂਟਰ, ਸ਼ਰਤ ਜਾਂ ਇੰਕਰੀਮੈਂਟ ਐਕਸਪ੍ਰੈਸ਼ਨ ਵਿੱਚ ਛੋਟੇ ਬਦਲਾਅ ਕਰਦੇ ਹੋ? ਕੀ ਤੁਸੀਂ ਇਸਨੂੰ ਪਿੱਛੇ ਚਲਾਉਣ ਲਈ ਬਦਲ ਸਕਦੇ ਹੋ, ਇੱਕ ਕਾਊਂਟਡਾਊਨ ਬਣਾਉਣ ਲਈ? ### 🗓️ ਫੋਰ ਲੂਪ ਮਾਹਰਤਾ ਦੀ ਜਾਂਚ: ਨਿਯੰਤਰਿਤ ਦੁਹਰਾਅ ਆਪਣੀ ਫੋਰ ਲੂਪ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਫੋਰ ਲੂਪ ਦੇ ਤਿੰਨ ਹਿੱਸੇ ਕੀ ਹਨ, ਅਤੇ ਹਰ ਇੱਕ ਕੀ ਕਰਦਾ ਹੈ? - ਤੁਸੀਂ ਇੱਕ ਐਰੇ ਨੂੰ ਪਿੱਛੇ ਵੱਲ ਕਿਵੇਂ ਲੂਪ ਕਰ ਸਕਦੇ ਹੋ? - ਕੀ ਹੁੰਦਾ ਹੈ ਜੇ ਤੁਸੀਂ ਵਾਧਾ ਹਿੱਸਾ (i++) ਭੁੱਲ ਜਾਂਦੇ ਹੋ? ### ਵਾਇਲ ਲੂਪ while ਲੂਪ "ਇਹ ਕਰਦੇ ਰਹੋ ਜਦ ਤੱਕ..." ਵਾਂਗ ਹੁੰਦਾ ਹੈ - ਤੁਹਾਨੂੰ ਪਤਾ ਨਹੀਂ ਹੁੰਦਾ ਕਿ ਇਹ ਕਿੰਨੀ ਵਾਰ ਚੱਲੇਗਾ, ਪਰ ਤੁਹਾਨੂੰ ਪਤਾ ਹੁੰਦਾ ਹੈ ਕਿ ਕਦੋਂ ਰੁਕਣਾ ਹੈ। ਇਹ ਉਨ੍ਹਾਂ ਚੀਜ਼ਾਂ ਲਈ ਬਹੁਤ ਹੀ ਵਧੀਆ ਹੈ ਜਿਵੇਂ ਕਿ ਯੂਜ਼ਰ ਤੋਂ ਇਨਪੁਟ ਮੰਗਣਾ ਜਦ ਤੱਕ ਉਹ ਤੁਹਾਨੂੰ ਜੋ ਚਾਹੀਦਾ ਹੈ ਦੇਣ, ਜਾਂ ਡਾਟਾ ਵਿੱਚ ਖੋਜ ਕਰਨਾ ਜਦ ਤੱਕ ਤੁਹਾਨੂੰ ਜੋ ਲੱਭਣਾ ਹੈ ਉਹ ਮਿਲੇ। ਵਾਇਲ ਲੂਪ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ: - ਜਾਰੀ ਰੱਖਦਾ ਹੈ ਜਦ ਤੱਕ ਸ਼ਰਤ ਸੱਚ ਹੈ - ਮੈਨੂਅਲ ਪ੍ਰਬੰਧਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ ਕਿਸੇ ਵੀ ਕਾਊਂਟਰ ਵੈਰੀਏਬਲ ਦੀ - ਸ਼ਰਤ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ ਹਰ ਚੱਕਰ ਤੋਂ ਪਹਿਲਾਂ - ਅਨੰਤ ਲੂਪ ਦਾ ਖਤਰਾ ਜੇ ਸ਼ਰਤ ਕਦੇ ਝੂਠ ਨਹੀਂ ਬਣਦੀ ਇਨ੍ਹਾਂ ਉਦਾਹਰਨਾਂ ਨੂੰ ਸਮਝਣਾ: - ਕਾਊਂਟਰ ਵੈਰੀਏਬਲ i ਨੂੰ ਮੈਨੂਅਲੀ ਤੌਰ 'ਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰਦਾ ਹੈ ਲੂਪ ਬਾਡੀ ਦੇ ਅੰਦਰ - ਕਾਊਂਟਰ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ ਅਨੰਤ ਲੂਪਾਂ ਨੂੰ ਰੋਕਣ ਲਈ - ਪ੍ਰਯੋਗਿਕ ਵਰਤੋਂ ਦਾ ਕੇਸ ਦਿਖਾਉਂਦਾ ਹੈ ਯੂਜ਼ਰ ਇਨਪੁਟ ਅਤੇ ਕੋਸ਼ਿਸ਼ਾਂ ਦੀ ਸੀਮਾ ਨਾਲ - ਅਨੰਤ ਚਾਲੂ ਹੋਣ ਤੋਂ ਬਚਾਉਣ ਲਈ ਸੁਰੱਖਿਆ ਮਕੈਨਿਜ਼ਮ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ ### ♾️ ਵਾਇਲ ਲੂਪ ਦੀ ਸਿਆਣਪ ਦੀ ਜਾਂਚ: ਸ਼ਰਤ-ਅਧਾਰਿਤ ਦੁਹਰਾਅ ਆਪਣੀ ਵਾਇਲ ਲੂਪ ਸਮਝ ਦੀ ਜਾਂਚ ਕਰੋ: - ਵਾਇਲ ਲੂਪ ਵਰਤਣ ਦਾ ਮੁੱਖ ਖਤਰਾ ਕੀ ਹੈ? - ਤੁਸੀਂ ਫੋਰ ਲੂਪ ਦੇ ਬਦਲੇ ਵਾਇਲ ਲੂਪ ਕਦੋਂ ਚੁਣੋਗੇ? - ਤੁਸੀਂ ਅਨੰਤ ਲੂਪਾਂ ਨੂੰ ਕਿਵੇਂ ਰੋਕ ਸਕਦੇ ਹੋ? ਜਾਵਾਸਕ੍ਰਿਪਟ ਕਈ ਆਧੁਨਿਕ ਐਰੇ ਮੈਥਡਸ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਜੋ ਖਾਸ ਕੰਮਾਂ ਲਈ ਰਵਾਇਤੀ ਲੂਪਾਂ ਦੀ ਜਗ੍ਹਾ ਲੈ ਸਕਦੇ ਹਨ। forEach, for-of, map, filter, ਅਤੇ reduce ਦੀ ਜਾਂਚ ਕਰੋ। ਤੁਹਾਡਾ ਚੈਲੈਂਜ: ਵਿਦਿਆਰਥੀ ਗਰੇਡਸ ਦੇ ਉਦਾਹਰਨ ਨੂੰ ਘੱਟੋ-ਘੱਟ ਤਿੰਨ ਵੱਖ-ਵੱਖ ਐਰੇ ਮੈਥਡਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਦੁਬਾਰਾ ਲਿਖੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਆਧੁਨਿਕ ਜਾਵਾਸਕ੍ਰਿਪਟ ਸਿੰਟੈਕਸ ਨਾਲ ਕੋਡ ਕਿੰਨਾ ਸਾਫ ਅਤੇ ਪੜ੍ਹਨਯੋਗ ਬਣ ਜਾਂਦਾ ਹੈ। ## ਪੋਸਟ-ਲੈਕਚਰ ਕਵਿਜ ਪੋਸਟ-ਲੈਕਚਰ ਕਵਿਜ ## ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ-ਅਧਿਐਨ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਐਰੇਜ਼ ਨਾਲ ਕਈ ਮੈਥਡਸ ਜੁੜੇ ਹੋਏ ਹਨ, ਜੋ ਡਾਟਾ ਮੈਨਿਪੂਲੇਸ਼ਨ ਲਈ ਬਹੁਤ ਹੀ ਲਾਭਦਾਇਕ ਹਨ। ਇਨ੍ਹਾਂ ਮੈਥਡਸ ਬਾਰੇ ਪੜ੍ਹੋ ਅਤੇ ਆਪਣੇ ਬਣਾਏ ਐਰੇ 'ਤੇ ਕੁਝ ਮੈਥਡਸ (ਜਿਵੇਂ ਕਿ push, pop, slice ਅਤੇ splice) ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ## ਅਸਾਈਨਮੈਂਟ ਐਰੇ ਨੂੰ ਲੂਪ ਕਰੋ --- ## 📊 ਤੁਹਾਡਾ ਐਰੇਜ਼ ਅਤੇ ਲੂਪਸ ਟੂਲਕਿਟ ਸਾਰ --- ## 🚀 ਤੁਹਾਡਾ ਐਰੇਜ਼ ਅਤੇ ਲੂਪਸ ਮਾਹਰ ਬਣਨ ਦਾ ਟਾਈਮਲਾਈਨ ### ⚡ ਅਗਲੇ 5 ਮਿੰਟਾਂ ਵਿੱਚ ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਆਪਣੇ ਮਨਪਸੰਦ ਫਿਲਮਾਂ ਦਾ ਇੱਕ ਐਰੇ ਬਣਾਓ ਅਤੇ ਖਾਸ ਐਲਿਮੈਂਟਸ ਨੂੰ ਐਕਸੈਸ ਕਰੋ - [ ] 1 ਤੋਂ 10 ਤੱਕ ਗਿਣਤੀ ਕਰਨ ਵਾਲਾ ਇੱਕ ਫੋਰ ਲੂਪ ਲਿਖੋ - [ ] ਲੈਸਨ ਤੋਂ ਆਧੁਨਿਕ ਐਰੇ ਮੈਥਡਸ ਚੈਲੈਂਜ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ - [ ] ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਕਨਸੋਲ ਵਿੱਚ ਐਰੇ ਇੰਡੈਕਸਿੰਗ ਦੀ ਪ੍ਰੈਕਟਿਸ ਕਰੋ ### 🎯 ਇਸ ਘੰਟੇ ਵਿੱਚ ਤੁਸੀਂ ਕੀ ਹਾਸਲ ਕਰ ਸਕਦੇ ਹੋ - [ ] ਪੋਸਟ-ਲੈਸਨ ਕਵਿਜ ਪੂਰਾ ਕਰੋ ਅਤੇ ਕਿਸੇ ਵੀ ਚੁਣੌਤੀਪੂਰਨ ਧਾਰਨਾਵਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ - [ ] GitHub Copilot ਚੈਲੈਂਜ ਤੋਂ ਵਿਸਤ੍ਰਿਤ ਗਰੇਡ ਵਿਸ਼ਲੇਸ਼ਕ ਬਣਾਓ - [ ] ਇੱਕ ਸਧਾਰਨ ਸ਼ਾਪਿੰਗ ਕਾਰਟ ਬਣਾਓ ਜੋ ਆਈਟਮਸ ਨੂੰ ਸ਼ਾਮਲ ਅਤੇ ਹਟਾਉਂਦਾ ਹੈ - [ ] ਵੱਖ-ਵੱਖ ਲੂਪ ਕਿਸਮਾਂ ਵਿੱਚ ਬਦਲਣ ਦੀ ਪ੍ਰੈਕਟਿਸ ਕਰੋ - [ ] push, pop, slice, ਅਤੇ splice ਵਰਗੇ ਐਰੇ ਮੈਥਡਸ ਨਾਲ ਅਨੁਭਵ ਕਰੋ ### 📅 ਤੁਹਾਡਾ ਹਫ਼ਤੇ-ਲੰਬਾ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਯਾਤਰਾ - [ ] "ਐਰੇ ਨੂੰ ਲੂਪ ਕਰੋ" ਅਸਾਈਨਮੈਂਟ ਨੂੰ ਰਚਨਾਤਮਕ ਸੁਧਾਰਾਂ ਨਾਲ ਪੂਰਾ ਕਰੋ - [ ] ਐਰੇਜ਼ ਅਤੇ ਲੂਪਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਟੂ-ਡੂ ਲਿਸਟ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਓ - [ ] ਅੰਕੜਿਆਂ ਦੇ ਡਾਟਾ ਲਈ ਇੱਕ ਸਧਾਰਨ ਸਟੈਟਿਸਟਿਕਸ ਕੈਲਕੁਲੇਟਰ ਬਣਾਓ - [ ] MDN ਐਰੇ ਮੈਥਡਸ ਨਾਲ ਪ੍ਰੈਕਟਿਸ ਕਰੋ - [ ] ਇੱਕ ਫੋਟੋ ਗੈਲਰੀ ਜਾਂ ਮਿਊਜ਼ਿਕ ਪਲੇਲਿਸਟ ਇੰਟਰਫੇਸ ਬਣਾਓ - [ ] map, filter, ਅਤੇ reduce ਨਾਲ ਫੰਕਸ਼ਨਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੀ ਜਾਂਚ ਕਰੋ ### 🌟 ਤੁਹਾਡਾ ਮਹੀਨੇ-ਲੰਬਾ ਬਦਲਾਅ - [ ] ਉੱਚ-ਸਤਹ ਦੇ ਐਰੇ ਓਪਰੇਸ਼ਨ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਅਪਟਿਮਾਈਜ਼ੇਸ਼ਨ ਵਿੱਚ ਮਾਹਰ ਬਣੋ - [ ] ਇੱਕ ਪੂਰਾ ਡਾਟਾ ਵਿਜ਼ੁਅਲਾਈਜ਼ੇਸ਼ਨ ਡੈਸ਼ਬੋਰਡ ਬਣਾਓ - [ ] ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਨਾਲ ਸੰਬੰਧਿਤ ਓਪਨ ਸੋਰਸ ਪ੍ਰੋਜੈਕਟਸ ਵਿੱਚ ਯੋਗਦਾਨ ਪਾਓ - [ ] ਪ੍ਰੈਕਟਿਕਲ ਉਦਾਹਰਨਾਂ ਨਾਲ ਕਿਸੇ ਹੋਰ ਨੂੰ ਐਰੇਜ਼ ਅਤੇ ਲੂਪਸ ਬਾਰੇ ਸਿਖਾਓ - [ ] ਦੁਬਾਰਾ ਵਰਤਣਯੋਗ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਫੰਕਸ਼ਨਸ ਦੀ ਆਪਣੀ ਨਿੱਜੀ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾਓ - [ ] ਐਰੇਜ਼ 'ਤੇ ਬਣੇ ਅਲਗੋਰਿਥਮਸ ਅਤੇ ਡਾਟਾ ਸਟ੍ਰਕਚਰਸ ਦੀ ਜਾਂਚ ਕਰੋ ### 🏆 ਅੰਤਮ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਚੈਂਪੀਅਨ ਚੈੱਕ-ਇਨ ਤੁਹਾਡੀ ਐਰੇ ਅਤੇ ਲੂਪਸ ਮਾਹਰਤਾ ਦਾ ਜਸ਼ਨ ਮਨਾਓ: - ਤੁਹਾਡੇ ਲਈ ਅਸਲ ਦੁਨੀਆ ਦੇ ਐਪਲੀਕੇਸ਼ਨਸ ਲਈ ਸਭ ਤੋਂ ਲਾਭਦਾਇਕ ਐਰੇ ਓਪਰੇਸ਼ਨ ਕਿਹੜਾ ਹੈ? - ਤੁਹਾਨੂੰ ਕਿਹੜੀ ਲੂਪ ਕਿਸਮ ਸਭ ਤੋਂ ਕੁਦਰਤੀ ਲੱਗਦੀ ਹੈ ਅਤੇ ਕਿਉਂ? - ਐਰੇਜ਼ ਅਤੇ ਲੂਪਸ ਨੂੰ ਸਮਝਣ ਨਾਲ ਤੁਹਾਡੇ ਡਾਟਾ ਨੂੰ ਸੰਗਠਿਤ ਕਰਨ ਦੇ ਤਰੀਕੇ ਵਿੱਚ ਕਿਵੇਂ ਬਦਲਾਅ ਆਇਆ ਹੈ? - ਤੁਸੀਂ ਅਗਲਾ ਕਿਹੜਾ ਜਟਿਲ ਡਾਟਾ ਪ੍ਰੋਸੈਸਿੰਗ ਕੰਮ ਹੱਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? --- ਅਸਵੀਕਰਤੀ: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦਾ ਯਤਨ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚੀਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਸ ਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।

web,development

Introduction to JavaScript

JavaScript na di language wey web dey use. For dis four lessons, you go learn im basics. ### Topics 1. Variables and Data Types 2. Functions and Methods 3. Making Decisions with JavaScript 4. Arrays and Loops ### Credits Dem write dis lessons with ♥️ by Jasmine Greenaway, Christopher Harrison and Chris Noring --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: Dis document don translate wit AI translation service wey dem dey call Co-op Translator. Even tho we dey try make am correct, abeg no forget say sometimes automated translation fit get mistake or no too correct. The original document wey dem write for im own language na im get correct info pass. If na important info, e better make professional human translator do am. We no go take any kasala or wahala wey fit come from how dis translation dem use. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Data Types

Data types na one of di basic concepts for JavaScript wey you go see for every program wey you go write. Make you think data types like di filing system wey old librarians for Alexandria use – dem get special places for scrolls wey dey hold poetry, mathematics, and historical records. JavaScript organize information like that but e get different categories for different kain data. For dis lesson, we go explore di main data types wey dey make JavaScript work. You go learn how to handle numbers, text, true/false values, and sabi why e good to pick correct type for your programs. Dis ideas fit look like say dem hard first, but as you dey practice, e go become easy. To sabi data types go make everything for JavaScript clear. Like how architects need to sabi different building materials before dem go build big church, these basics go support everything you go build later. ## Pre-Lecture Quiz Pre-lecture quiz Dis lesson cover basics of JavaScript, di language wey dey give interactivity for web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Make we start with variables and di data types wey dem dey carry! ## Variables Variables na di basic building blocks for programming. Like di labeled jars wey old alchemists for middle age use to store different tins, variables dey let you store information and give am name wey make sense so you fit use am later. You want remember person age? Store am for variable wey dem call age. You want track user name? Put am for variable wey dem call userName. We go focus on di modern way to create variables for JavaScript. Di ways wey you go learn here na beta practices and years wey language don take improve. To create and declare variable get dis syntax: [keyword] [name]. E get two parts: - Keyword. Use let for variables wey fit change, or const for values wey no gree change. - The variable name, dis na the descriptive name you go choose. ✅ Di keyword let come from ES6 and e give your variable so called _block scope_. Dem recommend say make you use let or const instead of di old var keyword. We go talk more about block scopes for later parts. ### Task - working with variables 1. Declare a variable. Make we start by creating our first variable: ```javascript let myVariable; ``` Wetin dis one dey do: - E tell JavaScript say make e create storage place wey dem call myVariable - JavaScript go allocate space for dis variable for memory - Di variable no get value yet (undefined) 2. Give am value. Now make we put somtin inside our variable: ```javascript myVariable = 123; ``` How assignment dey work: - Di = operator assign di value 123 to our variable - Di variable now get dis value, no be undefined again - You fit call dis value anywhere for your code using myVariable > Note: di use of = for dis lesson mean say we dey use "assignment operator", wey dem dey use put value for variable. E no mean equality. 3. Do am di smart way. Actually, make we combine di two steps: ```javascript let myVariable = 123; ``` Dis approach dey more efficient: - You dey declare variable and assign value inside one statement - Na standard practice wey developers dey use - E reduce length of code but still clear 4. Change your mind. Wetin if we want store another number? ```javascript myVariable = 321; ``` Understanding reassignment: - Di variable now get 321 instead of 123 - Di old value don commot – variables fit store only one value at once - Dis mutability na di main feature of variables wey dem declare with let ✅ Try am! You fit write JavaScript for your browser. Open browser window go Developer Tools. For console, you go see prompt; type let myVariable = 123, press enter, then type myVariable. Wetin go happen? Note say you go learn more about dis matter for lessons wey go follow. ### 🧠 Variables Mastery Check: Getting Comfortable Make we check how you dey understand variables: - You fit explain difference between declaring and assigning variable? - Wetin go happen if you try use variable before you declare am? - When you go choose let over const for variable? ## Constants Sometimes you need store information wey no suppose change at all while program dey run. Think of constants like mathematical rules Euclid establish for ancient Greece – once dem prove am and write am down, e no change again for future. Constants dey work almost like variables, but with big restriction: once you assign value, you no fit change am. Dis immutability dey prevent you from making mistake wey fit change important values inside your program. To declare and initialize constant get same idea like variable, but you go use const keyword. Constants dey usually declared with all uppercase letters. Wetin dis code dey do: - Create constant wey dem name MY_VARIABLE get value 123 - Use uppercase letters for constant names - No gree make anybody change dis value later Constants get two big rules: - You must assign dem value immediately – no empty constant dey allowed! - You no fit change dat value – JavaScript go throw error if you try. Make we see wetin I mean: Simple value - This one na NO NO: ```javascript const PI = 3; PI = 4; // no gree ``` Wet wey you must remember: - Try to reassign constant dey cause error - E protect important values from wrong change - E make sure di value remain same for whole your program Object reference protected - Dis one NO NO: ```javascript const obj = { a: 3 }; obj = { b: 5 } // no gree ``` Wetin dis mean: - E no gree make you replace whole object with new one - E protect di reference to original object - E maintain di object's identity inside memory Object value no protected - Dis one DEY ALLOW: ```javascript const obj = { a: 3 }; obj.a = 5; // e dey allowed ``` Wetin dey happen here: - E dey modify di property inside di object - E dey keep di same object reference - E show say object contents fit change even if reference no change > Note, const mean say di reference protect from reassignment. But di value no _immutable_ as e fit change, especially if na complex construct like object. ## Data Types JavaScript organize information into different groups wey we dey call data types. Dis concept like how old scholars classify knowledge – Aristotle separate types of reasoning, sabi say logical principles no fit work same way for poetry, mathematics, and natural philosophy. Data types matter because different operations dey work with different kind information. Like you no fit do number maths on person name, or arrange alphabet for mathematical formula, JavaScript need correct data type for each operation. To sabi dis go prevent errors and make your code better. Variables fit hold many different kind values like numbers and text. These different kinds na di data type. Data types matter for software development because e help developers decide how code suppose be written and how software suppose run. Some data types get special features wey dey help to transform or get extra info from value. ✅ Data Types still dey call JavaScript data primitives, because dem be di lowest-level data types wey language provide. E get 7 primitive data types: string, number, bigint, boolean, undefined, null, and symbol. Take small time make you imagine wetin each of these primitives fit mean. Wetin be zebra? How about 0? true? ### Numbers Numbers na di most straightforward data type for JavaScript. Whether you dey work with whole numbers like 42, decimals like 3.14, or negative numbers like -5, JavaScript treat dem all the same. Remember our variable from earlier? That 123 we put na number data type: Key characteristics: - JavaScript automatically sabi numeric values - You fit do mathematical operations with these variables - No need to tell type explicitly Variables fit hold all types number including decimals or negative numbers. Numbers fit also use with arithmetic operators, wey we go talk later for next section. ### Arithmetic Operators Arithmetic operators na operators wey let you do maths calculations for JavaScript. These operators follow same rules wey mathematicians don dey use for centuries – same symbols wey scholars like Al-Khwarizmi use for algebra. Operators dey work like normal maths: plus for add, minus for subtract and so on. E get plenty operators for arithmetic functions, some of dem be: ✅ Try am! Try do arithmetic operation for your browser console. Di result go shock you? ### 🧮 Math Skills Check: Calculating with Confidence Test your arithmetic skills: - Wetin be difference between / (division) and % (remainder)? - Can you predict wetin 10 % 3 go be? (Hint: e no be 3.33...) - Why remainder operator dey useful for programming? ### Strings For JavaScript, text data na strings. Di word "string" mean characters wey dem join one after another, like how scribes for old monasteries put letters together to form words and sentences. Strings na very important for web development. Every piece of text for website – usernames, buttons, error messages, content – all na string. To understand strings dey important if you want build functional user interfaces. Strings na set of characters wey dem put for single or double quotes. Understanding dis concepts: - Uses either single quotes ' or double quotes " to mark strings - Stores text data wey fit contain letters, numbers, symbols - Assigns string values to variables to use later - Need quotes to show say na text, no be variable name Remember to use quotes when you dey write string, otherwise JavaScript go think say na variable name. ### Formatting Strings String manipulation dey allow you join text, put variables inside text, and create dynamic content wey fit change as program dey run. Dis technique dey help you build text with code. Sometimes you need to join many strings together – dis process na concatenation. To join two or more strings together, or put dem join, use the + operator. Step by step, na wetin dey happen: - Join plenty strings together using the + operator - Put strings together straight without space for di first example - Add space characters " " between strings to make am easy to read - Put punctuation like commas to make correct formatting ✅ Why e be like say 1 + 1 = 2 for JavaScript, but '1' + '1' = 11? Think am. Wetin about '1' + 1? Template literals be another way to format strings, but e no dey use quotes, e dey use backtick. Anything wey no be plain text gats dey inside placeholders ${ }. Dis one include any variables wey fit be strings. Make we understand each part: - Use backticks ` `` instead of normal quotes to create template literals - Put variables directly using ${} placeholder syntax - Maintain spaces and formatting exactly like e write - Give better way to create complex strings with variables You fit do your formatting goals with any method, but template literals go respect all spaces and line breaks. ✅ When you go use template literal vs. plain string? ### 🔤 String Mastery Check: Text Manipulation Confidence Check how you sabi strings: - Fit explain why '1' + '1' be '11' no be 2? - Which string method you find juicy: concatenation or template literals? - Wetin fit happen if you forget put quotes around string? ### Booleans Booleans na di simplest kind data: dem fit only hold two values – true or false. Dis binary logic system na from George Boole, one mathematician wey dey 19th century wey create Boolean algebra. Even though dem simple, booleans dey important for program logic. Dem allow your code to make decision based on condition – whether person don log in, if button don click, or if condition don meet. Booleans fit only be two values: true or false. Dem fit help decide which lines of code suppose run when condition meet. For plenty cases, operators dey help set Boolean value and you go dey always see and write variables wey dem declare or their values don change with operator. For di above, we: - Create variable wey hold Boolean value true - Show how to store Boolean value false - Use correct keywords true and false (no need quotes) - Prepare these variables to use for conditional statements ✅ Variable fit be 'truthy' if e evaluate to boolean true. Interesting, for JavaScript, all values be truthy except wey dem define as falsy. ### 🎯 Boolean Logic Check: Decision Making Skills Test your boolean sense: - Why you think JavaScript get "truthy" and "falsy" values beyond true and false? - Fit guess which one be falsy: 0, "0", [], "false"? - How booleans fit help control how program dey flow? --- ## 📊 Your Data Types Toolkit Summary ## GitHub Copilot Agent Challenge 🚀 Use Agent mode complete this challenge: Description: Create personal information manager wey fit show all JavaScript data types you don learn for this lesson and handle real-world data scenarios. Prompt: Build JavaScript program wey go create user profile object get: person name (string), age (number), student status (boolean), favorite colors as array, plus address object with street, city, and zip code fields. Add functions to display profile info and update single fields. Make good use of string concatenation, template literals, arithmetic with age, plus boolean logic for student status. Learn more about agent mode here. ## 🚀 Challenge JavaScript get some behavior wey fit surprise programmers. One classic example be: try type this for your browser console: let age = 1; let Age = 2; age == Age and watch the result. E go return false – fit explain why? Dis one na one of many JavaScript behavior wey you suppose sabi well. When you understand these kind wahala, you go fit write better code and debug well. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Make you check this list of JavaScript exercises and try one. Wetin you learn? ## Assignment Data Types Practice ## 🚀 Your JavaScript Data Types Mastery Timeline ### ⚡ Wetyn You Fit Do for Next 5 Minutes - [ ] Open your browser console and create 3 variables with different data types - [ ] Try the challenge: let age = 1; let Age = 2; age == Age and find out why e false - [ ] Practice string concatenation with your name and favorite number - [ ] Test wetin happen when you add number to string ### 🎯 Wetyn You Fit Achieve This Hour - [ ] Complete post-lesson quiz and review any confusing thing - [ ] Create mini calculator wey add, subtract, multiply, and divide two numbers - [ ] Build simple name formatter using template literals - [ ] Check the difference between == and === comparison operators - [ ] Practice converting different data types from one to another ### 📅 Your Week-Long JavaScript Foundation - [ ] Complete assignment with confidence and creativity - [ ] Build personal profile object using all data types wey you don learn - [ ] Practice with JavaScript exercises from CSS-Tricks - [ ] Build simple form validator using boolean logic - [ ] Experiment with array and object data types (preview for coming lessons) - [ ] Join JavaScript community and ask questions about data types ### 🌟 Your Month-Long Transformation - [ ] Put data type knowledge inside bigger programming projects - [ ] Know when and why to use each data type for real apps - [ ] Help other beginners understand JavaScript fundamentals - [ ] Build small app wey manage different types of user data - [ ] Explore advanced data type concepts like type coercion and strict equality - [ ] Contribute to open source JavaScript projects with better documentation ### 🧠 Final Data Types Mastery Check-in Celebrate your JavaScript base: - Which data type surprise you pass concerning how e dey behave? - How you feel explaining variables vs. constants to your friend? - Wetin be the most interesting thing wey you find out about JavaScript type system? - Which real-world app you fit imagine to build using these fundamentals? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: Dis document na AI translation service Co-op Translator translate am. Even though we dey try make am correct, abeg sabi say automated translation fit get mistake or no too correct. Di original document wey dem write for dia own language na di correct one. If na serious matter, make you use professional human translation. We no go take responsibility if person nor understand well or if dem use this translation do wrong yawa. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

data

Methods and Functions

## Pre-Lecture Quiz Pre-lecture quiz Writa di same code plenti taem na one of di wahala we programmer dem dey face. Functions na im dey solve dis problem by make you fit bundle code inside plenti places wey you fit reuse am. Think of functions like di standardized parts wey Henry Ford first use for hin assembly line – once you create one reliable part, you fit use am anywhere without to build am from di beginning. Functions dey help you bundle pieces of code so that you fit reuse dem everywhere for your program. Instead to dey copy and paste di same logic anyhow, you fit create one function once and call am anytime you want. Dis style sabi keep your code clean and e go make am easy to update. For dis lesson, you go learn how to create your own functions, how to pass information enter dem, and how to get useful result back. You go sabi di difference between functions and methods, learn how to use modern syntax, and see how functions fit work with other functions dem. We go build all dis small small. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Functions Function na one self-contained block of code wey dey do specific task. E dey hold logic wey you fit run anytime you want. Instead make you dey write di same code many many times for your program, you fit pack am inside function and call di function anytime you need am. Dis style dey keep your code neat and e go make any update easier. Imagine say you get one logic wey spread all over your codebase for 20 places and you wan change am. Make you dey give your functions correct names and names weh mean something. Good name for function go make am clear wetin e do – when you see cancelTimer(), you sabi immediately wetin e mean, like button wey get clear label wey you sabi wetin e go do when you press am. ## How to create and call function Make we check how to create function. Di syntax dey: Make we break dis down: - Di function keyword dey tell JavaScript say "Hey, I dey create function!" - nameOfFunction na where you go put correct function name - Di parentheses () na where you fit put parameters (we go yarn about dat later) - Di curly braces {} hold di code wey go run once you call di function Make we create simple greeting function make you see am: Dis function dey print "Hello, world!" for console. Once you define am, you fit use am many times. To run (or "call") your function, write di name and follow am with parentheses. JavaScript fit allow you define your function before or after you call am – di JavaScript engine go handle am correct. When you run dis line, e go run all di code wey dey inside displayGreeting function, and go show "Hello, world!" for your browser console. You fit call dis function over and over. ### 🧠 Function Fundamentals Check: Building Your First Functions Make we test how you dey understand basic functions: - Why you dey use curly braces {} for function definition? - Wetin go happen if you write displayGreeting without parentheses? - Why you fit want call di same function many times? ### Function best practices Here na small tips to help you write better functions: - Give your functions clear and correct names – your future sef go thank you! - Use camelCasing for multi-word names (like calculateTotal not calculate_total) - Make sure each function dey focused on doing one thing well ## Passing information to function Our displayGreeting function no flexible – e just dey display "Hello, world!" for everybody. Parameters dey help make functions flexible and useful. Parameters na placeholders wey you fit put different values anytime you call di function. Dis one mean say di same function fit use different information anytime you call am. You dey put parameters inside di parentheses when you dey define function, and separate multiple parameters with commas: Each parameter na like placeholder – when person call your function, dem go give real values wey go enter these spots. Make we update our greeting function to carry person name inside: You fit see say we dey use backticks (` `) and ${}` to put name directly inside di message - dis na template literal, e sweet well well to build string with variables inside. Now when we call the function, we fit pass any name: JavaScript go carry di string 'Christopher', put am for name parameter, and create personalized message "Hello, Christopher!" ## Default values Wetin you go do if you want make some parameters optional? Na dis time default values help! Make we say you want make people fit choose greeting word, but if dem no put anything, you go use "Hello" as fallback. You fit set default values with equals sign like how you dey set variable: Here, name still be required, but salutation get backup value 'Hello' if person no provide other greeting. Now we fit call dis function two ways: For first call, JavaScript use default "Hello" because we no send salutation. For second call, e use our custom "Hi". Dis flexi make function fit different situation. ### 🎛️ Parameters Mastery Check: Making Functions Flexible Test your parameter sabi: - Wetin be difference between parameter and argument? - Why default values dey important for real-world programming? - Wetin you tink go happen if you pass more arguments than parameters? ## Return values So far, our functions just dey print messages to console, but wetin you go do if you want say function go calculate something and give you result back? Na here return values come. Instead to just display something, function fit give you value wey you fit save inside variable or use for other parts of your code. To send value back, use return keyword follow am with wetin you want return: One important thing be say: once function hit return, e go stop immediately and send dat value to di person wey call am. Make we change our greeting function to return message instead of printing am: Now, this function no longer print greeting, e just create message and give am back to us. To use di returned value, we fit hold am inside variable like any value: Now greetingMessage get "Hello, Christopher" and we fit use am anywhere for code – to show for web page, put for email, or pass am to another function. ### 🔄 Return Values Check: Getting Results Back Test how you understand return values: - Wetin happen to code wey dey after return inside function? - Why e better to return values than just to print to console? - Fit function return different type of values (string, number, boolean)? ## Functions as parameters for functions Functions fit pass as parameters to other functions. Even though e fit look hard at first, na powerful way to enable flexible programming. Dis pattern common when you want say "when sometin happen, do another tin." Like "when timer finish, run dis code" or "when user click button, call dis function." Make we see setTimeout wey be built-in function wey go wait small time then run code. We need tell am wetin to run – perfect case to pass function as parameter! Try dis code – after 3 seconds, you go see message: See as we pass displayDone (without parentheses) to setTimeout. We no dey call function ourselves – we just dey give am to setTimeout, tell am "call dis function after 3 seconds." ### Anonymous functions Sometimes you need function for one thing only and you no want give am name. Think am – if you dey use function only once, why you go put extra name for code? JavaScript allow you create anonymous functions – functions wey no get name, wey you fit define exactly where you need am. Here how we fit rewrite our timer example using anonymous function: Dis one do the same thing, but function dey defined inside setTimeout call, no need separate function declaration. ### Fat arrow functions Modern JavaScript get one shorter way to write function wey dem call arrow functions. Dem use => (wey look like arrow) and developers love am. Arrow functions let you skip function keyword and write shorter code. Here be our timer example with arrow function: Di () na where parameters fit go (empty here), then di arrow =>, then function body inside curly braces. Dis one dey do same thing but in shorter way. ### When to use each style When you suppose use each style? Rule of thumb: if you go use function many times, give am name and define am separately. If na for one special thing, use anonymous function. Both arrow functions and normal functions good, but arrow functions dey popular for modern code. ### 🎨 Function Styles Mastery Check: Choosing the Right Syntax Test your syntax sabi: - When you go prefer arrow functions pass traditional syntax? - Wetin be main advantage of anonymous functions? - Fit you give example where named function better than anonymous? --- ## 🚀 Challenge Fit talk wetin be difference between functions and methods inside one sentence? Try am! ## GitHub Copilot Agent Challenge 🚀 Use Agent mode do this challenge: Description: Create utility library of maths functions wey show different function concepts wey dem teach for dis lesson, including parameters, default values, return values, and arrow functions. Prompt: Create JavaScript file wey name mathUtils.js wey get these functions: 1. Function add wey get two parameters and return their sum 2. Function multiply wey get default parameter values (second default to 1) 3. Arrow function square wey take number and return square 4. Function calculate wey accept another function as parameter plus two numbers, then apply function to those numbers 5. Show how to call each function with correct test cases Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study E good to read small more about arrow functions as people dey use dem more for code. Practice write function, then rewrite am with dis syntax. ## Assignment Fun with Functions --- ## 🧰 Your JavaScript Functions Toolkit Summary --- ## 🚀 Your JavaScript Functions Mastery Timeline ### ⚡ Wetin You Fit Do for Next 5 Minutes - [ ] Write simple function wey go return your favorite number - [ ] Create function wey get two parameters wey go add dem together - [ ] Try convert traditional function to arrow function syntax - [ ] Practice di challenge: explain di difference between functions and methods ### 🎯 Wetin You Fit Achieve Dis Hour - [ ] Complete di post-lesson quiz and review any confusing tins - [ ] Build di math utilities library from di GitHub Copilot challenge - [ ] Create one function wey dey use another function as parameter - [ ] Practice to write functions with default parameters - [ ] Experiment with template literals for function return values ### 📅 Your Week-Long Function Mastery - [ ] Complete di "Fun with Functions" assignment wit creativity - [ ] Refactor some repetitive code wey you don write into reusable functions - [ ] Build small calculator wey only use functions (no global variables) - [ ] Practice arrow functions wit array methods like map() and filter() - [ ] Create collection of utility functions for common tasks - [ ] Study higher-order functions and functional programming concepts ### 🌟 Your Month-Long Transformation - [ ] Master advanced function concepts like closures and scope - [ ] Build project wey heavy use function composition - [ ] Contribute to open source by improving function documentation - [ ] Teach person else about functions and different syntax styles - [ ] Explore functional programming paradigms for JavaScript - [ ] Create personal library of reusable functions for future projects ### 🏆 Final Functions Champion Check-in Celebrate your function mastery: - Wetin be di most useful function wey you don create so far? - How learning about functions don change how you dey think about code organization? - Which function syntax you prefer and why? - Which real-world problem you go solve by writing function? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: Dis dokument don translate wit AI translation service wey dem call Co-op Translator. Even tho we dey try make am correct, abeg make you sabi say machine translation fit get some mistake or no be correct sotey. Di original dokument wey dem write for di language wey e come from na di main one wey get authority. If na serious matter, better make professional human translator help you do am. We no go responsible for any yawa or wrong understanding wey fit happen because of dis translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

function

Making Decisions

You don ever wonder how applications dey make correct decisions? Like how navigation system dey pick di fastest road, or how thermostat know when e go turn on heat? Na di koko idea of decision-making for programming be dis. Just like how Charles Babbage Analytical Engine design to follow different sequence of operations based on some conditions, modern JavaScript programs need to make choice based on varying condition dem. Dis ability to branch out and make decision na wetin dey turn static code to smart, responsive apps. For dis lesson, you go learn how to implement conditional logic for your programs. We go explore conditional statements, comparison operators, and logical expressions wey go allow your code check situation and respond well. ## Pre-Lecture Quiz Pre-lecture quiz Di ability to make decisions and control program flow na one important part of programming. Dis section go show how you fit control how your JavaScript program dey run using Boolean values and conditional logic. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## A Brief Recap on Booleans Before we start decision-making, make we remember Boolean values from our last lesson. Named after mathematician George Boole, dis values mean binary states – e fit be true or false. No wahala, no middle ground. Dis binary values na di foundation for all computational logic. Every decision your program make, at the end be Boolean evaluation. To create Boolean variables no too hard: Dis one create two variables wey get explicit Boolean values. ✅ Booleans get their name from English mathematician, philosopher and logician George Boole (1815–1864). ## Comparison Operators and Booleans For practice, you no go usually dey set Boolean values by hand. You go dey generate them by checking conditions: "Dis number bigger pass dat?" or "Dem two values be equal?" Comparison operators na wetin dey do dis checking. Dem dey compare values and return Boolean result based on how the two things relate. ✅ Try test your knowledge by writing some comparisons for your browser console. Any result go surprise you? ### 🧠 Comparison Mastery Check: Understanding Boolean Logic Test your sabi about comparison: - Why you think say === (strict equality) dey better pass == (loose equality)? - Wetin you think 5 === '5' go return? How about 5 == '5'? - Wetin be di difference between !== and !=? ## If Statement if statement na like to ask question for your code. "If dis condition true, then do dis tin." E dey important well well for making decisions for JavaScript. E dey work like dis: Di condition dey inside di parentheses, if e true, JavaScript go run di code wey dey inside di curly braces. If e false, e go just skip dat block. Normally you go dey use comparison operators to make these conditions. Make we see example wey dey real: Since 1000 >= 800 be true, code inside the block go run, and e go display "Getting a new laptop!" for console. ## If..Else Statement But if you want make your program do differently when condition be false? Na here else come play – e be like backup plan. else statement go allow you talk say "if dis condition no true, make e do dis other thing." Now since 500 >= 800 be false, JavaScript no run first block, e jump run else block instead. You go see "Can't afford a new laptop, yet!" for console. ✅ Test as you understand dis code and the next one by running for browser console. Change value of currentMoney and laptopPrice to see different console.log() result. ### 🎯 If-Else Logic Check: Branching Paths Check how you understand if-else logic: - Wetin go happen if currentMoney exactly equal laptopPrice? - You fit think of real life example where if-else logic go make sense? - How you for fit extend dis to handle multiple price ranges? ## Switch Statement Sometimes you need compare one value with many options. Though you fit chain many if..else, e fit get messy. switch statement dey give cleaner structure to handle multiple values. E dey like mechanical switches wey telephone exchange dem dey use – one input value go decide which path to take. Dis na how e dey structured: - JavaScript go check the expression once - E go check every case to find one wey match - Once e find one, e go run dat code block - break dey tell JavaScript to stop and leave switch - If no case match, e go run default block if you get am For dis example, JavaScript see say dayNumber na 2, e find case 2, set dayName to "Tuesday", then break from switch. Result be say "Today is Tuesday" go log for console. ✅ Test this code and next code by running inside browser console. Change variable a to change returned console.log(). ### 🔄 Switch Statement Mastery: Multiple Options Test your hearing about switch: - Wetin go happen if you forget break statement? - When you go use switch instead of many if-else? - Why default case dey important even if you feel you cover all options? ## Logical Operators and Booleans Complex decisions need make you check many conditions at once. Just like Boolean algebra dey help mathematicians combine logical expressions, programming dey give logical operators to join many Boolean conditions. Dis operators dey allow complex conditional logic by joining simple true/false checks. Dis operators let you join conditions as: - AND (&&) mean both conditions must be true - OR (||) mean at least one condition must be true - NOT (!) turn true to false (and vice versa) ## Conditions and Decisions with Logical Operators Make we see how logical operators work for real example: For dis example: we calculate 20% discount price (640), den check if our money fit pay either full price OR discounted price. Since 600 no reach discounted price 640, condition go be false. ### 🧮 Logical Operators Check: Combining Conditions Test how you sabi logical operators: - For A && B, wetin happen if A false? B dey check at all? - You fit think of situation where you go need all 3 (&&, ||, !) together? - Wetin be difference between !user.isActive and user.isActive !== true? ### Negation Operator Sometimes e easier to ask when something NO true. Instead of asking "User don inside?", you fit ask "User NO inside?" Di exclamation mark (!) operator dey flip logic. ! operator be like saying "the opposite of..." – if something be true, ! go make am false, and vice versa. ### Ternary Expressions For simple conditional assignments, JavaScript get ternary operator. Dis short syntax allow you write conditional expression one line. E dey useful when you wan assign either one of two values based on condition. E read like question: "Dis condition true? If yes, use this. If no, use that." Below nah more clear example: ✅ Take few minutes read dis code well. You understand how dem dey work? E talk say: "Is firstNumber bigger than secondNumber? If yes, put firstNumber inside biggestNumber. If no, put secondNumber." Ternary operator na short way to write this normal if..else statement: Both ways give same result. Ternary operator sharp and short while regular if-else fit dey easier to read especially for complex conditions. --- ## 🚀 Challenge Make you write program wey first use logical operators, then write am again with ternary expression. Which syntax you like pass? --- ## GitHub Copilot Agent Challenge 🚀 Use Agent mode to solve this challenge: Description: Make full grade calculator wey go show many decision-making tech wey we learn for dis lesson, including if-else, switch, logical operators, and ternary expressions. Prompt: Write JavaScript program wey take student numeric score (0-100) and determine their letter grade like dis: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Below 60 Requirements: 1. Use if-else statement to determine letter grade 2. Use logical operators to check if di student pass (grade >= 60) AND get honors (grade >= 90) 3. Use switch statement to give specific feedback for each letter grade 4. Use ternary operator to determine if di student fit enter next course (grade >= 70) 5. Include input validation to make sure say di score dey between 0 and 100 Test your program with different scores including edge cases like 59, 60, 89, 90, and invalid inputs. Learn more about agent mode here. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Read more about di many operators wey dey available to di user on MDN. Go through Josh Comeau's fine fine operator lookup! ## Assignment Operators --- ## 🧠 Your Decision-Making Toolkit Summary --- ## 🚀 Your JavaScript Decision-Making Mastery Timeline ### ⚡ Wetyn You Fit Do Inside Next 5 Minutes - [ ] Practice comparison operators for your browser console - [ ] Write simple if-else statement wey go check your age - [ ] Try di challenge: rewrite if-else using ternary operator - [ ] Test wetin dey happen with different "truthy" and "falsy" values ### 🎯 Wetyn You Fit Achieve Dis Hour - [ ] Complete di post-lesson quiz and check any part wey confuse you - [ ] Build di full grade calculator from di GitHub Copilot challenge - [ ] Create simple decision tree for real-world situation (like how to choose wetin to wear) - [ ] Practice to combine multiple conditions with logical operators - [ ] Experiment with switch statements for different use cases ### 📅 Your Week-Long Logic Mastery - [ ] Complete di operators assignment with creative examples - [ ] Build mini quiz app using different conditional structures - [ ] Create form validator wey go check many input conditions - [ ] Practice Josh Comeau's operator lookup exercises - [ ] Refactor your code make e use better conditional structures - [ ] Study short-circuit evaluation and performance implications ### 🌟 Your Month-Long Transformation - [ ] Master complex nested conditions and keep your code easy to read - [ ] Build application wey get sophisticated decision-making logic - [ ] Contribute to open source by improving conditional logic for existing projects - [ ] Teach person else about different conditional structures and when to use each one - [ ] Explore functional programming methods for conditional logic - [ ] Create personal reference guide for conditional best practices ### 🏆 Final Decision-Making Champion Check-in Celebrate your logical thinking mastery: - Wetin be di most complex decision logic wey you don fit implement? - Which conditional structure you feel dey most natural for you and why? - How learning about logical operators don change how you dey solve problems? - Which real-world application go benefit from sophisticated decision-making logic? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: Dis document na AI translation service Co-op Translator wey translate am. Even though we dey try make am correct, abeg no forget say automatic translation fit get mistake or no too correct. Di original document wey dey di main language na di correct one. If na serious matter, better make professional human translator do am. We no responsible if any misunderstanding or wrong meaning show because of dis translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Arrays and Loops

## Pre-Lecture Quiz Pre-lecture quiz You don ever wonder how websites dey keep track of the things wey dey for shopping cart or show your friend list? Na di Arrays and loops dey do dis kain work. Arrays be like digital container wey fit hold namba of tins inside, and loops make you fit work with all dis tins quick quick without to dey write same code anyhow. Together, these two concepts na di foundation for handling info inside your programs. You go learn how to comot for to dey write every step yourself reach to write smart code wey fit process hundreds or thousands of tins swift-quick. By di end of dis lesson, you go sabi how to do complex data work with just small lines of code. Make we explore these important programming ideas. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Make you reason arrays like digital filing cabinet - no be say only one paper for one drawer, but you fit put plenty related tins for one organized container. For programming, arrays dey help you store plenty info inside one organized box. Whether you dey build photo gallery, manage to-do list, or dey keep track of high scores for game, arrays na di foundation for organizing data. Make we see how dem dey work. ✅ Arrays dey everywhere! Fit reason one real-life example of array, like solar panel array? ### Creating Arrays To create array na easy work - just use square brackets! Wetin dey happen here? You don just create empty container using dem square brackets []. E be like empty shelf for library - e ready to hold any book wey you want put. You fit also fill your array with initial values from start: Cool tins to notice: - You fit store text, numbers, or even true/false inside same array - Just separate each tin with comma - e easy! - Arrays dey perfect to keep related tins together ### Array Indexing One tins wey fit surprise you for beginning be say: arrays dey number their tins start from 0, no be 1. Dis zero-based indexing na because how computer memory dey work - e don be programming rule since computer languages like C start. Each position inside array get im own address number wey dem dey call index. ✅ E surprise you say arrays start for zero index? For some programming languages, indexes start for 1. E get interesting history about dis, wey you fit read on Wikipedia. How to Access Array Elements: Wetin dey happen here: - Use square bracket notation plus index number to access elements - Return value wey dey for that position inside array - Start counting from 0, so first element get index 0 How to Modify Array Elements: For di example wey pass: - Change di element wey get index 4 from "Rocky Road" to "Butter Pecan" - Add new element "Cookie Dough" at index 5 - Extend array automatically when you add items pass current size ### Array Length and Common Methods Arrays get built-in properties and methods wey make work with data easy. How to Find Array Length: Key points: - Return total number of elements inside array - Update automatically when you add or remove elements - Give dynamic count wey fit help for loops and validation Important Array Methods: Wetin these methods dey do: - Add elements with push() (for end) and unshift() (for beginning) - Remove elements with pop() (for end) and shift() (for beginning) - Find elements with indexOf() and check if dey with includes() - Return useful values like removed elements or position indexes ✅ Try am yourself! Use your browser console to create and manipulate array wey you create. ### 🧠 Array Fundamentals Check: Organize Your Data Test your understanding of array: - Why you think say arrays dey start counting from 0, no be 1? - Wetin happen if you try to access index wey no dey (like arr[100] for array wey get 5 elements)? - Fit give three real-world examples where arrays go useful? ## Loops Think of the famous punishment from Charles Dickens' novels where students had to write lines repeatedly on a slate. Imagine if you fit just tell person say "write dis sentence 100 times" and e go do am automatically. Na dis loops dey do for your code. Loops be like tireless assistant wey fit repeat work without make mistake. Whether you want check all items wey dey inside shopping cart or show all pictures for album, loops fit repeat well well. JavaScript get plenty kinds of loops. Make we check each one and understand when to use am. ### For Loop The for loop be like to set timer - you sabi exactly how many times you want make tins happen. E dey organized and predictable, so e perfect if you dey work with arrays or you want count tins. For Loop Structure: Step by step, wetin dey happen: - Start counter variable i to 0 - Check i < 10 before every loop - Run di code block if condition true - Increment i by 1 after each loop with i++ - Stop when i reach 10 (condition no longer true) ✅ Run dis code for browser console. Wetin happen if you change counter, condition, or increment? Fit make am run backwards and make countdown? ### 🗓️ For Loop Mastery Check: Controlled Repetition Test your knowledge on for loop: - Wetin be the three parts of for loop and wetin each one dey do? - How you go loop through array backwards? - Wetin happen if you forget increment part (i++)? ### While Loop The while loop mean say "keep doing dis until..." - you no too sure how many times e go run, but you sabi when to stop. E dey perfect for tins like to dey ask user for input until dem give you the correct answer, or search data until you find wetin you dey find. While Loop Characteristics: - Keep running as long as condition true - You must manage counter yourself - Check condition before each iteration - Fit cause infinite loop if condition no ever become false Understanding examples: - Manage i counter inside loop yourself - Increment counter make e no run forever - Show practical example with user input and try limit - Include safety checks to prevent infinite loops ### ♾️ While Loop Wisdom Check: Condition-Based Repetition Test your understanding: - Wetin be main danger wey dey while loops? - When you go choose while loop instead of for loop? - How you fit stop infinite loops? ### Modern Loop Alternatives JavaScript get modern loop syntax wey go make your code clear and reduce mistakes. For...of Loop (ES6+): Advantages of for...of: - No need to manage index or worry about off-by-one errors - Directly access each array element - Make code easier to read and less complex forEach Method: What you need know about forEach: - Run function for each array element - Pass element value and index as arguments - No fit break early (unlike normal loops) - Return undefined (no create new array) ✅ Why you go choose for loop vs. while loop? 17K people for StackOverflow ask this question, and some opinions fit interest you. ### 🎨 Modern Loop Syntax Check: Gettin Used to ES6+ Check your modern JavaScript knowledge: - Wetin be advantages of for...of over traditional for loops? - When you fit still prefer traditional for loops? - Wetin be di difference between forEach and map? ## Loops and Arrays If you combine arrays and loops, you get powerful way to process data. This pairing important well well for plenty programming tasks, from showing lists to calculating statistics. Traditional Array Processing: Understand this approach: - Use array length to control loop limit - Access elements by index in normal for loops - Get element direct in for...of loops - Process each element exactly once Example for Data Processing: How this code dey work: - Start variables to keep sum and extreme values - Loop through each grade once efficiently - Add up total for average calculation - Keep track of highest and lowest grade while looping - Calculate final stats after loop finish ✅ Try to loop your own created array for browser console. --- ## GitHub Copilot Agent Challenge 🚀 Use Agent mode make you complete this challenge: Description: Build one correct function wey combine arrays and loops to analyze dataset and generate good insights. Prompt: Create function wey dey call analyzeGrades wey takes array of student grade objects (each get name and score properties) and returns object with stats like highest score, lowest score, average score, count of students wey pass (score >= 70), and array of student names wey score pass average. Use at least two different loop types for your solution. Learn more about agent mode here. ## 🚀 Challenge JavaScript get plenti modern array methods we fit take replace old-style loops for some kain tasks. Make you check forEach, for-of, map, filter, and reduce. Your challenge: Change the student grades example make e use at least three different array methods. You go see how the code go clean well and easy to read as you use modern JavaScript syntax. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Arrays for JavaScript get plenty methods wey dey attached to dem, wey sharp wella for data manipulation. Read up on these methods and try some of dem out (like push, pop, slice and splice) on an array wey you create yourself. ## Assignment Loop an Array --- ## 📊 Your Arrays & Loops Toolkit Summary --- ## 🚀 Your Arrays & Loops Mastery Timeline ### ⚡ What You Can Do in the Next 5 Minutes - [ ] Create array of your favorite movies and check specific elements - [ ] Write for loop wey go count from 1 reach 10 - [ ] Try the modern array methods challenge from the lesson - [ ] Practice array indexing for your browser console ### 🎯 What You Can Accomplish This Hour - [ ] Finish the post-lesson quiz and review any tricky palava - [ ] Build the full grade analyzer from the GitHub Copilot challenge - [ ] Make simple shopping cart wey go add and remove items - [ ] Practice changing between different loop types - [ ] Experiment with array methods like push, pop, slice, and splice ### 📅 Your Week-Long Data Processing Journey - [ ] Finish the "Loop an Array" assignment with creative upgrades - [ ] Build to-do list app wey use arrays and loops - [ ] Make simple statistics calculator for number data - [ ] Practice with MDN array methods - [ ] Build photo gallery or music playlist interface - [ ] Explore functional programming with map, filter, and reduce ### 🌟 Your Month-Long Transformation - [ ] Master advanced array operations and make dem fast - [ ] Build full data visualization dashboard - [ ] Join open source projects wey get data processing - [ ] Teach somebody about arrays and loops with real examples - [ ] Build personal library of reusable data processing functions - [ ] Explore algorithms and data structures wey dey based on arrays ### 🏆 Final Data Processing Champion Check-in Celebrate your array and loop mastery: - Wetin be the most useful array operation wey you don learn for real-world work? - Which kind loop you feel most natural for you and why? - How understanding arrays and loops don change how you dey arrange data? - Which complex data processing work you go like try next? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Disclaimer: Dis document na AI translation service Co-op Translator wey translate am. Even though we try make am correct, abeg sabi say machine translation fit get mistake or no too correct. The original document wey dey the main language na the correct one. If na serious matter, e good make human translator translate am. We no go carry any blame if person no understand or if e misinterpret anything wey come from dis translation. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

array,loop

Wprowadzenie do JavaScript

JavaScript to język internetu. W tych czterech lekcjach poznasz jego podstawy. ### Tematy 1. Zmienne i typy danych 2. Funkcje i metody 3. Podejmowanie decyzji w JavaScript 4. Tablice i pętle ### Autorzy Te lekcje zostały napisane z ♥️ przez Jasmine Greenaway, Christopher Harrison i Chris Noring Zastrzeżenie: Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż staramy się zapewnić dokładność, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.

javascript

Podstawy JavaScript: Typy danych

Typy danych to jedna z podstawowych koncepcji w JavaScript, z którą spotkasz się w każdym napisanym programie. Pomyśl o typach danych jak o systemie katalogowania używanym przez starożytnych bibliotekarzy w Aleksandrii – mieli oni określone miejsca na zwoje zawierające poezję, matematykę i zapisy historyczne. JavaScript organizuje informacje w podobny sposób, tworząc różne kategorie dla różnych rodzajów danych. W tej lekcji poznasz podstawowe typy danych, które umożliwiają działanie JavaScript. Nauczysz się, jak obsługiwać liczby, tekst, wartości prawda/fałsz i zrozumiesz, dlaczego wybór właściwego typu jest kluczowy dla twoich programów. Te koncepcje mogą na początku wydawać się abstrakcyjne, ale z praktyką staną się naturalne. Zrozumienie typów danych sprawi, że wszystko inne w JavaScript stanie się dużo jaśniejsze. Tak jak architekci muszą znać różne materiały budowlane przed zbudowaniem katedry, te podstawy będą wspierać wszystko, co zbudujesz w przyszłości. ## Quiz przed wykładem Pre-lecture quiz Ta lekcja obejmuje podstawy JavaScript, języka, który zapewnia interaktywność w sieci. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Zacznijmy od zmiennych i typów danych, które je wypełniają! ## Zmienne Zmienne są podstawowymi elementami programowania. Podobnie jak oznakowane słoiki, których średniowieczni alchemicy używali do przechowywania różnych substancji, zmienne pozwalają przechowywać informacje i nadać im opisową nazwę, aby można było do nich odwołać się później. Potrzebujesz zapamiętać wiek kogoś? Przechowaj go w zmiennej o nazwie age. Chcesz śledzić nazwę użytkownika? Przechowaj ją w zmiennej userName. Skupimy się na nowoczesnym podejściu do tworzenia zmiennych w JavaScript. Techniki, które tutaj poznasz, odzwierciedlają lata rozwoju języka i najlepsze praktyki wypracowane przez społeczność programistyczną. Tworzenie i deklarowanie zmiennej ma następującą składnię [keyword] [name]. Składa się z dwóch części: - Słowo kluczowe. Użyj let dla zmiennych, które mogą się zmieniać, lub const dla wartości, które pozostają niezmienne. - Nazwa zmiennej, jest to opisowa nazwa wybrana przez ciebie. ✅ Słowo kluczowe let zostało wprowadzone w ES6 i nadaje zmiennej tzw. _zakres blokowy_. Zaleca się używanie let lub const zamiast starszego słowa var. W kolejnych częściach omówimy zakresy blokowe bardziej szczegółowo. ### Zadanie - praca ze zmiennymi 1. Zadeklaruj zmienną. Zacznijmy od utworzenia naszej pierwszej zmiennej: ```javascript let myVariable; ``` Co to osiąga: - Informuje JavaScript, aby utworzył miejsce na dane o nazwie myVariable - JavaScript przydziela miejsce w pamięci dla tej zmiennej - Zmienna obecnie nie ma wartości (undefined) 2. Nadaj jej wartość. Teraz wstawmy coś do zmiennej: ```javascript myVariable = 123; ``` Jak działa przypisanie: - Operator = przypisuje wartość 123 do zmiennej - Zmienna teraz zawiera tę wartość, a nie jest undefined - Możesz odwoływać się do tej wartości w kodzie używając myVariable > Uwaga: w tej lekcji użycie = oznacza "operator przypisania", który służy do ustawienia wartości zmiennej. Nie oznacza on równości. 3. Zrób to sprytniej. Właściwie połączmy te dwa kroki: ```javascript let myVariable = 123; ``` To podejście jest bardziej efektywne: - Deklarujesz zmienną i przypisujesz jej wartość w jednym poleceniu - Jest to standardowa praktyka programistów - Skraca kod, zachowując przejrzystość 4. Zmiana zdania. Co jeśli chcemy przechować inną liczbę? ```javascript myVariable = 321; ``` Zrozumienie ponownego przypisania: - Zmienna teraz zawiera 321 zamiast 123 - Poprzednia wartość zostaje zastąpiona – zmienne przechowują tylko jedną wartość na raz - Ta zmienność jest kluczową cechą zmiennych zadeklarowanych przez let ✅ Wypróbuj sam! Możesz pisać JavaScript bezpośrednio w przeglądarce. Otwórz narzędzia deweloperskie i przejdź do konsoli. Wpisz let myVariable = 123, naciśnij Enter, a następnie wpisz myVariable. Co się stanie? Więcej o tych koncepcjach dowiesz się w kolejnych lekcjach. ### 🧠 Sprawdzenie umiejętności ze zmiennymi: Oswajanie tematu Zobaczmy, jak sobie radzisz ze zmiennymi: - Czy potrafisz wyjaśnić różnicę między deklarowaniem a przypisywaniem zmiennej? - Co się stanie, jeśli spróbujesz użyć zmiennej przed jej deklaracją? - Kiedy warto wybrać let zamiast const dla zmiennej? ## Stałe Czasami trzeba przechowywać informacje, które nigdy nie powinny się zmieniać podczas działania programu. Pomysł na stałe przypomina zasady matematyczne, które Euklides ustanowił w starożytnej Grecji – raz dowiedzione i udokumentowane, pozostały niezmienne na zawsze. Stałe działają podobnie jak zmienne, ale mają ważne ograniczenie: po przypisaniu wartości nie można jej zmienić. Ta niezmienność pomaga zapobiec przypadkowym modyfikacjom istotnych wartości w programie. Deklaracja i inicjalizacja stałej wykorzystuje te same zasady co zmienna, z wyjątkiem słowa kluczowego const. Nazwy stałych zwykle są pisane wielkimi literami. Co robi ten kod: - Tworzy stałą o nazwie MY_VARIABLE z wartością 123 - Używa konwencji nazw wielkimi literami dla stałych - Uniemożliwia przyszłe zmiany tej wartości Stałe mają dwie główne zasady: - Musisz od razu nadać im wartość – nie można tworzyć pustych stałych! - Nigdy nie możesz zmieniać tej wartości – JavaScript zgłosi błąd, jeśli spróbujesz. Zobaczmy, co to oznacza: Prosta wartość - Następujące jest NIE DOZWOLONE: ```javascript const PI = 3; PI = 4; // niedozwolone ``` Co należy zapamiętać: - Próby ponownego przypisania stałej spowodują błąd - Chroni ważne wartości przed przypadkowymi zmianami - Zapewnia, że wartość pozostaje spójna przez cały program Referencja obiektu jest chroniona - Następujące jest NIE DOZWOLONE: ```javascript const obj = { a: 3 }; obj = { b: 5 } // niedozwolone ``` Zrozumienie tych zasad: - Zapobiega zastąpieniu całego obiektu nowym - Chroni referencję do oryginalnego obiektu - Utrzymuje tożsamość obiektu w pamięci Wartość obiektu nie jest chroniona - Następujące JEST dozwolone: ```javascript const obj = { a: 3 }; obj.a = 5; // dozwolone ``` Co się tutaj dzieje: - Modyfikuje wartość właściwości w obiekcie - Zachowuje tę samą referencję obiektu - Pokazuje, że zawartość obiektu może się zmieniać, choć referencja pozostaje stała > Pamiętaj, const oznacza, że referencja jest chroniona przed ponownym przypisaniem. Wartość nie jest _niezmienna_ i może się zmieniać, zwłaszcza jeśli jest to złożona struktura jak obiekt. ## Typy danych JavaScript organizuje informacje w różne kategorie, zwane typami danych. Koncepcja ta odzwierciedla sposób, w jaki starożytni uczeni kategoryzowali wiedzę – Arystoteles rozróżniał różne typy rozumowania, wiedząc, że zasady logiki nie mogą być stosowane jednolicie do poezji, matematyki i filozofii przyrody. Typy danych są ważne, ponieważ różne operacje wymagają różnych rodzajów informacji. Podobnie jak nie można wykonywać działań arytmetycznych na imieniu osoby czy uporządkować matematycznego równania alfabetycznie, JavaScript wymaga odpowiedniego typu danych dla każdej operacji. Zrozumienie tego zapobiega błędom i czyni twój kod bardziej niezawodnym. Zmienne mogą przechowywać wiele różnych typów wartości, jak liczby czy tekst. Te różne typy wartości nazywane są typem danych. Typy danych są ważną częścią tworzenia oprogramowania, ponieważ pomagają programistom podejmować decyzje, jak kod powinien być napisany i jak oprogramowanie ma działać. Ponadto niektóre typy danych mają unikalne cechy pomagające przekształcać lub wydobywać dodatkowe informacje z wartości. ✅ Typy danych nazywane są również prymitywami języka JavaScript, ponieważ są to podstawowe, najniższego poziomu typy dostarczane przez język. Istnieje 7 prymitywnych typów danych: string, number, bigint, boolean, undefined, null i symbol. Poświęć chwilę, aby wyobrazić sobie, co każdy z tych prymitywów może reprezentować. Czym jest zebra? A 0? true? ### Liczby Liczby to najprostszy typ danych w JavaScript. Niezależnie od tego, czy pracujesz z liczbami całkowitymi jak 42, liczbami dziesiętnymi jak 3.14, czy liczbami ujemnymi jak -5, JavaScript traktuje je jednolicie. Pamiętasz zmienną z poprzednich przykładów? Ta 123, którą zapamiętaliśmy, to właściwie typ danych liczbowych: Kluczowe cechy: - JavaScript automatycznie rozpoznaje wartości liczbowe - Możesz wykonywać operacje matematyczne na tych zmiennych - Nie jest wymagana jawna deklaracja typu Zmienne mogą przechowywać wszystkie typy liczb, wliczając liczby dziesiętne czy ujemne. Liczby mogą być także używane z operatorami arytmetycznymi, które omówimy w kolejnym rozdziale. ### Operatory arytmetyczne Operatory arytmetyczne pozwalają wykonywać obliczenia matematyczne w JavaScript. Działają one według tych samych zasad, których używali matematycy przez wieki – tych samych symboli, jakie pojawiały się w dziełach uczonych takich jak Al-Khwarizmi, który rozwinął notację algebraiczną. Operatory działają tak, jak można się spodziewać po tradycyjnej matematyce: plus do dodawania, minus do odejmowania i tak dalej. Istnieje kilka typów operatorów używanych do wykonywania funkcji arytmetycznych, niektóre z nich to: ✅ Wypróbuj! Spróbuj wykonać operację arytmetyczną w konsoli przeglądarki. Czy wyniki cię zaskoczyły? ### 🧮 Sprawdzenie umiejętności matematycznych: Liczenie z pewnością Przetestuj swoją wiedzę o arytmetyce: - Jaka jest różnica między / (dzielenie) a % (reszta z dzielenia)? - Czy możesz przewidzieć, ile wynosi 10 % 3? (Podpowiedź: to nie 3.33...) - Dlaczego operator reszty może być przydatny w programowaniu? ### Łańcuchy tekstowe (Strings) W JavaScript dane tekstowe reprezentowane są jako łańcuchy znaków (strings). Termin „string” pochodzi od koncepcji znaków połączonych w sekwencję, podobnie jak skrybowie w średniowiecznych klasztorach łączyli litery w słowa i zdania w swoich rękopisach. Łańcuchy znaków są podstawą tworzenia stron internetowych. Każdy fragment tekstu wyświetlany na stronie – nazwy użytkowników, podpisy przycisków, komunikaty o błędach, treści – jest obsługiwany jako dane typu string. Zrozumienie łańcuchów jest niezbędne do tworzenia funkcjonalnych interfejsów użytkownika. Łańcuchy to zestaw znaków znajdujących się między pojedynczymi lub podwójnymi cudzysłowami. Co warto wiedzieć: - Do definiowania łańcuchów używa się pojedynczych ' lub podwójnych " cudzysłowów - Przechowują dane tekstowe, które mogą zawierać litery, liczby i symbole - Przypisuje się je do zmiennych, aby można było ich potem używać - Wymagają cudzysłowów, by odróżnić tekst od nazw zmiennych Pamiętaj o używaniu cudzysłowów przy zapisie łańcuchów, w przeciwnym razie JavaScript założy, że jest to nazwa zmiennej. ### Formatowanie łańcuchów Manipulacja łańcuchami pozwala łączyć tekst, włączać zmienne i tworzyć dynamiczne treści reagujące na stan programu. Ta technika umożliwia tworzenie tekstu programowo. Często potrzebujesz połączyć kilka łańcuchów razem – ten proces nazywa się konkatenacją. Aby łączyć dwa lub więcej łańcuchów znaków, lub scalić je razem, użyj operatora +. Krok po kroku, oto co się dzieje: - Łączy wiele łańcuchów znaków za pomocą operatora + - Scala łańcuchy bezpośrednio razem bez spacji w pierwszym przykładzie - Dodaje znaki spacji " " między łańcuchami dla czytelności - Wstawia znaki interpunkcyjne, takie jak przecinki, aby utworzyć właściwe formatowanie ✅ Dlaczego 1 + 1 = 2 w JavaScript, ale '1' + '1' = 11? Pomyśl o tym. A co z '1' + 1? Szablonowe literały to inny sposób formatowania łańcuchów, z tą różnicą, że zamiast cudzysłowu używa się tyldy odwrotnej (backtick). Wszystko, co nie jest zwykłym tekstem, musi być umieszczone wewnątrz nawiasów ${ }. Obejmuje to wszelkie zmienne, które mogą być łańcuchami znaków. Zrozummy każdą część: - Używa tyld odwrotnych ` `` zamiast zwykłych cudzysłowów do tworzenia literałów szablonowych - Wstawia zmienne bezpośrednio za pomocą składni ${} - Zachowuje spacje i formatowanie dokładnie takie, jakie zostało napisane - Zapewnia czytelniejszy sposób tworzenia złożonych łańcuchów znaków ze zmiennymi Możesz osiągnąć swoje cele formatowania obydwoma metodami, ale literały szablonowe zachowują wszystkie spacje i łamanie linii. ✅ Kiedy używałbyś literału szablonowego zamiast zwykłego łańcucha znaków? ### 🔤 Sprawdzenie mistrzostwa łańcuchów: Pewność manipulacji tekstem Oceń swoje umiejętności pracy z łańcuchami: - Czy potrafisz wyjaśnić, dlaczego '1' + '1' daje '11' zamiast 2? - Która metoda łańcucha jest dla Ciebie bardziej czytelna: konkatenacja czy literały szablonowe? - Co się stanie, jeśli zapomnisz cudzysłowów wokół łańcucha? ### Booleany Booleany reprezentują najprostszy rodzaj danych: mogą przyjmować tylko jedną z dwóch wartości – true lub false. Ten binarny system logiczny jest wywiedziony z prac George'a Boole'a, matematyka XIX wieku, który opracował algebrę Boole'a. Pomimo swojej prostoty booleany są niezbędne dla logiki programu. Umożliwiają Twojemu kodowi podejmowanie decyzji na podstawie warunków – na przykład, czy użytkownik jest zalogowany, czy kliknięto przycisk, albo czy spełnione są określone kryteria. Booleany mogą mieć tylko dwie wartości: true lub false. Pomagają podejmować decyzje o tym, które fragmenty kodu powinny się wykonać, gdy dane warunki zostaną spełnione. W wielu przypadkach operatory pomagają ustawić wartość Boolean i często zauważysz, że zmienne są inicjowane lub ich wartości aktualizowane za pomocą operatorów. Powyżej: - Utworzyliśmy zmienną przechowującą wartość Boolean true - Pokażemy, jak przechowywać wartość Boolean false - Użyliśmy dokładnych słów kluczowych true i false (nie wymagają cudzysłowów) - Przygotowaliśmy te zmienne do użycia w instrukcjach warunkowych ✅ Zmienna jest uważana za 'truthy', jeśli ocenia się na wartość Boolean true. Co ciekawe, w JavaScript wszystkie wartości są truthy, chyba że zdefiniowane jako falsy. ### 🎯 Sprawdzenie logiki Boolean: Umiejętność podejmowania decyzji Przetestuj swoją wiedzę o booleanach: - Dlaczego, Twoim zdaniem, JavaScript ma wartości „truthy” i „falsy” oprócz zwykłych true i false? - Czy potrafisz przewidzieć, która z wartości jest falsy: 0, "0", [], "false"? - W jaki sposób booleany mogą być użyteczne w kontrolowaniu przepływu programu? --- ## 📊 Podsumowanie Twojego zestawu typów danych ## Wyzwanie GitHub Copilot Agent 🚀 Użyj trybu Agenta, aby wykonać następujące wyzwanie: Opis: Stwórz menedżera informacji osobistych, który demonstruje wszystkie typy danych JavaScript, których nauczyłeś się na tej lekcji, obsługując przy tym realne scenariusze danych. Polecenie: Zbuduj program JavaScript, który tworzy obiekt profilu użytkownika zawierający: imię i nazwisko (string), wiek (number), status studenta (boolean), ulubione kolory jako tablicę oraz obiekt adresu z właściwościami ulica, miasto i kod pocztowy. Dodaj funkcje do wyświetlania informacji z profilu oraz aktualizacji poszczególnych pól. Pokaż zastosowanie konkatenacji łańcuchów, literałów szablonowych, operacji arytmetycznych na wieku oraz logiki boolean dla statusu studenta. Dowiedz się więcej o trybie agenta tutaj. ## 🚀 Wyzwanie JavaScript ma pewne zachowania, które mogą zaskoczyć programistów. Oto klasyczny przykład do eksploracji: spróbuj wpisać to w konsoli przeglądarki: let age = 1; let Age = 2; age == Age i obserwuj wynik. Zwraca false – czy potrafisz wyjaśnić dlaczego? To jedno z wielu zachowań JavaScript, które warto zrozumieć. Znajomość tych niuansów pomoże Ci pisać bardziej niezawodny kod i skuteczniej debugować problemy. ## Quiz po wykładzie Quiz po wykładzie ## Powtórka i samodzielna nauka Spójrz na listę ćwiczeń JavaScript i spróbuj jednego. Czego się nauczyłeś? ## Zadanie Praktyka z typami danych ## 🚀 Twoja oś czasu opanowania typów danych w JavaScript ### ⚡ Co możesz zrobić w ciągu następnych 5 minut - [ ] Otwórz konsolę przeglądarki i utwórz 3 zmienne o różnych typach danych - [ ] Spróbuj wyzwania: let age = 1; let Age = 2; age == Age i zrozum, dlaczego wynik jest false - [ ] Poćwicz konkatenację łańcuchów ze swoim imieniem i ulubioną liczbą - [ ] Sprawdź, co się stanie, gdy dodasz liczbę do łańcucha znaków ### 🎯 Co możesz osiągnąć w ciągu tej godziny - [ ] Wypełnij quiz po lekcji i przejrzyj wszelkie niejasne koncepcje - [ ] Stwórz mini kalkulator dodający, odejmujący, mnożący i dzielący dwie liczby - [ ] Zbuduj prosty formatownik imion używając literałów szablonowych - [ ] Zbadaj różnice między operatorami porównania == i === - [ ] Ćwicz konwersję między różnymi typami danych ### 📅 Twoja tygodniowa podstawa JavaScript - [ ] Wykonaj zadanie z pewnością i kreatywnością - [ ] Stwórz obiekt profilu osobistego używając wszystkich poznanych typów danych - [ ] Ćwicz z ćwiczeniami JavaScript od CSS-Tricks - [ ] Zbuduj prosty walidator formularza używając logiki boolean - [ ] Eksperymentuj z typami danych tablic i obiektów (zapowiedź nadchodzących lekcji) - [ ] Dołącz do społeczności JavaScript i zadawaj pytania dotyczące typów danych ### 🌟 Twoja miesięczna transformacja - [ ] Włącz wiedzę o typach danych do większych projektów programistycznych - [ ] Zrozum, kiedy i dlaczego używać każdego typu danych w rzeczywistych aplikacjach - [ ] Pomagaj innym początkującym zrozumieć podstawy JavaScript - [ ] Zbuduj małą aplikację zarządzającą różnymi typami danych użytkownika - [ ] Zbadaj zaawansowane koncepcje typów danych, takie jak koercja typów i ścisła równość - [ ] Wspieraj projekty open source JavaScript, poprawiając dokumentację ### 🧠 Ostateczne sprawdzenie mistrzostwa typów danych Świętuj swoje fundamenty JavaScript: - Który typ danych najbardziej Cię zaskoczył pod względem zachowania? - Jak komfortowo czujesz się wyjaśniając zmienne vs. stałe znajomemu? - Jaka najciekawsza rzecz odkryłeś o systemie typów JavaScript? - Jaką rzeczywistą aplikację wyobrażasz sobie zbudować z wykorzystaniem tych podstaw? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Zastrzeżenie: Niniejszy dokument został przetłumaczony przy użyciu usługi tłumaczenia AI Co-op Translator. Choć dążymy do jak największej dokładności, prosimy mieć na uwadze, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym powinien być traktowany jako źródło wiążące. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Podstawy JavaScript: Metody i funkcje

## Quiz przed wykładem Quiz przed wykładem Pisanie tego samego kodu wielokrotnie to jedna z najczęstszych frustracji programowania. Funkcje rozwiązują ten problem, pozwalając zapakować kod w wielokrotnego użytku bloki. Pomyśl o funkcjach jak o standardowych częściach, które uczyniły linię montażową Henry’ego Forda rewolucyjną – gdy stworzysz niezawodny komponent, możesz go używać wszędzie tam, gdzie potrzebujesz, bez konieczności tworzenia od nowa. Funkcje pozwalają zgrupować kawałki kodu, abyś mógł korzystać z nich w całym swoim programie. Zamiast kopiować i wklejać tę samą logikę wszędzie, możesz stworzyć funkcję raz i wywołać ją kiedy tylko trzeba. To podejście utrzymuje twój kod uporządkowany i znacznie ułatwia aktualizacje. W tej lekcji nauczysz się, jak tworzyć własne funkcje, przekazywać im informacje i otrzymywać przydatne wyniki. Odkryjesz różnicę pomiędzy funkcjami a metodami, poznasz nowoczesne składnie i zobaczysz, jak funkcje mogą współpracować z innymi funkcjami. Będziemy budować te pojęcia krok po kroku. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metody i funkcje") ## Funkcje Funkcja to samodzielny blok kodu, który wykonuje określone zadanie. Enkapsuluje logikę, którą możesz wywołać w dowolnym momencie. Zamiast pisać ten sam kod wiele razy w programie, możesz zapakować go w funkcję i wywoływać ją, kiedy potrzebujesz. To podejście utrzymuje twój kod czysty i ułatwia aktualizacje. Wyobraź sobie wyzwanie utrzymania, gdybyś musiał zmienić logikę rozproszoną w 20 różnych miejscach w bazie kodu. Nadawanie funkcjom opisowych nazw jest kluczowe. Dobrze nazwana funkcja jasno komunikuje swój cel – gdy widzisz cancelTimer(), od razu rozumiesz, co robi, tak jak wyraźnie oznaczony przycisk mówi ci dokładnie, co się stanie po kliknięciu. ## Tworzenie i wywoływanie funkcji Przyjrzyjmy się, jak stworzyć funkcję. Składnia ma spójny wzór: Rozbijmy to na części: - Słowo kluczowe function mówi JavaScriptowi „Hej, tworzę funkcję!” - nameOfFunction to miejsce, gdzie nadajesz funkcji opisową nazwę - Nawiasy () to miejsce na parametry (wkrótce o tym opowiemy) - Nawiasy klamrowe {} zawierają kod, który wykonuje się, gdy wywołasz funkcję Stwórzmy prostą funkcję powitania, aby zobaczyć to w praktyce: Ta funkcja wypisuje „Hello, world!” w konsoli. Po jej zdefiniowaniu możesz jej używać tyle razy, ile potrzebujesz. Aby wykonać (czyli „wywołać”) funkcję, napisz jej nazwę, a potem nawiasy. JavaScript pozwala na definicję funkcji przed lub po jej wywołaniu – silnik JavaScript zajmie się kolejnością wykonania. Kiedy uruchomisz tę linię, wykona cały kod znajdujący się w funkcji displayGreeting, wyświetlając „Hello, world!” w konsoli przeglądarki. Możesz wywoływać tę funkcję wielokrotnie. ### 🧠 Podstawy funkcji: Budowanie pierwszych funkcji Sprawdźmy twoją wiedzę na temat podstawowych funkcji: - Dlaczego używamy nawiasów klamrowych {} w definicjach funkcji? - Co się stanie, jeśli napiszesz displayGreeting bez nawiasów? - Dlaczego możesz chcieć wywołać tę samą funkcję wielokrotnie? ### Najlepsze praktyki dla funkcji Oto kilka wskazówek, które pomogą ci pisać świetne funkcje: - Nadaj funkcjom jasne, opisowe nazwy – twoja przyszła ja powie ci dzięki! - Stosuj camelCase dla wielowyrazowych nazw (np. calculateTotal zamiast calculate_total) - Każda funkcja powinna skupiać się na wykonywaniu jednej rzeczy dobrze ## Przekazywanie informacji do funkcji Nasza funkcja displayGreeting jest ograniczona – zawsze wyświetla „Hello, world!”. Parametry pozwalają uczynić funkcje bardziej elastycznymi i użytecznymi. Parametry działają jak miejsca zastępcze, do których możesz wstawić różne wartości za każdym razem, gdy używasz funkcji. Dzięki temu ta sama funkcja może pracować z różnymi informacjami przy każdym wywołaniu. Parametry wypisujesz w nawiasach przy definiowaniu funkcji, oddzielając je przecinkami: Każdy parametr działa jak symbol zastępczy – gdy ktoś wywoła twoją funkcję, poda faktyczne wartości, które zostaną tam „wstawione”. Zaktualizujmy funkcję powitania, aby przyjmowała czyjeś imię: Zauważ, że używamy backticków (` `) oraz ${}`, aby wstawić imię bezpośrednio do wiadomości – to nazywa się literałem szablonowym i jest bardzo wygodnym sposobem łączenia tekstu z zmiennymi. Teraz, gdy wywołamy funkcję, możemy podać dowolne imię: JavaScript przyjmuje ciąg znaków 'Christopher', przypisuje go do parametru name i tworzy spersonalizowaną wiadomość „Hello, Christopher!” ## Wartości domyślne A co jeśli chcemy, by niektóre parametry były opcjonalne? W tym pomagają wartości domyślne! Załóżmy, że chcemy umożliwić ludziom personalizację słowa powitania, ale jeśli nie podadzą żadnego, używamy domyślnie „Hello”. Możesz ustawić wartości domyślne, używając znaku równości, tak jak przy przypisywaniu zmiennej: Tu name jest nadal wymagane, ale salutation ma zapasową wartość 'Hello', jeśli nikt nie poda innego powitania. Teraz możemy wywołać tę funkcję na dwa sposoby: W pierwszym wywołaniu JavaScript używa domyślnego „Hello”, ponieważ nie określiliśmy powitania. W drugim używa naszego spersonalizowanego „Hi”. Ta elastyczność sprawia, że funkcje są dopasowane do różnych sytuacji. ### 🎛️ Sprawdzenie umiejętności parametrów: Uczynienie funkcji elastycznymi Przetestuj swoją wiedzę o parametrach: - Jaka jest różnica między parametrem a argumentem? - Dlaczego wartości domyślne są przydatne w rzeczywistym programowaniu? - Czy przewidzisz, co się stanie, jeśli podasz więcej argumentów niż parametrów? ## Wartości zwracane Dotychczas nasze funkcje tylko wypisywały komunikaty w konsoli, ale co jeśli chcesz, aby funkcja wykonała obliczenia i zwróciła wynik? W tym pomagają wartości zwracane. Zamiast tylko wyświetlać coś, funkcja może zwrócić wartość, którą możesz przechować w zmiennej lub użyć w innych miejscach kodu. Aby zwrócić wartość, używasz słowa kluczowego return, po którym podajesz, co chcesz zwrócić: Ważne: gdy funkcja napotka instrukcję return, natychmiast przestaje działać i zwraca tę wartość temu, kto ją wywołał. Zmodyfikujmy naszą funkcję powitania, aby zwracała komunikat zamiast go wypisywać: Teraz zamiast wypisywać powitanie, funkcja tworzy wiadomość i ją zwraca. Aby użyć zwróconej wartości, możemy ją zapisać do zmiennej jak każdą inną wartość: Teraz greetingMessage zawiera „Hello, Christopher” i możemy jej używać w dowolnym miejscu w kodzie – pokazać na stronie, wysłać w mailu lub przekazać do innej funkcji. ### 🔄 Sprawdzian wartości zwracanych: Otrzymywanie wyników Oceń swoją wiedzę o zwracaniu wartości: - Co się dzieje z kodem po instrukcji return wewnątrz funkcji? - Dlaczego zwracanie wartości często jest lepsze niż samo wypisanie w konsoli? - Czy funkcja może zwracać różne typy wartości (string, liczba, boolean)? ## Funkcje jako parametry funkcji Funkcje mogą być przekazywane jako parametry do innych funkcji. Choć ten koncept może się wydawać na początku skomplikowany, jest to potężna cecha umożliwiająca elastyczne wzorce programistyczne. Ten wzorzec jest bardzo powszechny, gdy chcesz powiedzieć „gdy coś się stanie, wykonaj coś innego.” Na przykład: „gdy timer się zakończy, wykonaj ten kod” lub „gdy użytkownik kliknie przycisk, wywołaj tę funkcję”. Spójrzmy na setTimeout, który jest wbudowaną funkcją, która czeka określony czas i potem wykonuje jakiś kod. Musimy powiedzieć, co ma wykonać – idealny przykład przekazania funkcji! Wypróbuj ten kod – po 3 sekundach zobaczysz komunikat: Zauważ, że przekazujemy displayDone (bez nawiasów) do setTimeout. Nie wywołujemy funkcji samodzielnie – przekazujemy ją do setTimeout i mówimy „wywołaj to za 3 sekundy”. ### Funkcje anonimowe Czasami potrzebujesz funkcji do tylko jednego zadania i nie chcesz nadawać jej nazwy. Pomyśl o tym – jeśli używasz funkcji tylko raz, po co zagracać kod dodatkową nazwą? JavaScript pozwala tworzyć funkcje anonimowe – funkcje bez nazw, które możesz zdefiniować bezpośrednio tam, gdzie ich potrzebujesz. Oto jak możemy przepisać nasz przykład z timerem, używając funkcji anonimowej: To osiąga ten sam efekt, ale funkcja jest definiowana bezpośrednio w wywołaniu setTimeout, eliminując potrzebę osobnej deklaracji funkcji. ### Funkcje strzałkowe (arrow functions) Nowoczesny JavaScript ma jeszcze krótszy sposób pisania funkcji zwany funkcjami strzałkowymi. Używają => (wygląda jak strzałka – stąd nazwa) i są bardzo popularne wśród programistów. Funkcje strzałkowe pozwalają pominąć słowo kluczowe function i pisać bardziej zwięzły kod. Oto nasz przykładowy timer z funkcją strzałkową: () to miejsce na parametry (tutaj puste), potem jest strzałka =>, a na końcu ciało funkcji w nawiasach klamrowych. To zapewnia tę samą funkcjonalność, ale z bardziej zwięzłą składnią. ### Kiedy używać której strategii Kiedy stosować które podejście? Praktyczna zasada: jeśli będziesz używać funkcji wielokrotnie, nadaj jej nazwę i zdefiniuj osobno. Jeśli to jedno konkretne użycie, rozważ funkcję anonimową. Zarówno funkcje strzałkowe, jak i tradycyjne są poprawne, choć funkcje strzałkowe dominują w nowoczesnym kodzie JavaScript. ### 🎨 Sprawdzenie stylów funkcji: Wybór właściwej składni Przetestuj swoją wiedzę o składni: - Kiedy możesz preferować funkcje strzałkowe zamiast tradycyjnych? - Jaka jest główna zaleta funkcji anonimowych? - Czy potrafisz wymyślić sytuację, w której funkcja nazwana jest lepsza niż anonimowa? --- ## 🚀 Wyzwanie Potrafisz w jednym zdaniu wyjaśnić różnicę między funkcjami a metodami? Spróbuj! ## Wyzwanie GitHub Copilot Agent 🚀 Użyj trybu Agenta, aby wykonać następujące zadanie: Opis: Stwórz bibliotekę narzędzi matematycznych demonstrującą różne koncepcje funkcji przedstawione w tej lekcji, w tym parametry, wartości domyślne, wartości zwracane i funkcje strzałkowe. Zadanie: Utwórz plik JavaScript mathUtils.js zawierający następujące funkcje: 1. Funkcję add przyjmującą dwa parametry i zwracającą ich sumę 2. Funkcję multiply z domyślnymi wartościami parametrów (drugi parametr domyślnie 1) 3. Funkcję strzałkową square, która przyjmuje liczbę i zwraca jej kwadrat 4. Funkcję calculate, która przyjmuje inną funkcję jako parametr oraz dwie liczby, a następnie stosuje tę funkcję do tych liczb 5. Pokaż wywołania każdej funkcji z odpowiednimi testowymi przypadkami Dowiedz się więcej o trybie agenta tutaj. ## Quiz po wykładzie Quiz po wykładzie ## Przegląd i samodzielna nauka Warto przeczytać więcej o funkcjach strzałkowych, ponieważ są coraz częściej stosowane w bazach kodu. Ćwicz pisanie funkcji, a następnie przepisywanie ich z użyciem tej składni. ## Zadanie domowe Zabawy z funkcjami --- ## 🧰 Podsumowanie toolkit'u funkcji JavaScript --- ## 🚀 Twoja oś czasu opanowania funkcji JavaScript ### ⚡ Co potrafisz zrobić w ciągu następnych 5 minut - [ ] Napisać prostą funkcję zwracającą twoją ulubioną liczbę - [ ] Stworzyć funkcję z dwoma parametrami, która dodaje je razem - [ ] Spróbuj przekształcić tradycyjną funkcję na składnię funkcji strzałkowej - [ ] Ćwicz wyzwanie: wyjaśnij różnicę między funkcjami a metodami ### 🎯 Co możesz osiągnąć w tę godzinę - [ ] Ukończ quiz po lekcji i przejrzyj wszelkie niezrozumiałe koncepcje - [ ] Zbuduj bibliotekę narzędzi matematycznych z wyzwania GitHub Copilot - [ ] Stwórz funkcję, która używa innej funkcji jako parametru - [ ] Ćwicz pisanie funkcji z domyślnymi parametrami - [ ] Eksperymentuj z literałami szablonowymi w wartościach zwracanych przez funkcje ### 📅 Twój tygodniowy plan mistrzostwa w funkcjach - [ ] Ukończ zadanie „Zabawa z funkcjami” z kreatywnością - [ ] Przepisz powtarzający się kod, który napisałeś, na funkcje wielokrotnego użytku - [ ] Zbuduj mały kalkulator używając tylko funkcji (bez zmiennych globalnych) - [ ] Ćwicz funkcje strzałkowe z metodami tablicowymi takimi jak map() i filter() - [ ] Stwórz zestaw funkcji narzędziowych do powszechnych zadań - [ ] Studiuj funkcje wyższego rzędu i koncepcje programowania funkcyjnego ### 🌟 Twoja miesięczna transformacja - [ ] Opanuj zaawansowane koncepcje funkcji, takie jak domknięcia i zakresy - [ ] Zbuduj projekt intensywnie wykorzystujący składanie funkcji - [ ] Wnieś wkład do projektów open source poprzez ulepszenie dokumentacji funkcji - [ ] Naucz kogoś innego o funkcjach i różnych stylach składni - [ ] Eksploruj paradygmaty programowania funkcyjnego w JavaScript - [ ] Stwórz osobistą bibliotekę funkcji wielokrotnego użytku do przyszłych projektów ### 🏆 Końcowy test mistrza funkcji Świętuj swoje mistrzostwo w funkcjach: - Jaka jest najbardziej przydatna funkcja, jaką do tej pory stworzyłeś? - Jak nauka o funkcjach zmieniła twoje podejście do organizacji kodu? - Którą składnię funkcji preferujesz i dlaczego? - Jaki problem z rzeczywistego świata rozwiązałbyś pisząc funkcję? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Zastrzeżenie: Niniejszy dokument został przetłumaczony przy użyciu usługi tłumaczenia AI Co-op Translator. Pomimo naszych starań, aby zapewnić dokładność, prosimy mieć na uwadze, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym należy uznać za dokument nadrzędny. W przypadku istotnych informacji zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Podstawy JavaScript: Podejmowanie decyzji

Czy kiedykolwiek zastanawiałeś się, jak aplikacje podejmują inteligentne decyzje? Na przykład jak system nawigacji wybiera najszybszą trasę lub jak termostat decyduje, kiedy włączyć ogrzewanie? To jest podstawowa koncepcja podejmowania decyzji w programowaniu. Podobnie jak Analyticzna Maszyna Charlesa Babbage’a została zaprojektowana do wykonywania różnych sekwencji operacji w zależności od warunków, nowoczesne programy JavaScript muszą podejmować wybory w oparciu o zmienne okoliczności. Ta zdolność rozgałęziania i podejmowania decyzji to właśnie to, co przekształca statyczny kod w responsywne, inteligentne aplikacje. W tej lekcji nauczysz się, jak wdrażać logikę warunkową w swoich programach. Przeanalizujemy instrukcje warunkowe, operatory porównania i wyrażenia logiczne, które pozwalają Twojemu kodowi oceniać sytuacje i odpowiednio na nie reagować. ## Quiz przed wykładem Quiz przed wykładem Umiejętność podejmowania decyzji i kontrolowania przepływu programu jest fundamentalnym aspektem programowania. W tej sekcji omówimy, jak kontrolować ścieżkę wykonania programów JavaScript przy użyciu wartości Boolean i logiki warunkowej. [](https://youtube.com/watch?v=SxTp8j-fMMY "Podejmowanie decyzji") ## Krótkie przypomnienie o wartościach Boolean Zanim zanurzymy się w podejmowanie decyzji, przypomnijmy sobie wartości Boolean z poprzedniej lekcji. Nazwane na cześć matematyka George’a Boole’a, te wartości reprezentują stany binarne – albo true, albo false. Nie ma tu niejasności ani stanów pośrednich. Te wartości binarne stanowią podstawę całej logiki obliczeniowej. Każda decyzja w twoim programie ostatecznie sprowadza się do oceny Boolean. Tworzenie zmiennych Boolean jest proste: To tworzy dwie zmienne z wyraźnymi wartościami Boolean. ✅ Boole są nazwane na cześć angielskiego matematyka, filozofa i logika George’a Boole’a (1815–1864). ## Operatory porównania i wartości Boolean W praktyce rzadko ustawiasz wartości Boolean ręcznie. Zamiast tego generujesz je poprzez ocenę warunków: "Czy ta liczba jest większa od tamtej?" albo "Czy te wartości są równe?" Operatory porównania umożliwiają takie oceny. Porównują wartości i zwracają wyniki Boolean w zależności od relacji między operandami. ✅ Sprawdź swoją wiedzę, wpisując porównania w konsoli przeglądarki. Czy któryś z wyników Cię zaskoczył? ### 🧠 Sprawdzenie opanowania porównania: Rozumienie logiki Boolean Przetestuj swoje rozumienie porównań: - Dlaczego uważasz, że === (ścisła równość) jest zazwyczaj preferowane nad == (luźna równość)? - Czy potrafisz przewidzieć, co zwróci 5 === '5'? A 5 == '5'? - Jaka jest różnica między !== a !=? ## Instrukcja If Instrukcja if to jak zadanie pytania w Twoim kodzie. „Jeśli ten warunek jest prawdziwy, wykonaj tę czynność.” To prawdopodobnie najważniejsze narzędzie do podejmowania decyzji w JavaScript. Oto jak działa: Warunek umieszcza się w nawiasach, a jeśli jest true, JavaScript wykonuje kod we wnętrzu nawiasów klamrowych. Jeśli jest false, JavaScript po prostu pomija ten blok. Często użyjesz operatorów porównania, aby tworzyć te warunki. Zobaczmy praktyczny przykład: Ponieważ 1000 >= 800 ocenia się na true, kod wewnątrz bloku zostaje wykonany, wyświetlając „Getting a new laptop!” w konsoli. ## Instrukcja If..Else A co, jeśli chcesz, aby program robił coś innego, gdy warunek jest fałszywy? Tu wkracza else – to jak plan awaryjny. Instrukcja else pozwala powiedzieć „jeśli ten warunek nie jest prawdziwy, wykonaj zamiast tego coś innego.” Ponieważ 500 >= 800 jest false, JavaScript pomija pierwszy blok i wykonuje blok else. W konsoli zobaczysz „Can't afford a new laptop, yet!”. ✅ Przetestuj swoje zrozumienie tego kodu i poniższego, uruchamiając je w konsoli przeglądarki. Zmień wartości zmiennych currentMoney i laptopPrice, aby zmienić wynikowe console.log(). ### 🎯 Sprawdzenie logiki If-Else: Rozgałęzione ścieżki Oceń swoje zrozumienie logiki warunkowej: - Co się stanie, jeśli currentMoney będzie dokładnie równe laptopPrice? - Czy potrafisz wymyślić realistyczny scenariusz, gdzie logika if-else byłaby użyteczna? - Jak możesz rozszerzyć to, aby obsłużyć wiele zakresów cen? ## Instrukcja Switch Czasem musisz porównać jedną wartość z wieloma opcjami. Można to zrobić łańcuchując wiele instrukcji if..else, ale staje się to nieczytelne. Instrukcja switch daje czytelniejszą strukturę do obsługi wielu konkretnych wartości. Koncepcja przypomina mechaniczne systemy przełączające używane w dawnych centralach telefonicznych – jedna wartość wejściowa decyduje, którą konkretną ścieżkę wykonanie podąża. Oto jak jest zbudowana: - JavaScript ocenia wyrażenie tylko raz - Przeszukuje każdy case, aby znaleźć dopasowanie - Gdy znajdzie dopasowanie, wykonuje ten blok kodu - break mówi JavaScript, aby przerwał i opuścił switch - Jeśli żaden przypadek nie pasuje, wykonuje blok default (jeśli jest) W tym przykładzie JavaScript widzi, że dayNumber to 2, znajduje odpowiadający case 2, ustawia dayName na „Tuesday” i wychodzi z instrukcji switch. Efekt? „Today is Tuesday” zostaje wyświetlone w konsoli. ✅ Przetestuj swoje zrozumienie tego i poniższego kodu, uruchamiając w konsoli przeglądarki. Zmień wartość zmiennej a, aby zmienić wynikowe console.log(). ### 🔄 Opanowanie instrukcji Switch: Wiele opcji Sprawdź swoje zrozumienie switch: - Co się stanie, jeśli zapomnisz instrukcję break? - Kiedy użyłbyś switch zamiast wielu instrukcji if-else? - Dlaczego przypadek default jest użyteczny, nawet jeśli uważasz, że uwzględniłeś wszystkie możliwości? ## Operatory logiczne i Boole Złożone decyzje często wymagają oceny wielu warunków jednocześnie. Podobnie jak algebra Boole’a pozwala łączyć wyrażenia logiczne, programowanie dostarcza operatorów logicznych do łączenia wielu warunków Boolean. Te operatory umożliwiają zaawansowaną logikę warunkową przez łączenie prostych ocen prawdy/fałszu. Te operatory pozwalają łączyć warunki w użyteczny sposób: - AND (&&) oznacza, że oba warunki muszą być prawdziwe - OR (||) oznacza, że przynajmniej jeden warunek musi być prawdziwy - NOT (!) zmienia prawdę na fałsz (i odwrotnie) ## Warunki i decyzje z operatorami logicznymi Zobaczmy te operatory w akcji na bardziej realistycznym przykładzie: W tym przykładzie: obliczamy cenę po 20% rabacie (640), a następnie oceniamy, czy dostępne środki pokrywają pełną cenę LUB cenę po rabacie. Ponieważ 600 nie osiąga progu 640, warunek ocenia się jako false. ### 🧮 Sprawdzenie operatorów logicznych: Łączenie warunków Przetestuj swoje rozumienie operatorów logicznych: - W wyrażeniu A && B, co się stanie, jeśli A jest fałszywe? Czy B jest wtedy oceniane? - Czy potrafisz wymyślić sytuację, w której potrzebujesz wszystkich trzech operatorów (&&, ||, !) razem? - Jaka jest różnica między !user.isActive a user.isActive !== true? ### Operator negacji Czasem łatwiej jest pomyśleć o tym, kiedy coś NIE jest prawdziwe. Zamiast pytać „Czy użytkownik jest zalogowany?”, możesz zapytać „Czy użytkownik NIE jest zalogowany?” Operator wykrzyknika (!) odwraca logikę za Ciebie. Operator ! to jak powiedzenie „przeciwnie do…” – jeśli coś jest true, ! zmienia to na false i odwrotnie. ### Wyrażenia warunkowe (ternarne) Dla prostych przypisań warunkowych JavaScript oferuje operator ternarny. Ta zwięzła składnia pozwala napisać wyrażenie warunkowe w jednej linii, co jest przydatne, gdy trzeba przypisać jedną z dwóch wartości na podstawie warunku. Czyta się to jak pytanie: „Czy ten warunek jest prawdziwy? Jeśli tak, użyj tej wartości. Jeśli nie, użyj tamtej wartości.” Poniżej bardziej konkretny przykład: ✅ Poświęć chwilę, aby przeczytać ten kod kilka razy. Czy rozumiesz, jak działają te operatory? Ta linia mówi: „Czy firstNumber jest większa od secondNumber? Jeśli tak, wpisz firstNumber do biggestNumber. Jeśli nie, wpisz secondNumber do biggestNumber.” Operator ternarny to po prostu krótszy sposób zapisu tradycyjnej instrukcji if..else: Oba podejścia dają identyczne efekty. Operator ternarny oferuje zwięzłość, natomiast tradycyjna struktura if-else może być bardziej czytelna przy złożonych warunkach. --- ## 🚀 Wyzwanie Utwórz program, który najpierw napiszesz używając operatorów logicznych, a następnie przepiszesz go z użyciem wyrażenia ternarnego. Która składnia jest dla Ciebie wygodniejsza? --- ## Wyzwanie z Agentem GitHub Copilot 🚀 Użyj trybu Agenta, aby wykonać następujące zadanie: Opis: Stwórz kompleksowy kalkulator ocen, który demonstruje kilka koncepcji podejmowania decyzji z tej lekcji, włączając instrukcje if-else, switch, operatory logiczne i wyrażenia ternarne. Polecenie: Napisz program w JavaScript, który przyjmuje numeryczną ocenę ucznia (0–100) i określa ocenę literową według następujących kryteriów: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Poniżej 60 Wymagania: 1. Użyj instrukcji if-else, aby określić ocenę literową 2. Użyj operatorów logicznych, aby sprawdzić, czy uczeń zdaje (ocena >= 60) ORAZ ma wyróżnienie (ocena >= 90) 3. Użyj instrukcji switch, aby zapewnić konkretną informację zwrotną dla każdej oceny literowej 4. Użyj operatora warunkowego (ternary operator), aby określić, czy uczeń kwalifikuje się do następnego kursu (ocena >= 70) 5. Uwzględnij walidację danych wejściowych, aby zapewnić, że wynik mieści się w zakresie od 0 do 100 Przetestuj swój program na różnych wynikach, w tym na przypadkach brzegowych, takich jak 59, 60, 89, 90 oraz na nieprawidłowych danych wejściowych. Dowiedz się więcej o trybie agenta tutaj. ## Quiz po wykładzie Quiz po wykładzie ## Przegląd i samodzielna nauka Przeczytaj więcej o wielu dostępnych operatorach na MDN. Przejrzyj wspaniały przegląd operatorów autorstwa Josha Comeau! ## Zadanie Operatory --- ## 🧠 Podsumowanie Twojego zestawu narzędzi do podejmowania decyzji --- ## 🚀 Twój harmonogram mistrzostwa w podejmowaniu decyzji w JavaScript ### ⚡ Co możesz zrobić w ciągu następnych 5 minut - [ ] Ćwicz operatory porównania w konsoli przeglądarki - [ ] Napisz prostą instrukcję if-else, która sprawdzi Twój wiek - [ ] Spróbuj wyzwania: przepisać instrukcję if-else, używając operatora warunkowego - [ ] Przetestuj, co się dzieje z różnymi wartościami "truthy" i "falsy" ### 🎯 Co możesz osiągnąć w ciągu tej godziny - [ ] Wykonaj quiz po lekcji i przejrzyj wszelkie niejasne koncepcje - [ ] Zbuduj kompleksowy kalkulator ocen z wyzwania GitHub Copilot - [ ] Stwórz prostą drzewo decyzyjne dla rzeczywistego scenariusza (np. wybór ubrań) - [ ] Ćwicz łączenie wielu warunków za pomocą operatorów logicznych - [ ] Eksperymentuj z instrukcjami switch dla różnych zastosowań ### 📅 Twoje tygodniowe mistrzostwo w logice - [ ] Wykonaj zadanie dotyczące operatorów, używając kreatywnych przykładów - [ ] Zbuduj mini aplikację quizową z różnymi strukturami warunkowymi - [ ] Stwórz walidator formularza, który sprawdza wiele warunków wejściowych - [ ] Ćwicz zadania Josha Comeau z przeglądu operatorów - [ ] Refaktoryzuj istniejący kod, stosując bardziej odpowiednie struktury warunkowe - [ ] Studiuj ocenę krótkiego spięcia (short-circuit evaluation) i jej wpływ na wydajność ### 🌟 Twoja miesięczna transformacja - [ ] Opanuj złożone zagnieżdżone warunki zachowując czytelność kodu - [ ] Zbuduj aplikację z zaawansowaną logiką podejmowania decyzji - [ ] Wnieś wkład do projektów open source, ulepszając logikę warunkową istniejących projektów - [ ] Nauczaj innych różnych struktur warunkowych i kiedy każdą stosować - [ ] Zgłębiaj podejścia funkcyjne do logiki warunkowej - [ ] Stwórz osobisty przewodnik po najlepszych praktykach warunkowych ### 🏆 Finałowa kontrola mistrza podejmowania decyzji Świętuj swoje mistrzostwo w logicznym myśleniu: - Jaka jest najtrudniejsza logika decyzyjna, którą udało Ci się zaimplementować? - Która struktura warunkowa jest dla Ciebie najbardziej naturalna i dlaczego? - Jak nauka o operatorach logicznych zmieniła Twoje podejście do rozwiązywania problemów? - Jaka rzeczywista aplikacja mogłaby skorzystać z zaawansowanej logiki decyzyjnej? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Zastrzeżenie: Dokument ten został przetłumaczony za pomocą usługi tłumaczeń AI Co-op Translator. Choć staramy się zapewnić dokładność, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym powinien być uznawany za źródło autorytatywne. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Tablice i Pętle

## Quiz przed wykładem Quiz przed wykładem Zastanawiałeś się kiedyś, jak strony internetowe śledzą przedmioty w koszyku lub wyświetlają listę znajomych? Tutaj z pomocą przychodzą tablice i pętle. Tablice są jak cyfrowe pojemniki, które przechowują wiele informacji, podczas gdy pętle pozwalają na efektywną pracę z tymi danymi bez powtarzania kodu. Razem te dwa pojęcia stanowią fundament obsługi informacji w twoich programach. Nauczysz się przechodzić od ręcznego pisania każdego kroku do tworzenia inteligentnego, wydajnego kodu, który potrafi szybko przetworzyć setki, a nawet tysiące elementów. Na koniec tej lekcji zrozumiesz, jak wykonywać złożone zadania związane z danymi za pomocą zaledwie kilku linii kodu. Poznajmy te niezbędne koncepcje programowania. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Tablice Pomyśl o tablicach jak o cyfrowej szafce z segregatorami – zamiast przechowywać jeden dokument na szufladę, możesz uporządkować wiele powiązanych elementów w jednej, zorganizowanej przestrzeni. W terminologii programistycznej tablice pozwalają przechowywać wiele informacji w jednym uporządkowanym pakiecie. Niezależnie czy budujesz galerię zdjęć, zarządzasz listą zadań do zrobienia czy śledzisz najlepsze wyniki w grze, tablice stanowią fundament organizacji danych. Zobaczmy, jak to działa. ✅ Tablice są wszędzie wokół nas! Czy potrafisz podać przykład tablicy w rzeczywistości, np. paneli słonecznych? ### Tworzenie tablic Tworzenie tablicy jest bardzo proste – wystarczy użyć nawiasów kwadratowych! Co się tu dzieje? Właśnie utworzyłeś pusty pojemnik, używając nawiasów []. Można to porównać do pustej półki w bibliotece – jest gotowa, aby pomieścić dowolne książki, które tam ulożysz. Możesz także wypełnić tablicę wartościami początkowymi od razu: Ciekawe rzeczy do zauważenia: - Możesz przechowywać tekst, liczby, a nawet wartości true/false w tej samej tablicy - Wystarczy oddzielić każdy element przecinkiem – proste! - Tablice są idealne do trzymania powiązanych informacji razem ### Indeksowanie tablic Oto coś, co może wydać się na początku nietypowe: tablice numerują swoje elementy od 0, a nie od 1. Indeksowanie oparte na zerze wywodzi się z działania pamięci komputerowej – jest to konwencja programistyczna od początków języków takich jak C. Każde miejsce w tablicy ma przypisany własny numer zwany indeksem. ✅ Czy zaskakuje Cię, że tablice zaczynają się od indeksu zero? W niektórych językach programowania indeksy zaczynają się od 1. Istnieje ciekawa historia dotycząca tego, którą możesz przeczytać na Wikipedii. Dostęp do elementów tablicy: Rozkład tego, co się dzieje: - Używa notacji z nawiasami kwadratowymi i numerem indeksu, aby uzyskać elementy - Zwraca wartość przechowywaną na tej konkretnej pozycji w tablicy - Zaczyna liczyć od 0, więc pierwszy element ma indeks 0 Modyfikacja elementów tablicy: W powyższym przykładzie: - Zmodyfikowano element o indeksie 4 z "Rocky Road" na "Butter Pecan" - Dodano nowy element "Cookie Dough" pod indeksem 5 - Rozszerzono automatycznie długość tablicy, gdy dodano element poza obecne granice ### Długość tablicy i powszechne metody Tablice mają wbudowane właściwości i metody, które znacznie ułatwiają pracę z danymi. Znajdowanie długości tablicy: Najważniejsze punkty do zapamiętania: - Zwraca całkowitą liczbę elementów w tablicy - Aktualizuje się automatycznie, gdy elementy są dodawane lub usuwane - Dostarcza dynamiczną wartość przydatną w pętlach i walidacji Podstawowe metody tablic: Warto zrozumieć te metody: - Dodaje elementy za pomocą push() (na koniec) i unshift() (na początek) - Usuwa elementy za pomocą pop() (z końca) i shift() (z początku) - Znajduje elementy za pomocą indexOf() i sprawdza istnienie przez includes() - Zwraca przydatne wartości, takie jak usunięte elementy lub indeksy pozycji ✅ Spróbuj sam! Użyj konsoli przeglądarki, aby stworzyć i manipulować własną tablicą. ### 🧠 Sprawdzenie podstaw tablic: Organizowanie twoich danych Sprawdź swoją wiedzę o tablicach: - Dlaczego tablice zaczynają liczyć od 0, a nie od 1? - Co się stanie, jeśli spróbujesz dostać się do indeksu, który nie istnieje (np. arr[100] w tablicy z 5 elementami)? - Czy potrafisz wymyślić trzy sytuacje z życia codziennego, gdzie tablice byłyby użyteczne? ## Pętle Pomyśl o znanym karze ze starych powieści Charlesa Dickensa, gdzie uczniowie musieli wielokrotnie przepisywać zdania na tabliczce. Wyobraź sobie, że mógłbyś po prostu polecić komuś „napisz to zdanie 100 razy” i zostało by to wykonane automatycznie. Właśnie to robią pętle w twoim kodzie. Pętle są jak niestrudzony asystent, który może powtarzać zadania bez błędów. Niezależnie czy musisz sprawdzić każdy element w koszyku zakupowym, czy wyświetlić wszystkie zdjęcia w albumie, pętle robią to efektywnie i bez powtórzeń. JavaScript oferuje kilka typów pętli do wyboru. Przyjrzyjmy się każdemu z nich i zrozummy, kiedy ich używać. ### Pętla For Pętla for jest jak ustawianie timera – wiesz dokładnie, ile razy coś ma się wydarzyć. Jest bardzo uporządkowana i przewidywalna, co sprawia, że jest idealna, gdy pracujesz z tablicami lub potrzebujesz liczyć elementy. Struktura pętli for: Krok po kroku, co się dzieje: - Inicjalizuje zmienną licznik i na 0 na początku - Sprawdza warunek i < 10 przed każdą iteracją - Wykonuje blok kodu, gdy warunek jest prawdziwy - Zwiększa i o 1 po każdej iteracji za pomocą i++ - Zatrzymuje się, gdy warunek stanie się fałszywy (gdy i osiągnie 10) ✅ Uruchom ten kod w konsoli przeglądarki. Co się stanie, gdy wprowadzisz małe zmiany w liczniku, warunku lub wyrażeniu iteracji? Czy potrafisz sprawić, by działał wstecz, tworząc odliczanie? ### 🗓️ Sprawdzenie mistrzostwa pętli for: Kontrolowane powtarzanie Oceń swoje zrozumienie pętli for: - Jakie są trzy części pętli for i do czego służy każda z nich? - Jak byś iterował tablicę wstecz? - Co się stanie, jeśli zapomnisz o inkrementacji (i++)? ### Pętla While Pętla while jest jak mówienie „rób to, dopóki…” – możesz nie znać dokładnej liczby iteracji, ale wiesz, kiedy trzeba przestać. Idealnie nadaje się do sytuacji takich jak pytanie użytkownika o dane, dopóki nie poda poprawnej odpowiedzi, lub przeszukiwanie danych, aż znajdziesz to, czego szukasz. Cechy pętli while: - Kontynuuje wykonywanie, dopóki warunek jest prawdziwy - Wymaga ręcznego zarządzania zmiennymi liczników - Sprawdza warunek przed każdą iteracją - Grozi niekończącą się pętlą, jeśli warunek nigdy nie stanie się fałszywy Zrozumienie tych przykładów: - Zarządza zmienną licznik i ręcznie wewnątrz ciała pętli - Zwiększa licznik by zapobiec nieskończonej pętli - Pokazuje praktyczne użycie z wprowadzaniem danych od użytkownika i ograniczeniem prób - Zawiera mechanizmy bezpieczeństwa, by uniknąć nieskończonego wykonywania ### ♾️ Sprawdzenie mądrości pętli while: Powtarzanie oparte na warunku Sprawdź swoją wiedzę o pętli while: - Jakie jest główne zagrożenie podczas używania pętli while? - Kiedy wybrałbyś pętlę while zamiast for? - Jak zapobiec nieskończonym pętlom? ### Nowoczesne alternatywy dla pętli JavaScript oferuje nowoczesną składnię pętli, która może uczynić twój kod bardziej czytelnym i mniej podatnym na błędy. Pętla For...of (ES6+): Kluczowe zalety for...of: - Eliminuje zarządzanie indeksami i potencjalne błędy "off-by-one" - Zapewnia bezpośredni dostęp do elementów tablicy - Poprawia czytelność kodu i zmniejsza złożoność składniową Metoda forEach: Co warto wiedzieć o forEach: - Wykonuje funkcję dla każdego elementu tablicy - Dostarcza zarówno wartość elementu, jak i jego indeks jako parametry - Nie można przerwać wcześniej (w przeciwieństwie do tradycyjnych pętli) - Zwraca undefined (nie tworzy nowej tablicy) ✅ Dlaczego wybrałbyś pętlę for zamiast while? 17 tysięcy użytkowników StackOverflow zadało to pytanie, a niektóre opinie mogą być dla Ciebie ciekawe. ### 🎨 Sprawdzenie składni nowoczesnych pętli: Przyjmowanie ES6+ Oceń swoje zrozumienie nowoczesnego JavaScript: - Jakie są zalety for...of nad tradycyjnymi pętlami for? - Kiedy nadal mogłeś woleć tradycyjne pętle for? - Jaka jest różnica między forEach a map? ## Pętle i Tablice Połączenie tablic z pętlami daje potężne możliwości przetwarzania danych. To podstawowa para dla wielu zadań programistycznych - od wyświetlania list po wyliczanie statystyk. Tradycyjne przetwarzanie tablic: Zrozummy każde podejście: - Używa właściwości długości tablicy do określenia granic pętli - Dostęp do elementów przez indeks w tradycyjnych pętlach for - Zapewnia bezpośredni dostęp do elementów w pętlach for...of - Przetwarza każdy element tablicy dokładnie raz Praktyczny przykład przetwarzania danych: Tak działa ten kod: - Inicjalizuje zmienne do śledzenia sumy i wartości ekstremalnych - Przetwarza każdą ocenę w jednej, efektywnej pętli - Akumuluje sumę do obliczenia średniej - Śledzi najwyższe i najniższe wartości podczas iteracji - Oblicza końcowe statystyki po zakończeniu pętli ✅ Eksperymentuj z iteracją nad tablicą stworzoną przez siebie w konsoli przeglądarki. --- ## Wyzwanie Agenta GitHub Copilot 🚀 Użyj trybu Agent, aby wykonać następujące wyzwanie: Opis: Zbuduj kompleksową funkcję przetwarzającą dane, która łączy tablice i pętle do analizy zestawu danych i generowania znaczących wniosków. Zadanie: Stwórz funkcję nazwaną analyzeGrades, która przyjmuje tablicę obiektów ocen uczniów (każdy z właściwościami name i score) i zwraca obiekt ze statystykami, w tym najwyższą oceną, najniższą oceną, średnią oceną, liczbą uczniów, którzy zdali (score >= 70) oraz tablicą imion uczniów, którzy uzyskali wynik powyżej średniej. Użyj co najmniej dwóch różnych typów pętli w swoim rozwiązaniu. Dowiedz się więcej o trybie agenta tutaj. ## 🚀 Wyzwanie JavaScript oferuje kilka nowoczesnych metod tablicowych, które mogą zastąpić tradycyjne pętle w określonych zadaniach. Poznaj forEach, for-of, map, filter oraz reduce. Twoje wyzwanie: Przeprojektuj przykład ocen uczniów, używając co najmniej trzech różnych metod tablicowych. Zauważ, jak dużo czytelniejszy i przejrzystszy staje się kod z nowoczesną składnią JavaScript. ## Quiz po wykładzie Quiz po wykładzie ## Przegląd i samodzielna nauka Tablice w JavaScript mają wiele metod, które są niezwykle przydatne do manipulacji danymi. Przeczytaj o tych metodach i wypróbuj niektóre z nich (takie jak push, pop, slice i splice) na tablicy, którą stworzysz samodzielnie. ## Zadanie Przeiteruj tablicę --- ## 📊 Podsumowanie Twojego zestawu narzędzi: Tablice i Pętle --- ## 🚀 Twoja oś czasu do opanowania tablic i pętli ### ⚡ Co możesz zrobić w ciągu następnych 5 minut - [ ] Stwórz tablicę ulubionych filmów i uzyskaj dostęp do konkretnych elementów - [ ] Napisz pętlę for, która liczy od 1 do 10 - [ ] Wypróbuj wyzwanie z nowoczesnymi metodami tablic z lekcji - [ ] Ćwicz indeksowanie tablic w konsoli przeglądarki ### 🎯 Co możesz osiągnąć w ciągu tej godziny - [ ] Ukończ quiz po lekcji i przejrzyj trudniejsze zagadnienia - [ ] Zbuduj kompleksowy analizator ocen z wyzwania GitHub Copilot - [ ] Stwórz prosty koszyk zakupowy, który dodaje i usuwa przedmioty - [ ] Ćwicz konwersję między różnymi typami pętli - [ ] Eksperymentuj z metodami tablic jak push, pop, slice i splice ### 📅 Twoja tygodniowa podróż w przetwarzaniu danych - [ ] Ukończ zadanie "Przeiteruj tablicę" z kreatywnymi ulepszeniami - [ ] Stwórz aplikację listy rzeczy do zrobienia, używając tablic i pętli - [ ] Zbuduj prosty kalkulator statystyk dla danych liczbowych - [ ] Ćwicz z metodami tablic MDN - [ ] Zbuduj interfejs galerii zdjęć lub listy odtwarzania muzyki - [ ] Poznaj programowanie funkcyjne za pomocą map, filter i reduce ### 🌟 Twoja miesięczna transformacja - [ ] Opanuj zaawansowane operacje na tablicach oraz optymalizację wydajności - [ ] Zbuduj kompletny panel wizualizacji danych - [ ] Wnieś wkład w projekty open source związane z przetwarzaniem danych - [ ] Nauczaj kogoś innego o tablicach i pętlach na praktycznych przykładach - [ ] Stwórz osobistą bibliotekę wielokrotnego użytku funkcji do przetwarzania danych - [ ] Poznaj algorytmy i struktury danych oparte na tablicach ### 🏆 Ostateczne sprawdzenie mistrzostwa w przetwarzaniu danych Świętuj swoje mistrzostwo w pracy z tablicami i pętlami: - Jaka operacja na tablicach jest dla Ciebie najbardziej przydatna w zastosowaniach praktycznych? - Który typ pętli wydaje Ci się najbardziej naturalny i dlaczego? - Jak zrozumienie tablic i pętli zmieniło Twój sposób organizowania danych? - Jakie złożone zadanie przetwarzania danych chciałbyś/chciałabyś rozwiązać jako następne? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Zastrzeżenie: Niniejszy dokument został przetłumaczony przy użyciu usługi tłumaczenia AI Co-op Translator. Pomimo naszych starań, aby zapewnić dokładność, prosimy pamiętać, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Introdução ao JavaScript

JavaScript é a linguagem da web. Nestes quatro módulos, você aprenderá o básico. ### Tópicos 1. Variáveis e Tipos de Dados 2. Funções e Métodos 3. Tomando Decisões com JavaScript 4. Arrays e Loops ### Créditos Essas lições foram escritas com ♥️ por Jasmine Greenaway, Christopher Harrison e Chris Noring Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.

javascript

Noções Básicas de JavaScript: Tipos de Dados

Os tipos de dados são um dos conceitos fundamentais em JavaScript que você encontrará em todos os programas que escrever. Pense nos tipos de dados como o sistema de arquivamento usado pelos antigos bibliotecários de Alexandria – eles tinham lugares específicos para pergaminhos contendo poesia, matemática e registros históricos. O JavaScript organiza informações de maneira semelhante, com diferentes categorias para diferentes tipos de dados. Nesta lição, exploraremos os principais tipos de dados que fazem o JavaScript funcionar. Você aprenderá a lidar com números, textos, valores verdadeiro/falso e entenderá por que escolher o tipo correto é essencial para seus programas. Esses conceitos podem parecer abstratos no início, mas com prática, eles se tornarão naturais. Compreender os tipos de dados tornará tudo no JavaScript muito mais claro. Assim como arquitetos precisam entender diferentes materiais de construção antes de construir uma catedral, esses fundamentos apoiarão tudo o que você criar daqui para frente. ## Quiz Pré-Aula Quiz pré-aula Esta lição cobre os fundamentos do JavaScript, a linguagem que proporciona interatividade na web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variáveis em JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Tipos de Dados em JavaScript") Vamos começar com variáveis e os tipos de dados que as preenchem! ## Variáveis Variáveis são blocos fundamentais na programação. Como os frascos rotulados que os alquimistas medievais usavam para armazenar diferentes substâncias, as variáveis permitem que você armazene informações e dê a elas um nome descritivo para que possa referenciá-las mais tarde. Precisa lembrar a idade de alguém? Armazene em uma variável chamada age. Quer acompanhar o nome de um usuário? Guarde em uma variável chamada userName. Vamos focar na abordagem moderna para criar variáveis em JavaScript. As técnicas que você aprenderá aqui representam anos de evolução da linguagem e melhores práticas desenvolvidas pela comunidade de programação. Criar e declarar uma variável tem a seguinte sintaxe [palavra-chave] [nome]. É composta por duas partes: - Palavra-chave. Use let para variáveis que podem mudar ou const para valores que permanecem os mesmos. - O nome da variável, este é um nome descritivo que você escolhe. ✅ A palavra-chave let foi introduzida no ES6 e dá à sua variável um chamado _escopo de bloco_. É recomendado que você use let ou const em vez da palavra-chave mais antiga var. Vamos abordar escopos de bloco mais detalhadamente em partes futuras. ### Tarefa - Trabalhando com Variáveis 1. Declare uma variável. Vamos começar criando nossa primeira variável: ```javascript let myVariable; ``` O que isso realiza: - Isso diz ao JavaScript para criar um local de armazenamento chamado myVariable - O JavaScript aloca espaço na memória para essa variável - A variável atualmente não tem valor (undefined) 2. Dê um valor a ela. Agora vamos colocar algo em nossa variável: ```javascript myVariable = 123; ``` Como funciona a atribuição: - O operador = atribui o valor 123 à nossa variável - A variável agora contém esse valor em vez de estar indefinida - Você pode referenciar esse valor em todo o seu código usando myVariable > Nota: o uso de = nesta lição significa que estamos utilizando um "operador de atribuição", usado para definir um valor para uma variável. Ele não denota igualdade. 3. Faça do jeito inteligente. Na verdade, vamos combinar essas duas etapas: ```javascript let myVariable = 123; ``` Essa abordagem é mais eficiente: - Você está declarando a variável e atribuindo um valor em uma única instrução - Esta é a prática padrão entre os desenvolvedores - Reduz o comprimento do código enquanto mantém a clareza 4. Mude de ideia. E se quisermos armazenar um número diferente? ```javascript myVariable = 321; ``` Entendendo a reatribuição: - A variável agora contém 321 em vez de 123 - O valor anterior é substituído – variáveis armazenam apenas um valor por vez - Essa mutabilidade é a característica principal das variáveis declaradas com let ✅ Experimente! Você pode escrever JavaScript diretamente no seu navegador. Abra uma janela do navegador e vá para as Ferramentas de Desenvolvedor. No console, você encontrará um prompt; digite let myVariable = 123, pressione Enter e depois digite myVariable. O que acontece? Note que você aprenderá mais sobre esses conceitos em lições subsequentes. ### 🧠 Verificação de Domínio de Variáveis: Ficando Confortável Vamos ver como você está se sentindo em relação às variáveis: - Você consegue explicar a diferença entre declarar e atribuir uma variável? - O que acontece se você tentar usar uma variável antes de declará-la? - Quando você escolheria let em vez de const para uma variável? ## Constantes Às vezes, você precisa armazenar informações que nunca devem mudar durante a execução do programa. Pense nas constantes como os princípios matemáticos que Euclides estabeleceu na Grécia Antiga – uma vez provados e documentados, permaneceram fixos para referência futura. As constantes funcionam de forma semelhante às variáveis, mas com uma restrição importante: uma vez que você atribui seu valor, ele não pode ser alterado. Essa imutabilidade ajuda a evitar modificações acidentais em valores críticos do seu programa. A declaração e inicialização de uma constante seguem os mesmos conceitos de uma variável, com a exceção da palavra-chave const. As constantes geralmente são declaradas com letras maiúsculas. O que este código faz: - Cria uma constante chamada MY_VARIABLE com o valor 123 - Usa convenção de nomenclatura em letras maiúsculas para constantes - Impede quaisquer alterações futuras nesse valor As constantes têm duas regras principais: - Você deve dar um valor imediatamente – não são permitidas constantes vazias! - Você nunca pode mudar esse valor – o JavaScript gerará um erro se você tentar. Vamos ver o que isso significa: Valor simples - O seguinte NÃO é permitido: ```javascript const PI = 3; PI = 4; // não permitido ``` O que você precisa lembrar: - Tentativas de reatribuir uma constante causarão um erro - Protege valores importantes contra alterações acidentais - Garante que o valor permaneça consistente durante todo o programa Referência de objeto é protegida - O seguinte NÃO é permitido: ```javascript const obj = { a: 3 }; obj = { b: 5 } // não permitido ``` Entendendo esses conceitos: - Impede substituir o objeto inteiro por um novo - Protege a referência ao objeto original - Mantém a identidade do objeto na memória Valor do objeto não é protegido - O seguinte É permitido: ```javascript const obj = { a: 3 }; obj.a = 5; // permitido ``` Desvendando o que acontece aqui: - Modifica o valor da propriedade dentro do objeto - Mantém a mesma referência do objeto - Demonstra que os conteúdos do objeto podem mudar enquanto a referência permanece constante > Nota, um const significa que a referência está protegida contra reatribuição. O valor não é _imutável_ e pode mudar, especialmente se for uma construção complexa como um objeto. ## Tipos de Dados O JavaScript organiza informações em diferentes categorias chamadas tipos de dados. Este conceito espelha como os estudiosos antigos categorizavam o conhecimento – Aristóteles distinguia entre diferentes tipos de raciocínio, sabendo que princípios lógicos não podiam ser aplicados uniformemente à poesia, matemática e filosofia natural. Os tipos de dados são importantes porque diferentes operações funcionam com diferentes tipos de informações. Assim como você não pode realizar cálculos em um nome de pessoa ou alfabetizar uma equação matemática, o JavaScript exige o tipo de dado apropriado para cada operação. Compreender isso evita erros e torna seu código mais confiável. Variáveis podem armazenar muitos tipos diferentes de valores, como números e textos. Esses vários tipos de valores são conhecidos como tipo de dado. Os tipos de dados são uma parte importante do desenvolvimento de software porque ajudam os desenvolvedores a tomar decisões sobre como o código deve ser escrito e como o software deve funcionar. Além disso, alguns tipos de dados têm características únicas que ajudam a transformar ou extrair informações adicionais de um valor. ✅ Os Tipos de Dados também são chamados de primitivas de dados do JavaScript, pois são os tipos de dados de nível mais baixo fornecidos pela linguagem. Existem 7 tipos de dados primitivos: string, number, bigint, boolean, undefined, null e symbol. Reserve um momento para visualizar o que cada uma dessas primitivas pode representar. O que é um zebra? E 0? true? ### Números Números são o tipo de dado mais simples no JavaScript. Seja trabalhando com números inteiros como 42, decimais como 3.14 ou números negativos como -5, o JavaScript os trata de forma uniforme. Lembra da nossa variável de antes? Aquele 123 que armazenamos era, na verdade, um tipo de dado numérico: Características principais: - O JavaScript reconhece automaticamente valores numéricos - Você pode realizar operações matemáticas com essas variáveis - Não é necessário declarar explicitamente o tipo Variáveis podem armazenar todos os tipos de números, incluindo decimais ou números negativos. Números também podem ser usados com operadores aritméticos, abordados na próxima seção. ### Operadores Aritméticos Operadores aritméticos permitem que você realize cálculos matemáticos no JavaScript. Esses operadores seguem os mesmos princípios que os matemáticos têm usado por séculos – os mesmos símbolos que apareceram nos trabalhos de estudiosos como Al-Khwarizmi, que desenvolveu a notação algébrica. Os operadores funcionam como você esperaria na matemática tradicional: mais para adição, menos para subtração e assim por diante. Existem vários tipos de operadores para usar ao realizar funções aritméticas, e alguns estão listados aqui: ✅ Experimente! Tente uma operação aritmética no console do seu navegador. Os resultados te surpreendem? ### 🧮 Verificação de Habilidades Matemáticas: Calculando com Confiança Teste sua compreensão de aritmética: - Qual é a diferença entre / (divisão) e % (resto)? - Você consegue prever o que 10 % 3 resulta? (Dica: não é 3.33...) - Por que o operador de resto pode ser útil na programação? ### Strings No JavaScript, dados textuais são representados como strings. O termo "string" vem do conceito de caracteres conectados em sequência, assim como os escribas em monastérios medievais conectavam letras para formar palavras e frases em seus manuscritos. Strings são fundamentais para o desenvolvimento web. Cada pedaço de texto exibido em um site – nomes de usuários, rótulos de botões, mensagens de erro, conteúdo – é tratado como dado de string. Compreender strings é essencial para criar interfaces de usuário funcionais. Strings são conjuntos de caracteres que ficam entre aspas simples ou duplas. Entendendo esses conceitos: - Usa aspas simples ' ou duplas " para definir strings - Armazena dados textuais que podem incluir letras, números e símbolos - Atribui valores de string a variáveis para uso posterior - Exige aspas para distinguir texto de nomes de variáveis Lembre-se de usar aspas ao escrever uma string, caso contrário, o JavaScript assumirá que é um nome de variável. ### Formatando Strings A manipulação de strings permite que você combine elementos de texto, incorpore variáveis e crie conteúdo dinâmico que responde ao estado do programa. Essa técnica possibilita construir texto de forma programática. Frequentemente, você precisa juntar várias strings – esse processo é chamado de concatenação. Para concatenar duas ou mais strings, ou juntá-las, use o operador +. Passo a passo, aqui está o que está acontecendo: - Combina várias strings usando o operador + - Une strings diretamente sem espaços no primeiro exemplo - Adiciona caracteres de espaço " " entre as strings para facilitar a leitura - Insere pontuação como vírgulas para criar uma formatação adequada ✅ Por que 1 + 1 = 2 em JavaScript, mas '1' + '1' = 11? Pense nisso. E o que acontece com '1' + 1? Template literals são outra forma de formatar strings, exceto que, em vez de aspas, usa-se o acento grave. Qualquer coisa que não seja texto simples deve ser colocada dentro de placeholders ${ }. Isso inclui quaisquer variáveis que possam ser strings. Vamos entender cada parte: - Usa acentos graves ` `` em vez de aspas regulares para criar template literals - Insere variáveis diretamente usando a sintaxe de placeholder ${} - Preserva espaços e formatação exatamente como escrito - Oferece uma maneira mais limpa de criar strings complexas com variáveis Você pode alcançar seus objetivos de formatação com qualquer método, mas os template literals respeitam os espaços e quebras de linha. ✅ Quando você usaria um template literal em vez de uma string simples? ### 🔤 Teste de Maestria em Strings: Confiança na Manipulação de Texto Avalie suas habilidades com strings: - Você consegue explicar por que '1' + '1' resulta em '11' em vez de 2? - Qual método de string você acha mais legível: concatenação ou template literals? - O que acontece se você esquecer as aspas ao redor de uma string? ### Booleans Booleans representam a forma mais simples de dados: eles só podem ter um de dois valores – true ou false. Esse sistema de lógica binária remonta ao trabalho de George Boole, um matemático do século XIX que desenvolveu a álgebra booleana. Apesar de sua simplicidade, booleans são essenciais para a lógica de programação. Eles permitem que seu código tome decisões com base em condições – se um usuário está logado, se um botão foi clicado ou se certos critérios foram atendidos. Booleans só podem ter dois valores: true ou false. Eles ajudam a decidir quais linhas de código devem ser executadas quando certas condições são atendidas. Em muitos casos, operadores ajudam a definir o valor de um Boolean, e você frequentemente verá variáveis sendo inicializadas ou seus valores sendo atualizados com um operador. No exemplo acima, nós: - Criamos uma variável que armazena o valor Boolean true - Demonstramos como armazenar o valor Boolean false - Usamos as palavras-chave exatas true e false (sem aspas) - Preparamos essas variáveis para uso em declarações condicionais ✅ Uma variável pode ser considerada 'truthy' se ela for avaliada como um booleano true. Curiosamente, em JavaScript, todos os valores são truthy, a menos que sejam definidos como falsy. ### 🎯 Teste de Lógica Booleana: Habilidades de Tomada de Decisão Teste sua compreensão sobre booleans: - Por que você acha que o JavaScript tem valores "truthy" e "falsy" além de apenas true e false? - Você consegue prever quais desses são falsy: 0, "0", [], "false"? - Como os booleans podem ser úteis para controlar o fluxo de um programa? --- ## 📊 Resumo da Sua Caixa de Ferramentas de Tipos de Dados ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agent para completar o seguinte desafio: Descrição: Crie um gerenciador de informações pessoais que demonstre todos os tipos de dados do JavaScript que você aprendeu nesta lição enquanto lida com cenários de dados do mundo real. Prompt: Construa um programa em JavaScript que crie um objeto de perfil de usuário contendo: nome da pessoa (string), idade (número), status de estudante (boolean), cores favoritas como um array e um objeto de endereço com propriedades de rua, cidade e código postal. Inclua funções para exibir as informações do perfil e atualizar campos individuais. Certifique-se de demonstrar concatenação de strings, template literals, operações aritméticas com a idade e lógica booleana para o status de estudante. Saiba mais sobre modo agent aqui. ## 🚀 Desafio O JavaScript tem alguns comportamentos que podem pegar os desenvolvedores desprevenidos. Aqui está um exemplo clássico para explorar: tente digitar isso no console do seu navegador: let age = 1; let Age = 2; age == Age e observe o resultado. Ele retorna false – você consegue determinar por quê? Isso representa um dos muitos comportamentos do JavaScript que vale a pena entender. Familiaridade com essas peculiaridades ajudará você a escrever códigos mais confiáveis e a depurar problemas de forma mais eficaz. ## Quiz Pós-Aula Quiz pós-aula ## Revisão & Autoestudo Dê uma olhada nesta lista de exercícios de JavaScript e tente um. O que você aprendeu? ## Tarefa Prática de Tipos de Dados ## 🚀 Sua Linha do Tempo de Maestria em Tipos de Dados do JavaScript ### ⚡ O Que Você Pode Fazer nos Próximos 5 Minutos - [ ] Abra o console do seu navegador e crie 3 variáveis com diferentes tipos de dados - [ ] Tente o desafio: let age = 1; let Age = 2; age == Age e descubra por que é falso - [ ] Pratique a concatenação de strings com seu nome e número favorito - [ ] Teste o que acontece quando você adiciona um número a uma string ### 🎯 O Que Você Pode Realizar Nesta Hora - [ ] Complete o quiz pós-aula e revise quaisquer conceitos confusos - [ ] Crie uma mini calculadora que soma, subtrai, multiplica e divide dois números - [ ] Construa um formatador de nomes simples usando template literals - [ ] Explore as diferenças entre os operadores de comparação == e === - [ ] Pratique a conversão entre diferentes tipos de dados ### 📅 Sua Base de JavaScript em Uma Semana - [ ] Complete a tarefa com confiança e criatividade - [ ] Crie um objeto de perfil pessoal usando todos os tipos de dados aprendidos - [ ] Pratique com exercícios de JavaScript do CSS-Tricks - [ ] Construa um validador de formulário simples usando lógica booleana - [ ] Experimente tipos de dados de array e objeto (prévia das próximas lições) - [ ] Participe de uma comunidade de JavaScript e faça perguntas sobre tipos de dados ### 🌟 Sua Transformação em Um Mês - [ ] Integre o conhecimento de tipos de dados em projetos de programação maiores - [ ] Entenda quando e por que usar cada tipo de dado em aplicações reais - [ ] Ajude outros iniciantes a entender os fundamentos do JavaScript - [ ] Construa um pequeno aplicativo que gerencie diferentes tipos de dados de usuários - [ ] Explore conceitos avançados de tipos de dados, como coerção de tipos e igualdade estrita - [ ] Contribua para projetos de JavaScript de código aberto com melhorias na documentação ### 🧠 Check-in Final de Maestria em Tipos de Dados Celebre sua base em JavaScript: - Qual tipo de dado mais te surpreendeu em termos de comportamento? - Quão confortável você se sente explicando variáveis vs. constantes para um amigo? - Qual foi a coisa mais interessante que você descobriu sobre o sistema de tipos do JavaScript? - Qual aplicação do mundo real você imagina construir com esses fundamentos? --- Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.

javascript

Noções Básicas de JavaScript: Métodos e Funções

## Quiz Pré-Aula Quiz pré-aula Escrever o mesmo código repetidamente é uma das frustrações mais comuns na programação. As funções resolvem esse problema ao permitir que você agrupe o código em blocos reutilizáveis. Pense nas funções como as peças padronizadas que tornaram a linha de montagem de Henry Ford revolucionária – uma vez que você cria um componente confiável, pode usá-lo onde for necessário sem precisar refazer do zero. As funções permitem que você agrupe partes do código para reutilizá-las ao longo do seu programa. Em vez de copiar e colar a mesma lógica em todos os lugares, você pode criar uma função uma vez e chamá-la sempre que necessário. Essa abordagem mantém seu código organizado e facilita as atualizações. Nesta lição, você aprenderá como criar suas próprias funções, passar informações para elas e obter resultados úteis de volta. Você descobrirá a diferença entre funções e métodos, aprenderá abordagens modernas de sintaxe e verá como as funções podem trabalhar com outras funções. Vamos construir esses conceitos passo a passo. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Métodos e Funções") ## Funções Uma função é um bloco de código independente que realiza uma tarefa específica. Ela encapsula a lógica que você pode executar sempre que necessário. Em vez de escrever o mesmo código várias vezes ao longo do seu programa, você pode agrupá-lo em uma função e chamá-la sempre que precisar. Essa abordagem mantém seu código limpo e facilita as atualizações. Considere o desafio de manutenção se você precisasse alterar uma lógica espalhada por 20 locais diferentes no seu código. Dar nomes descritivos às suas funções é essencial. Uma função bem nomeada comunica claramente seu propósito – quando você vê cancelTimer(), entende imediatamente o que ela faz, assim como um botão claramente rotulado indica exatamente o que acontecerá ao ser clicado. ## Criando e chamando uma função Vamos examinar como criar uma função. A sintaxe segue um padrão consistente: Vamos detalhar: - A palavra-chave function diz ao JavaScript "Ei, estou criando uma função!" - nameOfFunction é onde você dá um nome descritivo à sua função - Os parênteses () são onde você pode adicionar parâmetros (vamos abordar isso em breve) - As chaves {} contêm o código real que será executado quando você chamar a função Vamos criar uma função simples de saudação para ver isso em ação: Essa função imprime "Hello, world!" no console. Depois de defini-la, você pode usá-la quantas vezes for necessário. Para executar (ou "chamar") sua função, escreva o nome dela seguido de parênteses. O JavaScript permite que você defina sua função antes ou depois de chamá-la – o motor do JavaScript cuidará da ordem de execução. Quando você executa essa linha, ela executa todo o código dentro da sua função displayGreeting, exibindo "Hello, world!" no console do navegador. Você pode chamar essa função repetidamente. ### 🧠 Verificação de Fundamentos de Funções: Construindo Suas Primeiras Funções Vamos ver como você está se saindo com as funções básicas: - Você consegue explicar por que usamos chaves {} nas definições de funções? - O que acontece se você escrever displayGreeting sem os parênteses? - Por que você pode querer chamar a mesma função várias vezes? ### Melhores práticas para funções Aqui estão algumas dicas para ajudá-lo a escrever ótimas funções: - Dê nomes claros e descritivos às suas funções – seu eu do futuro vai agradecer! - Use camelCasing para nomes com várias palavras (como calculateTotal em vez de calculate_total) - Mantenha cada função focada em fazer uma coisa bem feita ## Passando informações para uma função Nossa função displayGreeting é limitada – ela só pode exibir "Hello, world!" para todos. Os parâmetros nos permitem tornar as funções mais flexíveis e úteis. Parâmetros funcionam como espaços reservados onde você pode inserir valores diferentes cada vez que usa a função. Dessa forma, a mesma função pode trabalhar com informações diferentes em cada chamada. Você lista os parâmetros dentro dos parênteses ao definir sua função, separando múltiplos parâmetros com vírgulas: Cada parâmetro funciona como um espaço reservado – quando alguém chama sua função, fornecerá valores reais que serão inseridos nesses espaços. Vamos atualizar nossa função de saudação para aceitar o nome de alguém: Observe como estamos usando crases (` `) e ${}` para inserir o nome diretamente na nossa mensagem – isso é chamado de template literal, e é uma maneira muito prática de construir strings com variáveis misturadas. Agora, ao chamar nossa função, podemos passar qualquer nome: O JavaScript pega a string 'Christopher', atribui ao parâmetro name e cria a mensagem personalizada "Hello, Christopher!" ## Valores padrão E se quisermos tornar alguns parâmetros opcionais? É aí que os valores padrão são úteis! Digamos que queremos permitir que as pessoas personalizem a palavra de saudação, mas, se não especificarem uma, usaremos "Hello" como padrão. Você pode configurar valores padrão usando o sinal de igual, assim como ao definir uma variável: Aqui, name ainda é obrigatório, mas salutation tem um valor de backup 'Hello' caso ninguém forneça uma saudação diferente. Agora podemos chamar essa função de duas maneiras diferentes: Na primeira chamada, o JavaScript usa o padrão "Hello", já que não especificamos uma saudação. Na segunda chamada, ele usa nosso "Hi" personalizado. Essa flexibilidade torna as funções adaptáveis a diferentes cenários. ### 🎛️ Verificação de Domínio de Parâmetros: Tornando Funções Flexíveis Teste sua compreensão sobre parâmetros: - Qual é a diferença entre um parâmetro e um argumento? - Por que os valores padrão são úteis na programação do mundo real? - Você consegue prever o que acontece se passar mais argumentos do que parâmetros? ## Valores de retorno Nossas funções até agora apenas exibiram mensagens no console, mas e se você quiser que uma função calcule algo e devolva o resultado? É aí que entram os valores de retorno. Em vez de apenas exibir algo, uma função pode devolver um valor que você pode armazenar em uma variável ou usar em outras partes do seu código. Para enviar um valor de volta, você usa a palavra-chave return seguida do que deseja retornar: Aqui está algo importante: quando uma função encontra uma instrução return, ela para imediatamente de executar e envia esse valor de volta para quem a chamou. Vamos modificar nossa função de saudação para retornar a mensagem em vez de exibi-la: Agora, em vez de exibir a saudação, essa função cria a mensagem e a devolve para nós. Para usar o valor retornado, podemos armazená-lo em uma variável como qualquer outro valor: Agora greetingMessage contém "Hello, Christopher" e podemos usá-lo em qualquer lugar do nosso código – para exibi-lo em uma página da web, incluí-lo em um e-mail ou passá-lo para outra função. ### 🔄 Verificação de Valores de Retorno: Obtendo Resultados de Volta Avalie sua compreensão sobre valores de retorno: - O que acontece com o código após uma instrução return em uma função? - Por que retornar valores geralmente é melhor do que apenas exibir no console? - Uma função pode retornar diferentes tipos de valores (string, número, booleano)? ## Funções como parâmetros para funções Funções podem ser passadas como parâmetros para outras funções. Embora esse conceito possa parecer complexo inicialmente, é um recurso poderoso que permite padrões de programação flexíveis. Esse padrão é muito comum quando você quer dizer "quando algo acontecer, faça essa outra coisa". Por exemplo, "quando o temporizador terminar, execute este código" ou "quando o usuário clicar no botão, chame esta função". Vamos olhar para setTimeout, que é uma função embutida que espera um certo tempo e então executa algum código. Precisamos dizer a ela qual código executar – caso perfeito para passar uma função! Experimente este código – após 3 segundos, você verá uma mensagem: Observe como passamos displayDone (sem parênteses) para setTimeout. Não estamos chamando a função nós mesmos – estamos entregando-a para setTimeout e dizendo "chame isso em 3 segundos." ### Funções anônimas Às vezes, você precisa de uma função para apenas uma coisa e não quer dar um nome a ela. Pense nisso – se você só vai usar uma função uma vez, por que encher seu código com um nome extra? O JavaScript permite criar funções anônimas – funções sem nomes que você pode definir exatamente onde precisa delas. Aqui está como podemos reescrever nosso exemplo do temporizador usando uma função anônima: Isso alcança o mesmo resultado, mas a função é definida diretamente dentro da chamada setTimeout, eliminando a necessidade de uma declaração de função separada. ### Funções de seta O JavaScript moderno tem uma maneira ainda mais curta de escrever funções, chamadas funções de seta. Elas usam => (que parece uma seta – entendeu?) e são super populares entre os desenvolvedores. As funções de seta permitem que você pule a palavra-chave function e escreva um código mais conciso. Aqui está nosso exemplo do temporizador usando uma função de seta: Os () são onde os parâmetros iriam (vazio neste caso), depois vem a seta =>, e finalmente o corpo da função entre chaves. Isso fornece a mesma funcionalidade com uma sintaxe mais concisa. ### Quando usar cada estratégia Quando você deve usar cada abordagem? Uma diretriz prática: se você vai usar a função várias vezes, dê um nome a ela e defina-a separadamente. Se for para um uso específico, considere uma função anônima. Tanto as funções de seta quanto a sintaxe tradicional são escolhas válidas, embora as funções de seta sejam predominantes em bases de código modernas de JavaScript. ### 🎨 Verificação de Estilos de Funções: Escolhendo a Sintaxe Certa Teste sua compreensão sobre sintaxe: - Quando você pode preferir funções de seta em vez da sintaxe tradicional de funções? - Qual é a principal vantagem das funções anônimas? - Você consegue pensar em uma situação onde uma função nomeada é melhor que uma anônima? --- ## 🚀 Desafio Você consegue articular em uma frase a diferença entre funções e métodos? Tente! ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Crie uma biblioteca de utilitários matemáticos que demonstre diferentes conceitos de funções abordados nesta lição, incluindo parâmetros, valores padrão, valores de retorno e funções de seta. Prompt: Crie um arquivo JavaScript chamado mathUtils.js que contenha as seguintes funções: 1. Uma função add que recebe dois parâmetros e retorna sua soma 2. Uma função multiply com valores padrão para parâmetros (o segundo parâmetro tem padrão 1) 3. Uma função de seta square que recebe um número e retorna seu quadrado 4. Uma função calculate que aceita outra função como parâmetro e dois números, aplicando a função a esses números 5. Demonstre a chamada de cada função com casos de teste apropriados Saiba mais sobre o modo agente aqui. ## Quiz Pós-Aula Quiz pós-aula ## Revisão e Estudo Individual Vale a pena ler um pouco mais sobre funções de seta, já que elas estão sendo cada vez mais usadas em bases de código. Pratique escrevendo uma função e, em seguida, reescrevendo-a com essa sintaxe. ## Tarefa Divirta-se com Funções --- ## 🧰 Resumo do Kit de Ferramentas de Funções JavaScript --- ## 🚀 Cronograma de Domínio de Funções JavaScript ### ⚡ O Que Você Pode Fazer nos Próximos 5 Minutos - [ ] Escreva uma função simples que retorne seu número favorito - [ ] Crie uma função com dois parâmetros que os some juntos - [ ] Tente converter uma função tradicional para a sintaxe de função de seta - [ ] Pratique o desafio: explique a diferença entre funções e métodos ### 🎯 O Que Você Pode Realizar Nesta Hora - [ ] Complete o quiz pós-aula e revise quaisquer conceitos confusos - [ ] Construa a biblioteca de utilitários matemáticos do desafio do GitHub Copilot - [ ] Crie uma função que utiliza outra função como parâmetro - [ ] Pratique escrever funções com parâmetros padrão - [ ] Experimente usar template literals nos valores de retorno de funções ### 📅 Sua Maestria em Funções ao Longo da Semana - [ ] Complete a tarefa "Diversão com Funções" com criatividade - [ ] Refatore algum código repetitivo que você escreveu em funções reutilizáveis - [ ] Construa uma pequena calculadora usando apenas funções (sem variáveis globais) - [ ] Pratique funções de seta com métodos de array como map() e filter() - [ ] Crie uma coleção de funções utilitárias para tarefas comuns - [ ] Estude funções de ordem superior e conceitos de programação funcional ### 🌟 Sua Transformação ao Longo do Mês - [ ] Domine conceitos avançados de funções como closures e escopo - [ ] Construa um projeto que utilize fortemente composição de funções - [ ] Contribua para código aberto melhorando a documentação de funções - [ ] Ensine alguém sobre funções e diferentes estilos de sintaxe - [ ] Explore paradigmas de programação funcional em JavaScript - [ ] Crie uma biblioteca pessoal de funções reutilizáveis para projetos futuros ### 🏆 Check-in Final do Campeão de Funções Celebre sua maestria em funções: - Qual é a função mais útil que você criou até agora? - Como aprender sobre funções mudou sua forma de pensar sobre organização de código? - Qual sintaxe de função você prefere e por quê? - Qual problema do mundo real você resolveria escrevendo uma função? --- Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.

javascript

Fundamentos de JavaScript: Tomando Decisões

Já se perguntou como os aplicativos tomam decisões inteligentes? Como um sistema de navegação escolhe a rota mais rápida ou como um termostato decide quando ligar o aquecimento? Esse é o conceito fundamental de tomada de decisões na programação. Assim como a Máquina Analítica de Charles Babbage foi projetada para seguir diferentes sequências de operações com base em condições, os programas modernos em JavaScript precisam fazer escolhas baseadas em circunstâncias variadas. Essa capacidade de ramificar e tomar decisões é o que transforma código estático em aplicativos responsivos e inteligentes. Nesta lição, você aprenderá como implementar lógica condicional em seus programas. Vamos explorar declarações condicionais, operadores de comparação e expressões lógicas que permitem ao seu código avaliar situações e responder adequadamente. ## Quiz Pré-Aula Quiz pré-aula A capacidade de tomar decisões e controlar o fluxo de um programa é um aspecto fundamental da programação. Esta seção aborda como controlar o caminho de execução dos seus programas em JavaScript usando valores Booleanos e lógica condicional. [](https://youtube.com/watch?v=SxTp8j-fMMY "Tomando Decisões") ## Uma Breve Revisão sobre Booleanos Antes de explorar a tomada de decisões, vamos revisitar os valores Booleanos da nossa lição anterior. Nomeados em homenagem ao matemático George Boole, esses valores representam estados binários – true ou false. Não há ambiguidade, nem meio-termo. Esses valores binários formam a base de toda lógica computacional. Toda decisão que seu programa toma, em última análise, se reduz a uma avaliação Booleana. Criar variáveis Booleanas é simples: Isso cria duas variáveis com valores Booleanos explícitos. ✅ Os Booleanos foram nomeados em homenagem ao matemático, filósofo e lógico inglês George Boole (1815–1864). ## Operadores de Comparação e Booleanos Na prática, você raramente definirá valores Booleanos manualmente. Em vez disso, você os gerará avaliando condições: "Este número é maior que aquele?" ou "Esses valores são iguais?" Os operadores de comparação permitem essas avaliações. Eles comparam valores e retornam resultados Booleanos com base na relação entre os operandos. ✅ Teste seu conhecimento escrevendo algumas comparações no console do navegador. Algum dado retornado te surpreendeu? ### 🧠 Domínio de Comparação: Entendendo a Lógica Booleana Teste sua compreensão sobre comparações: - Por que você acha que === (igualdade estrita) geralmente é preferido em vez de == (igualdade frouxa)? - Você consegue prever o que 5 === '5' retorna? E 5 == '5'? - Qual é a diferença entre !== e !=? ## Declaração If A declaração if é como fazer uma pergunta no seu código. "Se esta condição for verdadeira, então faça isso." Provavelmente é a ferramenta mais importante que você usará para tomar decisões em JavaScript. Veja como funciona: A condição vai dentro dos parênteses e, se for true, o JavaScript executa o código dentro das chaves. Se for false, o JavaScript simplesmente pula todo o bloco. Você frequentemente usará operadores de comparação para criar essas condições. Vamos ver um exemplo prático: Como 1000 >= 800 avalia como true, o código dentro do bloco é executado, exibindo "Comprando um novo laptop!" no console. ## Declaração If..Else Mas e se você quiser que seu programa faça algo diferente quando a condição for falsa? É aí que entra o else – é como ter um plano de backup. A declaração else oferece uma maneira de dizer "se esta condição não for verdadeira, faça outra coisa." Agora, como 500 >= 800 é false, o JavaScript pula o primeiro bloco e executa o bloco else. Você verá "Ainda não posso comprar um novo laptop!" no console. ✅ Teste sua compreensão deste código e do código a seguir executando-o no console do navegador. Altere os valores das variáveis currentMoney e laptopPrice para mudar o retorno do console.log(). ### 🎯 Verificação de Lógica If-Else: Caminhos Alternativos Avalie sua compreensão sobre lógica condicional: - O que acontece se currentMoney for exatamente igual a laptopPrice? - Você consegue pensar em um cenário do mundo real onde a lógica if-else seria útil? - Como você poderia estender isso para lidar com múltiplas faixas de preço? ## Declaração Switch Às vezes, você precisa comparar um valor com várias opções. Embora você possa encadear várias declarações if..else, essa abordagem se torna complicada. A declaração switch oferece uma estrutura mais limpa para lidar com múltiplos valores discretos. O conceito se assemelha aos sistemas de comutação mecânica usados em antigos sistemas de telefonia – um valor de entrada determina qual caminho específico a execução segue. Aqui está como é estruturado: - O JavaScript avalia a expressão uma vez - Ele verifica cada case para encontrar uma correspondência - Quando encontra uma correspondência, executa aquele bloco de código - O break diz ao JavaScript para parar e sair do switch - Se nenhum caso corresponder, ele executa o bloco default (se houver) Neste exemplo, o JavaScript vê que dayNumber é 2, encontra o case 2 correspondente, define dayName como "Terça-feira" e então sai do switch. O resultado? "Hoje é terça-feira" é exibido no console. ✅ Teste sua compreensão deste código e do código a seguir executando-o no console do navegador. Altere os valores da variável a para mudar o retorno do console.log(). ### 🔄 Domínio do Switch: Múltiplas Opções Teste sua compreensão sobre switch: - O que acontece se você esquecer uma declaração break? - Quando você usaria switch em vez de múltiplas declarações if-else? - Por que o caso default é útil, mesmo que você ache que cobriu todas as possibilidades? ## Operadores Lógicos e Booleanos Decisões complexas frequentemente exigem a avaliação de múltiplas condições simultaneamente. Assim como a álgebra booleana permite que os matemáticos combinem expressões lógicas, a programação fornece operadores lógicos para conectar múltiplas condições Booleanas. Esses operadores permitem lógica condicional sofisticada ao combinar avaliações simples de verdadeiro/falso. Esses operadores permitem combinar condições de maneiras úteis: - E (&&) significa que ambas as condições devem ser verdadeiras - OU (||) significa que pelo menos uma condição deve ser verdadeira - NÃO (!) inverte verdadeiro para falso (e vice-versa) ## Condições e Decisões com Operadores Lógicos Vamos ver esses operadores lógicos em ação com um exemplo mais realista: Neste exemplo: calculamos um preço com desconto de 20% (640), depois avaliamos se nossos fundos disponíveis cobrem o preço total OU o preço com desconto. Como 600 atende ao limite do preço com desconto de 640, a condição avalia como verdadeira. ### 🧮 Verificação de Operadores Lógicos: Combinando Condições Teste sua compreensão sobre operadores lógicos: - Na expressão A && B, o que acontece se A for falso? B ainda será avaliado? - Você consegue pensar em uma situação onde precisaria usar os três operadores (&&, ||, !) juntos? - Qual é a diferença entre !user.isActive e user.isActive !== true? ### Operador de Negação Às vezes é mais fácil pensar sobre quando algo NÃO é verdadeiro. Por exemplo, em vez de perguntar "O usuário está logado?", você pode querer perguntar "O usuário NÃO está logado?" O operador de exclamação (!) inverte a lógica para você. O operador ! é como dizer "o oposto de..." – se algo é true, ! torna isso false, e vice-versa. ### Expressões Ternárias Para atribuições condicionais simples, o JavaScript fornece o operador ternário. Essa sintaxe concisa permite que você escreva uma expressão condicional em uma única linha, útil quando você precisa atribuir um de dois valores com base em uma condição. Ele funciona como uma pergunta: "Essa condição é verdadeira? Se sim, use este valor. Se não, use aquele valor." Abaixo está um exemplo mais prático: ✅ Reserve um minuto para ler este código algumas vezes. Você entende como esses operadores estão funcionando? Aqui está o que essa linha está dizendo: "O firstNumber é maior que o secondNumber? Se sim, coloque firstNumber em biggestNumber. Se não, coloque secondNumber em biggestNumber." O operador ternário é apenas uma forma mais curta de escrever esta estrutura tradicional de if..else: Ambas as abordagens produzem resultados idênticos. O operador ternário oferece concisão, enquanto a estrutura tradicional if-else pode ser mais legível para condições complexas. --- ## 🚀 Desafio Crie um programa que seja escrito primeiro com operadores lógicos e, em seguida, reescreva-o usando uma expressão ternária. Qual é a sua sintaxe preferida? --- ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Crie um calculador de notas abrangente que demonstre múltiplos conceitos de tomada de decisão desta lição, incluindo declarações if-else, switch, operadores lógicos e expressões ternárias. Prompt: Escreva um programa em JavaScript que receba a nota numérica de um aluno (0-100) e determine sua nota em letra usando os seguintes critérios: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Abaixo de 60 Requisitos: 1. Use uma declaração if-else para determinar a nota em letra 2. Use operadores lógicos para verificar se o aluno passou (nota >= 60) E tem honras (nota >= 90) 3. Use uma instrução switch para fornecer feedback específico para cada nota por letra 4. Use um operador ternário para determinar se o aluno está elegível para o próximo curso (nota >= 70) 5. Inclua validação de entrada para garantir que a pontuação esteja entre 0 e 100 Teste seu programa com várias pontuações, incluindo casos extremos como 59, 60, 89, 90 e entradas inválidas. Saiba mais sobre modo agente aqui. ## Quiz Pós-Aula Quiz pós-aula ## Revisão & Autoestudo Leia mais sobre os diversos operadores disponíveis para o usuário no MDN. Explore o incrível guia de operadores de Josh Comeau! ## Tarefa Operadores --- ## 🧠 Resumo do Seu Kit de Ferramentas para Tomada de Decisão --- ## 🚀 Sua Linha do Tempo para Dominar a Tomada de Decisões em JavaScript ### ⚡ O Que Você Pode Fazer nos Próximos 5 Minutos - [ ] Pratique operadores de comparação no console do navegador - [ ] Escreva uma instrução simples if-else que verifica sua idade - [ ] Experimente o desafio: reescreva um if-else usando um operador ternário - [ ] Teste o que acontece com diferentes valores "truthy" e "falsy" ### 🎯 O Que Você Pode Realizar Nesta Hora - [ ] Complete o quiz pós-aula e revise quaisquer conceitos confusos - [ ] Construa o calculador de notas abrangente do desafio do GitHub Copilot - [ ] Crie uma árvore de decisão simples para um cenário do mundo real (como escolher o que vestir) - [ ] Pratique combinar múltiplas condições com operadores lógicos - [ ] Experimente instruções switch para diferentes casos de uso ### 📅 Sua Maestria em Lógica ao Longo da Semana - [ ] Complete a tarefa sobre operadores com exemplos criativos - [ ] Construa um mini aplicativo de quiz usando várias estruturas condicionais - [ ] Crie um validador de formulário que verifica múltiplas condições de entrada - [ ] Pratique os exercícios do guia de operadores de Josh Comeau - [ ] Refatore códigos existentes para usar estruturas condicionais mais apropriadas - [ ] Estude avaliação de curto-circuito e implicações de desempenho ### 🌟 Sua Transformação ao Longo do Mês - [ ] Domine condições complexas aninhadas e mantenha a legibilidade do código - [ ] Construa um aplicativo com lógica de tomada de decisão sofisticada - [ ] Contribua para projetos de código aberto melhorando a lógica condicional em projetos existentes - [ ] Ensine outra pessoa sobre diferentes estruturas condicionais e quando usar cada uma - [ ] Explore abordagens de programação funcional para lógica condicional - [ ] Crie um guia de referência pessoal para melhores práticas condicionais ### 🏆 Check-in Final do Campeão em Tomada de Decisão Comemore sua maestria em pensamento lógico: - Qual foi a lógica de decisão mais complexa que você implementou com sucesso? - Qual estrutura condicional parece mais natural para você e por quê? - Como aprender sobre operadores lógicos mudou sua abordagem para resolver problemas? - Qual aplicação do mundo real se beneficiaria de uma lógica de tomada de decisão sofisticada? --- Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.

javascript

Noções Básicas de JavaScript: Arrays e Loops

## Quiz Pré-Aula Quiz pré-aula Já se perguntou como os sites conseguem acompanhar os itens do carrinho de compras ou exibir sua lista de amigos? É aí que entram os arrays e os loops. Arrays são como recipientes digitais que armazenam várias informações, enquanto os loops permitem que você trabalhe com todos esses dados de forma eficiente, sem precisar repetir o código. Juntos, esses dois conceitos formam a base para lidar com informações nos seus programas. Você aprenderá a sair de um código manual e repetitivo para criar códigos inteligentes e eficientes que podem processar centenas ou até milhares de itens rapidamente. Ao final desta lição, você entenderá como realizar tarefas complexas de manipulação de dados com apenas algumas linhas de código. Vamos explorar esses conceitos essenciais de programação. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Pense nos arrays como um arquivo digital - em vez de armazenar um documento por gaveta, você pode organizar vários itens relacionados em um único recipiente estruturado. Em termos de programação, os arrays permitem armazenar várias informações em um único pacote organizado. Seja para criar uma galeria de fotos, gerenciar uma lista de tarefas ou acompanhar as pontuações de um jogo, os arrays fornecem a base para a organização de dados. Vamos ver como eles funcionam. ✅ Arrays estão por toda parte! Consegue pensar em um exemplo da vida real de um array, como um conjunto de painéis solares? ### Criando Arrays Criar um array é super simples - basta usar colchetes! O que está acontecendo aqui? Você acabou de criar um recipiente vazio usando esses colchetes []. Pense nisso como uma prateleira de biblioteca vazia - está pronta para armazenar os livros que você quiser organizar ali. Você também pode preencher seu array com valores iniciais desde o início: Coisas legais para notar: - Você pode armazenar texto, números ou até valores verdadeiro/falso no mesmo array - Basta separar cada item com uma vírgula - fácil! - Arrays são perfeitos para manter informações relacionadas juntas ### Indexação de Arrays Aqui está algo que pode parecer incomum no início: os arrays numeram seus itens começando do 0, não do 1. Essa indexação baseada em zero tem suas raízes em como a memória do computador funciona - é uma convenção de programação desde os primeiros dias de linguagens como C. Cada posição no array recebe um número de endereço chamado índice. ✅ Surpreende você que os arrays comecem no índice zero? Em algumas linguagens de programação, os índices começam em 1. Há uma história interessante sobre isso, que você pode ler na Wikipedia. Acessando Elementos do Array: Entenda o que acontece aqui: - Usa notação de colchetes com o número do índice para acessar elementos - Retorna o valor armazenado naquela posição específica no array - Começa a contar do 0, tornando o primeiro elemento o índice 0 Modificando Elementos do Array: No exemplo acima, nós: - Modificamos o elemento no índice 4 de "Rocky Road" para "Butter Pecan" - Adicionamos um novo elemento "Cookie Dough" no índice 5 - Expandimos automaticamente o tamanho do array ao adicionar além dos limites atuais ### Comprimento do Array e Métodos Comuns Os arrays vêm com propriedades e métodos embutidos que tornam o trabalho com dados muito mais fácil. Encontrando o Comprimento do Array: Pontos-chave para lembrar: - Retorna o número total de elementos no array - Atualiza automaticamente quando elementos são adicionados ou removidos - Fornece uma contagem dinâmica útil para loops e validação Métodos Essenciais de Arrays: Entendendo esses métodos: - Adiciona elementos com push() (final) e unshift() (início) - Remove elementos com pop() (final) e shift() (início) - Localiza elementos com indexOf() e verifica existência com includes() - Retorna valores úteis como elementos removidos ou índices de posição ✅ Experimente você mesmo! Use o console do seu navegador para criar e manipular um array de sua própria criação. ### 🧠 Verificação de Fundamentos de Arrays: Organizando Seus Dados Teste seu entendimento sobre arrays: - Por que você acha que os arrays começam a contar do 0 em vez do 1? - O que acontece se você tentar acessar um índice que não existe (como arr[100] em um array de 5 elementos)? - Consegue pensar em três cenários do mundo real onde os arrays seriam úteis? ## Loops Pense no famoso castigo dos romances de Charles Dickens, onde os alunos tinham que escrever frases repetidamente em uma lousa. Imagine se você pudesse simplesmente instruir alguém a "escrever esta frase 100 vezes" e ter isso feito automaticamente. É exatamente isso que os loops fazem pelo seu código. Os loops são como ter um assistente incansável que pode repetir tarefas sem erros. Seja para verificar cada item em um carrinho de compras ou exibir todas as fotos em um álbum, os loops lidam com a repetição de forma eficiente. O JavaScript oferece vários tipos de loops para você escolher. Vamos examinar cada um e entender quando usá-los. ### For Loop O for loop é como configurar um cronômetro - você sabe exatamente quantas vezes quer que algo aconteça. É super organizado e previsível, o que o torna perfeito quando você está trabalhando com arrays ou precisa contar coisas. Estrutura do For Loop: Passo a passo, aqui está o que acontece: - Inicializa a variável de contador i como 0 no início - Verifica a condição i < 10 antes de cada iteração - Executa o bloco de código quando a condição é verdadeira - Incrementa i em 1 após cada iteração com i++ - Para quando a condição se torna falsa (quando i atinge 10) ✅ Execute este código no console do navegador. O que acontece quando você faz pequenas alterações no contador, na condição ou na expressão de iteração? Consegue fazer com que ele funcione ao contrário, criando uma contagem regressiva? ### 🗓️ Verificação de Domínio do For Loop: Repetição Controlada Avalie seu entendimento sobre for loops: - Quais são as três partes de um for loop e o que cada uma faz? - Como você faria para percorrer um array ao contrário? - O que acontece se você esquecer a parte de incremento (i++)? ### While Loop O while loop é como dizer "continue fazendo isso até..." - você pode não saber exatamente quantas vezes ele será executado, mas sabe quando parar. É perfeito para coisas como pedir uma entrada ao usuário até que ele forneça o que você precisa ou procurar dados até encontrar o que está procurando. Características do While Loop: - Continua executando enquanto a condição for verdadeira - Requer gerenciamento manual de quaisquer variáveis de contador - Verifica a condição antes de cada iteração - Risco de loops infinitos se a condição nunca se tornar falsa Entendendo esses exemplos: - Gerencia a variável de contador i manualmente dentro do corpo do loop - Incrementa o contador para evitar loops infinitos - Demonstra caso de uso prático com entrada do usuário e limite de tentativas - Inclui mecanismos de segurança para evitar execução interminável ### ♾️ Verificação de Sabedoria do While Loop: Repetição Baseada em Condição Teste sua compreensão sobre while loops: - Qual é o principal perigo ao usar while loops? - Quando você escolheria um while loop em vez de um for loop? - Como você pode evitar loops infinitos? ### Alternativas Modernas de Loops O JavaScript oferece sintaxes modernas de loops que podem tornar seu código mais legível e menos propenso a erros. For...of Loop (ES6+): Principais vantagens do for...of: - Elimina o gerenciamento de índices e possíveis erros de contagem - Fornece acesso direto aos elementos do array - Melhora a legibilidade do código e reduz a complexidade da sintaxe Método forEach: O que você precisa saber sobre forEach: - Executa uma função para cada elemento do array - Fornece tanto o valor do elemento quanto o índice como parâmetros - Não pode ser interrompido antecipadamente (diferente dos loops tradicionais) - Retorna undefined (não cria um novo array) ✅ Por que você escolheria um for loop em vez de um while loop? 17 mil pessoas tiveram a mesma dúvida no StackOverflow, e algumas das opiniões podem ser interessantes para você. ### 🎨 Verificação de Sintaxe Moderna de Loops: Adotando ES6+ Avalie sua compreensão sobre JavaScript moderno: - Quais são as vantagens do for...of em relação aos loops for tradicionais? - Quando você ainda preferiria loops for tradicionais? - Qual é a diferença entre forEach e map? ## Loops e Arrays Combinar arrays com loops cria capacidades poderosas de processamento de dados. Essa combinação é fundamental para muitas tarefas de programação, desde exibir listas até calcular estatísticas. Processamento Tradicional de Arrays: Vamos entender cada abordagem: - Usa a propriedade de comprimento do array para determinar o limite do loop - Acessa elementos por índice em loops for tradicionais - Fornece acesso direto aos elementos em loops for...of - Processa cada elemento do array exatamente uma vez Exemplo Prático de Processamento de Dados: Aqui está como este código funciona: - Inicializa variáveis de rastreamento para soma e extremos - Processa cada nota com um único loop eficiente - Acumula o total para cálculo da média - Rastreia os valores mais altos e mais baixos durante a iteração - Calcula estatísticas finais após a conclusão do loop ✅ Experimente percorrer um array criado por você no console do navegador. --- ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Construa uma função abrangente de processamento de dados que combine arrays e loops para analisar um conjunto de dados e gerar insights significativos. Prompt: Crie uma função chamada analyzeGrades que receba um array de objetos de notas de alunos (cada um contendo propriedades de nome e pontuação) e retorne um objeto com estatísticas incluindo a maior nota, menor nota, nota média, contagem de alunos que passaram (nota >= 70) e um array de nomes de alunos que tiveram notas acima da média. Use pelo menos dois tipos diferentes de loops na sua solução. Saiba mais sobre o modo agente aqui. ## 🚀 Desafio O JavaScript oferece vários métodos modernos de array que podem substituir loops tradicionais para tarefas específicas. Explore forEach, for-of, map, filter e reduce. Seu desafio: Refatore o exemplo de notas dos alunos usando pelo menos três métodos de array diferentes. Note como o código se torna mais limpo e legível com a sintaxe moderna do JavaScript. ## Quiz Pós-Aula Quiz pós-aula ## Revisão & Autoestudo Os arrays no JavaScript possuem muitos métodos associados que são extremamente úteis para manipulação de dados. Leia sobre esses métodos e experimente alguns deles (como push, pop, slice e splice) em um array criado por você. ## Tarefa Iterar um Array --- ## 📊 Resumo do Seu Kit de Ferramentas de Arrays e Loops --- ## 🚀 Cronograma de Domínio de Arrays e Loops ### ⚡ O Que Você Pode Fazer nos Próximos 5 Minutos - [ ] Crie um array com seus filmes favoritos e acesse elementos específicos - [ ] Escreva um loop for que conte de 1 a 10 - [ ] Experimente o desafio de métodos modernos de array da aula - [ ] Pratique indexação de arrays no console do navegador ### 🎯 O Que Você Pode Realizar Nesta Hora - [ ] Complete o quiz pós-aula e revise conceitos desafiadores - [ ] Construa o analisador de notas abrangente do desafio do GitHub Copilot - [ ] Crie um carrinho de compras simples que adiciona e remove itens - [ ] Pratique a conversão entre diferentes tipos de loops - [ ] Experimente métodos de array como push, pop, slice e splice ### 📅 Sua Jornada de Processamento de Dados de Uma Semana - [ ] Complete a tarefa "Iterar um Array" com melhorias criativas - [ ] Construa um aplicativo de lista de tarefas usando arrays e loops - [ ] Crie uma calculadora de estatísticas simples para dados numéricos - [ ] Pratique com métodos de array no MDN - [ ] Construa uma interface de galeria de fotos ou playlist de música - [ ] Explore programação funcional com map, filter e reduce ### 🌟 Sua Transformação de Um Mês - [ ] Domine operações avançadas de array e otimização de desempenho - [ ] Construa um painel completo de visualização de dados - [ ] Contribua para projetos de código aberto envolvendo processamento de dados - [ ] Ensine alguém sobre arrays e loops com exemplos práticos - [ ] Crie uma biblioteca pessoal de funções reutilizáveis para processamento de dados - [ ] Explore algoritmos e estruturas de dados baseados em arrays ### 🏆 Check-in Final do Campeão de Processamento de Dados Celebre sua maestria em arrays e loops: - Qual foi a operação de array mais útil que você aprendeu para aplicações do mundo real? - Qual tipo de loop parece mais natural para você e por quê? - Como entender arrays e loops mudou sua abordagem para organizar dados? - Qual tarefa complexa de processamento de dados você gostaria de enfrentar a seguir? --- Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.

javascript,array,loop

Introdução ao JavaScript

JavaScript é a linguagem da web. Nestes quatro módulos, vais aprender os seus conceitos básicos. ### Tópicos 1. Variáveis e Tipos de Dados 2. Funções e Métodos 3. Tomar Decisões com JavaScript 4. Arrays e Ciclos ### Créditos Estes módulos foram escritos com ♥️ por Jasmine Greenaway, Christopher Harrison e Chris Noring Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se uma tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes do uso desta tradução.

javascript

Fundamentos de JavaScript: Tipos de Dados

Os tipos de dados são um dos conceitos fundamentais em JavaScript que vais encontrar em todos os programas que escreves. Pensa nos tipos de dados como o sistema de arquivamento usado pelos antigos bibliotecários de Alexandria – eles tinham lugares específicos para rolos com poesia, matemática e registos históricos. O JavaScript organiza a informação de forma semelhante com diferentes categorias para diferentes tipos de dados. Nesta lição, vamos explorar os tipos de dados principais que fazem o JavaScript funcionar. Vais aprender como lidar com números, texto, valores verdadeiros/falsos, e perceber por que escolher o tipo correto é essencial para os teus programas. Estes conceitos podem parecer abstratos no início, mas com prática, tornar-se-ão naturais. Compreender os tipos de dados tornará tudo o resto em JavaScript muito mais claro. Tal como os arquitetos precisam de conhecer os diferentes materiais de construção antes de erguer uma catedral, estes fundamentos vão suportar tudo o que construa daqui para a frente. ## Quiz Pré-Aula Quiz pré-aula Esta lição cobre os fundamentos do JavaScript, a linguagem que proporciona interatividade na web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Vamos começar com as variáveis e os tipos de dados que nelas habitam! ## Variáveis As variáveis são blocos de construção fundamentais na programação. Tal como os frascos rotulados que os alquimistas medievais usavam para armazenar diferentes substâncias, as variáveis permitem-te guardar informação e dar-lhe um nome descritivo para poderes referenciá-la mais tarde. Precisas de lembrar a idade de alguém? Armazena-a numa variável chamada age. Queres acompanhar o nome de um utilizador? Guarda-o numa variável chamada userName. Vamos focar-nos na abordagem moderna para criar variáveis em JavaScript. As técnicas que vais aprender aqui representam anos de evolução da linguagem e boas práticas desenvolvidas pela comunidade de programadores. Criar e declarar uma variável tem a seguinte sintaxe [keyword] [name]. É composta pelas duas partes: - Palavra-chave. Usa let para variáveis que podem mudar, ou const para valores que se mantêm iguais. - O nome da variável, este é um nome descritivo que escolhes tu. ✅ A palavra-chave let foi introduzida no ES6 e dá à tua variável o chamado _block scope_. Recomenda-se usar let ou const em vez da palavra-chave mais antiga var. Vamos abordar block scopes com mais detalhe em partes futuras. ### Tarefa - trabalhar com variáveis 1. Declara uma variável. Vamos começar por criar a nossa primeira variável: ```javascript let myVariable; ``` O que isto concretiza: - Isto diz ao JavaScript para criar uma localização de armazenamento chamada myVariable - O JavaScript aloca espaço na memória para esta variável - A variável atualmente não tem valor (undefined) 2. Dá-lhe um valor. Agora vamos colocar algo na nossa variável: ```javascript myVariable = 123; ``` Como a atribuição funciona: - O operador = atribui o valor 123 à nossa variável - A variável agora contém este valor em vez de ser undefined - Podes referenciar este valor ao longo do teu código usando myVariable > Nota: o uso de = nesta lição significa que estamos a usar um "operador de atribuição", usado para definir um valor a uma variável. Não denota igualdade. 3. Fazê-lo de forma inteligente. Na verdade, vamos combinar esses dois passos: ```javascript let myVariable = 123; ``` Esta abordagem é mais eficiente: - Estás a declarar a variável e a atribuir um valor numa só instrução - É a prática padrão entre os programadores - Isto reduz o comprimento do código, mantendo a clareza 4. Mudar de ideia. E se quisermos armazenar um número diferente? ```javascript myVariable = 321; ``` Compreendendo a reatribuição: - A variável agora contém 321 em vez de 123 - O valor anterior é substituído – as variáveis armazenam apenas um valor de cada vez - Esta mutabilidade é a característica chave das variáveis declaradas com let ✅ Experimenta! Podes escrever JavaScript diretamente no teu navegador. Abre uma janela do navegador e navega para as Ferramentas do Desenvolvedor. Na consola, vais encontrar um prompt; escreve let myVariable = 123, pressiona Enter, depois escreve myVariable. O que acontece? Vais aprender mais sobre estes conceitos nas lições seguintes. ### 🧠 Verificação de Competência em Variáveis: Sentir-se à vontade Vamos ver como te sentes em relação às variáveis: - Consegues explicar a diferença entre declarar e atribuir uma variável? - O que acontece se tentares usar uma variável antes de a declarares? - Quando escolherias let em vez de const para uma variável? ## Constantes Por vezes precisas de armazenar informação que nunca deve mudar durante a execução do programa. Pensa nas constantes como os princípios matemáticos que Euclides estabeleceu na Grécia antiga – uma vez provados e documentados, permaneceram fixos para toda a referência futura. As constantes funcionam de forma semelhante às variáveis, mas com uma restrição importante: uma vez que atribuis o seu valor, ele não pode ser alterado. Esta imutabilidade ajuda a evitar modificações acidentais a valores críticos no teu programa. A declaração e inicialização de uma constante segue os mesmos conceitos que uma variável, com exceção da palavra-chave const. Normalmente, as constantes são declaradas com letras maiúsculas. Isto é o que este código faz: - Cria uma constante chamada MY_VARIABLE com o valor 123 - Usa a convenção de nomes em maiúsculas para constantes - Impede quaisquer alterações futuras a este valor As constantes têm duas regras principais: - Deves atribuir um valor imediatamente – não são permitidas constantes vazias! - Nunca podes alterar esse valor – o JavaScript dará erro se tentares. Vamos ver o que quero dizer: Valor simples - O seguinte NÃO é permitido: ```javascript const PI = 3; PI = 4; // não permitido ``` O que precisas de lembrar: - Tentativas de reatribuição a uma constante causam erro - Protege valores importantes contra alterações acidentais - Garante que o valor permanece consistente durante o teu programa A referência a objeto está protegida - O seguinte NÃO é permitido: ```javascript const obj = { a: 3 }; obj = { b: 5 } // não permitido ``` Compreendendo estes conceitos: - Impede substituir o objeto inteiro por outro novo - Protege a referência ao objeto original - Mantém a identidade do objeto na memória O valor do objeto não está protegido - O seguinte É permitido: ```javascript const obj = { a: 3 }; obj.a = 5; // permitido ``` Analisando o que acontece aqui: - Modifica o valor da propriedade dentro do objeto - Mantém a mesma referência ao objeto - Demonstra que o conteúdo do objeto pode mudar enquanto a referência se mantém constante > Nota, um const significa que a referência está protegida contra reatribuição. O valor não é _imutável_ e pode mudar, especialmente se for uma estrutura complexa como um objeto. ## Tipos de Dados O JavaScript organiza a informação em diferentes categorias chamadas tipos de dados. Este conceito espelha como os antigos estudiosos categorizaram o conhecimento – Aristóteles distinguiu entre diferentes tipos de raciocínio, sabendo que os princípios lógicos não podiam ser aplicados uniformemente à poesia, matemática e filosofia natural. Os tipos de dados são importantes porque diferentes operações funcionam com diferentes tipos de informação. Tal como não podes fazer aritmética com o nome de uma pessoa ou alfabetizar uma equação matemática, o JavaScript precisa do tipo de dado apropriado para cada operação. Compreender isto evita erros e torna o teu código mais fiável. As variáveis podem armazenar muitos tipos diferentes de valores, como números e texto. Estes vários tipos de valores são conhecidos como o tipo de dado. Os tipos de dados são uma parte importante do desenvolvimento de software porque ajudam os programadores a tomar decisões sobre como o código deve ser escrito e como o software deve funcionar. Além disso, alguns tipos de dados têm funcionalidades únicas que ajudam a transformar ou extrair informação adicional de um valor. ✅ Os Tipos de Dados também são chamados primitivas de dados do JavaScript, pois são os tipos de dados de nível mais baixo providenciados pela linguagem. Existem 7 tipos de dados primitivos: string, number, bigint, boolean, undefined, null e symbol. Tira um momento para visualizar o que cada uma dessas primitivas pode representar. O que é uma zebra? E 0? true? ### Números Os números são o tipo de dado mais direto em JavaScript. Quer estejas a trabalhar com números inteiros como 42, decimais como 3.14, ou números negativos como -5, o JavaScript lida com eles de forma uniforme. Lembras-te da nossa variável de antes? Aquele 123 que armazenámos era na verdade um tipo de dado número: Características chave: - O JavaScript reconhece automaticamente valores numéricos - Podes realizar operações matemáticas com estas variáveis - Não é necessária declaração explícita do tipo As variáveis podem armazenar todos os tipos de números, incluindo decimais ou números negativos. Os números também podem ser usados com operadores aritméticos, abordados na próxima secção. ### Operadores Aritméticos Os operadores aritméticos permitem realizar cálculos matemáticos em JavaScript. Estes operadores seguem os mesmos princípios que os matemáticos usaram durante séculos – os mesmos símbolos que apareceram nos trabalhos de estudiosos como Al-Khwarizmi, que desenvolveu a notação algébrica. Os operadores funcionam como se esperaria da matemática tradicional: mais para adição, menos para subtração, e assim por diante. Existem vários tipos de operadores para usar em funções aritméticas, e alguns estão listados aqui: ✅ Experimenta! Tenta uma operação aritmética na consola do teu navegador. Os resultados surpreendem-te? ### 🧮 Verificação de Habilidades Matemáticas: Calcular com Confiança Testa o teu entendimento de aritmética: - Qual a diferença entre / (divisão) e % (resto)? - Consegues prever o que é que 10 % 3 equivale? (Dica: não é 3.33...) - Porque poderia o operador resto ser útil na programação? ### Strings Em JavaScript, os dados textuais são representados como strings. O termo "string" vem do conceito de caracteres ligados em sequência, tal como os escribas em mosteiros medievais ligavam letras para formar palavras e frases nos seus manuscritos. As strings são fundamentais para o desenvolvimento web. Cada pedaço de texto exibido num website – nomes de utilizadores, rótulos de botões, mensagens de erro, conteúdos – é tratado como dados string. Compreender strings é essencial para criar interfaces de utilizador funcionais. As strings são conjuntos de caracteres que residem entre aspas simples ou duplas. Compreendendo estes conceitos: - Usa aspas simples ' ou aspas duplas " para definir strings - Armazena dados textuais que podem incluir letras, números e símbolos - Atribui valores string a variáveis para uso posterior - Exige aspas para distinguir texto de nomes de variáveis Lembra-te de usar aspas quando escreves uma string, caso contrário o JavaScript irá assumir que é o nome de uma variável. ### Formatação de Strings A manipulação de strings permite combinar elementos de texto, incorporar variáveis e criar conteúdo dinâmico que responde ao estado do programa. Esta técnica possibilita construir texto programaticamente. Por vezes precisas de juntar várias strings – este processo chama-se concatenação. Para concatenar duas ou mais strings, ou juntá-las, use o operador +. Passo a passo, aqui está o que está a acontecer: - Combina múltiplas strings usando o operador + - Junta strings diretamente sem espaços no primeiro exemplo - Adiciona caracteres de espaço " " entre strings para melhor legibilidade - Insere pontuação como vírgulas para criar uma formatação correta ✅ Porque é que 1 + 1 = 2 em JavaScript, mas '1' + '1' = 11? Pense nisso. E '1' + 1? Template literals são outra forma de formatar strings, exceto que em vez de aspas, usa-se a crase. Tudo o que não for texto simples tem de ser colocado dentro de placeholders ${ }. Isto inclui quaisquer variáveis que possam ser strings. Vamos entender cada parte: - Usa crases ` `` em vez de aspas regulares para criar template literals - Embute variáveis diretamente usando a sintaxe ${} do placeholder - Preserva espaços e formatação exatamente como estão escritos - Fornece uma forma mais limpa de criar strings complexas com variáveis Pode atingir os seus objetivos de formatação com qualquer um dos métodos, mas os template literals respeitam quaisquer espaços e quebras de linha. ✅ Quando usaria um template literal em vez de uma string simples? ### 🔤 Verificação de Domínio de Strings: Confiança na Manipulação de Texto Avalie as suas competências em strings: - Consegue explicar porque é que '1' + '1' é igual a '11' em vez de 2? - Qual método de string acha mais legível: concatenação ou template literals? - O que acontece se esquecer as aspas em volta de uma string? ### Booleanos Booleanos representam a forma mais simples de dados: só podem conter um de dois valores – true ou false. Este sistema de lógica binária remonta ao trabalho de George Boole, um matemático do século XIX que desenvolveu a álgebra Booleana. Apesar da sua simplicidade, os booleanos são essenciais para a lógica dos programas. Permitem que o seu código tome decisões baseadas em condições – se um utilizador está autenticado, se um botão foi clicado, ou se certos critérios são cumpridos. Booleanos podem ter apenas dois valores: true ou false. Booleanos ajudam a decidir quais linhas de código devem ser executadas quando certas condições são verdadeiras. Em muitos casos, os operadores ajudam a definir o valor de um Booleano e frequentemente vai notar e escrever variáveis a serem inicializadas ou os seus valores atualizados com um operador. No exemplo acima, nós: - Criámos uma variável que armazena o valor Booleano true - Demonstraremos como armazenar o valor Booleano false - Utilizámos as palavras-chave exatas true e false (sem aspas) - Preparamos estas variáveis para serem usadas em declarações condicionais ✅ Uma variável pode ser considerada 'truthy' se ela avalia para booleano true. Curiosamente, em JavaScript, todos os valores são truthy a menos que sejam definidos como falsy. ### 🎯 Verificação de Lógica Booleana: Competências de Tomada de Decisão Teste a sua compreensão dos booleanos: - Porque acha que JavaScript tem valores "truthy" e "falsy" para além de só true e false? - Consegue prever qual destes é falsy: 0, "0", [], "false"? - Como poderão os booleanos ser úteis no controlo do fluxo do programa? --- ## 📊 Resumo da Sua Caixa de Ferramentas de Tipos de Dados ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Crie um gestor de informação pessoal que demonstre todos os tipos de dados JavaScript que aprendeu nesta lição enquanto manipula cenários de dados do mundo real. Instrução: Construa um programa JavaScript que crie um objeto perfil de utilizador contendo: nome da pessoa (string), idade (number), estado de estudante (boolean), cores favoritas como um array, e um objeto morada com propriedades rua, cidade e código postal. Inclua funções para mostrar a informação do perfil e atualizar campos individuais. Certifique-se de demonstrar concatenação de strings, template literals, operações aritméticas com a idade, e lógica booleana para o estado de estudante. Saiba mais sobre o modo agente aqui. ## 🚀 Desafio JavaScript tem alguns comportamentos que podem surpreender os programadores. Aqui está um exemplo clássico para explorar: tente escrever isto na consola do seu navegador: let age = 1; let Age = 2; age == Age e observe o resultado. Retorna false – consegue determinar porquê? Isto representa um dos muitos comportamentos de JavaScript que vale a pena conhecer. Familiaridade com estas particularidades vai ajudá-lo a escrever código mais fiável e a depurar problemas com mais eficácia. ## Questionário pós-aula Questionário pós-aula ## Revisão e Autoestudo Dê uma vista de olhos a esta lista de exercícios JavaScript e experimente um. O que aprendeu? ## Tarefa Prática de Tipos de Dados ## 🚀 A Sua Linha Temporal de Domínio dos Tipos de Dados JavaScript ### ⚡ O Que Pode Fazer Nos Próximos 5 Minutos - [ ] Abra a consola do navegador e crie 3 variáveis com tipos de dados diferentes - [ ] Experimente o desafio: let age = 1; let Age = 2; age == Age e descubra porque é que é falso - [ ] Pratique concatenação de strings com o seu nome e número favorito - [ ] Teste o que acontece quando adiciona um número a uma string ### 🎯 O Que Pode Conquistar Nesta Hora - [ ] Complete o questionário pós-aula e reveja quaisquer conceitos confusos - [ ] Crie uma mini calculadora que some, subtraia, multiplique e divida dois números - [ ] Construa um formatador de nomes simples usando template literals - [ ] Explore as diferenças entre os operadores de comparação == e === - [ ] Pratique a conversão entre diferentes tipos de dados ### 📅 A Sua Base de JavaScript Para a Semana - [ ] Complete a tarefa com confiança e criatividade - [ ] Crie um objeto de perfil pessoal usando todos os tipos de dados aprendidos - [ ] Pratique com exercícios JavaScript da CSS-Tricks - [ ] Construa um validador de formulários simples usando lógica booleana - [ ] Experimente com arrays e tipos de dados de objeto (vista prévia das próximas lições) - [ ] Junte-se a uma comunidade de JavaScript e faça perguntas sobre tipos de dados ### 🌟 A Sua Transformação Durante o Mês - [ ] Integre o conhecimento de tipos de dados em projetos de programação maiores - [ ] Compreenda quando e porquê usar cada tipo de dado em aplicações reais - [ ] Ajude outros iniciantes a entender os fundamentos do JavaScript - [ ] Construa uma pequena aplicação que gere diferentes tipos de dados de utilizador - [ ] Explore conceitos avançados de tipos de dados como coerção de tipos e igualdade estrita - [ ] Contribua para projetos JavaScript open source com melhorias na documentação ### 🧠 Verificação Final de Domínio dos Tipos de Dados Celebre a sua base em JavaScript: - Qual tipo de dado o surpreendeu mais em termos do seu comportamento? - Quão confortável se sente ao explicar variáveis vs. constantes a um amigo? - Qual a coisa mais interessante que descobriu sobre o sistema de tipos de JavaScript? - Que aplicação do mundo real pode imaginar construir com estes fundamentos? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos por garantir a precisão, por favor tenha em conta que traduções automáticas podem conter erros ou imprecisões. O documento original, no seu idioma nativo, deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Fundamentos do JavaScript: Métodos e Funções

## Questionário Pré-Aula Questionário pré-aula Escrever o mesmo código repetidamente é uma das frustrações mais comuns da programação. As funções resolvem este problema permitindo que empacotes o código em blocos reutilizáveis. Pensa nas funções como as peças padronizadas que tornaram revolucionária a linha de montagem de Henry Ford – uma vez que crias um componente fiável, podes usá-lo onde for necessário sem reconstruir do zero. As funções permitem-te agrupar pedaços de código para os reutilizares ao longo do teu programa. Em vez de copiares e colares a mesma lógica em todos os lados, podes criar uma função uma vez e chamá-la sempre que for necessário. Esta abordagem mantém o teu código organizado e torna as atualizações muito mais fáceis. Nesta lição, irás aprender como criar as tuas próprias funções, passar-lhes informação e obter resultados úteis. Irás descobrir a diferença entre funções e métodos, aprender abordagens de sintaxe modernas e ver como as funções podem trabalhar com outras funções. Vamos construir estes conceitos passo a passo. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Métodos e Funções") ## Funções Uma função é um bloco de código autónomo que executa uma tarefa específica. Ela encapsula a lógica que podes executar sempre que for necessário. Em vez de escreveres o mesmo código várias vezes ao longo do teu programa, podes empacotá-lo numa função e chamar essa função sempre que precisares. Esta abordagem mantém o teu código limpo e torna as atualizações muito mais fáceis. Imagina o desafio de manutenção caso precisasses de alterar uma lógica dispersa por 20 locais diferentes no teu código. Dar nomes descritivos às tuas funções é essencial. Uma função bem nomeada comunica claramente o seu propósito – quando vês cancelTimer(), entendes imediatamente o que ela faz, assim como um botão claramente rotulado indica exatamente o que vai acontecer quando clicas nele. ## Criar e chamar uma função Vamos examinar como criar uma função. A sintaxe segue um padrão consistente: Vamos decompor isto: - A palavra-chave function diz ao JavaScript "Ei, estou a criar uma função!" - nameOfFunction é onde dás à tua função um nome descritivo - Os parênteses () são onde podes adicionar parâmetros (vamos abordar isso em breve) - As chavetas {} contêm o código que realmente é executado quando chamas a função Vamos criar uma função simples de saudação para ver isto em ação: Esta função imprime "Hello, world!" na consola. Depois de a definires, podes usá-la todas as vezes que precisares. Para executar (ou "chamar") a tua função, escreve o seu nome seguido de parênteses. O JavaScript permite que definas a tua função antes ou depois da chamares – o motor do JavaScript trata da ordem de execução. Quando executas esta linha, ela executa todo o código dentro da tua função displayGreeting, mostrando "Hello, world!" na consola do navegador. Podes chamar esta função repetidamente. ### 🧠 Verificação dos Fundamentos das Funções: Construindo as Tuas Primeiras Funções Vamos ver como estás a sentir-te em relação às funções básicas: - Consegues explicar porque usamos chavetas {} nas definições de funções? - O que acontece se escreveres displayGreeting sem os parênteses? - Porque podes querer chamar a mesma função várias vezes? ### Boas práticas para funções Aqui ficam algumas dicas para te ajudar a escrever ótimas funções: - Dá às tuas funções nomes claros e descritivos – o teu eu no futuro agradecerá! - Usa camelCase para nomes compostos (como calculateTotal em vez de calculate_total) - Mantém cada função focada em fazer bem uma tarefa ## Passar informação para uma função A nossa função displayGreeting é limitada – só pode mostrar "Hello, world!" para todos. Os parâmetros permitem que tornemos as funções mais flexíveis e úteis. Parâmetros funcionam como espaços reservados onde podes inserir diferentes valores cada vez que usas a função. Assim, a mesma função pode trabalhar com informação diferente em cada chamada. Listas os parâmetros dentro dos parênteses ao definires a tua função, separando múltiplos parâmetros com vírgulas: Cada parâmetro funciona como um espaço reservado – quando alguém chama a tua função, fornece valores reais que são colocados nesses espaços. Vamos atualizar a nossa função de saudação para aceitar o nome de alguém: Repara como usamos aspas invertidas (` `) e ${}` para inserir o nome diretamente na mensagem – isto chama-se template literal, e é uma forma muito útil de construir strings com variáveis embutidas. Agora, quando chamamos a nossa função, podemos passar qualquer nome: O JavaScript pega na string 'Christopher', atribui-a ao parâmetro name e cria a mensagem personalizada "Hello, Christopher!" ## Valores predefinidos E se quisermos tornar alguns parâmetros opcionais? É aqui que os valores predefinidos são muito úteis! Digamos que queremos que as pessoas possam personalizar a palavra de saudação, mas se não especificarem nenhuma, usaremos "Hello" como padrão. Podes definir valores predefinidos usando o sinal de igual, tal como definiste uma variável: Aqui, name ainda é obrigatório, mas salutation tem um valor de reserva 'Hello' caso ninguém forneça uma saudação diferente. Agora podemos chamar esta função de duas formas diferentes: Na primeira chamada, o JavaScript usa o padrão "Hello" porque não especificámos uma saudação. Na segunda chamada, usa o nosso "Hi" personalizado em vez disso. Esta flexibilidade torna as funções adaptáveis a diferentes cenários. ### 🎛️ Verificação de Domínio em Parâmetros: Tornar Funções Flexíveis Testa a tua compreensão dos parâmetros: - Qual é a diferença entre um parâmetro e um argumento? - Porque são os valores predefinidos úteis na programação prática? - Consegues prever o que acontece se passares mais argumentos do que parâmetros? ## Valores de retorno Até agora, as nossas funções apenas imprimiram mensagens na consola, mas e se quiseres que uma função calcule algo e te devolva o resultado? É aqui que os valores de retorno entram. Em vez de apenas mostrar algo, uma função pode devolver um valor que podes armazenar numa variável ou usar noutras partes do teu código. Para devolver um valor, usas a palavra-chave return seguida do que quiseres devolver: Aqui está algo importante: quando uma função alcança uma instrução return, ela imediatamente para a execução e devolve esse valor a quem a chamou. Vamos modificar a nossa função de saudação para devolver a mensagem em vez de a imprimir: Agora, em vez de imprimir a saudação, esta função cria a mensagem e devolve-a para nós. Para usar o valor retornado, podemos armazená-lo numa variável tal como qualquer outro valor: Agora greetingMessage contém "Hello, Christopher" e podemos usá-la em qualquer parte do nosso código – para mostrar numa página web, incluir num email ou passar para outra função. ### 🔄 Verificação de Valores de Retorno: Obter Resultados Avalia a tua compreensão de valores de retorno: - O que acontece ao código após uma instrução return numa função? - Porque é que devolver valores é geralmente melhor do que apenas imprimir na consola? - Uma função pode devolver diferentes tipos de valores (string, número, booleano)? ## Funções como parâmetros para funções Funções podem ser passadas como parâmetros para outras funções. Embora este conceito possa parecer complexo inicialmente, é uma funcionalidade poderosa que permite padrões de programação flexíveis. Este padrão é muito comum quando queres dizer "quando algo acontecer, faz isto outro". Por exemplo, "quando o temporizador acabar, executa este código" ou "quando o utilizador clicar no botão, chama esta função". Vamos ver setTimeout, que é uma função incorporada que espera um certo tempo e depois executa algum código. Precisamos de lhe dizer que código executar – caso perfeito para passar uma função! Experimenta este código – depois de 3 segundos vais ver uma mensagem: Repara como passamos displayDone (sem parênteses) para setTimeout. Não estamos a chamar a função nós próprios – estamos a entregá-la ao setTimeout e a dizer "chama isto daqui a 3 segundos." ### Funções anónimas Por vezes precisas de uma função para uma coisa só e não queres dar-lhe um nome. Pensa nisso – se só vais usar uma função uma vez, porque entupir o teu código com um nome extra? O JavaScript permite criar funções anónimas – funções sem nome que podes definir exatamente onde precisas delas. Aqui está como podemos reescrever o nosso exemplo do temporizador usando uma função anónima: Isto obtém o mesmo resultado, mas a função está definida diretamente dentro da chamada setTimeout, eliminando a necessidade de uma declaração de função separada. ### Funções arrow (flecha) O JavaScript moderno tem uma forma ainda mais curta de escrever funções chamadas funções arrow. Usam => (que parece uma flecha – percebes?) e são super populares entre os programadores. Funções arrow permitem dispensar a palavra-chave function e escrever código mais conciso. Aqui está o nosso exemplo do temporizador usando uma função arrow: Os () são onde iriam os parâmetros (vazio neste caso), depois vem a seta =>, e finalmente o corpo da função dentro das chavetas. Isto proporciona a mesma funcionalidade com uma sintaxe mais curta. ### Quando usar cada estratégia Quando deves usar cada abordagem? Uma regra prática: se vais usar a função várias vezes, dá-lhe um nome e define-a separadamente. Se for para um uso específico, considera uma função anónima. Tanto funções arrow como a sintaxe tradicional são escolhas válidas, embora funções arrow sejam predominantes em código moderno JavaScript. ### 🎨 Verificação de Estilos de Função: Escolhendo a Sintaxe Certa Testa a tua compreensão da sintaxe: - Quando poderás preferir funções arrow em vez da sintaxe tradicional de função? - Qual é a principal vantagem das funções anónimas? - Consegues pensar numa situação em que uma função nomeada seja melhor que uma anónima? --- ## 🚀 Desafio Consegues articular numa frase a diferença entre funções e métodos? Experimenta! ## Desafio do Agente GitHub Copilot 🚀 Usa o modo Agente para completar o desafio seguinte: Descrição: Cria uma biblioteca utilitária de funções matemáticas que demonstre diferentes conceitos de funções abordados nesta lição, incluindo parâmetros, valores predefinidos, valores de retorno e funções arrow. Prompt: Cria um ficheiro JavaScript chamado mathUtils.js que contenha as seguintes funções: 1. Uma função add que aceita dois parâmetros e devolve a sua soma 2. Uma função multiply com valores predefinidos para os parâmetros (o segundo parámetro tem como padrão 1) 3. Uma função arrow square que aceita um número e devolve o seu quadrado 4. Uma função calculate que aceita outra função como parâmetro e dois números, e depois aplica essa função a esses números 5. Demonstra a chamada de cada função com casos de teste apropriados Sabe mais sobre modo agente aqui. ## Questionário Pós-Aula Questionário pós-aula ## Revisão e Estudo Autónomo Vale a pena ler um pouco mais sobre funções arrow, pois são cada vez mais usadas em bases de código. Pratica a escrita de uma função, e depois reescrevê-la com esta sintaxe. ## Trabalho de Casa Divertir-se com Funções --- ## 🧰 Resumo da Tua Caixa de Ferramentas de Funções JavaScript --- ## 🚀 A Tua Linha Temporal de Domínio em Funções JavaScript ### ⚡ O que Podes Fazer Nos Próximos 5 Minutos - [ ] Escrever uma função simples que devolva o teu número favorito - [ ] Criar uma função com dois parâmetros que os some juntos - [ ] Tenta converter uma função tradicional para a sintaxe de arrow function - [ ] Pratica o desafio: explica a diferença entre funções e métodos ### 🎯 O Que Podes Conquistar Nesta Hora - [ ] Completa o quiz pós-aula e revisa quaisquer conceitos confusos - [ ] Constrói a biblioteca de utilitários matemáticos do desafio GitHub Copilot - [ ] Cria uma função que use outra função como parâmetro - [ ] Pratica a escrita de funções com parâmetros por defeito - [ ] Experimenta com template literals nos valores de retorno das funções ### 📅 A Tua Semana de Domínio das Funções - [ ] Completa a tarefa "Diversão com Funções" com criatividade - [ ] Refatora algum código repetitivo que tenhas escrito em funções reutilizáveis - [ ] Constrói uma calculadora pequena usando apenas funções (sem variáveis globais) - [ ] Pratica arrow functions com métodos de arrays como map() e filter() - [ ] Cria uma coleção de funções utilitárias para tarefas comuns - [ ] Estuda funções de ordem superior e conceitos de programação funcional ### 🌟 A Tua Transformação Mensal - [ ] Domina conceitos avançados de funções como closures e scope - [ ] Constrói um projeto que faça uso intenso de composição de funções - [ ] Contribui para o open source melhorando a documentação das funções - [ ] Ensina a outra pessoa sobre funções e diferentes estilos de sintaxe - [ ] Explora paradigmas de programação funcional em JavaScript - [ ] Cria uma biblioteca pessoal de funções reutilizáveis para projetos futuros ### 🏆 Check-in Final do Campeão das Funções Celebra o teu domínio das funções: - Qual é a função mais útil que criaste até agora? - Como é que aprender sobre funções mudou a tua forma de pensar sobre organização de código? - Que sintaxe de funções preferes e porquê? - Que problema do mundo real resolverias escrevendo uma função? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos pela precisão, por favor, tenha em atenção que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, é recomendada a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas resultantes do uso desta tradução. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Conceitos Básicos de JavaScript: Tomando Decisões

Alguma vez se perguntou como as aplicações tomam decisões inteligentes? Como é que um sistema de navegação escolhe a rota mais rápida, ou como é que um termóstato decide quando ligar o aquecimento? Este é o conceito fundamental da tomada de decisões em programação. Assim como a Máquina Analítica de Charles Babbage foi concebida para seguir diferentes sequências de operações com base em condições, os programas modernos em JavaScript precisam fazer escolhas baseadas em circunstâncias variadas. Esta capacidade de ramificar e tomar decisões é o que transforma código estático em aplicações responsivas e inteligentes. Nesta lição, vai aprender como implementar lógica condicional nos seus programas. Vamos explorar declarações condicionais, operadores de comparação e expressões lógicas que permitem ao seu código avaliar situações e responder de forma apropriada. ## Questionário Pré-Aula Questionário pré-aula A capacidade de tomar decisões e controlar o fluxo do programa é um aspeto fundamental da programação. Esta secção cobre como controlar o caminho de execução dos seus programas JavaScript usando valores Booleanos e lógica condicional. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Um Breve Recapitular dos Booleanos Antes de explorar a tomada de decisões, vamos revisitar os valores Booleanos da nossa lição anterior. Nomeados em homenagem ao matemático George Boole, estes valores representam estados binários – ou true ou false. Não há ambiguidade, nem meio-termo. Estes valores binários formam a base de toda a lógica computacional. Cada decisão que o seu programa toma reduz-se, em última análise, a uma avaliação Booleana. Criar variáveis Booleanas é simples: Isto cria duas variáveis com valores Booleanos explícitos. ✅ Os Booleanos são nomeados em homenagem ao matemático, filósofo e lógico inglês George Boole (1815–1864). ## Operadores de Comparação e Booleanos Na prática, raramente define valores Booleanos manualmente. Em vez disso, gera-os ao avaliar condições: "Será que este número é maior do que aquele?" ou "Estes valores são iguais?" Os operadores de comparação permitem essas avaliações. Comparam valores e retornam resultados Booleanos com base na relação entre os operandos. ✅ Teste os seus conhecimentos escrevendo algumas comparações na consola do navegador. Algum dado retornado o surpreende? ### 🧠 Teste de Domínio em Comparações: Entendendo a Lógica Booleana Teste o seu entendimento das comparações: - Por que acha que === (igualdade estrita) é geralmente preferido em vez de == (igualdade frouxa)? - Consegue prever o que 5 === '5' retorna? E 5 == '5'? - Qual é a diferença entre !== e !=? ## Declaração If A declaração if é como fazer uma pergunta no seu código. "Se esta condição for verdadeira, então faça isto." Provavelmente é a ferramenta mais importante que vai usar para tomar decisões em JavaScript. Aqui está como funciona: A condição vai dentro dos parênteses e, se for true, o JavaScript executa o código dentro das chaves. Se for false, o JavaScript simplesmente ignora todo esse bloco. Vai frequentemente usar operadores de comparação para criar estas condições. Vamos ver um exemplo prático: Como 1000 >= 800 avalia para true, o código dentro do bloco é executado, exibindo "A comprar um portátil novo!" na consola. ## Declaração If..Else Mas e se quiser que o seu programa faça algo diferente quando a condição for falsa? É aí que entra o else – é como ter um plano B. A declaração else dá-lhe uma forma de dizer "se esta condição não for verdadeira, faz esta outra coisa em vez disso." Agora, como 500 >= 800 é false, o JavaScript ignora o primeiro bloco e executa o bloco else em vez disso. Vai ver "Ainda não consigo pagar um portátil novo!" na consola. ✅ Teste o seu entendimento deste código e do seguinte ao executar na consola do navegador. Altere os valores das variáveis currentMoney e laptopPrice para alterar o retorno do console.log(). ### 🎯 Teste Lógico If-Else: Caminhos Condicionais Avalie o seu entendimento da lógica condicional: - O que acontece se currentMoney for exatamente igual a laptopPrice? - Consegue pensar num cenário do mundo real onde a lógica if-else seria útil? - Como poderia expandir isto para lidar com múltiplos intervalos de preço? ## Declaração Switch Por vezes, precisa comparar um valor com múltiplas opções. Embora pudesse encadear várias declarações if..else, esta abordagem torna-se difícil de gerir. A declaração switch fornece uma estrutura mais limpa para lidar com múltiplos valores discretos. O conceito assemelha-se aos sistemas mecânicos de comutação usados em centrais telefónicas antigas – um valor de entrada determina qual caminho específico é seguido pela execução. Aqui está como está estruturado: - O JavaScript avalia a expressão uma vez - Procura cada case para encontrar uma correspondência - Quando encontra uma correspondência, executa esse bloco de código - O break diz ao JavaScript para parar e sair do switch - Se nenhum caso combinar, executa o bloco default (se existir) Neste exemplo, o JavaScript vê que dayNumber é 2, encontra o case 2 correspondente, define dayName para "Terça-feira" e depois sai do switch. O resultado? "Hoje é Terça-feira" é exibido na consola. ✅ Teste o seu entendimento deste código e do seguinte ao executar na consola do navegador. Altere os valores da variável a para alterar o retorno do console.log(). ### 🔄 Domínio de Declaração Switch: Múltiplas Opções Teste o seu entendimento do switch: - O que acontece se esquecer um break? - Quando usaria switch em vez de múltiplas declarações if-else? - Porque é que o caso default é útil mesmo que pense ter coberto todas as possibilidades? ## Operadores Lógicos e Booleanos Decisões complexas frequentemente requerem avaliar múltiplas condições simultaneamente. Assim como a álgebra Booleana permite a matemáticos combinar expressões lógicas, a programação oferece operadores lógicos para conectar múltiplas condições Booleanas. Estes operadores permitem lógica condicional sofisticada combinando avaliações simples de verdadeiro/falso. Estes operadores permitem combinar condições de formas úteis: - E (&&) significa que ambas as condições devem ser verdadeiras - OU (||) significa que pelo menos uma condição deve ser verdadeira - NÃO (!) inverte verdadeiro para falso (e vice-versa) ## Condições e Decisões com Operadores Lógicos Vamos ver estes operadores lógicos em ação com um exemplo mais realista: Neste exemplo: calculamos um preço com 20% de desconto (640), depois avaliamos se os nossos fundos disponíveis cobrem ou o preço total OU o preço com desconto. Como 600 não atinge o limiar do preço com desconto de 640, a condição avalia para falso. ### 🧮 Verificação de Operadores Lógicos: Combinando Condições Teste o seu entendimento dos operadores lógicos: - Na expressão A && B, o que acontece se A for falso? Será que B sequer é avaliado? - Consegue pensar numa situação onde precisaria dos três operadores (&&, ||, !) juntos? - Qual é a diferença entre !user.isActive e user.isActive !== true? ### Operador de Negação Por vezes é mais fácil pensar quando algo NÃO é verdade. Por exemplo, em vez de perguntar "o utilizador está autenticado?", pode querer perguntar "o utilizador NÃO está autenticado?" O operador de exclamação (!) inverte a lógica para si. O operador ! é como dizer "o oposto de..." – se algo é true, ! torna-o false, e vice-versa. ### Expressões Ternárias Para atribuições condicionais simples, o JavaScript fornece o operador ternário. Esta sintaxe concisa permite escrever uma expressão condicional numa única linha, útil quando precisa atribuir um de dois valores com base numa condição. Lê-se como uma pergunta: "Esta condição é verdadeira? Se sim, usa este valor. Se não, usa aquele valor." Abaixo está um exemplo mais concreto: ✅ Reserve um minuto para ler este código algumas vezes. Compreende como estes operadores funcionam? Isto é o que esta linha está a dizer: "Será que firstNumber é maior que secondNumber? Se sim, guarda firstNumber em biggestNumber. Se não, guarda secondNumber em biggestNumber." O operador ternário é apenas uma forma mais curta de escrever esta declaração tradicional if..else: Ambas as abordagens produzem resultados idênticos. O operador ternário oferece concisão, enquanto a estrutura tradicional if-else pode ser mais legível para condições complexas. --- ## 🚀 Desafio Crie um programa que seja escrito primeiro com operadores lógicos e depois reescreva-o usando uma expressão ternária. Qual sintaxe prefere? --- ## Desafio GitHub Copilot Agent 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Crie um calculador de notas completo que demonstre múltiplos conceitos de tomada de decisão desta lição, incluindo declarações if-else, declarações switch, operadores lógicos e expressões ternárias. Prompt: Escreva um programa JavaScript que recebe a nota numérica de um aluno (0-100) e determina a sua nota em letras usando os seguintes critérios: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Abaixo de 60 Requisitos: 1. Use uma declaração if-else para determinar a nota em letras 2. Use operadores lógicos para verificar se o estudante passa (nota >= 60) E tem distinção (nota >= 90) 3. Use uma instrução switch para fornecer feedback específico para cada letra de nota 4. Use um operador ternário para determinar se o estudante é elegível para o próximo curso (nota >= 70) 5. Inclua validação de entrada para garantir que a pontuação esteja entre 0 e 100 Teste o seu programa com várias pontuações, incluindo casos limite como 59, 60, 89, 90 e entradas inválidas. Saiba mais sobre modo agente aqui. ## Questionário Pós-Aula Questionário pós-aula ## Revisão & Autoestudo Leia mais sobre os muitos operadores disponíveis para o utilizador na MDN. Explore o maravilhoso consultor de operadores do Josh Comeau! ## Tarefa Operadores --- ## 🧠 Resumo do Seu Kit de Ferramentas de Tomada de Decisão --- ## 🚀 A Sua Linha Temporal para Dominar a Tomada de Decisão em JavaScript ### ⚡ O Que Pode Fazer nos Próximos 5 Minutos - [ ] Praticar operadores de comparação na consola do navegador - [ ] Escrever uma simples instrução if-else que verifica a sua idade - [ ] Tentar o desafio: reescrever um if-else usando um operador ternário - [ ] Testar o que acontece com diferentes valores "truthy" e "falsy" ### 🎯 O Que Pode Concluir Nesta Hora - [ ] Completar o questionário pós-aula e rever quaisquer conceitos que tenham gerado dúvidas - [ ] Construir a calculadora de notas abrangente do desafio GitHub Copilot - [ ] Criar uma árvore de decisão simples para um cenário do mundo real (como escolher o que vestir) - [ ] Praticar combinar múltiplas condições com operadores lógicos - [ ] Experimentar instruções switch para diferentes usos ### 📅 Domínio da Lógica ao Longo da Semana - [ ] Completar a tarefa de operadores com exemplos criativos - [ ] Construir uma aplicação de mini quiz usando várias estruturas condicionais - [ ] Criar um validador de formulário que verifica múltiplas condições de entrada - [ ] Praticar os exercícios do consultor de operadores do Josh Comeau - [ ] Refatorar código existente para usar estruturas condicionais mais adequadas - [ ] Estudar avaliação de curto-circuito e implicações de desempenho ### 🌟 A Sua Transformação ao Longo do Mês - [ ] Dominar condições complexas aninhadas mantendo a legibilidade do código - [ ] Construir uma aplicação com lógica sofisticada de tomada de decisão - [ ] Contribuir para open source melhorando a lógica condicional em projetos existentes - [ ] Ensinar outra pessoa sobre diferentes estruturas condicionais e quando usar cada uma - [ ] Explorar abordagens de programação funcional para lógica condicional - [ ] Criar um guia de referência pessoal para boas práticas condicionais ### 🏆 Verificação Final do Campeão da Tomada de Decisão Celebre a sua maestria no pensamento lógico: - Qual foi a lógica de decisão mais complexa que implementou com sucesso? - Qual estrutura condicional lhe parece mais natural e porquê? - Como o aprender sobre operadores lógicos mudou a sua abordagem à resolução de problemas? - Que aplicação real beneficiaria de uma lógica sofisticada de tomada de decisão? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos por garantir a precisão, por favor tenha em atenção que traduções automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes do uso desta tradução. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript Básico: Arrays e Loops

## Quiz Pré-Lição Quiz pré-lição Já alguma vez se questionou como os sites mantêm o controlo dos itens do carrinho de compras ou mostram a sua lista de amigos? É aqui que entram os arrays e os loops. Arrays são como contentores digitais que guardam múltiplas informações, enquanto loops permitem trabalhar com todos esses dados de forma eficiente sem código repetitivo. Juntos, esses dois conceitos formam a base para lidar com informação nos seus programas. Aprenderá a passar de escrever manualmente cada passo para criar um código inteligente e eficiente que pode processar centenas ou até milhares de itens rapidamente. No final desta lição, compreenderá como realizar tarefas complexas de dados com apenas algumas linhas de código. Vamos explorar estes conceitos essenciais de programação. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Pense nos arrays como um arquivo digital - em vez de armazenar um documento por gaveta, pode organizar vários itens relacionados num único contentor estruturado. Em termos de programação, arrays permitem armazenar múltiplos pedaços de informação num pacote organizado. Quer esteja a construir uma galeria de fotos, a gerir uma lista de tarefas ou a acompanhar pontuações altas num jogo, os arrays fornecem a base para a organização dos dados. Vamos ver como funcionam. ✅ Os arrays estão por todo o lado! Consegue pensar num exemplo real de array, como um conjunto de painéis solares? ### Criar Arrays Criar um array é super simples - basta usar colchetes! O que está a acontecer aqui? Acabou de criar um contentor vazio usando esses colchetes []. Pense nele como uma prateleira vazia numa biblioteca - está pronta para guardar os livros que quiser organizar lá. Também pode preencher o seu array com valores iniciais logo desde o início: Coisas interessantes a notar: - Pode armazenar texto, números ou até valores verdadeiro/falso no mesmo array - Basta separar cada item com uma vírgula - fácil! - Arrays são perfeitos para manter informações relacionadas juntas ### Indexação de Arrays Aqui está algo que pode parecer estranho à primeira vista: os arrays numeram os seus itens começando do 0, não do 1. Esta indexação baseada em zero tem origem na forma como a memória do computador funciona - é uma convenção de programação desde os primeiros dias de linguagens como C. Cada lugar no array recebe o seu próprio número de endereço chamado índice. ✅ Surpreende-o que os arrays comecem no índice zero? Em algumas linguagens de programação, os índices começam no 1. Existe uma história interessante sobre isto, que pode ler na Wikipedia. Aceder a Elementos do Array: Análise do que acontece aqui: - Usa a notação de colchetes com o número do índice para aceder aos elementos - Retorna o valor armazenado nessa posição específica no array - Começa a contar a partir do 0, tornando o primeiro elemento o índice 0 Modificar Elementos do Array: No exemplo acima, nós: - Modificámos o elemento no índice 4 de "Rocky Road" para "Butter Pecan" - Adicionámos um novo elemento "Cookie Dough" no índice 5 - Expandimos automaticamente o comprimento do array ao adicionar além dos limites atuais ### Comprimento do Array e Métodos Comuns Os arrays vêm com propriedades e métodos incorporados que tornam o trabalho com dados muito mais fácil. Encontrar o Comprimento do Array: Pontos-chave a lembrar: - Retorna o número total de elementos no array - Atualiza-se automaticamente quando elementos são adicionados ou removidos - Fornece uma contagem dinâmica útil para loops e validações Métodos Essenciais de Arrays: Compreender estes métodos: - Adiciona elementos com push() (final) e unshift() (início) - Remove elementos com pop() (final) e shift() (início) - Localiza elementos com indexOf() e verifica existência com includes() - Retorna valores úteis como elementos removidos ou índices de posição ✅ Experimente por si próprio! Use a consola do seu navegador para criar e manipular um array à sua escolha. ### 🧠 Verificação de Fundamentos de Arrays: Organizando os Seus Dados Teste a sua compreensão de arrays: - Porque acha que os arrays começam a contar a partir do 0 em vez de 1? - O que acontece se tentar aceder a um índice que não existe (como arr[100] num array de 5 elementos)? - Consegue pensar em três cenários reais onde arrays seriam úteis? ## Loops Pense na famosa punição dos romances de Charles Dickens onde os alunos tinham de copiar frases repetidamente numa ardósia. Imagine se pudesse simplesmente instruir alguém para "escrever esta frase 100 vezes" e que isso fosse feito automaticamente. É exatamente isso que os loops fazem pelo seu código. Loops são como ter um assistente incansável que pode repetir tarefas sem erro. Quer precise de verificar cada item num carrinho de compras ou mostrar todas as fotos num álbum, os loops tratam da repetição de forma eficiente. JavaScript oferece vários tipos de loops para escolher. Vamos examinar cada um e entender quando usá-los. ### Loop For O for loop é como definir um temporizador - sabe exatamente quantas vezes quer que algo aconteça. É muito organizado e previsível, o que o torna perfeito quando trabalha com arrays ou precisa contar coisas. Estrutura do Loop For: Passo a passo, aqui está o que está a acontecer: - Inicializa a variável contador i a 0 no início - Verifica a condição i < 10 antes de cada iteração - Executa o bloco de código quando a condição é verdadeira - Incrementa i em 1 após cada iteração com i++ - Para quando a condição se torna falsa (quando i chega a 10) ✅ Execute este código na consola de um navegador. O que acontece quando faz pequenas alterações ao contador, condição ou expressão de iteração? Consegue fazê-lo correr para trás, criando uma contagem decrescente? ### 🗓️ Verificação de Domínio do Loop For: Repetição Controlada Avalie a sua compreensão do for loop: - Quais são as três partes de um loop for, e o que faz cada uma? - Como faria para percorrer um array de trás para a frente? - O que acontece se se esquecer da parte do incremento (i++)? ### Loop While O while loop é como dizer "continue a fazer isto até..." - pode não saber exatamente quantas vezes vai correr, mas sabe quando parar. É perfeito para coisas como pedir a um utilizador uma entrada até que este forneça o que precisa, ou procurar dados até encontrar o que procura. Características do Loop While: - Continua a executar enquanto a condição for verdadeira - Requer gestão manual de quaisquer variáveis contador - Verifica a condição antes de cada iteração - Risco de ciclos infinitos se a condição nunca se tornar falsa Compreendendo estes exemplos: - Gere manualmente a variável contador i dentro do corpo do loop - Incrementa o contador para evitar ciclos infinitos - Demonstra caso prático com entrada do utilizador e limitação de tentativas - Inclui mecanismos de segurança para impedir execução interminável ### ♾️ Verificação de Sabedoria do Loop While: Repetição Baseada em Condição Teste a sua compreensão do loop while: - Qual é o maior perigo ao usar loops while? - Quando escolheria um loop while em vez de um for? - Como pode prevenir ciclos infinitos? ### Alternativas Modernas para Loops JavaScript oferece sintaxe moderna para loops que pode tornar o seu código mais legível e menos propenso a erros. For...of Loop (ES6+): Vantagens chave do for...of: - Elimina a gestão de índices e possíveis erros “off-by-one” - Fornece acesso direto aos elementos do array - Melhora a legibilidade do código e reduz a complexidade da sintaxe Método forEach: O que precisa saber sobre forEach: - Executa uma função para cada elemento do array - Fornece tanto o valor do elemento como o índice como parâmetros - Não pode ser interrompido antecipadamente (ao contrário dos loops tradicionais) - Retorna undefined (não cria um novo array) ✅ Porque escolheria um loop for vs. um loop while? 17 mil visualizadores fizeram a mesma pergunta no StackOverflow, e algumas das opiniões podem ser interessantes para si. ### 🎨 Verificação da Sintaxe de Loops Modernos: Abraçando ES6+ Avalie a sua compreensão do JavaScript moderno: - Quais são as vantagens do for...of em relação aos loops for tradicionais? - Quando ainda pode preferir loops for tradicionais? - Qual é a diferença entre forEach e map? ## Loops e Arrays Combinar arrays com loops cria capacidades poderosas de processamento de dados. Esta dupla é fundamental para muitas tarefas de programação, desde mostrar listas até calcular estatísticas. Processamento Tradicional de Arrays: Vamos entender cada abordagem: - Usa a propriedade comprimento do array para determinar o limite do loop - Acede aos elementos pelo índice nos loops for tradicionais - Fornece acesso direto aos elementos nos loops for...of - Processa cada elemento do array exatamente uma vez Exemplo Prático de Processamento de Dados: Aqui está como este código funciona: - Inicializa variáveis para rastrear soma e extremos - Processa cada nota com um único loop eficiente - Acumula o total para cálculo da média - Regista os valores mais altos e mais baixos durante a iteração - Calcula estatísticas finais após o término do loop ✅ Experimente fazer um loop sobre um array criado por si na consola do seu navegador. --- ## Desafio do Agente GitHub Copilot 🚀 Use o modo Agente para completar o seguinte desafio: Descrição: Construa uma função abrangente de processamento de dados que combine arrays e loops para analisar um conjunto de dados e gerar insights significativos. Enunciado: Crie uma função chamada analyzeGrades que receba um array de objetos de notas de estudantes (cada um contendo propriedades de nome e pontuação) e retorne um objeto com estatísticas incluindo a maior pontuação, menor pontuação, pontuação média, número de estudantes que passaram (pontuação >= 70) e um array com os nomes dos estudantes que obtiveram acima da média. Use pelo menos dois tipos diferentes de loops na sua solução. Saiba mais sobre o modo agente aqui. ## 🚀 Desafio JavaScript oferece vários métodos modernos para arrays que podem substituir os loops tradicionais para tarefas específicas. Explore forEach, for-of, map, filter e reduce. O seu desafio: Refatore o exemplo das notas dos alunos usando pelo menos três métodos diferentes de arrays. Repare como o código fica muito mais limpo e legível com a sintaxe moderna do JavaScript. ## Questionário Pós-Aula Questionário pós-aula ## Revisão & Estudo Autónomo Os arrays em JavaScript têm muitos métodos associados que são extremamente úteis para manipulação de dados. Leia sobre estes métodos e experimente alguns deles (como push, pop, slice e splice) num array criado por si. ## Tarefa Loopar um Array --- ## 📊 Resumo da Sua Caixa de Ferramentas de Arrays & Loops --- ## 🚀 O Seu Cronograma de Domínio de Arrays & Loops ### ⚡ O Que Pode Fazer Nos Próximos 5 Minutos - [ ] Criar um array dos seus filmes favoritos e aceder a elementos específicos - [ ] Escrever um loop for que conte de 1 a 10 - [ ] Tentar o desafio dos métodos modernos de arrays da lição - [ ] Praticar a indexação de arrays na consola do seu navegador ### 🎯 O Que Pode Concluir Nesta Hora - [ ] Completar o questionário pós-lição e rever quaisquer conceitos difíceis - [ ] Construir o analisador completo de notas do desafio GitHub Copilot - [ ] Criar um carrinho de compras simples que adiciona e remove itens - [ ] Praticar a conversão entre diferentes tipos de loop - [ ] Experimentar métodos de array como push, pop, slice e splice ### 📅 A Sua Jornada de Uma Semana em Processamento de Dados - [ ] Completar a tarefa "Loopar um Array" com melhorias criativas - [ ] Construir uma aplicação de lista de tarefas usando arrays e loops - [ ] Criar uma calculadora simples de estatísticas para dados numéricos - [ ] Praticar com os métodos MDN para arrays - [ ] Construir uma galeria de fotos ou interface de playlist de música - [ ] Explorar programação funcional com map, filter e reduce ### 🌟 A Sua Transformação de Um Mês - [ ] Dominar operações avançadas em arrays e otimização de desempenho - [ ] Construir um painel completo de visualização de dados - [ ] Contribuir para projetos open source envolvendo processamento de dados - [ ] Ensinar outra pessoa sobre arrays e loops com exemplos práticos - [ ] Criar uma biblioteca pessoal de funções reutilizáveis para processamento de dados - [ ] Explorar algoritmos e estruturas de dados baseados em arrays ### 🏆 Verificação Final do Campeão de Processamento de Dados Celebre o seu domínio de arrays e loops: - Qual é a operação de array mais útil que aprendeu para aplicações do mundo real? - Qual tipo de loop lhe parece mais natural e porquê? - Como é que compreender arrays e loops mudou a sua abordagem à organização de dados? - Que tarefa complexa de processamento de dados gostaria de enfrentar a seguir? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos empenhemos em assegurar a precisão, por favor tenha em consideração que traduções automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes da utilização desta tradução. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array,loop

Introducere în JavaScript

JavaScript este limbajul web-ului. În aceste patru lecții, vei învăța elementele sale de bază. ### Subiecte 1. Variabile și Tipuri de Date 2. Funcții și Metode 3. Luarea Deciziilor cu JavaScript 4. Tablouri și Bucle ### Credite Aceste lecții au fost scrise cu ♥️ de Jasmine Greenaway, Christopher Harrison și Chris Noring --- Declinarea responsabilității: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși depunem eforturi pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.

javascript

Bazele JavaScript: Tipuri de date

Tipurile de date sunt unul dintre conceptele fundamentale în JavaScript pe care le vei întâlni în fiecare program pe care îl scrii. Gândește-te la tipurile de date ca la sistemul de arhivare folosit de bibliotecarii antici din Alexandria – aveau locuri specifice pentru sulurile care conțineau poezie, matematică și înregistrări istorice. JavaScript organizează informațiile într-un mod similar, cu categorii diferite pentru diferite tipuri de date. În această lecție, vom explora tipurile de date de bază care fac JavaScript să funcționeze. Vei învăța cum să gestionezi numerele, textele, valorile adevărat/fals și vei înțelege de ce alegerea tipului corect este esențială pentru programele tale. Aceste concepte pot părea abstracte la început, dar cu practică, vor deveni ceva natural. Înțelegerea tipurilor de date va face totul în JavaScript mult mai clar. Așa cum arhitecții trebuie să înțeleagă diferite materiale de construcție înainte de a ridica o catedrală, aceste fundamente vor susține tot ceea ce construiești de acum înainte. ## Test pre-lectură Test pre-lectură Această lecție acoperă elementele de bază ale JavaScript-ului, limbajul care oferă interactivitate pe web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Să începem cu variabilele și tipurile de date care le populează! ## Variabile Variabilele sunt blocuri fundamentale în programare. Ca borcanele etichetate pe care alchimiștii medievali le foloseau pentru a păstra diferite substanțe, variabilele îți permit să stochezi informații și să le dai un nume descriptiv astfel încât să le poți referi mai târziu. Trebuie să ții minte vârsta cuiva? Stocheaz-o într-o variabilă numită age. Vrei să urmărești numele unui utilizator? Păstrează-l într-o variabilă numită userName. Ne vom concentra pe metoda modernă de a crea variabile în JavaScript. Tehnicile pe care le vei învăța aici reprezintă ani de evoluție a limbajului și bune practici dezvoltate de comunitatea programatorilor. Crearea și declararea unei variabile are următoarea sintaxă [cuvânt cheie] [nume]. Este compusă din două părți: - Cuvânt cheie. Folosește let pentru variabile care pot fi modificate sau const pentru valori care rămân aceleași. - Numele variabilei, un nume descriptiv pe care îl alegi tu. ✅ Cuvântul cheie let a fost introdus în ES6 și oferă variabilei tale ceea ce se numește _block scope_. Este recomandat să folosești let sau const în locul cuvântului cheie mai vechi var. Vom discuta mai pe larg despre block scope în părțile viitoare. ### Sarcină - lucrul cu variabilele 1. Declară o variabilă. Să începem prin a crea prima noastră variabilă: ```javascript let myVariable; ``` Ce realizează acest pas: - Spune JavaScript să creeze un spațiu de stocare numit myVariable - JavaScript alocă spațiu în memorie pentru această variabilă - Variabila momentan nu are o valoare (undefined) 2. Dă-i o valoare. Acum pune ceva în variabila noastră: ```javascript myVariable = 123; ``` Cum funcționează atribuirea: - Operatorul = atribuie valoarea 123 variabilei noastre - Variabila conține acum această valoare în loc să fie undefined - Poți face referire la această valoare în tot codul folosind myVariable > Notă: folosirea lui = în această lecție înseamnă că folosim un „operator de atribuire”, folosit pentru a seta o valoare unei variabile. Nu indică egalitate. 3. Fă-o într-un mod inteligent. De fapt, să combinăm cele două etape: ```javascript let myVariable = 123; ``` Această abordare este mai eficientă: - Declari variabila și îi atribui o valoare într-o singură instrucțiune - Este o practică standard în rândul dezvoltatorilor - Reduce lungimea codului păstrând claritatea 4. Schimbă-ți părerea. Ce faci dacă vrei să stochezi un alt număr? ```javascript myVariable = 321; ``` Înțelegerea reatribuirii: - Variabila conține acum 321 în loc de 123 - Valoarea anterioară este înlocuită – variabilele stochează o singură valoare la un moment dat - Această mutabilitate este caracteristica cheie a variabilelor declarate cu let ✅ Încearcă! Poți scrie JavaScript direct în browserul tău. Deschide o fereastră de browser și navighează la Instrumentele dezvoltatorului (Developer Tools). În consolă, vei găsi un prompt; tastează let myVariable = 123, apasă Enter, apoi tastează myVariable. Ce se întâmplă? Vei învăța mai multe despre aceste concepte în lecțiile următoare. ### 🧠 Verificare de stăpânire a variabilelor: Devino confortabil Să vedem cum te simți cu variabilele: - Poți explica diferența dintre declararea și atribuirea unei variabile? - Ce se întâmplă dacă încerci să folosești o variabilă înainte să o declari? - Când ai alege let în loc de const pentru o variabilă? ## Constante Uneori ai nevoie să stochezi informații care nu ar trebui să se schimbe niciodată pe durata execuției programului. Gândește-te la constante ca la principiile matematice stabilite de Euclid în Grecia antică – odată demonstrate și documentate, au rămas fixe pentru toate referințele viitoare. Constantele funcționează similar cu variabilele, dar cu o restricție importantă: odată ce le atribui o valoare, aceasta nu poate fi schimbată. Această imutabilitate ajută la prevenirea modificărilor accidentale ale valorilor critice din programul tău. Declararea și inițializarea unei constante urmează aceleași concepte ca o variabilă, cu excepția cuvântului cheie const. Constantele sunt de obicei declarate cu litere mari. Iată ce face acest cod: - Creează o constantă numită MY_VARIABLE cu valoarea 123 - Folosește convenția de numire cu majuscule pentru constante - Previne orice modificare ulterioară a acestei valori Constantele au două reguli principale: - Trebuie să le atribui o valoare imediat – nu sunt permise constante goale! - Nu poți schimba niciodată acea valoare – JavaScript va arunca o eroare dacă încerci. Să vedem ce vreau să spun: Valoare simplă - Următorul cod NU este permis: ```javascript const PI = 3; PI = 4; // nu este permis ``` Ce trebuie să reții: - Încercările de reatribuire a constantei vor cauza o eroare - Protejează valorile importante de modificări accidentale - Asigură că valoarea rămâne consistentă pe tot parcursul programului Referința obiectului este protejată - Următorul cod NU este permis: ```javascript const obj = { a: 3 }; obj = { b: 5 } // nu este permis ``` Înțelegerea acestor concepte: - Previne înlocuirea întregului obiect cu unul nou - Protejează referința către obiectul original - Menține identitatea obiectului în memorie Valoarea obiectului nu este protejată - Următorul cod ESTE permis: ```javascript const obj = { a: 3 }; obj.a = 5; // permis ``` Descompunând ce se întâmplă aici: - Modifică valoarea proprietății din obiect - Păstrează aceeași referință a obiectului - Demonstrează că conținutul obiectului poate să se schimbe în timp ce referința rămâne constantă > Notă, const înseamnă că referința este protejată de reatribuire. Valoarea nu este _imutabilă_ și poate să se schimbe, în special dacă este un construct complex cum este un obiect. ## Tipuri de date JavaScript organizează informațiile în categorii diferite, numite tipuri de date. Acest concept reflectă modul în care savanții antici au clasificat cunoașterea – Aristotel a făcut distincție între tipuri diferite de raționament, știind că principiile logice nu pot fi aplicate uniform poeziei, matematicii și filosofiei naturale. Tipurile de date contează deoarece operațiile diferite funcționează cu tipuri diferite de informații. La fel cum nu poți face operații aritmetice pe numele unei persoane sau nu poți ordona alfabetic o ecuație matematică, JavaScript necesită tipul de date corespunzător pentru fiecare operație. Înțelegerea asta previne erorile și face codul tău mai fiabil. Variabilele pot stoca multe tipuri diferite de valori, precum numere și texte. Aceste tipuri variate de valori sunt cunoscute ca tipurile de date. Tipurile de date sunt o parte importantă a dezvoltării software, pentru că ajută dezvoltatorii să ia decizii despre cum ar trebui scris codul și cum ar trebui să ruleze software-ul. Mai mult, unele tipuri de date au caracteristici unice care ajută la transformarea sau extragerea de informații suplimentare într-o valoare. ✅ Tipurile de date sunt de asemenea denumite primitive de date JavaScript, deoarece sunt tipurile de date la cel mai jos nivel oferite de limbaj. Există 7 tipuri primitive de date: string, number, bigint, boolean, undefined, null și symbol. Ia un minut să vizualizezi ce ar putea reprezenta fiecare dintre aceste primitive. Ce este un zebra? Dar 0? true? ### Numere Numerele sunt cel mai simplu tip de date în JavaScript. Fie că lucrezi cu numere întregi ca 42, cu zecimale ca 3.14, sau numere negative ca -5, JavaScript le tratează uniform. Ține minte variabila noastră de mai devreme? Acei 123 pe care i-am stocat erau de fapt de tip număr: Caracteristici esențiale: - JavaScript recunoaște automat valorile numerice - Poți face operații matematice cu aceste variabile - Nu este necesară declararea explicită a tipului Variabilele pot stoca toate tipurile de numere, inclusiv zecimale sau numere negative. Numerele pot fi folosite și cu operatorii aritmetici, care vor fi acoperiți în secțiunea următoare. ### Operatorii aritmetici Operatorii aritmetici îți permit să faci calcule matematice în JavaScript. Acești operatori urmează aceleași principii pe care le-au folosit matematicienii de secole – aceleași simboluri care au apărut în lucrările savanților ca Al-Khwarizmi, care a dezvoltat notația algebrică. Operatorii funcționează cum te-ai aștepta din matematică tradițională: plus pentru adunare, minus pentru scădere și așa mai departe. Există mai multe tipuri de operatori pentru funcții aritmetice, câțiva fiind enumerați mai jos: ✅ Încearcă! Încearcă o operație aritmetică în consola browserului tău. Te surprind rezultatele? ### 🧮 Verificare a abilităților matematice: Calculați cu încredere Testează-ți înțelegerea aritmeticii: - Care este diferența dintre / (împărțire) și % (rest)? - Poți prezice cât este 10 % 3? (Indiciu: nu este 3.33...) - De ce ar putea fi operatorul rest util în programare? ### Șiruri de caractere (Strings) În JavaScript, datele textuale sunt reprezentate ca șiruri de caractere. Termenul „string” vine din conceptul de caractere legate într-o secvență, asemănător modului în care scribii din mănăstirile medievale combinau litere pentru a forma cuvinte și propoziții în manuscrisele lor. Stringurile sunt fundamentale pentru dezvoltarea web. Fiecare bucată de text afișată pe un site – nume de utilizator, etichete de butoane, mesaje de eroare, conținut – este tratată ca date de tip string. Înțelegerea stringurilor este esențială pentru crearea interfețelor funcționale ale utilizatorului. Stringurile sunt seturi de caractere care stau între ghilimele simple sau duble. Înțelegerea acestor concepte: - Folosește ghilimele simple ' sau duble " pentru a defini stringuri - Stochează date textuale care pot include litere, numere și simboluri - Atribuie valori string variabilelor pentru utilizare ulterioară - Necesită ghilimele pentru a distinge textul de numele variabilelor Amintește-ți să folosești ghilimele când scrii un string, altfel JavaScript va presupune că este numele unei variabile. ### Formatarea stringurilor Manipularea stringurilor îți permite să combini elemente de text, să încorporezi variabile și să creezi conținut dinamic care răspunde la starea programului. Această tehnică îți permite să construiești text programatic. Adesea ai nevoie să unești mai multe stringuri împreună – acest proces se numește concatenare. Pentru a concatena două sau mai multe șiruri, sau a le uni, folosește operatorul +. Pas cu pas, iată ce se întâmplă: - Combină mai multe șiruri folosind operatorul + - Unește șirurile direct fără spații în primul exemplu - Adaugă caractere spațiu " " între șiruri pentru lizibilitate - Introduce semne de punctuație precum virgule pentru o formatare corectă ✅ De ce 1 + 1 = 2 în JavaScript, dar '1' + '1' = 11? Gândește-te puțin. Ce se întâmplă cu '1' + 1? Șabloanele literale sunt o altă modalitate de a formata șiruri, cu diferența că în loc de ghilimele se folosesc backtick-uri. Tot ce nu este text simplu trebuie plasat în interiorul placeholder-elor ${ }. Aceasta include orice variabile care pot fi șiruri. Să înțelegem fiecare parte: - Folosește backtick-uri ` `` în loc de ghilimele obișnuite pentru a crea șabloane literale - Încorporează variabile direct folosind sintaxa placeholder ${} - Păstrează spațiile și formatarea exact așa cum este scrisă - Oferă o modalitate mai curată de a crea șiruri complexe cu variabile Poți realiza obiectivele de formatare oricare dintre aceste metode, însă șabloanele literale vor respecta orice spații și întreruperi de linie. ✅ Când ai folosi un șablon literal în locul unui șir simplu? ### 🔤 Verificare Măiestrie Șiruri: Încredere în Manipularea Textului Evaluează-ți abilitățile cu șirurile: - Poți explica de ce '1' + '1' este '11' în loc de 2? - Care metodă pentru șiruri o găsești mai ușor de citit: concatenarea sau șabloanele literale? - Ce se întâmplă dacă uiți ghilimelele în jurul unui șir? ### Booleeni Booleenii reprezintă forma cea mai simplă de date: pot avea doar două valori – true sau false. Acest sistem de logică binară provine din munca lui George Boole, un matematician din secolul XIX care a dezvoltat algebra booleană. În ciuda simplității lor, booleenii sunt esențiali pentru logica programelor. Ei permit codului tău să ia decizii bazate pe condiții – dacă un utilizator este autentificat, dacă un buton a fost apăsat sau dacă anumite criterii sunt îndeplinite. Booleenii pot fi doar două valori: true sau false. Booleenii pot ajuta la luarea deciziilor privind care linii de cod să se execute când anumite condiții sunt îndeplinite. În multe cazuri, operatorii ajută la setarea valorii unui boolean și vei observa frecvent inițializarea variabilelor sau actualizarea valorilor acestora cu un operator. În exemplul de mai sus am: - Creat o variabilă care stochează valoarea booleană true - Demonstrat cum să stochezi valoarea booleană false - Folosind cuvintele cheie exacte true și false (fără ghilimele) - Pregătit aceste variabile pentru utilizarea în instrucțiuni condiționale ✅ O variabilă poate fi considerată 'truthy' dacă evaluează la booleanul true. Interesant este că în JavaScript, toate valorile sunt truthy dacă nu sunt definite ca falsy. ### 🎯 Verificare Logică Booleană: Abilități de Luare a Deciziilor Testează-ți înțelegerea booleană: - De ce crezi că JavaScript are valori „truthy” și „falsy” dincolo de true și false? - Poți prezice care dintre acestea este falsy: 0, "0", [], "false"? - Cum pot fi booleenii utili în controlul fluxului unui program? --- ## 📊 Rezumatul Trusei Tale de Tipuri de Date ## Provocarea Agentului GitHub Copilot 🚀 Folosește modul Agent pentru a completa următoarea provocare: Descriere: Creează un manager de informații personale care demonstrează toate tipurile de date JavaScript învățate în această lecție, gestionând scenarii reale de date. Cerere: Construiește un program JavaScript care creează un obiect profil utilizator ce conține: numele persoanei (șir), vârsta (număr), statutul de student (boolean), culori favorite ca tablou și un obiect adresă cu proprietăți stradă, oraș și cod poștal. Include funcții pentru afișarea informațiilor profilului și actualizarea câmpurilor individuale. Asigură-te că demonstrezi concatenarea șirurilor, șabloanele literale, operații aritmetice cu vârsta și logica booleană pentru statutul de student. Află mai multe despre modul agent aici. ## 🚀 Provocare JavaScript are unele comportamente care pot lua dezvoltatorii prin surprindere. Iată un exemplu clasic de explorat: încearcă să tastezi în consola browserului: let age = 1; let Age = 2; age == Age și observă rezultatul. Returnează false – poți determina de ce? Aceasta este una din multele comportamente JavaScript care merită înțelese. Familiarizarea cu aceste particularități te va ajuta să scrii cod mai fiabil și să depanezi probleme mai eficient. ## Test după lecție Test după lecție ## Recapitulare & Autostudiu Aruncă o privire la această listă de exerciții JavaScript și încearcă unul. Ce ai învățat? ## Temă Exerciții Tipuri de Date ## 🚀 Planul Tău de Măiestrie în Tipuri de Date JavaScript ### ⚡ Ce poți face în următoarele 5 minute - [ ] Deschide consola browserului și creează 3 variabile cu diferite tipuri de date - [ ] Încearcă provocarea: let age = 1; let Age = 2; age == Age și află de ce este falsă - [ ] Exersează concatenarea șirurilor cu numele tău și numărul tău preferat - [ ] Testează ce se întâmplă când adaugi un număr la un șir ### 🎯 Ce poți realiza în această oră - [ ] Completează testul după lecție și revizuiește conceptele confuze - [ ] Creează un mini calculator care adună, scade, înmulțește și împarte două numere - [ ] Construiește un formator simplu de nume folosind șabloane literale - [ ] Explorează diferențele dintre operatorii de comparație == și === - [ ] Exersează conversia între diferite tipuri de date ### 📅 Fundația ta JavaScript pe o săptămână - [ ] Finalizează tema cu încredere și creativitate - [ ] Creează un obiect profil personal folosind toate tipurile de date învățate - [ ] Exersează cu exerciții JavaScript de pe CSS-Tricks - [ ] Construiește un validator simplu de formular folosind logica booleană - [ ] Experimentează cu tipurile de date array și obiect (previzualizare lecții viitoare) - [ ] Alătură-te unei comunități JavaScript și pune întrebări despre tipuri de date ### 🌟 Transformarea ta pe o lună - [ ] Integrează cunoștințele despre tipuri de date în proiecte mai mari - [ ] Înțelege când și de ce să folosești fiecare tip de date în aplicații reale - [ ] Ajută alți începători să înțeleagă fundamentele JavaScript - [ ] Construiește o aplicație mică care gestionează diferite tipuri de date ale utilizatorilor - [ ] Explorează concepte avansate legate de tipuri de date precum conversia de tip și egalitatea strictă - [ ] Contribuie la proiecte open source JavaScript cu îmbunătățiri în documentație ### 🧠 Verificarea finală a măiestriei în tipuri de date Sărbătorește-i fundația JavaScript: - Care tip de date ți-a surprins cel mai mult comportamentul? - Cât de confortabil te simți explicând variabilele vs constantele unui prieten? - Care este cel mai interesant lucru descoperit despre sistemul de tipuri al JavaScript? - Ce aplicație reală îți imaginezi că poți construi cu aceste fundamente? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Declinare de responsabilitate: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original, în limba sa de origine, trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Noțiuni de bază JavaScript: Metode și Funcții

## Test preliminar Test preliminar Să scrii același cod în mod repetat este una dintre cele mai comune frustări în programare. Funcțiile rezolvă această problemă permițându-ți să împachetezi cod în blocuri reutilizabile. Gândește-te la funcții ca la părțile standardizate care au făcut linia de asamblare a lui Henry Ford revoluționară – odată ce creezi o componentă fiabilă, o poți folosi oriunde fără să o reconstruiești de la zero. Funcțiile îți permit să grupezi bucăți de cod astfel încât să le poți reutiliza pe tot parcursul programului tău. În loc să copiezi și să inserezi aceeași logică peste tot, poți crea o funcție o singură dată și să o apelezi ori de câte ori ai nevoie. Această abordare menține codul organizat și face actualizările mult mai ușoare. În această lecție, vei învăța cum să creezi propriile funcții, să le transmiți informații și să primești în schimb rezultate utile. Vei descoperi diferența dintre funcții și metode, vei învăța abordări moderne ale sintaxei și vei vedea cum funcțiile pot lucra împreună cu alte funcții. Vom construi aceste concepte pas cu pas. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metode și Funcții") ## Funcții O funcție este un bloc de cod autonom care realizează o sarcină specifică. Ea încapsulează o logică pe care o poți executa ori de câte ori este necesar. În loc să scrii același cod de mai multe ori în cadrul programului, îl poți împacheta într-o funcție și apela ori de câte ori ai nevoie. Această metodă menține codul curat și face actualizările mult mai simple. Gândește-te la provocarea de întreținere dacă ar fi trebuit să schimbi logica răspândită în 20 de locații diferite ale codului tău. Este esențial să dai funcțiilor tale nume descriptive. O funcție bine denumită comunică clar scopul său – când vezi cancelTimer(), înțelegi imediat ce face, la fel cum un buton clar etichetat îți spune exact ce se întâmplă când îl apeși. ## Crearea și apelarea unei funcții Să vedem cum să creăm o funcție. Sintaxa urmează un tipar consecvent: Să descompunem: - Cuvântul cheie function spune JavaScript: "Hei, creez o funcție!" - nameOfFunction este locul unde dai funcției tale un nume descriptiv - Parantezele () sunt unde poți adăuga parametri (vom discuta despre asta în curând) - Parantezele acolade {} conțin codul efectiv care se rulează când apelezi funcția Să creăm o funcție simplă de salut pentru a vedea asta în acțiune: Această funcție afișează "Hello, world!" în consolă. Odată definită, o poți folosi de câte ori ai nevoie. Pentru a executa (sau "apela") funcția ta, scrie numele ei urmat de paranteze. JavaScript îți permite să definești funcția înainte sau după apel – motorul JavaScript va gestiona ordinea execuției. Când rulezi această linie, execută tot codul din funcția displayGreeting, afișând "Hello, world!" în consola browserului tău. Poți apela funcția de multe ori. ### 🧠 Verificare Fundamente Funcții: Construirea primelor tale funcții Să vedem cât ai învățat despre funcțiile de bază: - Poți explica de ce folosim acolade {} în definițiile funcțiilor? - Ce se întâmplă dacă scrii doar displayGreeting fără paranteze? - De ce ai vrea să apelezi aceeași funcție de mai multe ori? ### Cele mai bune practici pentru funcții Iată câteva sfaturi care te vor ajuta să scrii funcții bune: - Dă funcțiilor nume clare și descriptive – viitorul tău te va mulțumi! - Folosește camelCase pentru nume compuse (de exemplu calculateTotal în loc de calculate_total) - Menține fiecare funcție concentrată pe o singură sarcină bine făcută ## Transmiterea informațiilor către o funcție Funcția noastră displayGreeting este limitată – poate afișa doar "Hello, world!" pentru toată lumea. Parametrii ne permit să facem funcțiile mai flexibile și utile. Parametrii funcționează ca niște locuri rezervate unde poți introduce valori diferite de fiecare dată când folosești funcția. În acest fel, aceeași funcție poate funcționa cu informații diferite la fiecare apel. Listezi parametrii între paranteze când definești funcția, separând mai mulți parametri cu virgule: Fiecare parametru funcționează ca un loc rezervat – când cineva apelează funcția ta, va furniza valori reale care sunt plasate în aceste locuri. Să actualizăm funcția de salut ca să primească un nume: Observă cum folosim backtick-urile (` `) și ${}` pentru a introduce direct numele în mesaj – aceasta se numește șablon literal și este o metodă foarte utilă de a construi șiruri de caractere cu variabile incluse. Acum, când apelăm funcția, putem transmite orice nume: JavaScript ia șirul 'Christopher', îl alocă parametrului name și creează mesajul personalizat "Hello, Christopher!" ## Valori implicite Ce se întâmplă dacă vrem să facem unii parametri opționali? Aici vin în ajutor valorile implicite! Să presupunem că vrem să permitem oamenilor să personalizeze cuvântul de salut, dar dacă nu specifică niciunul, folosim "Hello" ca valoare de rezervă. Poți seta valori implicite folosind semnul egal, ca la declararea unei variabile: Aici, name este încă obligatoriu, dar salutation are o valoare implicită 'Hello' dacă nimeni nu oferă un alt salut. Acum putem apela funcția în două moduri diferite: În primul apel, JavaScript folosește "Hello" implicit deoarece nu am specificat un salut. În al doilea apel, folosește salutul nostru personalizat "Hi". Această flexibilitate face funcțiile adaptabile pentru situații diferite. ### 🎛️ Verificare Stăpânire Parametri: Cum să faci funcțiile flexibile Testează-ți înțelegerea parametrilor: - Care este diferența dintre un parametru și un argument? - De ce sunt utile valorile implicite în programarea reală? - Poți prezice ce se întâmplă dacă transmiți mai mulți argumente decât parametri? ## Valori returnate Funcțiile noastre până acum doar afișau mesaje în consolă, dar ce faci dacă vrei ca o funcție să calculeze ceva și să-ți returneze rezultatul? Aici intră în scenă valorile returnate. În loc să afișeze ceva, o funcție poate să-ți întoarcă o valoare pe care o poți stoca într-o variabilă sau folosi în alte părți ale codului. Pentru a trimite o valoare înapoi, folosești cuvântul cheie return urmat de orice vrei să returnezi: Un lucru important: când o funcție întâlnește o instrucțiune return, se oprește imediat și trimite această valoare către apelant. Să modificăm funcția noastră de salut ca să returneze mesajul în loc să-l afișeze: Acum, în loc să afișeze mesajul, această funcție îl creează și îl trimite înapoi. Pentru a folosi valoarea returnată, o putem stoca într-o variabilă precum orice altă valoare: Acum greetingMessage conține "Hello, Christopher" și o putem folosi oriunde în cod – să o afișăm pe o pagină web, să o includem într-un email sau să o trimitem unei alte funcții. ### 🔄 Verificare Valori Returnate: Obținerea rezultatelor Evaluează-ți înțelegerea valorilor returnate: - Ce se întâmplă cu codul după o instrucțiune return într-o funcție? - De ce este uneori mai bine să returnezi valori decât să afișezi în consolă? - O funcție poate returna diferite tipuri de valori (șir de caractere, număr, boolean)? ## Funcții ca parametri pentru alte funcții Funcțiile pot fi transmise ca parametri către alte funcții. Deși acest concept poate părea complex la început, este o caracteristică puternică ce permite modele de programare flexibile. Acest model este foarte folosit când vrei să spui "când se întâmplă ceva, fă acest alt lucru." De exemplu, "când timerul se termină, execută acest cod" sau "când utilizatorul apasă butonul, apelează această funcție." Să analizăm setTimeout, care este o funcție încorporată ce așteaptă o anumită perioadă de timp și apoi rulează un cod. Trebuie să-i spunem ce cod să execute – un caz perfect pentru a transmite o funcție! Încearcă acest cod – după 3 secunde, vei vedea un mesaj: Observă cum transmitem displayDone (fără paranteze) către setTimeout. Nu apelăm funcția noi înșine – o oferim lui setTimeout și spunem "apelează asta peste 3 secunde." ### Funcții anonime Uneori ai nevoie de o funcție pentru un singur scop și nu vrei să-i dai un nume. Gândește-te – dacă folosești o funcție o singură dată, de ce să-ți aglomerezi codul cu un nume în plus? JavaScript permite să creezi funcții anonime – funcții fără nume, pe care le poți defini direct unde ai nevoie. Iată cum putem rescrie exemplul nostru cu timer folosind o funcție anonimă: Acesta are același rezultat, dar funcția este definită direct în apelul setTimeout, eliminând necesitatea unei declarații separate. ### Funcții săgeată JavaScript modern are o metodă și mai scurtă de a scrie funcții numită funcții săgeată. Ele folosesc => (care arată ca o săgeată – inspirat, nu?) și sunt foarte populare în rândul dezvoltatorilor. Funcțiile săgeată îți permit să sari peste cuvântul cheie function și să scrii cod mai concis. Iată exemplul nostru cu timer folosind o funcție săgeată: () este locul pentru parametri (gol în acest caz), apoi urmează săgeata => și în final corpul funcției între acolade. Aceasta oferă aceeași funcționalitate cu o sintaxă mai compactă. ### Când să folosești fiecare strategie Când ar trebui să folosești fiecare abordare? Un ghid practic: dacă vei folosi funcția de mai multe ori, dă-i un nume și definește-o separat. Dacă este pentru un scop specific o singură dată, consideră o funcție anonimă. Atât funcțiile săgeată, cât și cele tradiționale sunt abordări valide, deși funcțiile săgeată sunt predominante în codurile JavaScript moderne. ### 🎨 Verificare Stăpânire Stiluri Funcții: Alegerea sintaxei corecte Testează-ți înțelegerea sintaxei: - Când ai prefera funcțiile săgeată în locul sintaxei tradiționale? - Care este avantajul principal al funcțiilor anonime? - Poți găsi o situație în care o funcție denumită este mai bună decât una anonimă? --- ## 🚀 Provocare Poți să exprimi într-o propoziție diferența dintre funcții și metode? Încearcă! ## Provocare Agent GitHub Copilot 🚀 Folosește modul Agent pentru a completa următoarea provocare: Descriere: Creează o bibliotecă utilitară de funcții matematice care să demonstreze diferite concepte de funcții acoperite în această lecție, inclusiv parametri, valori implicite, valori returnate și funcții săgeată. Prompt: Creează un fișier JavaScript numit mathUtils.js care să conțină următoarele funcții: 1. O funcție add care primește doi parametri și returnează suma lor 2. O funcție multiply cu valori implicite pentru parametri (al doilea parametru implicit 1) 3. O funcție săgeată square care primește un număr și returnează pătratul său 4. O funcție calculate care acceptă o altă funcție ca parametru și doi numere, apoi aplică funcția asupra acelor numere 5. Demonstrează apelarea fiecărei funcții cu cazuri de test adecvate Află mai multe despre modul agent aici. ## Test post-lectură Test post-lectură ## Recapitulare & Studiu individual Merită să citești puțin mai mult despre funcțiile săgeată, deoarece acestea sunt tot mai folosite în codurile reale. Exersează scrierea unei funcții, apoi rescrierea acesteia folosind această sintaxă. ## Temă Distracție cu Funcții --- ## 🧰 Rezumatul trusei tale de funcții JavaScript --- ## 🚀 Cronologia ta pentru stăpânirea funcțiilor JavaScript ### ⚡ Ce poți face în următoarele 5 minute - [ ] Scrie o funcție simplă care returnează numărul tău favorit - [ ] Creează o funcție cu doi parametri care îi adună împreună - [ ] Încearcă să convertești o funcție tradițională în sintaxa funcției arrow - [ ] Exersează provocarea: explică diferența dintre funcții și metode ### 🎯 Ce poți realiza în această oră - [ ] Finalizează quiz-ul post-lecție și revizuiește orice concepte confuze - [ ] Construiește biblioteca de utilitare matematice din provocarea GitHub Copilot - [ ] Creează o funcție care folosește o altă funcție ca parametru - [ ] Exersează scrierea funcțiilor cu parametri impliciți - [ ] Experimentează cu template literals în valorile returnate de funcții ### 📅 Stăpânirea funcțiilor pe durata unei săptămâni - [ ] Finalizează tema "Distracție cu funcții" cu creativitate - [ ] Refactorizează un cod repetitiv pe care l-ai scris în funcții reutilizabile - [ ] Construiește un mic calculator folosind doar funcții (fără variabile globale) - [ ] Exersează funcțiile arrow cu metode de array precum map() și filter() - [ ] Creează o colecție de funcții utilitare pentru sarcini comune - [ ] Studiază funcțiile de ordin superior și conceptele programării funcționale ### 🌟 Transformarea ta pe parcursul unei luni - [ ] Stăpânește concepte avansate ale funcțiilor precum closures și scope - [ ] Construiește un proiect care folosește intens compoziția funcțiilor - [ ] Contribuie la open source prin îmbunătățirea documentației funcțiilor - [ ] Învăță pe altcineva despre funcții și stiluri diferite de sintaxă - [ ] Explorează paradigmele programării funcționale în JavaScript - [ ] Creează o bibliotecă personală de funcții reutilizabile pentru proiecte viitoare ### 🏆 Controlul campionului final pentru funcții Sărbătorește-ți stăpânirea funcțiilor: - Care este cea mai utilă funcție pe care ai creat-o până acum? - Cum ți-a schimbat modul de a gândi despre organizarea codului învățarea despre funcții? - Ce sintaxă a funcțiilor preferi și de ce? - Ce problemă din lumea reală ai rezolva scriind o funcție? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Declinare de responsabilitate: Acest document a fost tradus utilizând serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original, în limba sa nativă, trebuie considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru orice neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Bazele JavaScript: Luarea Deciziilor

Te-ai întrebat vreodată cum iau aplicațiile decizii inteligente? Cum alege un sistem de navigație cea mai rapidă rută sau cum decide un termostat când să pornească căldura? Acesta este conceptul fundamental al luării deciziilor în programare. Așa cum Motorul Analitic al lui Charles Babbage a fost proiectat să urmeze diferite secvențe de operații în funcție de condiții, programele moderne JavaScript trebuie să ia alegeri bazate pe circumstanțe variate. Această abilitate de a ramifica și lua decizii este ceea ce transformă codul static în aplicații inteligente și responsive. În această lecție vei învăța cum să implementezi logica condițională în programele tale. Vom explora instrucțiunile condiționale, operatorii de comparație și expresiile logice care permit codului tău să evalueze situațiile și să răspundă corespunzător. ## Chestionar pre-lectură Pre-lecture quiz Abilitatea de a lua decizii și controlul fluxului programului sunt aspecte fundamentale ale programării. Această secțiune acoperă modul de control al traseului de execuție al programelor tale JavaScript folosind valori Booleene și logica condițională. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## O scurtă recapitulare despre Booleeni Înainte de a explora luarea deciziilor, să revedem valorile Booleene din lecția noastră anterioară. Denumite după matematicianul George Boole, aceste valori reprezintă stări binare – fie true sau false. Nu există ambiguitate, nici jumătate de măsură. Aceste valori binare formează baza întregii logici computaționale. Fiecare decizie pe care o ia programul tău reduce în final la o evaluare Booleană. Crearea variabilelor Booleene este simplă: Aceasta creează două variabile cu valori Booleene explicite. ✅ Booleenii poartă numele matematicianului, filosofului și logicianului englez George Boole (1815–1864). ## Operatori de comparație și Booleeni În practică, rareori vei seta manual valorile Booleene. În schimb, le vei genera evaluând condiții: „Este acest număr mai mare decât acela?” sau „Sunt aceste valori egale?” Operatorii de comparație permit aceste evaluări. Ei compară valorile și întorc rezultate Booleene pe baza relației dintre operanzi. ✅ Verifică-ți cunoștințele scriind câteva comparații în consola browserului tău. Te surprinde vreun rezultat obținut? ### 🧠 Test de stăpânire a comparațiilor: Înțelegerea logicii Booleene Testează-ți înțelegerea comparațiilor: - De ce crezi că === (egalitatea strictă) este în general preferat față de == (egalitatea laxă)? - Poți prezice ce întoarce 5 === '5'? Dar 5 == '5'? - Care este diferența dintre !== și !=? ## Instrucțiunea If Instrucțiunea if este ca o întrebare în codul tău. „Dacă această condiție este adevărată, atunci fă acest lucru.” Probabil că este cel mai important instrument pe care îl vei folosi pentru a lua decizii în JavaScript. Iată cum funcționează: Condiția se plasează între paranteze, iar dacă este true, JavaScript rulează codul din acolade. Dacă este false, JavaScript pur și simplu sare peste acel bloc. De multe ori vei folosi operatori de comparație pentru a crea aceste condiții. Hai să vedem un exemplu practic: Deoarece 1000 >= 800 evaluează la true, codul din bloc se execută, afișând în consolă „Getting a new laptop!”. ## Instrucțiunea If..Else Dar ce faci dacă vrei ca programul tău să facă ceva diferit când condiția este falsă? Aici intervine else – este ca un plan de rezervă. Instrucțiunea else îți oferă o modalitate de a spune „dacă această condiție nu este adevărată, fă acest alt lucru în schimb.” Acum, deoarece 500 >= 800 este false, JavaScript sare peste primul bloc și rulează blocul else. Vei vedea în consolă mesajul „Can't afford a new laptop, yet!”. ✅ Testează înțelegerea acestei bucăți de cod și a celei următoare rulând-o în consola browserului. Modifică valorile variabilelor currentMoney și laptopPrice pentru a schimba mesajul returnat de console.log(). ### 🎯 Test de logică If-Else: Ramificații Evaluează-ți înțelegerea logicii condiționale: - Ce se întâmplă dacă currentMoney este exact egal cu laptopPrice? - Poți să te gândești la un scenariu real în care logica if-else ar fi utilă? - Cum ai putea extinde această logică pentru a gestiona mai multe intervale de preț? ## Instrucțiunea Switch Uneori trebuie să compari o valoare cu mai multe opțiuni. Deși ai putea lega mai multe instrucțiuni if..else, această abordare devine greu de gestionat. Instrucțiunea switch oferă o structură mai curată pentru a gestiona mai multe valori discrete. Conceptul seamănă cu sistemele mecanice de comutare folosite în primele centrale telefonice – o valoare de intrare decide calea specifică pe care o urmează execuția. Iată cum este structurat: - JavaScript evaluează expresia o singură dată - Caută fiecare case pentru o potrivire - Când găsește o potrivire, execută acel bloc de cod - break îi spune lui JavaScript să oprească căutarea și să iasă din switch - Dacă niciun caz nu se potrivește, execută blocul default (dacă există) În acest exemplu, JavaScript vede că dayNumber este 2, găsește case 2 corespunzător, setează dayName la „Tuesday” și apoi iese din switch. Rezultatul? „Today is Tuesday” este afișat în consolă. ✅ Testează-ți înțelegerea acestui cod și a următorului rulându-l în consola browserului. Modifică valoarea variabilei a pentru a schimba mesajul returnat de console.log(). ### 🔄 Test de stăpânire a instrucțiunii Switch: Multiple opțiuni Testează-ți înțelegerea switch-ului: - Ce se întâmplă dacă uiți un break? - Când ai folosi switch în loc de mai multe instrucțiuni if-else? - De ce este util cazul default chiar dacă crezi că ai acoperit toate posibilitățile? ## Operatorii Logici și Booleenii Deciziile complexe necesită adesea evaluarea mai multor condiții simultan. Așa cum algebra Booleană permite matematicienilor să combine expresii logice, programarea oferă operatori logici pentru a conecta mai multe condiții Booleene. Acești operatori permit logică condițională sofisticată prin combinarea unor evaluări simple adevărat/fals. Acești operatori îți permit să combini condiții în moduri utile: - AND (&&) înseamnă că ambele condiții trebuie să fie adevărate - OR (||) înseamnă că cel puțin o condiție trebuie să fie adevărată - NOT (!) inversează true în false (și invers) ## Condiții și Decizii cu Operatorii Logici Hai să vedem acești operatori logici în acțiune cu un exemplu mai realist: În acest exemplu: calculăm un preț cu reducere de 20% (640), apoi evaluăm dacă fondurile noastre disponibile acoperă fie prețul întreg SAU prețul redus. Deoarece 600 este sub pragul prețului redus de 640, condiția evaluează la false. ### 🧮 Test Operatorii Logici: Combinarea condițiilor Testează-ți înțelegerea operatorilor logici: - În expresia A && B, ce se întâmplă dacă A este fals? Se evaluează oare B? - Te poți gândi la o situație în care ai avea nevoie de toți trei operatorii (&&, ||, !) simultan? - Care este diferența dintre !user.isActive și user.isActive !== true? ### Operatorul de Negare Uneori este mai ușor să gândești când ceva NU este adevărat. De exemplu, în loc să întrebi „Este utilizatorul autentificat?”, poți întreba „Nu este utilizatorul autentificat?” Operatorul semnului exclamării (!) inversează logica pentru tine. Operatorul ! este ca și cum ai spune „opusul lui...” – dacă ceva este true, ! îl face false, și invers. ### Expresii Ternare Pentru atribuiri condiționale simple, JavaScript oferă operatorul ternar. Această sintaxă concisă îți permite să scrii o expresie condițională într-o singură linie, utilă atunci când trebuie să atribui una din două valori bazat pe o condiție. Se citește ca o întrebare: „Este această condiție adevărată? Dacă da, folosește această valoare. Dacă nu, folosește cealaltă valoare.” Mai jos este un exemplu mai concret: ✅ Ia-ți un moment să citești acest cod de câteva ori. Înțelegi cum funcționează acești operatori? Linia spune: „Este firstNumber mai mare decât secondNumber? Dacă da, pune firstNumber în biggestNumber. Dacă nu, pune secondNumber în biggestNumber.” Operatorul ternar este doar o modalitate mai scurtă de a scrie această instrucțiune tradițională if..else: Ambele metode produc rezultate identice. Operatorul ternar oferă concizie, pe când structura tradițională if-else poate fi mai ușor de citit pentru condiții complexe. --- ## 🚀 Provocare Creează un program scris mai întâi cu operatori logici, apoi rescrie-l folosind expresia ternară. Care sintaxă o preferi? --- ## Provocare GitHub Copilot Agent 🚀 Folosește modul Agent pentru a finaliza următoarea provocare: Descriere: Creează un calculator complet de note care demonstrează mai multe concepte de luare a deciziilor din această lecție, inclusiv instrucțiuni if-else, switch, operatori logici și expresii ternare. Prompt: Scrie un program JavaScript care primește nota numerică a unui student (0-100) și determină nota literară conform criteriilor: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: sub 60 Cerințe: 1. Folosește o instrucțiune if-else pentru a determina nota literară 2. Folosește operatori logici pentru a verifica dacă studentul trece (nota >= 60) ȘI are onoruri (nota >= 90) 3. Folosește o declarație switch pentru a oferi feedback specific pentru fiecare literă de notă 4. Folosește un operator ternar pentru a determina dacă studentul este eligibil pentru cursul următor (nota >= 70) 5. Include validarea intrării pentru a te asigura că scorul este între 0 și 100 Testează programul cu diverse scoruri, inclusiv cazuri limită precum 59, 60, 89, 90 și intrări invalide. Află mai multe despre agent mode aici. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Citește mai multe despre numeroșii operatori disponibili utilizatorului pe MDN. Parcurge minunatul operator lookup al lui Josh Comeau! ## Assignment Operators --- ## 🧠 Sumarul trusei tale de instrumente pentru luarea deciziilor --- ## 🚀 Cronologia stăpânirii tale în luarea deciziilor cu JavaScript ### ⚡ Ce poți face în următoarele 5 minute - [ ] Exersează operatorii de comparație în consola browserului tău - [ ] Scrie o simplă declarație if-else care verifică vârsta ta - [ ] Încearcă provocarea: rescrie un if-else folosind un operator ternar - [ ] Testează ce se întâmplă cu diferite valori „truthy” și „falsy” ### 🎯 Ce poți realiza în această oră - [ ] Completează testul post-lecție și revizuiește orice concepte confuze - [ ] Construiește calculatorul cuprinzător de note din provocarea GitHub Copilot - [ ] Creează un arbore decizional simplu pentru un scenariu real (ex: alegerea hainelor) - [ ] Exersează combinarea mai multor condiții cu operatori logici - [ ] Experimentează cu declarații switch pentru diverse cazuri de utilizare ### 📅 Stăpânirea logicii pe o săptămână - [ ] Completează tema despre operatori cu exemple creative - [ ] Construiește o aplicație mini quiz folosind structuri condiționale variate - [ ] Creează un validator de formulare care verifică multiple condiții de intrare - [ ] Exersează exercițiile lui Josh Comeau din operator lookup - [ ] Refactorizează codul existent pentru a folosi structuri condiționale mai potrivite - [ ] Studiază evaluarea short-circuit și implicațiile de performanță ### 🌟 Transformarea ta pe o lună - [ ] Stăpânește condițiile complexe imbricate și menține lizibilitatea codului - [ ] Construiește o aplicație cu logică de luare a deciziilor sofisticată - [ ] Contribuie la open source îmbunătățind logica condițională din proiecte existente - [ ] Învăță pe altcineva despre diferitele structuri condiționale și când să le folosească - [ ] Explorează abordări de programare funcțională pentru logica condițională - [ ] Creează un ghid personal de referință pentru cele mai bune practici condiționale ### 🏆 Verificarea campionului final în luarea deciziilor Sărbătorește-ți măiestria în gândirea logică: - Care este cea mai complexă logică decizională pe care ai implementat-o cu succes? - Care structură condițională ți se pare cea mai naturală și de ce? - Cum ți-a schimbat învățarea despre operatorii logici abordarea în rezolvarea problemelor? - Ce aplicație din viața reală ar beneficia de o logică decizională sofisticată? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Declinare a responsabilității: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original, în limba sa nativă, trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventuale neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Bazele JavaScript: Array-uri și Bucla

## Chestionar înainte de lecție Chestionar înainte de lecție Te-ai întrebat vreodată cum site-urile țin evidența articolelor din coșul de cumpărături sau cum afișează lista ta de prieteni? Aici intervin array-urile și buclele. Array-urile sunt ca niște containere digitale care păstrează multiple informații, în timp ce buclele îți permit să lucrezi cu toate aceste date eficient, fără cod repetitiv. Împreună, aceste două concepte formează baza pentru gestionarea informațiilor în programele tale. Vei învăța cum să treci de la a scrie manual fiecare pas, la a crea cod inteligent și eficient care poate procesa sute sau chiar mii de articole rapid. La finalul acestei lecții, vei înțelege cum să realizezi sarcini complexe cu date folosind doar câteva linii de cod. Hai să explorăm aceste concepte esențiale de programare. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Array-uri Gândește-te la array-uri ca la un dulap digital de dosare - în loc să stochezi un document pe sertar, poți organiza mai multe elemente înrudiți într-un singur container structurat. În termeni de programare, array-urile îți permit să păstrezi mai multe bucăți de informație într-un singur pachet organizat. Fie că construiești o galerie foto, gestionezi o listă de sarcini sau ții evidența scorurilor maxime într-un joc, array-urile oferă fundația pentru organizarea datelor. Hai să vedem cum funcționează. ✅ Array-urile sunt peste tot în jurul nostru! Poți să te gândești la un exemplu real de array, cum ar fi o matrice de panouri solare? ### Crearea Array-urilor Crearea unui array este foarte simplă - folosește doar paranteze pătrate! Ce se întâmplă aici? Tocmai ai creat un container gol folosind acele paranteze pătrate []. Gândește-te la el ca la un raft gol în bibliotecă - este pregătit să țină orice cărți vrei să organizezi acolo. Poți, de asemenea, să îți umpli array-ul cu valori inițiale chiar de la început: Lucruri interesante de observat: - Poți stoca text, numere sau chiar valori de adevărat/fals în același array - Doar separă fiecare element cu virgulă - simplu! - Array-urile sunt perfecte pentru a ține informații înrudite împreună ### Indexarea în Array Iată ceva ce poate părea neobișnuit la început: array-urile își numerotează elementele începând de la 0, nu de la 1. Această indexare de la zero are rădăcini în modul în care funcționează memoria computerului - este o convenție de programare încă din primele zile ale limbajelor de calcul, cum ar fi C. Fiecare poziție în array primește propriul număr de adresă numit index. ✅ Te surprinde că array-urile încep de la indexul zero? În unele limbaje de programare, indexarea începe de la 1. Există o istorie interesantă în legătură cu aceasta, pe care o poți citi pe Wikipedia. Accesarea Elementelor din Array: Explicație a ceea ce se întâmplă aici: - Folosește notația cu paranteze pătrate și numărul indexului pentru a accesa elementele - Returnează valoarea stocată în poziția specifică din array - Începe să numere de la 0, făcând ca primul element să aibă indexul 0 Modificarea Elementelor din Array: În exemplul de mai sus, am: - Modificat elementul de la indexul 4 de la "Rocky Road" la "Butter Pecan" - Adăugat un nou element "Cookie Dough" la indexul 5 - Extins lungimea array-ului automat când am adăugat dincolo de limitele curente ### Lungimea Array-ului și Metode Comune Array-urile vin cu proprietăți și metode încorporate care fac lucrul cu datele mult mai ușor. Găsirea lungimii unui Array: Puncte cheie de reținut: - Returnează numărul total de elemente din array - Se actualizează automat când elemente sunt adăugate sau eliminate - Oferă un număr dinamic util pentru bucle și validare Metode esențiale pentru Array: Înțelegerea acestor metode: - Adaugă elemente cu push() (la sfârșit) și unshift() (la început) - Înlătură elemente cu pop() (la sfârșit) și shift() (la început) - Localizează elemente cu indexOf() și verifică existența cu includes() - Returnează valori utile precum elemente eliminate sau poziții index ✅ Încearcă singur! Folosește consola browser-ului pentru a crea și manipula un array creat de tine. ### 🧠 Verificare de bază a array-urilor: Organizarea Datelor Tale Testează-ți înțelegerea array-urilor: - De ce crezi că array-urile încep să numere de la 0 în loc de 1? - Ce se întâmplă dacă încerci să accesezi un index care nu există (exemplu: arr[100] într-un array de 5 elemente)? - Poți să te gândești la trei scenarii din viața reală unde array-urile ar fi utile? ## Bucles Gândește-te la pedeapsa celebră din romanele lui Charles Dickens în care elevii trebuiau să scrie rânduri în mod repetat pe o tablă. Imaginează-ți dacă ai putea pur și simplu să spui cuiva „scrie această propoziție de 100 de ori” și aceasta să se întâmple automat. Exact asta fac buclele pentru codul tău. Buclele sunt ca un asistent neobosit care poate repeta sarcini fără greșeală. Fie că trebuie să verifici fiecare articol dintr-un coș de cumpărături sau să afișezi toate fotografiile dintr-un album, buclele gestionează eficient această repetiție. JavaScript oferă mai multe tipuri de bucle din care poți alege. Hai să examinăm fiecare și să înțelegem când să le folosești. ### Bucla For Bucla for e ca și cum ai seta un cronometru - știi exact de câte ori vrei să se întâmple ceva. Este foarte organizată și predictibilă, ceea ce o face perfectă atunci când lucrezi cu array-uri sau ai nevoie să numeri lucruri. Structura buclei For: Pas cu pas, iată ce se întâmplă: - Inițializează variabila contor i la 0 la început - Verifică condiția i < 10 înainte de fiecare iterație - Execută blocul de cod când condiția este adevărată - Crește i cu 1 după fiecare iterație folosind i++ - Se oprește când condiția devine falsă (când i ajunge la 10) ✅ Rulează acest cod în consola browser-ului. Ce se întâmplă dacă faci mici modificări la contor, condiție sau expresia de iterare? Poți să faci să funcționeze invers, creând o numărătoare inversă? ### 🗓️ Verificare competențe buclă For: Repetiție controlată Evaluează-ți înțelegerea buclei for: - Care sunt cele trei părți ale unei bucle for și ce face fiecare? - Cum ai itera printr-un array înapoi? - Ce se întâmplă dacă uiți partea de incrementare (i++)? ### Bucla While Bucla while este ca și cum ai spune „continuă să faci asta până când...” - poate nu știi exact de câte ori va rula, dar știi când să te oprești. Este perfectă pentru lucruri precum solicitarea unei intrări de la utilizator până când oferă ceea ce ai nevoie sau căutarea într-un set de date până găsești ce cauți. Caracteristici buclă While: - Continuă să execute atâta timp cât condiția este adevărată - Necesită gestionarea manuală a variabilelor contor - Verifică condiția înainte de fiecare iterație - Are riscul unor bucle infinite dacă condiția nu devine niciodată falsă Înțelegerea acestor exemple: - Gestionează variabila contor i manual în interiorul corpului buclei - Crește contorul pentru a preveni bucle infinite - Demonstrează un caz practic cu input de utilizator și limită de încercări - Include mecanisme de siguranță care previn execuția nesfârșită ### ♾️ Verificare înțelepciune buclă While: Repetiție bazată pe condiție Testează-ți înțelegerea buclei while: - Care este principalul pericol când folosești bucle while? - Când ai alege bucla while în loc de for? - Cum poți preveni buclele infinite? ### Alternative moderne pentru bucle JavaScript oferă sintaxă modernă pentru bucle care poate face codul tău mai lizibil și mai puțin predispus la erori. Bucla For...of (ES6+): Avantajele cheie ale for...of: - Elimină gestionarea indexului și erorile posibile de tip off-by-one - Oferă acces direct la elementele array-ului - Îmbunătățește lizibilitatea codului și reduce complexitatea sintaxei Metoda forEach: Ce trebuie să știi despre forEach: - Execută o funcție pentru fiecare element din array - Oferă atât valoarea elementului cât și indexul ca parametri - Nu poate fi oprită anticipat (spre deosebire de buclele clasice) - Returnează undefined (nu creează un array nou) ✅ De ce ai alege o buclă for versus o buclă while? 17K de vizualizatori au avut aceeași întrebare pe StackOverflow, iar unele opinii pot fi interesante pentru tine. ### 🎨 Verificare sintaxă modernă pentru bucle: Adoptarea ES6+ Evaluează înțelegerea ta despre JavaScript modern: - Care sunt avantajele lui for...of față de buclele for tradiționale? - Când ai prefera buclele for tradiționale? - Care este diferența dintre forEach și map? ## Bucle și Array-uri Combinarea array-urilor cu bucle creează capacități puternice de procesare a datelor. Această asociere este fundamentală pentru multe sarcini de programare, de la afișarea listelor până la calcularea statisticilor. Procesarea tradițională a array-urilor: Să înțelegem fiecare abordare: - Folosește proprietatea lungime a array-ului pentru a determina limita buclei - Accesează elementele după index în buclele for tradiționale - Oferă acces direct la elemente în buclele for...of - Procesează fiecare element o singură dată Exemplu practic de procesare a datelor: Iată cum funcționează acest cod: - Inițializează variabile de urmărire pentru suma și extreme - Procesează fiecare notă cu o singură buclă eficientă - Acumulează totalul pentru calculul mediei - Urmărește valorile maxime și minime în timpul iterației - Calculează statisticile finale după terminarea buclei ✅ Experimentează iterând un array creat de tine în consola browser-ului. --- ## Provocarea Agentului GitHub Copilot 🚀 Folosește modul Agent pentru a rezolva următoarea provocare: Descriere: Construiește o funcție completă de procesare a datelor care combină array-uri și bucle pentru a analiza un set de date și a genera informații relevante. Prompt: Creează o funcție numită analyzeGrades care ia un array de obiecte note studenți (fiecare conținând proprietăți nume și scor) și returnează un obiect cu statistici incluzând cel mai mare scor, cel mai mic scor, scorul mediu, numărul de studenți care au trecut (scor >= 70) și un array cu numele studenților care au obținut peste media generală. Folosește cel puțin două tipuri diferite de bucle în soluția ta. Află mai multe despre modul agent aici. ## 🚀 Provocare JavaScript oferă mai multe metode moderne pentru array-uri care pot înlocui buclele tradiționale pentru sarcini specifice. Explorează forEach, for-of, map, filter și reduce. Provocarea ta: Refactorizează exemplul cu notele studenților folosind cel puțin trei metode diferite pentru array-uri. Observă cât de mult mai curat și mai lizibil devine codul cu sintaxa modernă JavaScript. ## Test post-lectură Test post-lectură ## Recapitulare & Auto-studiu Array-urile în JavaScript au multe metode atașate, care sunt extrem de utile pentru manipularea datelor. Citește despre aceste metode și încearcă unele dintre ele (precum push, pop, slice și splice) pe un array creat de tine. ## Tema Loop an Array --- ## 📊 Rezumatul trusei tale de unelte pentru Array-uri & Bucle --- ## 🚀 Cronologia stăpânirii Array-urilor & Buclurilor tale ### ⚡ Ce poți face în următoarele 5 minute - [ ] Creează un array cu filmele tale preferate și accesează elemente specifice - [ ] Scrie o buclă for care numără de la 1 la 10 - [ ] Încearcă provocarea cu metode moderne pentru array-uri din lecție - [ ] Exersează indexarea array-urilor în consola browserului tău ### 🎯 Ce poți realiza în această oră - [ ] Finalizează testul post-lectură și revizuiește orice concepte dificile - [ ] Construiește analizatorul complet de note din provocarea GitHub Copilot - [ ] Creează un coș de cumpărături simplu care adaugă și elimină produse - [ ] Exersează conversia între diferite tipuri de bucle - [ ] Experimentează cu metode de array precum push, pop, slice și splice ### 📅 Parcursul tău de procesare a datelor pe o săptămână - [ ] Finalizează tema "Loop an Array" cu îmbunătățiri creative - [ ] Construiește o aplicație de listă de sarcini folosind array-uri și bucle - [ ] Creează un calculator simplu de statistici pentru date numerice - [ ] Exersează cu metodele array de la MDN - [ ] Construiește o galerie foto sau o interfață pentru playlist muzical - [ ] Explorează programarea funcțională cu map, filter și reduce ### 🌟 Transformarea ta pe o lună - [ ] Stăpânește operațiuni avansate pe array-uri și optimizarea performanței - [ ] Construiește un dashboard complet de vizualizare a datelor - [ ] Contribuie la proiecte open source care implică procesarea datelor - [ ] Predă altora despre array-uri și bucle folosind exemple practice - [ ] Creează o bibliotecă personală de funcții reutilizabile pentru procesarea datelor - [ ] Explorează algoritmi și structuri de date bazate pe array-uri ### 🏆 Verificarea finală a campionului în procesarea datelor Sărbătorește stăpânirea ta asupra array-urilor și buclelor: - Care este cea mai utilă operațiune cu array pe care ai învățat-o pentru aplicații reale? - Ce tip de buclă ți se pare cel mai natural și de ce? - Cum ți-a schimbat înțelegerea array-urilor și buclelor abordarea în organizarea datelor? - Ce sarcină complexă de procesare a datelor ai dori să abordezi în continuare? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Declinare a răspunderii: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să țineți cont că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,array

Введение в JavaScript

JavaScript — это язык веб-разработки. В этих четырех уроках вы изучите его основы. ### Темы 1. Переменные и типы данных 2. Функции и методы 3. Принятие решений с помощью JavaScript 4. Массивы и циклы ### Авторы Эти уроки были написаны с ♥️ Жасмин Гринэвэй, Кристофером Харрисоном и Крисом Норингом Отказ от ответственности: Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.

javascript

Основы JavaScript: Типы данных

Типы данных — это одна из фундаментальных концепций в JavaScript, с которой вы столкнетесь в каждой программе, которую напишете. Представьте типы данных как систему классификации, которую использовали древние библиотекари в Александрии — у них были отдельные места для свитков с поэзией, математикой и историческими записями. JavaScript организует информацию аналогичным образом, разделяя данные на разные категории. В этом уроке мы изучим основные типы данных, которые делают JavaScript функциональным. Вы узнаете, как работать с числами, текстом, значениями true/false и поймете, почему выбор правильного типа данных важен для ваших программ. Эти концепции могут показаться абстрактными сначала, но с практикой они станут для вас естественными. Понимание типов данных сделает все остальное в JavaScript гораздо понятнее. Как архитекторам нужно знать свойства различных строительных материалов перед созданием собора, так и эти основы будут поддерживать все, что вы создадите в будущем. ## Предварительный тест Предварительный тест Этот урок охватывает основы JavaScript — языка, который обеспечивает интерактивность в интернете. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Переменные в JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Типы данных в JavaScript") Начнем с переменных и типов данных, которые их наполняют! ## Переменные Переменные — это фундаментальные строительные блоки программирования. Как банки с этикетками, которые средневековые алхимики использовали для хранения различных веществ, переменные позволяют хранить информацию и давать ей описательное имя, чтобы вы могли ссылаться на нее позже. Нужно запомнить возраст человека? Сохраните его в переменной age. Хотите запомнить имя пользователя? Сохраните его в переменной userName. Мы сосредоточимся на современном подходе к созданию переменных в JavaScript. Методы, которые вы изучите здесь, представляют собой годы эволюции языка и лучшие практики, разработанные сообществом программистов. Создание и объявление переменной имеет следующий синтаксис [ключевое слово] [имя]. Оно состоит из двух частей: - Ключевое слово. Используйте let для переменных, которые могут изменяться, или const для значений, которые остаются неизменными. - Имя переменной, это описательное имя, которое вы выбираете сами. ✅ Ключевое слово let было введено в ES6 и дает вашей переменной так называемую _блочную область видимости_. Рекомендуется использовать let или const вместо устаревшего ключевого слова var. Мы рассмотрим блочные области видимости более подробно в следующих частях. ### Задание - работа с переменными 1. Объявите переменную. Начнем с создания нашей первой переменной: ```javascript let myVariable; ``` Что это делает: - Это говорит JavaScript создать место для хранения под названием myVariable - JavaScript выделяет место в памяти для этой переменной - Переменная пока не имеет значения (undefined) 2. Присвойте значение. Теперь положим что-то в нашу переменную: ```javascript myVariable = 123; ``` Как работает присваивание: - Оператор = присваивает значение 123 нашей переменной - Переменная теперь содержит это значение вместо undefined - Вы можете ссылаться на это значение в своем коде, используя myVariable > Примечание: использование = в этом уроке означает, что мы используем "оператор присваивания", чтобы задать значение переменной. Это не обозначает равенство. 3. Сделайте это умным способом. На самом деле, давайте объединим эти два шага: ```javascript let myVariable = 123; ``` Этот подход более эффективен: - Вы объявляете переменную и присваиваете ей значение в одном выражении - Это стандартная практика среди разработчиков - Это сокращает длину кода, сохраняя его ясность 4. Передумайте. Что если мы захотим сохранить другое число? ```javascript myVariable = 321; ``` Понимание переназначения: - Переменная теперь содержит 321 вместо 123 - Предыдущее значение заменяется — переменные хранят только одно значение за раз - Эта изменяемость — ключевая характеристика переменных, объявленных с помощью let ✅ Попробуйте! Вы можете писать JavaScript прямо в своем браузере. Откройте окно браузера и перейдите в инструменты разработчика. В консоли вы найдете приглашение; введите let myVariable = 123, нажмите Enter, затем введите myVariable. Что происходит? Обратите внимание, вы узнаете больше об этих концепциях в следующих уроках. ### 🧠 Проверка мастерства переменных: освоение Посмотрим, как вы чувствуете себя с переменными: - Можете ли вы объяснить разницу между объявлением и присваиванием переменной? - Что произойдет, если вы попытаетесь использовать переменную до ее объявления? - Когда вы выберете let вместо const для переменной? ## Константы Иногда вам нужно сохранить информацию, которая не должна изменяться во время выполнения программы. Представьте константы как математические принципы, установленные Евклидом в древней Греции — однажды доказанные и задокументированные, они остаются неизменными для всех будущих ссылок. Константы работают аналогично переменным, но с важным ограничением: после присвоения значения его нельзя изменить. Эта неизменяемость помогает предотвратить случайные изменения критических значений в вашей программе. Объявление и инициализация константы следуют тем же принципам, что и переменные, за исключением ключевого слова const. Константы обычно объявляются с использованием заглавных букв. Что делает этот код: - Создает константу с именем MY_VARIABLE со значением 123 - Использует соглашение об именовании заглавными буквами для констант - Предотвращает любые будущие изменения этого значения У констант есть два основных правила: - Вы должны сразу присвоить им значение — пустые константы не допускаются! - Вы никогда не сможете изменить это значение — JavaScript выдаст ошибку, если вы попробуете. Давайте посмотрим, что я имею в виду: Простое значение - Следующее НЕ допускается: ```javascript const PI = 3; PI = 4; // не допускается ``` Что нужно помнить: - Попытки переназначить константу вызовут ошибку - Защищает важные значения от случайных изменений - Обеспечивает неизменность значения в вашей программе Ссылка на объект защищена - Следующее НЕ допускается: ```javascript const obj = { a: 3 }; obj = { b: 5 } // не допускается ``` Понимание этих концепций: - Предотвращает замену всего объекта новым - Защищает ссылку на исходный объект - Сохраняет идентичность объекта в памяти Значение объекта не защищено - Следующее ДОПУСКАЕТСЯ: ```javascript const obj = { a: 3 }; obj.a = 5; // допускается ``` Разбор того, что здесь происходит: - Изменяет значение свойства внутри объекта - Сохраняет ту же ссылку на объект - Демонстрирует, что содержимое объекта может изменяться, пока ссылка остается неизменной > Примечание: const означает, что ссылка защищена от переназначения. Однако значение не является _неизменяемым_ и может изменяться, особенно если это сложная структура, такая как объект. ## Типы данных JavaScript организует информацию в разные категории, называемые типами данных. Эта концепция напоминает, как древние ученые классифицировали знания — Аристотель различал разные типы рассуждений, понимая, что логические принципы нельзя одинаково применять к поэзии, математике и естественной философии. Типы данных важны, потому что разные операции работают с разными видами информации. Так же, как нельзя выполнять арифметические действия с именем человека или упорядочивать алфавитно математическое уравнение, JavaScript требует соответствующего типа данных для каждой операции. Понимание этого предотвращает ошибки и делает ваш код более надежным. Переменные могут хранить множество различных типов значений, таких как числа и текст. Эти различные типы значений известны как тип данных. Типы данных являются важной частью разработки программного обеспечения, так как помогают разработчикам принимать решения о том, как должен быть написан код и как должно работать программное обеспечение. Кроме того, некоторые типы данных имеют уникальные особенности, которые помогают преобразовывать или извлекать дополнительную информацию из значения. ✅ Типы данных также называются примитивами данных JavaScript, так как они являются низкоуровневыми типами данных, предоставляемыми языком. Существует 7 примитивных типов данных: string, number, bigint, boolean, undefined, null и symbol. Потратьте минуту, чтобы визуализировать, что каждый из этих примитивов может представлять. Что такое zebra? А 0? true? ### Числа Числа — это самый простой тип данных в JavaScript. Независимо от того, работаете ли вы с целыми числами, такими как 42, десятичными числами, такими как 3.14, или отрицательными числами, такими как -5, JavaScript обрабатывает их одинаково. Помните нашу переменную из предыдущего примера? Те 123, которые мы сохранили, на самом деле были числовым типом данных: Ключевые характеристики: - JavaScript автоматически распознает числовые значения - Вы можете выполнять математические операции с этими переменными - Не требуется явного указания типа Переменные могут хранить все типы чисел, включая десятичные или отрицательные числа. Числа также могут использоваться с арифметическими операторами, которые будут рассмотрены в следующем разделе. ### Арифметические операторы Арифметические операторы позволяют выполнять математические вычисления в JavaScript. Эти операторы следуют тем же принципам, которые математики использовали веками — те же символы, которые появились в трудах ученых, таких как Аль-Хорезми, разработавший алгебраическую нотацию. Операторы работают так, как вы ожидаете от традиционной математики: плюс для сложения, минус для вычитания и так далее. Существует несколько типов операторов, которые можно использовать при выполнении арифметических функций, и некоторые из них перечислены здесь: ✅ Попробуйте! Попробуйте выполнить арифметическую операцию в консоли вашего браузера. Удивляют ли вас результаты? ### 🧮 Проверка математических навыков: уверенные вычисления Проверьте свое понимание арифметики: - В чем разница между / (деление) и % (остаток)? - Можете ли вы предсказать, чему равно 10 % 3? (Подсказка: это не 3.33...) - Почему оператор остатка может быть полезен в программировании? ### Строки В JavaScript текстовые данные представлены в виде строк. Термин "строка" происходит от концепции символов, соединенных в последовательности, как монахи в средневековых монастырях соединяли буквы, чтобы формировать слова и предложения в своих рукописях. Строки являются основой веб-разработки. Каждый текст, отображаемый на сайте — имена пользователей, метки кнопок, сообщения об ошибках, контент — обрабатывается как строковые данные. Понимание строк необходимо для создания функциональных пользовательских интерфейсов. Строки — это наборы символов, заключенные в одинарные или двойные кавычки. Понимание этих концепций: - Использует либо одинарные кавычки ', либо двойные кавычки " для определения строк - Хранит текстовые данные, которые могут включать буквы, числа и символы - Присваивает строковые значения переменным для последующего использования - Требует кавычек для отличия текста от имен переменных Не забудьте использовать кавычки при написании строки, иначе JavaScript предположит, что это имя переменной. ### Форматирование строк Манипуляция строками позволяет объединять текстовые элементы, включать переменные и создавать динамический контент, который реагирует на состояние программы. Этот метод позволяет программно конструировать текст. Часто вам нужно объединить несколько строк вместе — этот процесс называется конкатенацией. Чтобы объединить две или более строки, или соединить их вместе, используйте оператор +. Шаг за шагом, что происходит: - Объединяет несколько строк с помощью оператора + - Соединяет строки напрямую без пробелов в первом примере - Добавляет пробелы " " между строками для удобства чтения - Вставляет знаки препинания, такие как запятые, для правильного форматирования ✅ Почему в JavaScript 1 + 1 = 2, а '1' + '1' = 11? Подумайте. А как насчет '1' + 1? Шаблонные литералы — это другой способ форматирования строк, вместо кавычек используется обратный апостроф. Все, что не является обычным текстом, должно быть помещено в плейсхолдеры ${ }. Это включает любые переменные, которые могут быть строками. Давайте разберем каждую часть: - Использует обратные апострофы ` `` вместо обычных кавычек для создания шаблонных литералов - Встраивает переменные напрямую с помощью синтаксиса плейсхолдера ${} - Сохраняет пробелы и форматирование точно так, как написано - Предоставляет более удобный способ создания сложных строк с переменными Вы можете достичь своих целей форматирования любым методом, но шаблонные литералы сохраняют пробелы и переносы строк. ✅ Когда вы бы использовали шаблонный литерал вместо обычной строки? ### 🔤 Проверка мастерства работы со строками: уверенность в манипуляции текстом Оцените свои навыки работы со строками: - Можете ли вы объяснить, почему '1' + '1' равно '11', а не 2? - Какой метод работы со строками вы считаете более удобным: конкатенация или шаблонные литералы? - Что произойдет, если вы забудете кавычки вокруг строки? ### Булевы значения Булевы значения представляют собой самую простую форму данных: они могут содержать только одно из двух значений – true или false. Эта система двоичной логики восходит к работам Джорджа Буля, математика XIX века, который разработал булеву алгебру. Несмотря на свою простоту, булевы значения являются основой логики программирования. Они позволяют вашему коду принимать решения на основе условий – например, вошел ли пользователь в систему, была ли нажата кнопка или выполнены ли определенные критерии. Булевы значения могут быть только двух типов: true или false. Они помогают определить, какие строки кода должны выполняться при выполнении определенных условий. Во многих случаях операторы помогают установить значение булевой переменной, и вы часто будете замечать и писать переменные, которые инициализируются или их значения обновляются с помощью оператора. В приведенном выше примере мы: - Создали переменную, которая хранит булево значение true - Показали, как хранить булево значение false - Использовали точные ключевые слова true и false (без кавычек) - Подготовили эти переменные для использования в условных операторах ✅ Переменная может считаться "истинной" (truthy), если она оценивается как булево значение true. Интересно, что в JavaScript все значения считаются истинными, если они не определены как ложные. ### 🎯 Проверка логики булевых значений: навыки принятия решений Проверьте свое понимание булевых значений: - Почему, по вашему мнению, в JavaScript существуют значения "истинности" и "ложности" помимо просто true и false? - Можете ли вы предсказать, какие из этих значений являются ложными: 0, "0", [], "false"? - Как булевы значения могут быть полезны для управления потоком программы? --- ## 📊 Резюме вашего инструментария типов данных ## Вызов GitHub Copilot Agent 🚀 Используйте режим Agent, чтобы выполнить следующий вызов: Описание: Создайте менеджер персональной информации, который демонстрирует все типы данных JavaScript, изученные в этом уроке, при работе с реальными сценариями данных. Задание: Напишите программу на JavaScript, которая создает объект профиля пользователя, содержащий: имя человека (строка), возраст (число), статус студента (булево значение), любимые цвета в виде массива и объект адреса с улицей, городом и почтовым индексом. Включите функции для отображения информации профиля и обновления отдельных полей. Обязательно продемонстрируйте конкатенацию строк, шаблонные литералы, арифметические операции с возрастом и булеву логику для статуса студента. Узнайте больше о режиме Agent здесь. ## 🚀 Вызов JavaScript имеет некоторые особенности, которые могут удивить разработчиков. Вот классический пример для изучения: попробуйте ввести это в консоли вашего браузера: let age = 1; let Age = 2; age == Age и посмотрите результат. Он возвращает false – можете ли вы определить, почему? Это один из многих аспектов поведения JavaScript, которые стоит понять. Знание этих особенностей поможет вам писать более надежный код и эффективно устранять ошибки. ## Викторина после лекции Викторина после лекции ## Обзор и самостоятельное изучение Посмотрите этот список упражнений по JavaScript и попробуйте одно из них. Что вы узнали? ## Задание Практика типов данных ## 🚀 Ваш таймлайн освоения типов данных JavaScript ### ⚡ Что вы можете сделать за следующие 5 минут - [ ] Откройте консоль браузера и создайте 3 переменные с разными типами данных - [ ] Попробуйте вызов: let age = 1; let Age = 2; age == Age и выясните, почему это false - [ ] Попрактикуйтесь в конкатенации строк с вашим именем и любимым числом - [ ] Проверьте, что произойдет, если вы добавите число к строке ### 🎯 Что вы можете достичь за этот час - [ ] Пройдите викторину после урока и разберитесь с любыми непонятными концепциями - [ ] Создайте мини-калькулятор, который складывает, вычитает, умножает и делит два числа - [ ] Постройте простой форматировщик имени с использованием шаблонных литералов - [ ] Исследуйте различия между операторами сравнения == и === - [ ] Попрактикуйтесь в преобразовании между различными типами данных ### 📅 Ваш недельный фундамент JavaScript - [ ] Выполните задание с уверенностью и творческим подходом - [ ] Создайте объект профиля пользователя, используя все изученные типы данных - [ ] Попрактикуйтесь с упражнениями по JavaScript от CSS-Tricks - [ ] Постройте простой валидатор формы, используя булеву логику - [ ] Экспериментируйте с массивами и объектами (предварительный просмотр следующих уроков) - [ ] Присоединитесь к сообществу JavaScript и задавайте вопросы о типах данных ### 🌟 Ваш месячный путь трансформации - [ ] Интегрируйте знания о типах данных в более крупные программные проекты - [ ] Поймите, когда и почему использовать каждый тип данных в реальных приложениях - [ ] Помогайте другим новичкам понять основы JavaScript - [ ] Постройте небольшое приложение, которое управляет различными типами пользовательских данных - [ ] Изучите сложные концепции типов данных, такие как приведение типов и строгая эквивалентность - [ ] Вносите вклад в проекты с открытым исходным кодом на JavaScript, улучшая документацию ### 🧠 Итоговая проверка мастерства типов данных Отпразднуйте свои основы JavaScript: - Какой тип данных удивил вас больше всего своим поведением? - Насколько комфортно вы чувствуете себя, объясняя переменные и константы другу? - Что самое интересное вы узнали о системе типов JavaScript? - Какое реальное приложение вы можете представить, используя эти основы? --- Отказ от ответственности: Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность перевода, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.

javascript

Основы JavaScript: Методы и функции

## Викторина перед лекцией Викторина перед лекцией Повторение одного и того же кода снова и снова — одна из самых распространенных проблем в программировании. Функции решают эту проблему, позволяя упаковать код в блоки, которые можно использовать повторно. Представьте функции как стандартизированные детали, которые сделали революцию на конвейере Генри Форда — создав надежный компонент, вы можете использовать его где угодно, не создавая заново. Функции позволяют объединить части кода, чтобы использовать их в разных местах программы. Вместо того чтобы копировать и вставлять одну и ту же логику, вы можете создать функцию один раз и вызывать ее по мере необходимости. Такой подход упрощает организацию кода и делает его обновление гораздо проще. В этом уроке вы научитесь создавать собственные функции, передавать им информацию и получать полезные результаты. Вы узнаете разницу между функциями и методами, изучите современные подходы к синтаксису и увидите, как функции могут взаимодействовать друг с другом. Мы будем изучать эти концепции шаг за шагом. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Методы и функции") ## Функции Функция — это автономный блок кода, выполняющий определенную задачу. Она инкапсулирует логику, которую можно выполнить в любое время. Вместо того чтобы писать один и тот же код несколько раз в программе, вы можете упаковать его в функцию и вызывать эту функцию по мере необходимости. Такой подход упрощает код и делает его обновление гораздо проще. Представьте себе сложность обслуживания, если вам нужно изменить логику, разбросанную по 20 различным местам в вашем коде. Очень важно давать функциям описательные названия. Хорошо названная функция четко передает свою цель — когда вы видите cancelTimer(), вы сразу понимаете, что она делает, так же как четко обозначенная кнопка говорит вам, что произойдет при ее нажатии. ## Создание и вызов функции Давайте рассмотрим, как создать функцию. Синтаксис следует определенному шаблону: Разберем это: - Ключевое слово function говорит JavaScript: "Эй, я создаю функцию!" - nameOfFunction — это место, где вы даете вашей функции описательное название - Круглые скобки () — это место, где можно добавить параметры (мы скоро к этому вернемся) - Фигурные скобки {} содержат фактический код, который выполняется при вызове функции Давайте создадим простую функцию приветствия, чтобы увидеть это в действии: Эта функция выводит "Hello, world!" в консоль. После того как вы ее определили, вы можете использовать ее столько раз, сколько нужно. Чтобы выполнить (или "вызвать") вашу функцию, напишите ее имя, за которым следуют круглые скобки. JavaScript позволяет вам определить функцию до или после ее вызова — движок JavaScript сам обработает порядок выполнения. Когда вы выполните эту строку, она выполнит весь код внутри вашей функции displayGreeting, отображая "Hello, world!" в консоли вашего браузера. Вы можете вызывать эту функцию многократно. ### 🧠 Проверка основ функций: создание первых функций Давайте проверим, как вы усвоили основы функций: - Можете ли вы объяснить, почему мы используем фигурные скобки {} в определении функций? - Что произойдет, если вы напишете displayGreeting без круглых скобок? - Почему может быть полезно вызывать одну и ту же функцию несколько раз? ### Лучшие практики для функций Вот несколько советов, которые помогут вам писать отличные функции: - Давайте вашим функциям четкие, описательные названия — ваш будущий "я" скажет вам спасибо! - Используйте camelCase для названий из нескольких слов (например, calculateTotal вместо calculate_total) - Сосредоточьтесь на том, чтобы каждая функция выполняла одну задачу хорошо ## Передача информации в функцию Наша функция displayGreeting ограничена — она может отображать только "Hello, world!" для всех. Параметры позволяют сделать функции более гибкими и полезными. Параметры работают как заполнители, куда можно вставлять разные значения каждый раз, когда вы используете функцию. Таким образом, одна и та же функция может работать с разной информацией при каждом вызове. Вы перечисляете параметры внутри круглых скобок при определении функции, разделяя несколько параметров запятыми: Каждый параметр работает как заполнитель — когда кто-то вызывает вашу функцию, он предоставляет фактические значения, которые вставляются в эти места. Давайте обновим нашу функцию приветствия, чтобы она принимала имя человека: Обратите внимание, как мы используем обратные кавычки (` `) и ${}` для вставки имени прямо в сообщение — это называется шаблонной строкой, и это очень удобный способ создавать строки с переменными. Теперь, вызывая нашу функцию, мы можем передать любое имя: JavaScript берет строку 'Christopher', присваивает ее параметру name и создает персонализированное сообщение "Hello, Christopher!" ## Значения по умолчанию Что если мы хотим сделать некоторые параметры необязательными? Здесь на помощь приходят значения по умолчанию! Предположим, мы хотим, чтобы люди могли настроить слово приветствия, но если они его не укажут, мы просто используем "Hello" как запасной вариант. Вы можете установить значения по умолчанию, используя знак равенства, как при установке переменной: Здесь name все еще обязателен, но salutation имеет резервное значение 'Hello', если никто не предоставит другое приветствие. Теперь мы можем вызвать эту функцию двумя способами: В первом вызове JavaScript использует значение по умолчанию "Hello", так как мы не указали приветствие. Во втором вызове используется наше собственное "Hi". Эта гибкость делает функции адаптируемыми к различным сценариям. ### 🎛️ Проверка параметров: делаем функции гибкими Проверьте ваше понимание параметров: - В чем разница между параметром и аргументом? - Почему значения по умолчанию полезны в реальном программировании? - Можете ли вы предсказать, что произойдет, если передать больше аргументов, чем параметров? ## Возвращаемые значения Наши функции до сих пор просто выводили сообщения в консоль, но что, если вы хотите, чтобы функция что-то вычисляла и возвращала результат? Вот где вступают в игру возвращаемые значения. Вместо того чтобы просто что-то отображать, функция может вернуть значение, которое вы можете сохранить в переменной или использовать в других частях вашего кода. Чтобы вернуть значение, используйте ключевое слово return, за которым следует то, что вы хотите вернуть: Вот что важно: когда функция достигает оператора return, она немедленно прекращает выполнение и возвращает это значение тому, кто вызвал функцию. Давайте изменим нашу функцию приветствия, чтобы она возвращала сообщение вместо его вывода: Теперь вместо вывода приветствия эта функция создает сообщение и передает его нам. Чтобы использовать возвращенное значение, мы можем сохранить его в переменной, как любое другое значение: Теперь greetingMessage содержит "Hello, Christopher", и мы можем использовать его где угодно в нашем коде — чтобы отобразить его на веб-странице, включить в электронное письмо или передать другой функции. ### 🔄 Проверка возвращаемых значений: получаем результаты Оцените ваше понимание возвращаемых значений: - Что происходит с кодом после оператора return в функции? - Почему возвращение значений часто лучше, чем просто вывод в консоль? - Может ли функция возвращать разные типы значений (строка, число, логическое значение)? ## Функции как параметры для функций Функции могут передаваться как параметры другим функциям. Хотя эта концепция может показаться сложной на первый взгляд, это мощная возможность, которая позволяет создавать гибкие шаблоны программирования. Этот шаблон очень распространен, когда вы хотите сказать: "когда что-то произойдет, сделай это". Например, "когда таймер закончится, выполните этот код" или "когда пользователь нажмет кнопку, вызовите эту функцию". Давайте рассмотрим setTimeout, встроенную функцию, которая ждет определенное время, а затем выполняет некоторый код. Мы должны указать ей, какой код выполнить — идеальный случай для передачи функции! Попробуйте этот код — через 3 секунды вы увидите сообщение: Обратите внимание, как мы передаем displayDone (без круглых скобок) в setTimeout. Мы не вызываем функцию сами — мы передаем ее setTimeout и говорим: "вызови это через 3 секунды". ### Анонимные функции Иногда вам нужна функция только для одного действия, и вы не хотите давать ей имя. Подумайте — если вы используете функцию только один раз, зачем загромождать код лишним именем? JavaScript позволяет создавать анонимные функции — функции без имени, которые можно определить прямо там, где они нужны. Вот как мы можем переписать наш пример с таймером, используя анонимную функцию: Это достигает того же результата, но функция определяется прямо внутри вызова setTimeout, исключая необходимость в отдельном объявлении функции. ### Функции-стрелки Современный JavaScript предлагает еще более краткий способ написания функций, называемый функциями-стрелками. Они используют => (что похоже на стрелку — согласны?) и очень популярны среди разработчиков. Функции-стрелки позволяют пропустить ключевое слово function и писать более лаконичный код. Вот наш пример с таймером, используя функцию-стрелку: () — это место, где могли бы быть параметры (в данном случае пусто), затем идет стрелка =>, и, наконец, тело функции в фигурных скобках. Это обеспечивает ту же функциональность с более кратким синтаксисом. ### Когда использовать каждый подход Когда следует использовать каждый подход? Практическое правило: если вы будете использовать функцию несколько раз, дайте ей имя и определите отдельно. Если она предназначена для одного конкретного использования, рассмотрите анонимную функцию. Оба подхода — функции-стрелки и традиционный синтаксис — являются допустимыми, хотя функции-стрелки широко распространены в современных кодовых базах JavaScript. ### 🎨 Проверка стилей функций: выбор подходящего синтаксиса Проверьте ваше понимание синтаксиса: - Когда вы можете предпочесть функции-стрелки традиционному синтаксису? - Какое основное преимущество анонимных функций? - Можете ли вы придумать ситуацию, когда именованная функция лучше, чем анонимная? --- ## 🚀 Задание Можете ли вы сформулировать в одном предложении разницу между функциями и методами? Попробуйте! ## Задание GitHub Copilot Agent 🚀 Используйте режим Agent, чтобы выполнить следующее задание: Описание: Создайте библиотеку утилит математических функций, демонстрирующую различные концепции функций, рассмотренные в этом уроке, включая параметры, значения по умолчанию, возвращаемые значения и функции-стрелки. Задание: Создайте JavaScript-файл под названием mathUtils.js, который содержит следующие функции: 1. Функция add, принимающая два параметра и возвращающая их сумму 2. Функция multiply с параметрами по умолчанию (второй параметр по умолчанию равен 1) 3. Функция-стрелка square, принимающая число и возвращающая его квадрат 4. Функция calculate, принимающая другую функцию в качестве параметра и два числа, затем применяющая функцию к этим числам 5. Продемонстрируйте вызов каждой функции с соответствующими тестовыми случаями Узнайте больше о режиме Agent здесь. ## Викторина после лекции Викторина после лекции ## Обзор и самостоятельное изучение Стоит почитать немного больше о функциях-стрелках, так как они все чаще используются в кодовых базах. Попробуйте написать функцию, а затем переписать ее с использованием этого синтаксиса. ## Задание Веселимся с функциями --- ## 🧰 Резюме вашего инструментария функций JavaScript --- ## 🚀 Ваш таймлайн освоения функций JavaScript ### ⚡ Что вы можете сделать за следующие 5 минут - [ ] Напишите простую функцию, которая возвращает ваше любимое число - [ ] Создайте функцию с двумя параметрами, которая складывает их вместе - [ ] Попробуйте преобразовать традиционную функцию в синтаксис стрелочной функции - [ ] Практикуйте задачу: объясните разницу между функциями и методами ### 🎯 Что можно успеть за этот час - [ ] Пройти тест после урока и разобрать непонятные моменты - [ ] Создать библиотеку математических утилит из задания GitHub Copilot - [ ] Написать функцию, которая принимает другую функцию в качестве параметра - [ ] Попрактиковаться в написании функций с параметрами по умолчанию - [ ] Поэкспериментировать с шаблонными литералами в возвращаемых значениях функций ### 📅 Ваш недельный путь к мастерству функций - [ ] Выполнить задание "Веселье с функциями" творчески - [ ] Оптимизировать повторяющийся код, преобразовав его в переиспользуемые функции - [ ] Создать небольшой калькулятор, используя только функции (без глобальных переменных) - [ ] Практиковать стрелочные функции с методами массива, такими как map() и filter() - [ ] Создать коллекцию утилитарных функций для выполнения общих задач - [ ] Изучить функции высшего порядка и концепции функционального программирования ### 🌟 Ваш месячный путь к трансформации - [ ] Освоить сложные концепции функций, такие как замыкания и области видимости - [ ] Создать проект, который активно использует композицию функций - [ ] Внести вклад в open source, улучшив документацию по функциям - [ ] Научить кого-то другому синтаксису функций и их стилям - [ ] Изучить парадигмы функционального программирования в JavaScript - [ ] Создать личную библиотеку переиспользуемых функций для будущих проектов ### 🏆 Итоговая проверка мастерства функций Отпразднуйте свое мастерство в функциях: - Какая самая полезная функция, которую вы создали? - Как изучение функций изменило ваше представление о структуре кода? - Какой синтаксис функций вы предпочитаете и почему? - Какую реальную проблему вы бы решили, написав функцию? --- Отказ от ответственности: Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.

javascript

Основы JavaScript: принятие решений

Вы когда-нибудь задумывались, как приложения принимают умные решения? Например, как навигационная система выбирает самый быстрый маршрут или как термостат решает, когда включить отопление? Это фундаментальная концепция принятия решений в программировании. Точно так же, как Аналитическая машина Чарльза Бэббиджа была разработана для выполнения различных последовательностей операций в зависимости от условий, современные программы на JavaScript должны принимать решения, основываясь на изменяющихся обстоятельствах. Эта способность ветвиться и принимать решения превращает статичный код в отзывчивые, интеллектуальные приложения. В этом уроке вы узнаете, как реализовать условную логику в своих программах. Мы изучим условные операторы, операторы сравнения и логические выражения, которые позволяют вашему коду оценивать ситуации и реагировать соответствующим образом. ## Тест перед лекцией Тест перед лекцией Способность принимать решения и управлять потоком программы является фундаментальным аспектом программирования. В этом разделе рассматривается, как управлять путем выполнения ваших программ на JavaScript с использованием булевых значений и условной логики. [](https://youtube.com/watch?v=SxTp8j-fMMY "Принятие решений") ## Краткий обзор булевых значений Перед изучением принятия решений давайте вспомним булевые значения из нашего предыдущего урока. Названные в честь математика Джорджа Буля, эти значения представляют собой бинарные состояния – либо true, либо false. Никакой двусмысленности, никакой середины. Эти бинарные значения составляют основу всей вычислительной логики. Каждое решение, которое принимает ваша программа, в конечном итоге сводится к булевой оценке. Создание булевых переменных довольно просто: Это создает две переменные с явными булевыми значениями. ✅ Булевые значения названы в честь английского математика, философа и логика Джорджа Буля (1815–1864). ## Операторы сравнения и булевые значения На практике вы редко будете задавать булевые значения вручную. Вместо этого вы будете генерировать их, оценивая условия: «Это число больше другого?» или «Эти значения равны?» Операторы сравнения позволяют выполнять такие оценки. Они сравнивают значения и возвращают булевые результаты на основе отношений между операндами. ✅ Проверьте свои знания, написав несколько сравнений в консоли браузера. Удивил ли вас какой-либо возвращенный результат? ### 🧠 Проверка мастерства сравнения: понимание булевой логики Проверьте свое понимание сравнения: - Почему, по вашему мнению, === (строгое равенство) обычно предпочтительнее, чем == (нестрогое равенство)? - Можете ли вы предсказать, что вернет 5 === '5'? А как насчет 5 == '5'? - В чем разница между !== и !=? ## Оператор if Оператор if похож на вопрос в вашем коде. «Если это условие истинно, то сделай это». Это, вероятно, самый важный инструмент, который вы будете использовать для принятия решений в JavaScript. Вот как это работает: Условие помещается в круглые скобки, и если оно равно true, JavaScript выполняет код внутри фигурных скобок. Если оно равно false, JavaScript просто пропускает весь этот блок. Вы часто будете использовать операторы сравнения для создания этих условий. Давайте посмотрим практический пример: Поскольку 1000 >= 800 оценивается как true, код внутри блока выполняется, выводя в консоль «Покупаю новый ноутбук!». ## Оператор if..else Но что, если вы хотите, чтобы ваша программа делала что-то другое, когда условие ложно? Вот тут-то и появляется else – это как запасной план. Оператор else дает вам возможность сказать: «Если это условие не истинно, сделай вместо этого что-то другое». Теперь, поскольку 500 >= 800 равно false, JavaScript пропускает первый блок и вместо этого выполняет блок else. В консоли вы увидите: «Пока не могу позволить себе новый ноутбук!». ✅ Проверьте свое понимание этого кода и следующего кода, запустив его в консоли браузера. Измените значения переменных currentMoney и laptopPrice, чтобы изменить возвращаемый console.log(). ### 🎯 Проверка логики if-else: ветвление путей Оцените свое понимание условной логики: - Что произойдет, если currentMoney будет точно равен laptopPrice? - Можете ли вы придумать реальную ситуацию, где логика if-else была бы полезна? - Как вы могли бы расширить это, чтобы учитывать несколько диапазонов цен? ## Оператор switch Иногда вам нужно сравнить одно значение с несколькими вариантами. Хотя вы могли бы связать несколько операторов if..else, такой подход становится громоздким. Оператор switch предоставляет более чистую структуру для обработки нескольких дискретных значений. Концепция напоминает механические переключающие системы, использовавшиеся в ранних телефонных станциях – одно входное значение определяет, какой конкретный путь выполнения будет выбран. Вот как это устроено: - JavaScript оценивает выражение один раз - Оно просматривает каждый case, чтобы найти совпадение - Когда оно находит совпадение, выполняется соответствующий блок кода - break говорит JavaScript остановиться и выйти из switch - Если ни один из случаев не совпадает, выполняется блок default (если он есть) В этом примере JavaScript видит, что dayNumber равен 2, находит совпадающий case 2, устанавливает dayName как «Вторник», а затем выходит из switch. Результат? В консоли отображается «Сегодня вторник». ✅ Проверьте свое понимание этого кода и следующего кода, запустив его в консоли браузера. Измените значения переменной a, чтобы изменить возвращаемый console.log(). ### 🔄 Мастерство switch: множество вариантов Проверьте свое понимание switch: - Что произойдет, если вы забудете оператор break? - Когда вы бы использовали switch вместо нескольких операторов if-else? - Почему блок default полезен, даже если вы думаете, что учли все возможности? ## Логические операторы и булевые значения Сложные решения часто требуют оценки нескольких условий одновременно. Точно так же, как булева алгебра позволяет математикам комбинировать логические выражения, программирование предоставляет логические операторы для соединения нескольких булевых условий. Эти операторы позволяют создавать сложную условную логику, комбинируя простые оценки true/false. Эти операторы позволяют комбинировать условия полезными способами: - И (&&) означает, что оба условия должны быть истинными - ИЛИ (||) означает, что хотя бы одно условие должно быть истинным - НЕ (!) переворачивает true на false (и наоборот) ## Условия и решения с логическими операторами Давайте посмотрим, как эти логические операторы работают на более реалистичном примере: В этом примере: мы рассчитываем цену со скидкой 20% (640), затем оцениваем, покрывают ли наши доступные средства либо полную цену, либо цену со скидкой. Поскольку 600 соответствует порогу цены со скидкой 640, условие оценивается как true. ### 🧮 Проверка логических операторов: комбинирование условий Проверьте свое понимание логических операторов: - В выражении A && B, что произойдет, если A ложно? Будет ли B вообще оцениваться? - Можете ли вы придумать ситуацию, где вам понадобятся все три оператора (&&, ||, !)? - В чем разница между !user.isActive и user.isActive !== true? ### Оператор отрицания Иногда проще думать о том, когда что-то НЕ является истинным. Например, вместо того, чтобы спрашивать «Пользователь вошел в систему?», вы можете спросить «Пользователь НЕ вошел в систему?» Оператор восклицательного знака (!) переворачивает логику за вас. Оператор ! похож на выражение «наоборот...» – если что-то истинно, ! делает это ложным, и наоборот. ### Тернарные выражения Для простых условных присваиваний JavaScript предоставляет тернарный оператор. Этот лаконичный синтаксис позволяет записывать условное выражение в одной строке, что полезно, когда нужно присвоить одно из двух значений на основе условия. Это читается как вопрос: «Это условие истинно? Если да, используйте это значение. Если нет, используйте то значение». Ниже приведен более наглядный пример: ✅ Потратьте минуту, чтобы несколько раз прочитать этот код. Понимаете ли вы, как работают эти операторы? Вот что говорит эта строка: «firstNumber больше, чем secondNumber? Если да, поместите firstNumber в biggestNumber. Если нет, поместите secondNumber в biggestNumber». Тернарный оператор – это просто более короткий способ записать традиционный оператор if..else: Оба подхода дают идентичные результаты. Тернарный оператор предлагает краткость, в то время как традиционная структура if-else может быть более читаемой для сложных условий. --- ## 🚀 Задание Создайте программу, которая сначала написана с использованием логических операторов, а затем перепишите ее, используя тернарное выражение. Какой синтаксис вам больше нравится? --- ## Вызов GitHub Copilot Agent 🚀 Используйте режим Agent, чтобы выполнить следующее задание: Описание: Создайте комплексный калькулятор оценок, который демонстрирует несколько концепций принятия решений из этого урока, включая операторы if-else, switch, логические операторы и тернарные выражения. Задание: Напишите программу на JavaScript, которая принимает числовую оценку студента (0-100) и определяет его буквенную оценку, используя следующие критерии: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: ниже 60 Требования: 1. Используйте оператор if-else для определения буквенной оценки 2. Используйте логические операторы, чтобы проверить, прошел ли студент (оценка >= 60) И имеет ли он отличные результаты (оценка >= 90). 3. Используйте оператор switch, чтобы дать конкретную обратную связь для каждой буквенной оценки. 4. Используйте тернарный оператор, чтобы определить, может ли студент перейти на следующий курс (оценка >= 70). 5. Включите проверку ввода, чтобы убедиться, что оценка находится в диапазоне от 0 до 100. Протестируйте вашу программу с различными оценками, включая крайние случаи, такие как 59, 60, 89, 90, и недопустимые значения. Узнайте больше о режиме агента здесь. ## Викторина после лекции Викторина после лекции ## Обзор и самостоятельное изучение Узнайте больше о множестве доступных операторов на MDN. Изучите замечательный справочник по операторам от Джоша Комо! ## Задание Операторы --- ## 🧠 Резюме вашего инструментария для принятия решений --- ## 🚀 Ваш график освоения принятия решений в JavaScript ### ⚡ Что вы можете сделать за следующие 5 минут - [ ] Попрактиковаться с операторами сравнения в консоли браузера - [ ] Написать простое условие if-else, проверяющее ваш возраст - [ ] Попробовать задачу: переписать if-else с использованием тернарного оператора - [ ] Проверить, что происходит с различными "истинными" и "ложными" значениями ### 🎯 Что вы можете достичь за этот час - [ ] Пройти викторину после урока и пересмотреть непонятные концепции - [ ] Создать комплексный калькулятор оценок из задания GitHub Copilot - [ ] Построить простой дерево решений для реальной ситуации (например, выбор одежды) - [ ] Попрактиковаться в объединении нескольких условий с логическими операторами - [ ] Поэкспериментировать с операторами switch для различных случаев ### 📅 Ваш недельный путь к освоению логики - [ ] Завершить задание по операторам с творческими примерами - [ ] Создать мини-приложение викторины, используя различные условные структуры - [ ] Создать валидатор формы, проверяющий несколько условий ввода - [ ] Попрактиковаться с упражнениями из справочника по операторам Джоша Комо - [ ] Переписать существующий код, используя более подходящие условные структуры - [ ] Изучить короткую оценку (short-circuit evaluation) и её влияние на производительность ### 🌟 Ваш месячный путь к трансформации - [ ] Освоить сложные вложенные условия и поддерживать читаемость кода - [ ] Создать приложение с продвинутой логикой принятия решений - [ ] Внести вклад в open source, улучшая условную логику в существующих проектах - [ ] Обучить кого-то другому различным условным структурам и их применению - [ ] Исследовать подходы функционального программирования к условной логике - [ ] Создать личный справочник по лучшим практикам условной логики ### 🏆 Итоговая проверка вашего мастерства принятия решений Отпразднуйте ваше мастерство логического мышления: - Какую самую сложную логику принятия решений вы успешно реализовали? - Какая условная структура кажется вам наиболее естественной и почему? - Как изучение логических операторов изменило ваш подход к решению задач? - Какое реальное приложение могло бы выиграть от сложной логики принятия решений? --- Отказ от ответственности: Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.

javascript

Основы JavaScript: Массивы и циклы

## Викторина перед лекцией Викторина перед лекцией Задумывались ли вы, как сайты отслеживают товары в корзине или отображают список ваших друзей? Здесь на помощь приходят массивы и циклы. Массивы — это как цифровые контейнеры, которые хранят несколько элементов информации, а циклы позволяют работать с этими данными эффективно, без повторяющегося кода. Вместе эти два понятия составляют основу для обработки информации в ваших программах. Вы научитесь переходить от ручного написания каждого шага к созданию умного, эффективного кода, который может обрабатывать сотни или даже тысячи элементов быстро. К концу этого урока вы поймете, как выполнять сложные задачи с данными всего за несколько строк кода. Давайте изучим эти важные концепции программирования. [](https://youtube.com/watch?v=1U4qTyq02Xw "Массивы") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Циклы") ## Массивы Представьте массивы как цифровой шкаф для документов — вместо хранения одного документа в каждом ящике, вы можете организовать несколько связанных элементов в одном структурированном контейнере. В терминах программирования массивы позволяют хранить несколько элементов информации в одном организованном пакете. Будь то создание фотогалереи, управление списком задач или отслеживание рекордов в игре, массивы обеспечивают основу для организации данных. Давайте посмотрим, как они работают. ✅ Массивы повсюду! Можете ли вы придумать реальный пример массива, например, массив солнечных панелей? ### Создание массивов Создать массив очень просто — просто используйте квадратные скобки! Что здесь происходит? Вы только что создали пустой контейнер, используя квадратные скобки []. Представьте это как пустую полку в библиотеке — она готова хранить любые книги, которые вы хотите там организовать. Вы также можете заполнить массив начальными значениями сразу: Интересные моменты: - Вы можете хранить текст, числа или даже значения true/false в одном массиве - Просто разделяйте каждый элемент запятой — легко! - Массивы идеально подходят для хранения связанных данных вместе ### Индексация массивов Вот что может показаться необычным сначала: массивы нумеруют свои элементы, начиная с 0, а не с 1. Этот подход с нулевой индексацией связан с тем, как работает память компьютера — это программная традиция, существующая с ранних дней языков программирования, таких как C. Каждое место в массиве получает свой номер адреса, называемый индексом. ✅ Вас удивляет, что массивы начинают с нулевого индекса? В некоторых языках программирования индексы начинаются с 1. Это интересная история, о которой можно прочитать на Википедии. Доступ к элементам массива: Разберем, что здесь происходит: - Использует нотацию квадратных скобок с номером индекса для доступа к элементам - Возвращает значение, хранящееся в указанной позиции массива - Начинает счет с 0, делая первый элемент индексом 0 Изменение элементов массива: В приведенном выше примере мы: - Изменили элемент с индексом 4 с "Рокки Роуд" на "Масляный Пекан" - Добавили новый элемент "Тесто для печенья" с индексом 5 - Автоматически увеличили длину массива при добавлении за пределы текущих границ ### Длина массива и основные методы Массивы имеют встроенные свойства и методы, которые упрощают работу с данными. Определение длины массива: Основные моменты: - Возвращает общее количество элементов в массиве - Обновляется автоматически при добавлении или удалении элементов - Предоставляет динамический счетчик, полезный для циклов и проверки Основные методы массива: Понимание этих методов: - Добавляет элементы с помощью push() (в конец) и unshift() (в начало) - Удаляет элементы с помощью pop() (с конца) и shift() (с начала) - Находит элементы с помощью indexOf() и проверяет наличие с помощью includes() - Возвращает полезные значения, такие как удаленные элементы или индексы позиций ✅ Попробуйте сами! Используйте консоль вашего браузера, чтобы создать и изменить массив собственного создания. ### 🧠 Проверка основ массива: Организация данных Проверьте свое понимание массивов: - Почему, по вашему мнению, массивы начинают счет с 0, а не с 1? - Что произойдет, если вы попытаетесь получить доступ к индексу, который не существует (например, arr[100] в массиве из 5 элементов)? - Можете ли вы придумать три сценария из реальной жизни, где массивы были бы полезны? ## Циклы Представьте наказание из романов Чарльза Диккенса, где ученики должны были многократно писать строки на доске. А теперь представьте, что вы можете просто сказать кому-то: "Напиши это предложение 100 раз", и оно будет выполнено автоматически. Именно это делают циклы для вашего кода. Циклы — это как иметь неутомимого помощника, который может повторять задачи без ошибок. Будь то проверка каждого элемента в корзине покупок или отображение всех фотографий в альбоме, циклы эффективно справляются с повторением. JavaScript предоставляет несколько типов циклов на выбор. Давайте рассмотрим каждый из них и поймем, когда их использовать. ### Цикл For Цикл for похож на установку таймера — вы точно знаете, сколько раз хотите, чтобы что-то произошло. Он супер организован и предсказуем, что делает его идеальным для работы с массивами или подсчета чего-либо. Структура цикла For: Шаг за шагом, вот что происходит: - Инициализирует переменную счетчика i со значением 0 в начале - Проверяет условие i < 10 перед каждой итерацией - Выполняет блок кода, если условие истинно - Увеличивает i на 1 после каждой итерации с помощью i++ - Останавливается, когда условие становится ложным (когда i достигает 10) ✅ Запустите этот код в консоли браузера. Что произойдет, если вы внесете небольшие изменения в счетчик, условие или выражение итерации? Можете ли вы заставить его работать в обратном порядке, создавая обратный отсчет? ### 🗓️ Проверка мастерства цикла For: Контролируемое повторение Оцените свое понимание цикла for: - Какие три части составляют цикл for, и что делает каждая из них? - Как бы вы прошли по массиву в обратном порядке? - Что произойдет, если вы забудете часть инкремента (i++)? ### Цикл While Цикл while похож на фразу "продолжай делать это, пока..." — вы можете не знать точно, сколько раз он будет выполняться, но знаете, когда остановиться. Он идеально подходит для таких задач, как запрос ввода от пользователя, пока он не предоставит нужные данные, или поиск в данных, пока не найдете то, что ищете. Характеристики цикла While: - Продолжает выполнение, пока условие истинно - Требует ручного управления любыми переменными счетчика - Проверяет условие перед каждой итерацией - Рискует бесконечным циклом, если условие никогда не станет ложным Понимание этих примеров: - Управляет переменной счетчика i вручную внутри тела цикла - Увеличивает счетчик, чтобы предотвратить бесконечные циклы - Демонстрирует практическое использование с вводом пользователя и ограничением попыток - Включает механизмы безопасности для предотвращения бесконечного выполнения ### ♾️ Проверка мудрости цикла While: Повторение на основе условий Проверьте свое понимание цикла while: - Какова основная опасность при использовании циклов while? - Когда вы выбрали бы цикл while вместо цикла for? - Как можно предотвратить бесконечные циклы? ### Современные альтернативы циклов JavaScript предлагает современный синтаксис циклов, который может сделать ваш код более читаемым и менее склонным к ошибкам. Цикл For...of (ES6+): Основные преимущества for...of: - Устраняет управление индексами и потенциальные ошибки на единицу - Предоставляет прямой доступ к элементам массива - Улучшает читаемость кода и снижает сложность синтаксиса Метод forEach: Что нужно знать о forEach: - Выполняет функцию для каждого элемента массива - Предоставляет как значение элемента, так и индекс в качестве параметров - Не может быть остановлен преждевременно (в отличие от традиционных циклов) - Возвращает undefined (не создает новый массив) ✅ Почему вы выбрали бы цикл for вместо цикла while? 17 тысяч зрителей задавали тот же вопрос на StackOverflow, и некоторые мнения могут быть вам интересны. ### 🎨 Проверка синтаксиса современных циклов: Осваиваем ES6+ Оцените свое понимание современного JavaScript: - Каковы преимущества for...of по сравнению с традиционными циклами for? - Когда вы все еще предпочли бы традиционные циклы for? - В чем разница между forEach и map? ## Циклы и массивы Сочетание массивов с циклами создает мощные возможности обработки данных. Это сочетание является основой многих задач программирования, от отображения списков до вычисления статистики. Традиционная обработка массивов: Давайте разберем каждый подход: - Использует свойство длины массива для определения границы цикла - Получает доступ к элементам по индексу в традиционных циклах for - Предоставляет прямой доступ к элементам в циклах for...of - Обрабатывает каждый элемент массива ровно один раз Пример практической обработки данных: Вот как работает этот код: - Инициализирует переменные для отслеживания суммы и экстремальных значений - Обрабатывает каждую оценку с помощью одного эффективного цикла - Накопляет общий итог для расчета среднего значения - Отслеживает наивысшие и наименьшие значения во время итерации - Вычисляет окончательную статистику после завершения цикла ✅ Экспериментируйте с итерацией по массиву собственного создания в консоли вашего браузера. --- ## Задача GitHub Copilot Agent 🚀 Используйте режим Agent, чтобы выполнить следующую задачу: Описание: Создайте комплексную функцию обработки данных, которая сочетает массивы и циклы для анализа набора данных и генерации значимых выводов. Запрос: Создайте функцию analyzeGrades, которая принимает массив объектов с оценками студентов (каждый содержит свойства name и score) и возвращает объект со статистикой, включая наивысшую оценку, наименьшую оценку, среднюю оценку, количество студентов, которые сдали (score >= 70), и массив имен студентов, которые набрали выше среднего. Используйте как минимум два разных типа циклов в вашем решении. Узнайте больше о режиме Agent здесь. ## 🚀 Задача JavaScript предлагает несколько современных методов работы с массивами, которые могут заменить традиционные циклы для выполнения определенных задач. Ознакомьтесь с forEach, for-of, map, filter и reduce. Ваше задание: Перепишите пример с оценками студентов, используя как минимум три различных метода работы с массивами. Обратите внимание, насколько чище и понятнее становится код благодаря современному синтаксису JavaScript. ## Викторина после лекции Викторина после лекции ## Обзор и самостоятельное изучение Массивы в JavaScript имеют множество встроенных методов, которые чрезвычайно полезны для работы с данными. Изучите эти методы и попробуйте некоторые из них (например, push, pop, slice и splice) на созданном вами массиве. ## Задание Цикл по массиву --- ## 📊 Ваш набор инструментов для работы с массивами и циклами --- ## 🚀 Таймлайн освоения массивов и циклов ### ⚡ Что можно сделать за следующие 5 минут - [ ] Создайте массив ваших любимых фильмов и получите доступ к конкретным элементам - [ ] Напишите цикл for, который считает от 1 до 10 - [ ] Попробуйте выполнить задание с современными методами работы с массивами из урока - [ ] Попрактикуйтесь с индексами массива в консоли вашего браузера ### 🎯 Что можно достичь за час - [ ] Пройдите викторину после урока и разберите сложные моменты - [ ] Создайте комплексный анализатор оценок из задания GitHub Copilot - [ ] Создайте простой список покупок, который добавляет и удаляет элементы - [ ] Попрактикуйтесь в преобразовании между различными типами циклов - [ ] Экспериментируйте с методами массива, такими как push, pop, slice и splice ### 📅 Ваш недельный путь к обработке данных - [ ] Выполните задание "Цикл по массиву" с творческими дополнениями - [ ] Создайте приложение списка дел, используя массивы и циклы - [ ] Создайте простой калькулятор статистики для числовых данных - [ ] Попрактикуйтесь с методами массива на MDN - [ ] Создайте интерфейс фотогалереи или музыкального плейлиста - [ ] Изучите функциональное программирование с использованием map, filter и reduce ### 🌟 Ваш месячный путь трансформации - [ ] Освойте продвинутые операции с массивами и оптимизацию производительности - [ ] Создайте полноценную панель визуализации данных - [ ] Внесите вклад в проекты с открытым исходным кодом, связанные с обработкой данных - [ ] Научите кого-то работать с массивами и циклами, используя практические примеры - [ ] Создайте личную библиотеку функций для обработки данных - [ ] Изучите алгоритмы и структуры данных, построенные на массивах ### 🏆 Итоговая проверка мастерства обработки данных Отпразднуйте свое мастерство работы с массивами и циклами: - Какую операцию с массивами вы считаете самой полезной для реальных приложений? - Какой тип цикла кажется вам наиболее естественным и почему? - Как понимание массивов и циклов изменило ваш подход к организации данных? - Какую сложную задачу обработки данных вы хотели бы решить дальше? --- Отказ от ответственности: Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.

javascript

Úvod do JavaScriptu

JavaScript je jazyk webu. V týchto štyroch lekciách sa naučíte jeho základy. ### Témy 1. Premenné a dátové typy 2. Funkcie a metódy 3. Rozhodovanie pomocou JavaScriptu 4. Polia a cykly ### Kredity Tieto lekcie boli napísané s ♥️ od Jasmine Greenaway, Christopher Harrison a Chris Noring --- Upozornenie: Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Aj keď sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.

javascript

JavaScript Základy: Dátové Typy

Dátové typy sú jedným zo základných pojmov v JavaScripte, na ktoré narazíte v každom programe, ktorý napíšete. Predstavte si dátové typy ako systém archivácie používaný starovekými knihovníkmi v Alexandrii – mali špecifické miesta pre zvitky obsahujúce poéziu, matematiku a historické záznamy. JavaScript organizuje informácie podobným spôsobom s rôznymi kategóriami pre rôzne typy dát. V tejto lekcii preskúmame základné dátové typy, ktoré umožňujú JavaScriptu fungovať. Naučíte sa, ako pracovať s číslami, textom, pravdivostnými hodnotami a pochopíte, prečo je výber správneho typu nevyhnutný pre vaše programy. Tieto koncepty sa môžu spočiatku zdať abstraktné, ale s praxou sa stanú druhou prirodzenosťou. Pochopenie dátových typov spraví všetko ostatné v JavaScripte oveľa jasnejším. Rovnako ako architekti potrebujú pochopiť rôzne stavebné materiály predtým, než postavia katedrálu, tieto základy podporia všetko, čo budete budovať ďalej. ## Prednáškový kvíz Prednáškový kvíz Táto lekcia pokrýva základy JavaScriptu, jazyka, ktorý dodáva webu interaktivitu. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Premenné v JavaScripte") [](https://youtube.com/watch?v=AWfA95eLdq8 "Dátové typy v JavaScripte") Začnime s premennými a dátovými typmi, ktoré ich napĺňajú! ## Premenné Premenné sú základné stavebné kamene programovania. Rovnako ako označené nádoby, ktoré stredovekí alchymisti používali na uchovávanie rôznych látok, premenné vám umožňujú uchovať informácie a dať im popisný názov, aby ste ich mohli neskôr odkazovať. Potrebujete si zapamätať vek niekoho? Uložte ho do premennej nazvanej age. Chcete sledovať meno používateľa? Uchovajte ho v premennej nazvanej userName. Zameriame sa na moderný prístup k vytváraniu premenných v JavaScripte. Techniky, ktoré sa tu naučíte, predstavujú roky vývoja jazyka a najlepších praktík vyvinutých programátorskou komunitou. Vytvorenie a deklarovanie premennej má nasledujúcu syntax [kľúčové_slovo] [názov]. Skladá sa z dvoch častí: - Kľúčové slovo. Použite let pre premenné, ktoré sa môžu meniť, alebo const pre hodnoty, ktoré zostávajú rovnaké. - Názov premennej, čo je popisný názov, ktorý si vyberiete sami. ✅ Kľúčové slovo let bolo predstavené v ES6 a dáva vašej premennej tzv. _blokový rozsah_. Odporúča sa používať let alebo const namiesto staršieho kľúčového slova var. O blokových rozsahoch sa budeme podrobnejšie zaoberať v budúcich častiach. ### Úloha – práca s premennými 1. Deklarujte premennú. Začnime vytvorením našej prvej premennej: ```javascript let myVariable; ``` Čo sa tým dosahuje: - Týmto hovoríme JavaScriptu, aby vytvoril pamäťové miesto nazvané myVariable - JavaScript alokuje miesto v pamäti pre túto premennú - Premenná momentálne nemá žiadnu hodnotu (undefined) 2. Dajte jej hodnotu. Teraz vložme niečo do našej premennej: ```javascript myVariable = 123; ``` Ako funguje priradenie: - Operátor = priradí hodnotu 123 do našej premennej - Premenná teraz obsahuje túto hodnotu namiesto undefined - Túto hodnotu môžete použiť v celom vašom kóde pomocou myVariable > Poznámka: použitie = v tejto lekcii znamená využitie "operátora priradenia", ktorý slúži na nastavenie hodnoty pre premennú. Neznamená to rovnosť. 3. Urobme to šikovnejšie. V skutočnosti skombinujme tieto dva kroky: ```javascript let myVariable = 123; ``` Tento prístup je efektívnejší: - Deklarujete premennú a zároveň jej priraďujete hodnotu v jednom príkaze - Toto je štandardná prax medzi vývojármi - Znižuje to dĺžku kódu pri zachovaní prehľadnosti 4. Zmeňte názor. Čo ak chceme uložiť iné číslo? ```javascript myVariable = 321; ``` Pochopenie prepisovania hodnoty: - Premenná teraz obsahuje 321 namiesto 123 - Predchádzajúca hodnota je nahradená – premenné ukladajú vždy len jednu hodnotu - Táto zmena je kľúčovým znakom premenných deklarovaných pomocou let ✅ Vyskúšajte! JavaScript môžete písať priamo vo vašom prehliadači. Otvorte si okno prehliadača a prejdite do Nástrojov pre vývojárov. V konzole nájdete prompt; zadajte let myVariable = 123, stlačte Enter, potom zadajte myVariable. Čo sa stane? Viac o týchto konceptoch sa naučíte v nasledujúcich lekciách. ### 🧠 Ovládanie premenných: Pohodlnosť Skontrolujme, ako vám premenné idú: - Viete vysvetliť rozdiel medzi deklarovaním a priradením premennej? - Čo sa stane, ak sa pokúsite použiť premennú pred jej deklarovaním? - Kedy by ste volili let namiesto const pre premennú? ## Konštanty Niekedy potrebujete uložiť informácie, ktoré by sa počas vykonávania programu nikdy nemali meniť. Predstavte si konštanty ako matematické princípy, ktoré Euklides stanovil v starovekom Grécku – keď boli dokázané a zdokumentované, zostali pevné pre všetky budúce použitia. Konštanty fungujú podobne ako premenné, ale s dôležitým obmedzením: keď im priradíte hodnotu, už ju nemôžete zmeniť. Táto nemenna vlastnosť pomáha zabrániť neúmyselným zmenám kritických hodnôt vo vašom programe. Deklarácia a inicializácia konštanty sa riadi rovnakými princípmi ako premennej, s výnimkou použitia kľúčového slova const. Konštanty sa zvyčajne deklarujú veľkými písmenami. Tento kód vykonáva: - Vytvára konštantu s názvom MY_VARIABLE a hodnotou 123 - Používa konvenciu veľkých písmen pre konštanty - Zabraňuje akýmkoľvek budúcim zmenám tejto hodnoty Konštanty majú dve hlavné pravidlá: - Musíte im hneď dať hodnotu – prázdne konštanty nie sú povolené! - Nikdy nesmiete túto hodnotu zmeniť – JavaScript vyhodí chybu, ak sa to pokúsite. Pozrime sa na to: Jednoduchá hodnota - Toto NIE JE povolené: ```javascript const PI = 3; PI = 4; // nie je povolené ``` Čo si zapamätať: - Pokusy o zmenu hodnoty konštanty spôsobia chybu - Chráni dôležité hodnoty pred neúmyselnými zmenami - Zabezpečuje, že hodnota zostane konzistentná počas celého programu Odkaz na objekt je chránený - Toto NIE JE povolené: ```javascript const obj = { a: 3 }; obj = { b: 5 } // nie je povolené ``` Pochopenie konceptu: - Zabraňuje nahradeniu celého objektu novým - Chráni odkaz na pôvodný objekt - Zachováva identitu objektu v pamäti Hodnota objektu nie je chránená - Toto je POVOLENÉ: ```javascript const obj = { a: 3 }; obj.a = 5; // povolené ``` Čo sa tu deje: - Mení hodnotu vlastnosti v objekte - Zachováva ten istý odkaz na objekt - Ukazuje, že obsah objektu sa môže meniť, kým odkaz zostáva konštantný > Poznámka, const znamená, že odkaz je chránený pred zmenou. Hodnota však nie je _nemenná_ a môže sa meniť, najmä ak ide o komplexnú štruktúru ako objekt. ## Dátové Typy JavaScript organizuje informácie do rôznych kategórií nazývaných dátové typy. Tento koncept je podobný tomu, ako starovekí učenci kategorizovali poznanie – Aristoteles rozlišoval medzi rôznymi typmi uvažovania, vedel, že logické princípy nemožno jednotne aplikovať na poéziu, matematiku a prírodnú filozofiu. Dátové typy sú dôležité, pretože rôzne operácie pracujú s rôznymi druhmi informácií. Rovnako ako nemôžete vykonávať aritmetiku na meno osoby alebo abecedne usporiadať matematickú rovnicu, JavaScript vyžaduje správny dátový typ pre každú operáciu. Pochopenie tohto zabraňuje chybám a robí váš kód spoľahlivejším. Premenné môžu ukladať rôzne typy hodnôt, ako sú čísla a text. Tieto rôzne typy hodnôt sa nazývajú dátové typy. Dátové typy sú dôležitou súčasťou vývoja softvéru, pretože pomáhajú programátorom rozhodnúť, ako by mal byť kód napísaný a ako by mal softvér fungovať. Ďalej niektoré dátové typy majú unikátne vlastnosti, ktoré pomáhajú transformovať alebo vyťažiť ďalšie informácie z hodnoty. ✅ Dátové typy sa tiež nazývajú primitívne dátové typy JavaScriptu, pretože sú to najnižšie úrovne dátových typov poskytovaných jazykom. Existuje 7 primitívnych dátových typov: string, number, bigint, boolean, undefined, null a symbol. Na chvíľu si predstavte, čo každý z týchto primitívov môže reprezentovať. Čo je to zebra? A čo 0? true? ### Čísla Čísla sú najjednoduchším dátovým typom v JavaScripte. Či už pracujete s celými číslami ako 42, desatinnými číslami ako 3.14, alebo zápornými číslami ako -5, JavaScript ich spracováva jednotne. Pamätáte si našu premennú z predtým? To 123, ktoré sme uložili, bolo vlastne číslo: Kľúčové charakteristiky: - JavaScript automaticky rozpozná numerické hodnoty - Môžete vykonávať matematické operácie s týmito premennými - Nie je potrebné explicitné deklarovanie typu Premenné môžu ukladať všetky typy čísel, vrátane desatinných alebo záporných čísel. Čísla sa tiež dajú použiť s aritmetickými operátormi, ktoré sú popísané v nasledujúcej sekcii. ### Aritmetické operátory Aritmetické operátory vám umožňujú vykonávať matematické výpočty v JavaScripte. Tieto operátory nasledujú rovnaké princípy, ktoré používali matematickí vedci po stáročia – tie isté symboly, ktoré sa objavili v dielach učencov ako Al-Chvárizmí, ktorý vyvinul algebraickú notáciu. Tieto operátory fungujú tak, ako by ste očakávali: plus na sčítanie, mínus na odčítanie a tak ďalej. Existuje niekoľko typov operátorov na použitie pri aritmetických funkciách, a niektoré sú tu uvedené: ✅ Vyskúšajte! Skúste aritmetickú operáciu v konzole vášho prehliadača. Prekvapili vás výsledky? ### 🧮 Kontrola matematických zručností: Spočítajte s dôverou Otestujte svoje pochopenie aritmetiky: - Aký je rozdiel medzi / (delenie) a % (zvyšok po delení)? - Viete predpovedať, čo je výsledkom 10 % 3? (Nápoveda: nie je to 3,33...) - Načo môže byť operátor zvyšku po delení užitočný v programovaní? ### Reťazce V JavaScripte sú textové dáta reprezentované ako reťazce. Termín "string" pochádza z konceptu znakov spojených do radu, podobne ako písači v stredovekých kláštoroch spájali písmená, aby vytvorili slová a vety v rukopisoch. Reťazce sú základom webového vývoja. Každý text zobrazený na webovej stránke – používateľské mená, popisky tlačidiel, chybové hlásenia, obsah – je spracovaný ako dátový reťazec. Pochopenie reťazcov je nevyhnutné na vytváranie funkčných používateľských rozhraní. Reťazce sú množinou znakov umiestnených medzi jednoduchými alebo dvojitými úvodzovkami. Pochopenie týchto konceptov: - Používa buď jednoduché úvodzovky ' alebo dvojité úvodzovky " na definovanie reťazcov - Ukladá textové dáta, ktoré môžu obsahovať písmená, čísla a symboly - Priraďuje hodnoty reťazcov premenným na neskoršie použitie - Vyžaduje úvodzovky na rozlíšenie textu od názvov premenných Pamätajte si použiť úvodzovky pri písaní reťazca, inak JavaScript predpokladá, že ide o názov premennej. ### Formátovanie reťazcov Manipulácia s reťazcami vám umožňuje spojiť textové prvky, vložiť premenné a vytvoriť dynamický obsah, ktorý reaguje na stav programu. Táto technika vám umožňuje programovo konštruovať text. Často je potrebné spojiť viaceré reťazce dokopy – tento proces sa nazýva konkatenácia. Na spojenie dvoch alebo viacerých reťazcov, alebo ich zjednotenie, použite operátor +. Krok za krokom, toto sa deje: - Kombinuje viacero reťazcov použitím operátora + - Zlučuje reťazce priamo za sebou bez medzier v prvom príklade - Pridáva medzery " " medzi reťazce pre lepšiu čitateľnosť - Vkladá interpunkciu ako čiarky na správne naformátovanie ✅ Prečo v JavaScripte platí 1 + 1 = 2, ale '1' + '1' = 11? Zamyslite sa nad tým. A čo '1' + 1? Šablónové reťazce sú ďalší spôsob formátovania reťazcov, kde namiesto úvodzoviek sa používa znak spätného apostrofu (backtick). Čokoľvek, čo nie je obyčajným textom, musí byť umiestnené v zástupných výrazoch ${ }. To zahŕňa aj premenné, ktoré môžu byť reťazce. Pochopme každú časť: - Používa spätné apostrofy ` `` namiesto bežných úvodzoviek na vytvorenie šablónových reťazcov - Vkladá premenné priamo pomocou syntaxe ${} - Zachováva medzery a formátovanie presne tak, ako sú napísané - Poskytuje čistejší spôsob tvorby zložitých reťazcov s premennými Na dosiahnutie požadovaného formátovania môžete použiť ktorýkoľvek spôsob, ale šablónové reťazce budú rešpektovať všetky medzery a zalomenia riadkov. ✅ Kedy by ste použili šablónový reťazec namiesto obyčajného reťazca? ### 🔤 Kontrola zručností s reťazcami: Sebadôvera v manipulácii s textom Zhodnoťte svoje schopnosti s reťazcami: - Dokážete vysvetliť, prečo '1' + '1' je '11' namiesto 2? - Ktorú metódu reťazca považujete za zrozumiteľnejšiu: konkatenáciu alebo šablónové reťazce? - Čo sa stane, ak zabudnete úvodzovky okolo reťazca? ### Boolean (logické hodnoty) Boolean predstavuje najjednoduchší typ dát: môže mať len dve hodnoty – true alebo false. Tento binárny logický systém pochádza z práce Georga Boolea, matematika z 19. storočia, ktorý vyvinul Booleovu algebru. Napriek svojej jednoduchosti sú booleany nevyhnutné pre logiku programov. Umožňujú vášmu kódu robiť rozhodnutia na základe podmienok – či je používateľ prihlásený, či bol stlačený tlačidlo alebo či sú splnené určité kritériá. Boolean môže nadobúdať len dve hodnoty: true alebo false. Boolovské hodnoty pomáhajú rozhodnúť, ktoré riadky kódu sa majú vykonať, keď sú splnené určité podmienky. Vo veľa prípadoch operátory pomáhajú nastaviť hodnotu boolovskej premennej a často si všimnete, že premenné sú inicializované alebo ich hodnoty aktualizované pomocou operátora. Čo sme v príklade urobili: - Vytvorili premennú, ktorá ukladá hodnotu boolean true - Ukázali, ako uložiť boolean hodnotu false - Použili presné kľúčové slová true a false (nie sú potrebné úvodzovky) - Pripravili tieto premenné na použitie v podmienkových výrazoch ✅ Premenná môže byť považovaná za „pravdivú“ (truthy), ak vyhodnocuje na boolovú hodnotu true. Zaujímavosťou je, že v JavaScripte sú všetky hodnoty pravdivé, pokiaľ nie sú definované ako falsy. ### 🎯 Kontrola logiky booleanov: Schopnosť rozhodovať Otestujte svoje pochopenie boolean: - Prečo si myslíte, že JavaScript má okrem true a false aj „truthy“ a „falsy“ hodnoty? - Dokážete predpovedať, ktorá z týchto hodnôt je falsy: 0, "0", [], "false"? - Ako môžu byť booleany užitočné v riadení toku programov? --- ## 📊 Zhrnutie nástrojov na dátové typy ## Výzva GitHub Copilot agenta 🚀 Použite režim Agenta na splnenie nasledujúcej výzvy: Popis: Vytvorte správcu osobných informácií, ktorý demonštruje všetky JavaScriptové dátové typy naučené v tejto lekcii a zároveň spracováva scenáre reálnych dát. Úloha: Napíšte JavaScript program, ktorý vytvorí objekt profilu používateľa obsahujúci: meno osoby (reťazec), vek (číslo), stav študenta (boolean), obľúbené farby ako pole a objekt adresy s ulicou, mestom a poštovým kódom. Pridajte funkcie na zobrazenie informácií profilu a aktualizáciu jednotlivých polí. Nezabudnite demonštrovať spojenie reťazcov, šablónové reťazce, aritmetické operácie s vekom a logiku booleanu pre študentský stav. Viac o režime agenta sa dozviete tu. ## 🚀 Výzva JavaScript má niektoré správanie, ktoré môže vývojárov prekvapiť. Tu je klasický príklad na preskúmanie: skúste zadať do konzoly vášho prehliadača: let age = 1; let Age = 2; age == Age a pozorujte výsledok. Vráti false – viete určiť prečo? Toto je len jeden z mnohých javov v JavaScripte, ktoré je dobré pochopiť. Znalosť týchto zvláštností vám pomôže písať spoľahlivejší kód a efektívnejšie odstraňovať chyby. ## Kvíz po prednáške Post-lecture quiz ## Prehľad a samostatné štúdium Pozrite sa na tento zoznam JavaScriptových cvičení a skúste si jedno. Čo ste sa naučili? ## Zadanie Precvičovanie dátových typov ## 🚀 Plán zvládnutia dátových typov v JavaScripte ### ⚡ Čo zvládnete za najbližších 5 minút - [ ] Otvorte konzolu v prehliadači a vytvorte 3 premenné s rôznymi dátovými typmi - [ ] Vyskúšajte výzvu: let age = 1; let Age = 2; age == Age a zistite, prečo je to false - [ ] Precvičte si spájanie reťazcov s vaším menom a obľúbeným číslom - [ ] Otestujte, čo sa stane, keď k reťazcu pripojíte číslo ### 🎯 Čo zvládnete za túto hodinu - [ ] Dokončite kvíz po lekcii a obnovte si nejasné pojmy - [ ] Vytvorte mini kalkulačku, ktorá sčíta, odčíta, vynásobí a vydelí dve čísla - [ ] Postavte jednoduchý formátovač mena pomocou šablónových reťazcov - [ ] Preskúmajte rozdiely medzi operátormi porovnania == a === - [ ] Precvičte si konverziu medzi rôznymi dátovými typmi ### 📅 Týždeň základy JavaScriptu - [ ] S istotou a kreativitou dokončite zadanie - [ ] Vytvorte osobný profilový objekt využitím všetkých naučených dátových typov - [ ] Precvičte si úlohy z JavaScriptových cvičení od CSS-Tricks - [ ] Postavte jednoduchý validátor formulárov pomocou booleanovej logiky - [ ] Experimentujte s poliami a objektovými dátovými typmi (náhľad na nadchádzajúce lekcie) - [ ] Pridajte sa do JavaScriptovej komunity a pýtajte sa na dátové typy ### 🌟 Mesačná transformácia - [ ] Integrujte vedomosti o dátových typoch do väčších programovacích projektov - [ ] Pochopte, kedy a prečo používať ktorý dátový typ v reálnych aplikáciách - [ ] Pomáhajte začínajúcim programátorom chápať základy JavaScriptu - [ ] Postavte malú aplikáciu na správu rôznych typov používateľských dát - [ ] Preskúmajte pokročilé koncepty ako koercia typov a prísna rovnosť - [ ] Prispievajte do open source projektov v JavaScripte zlepšovaním dokumentácie ### 🧠 Záverečná kontrola zvládnutia dátových typov Oslávte svoj základ v JavaScripte: - Ktorý dátový typ vás najviac prekvapil svojím správaním? - Ako dobre sa cítite vysvetľovať premenné vs. konštanty priateľovi? - Čo je najzaujímavejšia vec, ktorú ste objavili o systéme typov v JavaScripte? - Ktorú reálnu aplikáciu by ste si vedeli predstaviť vytvoriť s týmito základmi? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Vylúčenie zodpovednosti: Tento dokument bol preložený pomocou AI prekladateľskej služby Co-op Translator. Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nezodpovedáme za žiadne nedorozumenia alebo nesprávne výklady vyplývajúce z použitia tohto prekladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Základy JavaScriptu: Metódy a funkcie

## Prednáškový kvíz Prednáškový kvíz Opakované písanie rovnakého kódu je jednou z najčastejších frustrácií programovania. Funkcie riešia tento problém tým, že vám umožňujú zabaliť kód do opakovane použiteľných blokov. Myslite na funkcie ako na štandardizované diely, ktoré urobili výrobné linky Henryho Forda revolučnými – akonáhle vytvoríte spoľahlivý komponent, môžete ho použiť kdekoľvek bez toho, aby ste ho museli znovu vytvárať od nuly. Funkcie vám umožňujú zoskupiť kúsky kódu, aby ste ich mohli znova použiť v celom vašom programe. Namiesto kopírovania a vkladania rovnakého logiky všade môžete vytvoriť funkciu raz a volať ju vždy, keď ju potrebujete. Tento prístup udržiava váš kód organizovaný a uľahčuje aktualizácie. V tejto lekcii sa naučíte, ako vytvoriť vlastné funkcie, ako im odovzdávať informácie a ako získať užitočné výsledky späť. Zistíte rozdiel medzi funkciami a metódami, naučíte sa moderné syntaktické prístupy a uvidíte, ako funkcie môžu pracovať s inými funkciami. Tieto koncepty budeme budovať krok za krokom. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metódy a funkcie") ## Funkcie Funkcia je samostatný blok kódu, ktorý vykonáva konkrétnu úlohu. Zahrňuje logiku, ktorú môžete spustiť vždy, keď je to potrebné. Namiesto písania rovnakého kódu niekoľkokrát v celom programe ho môžete zabaliť do funkcie a túto funkciu volať vždy, keď ju potrebujete. Tento prístup udržiava váš kód čistý a uľahčuje aktualizácie. Predstavte si, akú výzvu by predstavovala údržba, ak by ste mali meniť logiku roztrúsenú na 20 rôznych miestach vo vašom kóde. Je dôležité pomenovať vaše funkcie vydatne. Dobre pomenovaná funkcia jasne komunikuje svoj účel – keď vidíte cancelTimer(), okamžite chápete, čo robí, presne ako jasne označené tlačidlo vám presne povie, čo sa stane, keď naň kliknete. ## Vytvorenie a volanie funkcie Pozrime sa, ako vytvoriť funkciu. Syntax nasleduje konzistentný vzor: Rozoberme si to: - Kľúčové slovo function hovorí JavaScriptu „Hej, vytváram funkciu!“ - nameOfFunction je miesto, kde dáte funkcii popisný názov - Zátvorky () sú miesto, kde môžete pridať parametre (k tomu sa čoskoro dostaneme) - Kľúčové zátvorky {} obsahujú skutočný kód, ktorý sa spustí, keď funkciu zavoláte Vytvorme jednoduchú funkciu na pozdrav, aby sme to videli v praxi: Táto funkcia vypíše „Hello, world!“ do konzoly. Akonáhle ju definujete, môžete ju použiť toľkokrát, koľkokrát budete potrebovať. Ak chcete vašu funkciu spustiť (alebo „zavolať“), napíšte jej názov a za ním zátvorky. JavaScript vám umožňuje definovať funkciu pred alebo po jej zavolaní – JavaScriptový engine sa postará o poradie vykonania. Keď spustíte tento riadok, vykoná sa všetok kód vo vašej funkcii displayGreeting a v konzole prehliadača sa zobrazí „Hello, world!“. Túto funkciu môžete volať opakovane. ### 🧠 Kontrola základov funkcií: Vytváranie vašich prvých funkcií Pozrime sa, ako rozumiete základným funkciám: - Dokážete vysvetliť, prečo používame kľúčové zátvorky {} vo funkčných definíciách? - Čo sa stane, ak napíšete displayGreeting bez zátvoriek? - Prečo by ste mohli chcieť volať tú istú funkciu viackrát? ### Najlepšie postupy pri písaní funkcií Tu je niekoľko tipov, ktoré vám pomôžu písať skvelé funkcie: - Dávajte vašim funkciám jasné, popisné názvy – vaše budúce ja vám poďakuje! - Používajte camelCase pre viacslovné názvy (napr. calculateTotal namiesto calculate_total) - Každá funkcia by sa mala sústrediť na jednu vec a robiť ju dobre ## Odovzdávanie informácií funkcii Naša funkcia displayGreeting je obmedzená – dokáže zobraziť len „Hello, world!“ pre všetkých. Parametre nám umožňujú spraviť funkcie flexibilnejšími a užitočnejšími. Parametre fungujú ako zástupné symboly, kam môžeme vložiť rôzne hodnoty vždy, keď funkciu použijeme. Takto tá istá funkcia môže na každý hovor pracovať s inými informáciami. Parametre uvádzate vo zátvorkách pri definovaní funkcie, viac parametrov oddeľujete čiarkou: Každý parameter funguje ako zástupné miesto – keď niekto zavolá vašu funkciu, poskytne skutočné hodnoty, ktoré sa vložia do týchto miest. Aktualizujme našu pozdravnú funkciu tak, aby prijímala meno niekoho: Všimnite si, ako používame spätné úvodzovky (` `) a ${}` na vloženie mena priamo do správy – to sa nazýva šablónový literál a je to veľmi užitočný spôsob, ako vytvárať reťazce so zmiešanými premennými. Teraz, keď funkciu zavoláme, môžeme poslať akékoľvek meno: JavaScript vezme reťazec 'Christopher', priradí ho parametru name a vytvorí personalizovanú správu „Hello, Christopher!“ ## Predvolené hodnoty Čo ak chceme, aby niektoré parametre boli voliteľné? Vtedy prichádzajú vhod predvolené hodnoty! Povedzme, že chceme, aby si ľudia mohli prispôsobiť pozdravové slovo, ale ak ho nespecifikujú, použijeme „Hello“ ako zálohu. Predvolené hodnoty nastavíte pomocou rovnítka, podobne ako pri nastavovaní premennej: Tu je name stále povinné, ale salutation má záložnú hodnotu 'Hello', ak nikto neposkytne iný pozdrav. Teraz môžeme túto funkciu volať dvoma rôznymi spôsobmi: Pri prvom volaní JavaScript použije predvolené „Hello“, keďže sme nespecifikovali pozdrav. Pri druhom volaní použije náš vlastný „Hi“. Táto flexibilita robí funkcie prispôsobiteľné rôznym scenárom. ### 🎛️ Kontrola ovládania parametrov: Robenie funkcií flexibilnými Otestujte svoje chápanie parametrov: - Aký je rozdiel medzi parametrom a argumentom? - Prečo sú predvolené hodnoty užitočné v reálnom programovaní? - Dokážete predpovedať, čo sa stane, ak zadáte viac argumentov než je parametrov? ## Návratové hodnoty Doteraz naše funkcie iba vypisovali správy do konzoly, ale čo ak chcete, aby funkcia niečo vypočítala a vrátila výsledok? Tu prichádzajú na rad návratové hodnoty. Namiesto jednoduchého zobrazenia niečoho vám funkcia môže vrátiť hodnotu, ktorú môžete uložiť do premennej alebo použiť v iných častiach kódu. Na vrátenie hodnoty použijete kľúčové slovo return nasledované tým, čo chcete vrátiť: Dôležité je vedieť: keď funkcia narazí na return, okamžite skončí vykonávanie a odošle túto hodnotu volajúcemu. Upravme našu pozdravnú funkciu tak, aby vracala správu namiesto jej vypisovania: Teraz namiesto vypísania pozdravu funkcia vytvorí správu a vráti ju nám. Na použitie vrátenej hodnoty ju môžeme uložiť do premennej ako každú inú hodnotu: Teraz greetingMessage obsahuje „Hello, Christopher“ a môžeme ju použiť kdekoľvek v našom kóde – na zobrazenie na webovej stránke, zahrnutie do e-mailu alebo odovzdanie inej funkcii. ### 🔄 Kontrola návratových hodnôt: Získavanie výsledkov späť Vyhodnoťte svoje porozumenie návratu hodnôt: - Čo sa stane s kódom za return vo funkcii? - Prečo je často lepšie vracať hodnoty než len vypisovať do konzoly? - Môže funkcia vrátiť rôzne typy hodnôt (reťazec, číslo, boolean)? ## Funkcie ako parametre pre funkcie Funkcie môžu byť odovzdávané ako parametre iným funkciám. Hoci tento koncept môže byť spočiatku zložitý, je to silná vlastnosť umožňujúca flexibilné programovacie vzory. Tento vzor je veľmi bežný, keď chcete povedať „keď sa niečo stane, urob toto druhé“. Napríklad „keď skončí časovač, spusti tento kód“ alebo „keď používateľ klikne na tlačidlo, zavolaj túto funkciu“. Pozrime sa na setTimeout, čo je zabudovaná funkcia, ktorá čaká určitý čas a potom spustí kód. Musíme jej povedať, aký kód spustiť – ideálne na odovzdanie funkcie! Vyskúšajte tento kód – po 3 sekundách uvidíte správu: Všimnite si, ako odovzdávame displayDone (bez zátvoriek) do setTimeout. Nevoláme funkciu sami – odovzdávame ju setTimeout a hovoríme „zavolaj toto o 3 sekundy.“ ### Anonymné funkcie Niekedy potrebujete funkciu na len jedno použitie a nechcete jej dávať meno. Rozmýšľajte takto – ak funkciu používate len raz, prečo zbytočne zneprehľadňovať kód ďalším názvom? JavaScript vám umožňuje vytvárať anonymné funkcie – funkcie bez mena, ktoré môžete definovať priamo tam, kde ich potrebujete. Tu je, ako môžeme prepísať náš príklad s časovačom pomocou anonymnej funkcie: Dosiahne to rovnaký výsledok, ale funkcia je definovaná priamo v volaní setTimeout, čím sa eliminuje potreba samostatnej deklarácie funkcie. ### Šípkové funkcie Moderný JavaScript má ešte kratší spôsob zápisu funkcií nazývaný šípkové funkcie. Používajú => (vyzerá ako šípka – viete?) a sú veľmi obľúbené medzi vývojármi. Šípkové funkcie vám umožňujú vynechať kľúčové slovo function a písať stručnejší kód. Tu je náš príklad časovača s použitím šípkovej funkcie: () je miesto, kde by boli parametre (tu prázdne), potom nasleduje šípka => a nakoniec telo funkcie v kľúčových zátvorkách. Poskytuje to rovnakú funkcionalitu s výraznejšie stručnejšou syntaxou. ### Kedy ktorý štýl použiť Kedy použiť ktorý prístup? Praktické pravidlo: ak budete funkciu používať viackrát, dajte jej meno a definujte ju samostatne. Ak je to na jedno konkrétne použitie, zvážte anonymnú funkciu. Šípkové aj tradičné funkcie sú platné voľby, hoci šípkové funkcie sú dominantné v moderných kódoch JavaScriptu. ### 🎨 Kontrola štýlov funkcií: Výber správnej syntaxe Otestujte svoje porozumenie syntaxe: - Kedy by ste mohli uprednostniť šípkové funkcie pred tradičnou syntaxou funkcií? - Aká je hlavná výhoda anonymných funkcií? - Dokážete si predstaviť situáciu, kde je pomenovaná funkcia lepšia ako anonymná? --- ## 🚀 Výzva Dokážete jednou vetou vyjadriť rozdiel medzi funkciami a metódami? Skúste to! ## Výzva GitHub Copilot agenta 🚀 Použite režim agenta na splnenie nasledujúcej výzvy: Popis: Vytvorte knižnicu matematických funkcií, ktorá demonštruje rôzne koncepty funkcií prebrané v tejto lekcii, vrátane parametrov, predvolených hodnôt, návratových hodnôt a šípkových funkcií. Prompt: Vytvorte súbor JavaScript s názvom mathUtils.js obsahujúci nasledujúce funkcie: 1. Funkciu add, ktorá prijíma dva parametre a vracia ich súčet 2. Funkciu multiply s predvolenými hodnotami parametrov (druhý parameter predvolene 1) 3. Šípkovú funkciu square, ktorá prijíma číslo a vracia jeho druhú mocninu 4. Funkciu calculate, ktorá prijíma inú funkciu ako parameter a dve čísla, potom aplikuje túto funkciu na tieto čísla 5. Ukážku volania každej funkcie s vhodnými testovacími prípadmi Viac o režime agenta sa dozviete tu. ## Postnáškový kvíz Postnáškový kvíz ## Prehľad a samostatné štúdium Oplatí sa si trochu prečítať o šípkových funkciách, pretože sa čoraz viac používajú v kódových bázach. Precvičujte si písanie funkcií a potom ich prepíšte pomocou tejto syntaxe. ## Zadanie Zábava s funkciami --- ## 🧰 Zhrnutie vášho náradia JavaScriptových funkcií --- ## 🚀 Časová os vášho ovládania JavaScriptových funkcií ### ⚡ Čo zvládnete za nasledujúcich 5 minút - [ ] Napísať jednoduchú funkciu, ktorá vracia vaše obľúbené číslo - [ ] Vytvoriť funkciu so dvoma parametrami, ktorá ich sčíta together - [ ] Vyskúšať prevod tradičnej funkcie na syntax šípovej funkcie - [ ] Precvičiť úlohu: vysvetliť rozdiel medzi funkciami a metódami ### 🎯 Čo môžete dosiahnuť v tejto hodine - [ ] Dokončiť kvíz po lekcii a zopakovať si akékoľvek nejasné koncepty - [ ] Postaviť knižnicu matematických utilít z výzvy GitHub Copilot - [ ] Vytvoriť funkciu, ktorá používa inú funkciu ako parameter - [ ] Precvičiť písanie funkcií so štandardnými parametrami - [ ] Experimentovať s template literálmi v návratových hodnotách funkcií ### 📅 Tvoj týždeň ovládania funkcií - [ ] Dokončiť zadanie „Zábava s funkciami“ s kreativitou - [ ] Refaktorovať nejaký opakujúci sa kód, ktorý si napísal, do znovupoužiteľných funkcií - [ ] Postaviť malý kalkulátor iba pomocou funkcií (bez globálnych premenných) - [ ] Precvičovať šípové funkcie s metódami polí ako map() a filter() - [ ] Vytvoriť súbor utilitných funkcií pre bežné úlohy - [ ] Študovať funkcie vyššieho rádu a koncepty funkcionálneho programovania ### 🌟 Tvoj mesačný prechod - [ ] Ovládnuť pokročilé koncepty funkcií ako closures a scope - [ ] Postaviť projekt, ktorý intenzívne využíva skladanie funkcií - [ ] Prispieť do open source zlepšením dokumentácie funkcií - [ ] Naučiť niekoho iného o funkciách a rôznych štylistikách syntaxe - [ ] Preskúmať paradigmy funkcionálneho programovania v JavaScripte - [ ] Vytvoriť osobnú knižnicu znovupoužiteľných funkcií pre budúce projekty ### 🏆 Záverečná kontrola majstra funkcií Oslávte svoje ovládnutie funkcií: - Aká je najužitočnejšia funkcia, ktorú ste doteraz vytvorili? - Ako sa zmenil váš pohľad na organizáciu kódu vďaka učeniu o funkciách? - Ktorú syntax funkcie uprednostňujete a prečo? - Aký reálny problém by ste vyriešili napísaním funkcie? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Upozornenie: Tento dokument bol preložený pomocou AI prekladateľskej služby Co-op Translator. Aj keď sa snažíme o presnosť, berte prosím na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vzniknuté použitím tohto prekladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript základy: Robenie rozhodnutí

Už ste niekedy premýšľali nad tým, ako aplikácie robia inteligentné rozhodnutia? Ako navigačný systém vyberá najrýchlejšiu trasu, alebo ako termostat rozhoduje, kedy zapnúť kúrenie? Toto je základný koncept rozhodovania v programovaní. Rovnako ako analytický stroj Charlesa Babbagea bol navrhnutý tak, aby sledoval rôzne sekvencie operácií na základe podmienok, aj moderné programy v JavaScripte potrebujú robiť voľby na základe meniacich sa okolností. Táto schopnosť vetvenia a rozhodovania mení statický kód na citlivé, inteligentné aplikácie. V tejto lekcii sa naučíte, ako implementovať podmienenú logiku vo vašich programoch. Preskúmame podmienkové príkazy, porovnávacie operátory a logické výrazy, ktoré umožňujú vášmu kódu vyhodnocovať situácie a primerane na ne reagovať. ## Prednáškový kvíz Prednáškový kvíz Schopnosť robiť rozhodnutia a ovládať tok programu je základným aspektom programovania. Táto časť sa zaoberá tým, ako ovládať priebeh vykonávania vašich JavaScript programov pomocou Booleovských hodnôt a podmienených logík. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Krátke zopakovanie o Booleanoch Predtým než sa pustíme do rozhodovania, vráťme sa k Booleovským hodnotám z našej predchádzajúcej lekcie. Pomenované po matematikovi Georgovi Booleovi, tieto hodnoty predstavujú binárne stavy – buď true alebo false. Nie je tu žiadna nejasnosť, žiadny šedý priestor. Tieto binárne hodnoty tvoria základ všetkej výpočtovej logiky. Každé rozhodnutie, ktoré váš program urobí, sa napokon zredukuje na Booleovské vyhodnotenie. Vytváranie Booleovských premenných je jednoduché: Týmto vytvoríte dve premenné s explicitnými Booleovskými hodnotami. ✅ Booleány sú pomenované po anglickom matematikovi, filozofovi a logikovi Georgovi Booleovi (1815–1864). ## Porovnávacie operátory a Booleány V praxi budete len zriedka nastavovať Booleovské hodnoty manuálne. Namiesto toho ich budete generovať vyhodnotením podmienok: "Je toto číslo väčšie ako tamto?" alebo "Sú tieto hodnoty rovnaké?" Porovnávacie operátory umožňujú tieto vyhodnotenia. Porovnávajú hodnoty a vracajú Booleovský výsledok na základe vzťahu medzi operandmi. ✅ Otestujte si svoje znalosti písaním niekoľkých porovnaní v konzole prehliadača. Prekvapila vás nejaká vrátená hodnota? ### 🧠 Ovládnutie porovnávania: Pochopenie Booleovskej logiky Otestujte si pochopenie porovnávania: - Prečo si myslíte, že === (prísna rovnosť) je spravidla preferované pred == (voľná rovnosť)? - Dokážete predpovedať, čo vráti 5 === '5'? A čo 5 == '5'? - Aký je rozdiel medzi !== a !=? ## Príkaz if Príkaz if je ako klásť otázku vo vašom kóde. "Ak je táto podmienka pravdivá, urob toto." Pravdepodobne je to najdôležitejší nástroj, ktorý použijete na rozhodovanie v JavaScripte. Takto to funguje: Podmienka sa umiestňuje do zátvoriek, a ak je true, JavaScript vykoná kód v zložených zátvorkách. Ak je to false, JavaScript celý blok preskočí. Často budete používať porovnávacie operátory na vytvorenie týchto podmienok. Pozrime sa na praktický príklad: Keďže 1000 >= 800 sa vyhodnotí ako true, kód vo vnútri bloku sa vykoná, a v konzole sa zobrazí "Getting a new laptop!". ## Príkaz if..else Čo ak chcete, aby váš program vykonal niečo iné, ak je podmienka nepravdivá? Práve tu prichádza else – je to ako mať záložný plán. Príkaz else vám umožňuje povedať: "Ak táto podmienka nie je pravdivá, urob toto iné." Keďže 500 >= 800 je false, JavaScript preskočí prvý blok a vykoná blok za else. V konzole uvidíte "Can't afford a new laptop, yet!". ✅ Otestujte si porozumenie tomuto a nasledujúcemu kódu spustením v konzole prehliadača. Zmeňte hodnoty premenných currentMoney a laptopPrice a sledujte výstup console.log(). ### 🎯 Kontrola logiky If-Else: Vetvenie ciest Zhodnoťte svoje pochopenie podmieneného logiky: - Čo sa stane, ak currentMoney presne rovná laptopPrice? - Vedeli by ste myslieť na situáciu z reálneho života, kde by bola if-else logika užitočná? - Ako by ste to rozšírili na viaceré cenové rozpätia? ## Príkaz switch Niekedy musíte porovnať jednu hodnotu s viacerými možnosťami. Hoci by ste mohli reťaziť niekoľko príkazov if..else, tento prístup sa rýchlo stáva nepriehľadným. Príkaz switch poskytuje čistejšiu štruktúru na ovládanie viacerých diskrétnych hodnôt. Koncept pripomína mechanické prepínacie systémy používané v skorých telefónnych ústredniach – jedna vstupná hodnota určuje, ktorou konkrétnou cestou vykonávanie pokračuje. Takto je to štruktúrované: - JavaScript vyhodnotí výraz raz - Prezrie si každý case a hľadá zhody - Keď nájde zhodu, vykoná daný blok kódu - Príkaz break hovorí JavaScriptu, aby zastavil a opustil switch - Ak nie je žiadna zhoda, vykoná sa blok default (ak je prítomný) V tomto príklade JavaScript vidí, že dayNumber je 2, nájde zodpovedajúci case 2, nastaví dayName na "Tuesday" a potom ukončí switch. Výsledok? V konzole sa vypíše "Today is Tuesday". ✅ Otestujte si porozumenie tomuto a nasledujúcemu kódu spustením v konzole prehliadača. Zmeňte hodnotu premennej a a sledujte výstup console.log(). ### 🔄 Ovládnutie príkazu Switch: Viaceré možnosti Otestujte si porozumenie switchu: - Čo sa stane, ak zabudnete príkaz break? - Kedy by ste použili switch namiesto viacerých príkazov if-else? - Prečo je blok default užitočný, aj keď si myslíte, že ste pokryli všetky možnosti? ## Logické operátory a Booleány Zložité rozhodnutia často vyžadujú vyhodnocovanie viacerých podmienok súčasne. Rovnako ako Booleova algebra umožňuje matematikom kombinovať logické výrazy, programovanie poskytuje logické operátory na spojenie viacerých Booleovských podmienok. Tieto operátory umožňujú sofistikovanú podmienenú logiku kombináciou jednoduchých pravdivostných hodnotení. Tieto operátory vám umožnia kombinovať podmienky užitočnými spôsobmi: - AND (&&) znamená, že obe podmienky musia byť pravdivé - OR (||) znamená, že aspoň jedna podmienka musí byť pravdivá - NOT (!) otočí true na false (a naopak) ## Podmienky a rozhodnutia s logickými operátormi Pozrime sa na tieto logické operátory v akcii na realistickejšom príklade: V tomto príklade: vypočítame 20% zľavu (640), potom hodnotíme, či naše dostupné financie pokrývajú buď plnú cenu ALEBO zľavnenú cenu. Keďže 600 zodpovedá zľavnenému prahu 640, podmienka sa vyhodnotí ako pravdivá. ### 🧮 Kontrola logických operátorov: Kombinovanie podmienok Otestujte si pochopenie logických operátorov: - Čo sa stane v výraze A && B, ak A je nepravdivé? Vyhodnotí sa vôbec B? - Viete si predstaviť situáciu, kde by ste potrebovali všetky tri operátory (&&, ||, !) naraz? - Aký je rozdiel medzi !user.isActive a user.isActive !== true? ### Operátor negácie Niekedy je jednoduchšie myslieť na to, kedy niečo NIE JE pravda. Namiesto otázky "Je používateľ prihlásený?" sa môžete opýtať "NIE JE používateľ prihlásený?" Operátor výkričníka (!) otočí logiku za vás. Operátor ! je ako povedať "pravý opak..." – ak je niečo true, ! zmení na false, a naopak. ### Ternárne výrazy Pre jednoduché podmienené priradenia JavaScript poskytuje ternárny operátor. Táto stručná syntax umožňuje napísať podmienený výraz na jednom riadku, čo je užitočné, keď potrebujete priradiť jednu z dvoch hodnôt na základe podmienky. Číta sa ako otázka: "Je táto podmienka pravdivá? Ak áno, použi túto hodnotu. Ak nie, použi tamtu hodnotu." Nižšie je konkrétny príklad: ✅ Venujte chvíľku čítaniu tohto kódu niekoľkokrát. Rozumiete, ako tieto operátory fungujú? Tento riadok hovorí: "Je firstNumber väčšie ako secondNumber? Ak áno, daj firstNumber do biggestNumber. Ak nie, daj secondNumber do biggestNumber." Ternárny operátor je len kratšia cesta na zapísanie tradičného príkazu if..else: Oba prístupy produkujú identický výsledok. Ternárny operátor prináša stručnosť, zatiaľ čo tradičná štruktúra if-else môže byť pre zložité podmienky čitateľnejšia. --- ## 🚀 Výzva Vytvorte program, ktorý najprv využíva logické operátory, a potom ho prepíšte pomocou ternárneho výrazu. Ktorú syntax preferujete? --- ## Výzva GitHub Copilot Agenta 🚀 Použite režim Agenta na splnenie nasledujúcej výzvy: Popis: Vytvorte komplexný kalkulátor známok, ktorý demonštruje viaceré koncepty rozhodovania z tejto lekcie, vrátane príkazov if-else, switch, logických operátorov a ternárnych výrazov. Zadanie: Napíšte JavaScript program, ktorý prijme číselný výsledok študenta (0-100) a určí jeho písmenkovú známku podľa nasledujúcich kritérií: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Pod 60 Požiadavky: 1. Použite príkaz if-else na určenie písmenkovej známky 2. Použite logické operátory na kontrolu, či študent prešiel (grade >= 60) A má vyznamenanie (grade >= 90) 3. Použite príkaz switch na poskytnutie konkrétnej spätnej väzby pre každú písmenovú známku 4. Použite ternárny operátor na zistenie, či je študent oprávnený na ďalší kurz (grade >= 70) 5. Zahrňte kontrolu vstupu, aby ste zaistili, že skóre je medzi 0 a 100 Otestujte svoj program s rôznymi skóre vrátane hraničných prípadov ako 59, 60, 89, 90 a neplatnými vstupmi. Dozviete sa viac o agent mode tu. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Prečítajte si viac o mnohých operátoroch dostupných používateľovi na MDN. Prejdite si úžasný operator lookup od Josha Comeaua! ## Assignment Operators --- ## 🧠 Zhrnutie vašej sady nástrojov na rozhodovanie --- ## 🚀 Časová os vášho majstrovstva rozhodovania v JavaScripte ### ⚡ Čo môžete urobiť v nasledujúcich 5 minútach - [ ] Precvičte si porovnávacie operátory v konzole vášho prehliadača - [ ] Napíšte jednoduchý if-else príkaz, ktorý kontroluje váš vek - [ ] Skúste výzvu: prepíšte if-else pomocou ternárneho operátora - [ ] Otestujte, čo sa stane s rôznymi „pravdivými“ a „nepravdivými“ hodnotami ### 🎯 Čo môžete dosiahnuť v tejto hodine - [ ] Dokončite kvíz po lekcii a prejdite si nejasné koncepty - [ ] Vytvorte komplexný kalkulátor známok z výzvy GitHub Copilot - [ ] Vytvorte jednoduchý rozhodovací strom pre reálnu situáciu (napríklad výber oblečenia) - [ ] Precvičujte kombináciu viacerých podmienok s logickými operátormi - [ ] Experimentujte s príkazmi switch pre rôzne použitia ### 📅 Vaše týždenné zdokonaľovanie logiky - [ ] Dokončite zadanie operátorov s kreatívnymi príkladmi - [ ] Vytvorte mini kvízovú aplikáciu pomocou rôznych podmienkových štruktúr - [ ] Vytvorte validátor formulárov, ktorý kontroluje viacero vstupných podmienok - [ ] Precvičujte si cvičenia Josha Comeaua operator lookup - [ ] Refaktorujte existujúci kód na použitie vhodnejších podmienkových štruktúr - [ ] Študujte vyhodnocovanie krátkeho spoja a dôsledky na výkon ### 🌟 Váš mesačný transformačný plán - [ ] Ovládnite zložité vnorené podmienky a zachovajte čitateľnosť kódu - [ ] Vytvorte aplikáciu so sofistikovanou logikou rozhodovania - [ ] Prispievajte do open source vylepšením podmienkovej logiky v existujúcich projektoch - [ ] Učte niekoho iného o rôznych podmienkových štruktúrach a kedy ich použiť - [ ] Preskúmajte funkcionálne programovanie prístupov k podmienkovej logike - [ ] Vytvorte si osobného sprievodcu najlepšími praktikami podmienok ### 🏆 Záverečná kontrola majstra rozhodovania Oslávte svoje majstrovstvo logického myslenia: - Akú najzložitejšiu rozhodovaciu logiku ste úspešne implementovali? - Ktorá podmienková štruktúra vám pripadá najprirodzenejšia a prečo? - Ako sa zmenil váš prístup k riešeniu problémov po naučení sa o logických operátoroch? - Ktorá reálna aplikácia by mohla prospieť sofistikovanej logike rozhodovania? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Zrieknutie sa zodpovednosti: Tento dokument bol preložený pomocou AI prekladateľskej služby Co-op Translator. Aj keď sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne výklady vyplývajúce z použitia tohto prekladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript základy: Polia a slučky

## Prednáškový kvíz Prednáškový kvíz Niekedy ste sa zamýšľali, ako si webové stránky udržiavajú prehľad o položkách v nákupnom košíku alebo zobrazujú zoznam vašich priateľov? Práve tu prichádzajú na rad polia a slučky. Polia sú ako digitálne kontajnery, ktoré uchovávajú viacero informácií naraz, zatiaľ čo slučky vám umožňujú efektívne pracovať so všetkými týmito údajmi bez zbytočného opakovania kódu. Tieto dva koncepty spolu tvoria základ pre spracovanie informácií vo vašich programoch. Naučíte sa prejsť od manuálneho opisovania každej jednej operácie k tvorbe inteligentného, efektívneho kódu, ktorý zvládne spracovať stovky či dokonca tisíce položiek rýchlo. Na konci tejto lekcie budete rozumieť, ako zvládnuť zložité úlohy s dátami pomocou len pár riadkov kódu. Pozrime sa na tieto základné programátorské koncepty. [](https://youtube.com/watch?v=1U4qTyq02Xw "Polia") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Slučky") ## Polia Predstavte si polia ako digitálnu kartotéku – namiesto ukladania jedného dokumentu v zásuvke môžete usporiadať viacero súvisiacich položiek v jednom štruktúrovanom kontajneri. V programovaní vám polia umožňujú uložiť viacero kúskov informácií v jednom organizovanom balíku. Či už tvoríte foto galériu, spravujete zoznam úloh alebo sledujete najvyššie skóre v hre, polia poskytujú základ pre organizáciu dát. Pozrime sa, ako fungujú. ✅ Polia sú všade okolo nás! Môžete si spomenúť na príklad pola z reálneho života, napríklad pole slnečných panelov? ### Vytváranie polí Vytvorenie pola je úplne jednoduché – stačí použiť hranaté zátvorky! Čo sa tu deje? Práve ste vytvorili prázdny kontajner použitím hranatých zátvoriek []. Predstavte si ho ako prázdnu knižnú poličku – je pripravená uchovať akékoľvek knihy, ktoré chcete usporiadať. Pole môžete tiež hneď na začiatku naplniť počiatočnými hodnotami: Zaujímavé veci na pozorovanie: - Môžete uložiť text, čísla alebo dokonca pravdivostné hodnoty (true/false) do toho istého poľa - Jednoducho oddelujte každú položku čiarkou – jednoduché! - Polia sú ideálne na uchovávanie súvisiacich informácií pohromade ### Indexovanie pola Tu je niečo, čo sa na prvý pohľad môže zdať nezvyčajné: polia číslujú svoje položky od 0, nie od 1. Toto indexovanie so základom v nule vychádza z toho, ako funguje počítačová pamäť – je to programátorský konvencia od čias raných programovacích jazykov ako C. Každé miesto v poli dostane svoj vlastný adresný číslo nazývané index. ✅ Prekvapuje vás, že polia začínajú na nultom indexe? V niektorých programovacích jazykoch sa indexy začínajú na 1. O tejto histórii sa môžete dozvedieť viac na Wikipédii. Prístup k prvkom pola: Rozklad toho, čo sa tu deje: - Používa zápis s hranatými zátvorkami spolu s číslom indexu na prístup k prvkom - Vracia hodnotu uloženú na danom konkrétnom mieste v poli - Začína počítať od 0, takže prvý prvok je na indexe 0 Úprava prvkov pola: V uvedenom sme: - Upravili prvok na indexe 4 z "Rocky Road" na "Butter Pecan" - Pridali nový prvok "Cookie Dough" na index 5 - Automaticky predĺžili dĺžku pola pri pridávaní mimo aktuálnych hraníc ### Dĺžka pola a bežné metódy Polia majú zabudované vlastnosti a metódy, ktoré výrazne uľahčujú prácu s dátami. Zistenie dĺžky pola: Kľúčové body na zapamätanie: - Vracia celkový počet prvkov v poli - Aktualizuje sa automaticky, keď sa prvky pridávajú alebo odstraňujú - Poskytuje dynamický počet, ktorý je užitočný pre slučky a validáciu Základné metódy pola: Pochopenie týchto metód: - Pridáva prvky pomocou push() (na koniec) a unshift() (na začiatok) - Odstraňuje prvky pomocou pop() (z konca) a shift() (zo začiatku) - Vyhľadáva prvky pomocou indexOf() a kontroluje ich existenciu cez includes() - Vracia užitočné hodnoty ako odstránené prvky alebo indexy pozície ✅ Vyskúšajte to sami! Použite konzolu vo vašom prehliadači na vytvorenie a manipuláciu s poľom podľa vlastnej tvorby. ### 🧠 Kontrola základov pola: Usporiadanie vašich dát Overte si vaše porozumenie poliam: - Prečo si myslíte, že polia začínajú počítať od 0 namiesto 1? - Čo sa stane, keď sa pokúsite pristúpiť k indexu, ktorý neexistuje (napríklad arr[100] v 5-prvkovej poli)? - Môžete vymyslieť tri reálne situácie, kde by polia boli užitočné? ## Slučky Predstavte si slávne tresty zo starých románov Charlesa Dickensa, kde študenti museli opakovane písať na tabuľu ten istý riadok. Predstavte si, že by ste niekomu mohli jednoducho povedať „napíš túto vetu 100-krát“ a bolo by to automatické. Práve to robia slučky vo vašom kóde. Slučky sú ako neúnavný asistent, ktorý dokáže opakovať úlohy bez chýb. Či už potrebujete skontrolovať každý predmet v nákupnom košíku alebo zobraziť všetky fotografie v albume, slučky efektívne zvládnu opakovanie. JavaScript poskytuje niekoľko typov slučiek, z ktorých si môžete vybrať. Pozrime sa na každý a pochopme, kedy ich používať. ### For slučka for slučka je ako nastavenie časovača – presne viete, koľkokrát chcete niečo spraviť. Je veľmi organizovaná a predvídateľná, takže je ideálna, keď pracujete s poliami alebo potrebujete počítať veci. Štruktúra for slučky: Krok za krokom, toto sa deje: - Inicializuje počítadlo i na hodnotu 0 na začiatku - Kontroluje podmienku i < 10 pred každou iteráciou - Vykonáva blok kódu, keď je podmienka pravdivá - Zvyšuje i o 1 po každej iterácii pomocou i++ - Zastaví sa, keď podmienka už nie je pravdivá (keď i dosiahne 10) ✅ Spustite tento kód v konzole prehliadača. Čo sa stane, keď upravíte počítadlo, podmienku alebo príkaz inkrementácie? Viete spustiť slučku spätne, vytvoriť odpočet? ### 🗓️ Kontrola majstrovstva for slučky: Riadené opakovanie Vyhodnoťte vaše porozumenie for slučkám: - Aké sú tri časti for slučky a na čo každá slúži? - Ako by ste prešli pole odzadu? - Čo sa stane, ak zabudnete inkrementáciu (i++)? ### While slučka while slučka je ako povedať „pokračuj, kým...“ – nemusíte vedieť, koľkokrát sa spustí, ale viete, kedy má skončiť. Je ideálna na veci ako získavanie vstupu od používateľa, kým nedostanete požadované údaje, alebo vyhľadávanie v dátach, kým nenájdete, čo hľadáte. Charakteristiky while slučky: - Pokračuje v spúšťaní, kým je podmienka pravdivá - Vyžaduje manuálnu správu premennej počítadla - Kontroluje podmienku pred každou iteráciou - Hrozí nekonečnou slučkou, ak podmienka nikdy nie je nepravdivá Pochopenie týchto príkladov: - Manuálne spravuje premennú počítadla i v tele slučky - Zvyšuje počítadlo, aby zabránil nekonečnému cyklu - Ukazuje praktický príklad so vstupom používateľa a limitom pokusov - Zahŕňa bezpečnostné mechanizmy na zabránenie nekonečnému vykonávaniu ### ♾️ Kontrola múdrosti while slučky: Opakovanie na základe podmienky Otestujte si svoje porozumenie while slučkám: - Aké je hlavné nebezpečenstvo pri použití while slučiek? - Kedy by ste zvolili while slučku namiesto for slučky? - Ako môžete zabrániť nekonečným slučkám? ### Moderné alternatívy slučiek JavaScript ponúka moderný syntax slučiek, ktorý môže váš kód spraviť čitateľnejším a menej náchylným na chyby. For...of slučka (ES6+): Hlavné výhody for...of: - Odstráni potrebu správy indexu a riziko chýb o jedno miesto - Poskytuje priamy prístup k prvkom pola - Zlepší čitateľnosť kódu a zníži zložitosť syntaxe Metóda forEach: Čo potrebujete vedieť o forEach: - Vykoná funkciu pre každý prvok pola - Poskytuje hodnotu prvku aj jeho index ako parametre - Nedá sa predčasne zastaviť (na rozdiel od tradičných slučiek) - Vracia undefined (nevytvára nové pole) ✅ Prečo by ste si vybrali for slučku oproti while slučke? 17 000 divákov malo tú istú otázku na StackOverflow a niektoré názory môžu byť zaujímavé. ### 🎨 Kontrola syntaxe moderných slučiek: Prijatie ES6+ Zhodnoťte svoje moderné JavaScript znalosti: - Aké sú výhody for...of oproti tradičným for slučkám? - Kedy by ste stále uprednostnili tradičné for slučky? - Aký je rozdiel medzi forEach a map? ## Slučky a polia Kombinácia polí a slučiek prináša silné schopnosti spracovania dát. Toto spojenie je základom mnohých programátorských úloh, od zobrazovania zoznamov až po výpočty štatistík. Tradičné spracovanie polí: Pochopenie jednotlivých prístupov: - Používa vlastnosť dĺžky pola na určenie hranice slučky - Pristupuje k prvkom podľa indexu v tradičných for slučkách - Poskytuje priamy prístup k prvkom v for...of slučkách - Spracováva každý prvok pola práve raz Praktický príklad spracovania dát: Takto kód funguje: - Inicializuje premenné na sledovanie súčtu a extrémov - Spracováva každú známku v jednej efektívnej slučke - Sčítava celkový súčet na výpočet priemeru - Sleduje najvyššie a najnižšie hodnoty počas iterácie - Vypočíta konečné štatistiky po dokončení slučky ✅ Experimentujte s prechádzaním svojho vlastného pola v konzole prehliadača. --- ## Výzva GitHub Copilot Agent 🚀 Použite režim Agenta na vyriešenie nasledujúcej úlohy: Popis: Vytvorte komplexnú funkciu na spracovanie dát, ktorá kombinuje polia a slučky na analýzu datasetu a generovanie zmysluplných informácií. Úloha: Vytvorte funkciu s názvom analyzeGrades, ktorá prijme pole objektov študentských známok (každý obsahuje vlastnosti meno a skóre) a vráti objekt so štatistikami vrátane najvyššieho skóre, najnižšieho skóre, priemerného skóre, počtu študentov, ktorí prešli (skóre >= 70), a poľa mien študentov, ktorí dosiahli nadpriemer. Použite minimálne dva rôzne typy slučiek vo vašom riešení. Viac sa dozviete o režime agenta tu. ## 🚀 Výzva JavaScript ponúka niekoľko moderných metód pre polia, ktoré môžu nahradiť tradičné slučky pri špecifických úlohách. Preskúmajte forEach, for-of, map, filter a reduce. Vaša výzva: Prepracujte príklad hodnotenia študentov použitím aspoň troch rôznych metód polí. Všimnite si, ako oveľa čistejší a zrozumiteľnejší kód sa vytvorí pomocou modernej syntaxe JavaScriptu. ## Kvíz po prednáške Kvíz po prednáške ## Opakovanie a samostatné štúdium Polia v JavaScripte majú mnoho metód, ktoré sú veľmi užitočné na manipuláciu s dátami. Prečítajte si o týchto metódach a vyskúšajte niektoré z nich (ako push, pop, slice a splice) na poli, ktoré si sami vytvoríte. ## Zadanie Prechádzanie po poli --- ## 📊 Zhrnutie vašich nástrojov pre polia a slučky --- ## 🚀 Váš časový plán na ovládnutie polí a slučiek ### ⚡ Čo môžete urobiť v nasledujúcich 5 minútach - [ ] Vytvorte pole svojich obľúbených filmov a pristúpte ku konkrétnym prvkom - [ ] Napíšte slučku for, ktorá počíta od 1 do 10 - [ ] Vyskúšajte výzvu s modernými metódami polí z lekcie - [ ] Precvičujte indexovanie polí vo vašom prehliadači v konzole ### 🎯 Čo môžete zvládnuť počas tejto hodiny - [ ] Dokončite kvíz po lekcii a prejdite si náročné témy - [ ] Postavte komplexný analyzátor známok z GitHub Copilot výzvy - [ ] Vytvorte jednoduchý nákupný košík, ktorý pridáva a odstraňuje položky - [ ] Precvičujte premeny medzi rôznymi typmi slučiek - [ ] Experimentujte s metódami polí ako push, pop, slice a splice ### 📅 Vaša týždňová cesta spracovaním dát - [ ] Dokončite zadanie "Prechádzanie po poli" s kreatívnymi vylepšeniami - [ ] Vytvorte aplikáciu zoznamu úloh použitím polí a slučiek - [ ] Vytvorte jednoduchý kalkulátor štatistiky pre číselné dáta - [ ] Precvičujte s MDN metódami polí - [ ] Postavte galériu fotografií alebo rozhranie pre hudobný playlist - [ ] Preskúmajte funkcionálne programovanie pomocou map, filter a reduce ### 🌟 Vaša mesačná transformácia - [ ] Ovládnite pokročilé operácie polí a optimalizáciu výkonu - [ ] Vytvorte plnohodnotný panel pre vizualizáciu dát - [ ] Prispievajte do open source projektov spracovania dát - [ ] Učte niekoho iného o poliach a slučkách s praktickými príkladmi - [ ] Vytvorte osobnú knižnicu znovupoužiteľných funkcií na spracovanie dát - [ ] Preskúmajte algoritmy a dátové štruktúry postavené na poliach ### 🏆 Záverečná kontrola majstra spracovania dát Oslávte svoje ovládnutie polí a slučiek: - Ktorá operácia s poľami je podľa vás najpraktickejšia pre reálne aplikácie? - Ktorý typ slučky vám príde najprirodzenejší a prečo? - Ako pochopenie polí a slučiek zmenilo váš prístup k organizácii dát? - Akú zložitú úlohu spracovania dát by ste chceli riešiť ďalej? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Vyhlásenie o zodpovednosti: Tento dokument bol preložený pomocou služby automatického prekladu Co-op Translator. Aj keď sa usilujeme o presnosť, majte prosím na pamäti, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Originálny dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne výklady vyplývajúce z použitia tohto prekladu. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Uvod v JavaScript

JavaScript je jezik spleta. V teh štirih lekcijah boste spoznali njegove osnove. ### Teme 1. Spremenljivke in podatkovni tipi 2. Funkcije in metode 3. Sprejemanje odločitev z JavaScriptom 4. Tabele in zanke ### Zasluge Te lekcije so bile napisane z ♥️ s strani Jasmine Greenaway, Christopher Harrison in Chris Noring --- Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.

javascript

Osnove JavaScripta: podatkovne vrste

Podatkovne vrste so ena izmed temeljnih pojmov v JavaScriptu, s katerimi se boste srečali v vsakem programu, ki ga napišete. Podatkovne vrste si lahko predstavljate kot sistem arhiviranja, ki so ga uporabljali starodavni knjižničarji v Aleksandriji – imeli so posebna mesta za rokopise s poezijo, matematiko in zgodovinskimi zapisi. JavaScript organizira informacije na podoben način s kategorijami za različne vrste podatkov. V tej lekciji bomo spoznali osnovne podatkovne vrste, zaradi katerih JavaScript deluje. Naučili se boste, kako rokovati s številkami, besedilom, vrednostmi resnično/napačno in zakaj je izbira prave vrste ključnega pomena za vaše programe. Ti pojmi se sprva morda zdijo abstraktni, a z vajo bodo postali nekaj samoumevnega. Razumevanje podatkovnih vrst bo naredilo vse ostalo v JavaScriptu veliko bolj jasno. Tako kot arhitekti potrebujejo razumevanje različnih gradbenih materialov, preden zgradijo katedralo, bodo ti temelji podpirali vse, kar boste odslej ustvarjali. ## Predpredavalni kviz Predpredavalni kviz Ta lekcija pokriva osnove JavaScripta, jezika, ki zagotavlja interaktivnost na spletu. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Spremenljivke v JavaScriptu") [](https://youtube.com/watch?v=AWfA95eLdq8 "Podatkovne vrste v JavaScriptu") Začnimo s spremenljivkami in podatkovnimi vrstami, ki jih te napolnijo! ## Spremenljivke Spremenljivke so temeljni gradniki v programiranju. Tako kot označene posode, ki so jih srednjeveški alkimisti uporabljali za shranjevanje različnih snovi, vam spremenljivke omogočajo, da shranite informacije in jim daste opisno ime, da se nanje lahko sklicujete pozneje. Potrebujete zapomniti nečije leto rojstva? Shranite ga v spremenljivko z imenom age. Želite spremljati ime uporabnika? Shranite ga v spremenljivko userName. Osredotočili se bomo na sodoben pristop k ustvarjanju spremenljivk v JavaScriptu. Te tehnike predstavljajo leta razvoja jezika in najboljših praks, ki jih je razvila skupnost programerjev. Ustvarjanje in deklariranje spremenljivke ima naslednjo sintakso: [ključna beseda] [ime]. Sestavljeno je iz dveh delov: - Ključna beseda. Uporabite let za spremenljivke, ki se lahko spreminjajo, ali const za vrednosti, ki ostanejo enake. - Ime spremenljivke, to je opisno ime, ki ga izberete sami. ✅ Ključna beseda let je bila uvedena v ES6 in daje vaši spremenljivki tako imenovani _block scope_ (območje znotraj bloka). Priporočljivo je, da uporabljate let ali const namesto starejše ključne besede var. Območja blokov bomo podrobneje obravnavali v prihodnjih delih. ### Naloga – delo s spremenljivkami 1. Deklarirajte spremenljivko. Začnimo z ustvarjanjem naše prve spremenljivke: ```javascript let myVariable; ``` Kaj to doseže: - JavaScriptu sporoči, naj ustvari prostor za shranjevanje z imenom myVariable - JavaScript dodeli spomin za to spremenljivko - Spremenljivka trenutno nima vrednosti (undefined) 2. Dajte ji vrednost. Zdaj nekaj vnesimo v spremenljivko: ```javascript myVariable = 123; ``` Kako deluje dodeljevanje: - Operator = dodeli vrednost 123 naši spremenljivki - Spremenljivka zdaj vsebuje to vrednost namesto undefined - To vrednost lahko uporabljate v kodi prek myVariable > Opomba: uporaba = v tej lekciji pomeni, da uporabljamo "operator dodelitve", ki nastavi vrednost spremenljivki. Ne označuje enakosti. 3. Naredite to pametno. Pravzaprav združimo ti dve koraka: ```javascript let myVariable = 123; ``` Ta pristop je učinkovitejši: - Declarirate spremenljivko in ji istočasno dodelite vrednost z enim stavkom - To je standardna praksa med razvijalci - Skrajša dolžino kode ob ohranjanju jasnosti 4. Premislite drugače. Kaj če hočemo shraniti drugo število? ```javascript myVariable = 321; ``` Razumevanje ponovne dodelitve: - Spremenljivka zdaj vsebuje 321 namesto 123 - Predhodna vrednost je zamenjana – spremenljivke hranijo le eno vrednost naenkrat - Ta spreminjajočnost je ključna lastnost spremenljivk, deklariranih z let ✅ Poskusite! JavaScript lahko pišete kar v brskalniku. Odprite okno brskalnika in pojdite v Orodja za razvijalce. V konzoli najdete poziv; vnesite let myVariable = 123, pritisnite enter, nato vnesite myVariable. Kaj se zgodi? Več o teh konceptih se boste naučili v nadaljnjih lekcijah. ### 🧠 Preverjanje znanja spremenljivk: Pridobivanje samozavesti Preverimo, kako se počutite glede spremenljivk: - Ali znate razložiti razliko med deklaracijo in dodelitvijo spremenljivke? - Kaj se zgodi, če poskusite uporabiti spremenljivko pred tem, ko jo deklarirate? - Kdaj bi izbrali let namesto const za spremenljivko? ## Konstantne vrednosti Včasih je treba shraniti informacije, ki se med izvajanjem programa nikoli ne smejo spremeniti. Konstantne vrednosti lahko primerjamo z matematičnimi principih, ki jih je Evklid vzpostavil v antični Grčiji – ko so bili dokaženi in zapisani, so ostali nespremenjeni za vse prihodnje uporabe. Konstante delujejo podobno kot spremenljivke, vendar z pomembno omejitvijo: ko jim enkrat dodelite vrednost, je ni mogoče spremeniti. Ta nespremenljivost pomaga preprečiti nenamerne spremembe kritičnih vrednosti v vašem programu. Deklaracija in inicializacija konstante sledita istim konceptom kot pri spremenljivki, razlika je v ključni besedi const. Konstante so običajno deklarirane z velikimi tiskanimi črkami. Kaj ta koda naredi: - Ustvari konstanto z imenom MY_VARIABLE in vrednostjo 123 - Uporabi konvencijo poimenovanja z velikimi črkami za konstante - Onemogoči kakršnekoli spremembe te vrednosti v prihodnje Konstante imajo dve glavni pravili: - Takoj jih morate dati vrednost – prazne konstante niso dovoljene! - Te vrednosti nikoli ne morete spremeniti – JavaScript bo vrgel napako, če to poskusite. Poglejmo primer: Preprosta vrednost – naslednje NI dovoljeno: ```javascript const PI = 3; PI = 4; // ni dovoljeno ``` Kaj je treba zapomniti: - Poskusi ponovne dodelitve konstanti povzročijo napako - Varuje pomembne vrednosti pred nenamernimi spremembami - Zagotavlja, da vrednost ostaja skladna skozi program Zaščita reference objekta – naslednje NI dovoljeno: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ni dovoljeno ``` Razumevanje teh pojmov: - Preprečuje zamenjavo celotnega objekta z novim - Varuje referenco na prvotni objekt - Ohranja identiteto objekta v spominu Vrednost objekta ni zaščitena – naslednje JE dovoljeno: ```javascript const obj = { a: 3 }; obj.a = 5; // dovoljeno ``` Kaj se tu dogaja: - Spreminja vrednost lastnosti znotraj objekta - Ohranja isto referenco objekta - Pokaže, da se vsebina objekta lahko spremeni, medtem ko referenca ostaja konstantna > Opomba, const pomeni, da je referenca zaščitena pred ponovno dodelitvijo. Vrednost ni _nenehno nespremenljiva_ in se lahko spreminja, še posebej, če gre za kompleksen objekt. ## Podatkovne vrste JavaScript organizira informacije v različne kategorije, imenovane podatkovne vrste. Ta koncept je podoben temu, kako so starodavni učenjaki kategorizirali znanje – Aristotel je razlikoval različne vrste razmišljanja, saj je vedel, da logični principi ne morejo enako veljati za poezijo, matematiko in naravoslovje. Podatkovne vrste so pomembne, ker različne operacije delujejo z različnimi vrstami informacij. Tako kot ne morete izvajati aritmetike na imenu osebe ali urejati matematične enačbe po abecedi, JavaScript zahteva ustrezno podatkovno vrsto za vsako operacijo. Razumevanje tega preprečuje napake in naredi vašo kodo bolj zanesljivo. Spremenljivke lahko hranijo različne vrste vrednosti, kot so številke in besedilo. Ti različni tipi vrednosti se imenujejo podatkovne vrste. Podatkovne vrste so pomemben del razvoja programske opreme, ker pomagajo razvijalcem odločati, kako naj bo koda napisana in kako naj programska oprema deluje. Poleg tega imajo nekateri podatkovni tipi edinstvene značilnosti, ki pomagajo pretvoriti ali izvleči dodatne informacije iz vrednosti. ✅ Podatkovne vrste se imenujejo tudi JavaScriptovi podatkovni primitivci, saj so osnovni podatkovni tipi, ki jih zagotavlja jezik. Obstaja 7 primitivnih podatkovnih vrst: string, number, bigint, boolean, undefined, null in symbol. Vzemite si trenutek in si predstavljajte, kaj bi vsaka od teh primitivnih vrednosti lahko predstavljala. Kaj je zebra? Kaj pa 0? true? ### Števila Števila so najbolj enostavna podatkovna vrsta v JavaScriptu. Ne glede na to, ali delate s celimi števili, kot je 42, decimalnimi, kot je 3.14, ali negativnimi številkami, kot je -5, JavaScript obi­kno obravnava vse enotno. Se spomnite naše spremenljivke od prej? Tistih 123, ki smo jih shranili, je pravzaprav bila številčna podatkovna vrsta: Ključne značilnosti: - JavaScript samodejno prepozna številčne vrednosti - Z njimi lahko izvajate matematične operacije - Ni potrebna eksplicitna deklaracija tipa Spremenljivke lahko hranijo vse vrste številk, vključno z decimalnimi ali negativnimi. Števila se lahko uporabljajo tudi z aritmetičnimi operatorji, ki jih bomo obravnavali v naslednjem poglavju. ### Aritmetični operatorji Aritmetični operatorji vam omogočajo izvajanje matematičnih izračunov v JavaScriptu. Ti operatorji sledijo istim pravilom, ki jih uporabljajo matematiki že stoletja – enaki simboli, ki so se pojavljali v delih učenjakov, kot je Al-Khwarizmi, ki je razvil algebraično notacijo. Operatorji delujejo tako, kot bi pričakovali v tradicionalni matematiki: plus za seštevanje, minus za odštevanje in tako naprej. Obstaja več vrst operatorjev za aritmetične funkcije; nekaj jih je tukaj: ✅ Poskusite! Poskusite aritmetično operacijo v konzoli vašega brskalnika. Vas rezultati presenetijo? ### 🧮 Preverjanje matematičnih sposobnosti: Računanje samozavestno Preizkusite svoje znanje aritmetike: - Kakšna je razlika med / (deljenje) in % (ostanek)? - Ali lahko predvidite, koliko je 10 % 3? (Namig: ni 3,33...) - Zakaj bi bil operator za ostanek uporaben v programiranju? ### Nizi V JavaScriptu so tekstovni podatki predstavljeni kot nizi (strings). Izraz "string" izvira iz koncepta znakov, ki so povezani v zaporedje, podobno kot so srednjeveški pisarji v samostanih povezovali črke, da so tvorili besede in stavke v svojih rokopisih. Nizi so temeljnega pomena za spletni razvoj. Vsak kos besedila, ki se prikaže na spletni strani – uporabniška imena, oznake gumbov, sporočila o napakah, vsebina – je obdelan kot niz. Razumevanje nizov je ključno za ustvarjanje funkcionalnih uporabniških vmesnikov. Nizi so niz znakov, ki so napisani med enojnimi ali dvojnimi narekovaji. Razumevanje teh konceptov: - Uporablja lahko enojne ' ali dvojne " narekovaje za definiranje nizov - Shranjuje tekstovne podatke, ki lahko vključujejo črke, številke in simbole - Dodeljuje vrednosti nizov spremenljivkam za kasnejšo uporabo - Zahteva narekovaje, da razlikuje besedilo od imen spremenljivk Zapomnite si, da morate pri pisanju niza uporabiti narekovaje, sicer bo JavaScript predvideval, da gre za ime spremenljivke. ### Oblikovanje nizov Manipulacija z nizi vam omogoča, da združite besedilne elemente, vključite spremenljivke in ustvarite dinamično vsebino, ki se odziva na stanje programa. Ta tehnika omogoča, da sestavljate besedilo programsko. Pogosto je treba združiti več nizov skupaj – ta proces imenujemo konkatenacija. Za združevanje dveh ali več nizov, oziroma njihovo združitev, uporabite operator +. Korak za korakom, to se dogaja: - Združi več nizov z uporabo operatorja + - Poveže nize neposredno skupaj brez presledkov v prvem primeru - Doda znake presledka " " med nizi za boljšo berljivost - Vstavi ločila, kot so vejice, za pravilno oblikovanje ✅ Zakaj 1 + 1 = 2 v JavaScript-u, vendar '1' + '1' = 11? Razmislite. Kaj pa '1' + 1? Predloge za nize so drugačen način oblikovanja nizov, le da namesto narekovajev uporabimo poševno oklepaj ` `. Vse, kar ni navaden tekst, mora biti vključeno v mesta za vstavljanje ${ }`. To vključuje tudi spremenljivke, ki so mogoče nizi. Razumimo vsako sestavino: - Uporablja poševne oklepaje ` `` namesto običajnih narekovajev za ustvarjanje predlog nizov - Vstavi spremenljivke neposredno z uporabo sintakse ${} - Obdrži presledke in oblikovanje natanko, kot je napisano - Ponuja čistejši način za ustvarjanje kompleksnih nizov s spremenljivkami Dosežete lahko svoje cilje oblikovanja z obema metodama, vendar bodo predloge nizov spoštovale vse presledke in prelome vrstic. ✅ Kdaj bi uporabili predlogo niza namesto običajnega niza? ### 🔤 Preverjanje mojstrstva nizov: Zaupanje pri manipulaciji besedila Ocenite svoje spretnosti z nizi: - Ali lahko pojasnite, zakaj '1' + '1' daje '11' namesto 2? - Katero metodo niza imate za bolj berljivo: združevanje ali predloge nizov? - Kaj se zgodi, če pozabite narekovaje okrog niza? ### Booleani Booleani predstavljajo najpreprostejšo obliko podatkov: lahko imajo le eno od dveh vrednosti – true ali false. Ta binarni logični sistem izhaja iz dela Georgea Boolea, matematik iz 19. stoletja, ki je razvil Booleovo algebro. Kljub svoji preprostosti so booleani ključni za logiko programov. Omogočajo vaši kodi, da sprejema odločitve na podlagi pogojev – ali je uporabnik prijavljen, ali je bil kliknjen gumb ali ali so izpolnjena določena merila. Booleani imajo lahko le dve vrednosti: true ali false. Booleani pomagajo odločiti, katere vrstice kode naj se izvedejo, ko so izpolnjeni določeni pogoji. V mnogih primerih operatorji pomagajo nastaviti vrednost Boolean in pogosto boste opazili in pisali spremenljivke, ki se inicializirajo ali njihove vrednosti posodabljajo z uporabo operatorja. Výše jsme: - Ustvarili spremenljivko, ki shrani Boolean vrednost true - Prikazali, kako shraniti Boolean vrednost false - Uporabili točne ključne besede true in false (naričajev ni treba uporabiti) - Pripravili te spremenljivke za uporabo v pogojnih stavkih ✅ Spremenljivko lahko imenujemo 'resnična' (truthy), če se oceni kot boolean true. Zanimivo je, da so v JavaScriptu vse vrednosti resnične, razen če so definirane kot neresnične (falsy). ### 🎯 Preverjanje logike booleanov: Spretnosti odločanja Preizkusite svoje razumevanje booleanov: - Zakaj mislite, da ima JavaScript "truthy" in "falsy" vrednosti poleg true in false? - Katera od teh vrednosti je falsy: 0, "0", [], "false"? - Kako so booleani lahko uporabni pri nadzoru toka programa? --- ## 📊 Povzetek vašega kompleta podatkovnih tipov ## Izziv GitHub Copilot Agenta 🚀 Uporabite način Agenta za dokončanje naslednjega izziva: Opis: Ustvarite upravitelj osebnih informacij, ki pokaže vse JavaScript podatkovne tipe, ki ste jih spoznali v tej lekciji, medtem ko obravnava scenarije z resničnimi podatki. Navodilo: Napišite JavaScript program, ki ustvari objekt uporabniškega profila, ki vsebuje: ime osebe (niz), starost (številka), status študenta (boolean), najljubše barve kot tabelo in naslov kot objekt z lastnostmi ulice, mesta in poštne številke. Vključite funkcije za prikaz informacij o profilu in posodabljanje posameznih polj. Poskrbite, da boste prikazali združevanje nizov, predloge nizov, aritmetične operacije s starostjo in boolean logiko za status študenta. Več o načinu agenta izveste tukaj. ## 🚀 Izziv JavaScript ima nekatere vedenjske posebnosti, ki lahko razvijalce presenetijo. Tukaj je klasičen primer za raziskovanje: poskusite vtipkati v konzolo brskalnika: let age = 1; let Age = 2; age == Age in opazujte rezultat. Vrne false – lahko ugotovite zakaj? To je eden od mnogih JavaScript vedenj, ki jih je vredno razumeti. Poznavanje teh posebnosti vam bo pomagalo pisati zanesljivejšo kodo in učinkoviteje odpravljati napake. ## Kviz po predavanju Kviz po predavanju ## Pregled in samostojno učenje Oglejte si ta seznam JavaScript vaj in preizkusite eno. Kaj ste se naučili? ## Naloga Vaje tipov podatkov ## 🚀 Vaš časovni načrt za obvladovanje JavaScript podatkovnih tipov ### ⚡ Kaj lahko naredite v naslednjih 5 minutah - [ ] Odprite konzolo brskalnika in ustvarite 3 spremenljivke z različnimi podatkovnimi tipi - [ ] Poskusite izziv: let age = 1; let Age = 2; age == Age in ugotovite, zakaj je rezultat false - [ ] Vadite združevanje nizov z vašim imenom in najljubšo številko - [ ] Preizkusite, kaj se zgodi, ko dodate število nizu ### 🎯 Kaj lahko dosežete v tej uri - [ ] Dokončajte kviz po lekciji in preglejte morebitne nejasnosti - [ ] Ustvarite mini kalkulator, ki sešteva, odšteva, množi in deli dve številki - [ ] Napišite preprost formatirnik imena z uporabo predlog nizov - [ ] Raziskujte razlike med == in === primerjalnimi operatorji - [ ] Vadite pretvarjanje med različnimi podatkovnimi tipi ### 📅 Vaša teden dolga osnova za JavaScript - [ ] Z zaupanjem in ustvarjalnostjo dokončajte nalogo - [ ] Ustvarite osebni profil z uporabo vseh naučenih podatkovnih tipov - [ ] Vadite z JavaScript vajami s CSS-Tricks - [ ] Napišite preprost validator obrazca z boolean logiko - [ ] Preizkusite tip podatkov tabel in objektov (predogled prihodnjih lekcij) - [ ] Pridružite se skupnosti JavaScript in zastavite vprašanja o podatkovnih tipih ### 🌟 Vaša mesec dni trajajoča preobrazba - [ ] Integrirajte znanje o podatkovnih tipih v večje programske projekte - [ ] Razumite, kdaj in zakaj uporabiti posamezen podatkovni tip v realnih aplikacijah - [ ] Pomagajte drugim začetnikom razumeti osnove JavaScripta - [ ] Napišite majhno aplikacijo za upravljanje različnih vrst uporabniških podatkov - [ ] Raziščite napredne koncepte podatkovnih tipov, kot sta prisilna pretvorba in stroga enakost - [ ] Prispevajte k odprtokodnim JavaScript projektom z izboljšavami dokumentacije ### 🧠 Zaključni pregled mojstrstva podatkovnih tipov Praznujte svoje temelje JavaScripta: - Kateri podatkovni tip vas je najbolj presenetil glede svojega vedenja? - Kako udobno se počutite, ko prijatelju razlagate razlike med spremenljivkami in konstantami? - Kaj je najslabše zanimivo, kar ste odkrili o tipu sistema JavaScripta? - Katero realno aplikacijo si predstavljate, da bi jo lahko zgradili s temi temelji? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, upoštevajte, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku velja za avtoritativni vir. Za pomembne informacije priporočamo strokovni človeški prevod. Za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Osnove JavaScript: Metode in funkcije

## Predpredavanje Kvizec Predpredavanje kvizec Ponovno pisanje iste kode je ena izmed najpogostejših frustracij programiranja. Funkcije rešujejo ta problem tako, da vam omogočajo pakiranje kode v ponovno uporabne bloke. Pomislite na funkcije kot na standardizirane dele, ki so Henryja Forda naredili revolucionarja na proizvodni liniji – ko ustvarite zanesljivo komponento, jo lahko uporabljate kjerkoli brez ponovnega gradjenja od začetka. Funkcije vam dovoljujejo, da združite dele kode, ki jih lahko ponovno uporabite v celotnem programu. Namesto da povsod kopirate in prilepite isto logiko, lahko funkcijo ustvarite enkrat in jo pokličete, kadar je to potrebno. Ta pristop ohranja vašo kodo organizirano in posodobitve postanejo veliko lažje. V tem pouku se boste naučili, kako ustvariti svoje funkcije, vanje posredovati informacije in dobiti koristne rezultate nazaj. Spoznali boste razliko med funkcijami in metodami, se naučili sodobnih sintaktičnih pristopov in videli, kako lahko funkcije delujejo z drugimi funkcijami. Te koncepte bomo gradili korak za korakom. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metode in funkcije") ## Funkcije Funkcija je samostojen blok kode, ki opravlja določen nalogo. Vsebuje logiko, ki jo lahko izvršite kadar koli je to potrebno. Namesto da pišete isto kodo večkrat v programu, jo lahko zapakirate v funkcijo in to funkcijo pokličete, kadar jo potrebujete. Ta pristop ohranja kodo čisto in olajša posodobitve. Predstavljajte si izziv vzdrževanja, če bi morali spremeniti logiko, ki je razširjena na 20 različnih mestih v vaši kodi. Pomembno je, da funkcije poimenujete opisno. Dobro poimenovana funkcija jasno pove, kaj počne – ko vidite cancelTimer(), takoj razumete, kaj dela, prav tako kot jasno označen gumb povečnočno, kaj se bo zgodilo, ko nanj kliknete. ## Ustvarjanje in klic funkcije Oglejmo si, kako ustvariti funkcijo. Sintaksa sledi doslednemu vzorcu: Pojasnimo to: - Ključna beseda function JavaScriptu sporoči "Hej, ustvarjam funkcijo!" - nameOfFunction je mesto, kjer funkciji daste opisno ime - Oklepaji () so tam, kjer lahko dodate parametre (k temu bomo kmalu prišli) - Zavite oklepaje {} vsebujejo dejansko kodo, ki se izvede, ko pokličete funkcijo Ustvarimo enostavno funkcijo za pozdrav, da vidimo to v praksi: Ta funkcija izpiše "Hello, world!" v konzolo. Ko jo definirate, jo lahko uporabite tolikokrat, kolikor potrebujete. Da izvršite (ali "pokličete") funkcijo, napišete njeno ime za katerim sledijo oklepaji. JavaScript vam omogoča, da funkcijo definirate pred ali po njenem klicu – JavaScript motor bo poskrbel za vrstni red izvrševanja. Ko zaženete to vrstico, se izvrši vsa koda znotraj vaše funkcije displayGreeting, ki prikaže "Hello, world!" v konzoli vašega brskalnika. To funkcijo lahko kličete večkrat. ### 🧠 Osnove funkcij: Izgradnja prvih funkcij Preverimo, kako vam gre z osnovami funkcij: - Ali znate razložiti, zakaj uporabljamo zavite oklepaje {} pri definiciji funkcij? - Kaj se zgodi, če napišete displayGreeting brez oklepajev? - Zakaj bi hoteli isto funkcijo klicati večkrat? ### Dobre prakse za funkcije Tu je nekaj nasvetov, ki vam bodo pomagali pisati odlične funkcije: - Dajte funkcijam jasna, opisna imena – vaša bodoča različica vam bo hvaležna! - Uporabljajte camelCase za večbesedna imena (npr. calculateTotal namesto calculate_total) - Poskrbite, da bo vsaka funkcija osredotočena na to, da opravi eno stvar dobro ## Posredovanje informacij funkciji Naša funkcija displayGreeting je omejena – lahko izpiše le "Hello, world!" za vse. Parametri nam omogočajo, da funkcije naredimo bolj prilagodljive in uporabne. Parametri delujejo kot nadomestna mesta, kamor lahko vstavite različne vrednosti vsakič, ko funkcijo pokličete. Tako ista funkcija lahko dela z različnimi informacijami ob vsakem klicu. Parametre naštejete znotraj oklepajev, ko definirate funkcijo, pri več parametrih jih ločite z vejicami: Vsak parameter deluje kot nadomestno mesto – ko nekdo pokliče vašo funkcijo, poda dejanske vrednosti, ki jih vstavimo na ta mesta. Posodobimo našo funkcijo za pozdrav, da bo sprejela nečije ime: Opazite, da uporabljamo poševni naglas (` `) in ${}`, da neposredno vstavimo ime v sporočilo – temu pravimo literalni niz (template literal) in je zelo praktičen način za sestavljanje nizov z vključenimi spremenljivkami. Zdaj, ko kličemo funkcijo, lahko predajamo katerokoli ime: JavaScript vzame niz 'Christopher', ga dodeli parametru name in ustvari personalizirano sporočilo "Hello, Christopher!" ## Privzete vrednosti Kaj, če želimo nekatere parametre narediti neobvezne? Takrat pridejo prav privzete vrednosti! Recimo, da želimo, da ljudje lahko prilagodijo pozdravno besedo, a če je ne navedejo, uporabimo privzeto "Hello". Privzete vrednosti nastavimo z enačajem, podobno kot se nastavi spremenljivka: Tukaj je name še vedno obvezen, salutation pa ima rezervno vrednost 'Hello', če nihče ne poda drugega pozdrava. Zdaj lahko funkcijo kličemo na dva različna načina: V prvem klicu JavaScript uporabi privzeto "Hello", saj pozdrava nismo določili. V drugem klicu uporabi naš poljubni "Hi". Ta prilagodljivost naredi funkcije primerne za različne situacije. ### 🎛️ Preverjanje obvladovanja parametrov: Naredimo funkcije prilagodljive Preizkusite svoje znanje o parametrih: - Kakšna je razlika med parametrom in argumentom? - Zakaj so privzete vrednosti uporabne v realnem programiranju? - Ali lahko napoveste, kaj se zgodi, če podate več argumentov kot je parametrov? ## Vrednosti vračanja Doslej so naše funkcije le izpisovale sporočila v konzolo, ampak kaj, če želite, da funkcija izračuna nekaj in vam vrne rezultat? Tu pridejo v poštev vrednosti vračanja. Namesto, da bi nekaj samo prikazala, vam funkcija lahko vrne vrednost, ki jo lahko shranite v spremenljivko ali uporabite v drugih delih kode. Vrednost vrnete z uporabo ključne besede return, za katero napišete, kaj želite vrniti: Pomembno: ko funkcija naleti na return, takoj preneha z izvajanjem in pošlje vrednost nazaj tistemu, ki jo je poklical. Posodobimo našo funkcijo za pozdrav, da nam sporočilo vrne, namesto da ga izpiše: Zdaj ta funkcija ne izpiše pozdrava, ampak ga ustvari in nam ga vrne. Vrnjeno vrednost lahko shranimo v spremenljivko kot katerokoli drugo vrednost: Zdaj greetingMessage vsebuje "Hello, Christopher" in ga lahko uporabimo kjerkoli v naši kodi – za prikaz na spletni strani, vključno v emailu, ali pa ga posredujemo drugi funkciji. ### 🔄 Preverjanje vrednosti vračanja: Prejemanje rezultatov nazaj Ocenite svoje razumevanje vrednosti vračanja: - Kaj se zgodi z ostalo kodo po return v funkciji? - Zakaj je vračanje vrednosti pogosto boljše kot le izpisovanje v konzolo? - Ali funkcija lahko vrne različne tipe vrednosti (nize, številke, boolove)? ## Funkcije kot parametri za funkcije Funkcije lahko posredujemo kot parametre drugim funkcijam. Čeprav je ta koncept sprva lahko zapleten, je izjemno zmogljiva lastnost, ki omogoča prilagodljive programske vzorce. Ta vzorec je zelo pogost, ko želite reči "ko se nekaj zgodi, naredi to drugo stvar". Na primer, "ko timer zmanjka, zaženi to kodo" ali "ko uporabnik klikne gumb, pokliči to funkcijo." Poglejmo setTimeout, ki je vgrajena funkcija, ki počaka določen čas in potem izvede kodo. Moramo ji povedati, katero kodo naj zažene – tu je odlična priložnost, da posredujemo funkcijo! Poskusite to kodo – po 3 sekundah se prikaže sporočilo: Opazite, da displayDone posredujemo brez oklepajev v setTimeout. Ne kličemo funkcije sami – jo predamo setTimeout in rečemo "pokliči to čez 3 sekunde." ### Anonimne funkcije Včasih potrebujete funkcijo za eno stvar in ji nočete dati imena. Pomislite – če funkcijo uporabljate le enkrat, zakaj bi v kodi zapolnjevali prostor z dodatnim imenom? JavaScript omogoča ustvarjanje anonimnih funkcij – funkcij brez imen, ki jih definirate takoj tam, kjer jih potrebujete. Tako lahko prepišemo naš primer timerja z anonimno funkcijo: To doseže isti rezultat, le da je funkcija definirana neposredno znotraj klica setTimeout, kar odpravlja potrebo po ločeni deklaraciji. ### Debele puščice (arrow functions) Sodobni JavaScript ima še krajši način pisanja funkcij, imenovan puščicne funkcije. Uporabljajo => (izgleda kot puščica – razumete?) in so izjemno priljubljene med razvijalci. Puščicne funkcije vam dovoljujejo, da izpustite ključne besede function in napišete bolj jedrnato kodo. Tukaj je naš primer timerja s puščicno funkcijo: () so tam, kjer bi šli parametri (v tem primeru prazni), sledi puščica =>, nato telo funkcije v zavitih oklepajih. To zagotavlja isto funkcionalnost z bolj jedrnatim zapisom. ### Kdaj uporabiti kateri pristop Kdaj uporabiti kateri način? Praktično pravilo pravi: če boste funkcijo uporabljali večkrat, poimenujte jo in definirajte ločeno. Če je za enkratno uporabo, razmislite o anonimni funkciji. Oba načina, tako puščicne kot tradicionalne funkcije, sta pravilna izbira, čeprav so puščicne funkcije pogosto prevladujoč način v sodobnih JavaScript projektih. ### 🎨 Preverjanje obvladovanja stilov funkcij: Izbira prave sintakse Preizkusite znanje o sintaksi: - Kdaj bi raje uporabili puščicne funkcije kot tradicionalne funkcije? - Kakšna je glavna prednost anonimnih funkcij? - Ali poznate situacijo, kjer je poimenovana funkcija boljša od anonimne? --- ## 🚀 Izziv Ali lahko v eni povedi artikulirate razliko med funkcijami in metodami? Poskusite! ## GitHub Copilot Agent Izziv 🚀 Uporabite Agent način za izpolnitev naslednjega izziva: Opis: Ustvarite knjižnico matematičnih funkcij, ki prikazuje različne koncepte funkcij, pokrite v tej lekciji, vključno s parametri, privzetimi vrednostmi, vrednostmi vračanja in puščicnimi funkcijami. Navodilo: Ustvarite datoteko JavaScript z imenom mathUtils.js, ki vsebuje naslednje funkcije: 1. Funkcija add, ki sprejme dva parametra in vrne njun seštevek 2. Funkcija multiply z privzetimi vrednostmi parametrov (drugi parameter privzeto 1) 3. Puščicna funkcija square, ki sprejme številko in vrne njen kvadrat 4. Funkcija calculate, ki sprejme drugo funkcijo kot parameter in dve številki, nato uporabi funkcijo na teh številkah 5. Prikažite klice vseh funkcij z ustreznimi testnimi primeri Več o agent načinu si preberite tukaj. ## Kvizec po predavanju Kvizec po predavanju ## Pregled & Samostojno učenje Vredno je prebrati nekaj več o puščicnih funkcijah, saj se jih vedno bolj uporablja v kodnih zbirkah. Vadite pisanje funkcije in nato njeno prepisovanje s tem zapisom. ## Domača naloga Zabava s funkcijami --- ## 🧰 Povzetek vašega kompleta orodij JavaScript funkcij --- ## 🚀 Časovnica za obvladovanje JavaScript funkcij ### ⚡ Kaj lahko naredite v naslednjih 5 minutah - [ ] Napišite enostavno funkcijo, ki vrne vaše najljubše število - [ ] Ustvarite funkcijo z dvema parametroma, ki ju sešteje skupaj - [ ] Poskusi pretvoriti tradicionalno funkcijo v sintakso puščic - [ ] Vadite izziv: pojasnite razliko med funkcijami in metodami ### 🎯 Kaj lahko dosežete to uro - [ ] Dokončajte kviz po lekciji in preglejte morebitne zmedene pojme - [ ] Zgradite knjižnico matematičnih pripomočkov iz izziva GitHub Copilot - [ ] Ustvarite funkcijo, ki kot parameter uporablja drugo funkcijo - [ ] Vadite pisanje funkcij z privzetimi parametri - [ ] Preizkusite predloge nizov v vrednostih, ki jih funkcije vračajo ### 📅 Vaša teden dni trajajoča mojstrska vaja funkcij - [ ] Dokončajte nalogo "Zabava s funkcijami" s kreativnostjo - [ ] Preoblikujte nekaj ponavljajoče se kode, ki ste jo napisali, v ponovno uporabne funkcije - [ ] Zgradite majhen kalkulator, ki uporablja samo funkcije (brez globalnih spremenljivk) - [ ] Vadite funkcije puščic s metodami polja, kot sta map() in filter() - [ ] Ustvarite zbirko pripomočnih funkcij za pogoste naloge - [ ] Študirajte višje funkcije in koncepte funkcionalnega programiranja ### 🌟 Vaša mesečna preobrazba - [ ] Obvladajte napredne koncepte funkcij, kot so zaprti nabiralniki in doseg - [ ] Zgradite projekt, ki močno uporablja sestavljanje funkcij - [ ] Prispevajte k odprtokodnim projektom z izboljšanjem dokumentacije funkcij - [ ] Poučite nekoga drugega o funkcijah in različnih slogih sintakse - [ ] Raziščite paradigme funkcionalnega programiranja v JavaScriptu - [ ] Ustvarite osebno knjižnico ponovno uporabnih funkcij za prihodnje projekte ### 🏆 Zaključni pregled prvaka funkcij Praznujte svojo mojstrstvo funkcij: - Katera je najbolj uporabna funkcija, ki ste jo doslej ustvarili? - Kako vam je učenje o funkcijah spremenilo način razmišljanja o organizaciji kode? - Katero sintakso funkcij imate raje in zakaj? - Katerega resničnega problema bi rešili z napisano funkcijo? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Omejitev odgovornosti: Ta dokument je bil preveden z uporabo AI prevajalske storitve Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatski prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem matičnem jeziku naj se šteje za avtoritativni vir. Za ključne informacije je priporočljiv strokovni človeški prevod. Nismo odgovorni za morebitna nesporazume ali napačne razlage, ki izhajajo iz uporabe tega prevoda. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Osnove JavaScript-a: Sprejemanje odločitev

Ste se kdaj spraševali, kako aplikacije sprejemajo pametne odločitve? Na primer, kako navigacijski sistem izbere najhitrejšo pot ali kako termostat odloča, kdaj vključiti ogrevanje? To je temeljni koncept sprejemanja odločitev v programiranju. Tako kot je bil Analitični stroj Charlesa Babbagea zasnovan za izvajanje različnih zaporedij operacij glede na pogoje, morajo tudi sodobni JavaScript programi sprejemati odločitve glede na različne okoliščine. Ta sposobnost vejitve in sprejemanja odločitev je tista, ki statično kodo spremeni v odzivne, inteligentne aplikacije. V tej lekciji se boste naučili, kako v svoje programe vključiti pogojno logiko. Raziskali bomo pogojne stavke, primerjalne operatorje in logične izraze, ki vašemu kodu omogočajo, da ovrednoti situacije in se ustrezno odzove. ## Predpredavanja kviz Predpredavanja kviz Sposobnost sprejemanja odločitev in nadzora poteka programa je temeljni vidik programiranja. Ta razdelek pokriva, kako nadzorovati izvedbeni potek vaših JavaScript programov z uporabo Boolean vrednosti in pogojne logike. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Kratek pregled Boolean vrednosti Preden se lotimo sprejemanja odločitev, si osvežimo Boolean vrednosti iz prejšnje lekcije. Poimenovane so po matematiku Georgeu Booleu in predstavljajo binarna stanja – bodisi true ali false. Ni dvoumnosti, ni srede. Te binarne vrednosti tvorijo temelj vse računalniške logike. Vsaka odločitev, ki jo vaš program sprejme, se na koncu reducira na Boolean evalvacijo. Ustvarjanje Boolean spremenljivk je enostavno: Ta ukaz ustvari dve spremenljivki z eksplicitnima Boolean vrednostma. ✅ Boolean vrednosti so poimenovane po angleškem matematiku, filozofu in logiku Georgeu Booleu (1815–1864). ## Primerjalni operatorji in Boolean vrednosti V praksi redko ročno določaš Boolean vrednosti. Namesto tega jih generiraš z evalvacijo pogojev: "Je to število večje od tistega?" ali "Sta ti dve vrednosti enaki?" Premveljalni operatorji omogočajo te evalvacije. Primerjajo vrednosti in vrnejo Boolean rezultate glede na odnos med operandoma. ✅ Preveri svoje znanje tako, da v konzoli brskalnika napišeš nekaj primerjav. Te je katera vrnjena vrednost presenetila? ### 🧠 Preverjanje mojstrstva primerjanja: Razumevanje Boolean logike Preizkusi svoje razumevanje primerjav: - Zakaj misliš, da je === (stroga enakost) običajno boljša od == (mehka enakost)? - Lahko napoveš, kaj bo vrnilo 5 === '5'? Kaj pa 5 == '5'? - Kakšna je razlika med !== in !=? ## If stavek if stavek je kot postavljanje vprašanja v tvoji kodi. "Če je ta pogoj resničen, potem naredi to." Verjetno je najpomembnejše orodje za sprejemanje odločitev v JavaScriptu. Tako deluje: Pogoj gre v oklepaje, in če je true, JavaScript izvede kodo znotraj zavitih oklepajev. Če je false, JavaScript ta blok preskoči. Pogosto boš uporabljal primerjalne operatorje za izdelavo teh pogojev. Poglejmo praktičen primer: Ker 1000 >= 800 vrne true, se koda znotraj bloka izvede in v konzolo napiše "Getting a new laptop!". ## If..Else stavek Kaj pa, če želiš, da tvoj program naredi nekaj drugega, ko je pogoj lažen? Tu pride v poštev else – kot rezervni načrt. else stavek ti omogoča, da rečeš "če ta pogoj ni resničen, naredi to drugo zadevo." Ker je 500 >= 800 false, JavaScript preskoči prvi blok in izvede else blok. V konzolo se izpiše "Can't afford a new laptop, yet!". ✅ Preizkusi svoje razumevanje te kode in naslednje tako, da ju izvedeš v konzoli brskalnika. Spremeni vrednosti spremenljivk currentMoney in laptopPrice, da spremeniš vrnjeni console.log(). ### 🎯 Preverjanje If-Else logike: Veje poti Ocenite svoje razumevanje pogojne logike: - Kaj se zgodi, če je currentMoney natanko enak laptopPrice? - Se ti morda poraja realen primer, kjer bi bila if-else logika uporabna? - Kako bi lahko razširil to, da zajema več cenovnih razredov? ## Switch stavek Včasih moraš primerjati eno vrednost z več možnostmi. Čeprav lahko zaporedoma uporabiš več if..else stavkov, ta pristop postane nepregleden. switch stavek ponuja bolj urejeno strukturo za obravnavo več diskretnih vrednosti. Koncept je podoben mehanskim stikalnim sistemom, ki so jih uporabljali v zgodnjih telefonskih centralah – ena vhodna vrednost določa, katero pot izvaja. Tako je strukturiran: - JavaScript enkrat oceni izraz - Pregleda vsak case za ujemanje - Ko najde ujemanje, izvede ta blok kode - break pove JavaScriptu, naj ustavi in izstopi iz switcha - Če nima ujemajočih se primerov, se izvede default blok (če ga imaš) V tem primeru JavaScript vidi, da je dayNumber 2, najde ustrezen case 2, nastavi dayName na "Tuesday" in nato izstopi iz switcha. Rezultat? V konzolo se izpiše "Today is Tuesday". ✅ Preizkusi svoje razumevanje te kode in naslednje tako, da ju izvedeš v konzoli brskalnika. Spremeni vrednost spremenljivke a, da spremeniš vrnjeni console.log(). ### 🔄 Mojstrstvo Switch stavka: Več možnosti Preizkusi razumevanje switch stavka: - Kaj se zgodi, če pozabiš break stavek? - Kdaj bi uporabljal switch namesto več if-else stavkov? - Zakaj je default primer uporaben, tudi če misliš, da si pokril vse možnosti? ## Logični operatorji in Boolean vrednosti Za kompleksne odločitve je pogosto potrebna evalvacija več pogojev hkrati. Tako kot Booleova algebra matematikom omogoča združevanje logičnih izrazov, programiranje ponuja logične operatorje za povezovanje več Boolean pogojov. Ti operatorji omogočajo sofisticirano pogojno logiko z združevanjem preprostih true/false evaluacij. Ti operatorji ti omogočajo uporabne kombinacije pogojev: - AND (&&) pomeni, da morata biti oba pogoja resnična - OR (||) pomeni, da je dovolj, če je eden od pogojev resničen - NOT (!) spremeni true v false (in obratno) ## Pogoji in odločitve z logičnimi operatorji Poglejmo te logične operatorje v dejstvu z bolj realnim primerom: V tem primeru izračunamo 20% popustno ceno (640), nato preverimo, ali razpoložljiva sredstva pokrijejo polno ceno ALI popustno ceno. Ker je 600 manj od popustne cene 640, pogoj vrne false. ### 🧮 Preverjanje logičnih operatorjev: Združevanje pogojev Preizkusi svoje razumevanje logičnih operatorjev: - Kaj se zgodi v izrazu A && B, če je A lažen? Ali se B sploh oceni? - Se lahko domisliš situacije, kjer bi rabil vse tri operatorje skupaj (&&, ||, !)? - Kakšna je razlika med !user.isActive in user.isActive !== true? ### Negacijski operator Včasih je lažje razmišljati o tem, kdaj nekaj NI res. Namesto da se vprašaš "Ali je uporabnik prijavljen?", morda želiš vprašati "Ali uporabnik NI prijavljen?" Operator klicaja (!) obrne logiko zate. Operator ! je kot da rečeš "nasprotno od..." – če je nekaj true, ! to spremeni v false in obratno. ### Ternarni izrazi Za preproste pogojne dodelitve JavaScript nudi ternarni operator. Ta jedrnat zapis ti omogoči, da napišeš pogojen izraz v eni vrstici, uporaben, kadar moraš dodeliti eno od dveh vrednosti glede na pogoj. Beri ga kot vprašanje: "Je ta pogoj resničen? Če ja, uporabi to vrednost. Če ne, uporabi tisto vrednost." Spodaj je bolj konkreten primer: ✅ Posveti nekaj trenutkov za večkratno branje te kode. Razumeš, kako delujejo ti operatorji? Vrstica pravi: "Je firstNumber večji od secondNumber? Če da, shrani firstNumber v biggestNumber. Če ne, shrani secondNumber v biggestNumber." Ternarni operator je samo krajši način zapisa tradicionalnega if..else stavka: Oba pristopa vrneta enake rezultate. Ternarni operator ponuja jedrnatost, medtem ko je tradicionalna if-else struktura morda bolj berljiva pri zapletenih pogojih. --- ## 🚀 Izziv Ustvari program, ki je najprej napisan z logičnimi operatorji, nato pa ga prepiši z uporabo ternarnega izraza. Kateri zapis ti je ljubši? --- ## Izziv GitHub Copilot agenta 🚀 Uporabi način Agent za dokončanje naslednjega izziva: Opis: Ustvari celovit kalkulator ocen, ki pokaže več konceptov sprejemanja odločitev iz te lekcije, vključno z if-else stavki, switch stavki, logičnimi operatorji in ternarnimi izrazi. Napis: Napiši JavaScript program, ki prejme številčno oceno študenta (0-100) in določi njegovo črkovno oceno po naslednjih kriterijih: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Pod 60 Zahteve: 1. Uporabi if-else stavek za določitev črkovne ocene 2. Uporabite logične operatorje za preverjanje, ali učenec uspe (ocena >= 60) IN ima častno pohvalo (ocena >= 90) 3. Uporabite stavčni blok switch za podajanje specifičnih povratnih informacij za vsako črčno oceno 4. Uporabite ternarni operator za določitev, ali je učenec upravičen do naslednjega predmeta (ocena >= 70) 5. Vključite preverjanje vnosa, da zagotovite, da je rezultat med 0 in 100 Preizkusite svoj program z različnimi ocenami, vključno z robnimi primeri, kot so 59, 60, 89, 90 in neveljavni vnosi. Več o načinu agenta izveste tukaj. ## Kviz po predavanju Kviz po predavanju ## Pregled in samostojno učenje Preberite več o številnih operatorjih, ki so na voljo uporabniku na MDN. Prebrskajte čudovit pregled operatorjev Josha Comeaua! ## Domača naloga Operatorji --- ## 🧠 Povzetek vašega orodja za odločanje --- ## 🚀 Vaš časovni načrt za obvladovanje odločanja v JavaScriptu ### ⚡ Kaj lahko naredite v naslednjih 5 minutah - [ ] Vadite primerjalne operatorje v konzoli brskalnika - [ ] Napišite preprost stavek if-else, ki preverja vašo starost - [ ] Preizkusite izziv: prepišite if-else z uporabo ternarnega operatorja - [ ] Testirajte, kaj se zgodi z različnimi "resničnimi" in "neresničnimi" vrednostmi ### 🎯 Kaj lahko dosežete v tej uri - [ ] Dokončajte kviz po lekciji in pregledajte vse nejasne koncepte - [ ] Zgradite celoviti kalkulator ocen iz izziva GitHub Copilot - [ ] Ustvarite preprosto odločitveno drevo za realni scenarij (npr. izbira oblačil) - [ ] Vadite kombiniranje več pogojev z logičnimi operatorji - [ ] Eksperimentirajte z uporabo stavčnih blokov switch za različne primere uporabe ### 📅 Vaše tedensko obvladovanje logike - [ ] Dokončajte domačo nalogo o operatorjih s kreativnimi primeri - [ ] Zgradite mini kviz aplikacijo z uporabo različnih pogojnih struktur - [ ] Ustvarite validator obrazca, ki preverja več pogojev vnosa - [ ] Vadite vaje iz pregleda operatorjev Josha Comeaua - [ ] Refaktorirajte obstoječo kodo z uporabo bolj primernih pogojnih struktur - [ ] Študirajte kratkocirkulacijsko vrednotenje in vplive na zmogljivost ### 🌟 Vaša mesečna preobrazba - [ ] Obvladujte kompleksne gnezdene pogoje in ohranjajte berljivost kode - [ ] Zgradite aplikacijo z zapleteno logiko odločanja - [ ] Prispevajte k odprtokodnim projektom z izboljšanjem pogojne logike - [ ] Naučite nekoga drugega o različnih pogojnih strukturah in njihovih uporabah - [ ] Raziskujte funkcionalne pristope k pogojni logiki - [ ] Ustvarite osebni referenčni vodič za najboljše prakse pri pogojih ### 🏆 Zaključni pregled mojstra odločanja Praznujte svoje znanje logičnega razmišljanja: - Katera je najbolj kompleksna odločitvena logika, ki ste jo uspešno implementirali? - Katere pogojne strukture se vam zdijo najnaravnejše in zakaj? - Kako vam je učenje o logičnih operatorjih spremenilo pristop k reševanju problemov? - Katera realna aplikacija bi imela koristi od sofisticirane logike odločanja? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Omejitev odgovornosti: Ta dokument je bil preveden z uporabo AI prevajalske storitve Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvorni dokument v izvorni jezik velja za avtoritativni vir. Za ključne informacije priporočamo strokovni človeški prevod. Za kakršnekoli nesporazume ali napačne razlage, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Osnove JavaScripta: Tabele in zanke

## Predpredavalni kviz Predpredavalni kviz Ste se kdaj spraševali, kako spletne strani spremljajo izdelke v košarici ali prikazujejo seznam vaših prijateljev? Tu pridejo na vrsto tabele in zanke. Tabele so kot digitalni predalniki, ki hranijo več kosov informacij, zanke pa vam omogočajo učinkovito delo z vsemi temi podatki brez ponavljajoče se kode. Skupaj ta dva koncepta tvorita osnovo za upravljanje informacij v vaših programih. Naučili se boste, kako preiti od ročnega zapisovanja vsakega koraka do ustvarjanja pametne, učinkovite kode, ki lahko hitro obdela na stotine ali celo tisoče elementov. Na koncu te lekcije boste razumeli, kako opraviti zapletene podatkovne naloge z le nekaj vrsticami kode. Raziščimo ta osnovna programerska koncepta. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Tabele Pomislite na tabele kot na digitalni arhivski predalnik – namesto da bi shranjevali en dokument na predal, lahko organizirate več povezanih predmetov v eni strukturirani vsebniku. V programerskem smislu vam tabele omogočajo shranjevanje več kosov informacij v en urejen paket. Ne glede na to, ali gradite galerijo slik, upravljate seznam opravil ali spremljate najvišje rezultate v igri, tabele zagotavljajo osnovo za organizacijo podatkov. Poglejmo, kako delujejo. ✅ Tabele so povsod okoli nas! Ali lahko navedete primer tabele iz resničnega sveta, na primer niz sončnih panelov? ### Ustvarjanje tabel Ustvarjanje tabele je zelo enostavno – uporabite oglate oklepaje! Kaj se tukaj dogaja? Pravkar ste ustvarili prazen vsebnik z uporabo oglatih oklepajev []. Predstavljajte si ga kot prazen knjižniški regal – pripravljen je sprejeti katere koli knjige, ki jih želite organizirati. Tabelo lahko tudi takoj napolnite z začetnimi vrednostmi: Zanimive stvari, ki jih opazite: - V tabeli lahko shranjujete besedilo, številke ali celo vrednosti true/false - Predmete ločite z vejico – enostavno! - Tabele so idealne za združevanje povezanih informacij ### Indeksiranje tabel Tukaj je nekaj, kar se na prvi pogled morda zdi nenavadno: tabele številčijo svoje elemente, začenši z 0, ne z 1. To indeksiranje, ki se začne pri nič, ima korenine v računalniškem pomnilniku – je programerska konvencija že od zgodnjih dni programskih jezikov, kot je C. Vsako mesto v tabeli dobi svojo številko naslova, imenovano indeks. ✅ Vas preseneča, da tabele začnejo šteti od nič? V nekaterih programskih jezikih indeksi začnejo pri 1. Obstaja zanimiva zgodovina tega, ki jo lahko preberete na Wikipediji. Dostop do elementov tabele: Razčlenitev, kaj se tukaj dogaja: - Uporablja oglate oklepaje z indeksom za dostop do elementov - Vrne vrednost na določenem mestu v tabeli - Začne šteti od 0, zato je prvi element indeks 0 Spreminjanje elementov tabele: V zgornjem primeru smo: - Spremenili element na indeksu 4 iz "Rocky Road" v "Butter Pecan" - Dodali nov element "Cookie Dough" na indeks 5 - Samodejno razširili dolžino tabele pri dodajanju izven obstoječih mej ### Dolžina tabele in pogoste metode Tabele imajo vgrajene lastnosti in metode, ki delo s podatki močno poenostavijo. Iskanje dolžine tabele: Glavne točke: - Vrne število elementov v tabeli - Samodejno se posodobi, ko elemente dodajate ali odstranjujete - Nudi dinamično štetje, uporabno pri zankah in preverjanju Osnovne metode tabel: Razumevanje teh metod: - Dodaja elemente z push() (na konec) in unshift() (na začetek) - Odstranjuje elemente z pop() (z konca) in shift() (s začetka) - Najde elemente z indexOf() in preveri obstoj z includes() - Vrne uporabne vrednosti, kot so odstranjeni elementi ali indeks položaja ✅ Poskusite sami! Uporabite konzolo v brskalniku za ustvarjanje in manipulacijo lastne tabele. ### 🧠 Preverjanje osnov tabel: Organizacija vaših podatkov Preizkusite svoje znanje o tabelah: - Zakaj menite, da tabele začnejo šteti pri 0 namesto pri 1? - Kaj se zgodi, če poskušate dostopati do indeksa, ki ne obstaja (kot arr[100] v tabeli s 5 elementi)? - Ali lahko navedete tri primere iz resničnega sveta, kjer bi tabele bile koristne? ## Zanke Pomislite na znano kazen iz romanov Charlesa Dickensa, kjer so morali učenci ponavljati pisanje vrstic. Predstavljajte si, da lahko nekomu preprosto naročite "napiši ta stavek 100-krat" in to se naredi samodejno. Točno to zanke naredijo za vašo kodo. Zanke so kot neutrudni pomočnik, ki lahko naloge ponavlja brez napak. Ne glede na to, ali morate preveriti vsak element v košarici ali prikazati vse slike v albumu, zanke učinkovito upravljajo s ponavljanjem. JavaScript nudi več vrst zank, med katerimi lahko izbirate. Poglejmo si jih in razumemo, kdaj jih uporabljati. ### For zanka for zanka je kot nastavitev časovnika – točno veste, kolikokrat želite, da se nekaj zgodi. Je zelo organizirana in predvidljiva, zato je idealna, ko delate s tabelami ali morate šteti stvari. Struktura for zanke: Korak za korakom, tukaj se dogaja: - Inicializira števec i na 0 na začetku - Preveri pogoj i < 10 pred vsako ponovitvijo - Izvede kodo, če je pogoj resničen - Poveča i za 1 po vsakem ciklu z i++ - Ustavi, ko pogoj postane lažen (ko i doseže 10) ✅ Zaženite to kodo v konzoli brskalnika. Kaj se zgodi, če spremenite števec, pogoj ali izraz za iteracijo? Ali jo lahko zaženete tudi v obratni smeri, da ustvarite odštevanje? ### 🗓️ Preverjanje znanja for zanke: Nadzorovano ponavljanje Ocenite svoje razumevanje for zanke: - Kateri so trije deli for zanke in kaj vsak dela? - Kako bi z zanko šli skozi tabelo od zadaj naprej? - Kaj se zgodi, če pozabite del za prirast (i++)? ### While zanka while zanka je kot reči "nadaljuj z delom, dokler..." - morda ne veste natančno, kolikokrat se bo izvedla, a veste, kdaj se mora ustaviti. Primerna je za reči, kot je povpraševanje uporabnika po vnosu, dokler ne dobiš želene vrednosti, ali iskanje v podatkih, dokler ne najdeš tistega, kar iščeš. Značilnosti while zanke: - Nadaljuje izvajanje, dokler je pogoj resničen - Zahteva ročno upravljanje števec spremenljivk - Preverja pogoj pred vsakim ciklom - Ogroža neskončne zanke, če pogoj nikoli ni lažen Razumevanje primerov: - Ročno upravlja števec i znotraj telesa zanke - Povečuje števec, da prepreči neskončne zanke - Prikazuje primer uporabe z uporabniškim vnosom in omejitvijo poskusov - Vsebuje varnostne mehanizme za preprečevanje neskončnega izvajanja ### ♾️ Preverjanje modrosti while zanke: Ponavljanje po pogojih Preizkusite razumevanje while zanke: - Kakšna je glavna nevarnost pri uporabi while zank? - Kdaj bi raje uporabili while zanko namesto for zanke? - Kako lahko preprečite neskončne zanke? ### Sodobne alternative zankam JavaScript ponuja sodobno sintakso zank, ki naredi vašo kodo bolj berljivo in manj dovzetno za napake. For...of zanka (ES6+): Ključne prednosti for...of: - Odpravlja upravljanje indeksov in potencialne napake zaradi nepravilnih indeksov - Nudi neposreden dostop do elementov tabele - Izboljšuje berljivost kode in zmanjšuje sintaktično zapletenost Metoda forEach: Kaj morate vedeti o forEach: - Izvaja funkcijo za vsak element tabele - Nudi tako vrednost elementa kot indeks kot parametra - Je neprekinljiva (ne morete jo zgodaj prekiniti, kot pri klasičnih zankah) - Vrne undefined (ne ustvari nove tabele) ✅ Zakaj bi izbrali for zanko namesto while zanke? Na StackOverflow je 17 tisoč gledalcev zastavilo isto vprašanje, nekateri odgovori pa bi vam lahko bili zanimivi. ### 🎨 Preverjanje sodobne sintakse zank: Sprejem ES6+ Ocenite svoje znanje sodobnega JavaScripta: - Kakšne so prednosti for...of v primerjavi s tradicionalnimi for zankami? - Kdaj še vedno morda raje uporabite tradicionalne for zanke? - Kakšna je razlika med forEach in map? ## Zanke in tabele Združevanje tabel z zankami ustvarja močne možnosti za obdelavo podatkov. To je osnova mnogih programerskih nalog, od prikaza seznamov do izračuna statistike. Tradicionalna obdelava tabel: Razumimo vsak pristop: - Uporablja lastnost dolžine tabele za določitev meje zanke - Dostopa do elementov po indeksu v tradicionalnih for zankah - Omogoča neposreden dostop do elementov v for...of zankah - Obdeluje vsak element tabele natanko enkrat Praktičen primer obdelave podatkov: Tako deluje ta koda: - Inicializira spremenljivke za sledenje seštevku in ekstremom - Obdeluje vsak podatek o oceni z eno učinkovito zanko - Sešteva skupno za kasnejši izračun povprečja - Sledi najvišjim in najnižjim vrednostim med iteracijo - Izračuna končno statistiko po zaključku zanke ✅ Preizkusite lastno zanko na tabeli v konzoli vašega brskalnika. --- ## Izziv GitHub Copilot Agent 🚀 Uporabite način Agent za izpolnitev naslednjega izziva: Opis: Zgradite celovito funkcijo za obdelavo podatkov, ki združuje tabele in zanke za analizo množice podatkov in ustvarjanje smiselnih vpogledov. Naloga: Ustvarite funkcijo z imenom analyzeGrades, ki prejme tabelo predmetov z ocenami študentov (vsak objekt vsebuje lastnosti ime in ocena) in vrne objekt s statistiko, vključno z najvišjo oceno, najnižjo oceno, povprečno oceno, številom študentov, ki so opravili (ocena >= 70), ter tabelo imen študentov, ki so dosegli nadpovprečno oceno. V rešitvi uporabite vsaj dve različni vrsti zank. Več o načinu agent si preberite tukaj. ## 🚀 Izziv JavaScript ponuja več sodobnih metod za tabele, ki lahko nadomestijo tradicionalne zanke za specifične naloge. Raziskujte forEach, for-of, map, filter in reduce. Vaša naloga: Prenovite primer ocen študentov z uporabo vsaj treh različnih metod tabel. Opazite, kako veliko bolj čist in berljiv postane koda s sodobno JavaScript sintakso. ## Kviz po predavanju Kviz po predavanju ## Pregled in samostojno učenje Tabele v JavaScriptu imajo veliko metod, ki so izjemno uporabne za manipulacijo podatkov. Preberite več o teh metodah in preizkusite nekatere izmed njih (kot so push, pop, slice in splice) na tabeli po vaši izbiri. ## Naloga Zanka po tabeli --- ## 📊 Povzetek vašega nabora orodij za tabele in zanke --- ## 🚀 Časovni načrt za obvladovanje tabel in zank ### ⚡ Kaj lahko naredite v naslednjih 5 minutah - [ ] Ustvarite tabelo svojih najljubših filmov in dostopajte do določenih elementov - [ ] Napišite for zanko, ki šteje od 1 do 10 - [ ] Preizkusite izziv s sodobnimi metodami tabel iz lekcije - [ ] Vadite indeksiranje tabel v konzoli brskalnika ### 🎯 Kaj lahko dosežete v tem času - [ ] Dokončajte kviz po lekciji in ponovite zahtevnejše koncepte - [ ] Zgradite obsežnega analizerja ocen iz izziva GitHub Copilot - [ ] Naredite preprost nakupovalni voziček za dodajanje in odstranjevanje predmetov - [ ] Vadite pretvarjanje med različnimi tipi zank - [ ] Eksperimentirajte z metodami tabel, kot so push, pop, slice in splice ### 📅 Vaša tedenska pot obdelave podatkov - [ ] Dokončajte nalogo "Zanka po tabeli" z ustvarjalnimi izboljšavami - [ ] Zgradite aplikacijo seznam opravkov z uporabo tabel in zank - [ ] Ustvarite preprost kalkulator statistike za številčne podatke - [ ] Vadite z MDN metodami tabel - [ ] Zgradite galerijo fotografij ali vmesnik glasbenega predvajalnika - [ ] Raziskujte funkcijsko programiranje z map, filter in reduce ### 🌟 Vaša mesečna preobrazba - [ ] Obvladujte napredne operacije s tabelami in optimizacijo zmogljivosti - [ ] Zgradite popoln nadzorni plošči za vizualizacijo podatkov - [ ] Prispevajte k odprtokodnim projektom, ki vključujejo obdelavo podatkov - [ ] Poučite nekoga drugega o tabelah in zankah preko praktičnih primerov - [ ] Ustvarite osebno knjižnico za večkratno uporabo funkcij obdelave podatkov - [ ] Raziskujte algoritme in podatkovne strukture, zgrajene na tabelah ### 🏆 Zaključni pregled mojstrstva obdelave podatkov Praznujte svoje obvladovanje tabel in zank: - Katera metoda tabele vam je najbolj koristila za realne primere? - Kateri tip zanke vam je najbolj naraven in zakaj? - Kako vam je razumevanje tabel in zank spremenilo pristop k organizaciji podatkov? - Katero kompleksno nalogo obdelave podatkov bi radi obdelali naslednjo? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku velja za avtoritativni vir. Za pomembne informacije priporočamo strokovni človeški prevod. Za kakršnekoli nesporazume ali napačne razlage, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Увод у JavaScript

JavaScript је језик веба. У овим четири лекције, научићете његове основе. ### Теме 1. Променљиве и типови података 2. Функције и методе 3. Доношење одлука са JavaScript-ом 4. Низови и петље ### Аутори Ове лекције су написане са ♥️ од стране Jasmine Greenaway, Christopher Harrison и Chris Noring --- Одрицање од одговорности: Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.

javascript

Основе ЈаваСкрипта: Типови података

Типови података су један од основних концепата у ЈаваСкрипту који ћете сретати у сваком програму који напишете. Замислите типове података као систем архивирања који су користили древни библиотекари у Александрији – имали су одређена места за свитке који садрже поезију, математику и историјске записе. ЈаваСкрипт организаује информације на сличан начин са различитим категоријама за различите врсте података. У овом часу истражићемо основне типове података који чине ЈаваСкрипт функционалним. Научићете како да радите са бројевима, текстом, тачним/нетачним вредностима, и разумете зашто је одабир исправног типа кључан за ваше програме. Ови концепти могу изгледати апстрактно на почетку, али са вежбом постаће вам други природа. Разумевање типова података учиниће све остало у ЈаваСкрипту много јаснијим. Баш као што архитекте морају разумети различите грађевинске материјале пре него што подигну катедралу, ови основи ће подупрети све што сте у будућности изградили. ## Пре-предавачки квиз Прe-квиз Овај час покрива основе ЈаваСкрипта, језика који омогућава интерактивност на вебу. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Перемљиве у ЈаваСкрипту") [](https://youtube.com/watch?v=AWfA95eLdq8 "Типови података у ЈаваСкрипту") Хајде да почнемо са променљивима и типовима података који их попуњавају! ## Променљиве Променљиве су основни грађевни блокови у програмирању. Као што су средњовековни алхемичари користили тегле са етикетама за чување различитих супстанци, променљиве вам омогућавају да сачувате информацију и дате јој описно име како бисте могли касније да се позовете на њу. Потребно вам је да запамтите нечију старост? Сачувајте је у променљивој званој age. Желите да пратите име корисника? Чувајте га у променљивој званој userName. Фокусираћемо се на модеран приступ креирању променљивих у ЈаваСкрипту. Технике које ћете овде научити представљају годинама развоја језика и најбоље праксе развијене у програмерској заједници. Креирање и дефинисање променљиве има следећу синтаксу [кључна реч] [име]. Састоји се из два дела: - Кључна реч. Користите let за променљиве које могу да се мењају, или const за вредности које остају непромењиве. - Име променљиве, ово је описно име које сами бирају. ✅ Кључна реч let је уведена у ES6 и даје вашој променљивој такозвани _блокски опсег_. Препоручује се да користите let или const уместо старије кључне речи var. О блокским опсезима ћемо говорити детаљније у будућим деловима. ### Задатак - рад са променљивимa 1. Дефинишите променљиву. Почнимо са креирањем наше прве променљиве: ```javascript let myVariable; ``` Шта ово постиже: - Ово говори ЈаваСкрипту да креира складиште под називом myVariable - ЈаваСкрипт резервише простор у меморији за ову променљиву - Променљива тренутно нема вредност (undefined) 2. Додајте вредност. Сада убацимо нешто у нашу променљиву: ```javascript myVariable = 123; ``` Како ради додела вредности: - Оператор = додељује вредност 123 нашој променљивој - Променљива сада садржи ову вредност уместо undefined - Ову вредност можете користити у вашем коду помоћу myVariable > Напомена: употреба = у овом часу означава да користимо "оператор доделе," који се користи за постављање вредности променљивој. Не означава једнакост. 3. Радите паметно. Заправо, хајде да комбинујемо ова два корака: ```javascript let myVariable = 123; ``` Овај приступ је ефикаснији: - Дефинишете променљиву и додељујете вредност у једном изразу - Ово је стандардна пракса међу програмерима - Смањује дужину кода уз очување јасноће 4. Промените мишљење. Шта ако желимо да сачувамо други број? ```javascript myVariable = 321; ``` Разумевање поновне доделе: - Променљива сада садржи 321 уместо 123 - Претходна вредност је замењена – променљиве у сваком тренутку чувају само једну вредност - Ова препознатљивост је кључна особина променљивих дефинисаних са let ✅ Испробајте! Можете писати ЈаваСкрипт директно у вашем прегледачу. Отворите прозор прегледача и идите у Developer Tools. У конзоли ћете наћи упит; укуцајте let myVariable = 123, притисните ентер, затим укуцајте myVariable. Шта се дешава? Запамтите, о овим концептима ћете научити више у наредним часовима. ### 🧠 Провера владања променљивима: Доста сте се упознали Погледајте како се осећате у вези са променљивимa: - Можете ли објаснити разлику између дефинисања и додељивања променљиве? - Шта се дешава ако покушате да користите променљиву пре него што је дефинишете? - Када бисте изабрали let уместо const за променљиву? ## Константе Понекад морате сачувати информацију која никада не сме да се промени током извођења програма. Замислите константе као математичке принципе које је Евклид утврдио у старој Грчкој – кад се једном докажу и забележе, остају фиксни за сва наредна посматрања. Константе раде слично као променљиве, али са важним ограничењем: када их једном доделите, вредност не може да се промени. Ова непроменљивост помаже у спречавању случајних модификација критичних вредности у вашем програму. Декларација и иницијализација константе следи исте концепте као код променљиве, осим што се користи кључна реч const. Константе се обично декларишу великим словима. Ево шта овај код ради: - Прави константу под називом MY_VARIABLE са вредношћу 123 - Користи конвенцију писања великим словима за константе - Спречава било какве будуће промене ове вредности Константе имају два главна правила: - Морате им одмах дати вредност – празне константе нису дозвољене! - Никада не можете променити ту вредност – ЈаваСкрипт ће пријавити грешку ако покушате. Хајде да видимо шта то значи: Једноставна вредност - Ово НИЈЕ дозвољено: ```javascript const PI = 3; PI = 4; // није дозвољено ``` Шта треба да запамтите: - Покушаји поновног додељивања константи изазваће грешку - Штити важне вредности од случајних промена - Осигурава да вредност остане конзистентна током целог програма Референца на објекат је заштићена - Ово НИЈЕ дозвољено: ```javascript const obj = { a: 3 }; obj = { b: 5 } // није дозвољено ``` Разумевање ових концепата: - Спречава замену целог објекта новим - Штити референцу на оригинални објекат - Одржава идентитет објекта у меморији Вредност објекта није заштићена - Ово ЈЕ дозвољено: ```javascript const obj = { a: 3 }; obj.a = 5; // дозвољено ``` Разлагање шта се дешава: - Модификује вредност својства унутар објекта - Чува исту референцу на објекат - Показује да се садржај објекта може мењати док је референца константна > Напомена, const значи да је референца заштићена од поновне доделе. Вредност није _непроменљива_ и може се мењати, посебно ако је сложенији конструк као објекат. ## Типови података ЈаваСкрипт организује информације у различите категорије које зовемо типови података. Овај концепт подсећа на начин на који су древни ученици категорисали знање – Аристотел је разликовао различите типове резоновања, знајући да логички принципи не могу једнако да се примене у поезији, математици и природној филозофији. Типови података су важни зато што различите операције раде са различитим врстама информација. Баш као што не можете обављати аритметику над чијим се именом или алфабетски поредити математички израз, ЈаваСкрипт захтева одговарајући тип података за сваку операцију. То разумевање спречава грешке и чини ваш код поузданијим. Променљиве могу да чувају различите типове вредности, као што су бројеви и текст. Ове различите врсте вредности познате су као тип података. Типови података су важан део развоја софтвера јер помажу програмерима да доносе одлуке о томе како кôд треба писати и како софтвер треба да функционише. Поред тога, неки типови података имају јединствене особине које помажу да се трансформишу или извуку додатне информације из вредности. ✅ Типови података се такође називају и примитивни типови у ЈаваСкрипту, јер су најнижи ниво типова података које пружа језик. Постоји 7 примитивних типова: стринг, број, bigint, boolean, undefined, null и symbol. Одвојите минут да визуелизујете шта сваки од ових примитива може представљати. Шта је zebra? А шта је 0? true? ### Бројеви Бројеви су најједноставнији тип података у ЈаваСкрипту. Без обзира радите ли са целим бројевима као што је 42, децималним као 3.14, или негативним као -5, ЈаваСкрипт их обрађује једнако. Сећате се наше променљиве од раније? Тај 123 који смо сачували био је заправо тип броја: Кључне карактеристике: - ЈаваСкрипт аутоматски препознаје нумеричке вредности - Можете изводити математичке операције са овим променљивимa - Није потребна експлицитна декларација типа Променљиве могу да чувају све врсте бројева, укључујући децимале или негативне бројеве. Бројеви се такође могу користити са арифметичким операторима, који су обрађени у следећем одељку. ### Арифметички оператори Арифметички оператори вам омогућавају да изводите математичке израчуне у ЈаваСкрипту. Ови оператори следе исте принципе које су математичари користили вековима – исте симболе који су се појављивали у делима учењака као што је Ал-Хваризми, који је развио алгебарску нотацију. Оператори раде онако како бисте очекивали од традиционалне математике: плус за сабирање, минус за одузимање и тако даље. Постоји неколико типова оператора за коришћење током арифметичких функција, а неки од њих су наведени овде: ✅ Испробајте! Испробајте арифметичку операцију у конзоли вашег претраживача. Да ли вас резултати изненађују? ### 🧮 Провера математичких вештина: Израчунавање са самопоуздањем Испитајте своје разумевање аритметике: - Која је разлика између / (дељење) и % (остатак)? - Можете ли предвидети колико је 10 % 3? (Напомена: није 3.33...) - Зашто може бити корисно користити оператор остатка у програмирању? ### Стрингови У ЈаваСкрипту, текстуални подаци су представљени као стрингови (низови карактера). Појам "стринг" долази од концепта карактера увезаних у низ, баш као што су писари у средњовековним манастирима повезивали слова да би формирали речи и реченице у својим рукописима. Стрингови су основни за веб развој. Сваки део текста приказаног на веб сајту – корисничка имена, ознаке дугмади, поруке о грешкама, садржај – обрађује се као стринг податак. Разумевање стрингова је кључно за креирање функционалног корисничког интерфејса. Стрингови су скуп карактера који се налазе између једноструких или дуплих наводника. Разумевање ових концепата: - Користи или једноструке наводнике ' или двоструке наводнике " за дефинисање стрингова - Чува текстуалне податке који могу укључивати слова, бројеве и симболе - Додељује стрингове променљивим ради касније употребе - Захтева наводнике да би разликовали текст од имена променљивих Запамтите да користите наводнике када пишете стринг, иначе ће ЈаваСкрипт претпоставити да је то име променљиве. ### Форматирање стрингова Манипулација стринговима вам омогућава да комбинујете текстуалне елементе, убаците променљиве и креирате динамички садржај који реагује на стање програма. Ова техника вам омогућава да програмски конструишете текст. Често морате да спојите више стрингова заједно – овај процес се зове конкатенација. Да бисте спојили два или више низа, или их повезали заједно, користите оператор +. Корак по корак, ево шта се дешава: - Споји више низова користећи оператор + - Повежи низове директно заједно без размака у првом примеру - Додаје карактере размака " " између низова за бољу читљивост - Убацује интерпункцију као што су зарези за правилно форматирање ✅ Зашто је 1 + 1 = 2 у JavaScript-у, али '1' + '1' = 11? Размислите о томе. А шта је са '1' + 1? Темплејт литерали су други начин форматирања низова, само што уместо наводника користе склонку (backtick). Све што није обичан текст мора бити смештено у плейсхолдере ${ }. Ово укључује и све променљиве које могу бити низови. Разумемо сваки део: - Користи склонке ` `` уместо обичних наводника за прављење темплејт литерала - Уграђује променљиве директно користећи плейсхолдер ${} - Чува размаке и формат тачно како је написано - Обезбеђује чистији начин креирања сложених низова са променљивама Можете постићи жељено форматирање било којом методом, али темплејт литерали ће поштовати све размаке и преломе редова. ✅ Када бисте користили темплејт литерал уместо обичног низа? ### 🔤 Провера знања о низовима: Самопоуздање у манипулацији текстом Процените своје вештине рада са низовима: - Можете ли објаснити зашто је '1' + '1' једнако '11' уместо 2? - Коју методу рада са низовима сматрате читљивијом: конкатенацију или темплејт литерале? - Шта се дешава ако заборавите наводнике око низа? ### Булеани Булеани представљају најједноставнији облик података: могу да садрже само једну од две вредности – true или false. Овај бинарни логички систем потиче од рада Џорџа Булеа, математичара из 19. века који је развио Булову алгебру. Упркос једноставности, булеани су суштински за логику програма. Омогућавају вашем коду да доноси одлуке засноване на условима – да ли је корисник пријављен, да ли је дугме кликнуто или да ли су испуњени извесни критеријуми. Булеани могу имати само две вредности: true или false. Булеани помажу при одлучивању која линија кода треба да се изврши када су испуњени одређени услови. У многим случајевима, оператори помажу у подешавању вредности булеана и често ћете приметити и писати иницијацију променљивих или ажурирање њихових вредности уз помоћ оператора. У горе наведеном, ми смо: - Креирали променљиву која чува булеанову вредност true - Приказали како се чува булеан false - Користили тачне кључне речи true и false (без потребе за наводницима) - Припремили ове променљиве за коришћење у условним изјавама ✅ Променљива се може сматрати 'трути' ако евалуира на булеан true. Занимљиво је да у JavaScript-у све вредности се сматрају трути сем ако су дефинисане као фалси. ### 🎯 Провера логике булеана: Вештине доношења одлука Тестирајте своје разумевање булеана: - Зашто мислите да JavaScript има "трути" и "фалси" вредности осим само true и false? - Можете ли предвидети која од ових вредности је фалси: 0, "0", [], "false"? - Како булеани могу бити корисни у контроли тока програма? --- ## 📊 Резиме вашег алата за типове података ## Изазов GitHub Copilot агента 🚀 Користите Agent режим да завршите следећи изазов: Опис: Креирајте менаџер личних информација који демонстрира све JavaScript типове података које сте научили у овом часу, а који рукова реалним ситуацијама из света. Задатак: Направите JavaScript програм који креира објекат профила корисника који садржи: име (низ), године (број), статус студента (булеан), омиљене боје као низ и објекат адресе са улицом, градом и поштанским бројем. Укључите функције за приказивање информација о профилу и ажурирање појединачних поља. Обавезно прикажете конкатенацију низова, темплејт литерале, аритметичке операције са годинама и логичку булеан логику за статус студента. Сазнајте више о agent режиму овде. ## 🚀 Изазов JavaScript има понашања која програмере могу изненадити. Ево класичног примера за истраживање: покушајте ово у конзоли прегледача: let age = 1; let Age = 2; age == Age и посматрајте резултат. Враћа false – можете ли одредити зашто? Ово представља један од многих JavaScript понашања коју вреди разумети. Познавање ових необичних случајева помоћи ће вам да пишете поузданији код и ефикасније решавате проблеме. ## Тест након предавања Тест након предавања ## Преглед и самостално учење Погледајте овој листи JavaScript вежби и пробајте једну. Шта сте научили? ## Задатак Вежба за типове података ## 🚀 Ваш временски план за савладавање JavaScript типова података ### ⚡ Шта можете урадити у следећих 5 минута - [ ] Отворите конзолу прегледача и креирајте 3 променљиве различитих типова података - [ ] Покушајте изазов: let age = 1; let Age = 2; age == Age и утврдите зашто је фалси - [ ] Вежбајте конкатенацију низова са својим именом и омиљеним бројем - [ ] Тестирајте шта се дешава када додате број низу ### 🎯 Шта можете постићи у овој сати - [ ] Завршите тест након часа и прегледајте све нејасне појмове - [ ] Направите мини калкулатор који сабира, одузима, множе и дели два броја - [ ] Направите једноставан форматирач имена користећи темплејт литерале - [ ] Истражите разлике између оператора == и === - [ ] Вежбајте конвертовање између различитих типова података ### 📅 Ваш JavaScript темељ за недељу дана - [ ] Уз поверење и креативност завршите задатак - [ ] Направите лични профил који користи све типове података које сте учили - [ ] Вежбајте са JavaScript вежбама са CSS-Tricks - [ ] Направите једноставан валидатор форми користећи булеан логику - [ ] Истражите типове података низова и објеката (преглед наредних часова) - [ ] Придружите се JavaScript заједници и постављајте питања о типовима података ### 🌟 Ваш месечни развој - [ ] Интегришите знање о типовима података у веће програмерске пројекте - [ ] Разумите када и зашто користити сваки тип података у стварним апликацијама - [ ] Помозите другим почетницима да разумеју основне концепте JavaScript-а - [ ] Направите малу апликацију која управља различитим типовима корисничких података - [ ] Истражите напредне концепте типовa података као што су принудна конверзија и строга једнакост - [ ] Допринесите отвореним JavaScript пројектима побољшавањем документације ### 🧠 Завршна провера савладавања типова података Прославите свој филозофски темељ JavaScript-а: - Који вас тип података највише изненадио својим понашањем? - Колико сте комфорантни у објашњавању разлике између променљивих и константи пријатељу? - Која вам је најзанимљивија ствар коју сте открили о систему типова у JavaScript-у? - Коју стварну апликацију можете замислити да направите користећи ове основе? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Одрицање одговорности: Овај документ је преведен помоћу AI преводилачке услуге Co-op Translator. Иако тежимо прецизности, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Изворни документ на његовом матичном језику треба посматрати као ауторитет. За критичне информације препоручује се стручни људски превод. Нисмо одговорни за било каква неспоразума или погрешне тумачења која могу настати коришћењем овог превода. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Основи JavaScript-а: Методи и функције

## Квиз пре предавања Квиз пре предавања Поновно писање истог кода је једна од најчешћих фрустрација у програмирању. Функције решавају овај проблем омогућавајући вам да упакујете код у поново употребљиве блокове. Размислите о функцијама као о стандардизованим деловима који су учинили Фордову монтажну траку револуционарном – када направите поуздану компоненту, можете је користити где год је потребно без поновног изграђивања од нуле. Функције вам омогућавају да упакујете делове кода тако да их можете поново користити широм вашег програма. Уместо да копирате и налепљујете исту логику свуда, можете једном направити функцију и позивати је кад год је потребно. Овај приступ држи ваш код организованим и чини ажурирања много лакшим. У овој лекцији научићете како да направите своје функције, проследите им информације и добијете корисне резултате назад. Открићете разлику између функција и метода, научити модерне приступе синтакси и видети како функције могу да раде са другим функцијама. Ове концепте ћемо градити корак по корак. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Функције Функција је самостални блок кода који извршава одређени задатак. Она инкапсулира логику коју можете извршавати кад год је потребно. Уместо да пишете исти код више пута кроз цео програм, можете га упаковати у функцију и позивати ту функцију кад год вам затреба. Овај приступ држи ваш код чистим и чини ажурирања много лакшим. Замислите изазов одржавања ако бисте морали да мењате логику која је расута на 20 различитих места у вашем коду. Врло је важно именовати функције описно. Добро именована функција јасно комуницира свој циљ – када видите cancelTimer(), одмах разумете шта ради, као што јасно означено дугме каже тачно шта ће се десити када га кликнете. ## Креирање и позивање функције Хајде да прегледамо како се прави функција. Синтакса прати доследан образац: Хајде да то разложимо: - Кључна реч function кажe JavaScript-у "Хеј, ја креирам функцију!" - nameOfFunction је место где дајете својој функцији описно име - Заграде () су место где можете додати параметре (ускоро ћемо до тога доћи) - Коврџаве заграде {} садрже стварни код који се извршава када позовете функцију Хајде да направимо једну једноставну функцију поздрављања да видимо како то ради: Ова функција исписује "Hello, world!" у конзолу. Када је дефинишете, можете је користити колико год желите. Да бисте извршили (или "позвали") своју функцију, напишите њено име праћено заградама. JavaScript вам омогућава да дефинишете функцију пре или после позива – JavaScript покретач ће се побринути за редослед извршавања. Када покренете овај ред, извршава се сав код унутар ваше функције displayGreeting, приказујући "Hello, world!" у конзоли вашег претраживача. Ову функцију можете позивати више пута. ### 🧠 Провера основа функција: Правите своје прве функције Погледајмо како вам иде с основним функцијама: - Можете ли објаснити зашто користимо коврџаве заграде {} у дефиницијама функција? - Шта се дешава ако напишете displayGreeting без заграда? - Зашто бисте желели да позивате исту функцију више пута? ### Најбоље праксе са функцијама Ево неколико савета да вам помогну да пишете одличне функције: - Дајте функцијама јасна, описна имена – ваш будући ја ће вам бити захвалан! - Користите camelCase за имена са више речи (на пример calculateTotal уместо calculate_total) - Свака функција треба да буде усредсређена на једну ствар и да је добро уради ## Прослеђивање информација функцији Наша функција displayGreeting је ограничена – може приказивати само "Hello, world!" за све. Параметри нам омогућавају да функције буду флексибилније и корисније. Параметри делују као места на која можете убацити различите вредности сваки пут када користите функцију. На овај начин иста функција може радити са разноразним информацијама сваки пут када се позове. Параметре набрајате у заградама када дефинишете функцију, одвајајући више параметара зарезима: Сваки параметар делује као место за убацивање – када неко позове вашу функцију, он даје стварне вредности које се убацују на ta места. Ажурирајмо нашу функцију поздрављања да прихвата име особе: Примећујете како користимо обратне наводнике (` `) и ${}` да убацимо име директно у поруку – ово се зове template literal и веома је користан начин прављења стрингова са варијаблама мешаним унутра. Сада, када позовемо нашу функцију, можемо проследити било које име: JavaScript узима стринг 'Christopher', додељује га параметру name и креира персонализовану поруку "Hello, Christopher!" ## Подразумеване вредности Шта ако желимо да неки параметри буду опциони? Ту помажу подразумеване вредности! Рецимо да желимо да људи могу прилагодити реч поздрављања, али ако не наведу другу, користићемо "Hello" као резервну вредност. Подразумеване вредности можете поставити коришћењем знака једнакости, као када постављате променљиву: Овде је name и даље обавезан, али salutation има резервну вредност 'Hello' ако нико не унесе другачији поздрав. Сада можемо позивати ову функцију на два различита начина: У првом позиву, JavaScript користи подразумевани "Hello" јер нисмо навели поклон. У другом позиву, користи наш прилагођени "Hi". Ова флексибилност чини функције прилагодљивим различитим ситуацијама. ### 🎛️ Провера знања параметара: Чинећи функције флексибилним Тестирајте своје разумевање параметара: - Која је разлика између параметра и аргумента? - Зашто су подразумеване вредности корисне у стварном програмирању? - Можете ли предвидети шта се дешава ако проследите више аргумената него параметара? ## Враћање вредности До сада су наше функције само исписивале поруке у конзолу, али шта ако желите да функција нешто израчуна и врати резултат? Ту на сцену ступају враћања вредности. Уместо само приказивања нечег, функција вам може вратити вредност коју можете сачувати у променљиву или користити у другим деловима кода. Да пошаљете вредност назад, користите кључну реч return праћену оним што желите да вратите: Ово је важно: када функција достигне return израз, одмах престаје да се извршава и шаље ту вредност ономе ко ју је позвао. Изменимо нашу функцију поздрављања да враћа поруку уместо да је исписује: Сада, уместо да исписује поздрав, ова функција креира поруку и враћа је нама. Да бисмо користили враћену вредност, можемо је сачувати у променљиву као и било коју другу вредност: Сада greetingMessage садржи "Hello, Christopher" и можемо га користити било где у нашем коду – за приказ на веб-страници, укључивање у емаил или прослеђивање другој функцији. ### 🔄 Провера враћених вредности: Добивање резултата Оцени своје разумевање враћених вредности: - Шта се дешава са кодом након return у функцији? - Зашто је враћање вредности често боље од само исписивања у конзолу? - Може ли функција вратити различите типове вредности (стринг, број, бул)? ## Функције као параметри за функције Функције могу бити прослеђене као параметри другим функцијама. Иако овај концепт може изгледати сложено у почетку, то је моћна функција која омогућава флексибилан стил програмирања. Овај образац је јако чест када желите да кажете "када се нешто деси, уради ово". На пример, "када тајмер заврши, покрени овај код" или "када корисник кликне на дугме, позови ову функцију". Погледајмо setTimeout, који је уграђена функција која чека одређени временски период, па онда покреће неки код. Морамо јој рећи који код да покрене – савршен случај за прослеђивање функције! Пробајте овај код – након 3 секунде ћете видети поруку: Примећујете како прослеђујемо displayDone (без заграда) функцији setTimeout. Ми не позивамо функцију сами – ми јој је предајемо и кажемо "позови ово за 3 секунде". ### Анонимне функције Понекад вам треба функција само за једну ствар и не желите да јој дајете име. Размислите – ако функцију користите само једном, зашто оптерећивати код додатним именом? JavaScript вам даје могућност да направите анонимне функције – функције без имена које можете дефинисати управо тамо где су вам потребне. Ево како можемо преписати наш пример са тајмером користећи анонимну функцију: Ово постиже исти резултат, али функција је дефинисана директно у позиву setTimeout, елиминишући потребу за посебном декларацијом функције. ### Функције стрелице (arrow functions) Модерни JavaScript има још краћи начин писања функција који се зове arrow functions (функције стрелице). Користе => (што изгледа као стрелица – јел' тако?) и веома су популарне међу програмерима. Функције стрелице вам омогућавају да прескочите кључну реч function и напишете краћи, јаснији код. Ево нашег примера с тајмером написаног функцијом стрелицом: () је место где иду параметри (у овом случају празно), па долази стрелица =>, и на крају тело функције у коврџавим заградама. Ово пружа исту функционалност са сажетом синтаксом. ### Када користити који приступ Када бисте користили који приступ? Практични савет: ако ћете користити функцију више пута, дајте јој име и дефинишите је посебно. Ако је за једну специфичну употребу, размислите о анонимној функцији. И стрелице и традиционална синтакса су валидни избори, иако су стрелице постале доминантне у модерним JavaScript код база. ### 🎨 Провера стила функција: Изаберите праву синтаксу Тестирајте разумевање синтаксе: - Када бисте радије користили стрелице уместо традиционалне синтаксе функције? - Која је главна предност анонимних функција? - Можете ли смислити ситуацију у којој је именована функција боља од анонимне? --- ## 🚀 Изазов Можете ли у једној реченици изразити разлику између функција и метода? Покушајте! ## GitHub Copilot Agent изазов 🚀 Користите Agent режим да завршите следећи изазов: Опис: Направите библиотеку корисних математичких функција која демонстрира различите концепте функција обрађене у овој лекцији, укључујући параметре, подразумеване вредности, враћање вредности и стрелице. Задатак: Направите JavaScript датотеку под називом mathUtils.js која садржи следеће функције: 1. Функцију add која узима два параметра и враћа њихов збир 2. Функцију multiply са подразумеваним вредностима параметара (други параметар подразумевано 1) 3. Функцију стрелицу square која узима број и враћа његов квадрат 4. Функцију calculate која прихвата другу функцију као параметар и два броја, и примењује функцију на те бројеве 5. Прикажите позив сваке функције са одговарајућим тест примерима Сазнајте више о agent режиму овде. ## Квиз после предавања Квиз после предавања ## Преглед и самостални рад Вреди прочитати мало више о функцијама стрелицама, јер се све више користе у код базама. Вежбајте писање функције, а затим је препишите користећи ову синтаксу. ## Задатак Забава са функцијама --- ## 🧰 Резиме вашег скупа алата за JavaScript функције --- ## 🚀 Ваш временски план за савладавање JavaScript функција ### ⚡ Шта можете урадити у наредних 5 минута - [ ] Напишите једну једноставну функцију која враћа ваш омиљени број - [ ] Направите функцију са два параметра која их сабира заједно - [ ] Покушајте да конвертујете традиционалну функцију у стреличну синтаксу - [ ] Вежбајте изазов: објасните разлику између функција и метода ### 🎯 Шта можете постићи у овом сату - [ ] Завршите квиз након лекције и прегледајте све нејасне појмове - [ ] Направите библиотеку математичких алата из изазова GitHub Copilot - [ ] Креирајте функцију која користи другу функцију као параметар - [ ] Вежбајте писање функција са подразумеваним параметрима - [ ] Експериментишите са шаблонским литералима у повратним вредностима функција ### 📅 Ваше дужонедељно савладавање функција - [ ] Завршите задатак "Забава са функцијама" креативно - [ ] Рефакторирате неки понављајући код који сте написали у поновно употребљиве функције - [ ] Направите мали калкулатор користећи само функције (без глобалних променљивих) - [ ] Вежбајте стреличне функције са методама низова као што су map() и filter() - [ ] Направите колекцију корисних функција за честе задатке - [ ] Проучите функције вишег реда и концепте функционалног програмирања ### 🌟 Ваш месечни трансформациони план - [ ] Савладајте напредне концепте функција као што су клаужуре и опсег - [ ] Направите пројекат који интензивно користи композицију функција - [ ] Допринесите отвореном коду побољшавајући документацију функција - [ ] Подучите неког другог о функцијама и различитим стиловима синтаксе - [ ] Истражите парадигме функционалног програмирања у JavaScript-у - [ ] Креирајте личну библиотеку поновно употребљивих функција за будуће пројекте ### 🏆 Завршна провера шампиона функција Прославите своје савладавање функција: - Која је најкориснија функција коју сте до сада креирали? - Како вам је учење о функцијама променило начин размишљања о организацији кода? - Који стил синтаксе функција више волите и зашто? - Који стварни проблем бисте решили писањем функције? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ограничење одговорности: Овај документ је преведен помоћу ИИ преводилачке услуге Co-op Translator. Док настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионални превод од стране људског преводиоца. Нисмо одговорни за било каква неспоразумевања или погрешне тумачења која произлазе из употребе овог превода. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Основе ЈаваСкрипта: Доношење одлука

Јесте ли се икада запитали како апликације доносе паметне одлуке? Као што навигациони систем бира најбржи пут, или како термостат одлучује када да укључи грејање? Ово је основни појам доношења одлука у програмирању. Баш као што је аналитички уређај Чарлса Бабеџа био дизајниран да прати различите секвенце операција на основу услова, савремени ЈаваСкрипт програми морају да доносе изборе базиране на различитим околностима. Њихова способност да разгранавају и доносе одлуке је оно што претвара статички код у реактивне, интелигентне апликације. У овој лекцији ћете научити како да имплементирате условну логику у вашим програмима. Истражићемо условне наредбе, операторе поређења и логичке изразе који омогућавају вашем коду да процењује ситуације и одговара на одговарајући начин. ## Квиз пре предавања Квиз пре предавања Способност доношења одлука и контроле тока програма је основни аспект програмирања. Овај део покрива како да контролишете извршавање ваших ЈаваСкрипт програма користећи булове вредности и условну логику. [](https://youtube.com/watch?v=SxTp8j-fMMY "Доношење одлука") ## Кратак подсетник о Буловима Пре него што истражимо доношење одлука, подсетимо се булових вредности из претходне лекције. Назване по математичару Џорџу Булу, ове вредности представљају бинарна стања – или true или false. Нема двозначности, нема средине. Ове бинарне вредности чине основу целокупне рачунарске логике. Свако доношење одлуке у вашем програму на крају се своди на булову процену. Креирање булових променљивих је једноставно: Ово креира две променљиве са јасним буловим вредностима. ✅ Булови су добили име по енглеском математичару, филозофу и логику Џорџу Булу (1815–1864). ## Оператори поређења и булови У пракси, ретко ћете ручно постављати булове вредности. Уместо тога, генерисаћете их процењивањем услова: „Да ли је овај број већи од оног?“ или „Да ли су ове вредности једнаке?“ Оператори поређења омогућавају ову процену. Они упоређују вредности и враћају булове резултате на основу односа између операнда. ✅ Проверите ваше знање тако што ћете написати нека поређења у конзоли вашег прегледача. Да ли вас нешто од добијених резултата изненађује? ### 🧠 Провера савладавања поређења: Разумевање булове логике Тестирајте своје разумевање поређења: - Зашто мислите да је === (строга једнакост) генерално пожељнији од == (лабава једнакост)? - Можете ли предвидети шта враћа 5 === '5'? А шта враћа 5 == '5'? - Која је разлика између !== и !=? ## Наредба if Наредба if је као постављање питања у вашем коду. „Ако је овај услов истинит, онда уради ову ствар.“ Веројатно је најважнији алат који ћете користити за доношење одлука у ЈаваСкрипту. Ево како функционише: Услов иде у заграде, и ако је true, ЈаваСкрипт извршава код унутар витичастих заграда. Ако је false, ЈаваСкрипт једноставно прескаче тај блок. Често ћете користити операторе поређења да направите ове услове. Ево једног практичног примера: Пошто 1000 >= 800 вреднује у true, код унутар блока се извршава, приказујући "Добијање новог лаптопа!" у конзоли. ## Наредба If..Else Али шта ако желите да ваш програм уради нешто друго када услов није истинит? Ту долази else – као резервни план. Наредба else вам омогућава да кажете "ако овај услов није истинит, уради ово друго." Сада, пошто је 500 >= 800 false, ЈаваСкрипт прескаче први блок и извршава блок else. У конзоли ћете видети "Још не могу приуштити нови лаптоп!" ✅ Испробајте разумевање овог и следећег кода тако што ћете их покренути у конзоли прегледача. Промените вредности променљивих currentMoney и laptopPrice да бисте видели различите излазе console.log(). ### 🎯 Провера if-else логике: разгранавање путева Процените своје разумевање условне логике: - Шта се дешава ако currentMoney тачно одговара laptopPrice? - Можете ли замислити стварни сценарио у ком је if-else логика корисна? - Како бисте проширили ово да обрадите више ценовних разреда? ## Наредба Switch Понекад треба да упоредите једну вредност са више опција. Док бисте могли користити више угнежђених if..else наредби, тај приступ постаје незгодан. Наредба switch пружа чистију структуру за руковање више дискретних вредности. Овај концепт подсећа на механичке прекидаче коришћене у раним телефонским централама – једна улазна вредност одређује коју специфичну путању ће извршење следити. Ево како је структура: - ЈаваСкрипт процењује израз једном - Прегледа сваки case да пронађе подударност - Када пронађе подударност, извршава тај блок кода - Наредба break говори ЈаваСкрипту да стане и изађе из switch-а - Ако ниједан случај није упарен, извршава се default блок (ако га имате) У овом примеру, ЈаваСкрипт види да је dayNumber 2, пронађе подударајући case 2, постави dayName на "Tuesday" и онда изађе из switch-а. Резултат? "Today is Tuesday" се приказује у конзоли. ✅ Испробајте разумевање овог и следећег кода покретањем у конзоли прегледача. Промените вредност променљиве a да видите другачији излаз console.log(). ### 🔄 Мастеринг наредбе Switch: Више опција Тестирајте своје разумевање switch-а: - Шта се дешава ако заборавите break наредбу? - Када бисте користили switch уместо више if-else изјава? - Зашто је default случај користан чак и ако мислите да сте покрили све могућности? ## Логички оператори и булови Комплексне одлуке често захтевају истовремену процену више услова. Баш као што Булова алгебра омогућава математичарима да комбинују логичке изразе, програмирање пружа логичке операторе за повезивање више булових услова. Ови оператори омогућавају софистицирану условну логику спајањем једноставних true/false процена. Ови оператори вам омогућавају да комбинујете услове на корисне начине: - AND (&&) значи да морају оба услова бити тачна - OR (||) значи да бар један услов мора бити тачан - NOT (!) мења true у false (и обратно) ## Услови и одлуке са логичким оператерима Погледајмо ове логичке операторе у акцији на реалистичнијем примеру: У овом примеру: рачунамо цену са 20% попуста (640), затим процењујемо да ли нам расположива средства покривају или пуни износ ИЛИ цену с попустом. Пошто 600 није довољно за ценовни праг од 640, услов враћа false. ### 🧮 Провера логичких оператора: комбиновaње услова Тестирајте разумевање логичких оператора: - У изразу A && B, шта се дешава ако је A нетачно? Да ли се B уопште процењује? - Можете ли смислити ситуацију у којој бисте користили сва три оператора (&&, ||, !) заједно? - Која је разлика између !user.isActive и user.isActive !== true? ### Оператор негације Понекад је лакше размишљати када нешто није тачно. На пример, уместо да питате „Да ли је корисник пријављен?“, можда желите да питате „Да ли корисник није пријављен?“ Оператер узвика (!) преокреће логику за вас. Оператор ! је као да кажете „супротно од...“ – ако је нешто true, ! га чини false, и обрнуто. ### Тернарни изрази За једноставне условне доделе, ЈаваСкрипт пружа тернарни оператор. Ова концизна синтакса вам омогућава да напишете условни израз у једној линији, корисно када желите да доделите једну од две вредности на основу услова. Чита се као питање: „Да ли је овај услов истинит? Ако јесте, користи ову вредност. Ако није, користи ону вредност.“ Испод је конкретнији пример: ✅ Посветите минут да неколико пута прочитате овај код. Да ли разумете како ови оператори функционишу? Ова линија каже: „Да ли је firstNumber већи од secondNumber? Ако јесте, стави firstNumber у biggestNumber. Ако није, стави secondNumber у biggestNumber.“ Тернарни оператор је само краћа верзија традиционалне if..else наредбе: Оба приступа производе идентичне резултате. Тернарни оператор нуди концизност, док је традиционална if-else структура можда читљивија за сложеније услове. --- ## 🚀 Изазов Направите програм који је прво написан са логичким операторима, а затим га препишите користећи тернарни израз. Који синтакс ви више волите? --- ## Изазов GitHub Copilot агента 🚀 Користите Agent режим да завршите следећи изазов: Опис: Направите свеобухватан калкулатор оцена који демонстрира више концепата доношења одлука из ове лекције, укључујући if-else наредбе, switch наредбе, логичке операторе и тернарне изразе. Захтев: Напишите ЈаваСкрипт програм који узима нумеричку оцену студента (0-100) и одређује његову словну оцену према следећим критеријумима: - А: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: испод 60 Захтеви: 1. Користите if-else наредбу за одређивање словне оцене 2. Користите логичке операторе да проверите да ли студент пролази (оцена >= 60) И има почаст (оцена >= 90) 3. Користите switch изјаву да пружите специфичне повратне информације за сваки словни разред 4. Користите тернарни оператор да одредите да ли је студент подобан за следећи курс (оцена >= 70) 5. Укључите проверу уноса како бисте осигурали да је резултат између 0 и 100 Тестирајте свој програм са разним оценама укључујући и крајње случајеве као што су 59, 60, 89, 90, и неважећи уноси. Сазнајте више о agent mode овде. ## Квиз након предавања Пост-лекцијски квиз ## Преглед и самосталан рад Прочитајте више о бројним операторима доступним кориснику на MDN. Прођите кроз одличан Josh Comeau-ов operator lookup! ## Задатак Оператори --- ## 🧠 Резиме вашег сета алата за доношење одлука --- ## 🚀 Ваш временски оквир за усавршавање у доношењу одлука у JavaScript-у ### ⚡ Шта можете учинити у наредних 5 минута - [ ] Вежбајте операторе поређења у конзоли прегледача - [ ] Напишите једноставну if-else изјаву која проверава ваш узраст - [ ] Покушајте изазов: препишите if-else користећи тернарни оператор - [ ] Тестирајте шта се дешава са различитим "true" и "false" вредностима ### 🎯 Шта можете постићи у овом сату - [ ] Завршите квиз након лекције и прегледајте све збуњујуће концепте - [ ] Направите свеобухватни калкулатор оцена из GitHub Copilot изазова - [ ] Креирајте једноставно стабло одлука за стварни сценарио (нпр. избор одеће) - [ ] Вежбајте комбиновaње више услова помоћу логичких оператора - [ ] Експериментишите са switch изјавама за различите случајеве ### 📅 Ваше недељно усавршавање логике - [ ] Завршите задатак о оператерима са креативним примерима - [ ] Направите мини апликацију квиза користећи различите условне структуре - [ ] Креирајте валидатор формулара који проверава више улазних услова - [ ] Вежбајте Josh Comeau-ове operator lookup вежбе - [ ] Рефакторишите постојећи код да користи прикладније условне структуре - [ ] Проучите short-circuit процену и импликације на перформансе ### 🌟 Ваш месечни трансформациони процес - [ ] Савладајте сложене унутрашње услове и одржавајте читљивост кода - [ ] Направите апликацију са софистицираном логиком доношења одлука - [ ] Допринесите open source пројектима унапређујући условну логику - [ ] Подучите друге о различитим условним структурама и када их користити - [ ] Истражите функционалне приступе условној логици - [ ] Направите лични референтни водич за најбоље праксе условног изражавања ### 🏆 Завршни преглед вашег мајсторства у доношењу одлука Прославите своје умеће логичког размишљања: - Која је најсложенија логика одлуке коју сте успешно имплементирали? - Која условна структура вам најприродније одговара и зашто? - Како вам је учење о логичким операторима променило приступ решавању проблема? - Која стварна апликација би имала користи од софистициране логике доношења одлука? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Пажња: Овај документ је преведен помоћу AI сервиса за превођење Co-op Translator. Иако тежимо прецизности, молимо вас да имате на уму да аутоматски преводи могу садржати грешке или нетачности. Изворни документ на његовом оригиналном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионалан превод од стране људског стручњака. Нисмо одговорни за било каква неспоразума или погрешне тумачења која произилазе из коришћења овог превода. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

Основе JavaScript-а: Низови и Петље

## Пре-предавачки квиз Пре-предавачки квиз Јесте ли се икада запитали како веб сајтови прате артикле у корпи за куповину или приказују вашу листу пријатеља? Ту ступају на сцену низови и петље. Низови су као дигитални контејнери који држе више информација, док петље омогућавају да ефикасно радите са свим тим подацима без понављања кода. Заједно, ови два концепта чине темељ за рад са информацијама у вашим програмима. Научићете како да пређете са ручног писања сваког корака на креирање паметног, ефикасног кода који може брзо обрадити стотине или чак хиљаде ставки. До краја ове лекције, разумећете како да извршите сложене задатке над подацима са само неколико линија кода. Хајде да истражимо ове основне програмерске концепте. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Низови Замислите низове као дигитални фајл орман - уместо да чувате један документ по фиоци, можете организовати више повезаних ставки у једном, структурираном контејнеру. У програмерским терминима, низови вам омогућавају да складиштите више информација у једном организованом пакету. Без обзира да ли правите галерију фотографија, управљате списком задатака или пратите најбоље резултате у игри, низови представљају основу за организацију података. Хајде да видимо како функционишу. ✅ Низови су свуда око нас! Можете ли смислити пример низа у стварном животу, као што је низ соларних панела? ### Креирање низова Креирање низа је супер једноставно - само користите квадратне заграде! Шта се овде дешава? Тек сте креирали празан контејнер коришћењем тих квадратних заграда []. Замислите то као празан полицу у библиотеци - спреман је да држи све књиге које желите да организујете. Такође можете одмах од почетка да попуните свој низ почетним вредностима: Занимљивости које треба приметити: - Можете чувати текст, бројеве или чак true/false вредности у истом низу - Само раздвојите сваки елемент зарезом - лако! - Низови су савршени за чување повезаних информација заједно ### Индексирање низова Ево нечега што вам можда на први поглед делује необично: низови броје своје ставке почевши од 0, а не од 1. Ово индексирање од нуле има своје корене у начину на који рачунарска меморија функционише - то је програмерска конвенција још од раних дана рачунарских језика као што је C. Свака позиција у низу добија свој јединствени број који се назива инекс. ✅ Да ли вас изненађује што низови почињу са индексом нула? У неким програмерским језицима индекси почињу од 1. Око тога постоји занимљива историја коју можете прочитати на Википедији. Приступање елементима низа: Шта се овде дешава: - Користи квадратне заграде са бројем индекса за приступ елементима - Враћа вредност сачувану на тој специфичној позицији у низу - Почиње бројевати од 0, па је први елемент индекс 0 Измена елемената низа: У горњем примеру смо: - Изменили елемент са индексом 4 са "Rocky Road" у "Butter Pecan" - Додали нови елемент "Cookie Dough" на индекс 5 - Аутоматски проширили дужину низа када се дода елемент изван тренутних граница ### Дужина низа и често коришћене методе Низови имају уграђена својства и методе које знатно олакшавају рад са подацима. Пронаћи дужину низа: Кључне тачке за памћење: - Враћа укупан број елемената у низу - Аутоматски ажурира када се додају или уклањају елементи - Обезбеђује динамички број који је користан за петље и валидацију Основне методе низа: Разумевање ових метода: - Додаје елементе са push() (на крај) и unshift() (на почетак) - Уклања елементе са pop() (са краја) и shift() (са почетка) - Пронађе елементе помоћу indexOf() и проверава постојање са includes() - Враћа корисне вредности као што су уклоњени елементи или индекси позиција ✅ Испробајте сами! Користите конзолу у вашем прегледачу да креирате и манипулишете сопственим низом. ### 🧠 Провера основа низа: Организовање података Тестирајте своје разумевање низова: - Зашто мислите да низови почињу бројати од 0, а не од 1? - Шта се деси ако покушате да приступите индексу који не постоји (нпр. arr[100] у низу од 5 елемената)? - Можете ли смислити три сценарија из стварног живота у којима би низови били корисни? ## Петље Замислите чувену казну из романа Чарлса Дикенса где су ученици морали да пишу реченице по више пута на дасци. Замислите да можете једноставно да наредите некоме „напиши ову реченицу 100 пута“ и да се то аутоматски изврши. Управо то петље раде за ваш код. Петље су као непознати помоћник који може поновити задатке без грешке. Без обзира да ли треба да проверите сваки предмет у корпи за куповину или да прикажете све фотографије у албуму, петље ефикасно управљају понављањем. JavaScript пружа неколико типова петљи за избор. Погледајмо сваки и схватимо када их користити. ### For петља for петља је као да подесите тајмер - тачно знате колико пута нешто желите да се догоди. Врло је организована и предвидљива, што је чини савршеном када радите са низовима или када треба да бројите нешто. Структура for петље: Корак по корак, ево шта се дешава: - Иницијализује бројач i на 0 на почетку - Проверaва услов i < 10 пре сваке итерације - Извршава блок кода кад је услов тачан - Повећава i за 1 након сваке итерације са i++ - Зауставља се када услов постане нетачан (кад i достигне 10) ✅ Покрените овај код у конзоли прегледача. Шта се деси када направите мале измене бројачу, услову или изразу итерације? Можете ли да га терате уназад, правећи одбројавање? ### 🗓️ Провера вештине for петље: Контролисано понављање Оцени своје разумевање for петље: - Која су три дела for петље и шта сваки ради? - Како бисте прошли кроз низ уназад? - Шта се деси ако заборавите део за повећање (i++)? ### While петља while петља је као да кажете „настави да радиш ово док...“ - можда не знате колико пута ће се извршити, али знате када да се заустави. Савршена је за ствари као што је тражење уноса корисника док не добијете потребне податке, или претраживање до проналажења резултата. Карактеристике while петље: - Наставља извршавање док је услов тачан - Захтева ручно управљање бројачем ако постоји - Проверaва услов пре сваке итерације - Ризикује бесконачне петље ако услов никада не постане нетачан Разумевање ових примера: - Управља бројачем i ручно унутар тела петље - Повећава бројач да спречи бесконачне петље - Приказује практичну употребу са уносом корисника и ограничењем покушаја - Укључује безбедносне механизме да спречи бескрајно извршавање ### ♾️ Провера мудрости while петље: Понављање базирано на услову Тестирајте разумевање while петље: - Која је главна опасност при коришћењу while петљи? - Када бисте изабрали while петљу уместо for петље? - Како спречити бесконачне петље? ### Модерне алтернативе петљи JavaScript нуди модерну синтаксу петљи која може ваш код учинити читљивијим и мање склоним грешкама. For...of петља (ES6+): Кључне предности for...of: - Уклања потребу за управљањем индексом и грешкама „обављања“ - Обезбеђује директан приступ елементима низа - Побољшава читљивост кода и смањује сложеност синтаксе forEach метода: Шта треба знати о forEach: - Извршава функцију за сваки елемент низа - Обезбеђује вредност елемента и индекс као параметре - Не може се рано прекинути (за разлику од традиционалних петљи) - Враћа undefined (не креира нови низ) ✅ Зашто бисте изабрали for петљу уместо while петље? 17К гледалаца на StackOverflow-у имало је исто питање, а неки од одговора вам могу бити занимљиви овде. ### 🎨 Провера модерне синтаксе петљи: Прихватање ES6+ Оцени своје разумевање модерног JavaScript-а: - Које су предности for...of у односу на традиционалне for петље? - Када бисте ипак радије користили традиционалне for петље? - Која је разлика између forEach и map? ## Петље и низови Комбиновање низова са петљама ствара моћне могућности обраде података. Ова комбинација је фундаментална за многе програмерске задатке, од приказа листа до израчунавања статистика. Традиционална обрада низова: Разумемо следеће приступе: - Користи својство дужине низа за одређивање граница петље - Приступа елементима по индексу у традиционалним for петљама - Обезбеђује директан приступ елементима у for...of петљама - Обрађује сваки елемент тачно једном Пример практичне обраде података: Ево како овај код функционише: - Иницијализује променљиве за праћење збира и екстрема - Обрађује сваки резултат једном ефикасном петљом - Сабира укупан зброј за израчунавање просека - Практикује праћење највеће и најмање вредности током итерације - Израчунава коначну статистику након завршетка петље ✅ Иградите сопствени низ и експериментишите са петљама у конзоли свог прегледача. --- ## Изазов са GitHub Copilot Agent-ом 🚀 Користите Agent режим за завршетак следећег изазова: Опис: Направите свеобухватну функцију за обраду података која комбинује низове и петље за анализу скупа података и генерисање значајних увида. Задатак: Направите функцију под називом analyzeGrades која прими низ објеката о студентским оценама (сваки садржи име и резултат) и враћа објекат са статистикама, укључујући највиши резултат, најнижи резултат, просечан резултат, број пролазника (резултат >= 70) и низ имена студената са резултатима изнад просека. У свом решењу користите најмање две различите врсте петљи. Сазнајте више о agent режиму овде. ## 🚀 Изазов JavaScript нуди неколико модерних метода за низове који могу заменити традиционалне петље за специфичне задатке. Истражите forEach, for-of, map, filter и reduce. Ваша такмичење: Преформатирајте пример са оцена ученика користећи најмање три различите методе за низове. Приметите колико код постаје чистији и читљивији уз модерни JavaScript синтакс. ## Квиз након предавања Квиз након предавања ## Преглед и самостално учење Низови у JavaScript-у имају много метода које су изузетно корисне за манипулацију подацима. Прочитајте о овим методама и испробајте неке од њих (као што су push, pop, slice и splice) на низу по вашем избору. ## Задатак Прочитај низ --- ## 📊 Резиме вашег алата за низове и петље --- ## 🚀 Календар савладавања низа и петљи ### ⚡ Шта можете урадити у наредних 5 минута - [ ] Креирајте низ омиљених филмова и приступите специфичним елементима - [ ] Напишите for петљу која броји од 1 до 10 - [ ] Испробајте изазов са модерним методама низова из лекције - [ ] Вежбајте индексирање низа у конзоли претраживача ### 🎯 Шта можете постићи у овом сату - [ ] Завршите квиз након лекције и прегледајте делове који су тешки - [ ] Изградите свеобухватан анализатор оцена из GitHub Copilot изазова - [ ] Креирајте једноставну корпу за куповину која додаје и уклања ставке - [ ] Вежбајте претварање између различитих типова петљи - [ ] Експериментишите са методама низа као што су push, pop, slice и splice ### 📅 Ваша недељна обрада података - [ ] Завршите задатак "Прочитај низ" уз креативна побољшања - [ ] Направите апликацију за то-до листу користећи низове и петље - [ ] Креирајте једноставан калкулатор статистике за бројчане податке - [ ] Вежбајте са MDN методама за низове - [ ] Направите галерију фотографија или интерфејс за листу песама - [ ] Истражите функционално програмирање помоћу map, filter и reduce ### 🌟 Ваш месечни трансформацијски план - [ ] Савладајте напредне операције на низовима и оптимизацију перформанси - [ ] Изградите комплетан табло за визуелизацију података - [ ] Допринесите пројектима отвореног кода који се баве обрадом података - [ ] Подучите неког другог о низовима и петљама уз практичне примере - [ ] Креирајте личну библиотеку поново употребљивих функција за обраду података - [ ] Истражите алгоритме и структуре података базиране на низовима ### 🏆 Коначни преглед шампиона обраде података Прославите своје умеће у раду са низовима и петљама: - Која је најкориснија операција над низовима коју сте научили за реалне апликације? - Који тип петље вам највише прија и зашто? - Како вам је разумевање низова и петљи променило приступ организовању података? - Који компликовани задатак обраде података бисте желели да решите следећи? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Одрицање од одговорности: Овај документ је преведен коришћењем AI преводилачке услуге Co-op Translator. Иако се трудимо да обезбедимо прецизност, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на свом изворном језику треба сматрати ауторитетним извором. За критичне информације препоручује се професионални превод од стране човека. Нисмо одговорни за било каква неспоразума или погрешне интерпретације које могу настати коришћењем овог превода. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Introduktion till JavaScript

JavaScript är webbsidornas språk. I dessa fyra lektioner kommer du att lära dig grunderna. ### Ämnen 1. Variabler och Datatyper 2. Funktioner och Metoder 3. Att fatta beslut med JavaScript 4. Arrayer och Loopar ### Krediter Dessa lektioner skrevs med ♥️ av Jasmine Greenaway, Christopher Harrison och Chris Noring --- Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, bör du vara medveten om att automatiserade översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess ursprungliga språk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.

javascript

Datatyper

Datatyper är ett av de grundläggande begreppen i JavaScript som du kommer att stöta på i varje program du skriver. Tänk på datatyper som det arkivsystem som användes av de gamla bibliotekarierna i Alexandria – de hade specifika platser för rullar som innehöll poesi, matematik och historiska anteckningar. JavaScript organiserar information på ett liknande sätt med olika kategorier för olika typer av data. I denna lektion ska vi utforska kärndatatyperna som får JavaScript att fungera. Du kommer att lära dig hur man hanterar siffror, text, sant/falskt-värden och förstå varför det är viktigt att välja rätt typ för dina program. Dessa koncept kan verka abstrakta till en början, men med övning kommer de att bli andra natur. Att förstå datatyper kommer att göra allt annat i JavaScript mycket tydligare. Precis som arkitekter behöver förstå olika byggmaterial innan de bygger en katedral, kommer dessa grunder att stödja allt du bygger framöver. ## Förföreläsningsquiz Förföreläsningsquiz Den här lektionen täcker grunderna i JavaScript, språket som möjliggör interaktivitet på webben. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Låt oss börja med variabler och datatyperna som fyller dem! ## Variabler Variabler är grundläggande byggstenar i programmering. Som de märkta burkar som medeltida alkemister använde för att förvara olika substanser, låter variabler dig lagra information och ge den ett beskrivande namn så att du kan referera till den senare. Behöver du komma ihåg någons ålder? Spara det i en variabel som heter age. Vill du hålla koll på en användares namn? Spara det i en variabel som heter userName. Vi kommer att fokusera på det moderna sättet att skapa variabler i JavaScript. De tekniker du lär dig här representerar år av språkutveckling och bästa praxis utvecklad av programmeringsgemenskapen. Att skapa och deklarera en variabel har följande syntax [keyword] [name]. Det består av två delar: - Nyckelord. Använd let för variabler som kan förändras, eller const för värden som förblir oförändrade. - Variabelnamnet, detta är ett beskrivande namn som du själv väljer. ✅ Nyckelordet let introducerades i ES6 och ger din variabel så kallad _block scope_. Det rekommenderas att du använder let eller const istället för det äldre nyckelordet var. Vi kommer att gå igenom block scope mer ingående i senare delar. ### Uppgift - arbeta med variabler 1. Deklarera en variabel. Låt oss börja med att skapa vår första variabel: ```javascript let myVariable; ``` Det här innebär: - Det talar om för JavaScript att skapa en lagringsplats kallad myVariable - JavaScript allokerar minnesutrymme för denna variabel - Variabeln har för närvarande inget värde (undefined) 2. Ge den ett värde. Nu lägger vi in något i vår variabel: ```javascript myVariable = 123; ``` Hur tilldelning fungerar: - Operatören = tilldelar värdet 123 till vår variabel - Variabeln innehåller nu detta värde istället för att vara undefined - Du kan referera till detta värde i hela din kod med myVariable > Notera: användningen av = i denna lektion betyder att vi använder en "tilldelningsoperator" för att sätta ett värde till en variabel. Det betyder inte likhet. 3. Gör det smartare. Faktiskt, låt oss kombinera dessa två steg: ```javascript let myVariable = 123; ``` Detta tillvägagångssätt är mer effektivt: - Du deklarerar variabeln och tilldelar värde i ett uttalande - Detta är standardpraxis bland utvecklare - Det minskar kodlängden samtidigt som tydligheten bibehålls 4. Byt dig. Tänk om vi vill lagra ett annat nummer? ```javascript myVariable = 321; ``` Förstå tilldelning på nytt: - Variabeln innehåller nu 321 istället för 123 - Det tidigare värdet ersätts – variabler lagrar bara ett värde åt gången - Denna muterbarhet är en nyckelkaraktäristik för variabler deklarerade med let ✅ Testa! Du kan skriva JavaScript direkt i din webbläsare. Öppna en webbläsare och gå till Utvecklarverktyg. I konsolen finns en prompt; skriv let myVariable = 123, tryck enter, skriv sedan myVariable. Vad händer? Notera, du lär dig mer om dessa begrepp i kommande lektioner. ### 🧠 Variabler Kontroll: Bekvämlighet Låt oss se hur du känner inför variabler: - Kan du förklara skillnaden mellan att deklarera och tilldela en variabel? - Vad händer om du försöker använda en variabel innan du deklarerar den? - När skulle du välja let framför const för en variabel? ## Konstanter Ibland behöver du lagra information som aldrig ska ändras under programmets körning. Tänk på konstanter som de matematiska principer som Euklides fastställde i det antika Grekland – när de bevisades och dokumenterades förblev de fasta för all framtid. Konstanter fungerar liknande variabler, men med en viktig begränsning: när du tilldelar deras värde kan det inte ändras. Denna oföränderlighet hjälper till att förhindra oavsiktliga modifieringar av kritiska värden i ditt program. Deklaration och initialisering av en konstant följer samma koncept som en variabel, med undantag av nyckelordet const. Konstanter deklareras vanligtvis med stora bokstäver. Här är vad denna kod gör: - Skapar en konstant som heter MY_VARIABLE med värdet 123 - Använder versaler som namngivningskonvention för konstanter - Förhindrar framtida ändringar av detta värde Konstanter har två huvudsakliga regler: - Du måste ge dem ett värde direkt – inga tomma konstanter tillåts! - Du kan aldrig ändra detta värde – JavaScript kastar ett fel om du försöker. Låt oss se vad jag menar: Enkelt värde - Följande är INTE tillåtet: ```javascript const PI = 3; PI = 4; // inte tillåtet ``` Vad du behöver minnas: - Försök att tilldela om en konstant kommer att orsaka ett fel - Skyddar viktiga värden från oavsiktliga ändringar - Säkerställer att värdet förblir konsekvent under hela programmet Objektreferens är skyddad - Följande är INTE tillåtet: ```javascript const obj = { a: 3 }; obj = { b: 5 } // inte tillåtet ``` Förstå dessa koncept: - Förhindrar att hela objektet ersätts med ett nytt - Skyddar referensen till det ursprungliga objektet - Bibehåller objektets identitet i minnet Objektets värde är inte skyddat - Följande ÄR tillåtet: ```javascript const obj = { a: 3 }; obj.a = 5; // tillåtet ``` Här är vad som händer: - Modifierar egenskapens värde inuti objektet - Behåller samma objekteferens - Visar att objektets innehåll kan ändras medan referensen förblir konstant > Notera, en const betyder att referensen skyddas från omtilldelning. Värdet är dock inte _oföränderligt_ och kan ändras, särskilt om det är en komplex konstruktion som ett objekt. ## Datatyper JavaScript organiserar information i olika kategorier kallade datatyper. Detta koncept speglar hur gamla lärda kategoriserade kunskap – Aristoteles skiljde mellan olika typer av resonemang, och visste att logiska principer inte kunde tillämpas på samma sätt för poesi, matematik och naturfilosofi. Datatyper är viktiga eftersom olika operationer fungerar med olika typer av information. Precis som du inte kan utföra aritmetik på en persons namn eller alfabetisera en matematisk ekvation, kräver JavaScript rätt datatyp för varje operation. Att förstå detta förebygger fel och gör din kod mer pålitlig. Variabler kan lagra många olika typer av värden, som nummer och text. Dessa olika typer av värden kallas för datatyp. Datatyper är en viktig del av mjukvaruutveckling eftersom det hjälper utvecklare att fatta beslut om hur koden ska skrivas och hur mjukvaran ska fungera. Dessutom har vissa datatyper unika egenskaper som hjälper till att omvandla eller extrahera ytterligare information i ett värde. ✅ Datatyper kallas också för JavaScripts dataprimitiver, eftersom de är de lägsta nivåns datatyper som språket tillhandahåller. Det finns 7 primitiva datatyper: string, number, bigint, boolean, undefined, null och symbol. Ta en minut att föreställa dig vad var och en av dessa primitiva kan representera. Vad är en zebra? Hur är det med 0? true? ### Nummer Nummer är den mest enkla datatypen i JavaScript. Oavsett om du arbetar med heltal som 42, decimaltal som 3.14, eller negativa tal som -5, hanterar JavaScript dem på ett enhetligt sätt. Kommer du ihåg vår variabel från tidigare? Det 123 vi sparade var i själva verket en nummer-datatyp: Viktiga egenskaper: - JavaScript känner automatiskt igen numeriska värden - Du kan utföra matematiska operationer med dessa variabler - Ingen explicit typdeklaration krävs Variabler kan lagra alla typer av nummer, inklusive decimaltal eller negativa tal. Nummer kan också användas med aritmetiska operatorer som tas upp i nästa avsnitt. ### Aritmetiska operatorer Aritmetiska operatorer tillåter dig att utföra matematiska beräkningar i JavaScript. Dessa operatorer följer samma principer som matematiker använt i århundraden – samma symboler som fanns i verk av lärda som Al-Khwarizmi, som utvecklade algebraisk notation. Operatorerna fungerar som du förväntar dig från traditionell matematik: plus för addition, minus för subtraktion och så vidare. Det finns flera typer av operatorer att använda vid aritmetiska funktioner, och några listas här: ✅ Testa! Prova en aritmetisk operation i din webbläsares konsol. Blir du förvånad över resultaten? ### 🧮 Mattekunskap Kontroll: Beräkna med självförtroende Testa din förståelse för aritmetik: - Vad är skillnaden mellan / (division) och % (rest)? - Kan du förutsäga vad 10 % 3 blir? (Tips: det är inte 3.33...) - Varför kan restoperatorn vara användbar i programmering? ### Strängar I JavaScript representeras textuell data som strängar. Termen "string" kommer från konceptet att karaktärer är upphängda i sekvens, ungefär som hur skrivare i medeltida kloster kopplade samman bokstäver för att bilda ord och meningar i sina manuskript. Strängar är grundläggande för webbdesign. Varje textbit som visas på en webbplats – användarnamn, knappetiketter, felmeddelanden, innehåll – hanteras som strängdata. Att förstå strängar är avgörande för att skapa funktionella användargränssnitt. Strängar är uppsättningar av tecken som placeras mellan enkla eller dubbla citationstecken. Förstå dessa koncept: - Använder antingen enkla citattecken ' eller dubbla citattecken " för att definiera strängar - Lagrar textdata som kan innehålla bokstäver, siffror och symboler - Tilldelar strängvärden till variabler för senare användning - Kräver citattecken för att skilja text från variabelnamn Kom ihåg att använda citattecken när du skriver en sträng, annars antar JavaScript att det är ett variabelnamn. ### Formatering av strängar Strängmanipulation låter dig kombinera textelement, inkludera variabler och skapa dynamiskt innehåll som reagerar på programmets tillstånd. Denna teknik gör att du kan bygga text programmässigt. Ofta behöver du sammanfoga flera strängar – denna process kallas konkatenering. Att konkatenera två eller fler strängar, eller sätta ihop dem, använd +-operatorn. Steg för steg, här är vad som händer: - Kombinerar flera strängar med +-operatorn - Sätter ihop strängar direkt utan mellanslag i det första exemplet - Lägger till mellanslag " " mellan strängarna för läsbarhet - Infogar skiljetecken som kommatecken för att skapa korrekt formatering ✅ Varför blir 1 + 1 = 2 i JavaScript, men '1' + '1' = 11? Tänk på det. Vad händer med '1' + 1? Mallsträngar är ett annat sätt att formatera strängar, men istället för citattecken används backtick. Allt som inte är vanlig text måste placeras inom platshållare ${ }. Detta inkluderar variabler som kan vara strängar. Låt oss förstå varje del: - Använder backticks ` `` istället för vanliga citattecken för att skapa mallsträngar - Bäddar in variabler direkt med ${}-platshållarsyntax - Bevarar mellanslag och formatering exakt som skrivet - Erbjuder ett renare sätt att skapa komplexa strängar med variabler Du kan uppnå dina formateringsmål med båda metoder, men mallsträngar respekterar alla mellanslag och radbrytningar. ✅ När skulle du använda mallsträngar istället för en vanlig sträng? ### 🔤 Strängbehärskning: Självförtroende i textmanipulation Utvärdera dina strängkunskaper: - Kan du förklara varför '1' + '1' blir '11' istället för 2? - Vilken strängmetod tycker du är mest läsbar: konkatenering eller mallsträngar? - Vad händer om du glömmer citattecknen runt en sträng? ### Booleaner Booleaner representerar den enklaste formen av data: de kan bara innehålla ett av två värden – true eller false. Detta binära logiska system går tillbaka till George Boole, en matematiker från 1800-talet som utvecklade boolesk algebra. Trots sin enkelhet är booleaner viktiga för programlogik. De gör att din kod kan fatta beslut baserat på villkor – om en användare är inloggad, om en knapp klickades eller om vissa kriterier uppfylls. Booleaner kan bara vara två värden: true eller false. De hjälper till att avgöra vilka kodrader som ska köras när vissa villkor är uppfyllda. I många fall hjälper operatorer till med att sätta värdet för en boolean och du kommer ofta att se och skriva variabler som initialiseras eller får sina värden uppdaterade med en operator. I ovanstående har vi: - Skapat en variabel som lagrar booleanvärdet true - Visat hur man lagrar booleanvärdet false - Använt de exakta nyckelorden true och false (inga citattecken behövs) - Förberett dessa variabler för användning i villkorssatser ✅ En variabel kan betraktas som 'truthy' om den utvärderas till booleanvärdet true. Intressant nog är alla värden "truthy" i JavaScript om de inte definierats som falsy. ### 🎯 Booleanlogik: Kontrollera din beslutsförmåga Testa din förståelse för booleaner: - Varför tror du att JavaScript har "truthy" och "falsy" värden utöver bara true och false? - Kan du förutspå vilken av dessa som är falsy: 0, "0", [], "false"? - Hur kan booleaner vara användbara för att styra programmets flöde? --- ## 📊 Din sammanfattning av datatypsverktyg ## GitHub Copilot Agent-utmaning 🚀 Använd Agent-läget för att slutföra följande utmaning: Beskrivning: Skapa en personlig informationshanterare som demonstrerar alla JavaScript-datatyper du lärt dig i denna lektion, samtidigt som den hanterar verkliga datascenarier. Uppgift: Bygg ett JavaScript-program som skapar ett användarprofilobjekt innehållande: en persons namn (sträng), ålder (nummer), studentstatus (boolean), favoritfärger som en array, och en adressobjekt med gatunamn, stad och postnummer. Inkludera funktioner för att visa profilinformationen och uppdatera individuella fält. Visa stringkonkatenering, mallsträngar, aritmetiska operationer med åldern, och booleanlogik för studentstatusen. Läs mer om agent mode här. ## 🚀 Utmaning JavaScript har vissa beteenden som kan överraska utvecklare. Här är ett klassiskt exempel att utforska: prova att skriva detta i din webbläsares konsol: let age = 1; let Age = 2; age == Age och observera resultatet. Det returnerar false – kan du ta reda på varför? Detta är ett av många JavaScript-beteenden som är bra att förstå. Att känna till dessa nycker hjälper dig att skriva mer tillförlitlig kod och debugga mer effektivt. ## Quiz efter föreläsningen Post-lecture quiz ## Repetition & Självstudier Ta en titt på denna lista med JavaScript-övningar och prova någon. Vad lärde du dig? ## Uppgift Data Types Practice ## 🚀 Din tidslinje för att behärska JavaScripts datatyper ### ⚡ Vad du kan göra de närmaste 5 minuterna - [ ] Öppna din webbläsares konsol och skapa 3 variabler med olika datatyper - [ ] Prova utmaningen: let age = 1; let Age = 2; age == Age och lista ut varför det är falskt - [ ] Öva strängkonkatenering med ditt namn och favoritnummer - [ ] Testa vad som händer när du lägger till ett nummer till en sträng ### 🎯 Vad du kan uppnå under denna timme - [ ] Avsluta quiz efter lektionen och gå igenom eventuella förvirrande koncept - [ ] Skapa en mini-kalkylator som lägger till, subtraherar, multiplicerar och dividerar två tal - [ ] Bygg en enkel namnformatterare med mallsträngar - [ ] Utforska skillnaderna mellan jämförelseoperatorerna == och === - [ ] Öva på att konvertera mellan olika datatyper ### 📅 Din JavaScript-grund under en vecka - [ ] Slutför uppgiften med självförtroende och kreativitet - [ ] Skapa ett personligt profilobjekt med alla inlärda datatyper - [ ] Öva med JavaScript-övningar från CSS-Tricks - [ ] Bygg en enkel formulärvalidator med booleanlogik - [ ] Experimentera med array- och objekt-datatyper (en förhandsvisning av kommande lektioner) - [ ] Gå med i en JavaScript-community och ställ frågor om datatyper ### 🌟 Din månadslånga förvandling - [ ] Integrera datatypkunskap i större programmeringsprojekt - [ ] Förstå när och varför varje datatyp används i riktiga applikationer - [ ] Hjälp andra nybörjare att förstå JavaScripts grunder - [ ] Bygg en liten applikation som hanterar olika typer av användardata - [ ] Utforska avancerade datatypkoncept som typkonvertering och strikt likhet - [ ] Bidra till öppen källkodsprojekt för JavaScript med dokumentationsförbättringar ### 🧠 Slutgiltig kontroll av datatypsbehärskning Fira din JavaScript-grund: - Vilken datatyp överraskade dig mest med sitt beteende? - Hur bekväm känner du dig att förklara variabler vs konstanter för en vän? - Vad är det mest intressanta du upptäckte om JavaScripts typsystem? - Vilken verklig applikation kan du föreställa dig att bygga med dessa grunder? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, bör du vara medveten om att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess ursprungliga språk ska betraktas som den auktoritativa källan. För viktig information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår genom användningen av denna översättning. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

data

JavaScript-grunder: Metoder och Funktioner

## Förföreläsningsquiz Förföreläsningsquiz Att skriva samma kod om och om igen är en av programmeringens vanligaste frustrationer. Funktioner löser detta problem genom att låta dig paketera kod i återanvändbara block. Tänk på funktioner som de standardiserade delarna som gjorde Henry Fords löpande band revolutionerande – när du skapar en pålitlig komponent kan du använda den var som helst utan att bygga om från grunden. Funktioner gör det möjligt att samla kodbitar så att du kan återanvända dem i hela ditt program. Istället för att kopiera och klistra in samma logik överallt kan du skapa en funktion en gång och anropa den när det behövs. Detta håller din kod organiserad och gör uppdateringar mycket enklare. I denna lektion lär du dig hur du skapar egna funktioner, skickar information till dem och får användbara resultat tillbaka. Du kommer att upptäcka skillnaden mellan funktioner och metoder, lära dig moderna syntaxmetoder och se hur funktioner kan fungera tillsammans med andra funktioner. Vi bygger upp dessa koncept steg för steg. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Funktioner En funktion är ett självständigt kodblock som utför en specifik uppgift. Den kapslar in logik som du kan exekvera när som helst. Istället för att skriva samma kod flera gånger i ditt program kan du paketera den i en funktion och anropa den när du behöver den. Detta håller din kod ren och gör uppdateringar mycket enklare. Tänk på underhållsutmaningen om du var tvungen att ändra logik som var utspridd över 20 olika ställen i din kodbas. Att namnge dina funktioner beskrivande är avgörande. En väl namngiven funktion kommunicerar sitt syfte tydligt – när du ser cancelTimer() förstår du genast vad den gör, precis som en tydligt märkt knapp talar om exakt vad som händer när du klickar på den. ## Skapa och anropa en funktion Låt oss undersöka hur man skapar en funktion. Syntaxen följer ett konsekvent mönster: Låt oss bryta ned detta: - Nyckelordet function säger till JavaScript "Hej, jag skapar en funktion!" - nameOfFunction är platsen där du ger din funktion ett beskrivande namn - Parentestena () är där du kan lägga till parametrar (det tar vi snart) - De klammerparenteser {} innehåller den faktiska koden som körs när du anropar funktionen Låt oss skapa en enkel hälsningsfunktion för att se detta i praktiken: Denna funktion skriver ut "Hello, world!" till konsolen. När du har definierat den kan du använda den så många gånger du vill. För att exekvera (eller "anropa") din funktion, skriv dess namn följt av parenteser. JavaScript tillåter att du definierar din funktion före eller efter anropet – JavaScript-motorn hanterar exekveringsordningen. När du kör denna rad exekveras all kod inuti din displayGreeting-funktion, och "Hello, world!" visas i webbläsarens konsol. Du kan anropa denna funktion flera gånger. ### 🧠 Grundläggande Funktioner Kontroll: Bygga Dina Första Funktioner Låt oss se hur du känner inför grundläggande funktioner: - Kan du förklara varför vi använder klammerparenteser {} i funktionsdefinitioner? - Vad händer om du skriver displayGreeting utan parenteserna? - Varför kan du vilja anropa samma funktion flera gånger? ### Bästa praxis för funktioner Här är några tips för att hjälpa dig skriva bra funktioner: - Ge dina funktioner tydliga, beskrivande namn – ditt framtida jag kommer att tacka dig! - Använd camelCase för flersordsnamn (som calculateTotal istället för calculate_total) - Håll varje funktion fokuserad på att göra en sak väl ## Att skicka information till en funktion Vår displayGreeting-funktion är begränsad – den kan bara visa "Hello, world!" för alla. Parametrar låter oss göra funktioner mer flexibla och användbara. Parametrar fungerar som platshållare där du kan sätta in olika värden varje gång du använder funktionen. På så sätt kan samma funktion arbeta med olika information vid varje anrop. Du listar parametrar inom parenteserna när du definierar din funktion, och separerar flera parametrar med kommatecken: Varje parameter fungerar som en platshållare – när någon anropar din funktion tillhandahåller de faktiska värden som sätts in på dessa platser. Låt oss uppdatera vår hälsningsfunktion så att den accepterar någons namn: Notera hur vi använder backticks (` `) och ${}` för att infoga namnet direkt i vår text – detta kallas en template literal, och det är ett mycket användbart sätt att bygga strängar med variabler inblandade. Nu när vi anropar vår funktion kan vi skicka in vilket namn som helst: JavaScript tar strängen 'Christopher', tilldelar den parametern name och skapar det personliga meddelandet "Hello, Christopher!" ## Standardvärden Vad händer om vi vill göra vissa parametrar valfria? Det är där standardvärden kommer in! Säg att vi vill att folk ska kunna anpassa hälsningsord, men om de inte specificerar något använder vi bara "Hello" som standard. Du kan ställa in standardvärden med likhetstecknet, precis som när du sätter en variabel: Här är name fortfarande obligatoriskt, men salutation har ett reservvärde 'Hello' om ingen anger en annan hälsning. Nu kan vi anropa denna funktion på två olika sätt: I det första anropet använder JavaScript standard "Hello" eftersom vi inte specificerade någon hälsning. I det andra anropet används vår anpassade "Hi" istället. Denna flexibilitet gör funktioner anpassningsbara till olika situationer. ### 🎛️ Parameterkontroll: Göra Funktioner Flexibla Testa din förståelse för parametrar: - Vad är skillnaden mellan en parameter och ett argument? - Varför är standardvärden användbara i verklig programmering? - Kan du förutsäga vad som händer om du skickar fler argument än parametrar? ## Returvärden Våra funktioner har hittills bara skrivit ut meddelanden i konsolen, men vad händer om du vill att en funktion ska räkna ut något och ge dig tillbaka resultatet? Det är där returvärden kommer in. Istället för att bara visa något kan en funktion ge tillbaka ett värde som du kan lagra i en variabel eller använda i andra delar av din kod. För att skicka tillbaka ett värde använder du nyckelordet return följt av vad du vill returnera: Här är något viktigt: när en funktion träffar på ett return-uttryck stoppar den omedelbart körningen och skickar det värdet tillbaka till den som anropade den. Låt oss ändra vår hälsningsfunktion så att den returnerar meddelandet istället för att skriva ut det: Nu skapar denna funktion meddelandet och lämnar det till oss istället för att skriva ut hälsningen. För att använda det returnerade värdet kan vi lagra det i en variabel precis som vilket annat värde som helst: Nu innehåller greetingMessage "Hello, Christopher" och vi kan använda det varsomhelst i vår kod – för att visa på en webbsida, inkludera i ett e-postmeddelande eller skicka till en annan funktion. ### 🔄 Returvärden Kontroll: Få Resultat Tillbaka Utvärdera din förståelse för returvärden: - Vad händer med koden efter ett return-uttryck i en funktion? - Varför är det ofta bättre att returnera värden än att bara skriva ut till konsol? - Kan en funktion returnera olika typer av värden (sträng, nummer, boolean)? ## Funktioner som parametrar till funktioner Funktioner kan skickas som parametrar till andra funktioner. Även om detta koncept kan verka komplext till en början är det en kraftfull funktion som möjliggör flexibla programmeringsmönster. Detta mönster är supervanligt när du vill säga "när något händer, gör det här andra". Till exempel "när timern är klar, kör denna kod" eller "när användaren klickar på knappen, anropa denna funktion." Låt oss titta på setTimeout, som är en inbyggd funktion som väntar en viss tid och sedan kör lite kod. Vi måste säga vad den ska köra – perfekt användning för att skicka en funktion! Testa denna kod – efter 3 sekunder ser du ett meddelande: Notera hur vi skickar displayDone (utan parenteser) till setTimeout. Vi anropar inte funktionen själva – vi lämnar över den till setTimeout och säger "anropa denna om 3 sekunder." ### Anonyma funktioner Ibland behöver du en funktion för bara en sak och vill inte ge den ett namn. Tänk efter – om du bara använder en funktion en gång, varför belasta koden med ett extra namn? JavaScript låter dig skapa anonyma funktioner – funktioner utan namn som du kan definiera direkt där du behöver dem. Så här kan vi skriva om vårt timer-exempel med en anonym funktion: Detta ger samma resultat, men funktionen definieras direkt i setTimeout-anropet, vilket eliminerar behovet av en separat funktionsdeklaration. ### Fat arrow-funktioner Modern JavaScript har ett ännu kortare sätt att skriva funktioner som kallas arrow functions. De använder => (som ser ut som en pil – fattar du?) och är mycket populära bland utvecklare. Arrow functions låter dig hoppa över nyckelordet function och skriva mer kompakt kod. Så här ser vårt timer-exempel ut med en arrow function: () är där parametrarna skulle ligga (tomt i detta fall), sedan kommer pilen =>, och slutligen funktionskroppen i klammerparenteser. Detta ger samma funktionalitet med mer kompakt syntax. ### När ska man använda varje strategi När bör du använda vilken metod? Vägledande är: om du ska använda funktionen flera gånger, ge den ett namn och definiera den separat. Om det är för en specifik engångssak, överväg en anonym funktion. Både arrow functions och traditionell syntax är giltiga val, men arrow functions är vanliga i moderna JavaScript-kodbaser. ### 🎨 Funktionstilar Kontroll: Välja Rätt Syntax Testa din syntaxförståelse: - När kan du föredra arrow functions framför traditionell funktionssyntax? - Vad är huvudfördelen med anonyma funktioner? - Kan du tänka dig en situation där en namngiven funktion är bättre än en anonym? --- ## 🚀 Utmaning Kan du formulera skillnaden mellan funktioner och metoder i en mening? Prova! ## GitHub Copilot Agent-utmaning 🚀 Använd Agent-läge för att lösa följande utmaning: Beskrivning: Skapa ett verktygsbibliotek med matematiska funktioner som demonstrerar olika funktioner från denna lektion, inklusive parametrar, standardvärden, returvärden och arrow functions. Uppgift: Skapa en JavaScript-fil som heter mathUtils.js som innehåller följande funktioner: 1. En funktion add som tar två parametrar och returnerar deras summa 2. En funktion multiply med standardparametervärden (andra parametern är standard 1) 3. En arrow-funktion square som tar ett nummer och returnerar dess kvadrat 4. En funktion calculate som tar emot en annan funktion som parameter och två nummer, och sedan tillämpar funktionen på dessa nummer 5. Demonstrera anrop av varje funktion med lämpliga testfall Läs mer om agent mode här. ## Efterföreläsningsquiz Efterföreläsningsquiz ## Granskning & Självstudier Det är värt att läsa lite mer om arrow functions, eftersom de används alltmer i kodbaser. Öva på att skriva en funktion, och sedan skriva om den med denna syntax. ## Uppgift Kul med Funktioner --- ## 🧰 Din JavaScript-Funktionsverktygslådas Sammanfattning --- ## 🚀 Din Tidslinje för Mästerskap i JavaScript-Funktioner ### ⚡ Vad du kan göra under de nästa 5 minuterna - [ ] Skriv en enkel funktion som returnerar ditt favoritnummer - [ ] Skapa en funktion med två parametrar som lägger ihop dem - [ ] Försök att konvertera en traditionell funktion till pilfunktionssyntax - [ ] Öva på utmaningen: förklara skillnaden mellan funktioner och metoder ### 🎯 Vad du kan uppnå denna timme - [ ] Slutför quizzen efter lektionen och gå igenom eventuella förvirrande begrepp - [ ] Bygg matematikverktygsbiblioteket från GitHub Copilot-utmaningen - [ ] Skapa en funktion som använder en annan funktion som parameter - [ ] Öva på att skriva funktioner med standardparametrar - [ ] Experimentera med template literals i funktionsreturvärden ### 📅 Din veckolånga funktionsmästerskap - [ ] Slutför uppgiften "Kul med funktioner" med kreativitet - [ ] Refaktorera något repetitivt kod du har skrivit till återanvändbara funktioner - [ ] Bygg en liten räknare med endast funktioner (inga globala variabler) - [ ] Öva på pilfunktioner med arraymetoder som map() och filter() - [ ] Skapa en samling verktygsfunktioner för vanliga uppgifter - [ ] Studera högre ordningens funktioner och koncept inom funktionell programmering ### 🌟 Din månads-långa förvandling - [ ] Bemästra avancerade funktionskoncept som closures och scope - [ ] Bygg ett projekt som kraftigt använder funktionell komposition - [ ] Bidra till open source genom att förbättra funktionsdokumentation - [ ] Lära någon annan om funktioner och olika syntaxstilar - [ ] Utforska paradigmer inom funktionell programmering i JavaScript - [ ] Skapa ett personligt bibliotek med återanvändbara funktioner för framtida projekt ### 🏆 Slutgiltig funktionsexpert check-in Fira din funktionsmästerskap: - Vilken är den mest användbara funktionen du har skapat hittills? - Hur har lärandet om funktioner förändrat sättet du tänker på kodorganisation? - Vilken funktionssyntax föredrar du och varför? - Vilket verkligt problem skulle du lösa genom att skriva en funktion? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, var vänlig observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess ursprungsspråk ska betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript-grunder: Att fatta beslut

Har du någonsin undrat hur applikationer fattar smarta beslut? Som hur ett navigationssystem väljer den snabbaste rutten, eller hur en termostat bestämmer när värmen ska slås på? Detta är det fundamentala konceptet av beslutsfattande i programmering. Precis som Charles Babbages Analytical Engine var designad för att följa olika sekvenser av operationer baserat på villkor, behöver moderna JavaScript-program göra val utifrån varierande omständigheter. Denna förmåga att grenleda och fatta beslut är vad som förvandlar statisk kod till responsiva, intelligenta applikationer. I denna lektion kommer du att lära dig hur du implementerar villkorlig logik i dina program. Vi kommer att utforska villkorssatser, jämförelseoperatorer och logiska uttryck som låter din kod utvärdera situationer och agera på ett lämpligt sätt. ## Förföreläsningsquiz Pre-lecture quiz Förmågan att fatta beslut och kontrollera programmets flöde är en grundläggande aspekt av programmering. Detta avsnitt täcker hur du styr exekveringsvägen för dina JavaScript-program med hjälp av booleska värden och villkorlig logik. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## En kort repetition om Booleans Innan vi utforskar beslutsfattande, låt oss återbesöka booleska värden från vår tidigare lektion. Namngivna efter matematikern George Boole, representerar dessa värden binära tillstånd – antingen true eller false. Det finns ingen tvetydighet, inget mellanting. Dessa binära värden utgör grunden för all beräkningslogik. Varje beslut ditt program fattar reduceras i slutändan till en boolean-utvärdering. Att skapa booleska variabler är enkelt: Detta skapar två variabler med explicit boolean-värde. ✅ Booleans är uppkallade efter den engelska matematikern, filosofen och logikern George Boole (1815–1864). ## Jämförelseoperatorer och Booleans I praktiken sätter du sällan booleska värden manuellt. Istället genererar du dem genom att utvärdera villkor: "Är detta nummer större än det andra?" eller "Är dessa värden lika?" Jämförelseoperatorer möjliggör dessa utvärderingar. De jämför värden och returnerar booleska resultat baserat på förhållandet mellan operanderna. ✅ Testa din kunskap genom att skriva några jämförelser i din webbläsares konsol. Överraskar något resultat dig? ### 🧠 Jämförelse-mästerskapskontroll: Förståelse av Boolean-logik Testa din förståelse av jämförelser: - Varför tror du att === (strikt likhet) generellt föredras framför == (lös likhet)? - Kan du förutsäga vad 5 === '5' returnerar? Hur är det med 5 == '5'? - Vad är skillnaden mellan !== och !=? ## If-sats if-satsen är som att ställa en fråga i din kod. "Om detta villkor är sant, gör då detta." Det är förmodligen det viktigaste verktyget du använder för att fatta beslut i JavaScript. Så här fungerar det: Villkoret går inuti parenteserna, och om det är true, kör JavaScript koden innanför de klammerparenteserna. Om det är false hoppar JavaScript bara över hela blocket. Du kommer ofta använda jämförelseoperatorer för att skapa dessa villkor. Låt oss se ett praktiskt exempel: Eftersom 1000 >= 800 utvärderas till true, körs koden inom blocket och "Getting a new laptop!" visas i konsolen. ## If..Else-sats Men vad händer om du vill att ditt program ska göra något annat när villkoret är falskt? Där kommer else in – det är som en reservplan. else-satsen ger dig ett sätt att säga "om detta villkor inte är sant, gör istället detta andra." Nu, eftersom 500 >= 800 är false, hoppar JavaScript över det första blocket och kör istället else-blocket. Du kommer se "Can't afford a new laptop, yet!" i konsolen. ✅ Testa din förståelse av denna kod och nästa kod genom att köra den i webbläsarens konsol. Ändra värdena på variablerna currentMoney och laptopPrice för att ändra utskriften i console.log(). ### 🎯 If-Else-logik-kontroll: Grenade vägar Utvärdera din förståelse av villkorslogik: - Vad händer om currentMoney exakt är lika med laptopPrice? - Kan du tänka dig ett verkligt scenario där if-else-logik skulle vara användbar? - Hur skulle du kunna utöka detta för att hantera flera prisklasser? ## Switch-sats Ibland behöver du jämföra ett värde mot flera alternativ. Medan du kunde kedja flera if..else-satser, blir detta snabbt svåröverskådligt. switch-satsen ger en renare struktur för att hantera flera diskreta värden. Konceptet liknar de mekaniska växelsystem som användes i tidiga telefonväxlar – ett ingångsvärde bestämmer vilken specifik väg exekveringen följer. Så här är det uppbyggt: - JavaScript utvärderar uttrycket en gång - Det tittar igenom varje case för att hitta en matchning - När den hittar en match, kör den den kodblocket - break talar om för JavaScript att sluta och lämna switch-satsen - Om inga case matchar, körs default-blocket (om du har ett) I detta exempel ser JavaScript att dayNumber är 2, hittar matchande case 2, sätter dayName till "Tuesday", och bryter sedan ut från switch. Resultatet? "Today is Tuesday" skrivs ut i konsolen. ✅ Testa din förståelse av denna kod och den följande genom att köra den i en webbläsarkonsol. Ändra värdet på variabeln a för att förändra outputen i console.log(). ### 🔄 Switch-sats-mästerskap: Flera alternativ Testa din förståelse av switch: - Vad händer om du glömmer ett break-kommando? - När skulle du använda switch istället för flera if-else-satser? - Varför är default-fallet användbart även om du tror att alla möjligheter täcks? ## Logiska operatorer och Booleans Komplexa beslut kräver ofta att flera villkor utvärderas samtidigt. Precis som boolesk algebra låter matematiker kombinera logiska uttryck, tillhandahåller programmering logiska operatorer för att koppla ihop flera booleska villkor. Dessa operatorer möjliggör sofistikerad villkorslogik genom att kombinera enkla sant/falsk-utvärderingar. Dessa operatorer låter dig kombinera villkor på användbara sätt: - OCH (&&) betyder att båda villkoren måste vara sanna - ELLER (||) betyder att minst ett villkor måste vara sant - INTE (!) vänder sant till falskt (och vice versa) ## Villkor och beslut med logiska operatorer Låt oss se dessa logiska operatorer i aktion med ett mer realistiskt exempel: I detta exempel: vi beräknar ett 20% rabattpris (640), sedan utvärderar vi om våra tillgängliga medel täcker antingen fullt pris ELLER rabattpriset. Eftersom 600 når rabattprisets tröskel på 640, utvärderas villkoret till sant. ### 🧮 Logiska operatorer-kontroll: Kombinera villkor Testa din förståelse av logiska operatorer: - I uttrycket A && B, vad händer om A är falskt? Utvärderas B ens? - Kan du tänka dig en situation där du behöver alla tre operatorer (&&, ||, !) tillsammans? - Vad är skillnaden mellan !user.isActive och user.isActive !== true? ### Negationsoperatorn Ibland är det lättare att tänka på när något INTE är sant. Istället för att fråga "Är användaren inloggad?", kanske du vill fråga "Är användaren INTE inloggad?" Utropstecknet (!) vänder logiken åt dig. !-operatorn är som att säga "det motsatta av..." – om något är true, gör ! det till false, och vice versa. ### Ternära uttryck För enkla villkorsbaserade tilldelningar erbjuder JavaScript den ternära operatorn. Denna koncisa syntax låter dig skriva ett villkorsuttryck på en enda rad, användbart när du behöver tilldela ett av två värden baserat på ett villkor. Det läses som en fråga: "Är detta villkor sant? Om ja, använd detta värde. Om nej, använd det värdet." Nedan är ett mer påtagligt exempel: ✅ Ta en minut och läs denna kod några gånger. Förstår du hur dessa operatorer fungerar? Här säger denna rad: "Är firstNumber större än secondNumber? Om ja, sätt firstNumber i biggestNumber. Om nej, sätt secondNumber i biggestNumber." Den ternära operatorn är bara ett kortare sätt att skriva denna traditionella if..else-sats: Båda tillvägagångssätten ger identiska resultat. Den ternära operatorn erbjuder korthet, medan den traditionella if-else-strukturen kan vara mer läsbar för komplexa villkor. --- ## 🚀 Utmaning Skapa ett program som först skrivs med logiska operatorer, och sedan skriv om det med en ternär uttryck. Vilken syntax föredrar du? --- ## GitHub Copilot Agent-utmaning 🚀 Använd Agent-läget för att slutföra följande utmaning: Beskrivning: Skapa en omfattande betygskalkylator som demonstrerar flera beslutsfattandekoncept från denna lektion, inklusive if-else-satser, switch-satser, logiska operatorer och ternära uttryck. Uppgift: Skriv ett JavaScript-program som tar en elevs numeriska poäng (0-100) och bestämmer deras bokstavsbetyg enligt följande kriterier: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Under 60 Krav: 1. Använd en if-else-sats för att bestämma bokstavsbetyget 2. Använd logiska operatorer för att kontrollera om studenten klarar sig (betyg >= 60) OCH har utmärkelser (betyg >= 90) 3. Använd en switch-sats för att ge specifik återkoppling för varje bokstavsbetyg 4. Använd en ternär operator för att avgöra om studenten är behörig för nästa kurs (betyg >= 70) 5. Inkludera inmatningsvalidering för att säkerställa att poängen ligger mellan 0 och 100 Testa ditt program med olika poäng, inklusive gränsfall som 59, 60, 89, 90 och ogiltiga inmatningar. Läs mer om agent mode här. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Läs mer om de många operatorer som finns tillgängliga för användaren på MDN. Gå igenom Josh Comeaus fantastiska operator lookup! ## Assignment Operators --- ## 🧠 Din Sammanfattning av Beslutsfattande Verktyg --- ## 🚀 Din Tidslinje för Mästerskap i JavaScript-beslutsfattande ### ⚡ Vad du kan göra under de nästa 5 minuterna - [ ] Öva på jämförelseoperatorer i din webbläsares konsol - [ ] Skriv en enkel if-else-sats som kontrollerar din ålder - [ ] Prova utmaningen: skriv om en if-else med en ternär operator - [ ] Testa vad som händer med olika "truthy" och "falsy" värden ### 🎯 Vad du kan uppnå denna timme - [ ] Gör klart quizet efter lektionen och gå igenom eventuella förvirrande koncept - [ ] Bygg en komplett betygskalkylator från GitHub Copilot-utmaningen - [ ] Skapa ett enkelt beslutsträd för ett verkligt scenario (som att välja vad du ska ha på dig) - [ ] Öva på att kombinera flera villkor med logiska operatorer - [ ] Experimentera med switch-satser för olika användningsområden ### 📅 Din logikmästerskap under veckan - [ ] Slutför uppgiften med operatorer med kreativa exempel - [ ] Bygg en mini-quizapplikation med olika konditionella strukturer - [ ] Skapa en formulärvalidator som kontrollerar flera inmatningsvillkor - [ ] Öva på Josh Comeaus operator lookup övningar - [ ] Refaktorera befintlig kod för att använda mer lämpliga konditionella strukturer - [ ] Studera kortslutningsevaluering och prestandaimplikationer ### 🌟 Din månadslånga förvandling - [ ] Bemästra komplexa nästlade villkor och bibehåll kodläsbarhet - [ ] Bygg en applikation med sofistikerad beslutslogik - [ ] Bidra till open source genom att förbättra konditionell logik i befintliga projekt - [ ] Lär någon annan om olika konditionella strukturer och när man ska använda dem - [ ] Utforska funktionella programmeringsmetoder för konditionell logik - [ ] Skapa en personlig referensguide för bästa praxis för villkor ### 🏆 Slutlig Check-in för Beslutsmästarens Mästerskap Fira din mästerskap i logiskt tänkande: - Vilken är den mest komplexa beslutslogik du framgångsrikt implementerat? - Vilken konditionell struktur känns mest naturlig för dig och varför? - Hur har lärandet om logiska operatorer förändrat ditt problemlösningssätt? - Vilken verklig tillämpning skulle dra nytta av sofistikerad beslutslogik? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen var medveten om att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål ska betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Arrays och loopar

## Förföreläsningsquiz Förföreläsningsquiz Har du någonsin undrat hur webbplatser håller reda på varukorgsartiklar eller visar din vänlista? Det är där arrayer och loopar kommer in i bilden. Arrayer är som digitala behållare som rymmer flera informationsbitar, medan loopar låter dig arbeta med all denna data effektivt utan upprepande kod. Tillsammans bildar dessa två koncept grunden för att hantera information i dina program. Du kommer att lära dig gå från att manuellt skriva ut varje steg till att skapa smart, effektiv kod som snabbt kan bearbeta hundratals eller till och med tusentals objekt. I slutet av denna lektion kommer du att förstå hur du utför komplexa datauppgifter med bara några få kodrader. Låt oss utforska dessa grundläggande programmeringskoncept. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrayer Tänk på arrayer som ett digitalt arkivskåp – istället för att lagra ett dokument per låda kan du organisera flera relaterade objekt i en enda, strukturerad behållare. I programmeringstermer låter arrayer dig lagra flera informationsbitar i ett organiserat paket. Oavsett om du bygger ett fotogalleri, hanterar en att-göra-lista eller håller koll på högsta poäng i ett spel, utgör arrayer grunden för dataorganisation. Låt oss se hur de fungerar. ✅ Arrayer finns runt omkring oss! Kan du tänka på ett verkligt exempel på en array, som en solpanelarray? ### Skapa Arrayer Att skapa en array är supersimpelt – använd bara hakparenteser! Vad händer här? Du har precis skapat en tom behållare med de där hakparenteserna []. Tänk på det som en tom biblioteksbokhylla – den är redo att hålla vilka böcker du vill organisera där. Du kan också fylla din array med initiala värden direkt från början: Coola saker att lägga märke till: - Du kan lagra text, siffror eller till och med sant/falskt-värden i samma array - Separera bara varje objekt med ett komma – enkelt! - Arrayer är perfekta för att hålla relaterad information tillsammans ### Array-indexering Här är något som kan verka ovanligt i början: arrayer numrerar sina objekt från 0, inte 1. Denna nollbaserade indexering har sin rot i hur datorminnet fungerar – det har varit en programmeringskonvention sedan de tidiga dagarna av programspråk som C. Varje plats i arrayen får sitt eget adressnummer kallat ett index. ✅ Blir du förvånad över att arrayer börjar på index noll? I vissa programmeringsspråk börjar index från 1. Det finns en intressant historia om detta, som du kan läsa om på Wikipedia. Åtkomst till arrayelement: Vad som händer här, steg för steg: - Använder hakparentesnotation med indexnummer för att komma åt element - Returnerar värdet som lagras på just den positionen i arrayen - Börjar räkna från 0, så det första elementets index är 0 Modifiera arrayelement: I exemplet ovan har vi: - Ändrat elementet på index 4 från "Rocky Road" till "Butter Pecan" - Lagt till ett nytt element "Cookie Dough" på index 5 - Utökat arrayens längd automatiskt när vi lade till utanför befintliga gränser ### Arrayens längd och vanliga metoder Arrayer har inbyggda egenskaper och metoder som gör det mycket enklare att arbeta med data. Hitta arrayens längd: Viktiga punkter att komma ihåg: - Returnerar det totala antalet element i arrayen - Uppdateras automatiskt när element läggs till eller tas bort - Tillhandahåller en dynamisk räkning som är användbar för loopar och validering Väsentliga arraymetoder: Förstå dessa metoder: - Lägger till element med push() (i slutet) och unshift() (i början) - Tar bort element med pop() (i slutet) och shift() (i början) - Hittar element med indexOf() och kontrollerar om de finns med includes() - Returnerar användbara värden som borttagna element eller positioners index ✅ Prova själv! Använd din webbläsares konsol för att skapa och manipulera en array du själv skapar. ### 🧠 Grunder i arrayer: Organisera din data Testa din förståelse för arrayer: - Varför tror du att arrayer börjar räkna från 0 istället för 1? - Vad händer om du försöker komma åt ett index som inte finns (som arr[100] i en array med 5 element)? - Kan du tänka på tre verkliga scenarier där arrayer skulle vara användbara? ## Loopar Tänk på det berömda straffet i Charles Dickens romaner där elever fick skriva rader om och om igen på en griffeltavla. Föreställ dig att du bara kunde säga till någon "skriv denna mening 100 gånger" och det skulle göras automatiskt. Det är precis vad loopar gör för din kod. Loopar är som att ha en outtröttlig assistent som kan upprepa uppgifter utan fel. Oavsett om du behöver kontrollera varje objekt i en varukorg eller visa alla foton i ett album, hanterar loopar upprepningen effektivt. JavaScript erbjuder flera typer av loopar att välja mellan. Låt oss granska var och en och förstå när de ska användas. ### For Loop for-loopen är som att sätta en timer – du vet exakt hur många gånger du vill att något ska hända. Den är superorganiserad och förutsägbar, vilket gör den perfekt när du arbetar med arrayer eller behöver räkna saker. Struktur för For Loop: Steg för steg, detta händer: - Initierar räknarvariabeln i till 0 i början - Kontrollerar villkoret i < 10 före varje iteration - Utför kodblocket när villkoret är sant - Ökar i med 1 efter varje iteration med i++ - Stoppar när villkoret blir falskt (när i når 10) ✅ Kör denna kod i en webbläsares konsol. Vad händer när du gör små ändringar i räknaren, villkoret eller iterationsuttrycket? Kan du få den att gå baklänges och skapa en nedräkning? ### 🗓️ For Loop Kontrollfrågor: Kontrollerad repetion Utvärdera din förståelse för for loop: - Vilka är de tre delarna av en for-loop och vad gör var och en? - Hur skulle du loopa igenom en array baklänges? - Vad händer om du glömmer inkrementdelen (i++)? ### While Loop while-loopen är som att säga "fortsätt göra detta tills…" – du kanske inte vet exakt hur många gånger den kommer att köras, men du vet när den ska sluta. Den är perfekt för saker som att fråga en användare efter input tills de ger dig det du behöver, eller söka i data tills du hittar det du letar efter. Egenskaper hos While Loop: - Fortsätter exekvera så länge villkoret är sant - Kräver manuell hantering av räknarvariabler - Kontrollerar villkoret innan varje iteration - Riskerar oändliga loopar om villkoret aldrig blir falskt Förstå dessa exempel: - Hanterar räknarvariabeln i manuellt inuti loopkroppen - Ökar räknaren för att undvika oändliga loopar - Visar praktiskt exempel med användarinmatning och försökbegränsning - Inkluderar säkerhetsmekanismer för att förhindra ändlös exekvering ### ♾️ While Loop Kontrollfrågor: Villkorsstyrd repetion Testa din förståelse av while-loop: - Vad är den största faran med att använda while-loopar? - När skulle du välja en while-loop över en for-loop? - Hur kan du förhindra oändliga loopar? ### Moderna alternativen till loopar JavaScript erbjuder modern syntax för loopar som kan göra din kod mer läsbar och mindre felbenägen. For...of Loop (ES6+): Viktiga fördelar med for...of: - Eliminerar hantering av index och potentiella off-by-one-fel - Ger direkt åtkomst till arrayelement - Förbättrar kodläsbarhet och minskar syntaxkomplexitet forEach-metoden: Vad du bör veta om forEach: - Utför en funktion för varje arrayelement - Ger både elementvärde och index som parametrar - Kan inte stoppas tidigt (till skillnad från traditionella loopar) - Returnerar undefined (skapar inte en ny array) ✅ Varför skulle du välja en for-loop jämfört med en while-loop? 17K tittare hade samma fråga på StackOverflow och några av åsikterna kan vara intressanta för dig. ### 🎨 Kontrollfrågor om modern loopsyntax: Omfamna ES6+ Bedöm din moderna JavaScriptförståelse: - Vilka är fördelarna med for...of jämfört med traditionella for-loopar? - När skulle du fortfarande föredra traditionella for-loopar? - Vad är skillnaden mellan forEach och map? ## Loopar och Arrayer Kombinationen av arrayer och loopar skapar kraftfulla möjligheter för databehandling. Detta par är grundläggande för många programmeringsuppgifter, från att visa listor till att beräkna statistik. Traditionell arraybearbetning: Låt oss förstå varje tillvägagångssätt: - Använder arrayens length-egenskap för att bestämma loopgräns - Åtkomst till element via index i traditionella for-loopar - Ger direkt åtkomst till element i for...of-loopar - Bearbetar varje arrayelement exakt en gång Praktiskt exempel på databehandling: Så fungerar denna kod: - Initierar variabler för summa och extrema värden - Bearbetar varje betyg med en enda effektiv loop - Ackumulerar totalen för genomsnittsberäkning - Håller koll på högsta och lägsta värden under iteration - Beräknar slutgiltig statistik efter loopens slut ✅ Experimentera med att loopa genom en egen skapad array i din webbläsares konsol. --- ## GitHub Copilot Agent-utmaning 🚀 Använd Agent-läget för att slutföra följande utmaning: Beskrivning: Bygg en omfattande databehandlingsfunktion som kombinerar arrayer och loopar för att analysera en datamängd och generera meningsfulla insikter. Prompt: Skapa en funktion kallad analyzeGrades som tar en array av studentbetygsobjekt (varje innehållande namn- och poäng-egenskaper) och returnerar ett objekt med statistik inklusive högsta poäng, lägsta poäng, genomsnittspoäng, antal studenter som klarade (poäng >= 70) och en array med namn på studenter som presterat över genomsnittet. Använd minst två olika looptyper i din lösning. Läs mer om agent mode här. ## 🚀 Utmaning JavaScript erbjuder flera moderna array-metoder som kan ersätta traditionella loopar för specifika uppgifter. Utforska forEach, for-of, map, filter, och reduce. Din utmaning: Refaktorisera exemplet med studentbetyg med hjälp av minst tre olika array-metoder. Lägg märke till hur mycket renare och mer läsbar koden blir med modern JavaScript-syntax. ## Post-lektion Quiz Post-lektion quiz ## Översikt & Självstudier Arrayer i JavaScript har många metoder kopplade till sig, som är mycket användbara för datamanipulation. Läs om dessa metoder och prova några av dem (som push, pop, slice och splice) på en array du skapar själv. ## Uppgift Loop an Array --- ## 📊 Din Sammanfattning av Arrayer & Loopverktyg --- ## 🚀 Din Tidslinje för Mästerskap i Arrayer & Loopar ### ⚡ Vad Du Kan Göra under Nästa 5 Minuter - [ ] Skapa en array med dina favoritfilmer och hämta specifika element - [ ] Skriv en for-loop som räknar från 1 till 10 - [ ] Testa utmaningen med moderna array-metoder från lektionen - [ ] Öva på array-indexering i din webbläsares konsol ### 🎯 Vad Du Kan Uppnå under Denna Timme - [ ] Slutför post-lektionsquizzen och gå igenom eventuella svåra koncept - [ ] Bygg den omfattande betygsanalysatorn från GitHub Copilot-utmaningen - [ ] Skapa en enkel kundvagn som lägger till och tar bort artiklar - [ ] Öva på att konvertera mellan olika loop-typer - [ ] Experimentera med array-metoder som push, pop, slice och splice ### 📅 Din Veckolånga Databehandlingsresa - [ ] Slutför uppgiften "Loop an Array" med kreativa förbättringar - [ ] Bygg en to-do-lista applikation med hjälp av arrayer och loopar - [ ] Skapa en enkel statistikkalkylator för numeriska data - [ ] Öva med MDN array-metoder - [ ] Bygg ett fotogalleri eller ett musikspellista-gränssnitt - [ ] Utforska funktionell programmering med map, filter och reduce ### 🌟 Din Månadslånga Transformation - [ ] Bemästra avancerade array-operationer och prestandaoptimering - [ ] Bygg en komplett dashboard för datavisualisering - [ ] Bidra till open source-projekt som involverar databehandling - [ ] Lär någon annan om arrayer och loopar med praktiska exempel - [ ] Skapa ett personligt bibliotek av återanvändbara databehandlingsfunktioner - [ ] Utforska algoritmer och datastrukturer baserade på arrayer ### 🏆 Slutlig Kontrollpunkt för Mästerskap i Databehandling Fira din skicklighet i arrayer och loopar: - Vilken array-operation är mest användbar för dig i verkliga tillämpningar? - Vilken loop-typ känns mest naturlig för dig och varför? - Hur har förståelsen för arrayer och loopar förändrat ditt sätt att organisera data? - Vilken komplex databehandlingsuppgift skulle du vilja ta dig an härnäst? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Friskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Vi strävar efter noggrannhet, men var medveten om att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

array,loop

Utangulizi wa JavaScript

JavaScript ni lugha ya wavuti. Katika masomo haya manne, utajifunza misingi yake. ### Mada 1. Vigezo na Aina za Data 2. Kazi na Mbinu 3. Kufanya Maamuzi na JavaScript 4. Mifuatano na Vitanzi ### Shukrani Masomo haya yaliandikwa kwa ♥️ na Jasmine Greenaway, Christopher Harrison na Chris Noring --- Kanusho: Hati hii imetafsiriwa kwa kutumia huduma ya kutafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.

javascript

Misingi ya JavaScript: Aina za Data

Aina za data ni mojawapo ya dhana za msingi katika JavaScript ambazo utakutana nazo katika kila programu unayoandika. Fikiria aina za data kama mfumo wa kuhifadhi uliotumiwa na maktaba za zamani huko Alexandria – walikuwa na sehemu maalum za mikokoteni yenye shairi, hisabati, na kumbukumbu za kihistoria. JavaScript huandaa taarifa kwa njia kama hiyo kwa makundi tofauti ya aina tofauti za data. Katika somo hili, tutaangazia aina nyeti za data zinazofanya JavaScript ifanye kazi. Utajifunza jinsi ya kushughulikia nambari, maandishi, thamani za kweli/sifuri, na kuelewa kwa nini kuchagua aina sahihi ni muhimu kwa programu zako. Dhana hizi zinaweza kuonekana kuwa za dhahania mwanzoni, lakini kwa mazoezi, zitakuwa za asili kabisa. Kuelewa aina za data kutafanya kila kitu kingine katika JavaScript kuwa wazi zaidi. Kama wahandisi wa majengo wanavyohitaji kuelewa vifaa tofauti kabla ya kujenga kanisa kuu, misingi hii itasaidia kila kitu utakachojenga baadaye. ## Mtihani wa Kabla ya Mada Mtihani wa kabla ya mada Somo hili linahusu misingi ya JavaScript, lugha inayotoa mwingiliano kwenye wavuti. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") Tuanze na vigezo na aina za data zinazojaza! ## Vigezo Vigezo ni vipengele vya msingi katika programu. Kama chupa zilizo lebo zilizotumika na wananayotajiri wa karne za kati kuhifadhi vitu mbalimbali, vigezo hukuruhusu kuhifadhi taarifa na kutoa jina la kuelezea ili uziwekeze tena baadaye. Unahitaji kukumbuka umri wa mtu? Hifadhi katika kigezo kinachoitwa age. Unataka kufuatilia jina la mtumiaji? Hifadhi kwenye kigezo kinachoitwa userName. Tutazingatia njia ya kisasa ya kuunda vigezo katika JavaScript. Mbinu utakazojifunza hapa zinawakilisha miaka ya maendeleo ya lugha na mbinu bora zilizotengenezwa na jamii ya programu. Kuunda na kutangaza kigezo kuna sintaksia ifuatayo [keyword] [name]. Inaundwa na sehemu mbili: - Neno kuu (Keyword). Tumia let kwa vigezo vinavyoweza kubadilika, au const kwa thamani zinazoendelea kuwa zile zile. - Jina la kigezo, hili ni jina lenye maelezo unalochagua mwenyewe. ✅ Neno kuu let lilianzishwa katika ES6 na linatoa kigezo chako kile kinachoitwa _block scope_. Inapendekezwa utumie let au const badala ya neno la zamani var. Tutaangazia block scopes zaidi kwa kina katika sehemu zijazo. ### Kazi - kufanya kazi na vigezo 1. Tangaza kigezo. Tuanze kwa kuunda kigezo chetu cha kwanza: ```javascript let myVariable; ``` Hili linalofanikisha: - Hii inamuambia JavaScript kuunda sehemu ya kuhifadhi inayoitwa myVariable - JavaScript inapatia nafasi ya kumbukumbu kwa kigezo hiki - Kigezo kwa sasa hakina thamani (undefined) 2. Mpa thamani. Sasa tuweke kitu katika kigezo chetu: ```javascript myVariable = 123; ``` Jinsi ya kugawa thamani: - Operator = huagiza thamani 123 kwa kigezo chetu - Kigezo sasa kina thamani hii badala ya kuwa undefined - Unaweza kurejelea thamani hii katika msimbo wako ukitumia myVariable > Kumbuka: matumizi ya = katika somo hili yanamaanisha tunatumia "operator wa kugawa", inayotumika kuweka thamani kwa kigezo. Hailaani usawa wa thamani. 3. Fanya kwa njia sahihi. Kwa kweli, tuunganishe hatua hizo mbili: ```javascript let myVariable = 123; ``` Njia hii ni bora zaidi: - Unatangaza kigezo na kugawa thamani katika kauli moja - Hii ni njia ya kawaida miongoni mwa waendelezaji - Inapunguza urefu wa msimbo huku ikibaki wazi 4. Badilisha mawazo. Ikiwa tutataka kuhifadhi nambari tofauti? ```javascript myVariable = 321; ``` Kuelewa kugawanya upya thamani: - Kigezo sasa kina 321 badala ya 123 - Thamani ya awali imebadilishwa – vigezo huhifadhi thamani moja kwa wakati - Ubadilishaji huu ndio tabia kuu ya vigezo vilivyotangazwa kwa let ✅ Jaribu! Unaweza kuandika JavaScript moja kwa moja kwenye kivinjari chako. Fungua dirisha la kivinjari na nenda kwenye Developer Tools. Katika console, utaona mwaliko; andika let myVariable = 123, bonyeza kuingia, kisha andika myVariable. Nini kinatokea? Kumbuka, utajifunza zaidi kuhusu dhana hizi katika masomo yajayo. ### 🧠 Mtiifu wa Vigezo: Kujisikiza Vizuri Tuchunguze jinsi unavyohisi kuhusu vigezo: - Unaweza kuelezea tofauti kati ya kutangaza na kugawa thamani ya kigezo? - Nini kinatokea ikiwa utajaribu kutumia kigezo kabla ya kukitangaza? - Utachagua lini let badala ya const kwa kigezo? ## Visaidizi (Constants) Wakati mwingine unahitaji kuhifadhi taarifa ambazo hazipaswi kubadilika wakati wa utekelezaji wa programu. Fikiria visaidi kama kanuni za kihisabati ambazo Euclid aliwanzisha huko Ugiriki wa kale – mara tu zilithibitishwa na kuandikwa, zilibaki thabiti kwa rejeleo zote zijazo. Visaidizi hufanya kazi kama vigezo, lakini na kizuizi muhimu: mara unapopewa thamani, haiwezi kubadilishwa. Uisumbufu huu husaidia kuzuia mabadiliko yasiyotakiwa kwa thamani muhimu katika programu yako. Kutangaza na kuanzisha kisaidizi kunafuata dhana sawa na kigezo, isipokuwa kwa neno kuu const. Visaidizi kwa kawaida huandikwa kwa herufi kubwa kabisa. Hiki ndicho msimbo huu unachofanya: - Huunda kisaidizi kinachoitwa MY_VARIABLE chenye thamani 123 - Hutumia mtindo wa majina kwa herufi kubwa kwa visaidizi - Huzuia mabadiliko yoyote ya baadaye kwa thamani hii Visaidizi vina kanuni kuu mbili: - Lazima uwapatie thamani mara moja – visaidizi tupu haviruhusiwi! - Haiwezi kubadilishwa thamani hiyo – JavaScript itatoa kosa ikiwa utajaribu. Tazama ninachomaanisha: Thamani rahisi - Ifuatayo HAIRUHUSIWI: ```javascript const PI = 3; PI = 4; // hairuhusiwi ``` Kile unachopaswa kukumbuka: - Jaribio la kugawanya upya kisaidizi husababisha kosa - Hulinda thamani muhimu kutokana na mabadiliko yasiyotakiwa - Hakikisha thamani inabaki kuwa sawa katika programu yako Kuhifadhi rejeleo la kitu - Ifuatayo HAIRUHUSIWI: ```javascript const obj = { a: 3 }; obj = { b: 5 } // hairuhusiwi ``` Kuelewa dhana hizi: - Huzuia kubadilisha kitu kizima kwa kipya - Hulinda rejeleo la kitu cha awali - Hudumisha utambulisho wa kitu kwenye kumbukumbu Thamani ya kitu haileveriwi - Ifuatayo INARUHUSIWA: ```javascript const obj = { a: 3 }; obj.a = 5; // inaruhusiwa ``` Maelezo ya kile kinachotokea hapa: - Hubadilisha thamani ya mali ndani ya kitu - Hushikilia rejeleo sawa la kitu - Inaonyesha kuwa yaliyomo kwenye kitu yanaweza kubadilika huku rejeleo likiendelea thabiti > Kumbuka, const inamaanisha rejeleo linahifadhiwa dhidi ya kugawanywa upya. Thamani si _isiyobadilika_ na inaweza kubadilika, hasa kama ni muundo tata kama kitu. ## Aina za Data JavaScript huandaa taarifa katika makundi tofauti yanayojulikana kama aina za data. Dhana hii inafanana na jinsi wasomi wa zamani walivyogawa maarifa – Aristotle alitofautisha aina tofauti za hoja, akijua kwamba kanuni za mantiki haziwezi kutumika sawa katika shairi, hisabati, na filosofia ya asili. Aina za data ni muhimu kwa sababu shughuli tofauti hufanya kazi na aina tofauti za taarifa. Kama huwezi kufanya hisabati kwa jina la mtu au kupanga kwa alfabeti hesabu ya hisabati, JavaScript inahitaji aina sahihi ya data kwa kila operesheni. Kuelewa hili huzuia makosa na kufanya msimbo wako kuwa imara zaidi. Vigezo vinaweza kuhifadhi aina mbalimbali za thamani, kama nambari na maandishi. Aina hizi mbalimbali zinajulikana kama aina ya data. Aina za data ni sehemu muhimu ya maendeleo ya programu kwa sababu husaidia waendelezaji kufanya maamuzi jinsi msimbo unavyopaswa kuandikwa na programu inavyopaswa kuendeshwa. Zaidi ya hayo, baadhi ya aina za data zina sifa za kipekee zinazosaidia kubadilisha au kutoa taarifa zaidi katika thamani. ✅ Aina za Data pia huitwa data primitives za JavaScript, kwa kuwa ni aina za data za ngazi ya chini kabisa zinazotolewa na lugha. Kuna aina 7 za primitive: string, number, bigint, boolean, undefined, null, na symbol. Chukua dakika kufikiria kinachoweza kuwakilishwa na kila moja ya primitives hizi. zebra ni nini? Vipi kuhusu 0? true? ### Nambari Nambari ni aina ya data rahisi zaidi katika JavaScript. Iwapo unatumia nambari kamili kama 42, desimali kama 3.14, au nambari hasi kama -5, JavaScript hufanya kazi nao sawia. Kumbuka kigezo chetu cha awali? Hiyo 123 tuliyoihifadhi ilikuwa aina ya nambari: Sifa kuu: - JavaScript hutambua moja kwa moja thamani za nambari - Unaweza kufanya operesheni za kihisabati kwa vigezo hivi - Hakuna haja ya kutangaza aina rasmi Vigezo vinaweza kuhifadhi aina zote za nambari, ikiwemo desimali au nambari hasi. Nambari pia zinaweza kutumika na waendeshaji wa kihisabati, waliodhihirishwa katika sehemu inayofuata. ### Waendeshaji wa Kihisabati Waendeshaji wa kihisabati wanakuwezesha kufanya mahesabu ya kihisabati katika JavaScript. Waendeshaji hawa hufuata kanuni zile zile zilizotumika na waandishi wa hisabati kwa karne nyingi – alama zile zile zilizojitokeza katika kazi za wasomi kama Al-Khwarizmi, aliyebuni noti za aljebra. Waendeshaji hufanya kazi kama unavyotarajia kutoka kwa hisabati ya jadi: ongeza kwa kuongeza, toa kwa kutoa, na kadhalika. Kuna aina kadhaa za waendeshaji za kutumia wakati wa kufanya kazi za kihisabati, na baadhi yao yamo hapa: ✅ Jaribu! Jaribu kufanya operesheni ya kihisabati kwenye console ya kivinjari chako. Je, matokeo yanakushangaza? ### 🧮 Jaribu Uwezo wa Hisabati: Kuhesabu kwa Kujiamini Jaribu uelewa wako wa hisabati: - Tofautisha kati ya / (mgawanyiko) na % (baki)? - Unaweza kutabiri nini 10 % 3 ni sawa na? (Kibukizi: sio 3.33...) - Kwa nini operator wa baki unaweza kuwa na manufaa kwa programu? ### Mionesho (Strings) Katika JavaScript, data ya maandishi huonyeshwa kama mionesho. Neno "string" linatoka dhana ya herufi zilizounganishwa mfululizo, kama walivyotumia waandishi wa karne za kati kuunganisha herufi kuunda maneno na sentensi katika nakala zao. Mionesho ni msingi wa maendeleo ya wavuti. Kila kipande cha maandishi kinachoonyeshwa kwenye tovuti – majina ya watumiaji, lebo za vitufe, ujumbe wa makosa, maudhui – hutunzwa kama data ya string. Kuelewa mionesho ni muhimu kwa kuunda sehemu za mtumiaji zenye kazi. Mionesho ni seti za herufi zilizoko kati ya alama za nukuu moja au mbili. Kuelewa dhana hizi: - Inatumia nukuu moja ' au nukuu mbili " kufafanua mionesho - Huhinidhi data ya maandishi inayoweza kujumuisha herufi, nambari, na alama - Huagiza thamani ya mionesho kwa vigezo kwa matumizi baadaye - Inahitaji nukuu kutofautisha maandishi na majina ya vigezo Kumbuka kutumia nukuu unapoongeza string, vinginevyo JavaScript itadhani ni jina la kigezo. ### Kuunda Mionesho Manipulate mionesho hukuwezesha kuunganisha vipengele vya maandishi, kuingiza vigezo, na kuunda maudhui yanayobadilika kulingana na hali ya programu. Mbinu hii inakuwezesha kujenga maandishi kwa njia ya programu. Mara nyingi unahitaji kuunganisha mionesho mingi pamoja – mchakato huu huitwa concatenation. Ili kuunganisha mnyororo wa herufi mbili au zaidi, au kuziunganisha pamoja, tumia kiendeshaji +. Hatua kwa hatua, hii ndicho kinachotokea: - Inachanganya mnyororo wa herufi nyingi kwa kutumia kiendeshaji + - Inaunda mnyororo wa herufi moja kwa moja bila nafasi katika mfano wa kwanza - Inaongeza nafasi " " kati ya mnyororo kwa usomeji mzuri - Inaweka alama za uamuzi kama vile koma ili kuunda muundo sahihi ✅ Kwa nini 1 + 1 = 2 katika JavaScript, lakini '1' + '1' = 11? Fikiria. Je, vipi kuhusu '1' + 1? Liturari za templeti ni njia nyingine ya kuunda mnyororo wa herufi, isipokuwa badala ya nukuu, hutumika alama ya kurudisha nyuma (backtick). Kila kitu ambacho si maandishi ya kawaida lazima kiwe ndani ya sehemu za kuweka thamani ${ }. Hii ni pamoja na mabadiliko yoyote yanayoweza kuwa mnyororo wa herufi. Tuelewee kila sehemu: - Inatumia alama za kurudisha nyuma ` `` badala ya nukuu za kawaida kuunda liturari za templeti - Inaingiza mabadiliko moja kwa moja kwa kutumia muundo wa ${} - Inahifadhi nafasi na muundo kama ilivyoandikwa - Inatoa njia safi ya kuunda mnyororo tata zenye mabadiliko Unaweza kufanikisha malengo yako ya muundo kwa njia yoyote, lakini liturari za templeti zitaenzi nafasi zote na virukizo vya mistari. ✅ Ungetumia lini liturari za templeti badala ya mnyororo wa herufi wa kawaida? ### 🔤 Ukaguzi wa Uwezo wa Mnyororo wa Herufi: Kujiamini Katika Ubadilishaji wa Maandishi Tathmini ujuzi wako wa mnyororo wa herufi: - Je, unaweza kueleza kwa nini '1' + '1' ni sawa na '11' badala ya 2? - Ni njia gani ya mnyororo unayoona ni rahisi kusoma zaidi: kuunganisha au liturari za templeti? - Nini kinatokea ikiwa utasahau nukuu kuzunguka mnyororo? ### Boolean Boolean zinawakilisha aina rahisi kabisa ya data: zinaweza kushikilia tu mojawapo ya thamani mbili – true au false. Mfumo huu wa kiakili wa binary unatokana na kazi ya George Boole, mtaalamu wa hesabu wa karne ya 19 aliyebuni algebra ya Boolean. Licha ya urahisi wake, boolean ni muhimu kwa mantiki ya programu. Zinawawezesha msimbo wako kufanya maamuzi kulingana na masharti – kama mtumiaji ameingia, kama kitufe kilibonyea, au ikiwa vigezo fulani vimetimizwa. Boolean zinaweza kuwa na thamani mbili tu: true au false. Boolean zinaweza kusaidia kufanya maamuzi ni mistari gani ya msimbo inapaswa kuendeshwa pale ambapo masharti fulani yanatimizwa. Katika hali nyingi, vaidhibiti husaidia kuweka thamani ya Boolean na mara nyingi utagundua na kuandika mabadiliko yanayoanzishwa au yenye kuwekwa upya kwa kutumia vaidhibiti. Juu tulikuwa: - Tumeunda mabadiliko yanayohifadhi thamani ya Boolean true - Tumeonyesha jinsi ya kuhifadhi thamani ya Boolean false - Tume tumia maneno halisi true na false (pasipo nukuu) - Tumeandaa mabadiliko haya kwa matumizi katika masharti ya hali ✅ Mabadiliko yanaweza kuchukuliwa kuwa 'truthy' ikiwa yanathibitishwa kuwa boolean true. Vilevile, katika JavaScript, thamani zote ni truthy isipokuwa zilizoainishwa kuwa falsy. ### 🎯 Ukaguzi wa Mantiki ya Boolean: Ujuzi wa Kufanya Maamuzi Jaribu uelewa wako wa boolean: - Kwa nini unadhani JavaScript ina thamani "truthy" na "falsy" zaidi ya true na false peke yake? - Je, unaweza kutabiri ni ipi kati ya hizi ni falsy: 0, "0", [], "false"? - Je, boolean zinaweza kusaidiaje katika kudhibiti mtiririko wa programu? --- ## 📊 Muhtasari wa Zana Zako za Aina za Data ## Changamoto ya Wakala wa GitHub Copilot 🚀 Tumia hali ya Wakala kukamilisha changamoto ifuatayo: Maelezo: Unda meneja wa taarifa binafsi anayetoa mfano wa aina zote za data za JavaScript ulizojifunza katika somo hili huku ukishughulikia hali halisi za data. Onyo: Jenga programu ya JavaScript inayounda kitu cha wasifu wa mtumiaji kinachoonyesha: jina la mtu (mnyororo), umri (nambari), hali ya kuwa mwanafunzi (boolean), rangi anazopenda kama mpangilio, na kitu chenye anwani yenye barabara, jiji, na msimbo wa posta. Jumuisha kazi za kuonyesha taarifa za wasifu na kusasisha nyanja binafsi. Hakikisha unaonyesha kuunganisha mnyororo, liturari za templeti, operesheni za hisabati na umri, na mantiki ya boolean kwa hali ya mwanafunzi. Jifunze zaidi kuhusu hali ya wakala hapa. ## 🚀 Changamoto JavaScript ina tabia kadhaa zinazoweza kumshangaza mendelevu. Hapa kuna mfano wa kuwaeleza: jaribu kuandika hii kwenye konsole ya kivinjari chako: let age = 1; let Age = 2; age == Age na tazama matokeo. Inarudisha false – unaweza kubaini kwa nini? Hii ni mojawapo ya tabia nyingi za JavaScript zinazostahili kueleweka. Uelewa wa tabia hizi utakusaidia kuandika msimbo imara zaidi na kutatua matatizo kwa ufanisi zaidi. ## Mtihani wa Baada ya Mafunzo Mtihani wa baada ya mafundisho ## Mapitio & Kujifunza Binafsi Tazama orujo la mazoezi ya JavaScript na jaribu moja. Umejifunza nini? ## Kazi ya Nyumbani Kazi ya Aina za Data ## 🚀 Ratiba Yako ya Uwezo wa Aina za Data za JavaScript ### ⚡ Unachoweza Kufanya Dakika 5 Zijazo - [ ] Fungua konsole ya kivinjari na tengeneza mabadiliko 3 yenye aina tofauti za data - [ ] Jaribu changamoto: let age = 1; let Age = 2; age == Age na gundua kwa nini ni false - [ ] Fanya mazoezi ya kuunganisha mnyororo na jina lako na nambari unayopenda - [ ] Jaribu kuona kinachotokea unapoongeza nambari kwenye mnyororo ### 🎯 Unachoweza Kufanikisha Saa Hili - [ ] Kamilisha mtihani wa baada ya somo na pitia dhana yoyote ngumu - [ ] Unda kalkuleta ndogo inayoongeza, kutoa, kuzidisha, na kugawa nambari mbili - [ ] Tengeneza mtafsiri wa majina kwa kutumia liturari za templeti - [ ] Chunguza tofauti kati ya vaidhibiti == na === - [ ] Fanya mazoezi ya kubadilisha kati ya aina tofauti za data ### 📅 Msingi Wako wa JavaScript kwa Wiki Nzima - [ ] Kamilisha kazi ya nyumbani kwa kujiamini na ubunifu - [ ] Unda kitu cha wasifu binafsi ukitumia aina zote za data ulizojifunza - [ ] Fanya mazoezi na mazoezi ya JavaScript kutoka CSS-Tricks - [ ] Unda kipimaji rahisi cha fomu kwa kutumia mantiki ya boolean - [ ] Jaribu aina za data za mpangilio (array) na kitu (object) (mapitio ya masomo yanayokuja) - [ ] Jiunge na jamii ya JavaScript na uliza maswali kuhusu aina za data ### 🌟 Mabadiliko Yako kwa Mwezi Mzima - [ ] Unganisha maarifa ya aina za data katika miradi mikubwa ya programu - [ ] Elewa lini na kwa nini utumie aina mbalimbali za data katika matumizi halisi - [ ] Saidia wanaoanza kuelewa misingi ya JavaScript - [ ] Tengeneza programu ndogo inayosimamia aina mbalimbali za data za watumiaji - [ ] Chunguza dhana za juu za aina za data kama vile coercion ya aina na usawa mkali - [ ] Changia katika miradi ya chanzo huria ya JavaScript kwa kuboresha nyaraka ### 🧠 Ukaguzi wa Mwisho wa Uwezo wa Aina za Data Sherehekea msingi wako wa JavaScript: - Ni aina gani ya data ilikushangaza zaidi kwa tabia yake? - Je, unahisi vipi kueleza mabadiliko dhidi ya constants kwa rafiki? - Nini kitu cha kuvutia zaidi ulicho kugundua kuhusu mfumo wa aina za JavaScript? - Ni programu gani halisi unaweza kufikiria kuunda ukitumia misingi hii? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Tangazo la Kawia: Nyaraka hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au upungufu wa usahihi. Nyaraka ya asili katika lugha yake ya asili inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inashauriwa. Hatuwajibiki kwa kutoelewana au tafsiri potofu zitokanazo na matumizi ya tafsiri hii. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript,data

Misingi ya JavaScript: Mbinu na Zana

## Mtihani Kabla ya Mhodhi Pre-lecture quiz Kuandika msimbo huo huo mara nyingi ni moja ya hasa za kawaida katika uundaji programu. Zana (functions) huboresha tatizo hili kwa kukuwezesha kufunga msimbo kuwa vitengo vinavyoweza kutumika tena. Fikiria zana kama sehemu za viwango zilizoifanya mstari wa mkusanyiko wa Henry Ford kuwa ya mapinduzi – mara tu unapotengeneza kipengele kinachotegemewa, unaweza kukitumia popote unapohitaji bila kujenga upya kutoka mwanzo. Zana zinakuwezesha kufunga vipande vya msimbo ili uweze kuvitumia tena katika programu yako nzima. Badala ya kunakili na kubandika mantiki ile ile kila mahali, unaweza kuunda zana mara moja na kuitisha inapohitajika. Njia hii hufanya msimbo wako kuwa na mpangilio mzuri na kufanya masasisho kuwa rahisi zaidi. Katika somo hili, utajifunza jinsi ya kuunda zana zako mwenyewe, kupitisha taarifa kwao, na kupata matokeo mazuri. Utaelewa tofauti kati ya zana na mbinu, ujifunze mbinu za kisasa za herufi, na kuona jinsi zana zinaweza kufanya kazi pamoja na zana nyingine. Tutajenga dhana hizi hatua kwa hatua. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Zana Zana ni kipande cha msimbo chenye kujitegemea kinachotekeleza kazi maalum. Inahifadhi mantiki ambayo unaweza kuitekeleza kila inapohitajika. Badala ya kuandika msimbo ule ule mara nyingi katika programu yako, unaweza kuipakia ndani ya zana na kuitisha zana hiyo kila unaponihitaji. Njia hii hufanya msimbo wako usafi na kufanya masasisho kuwa rahisi. Fikiria changamoto ya matengenezo kama unahitaji kubadilisha mantiki iliyosambaa sehemu 20 tofauti za msimbo wako. Kukataa majina yako kwa usahihi ni muhimu. Zana iliyo na jina zuri inaelezea kusudi lake kwa uwazi – unapomuona cancelTimer(), unaelewa mara moja inavyofanya, kama vile kitufe kilicho na lebo wazi kinakuambia hasa kile kitakachotokea unapokibonyeza. ## Kuunda na kuitisha zana Hebu tuchunguze jinsi ya kuunda zana. Sarufi inafuata muundo thabiti: Hebu tugawanye hii: - Neno function linamweleza JavaScript "Haya, ninaunda zana!" - nameOfFunction ni mahali unapoipa zana yako jina linaloelezea - Kipengele cha mabano () ni mahali pa kuongeza vigezo (tutafikia hapo hivi karibuni) - Mabano ya mviringo {} yana msimbo halisi unaotekelezwa unapoitisha zana Tengeneza zana rahisi ya salamu ili kuona hili kwa vitendo: Zana hii inanukuu "Hello, world!" kwenye console. Ukimaliza kuitengeneza, unaweza kuitumia mara ngapi unavyotaka. Ili kuitekeleza (au "kuitisha") zana yako, andika jina lake likifuatiwa na mabano. JavaScript inaruhusu kuainisha zana yako kabla au baada ya kuitisha – engine ya JavaScript itashughulikia mpangilio wa utekelezaji. Unaporun mstari huu, unatenda msimbo wote ndani ya zana yako displayGreeting, ikionyesha "Hello, world!" kwenye console ya kivinjari chako. Unaweza kuitisha zana hii mara nyingi. ### 🧠 Ukaguzi wa Misingi ya Zana: Kujenga Zana Zako za Kwanza Hebu tazama jinsi unavyohisi kuhusu zana za msingi: - Unaweza kueleza kwa nini tunatumia mabano {} katika maelezo ya zana? - Nini hutokea ikiwa utaandika displayGreeting bila mabano? - Kwa nini unaweza kutaka kuitisha zana ile ile mara nyingi? ### Mbinu bora za zana Hapa kuna vidokezo vidogo vya kukusaidia kuandika zana nzuri: - Pata majina ya kueleweka na ya kuelezea – wewe mwenyewe utajisikia shukrani baadaye! - Tumia camelCasing kwa majina ya maneno mengi (kama calculateTotal badala ya calculate_total) - Hifadhi kila zana iangalie kufanikisha jambo moja vizuri ## Kupitisha taarifa kwa zana Zana yetu displayGreeting ina kikomo – inaweza kuonyesha tu "Hello, world!" kwa kila mtu. Vigezo vinaturuhusu kufanya zana ziwe na ufanisi zaidi. Vigezo hufanya kama vifunga ambapo unaweza kuweka thamani tofauti kila unapotumia zana. Kwa njia hii, zana hiyo hiyo inaweza kufanya kazi na taarifa tofauti kila kuitisha. Unaorodhesha vigezo ndani ya mabano unapofafanua zana yako, ukitenganisha vigezo vingi na koma: Kila kigezo hutenda kama kivutio cha nafasi – mtu atakapoitisha zana yako, atatoa thamani halisi zinazowekwa sehemu hizi. Hebu tubadilishe zana ya salamu ya kupokea jina la mtu: Angalia jinsi tunavyotumia backticks (` `) na ${}` kuweka jina moja kwa moja ndani ya ujumbe wetu – hii huitwa templet literal, na ni njia rahisi ya kujenga misemo yenye vigezo vimechanganywa. Sasa tunapoitisha zana yetu, tunaweza kupitisha jina lolote: JavaScript huchukua mfurushi wa maneno 'Christopher', kuuweka katika kigezo name, na kutengeneza ujumbe wa kibinafsi "Hello, Christopher!" ## Thamani za chaguo-msingi Je, tungependa kufanya baadhi ya vigezo kuwa hiari? Hapo ndipo thamani za chaguo-msingi zinapokuja muhimu! Tuseme tunataka watu waweze kubadilisha neno la salamu, lakini ikiwa hawataeleza lolote, tutatumia "Hello" kama msaada. Unaweza kuweka thamani za chaguo-msingi kwa kutumia alama ya usawa, kama vile kuweka thamani ya variable: Hapa, name bado ni la lazima, lakini salutation ina thamani ya ziada ya 'Hello' ikiwa hakuna atakayetoa salamu tofauti. Sasa tunaweza kuitisha zana hii kwa njia mbili tofauti: Katika utekelezaji wa kwanza, JavaScript inatumia "Hello" chaguo-msingi kwa sababu hatukuweka salamu yoyote. Katika utekelezaji wa pili, inatumia salamu yetu ya "Hi" badala yake. Uwezo huu hufanya zana ziwe za kubadilika kwa hali tofauti. ### 🎛️ Ukaguzi wa Ustadi wa Vigezo: Kufanya Zana Ziwe na Uwezo wa Kubadilika Jaribu ufahamu wako wa vigezo: - Nini tofauti kati ya kigezo na hoja? - Kwa nini thamani za chaguo-msingi ni muhimu katika uundaji programu wa kweli? - Unaweza kutabiri nini hutokea ikiwa utapitisha hoja nyingi zaidi kuliko vigezo? ## Thamani za kurudishiwa Hadi sasa zana zetu zimekuwa zikichapisha ujumbe kwenye console, lakini je, ungetaka zana ikokotoe kitu na ikurudishie matokeo? Hapo ndipo thamani za kurudishiwa zinapokuja. Badala ya kuonyesha jambo tu, zana inaweza kurudisha thamani ambayo unaweza kuhifadhi katika variable au kuitumia sehemu nyingine za msimbo wako. Ili kurudisha thamani, tumia neno return linalo fuatwa na kile unachotaka kurudisha: Hapa kuna jambo muhimu: zana inapogonga kauli ya return, mara moja hukoma kutekeleza na kurudisha thamani hiyo kwa mtumiaji aliyoitisha. Turekebishe zana yetu ya salamu kurudisha ujumbe badala ya kuuchapisha: Sasa badala ya kuchapisha salamu, zana hii inatengeneza ujumbe na kuturudishia. Ili kutumia thamani iliyorejeshwa, tunaweza kuihifadhi katika variable kama thamani nyingine yoyote: Sasa greetingMessage ina "Hello, Christopher" na tunaweza kuitumia mahali popote kwenye msimbo wetu – kuionyesha kwenye ukurasa wa wavuti, kuingiza barua pepe, au kuipitisha kwa zana nyingine. ### 🔄 Ukaguzi wa Thamani za Kurudishiwa: Kupata Matokeo Pima ufahamu wako wa thamani za kurudishiwa: - Nini hutokea kwa msimbo baada ya kauli ya return katika zana? - Kwa nini kurudisha thamani ni bora zaidi kuliko kuchapisha tu kwenye console? - Je, zana inaweza kurudisha aina tofauti za thamani (mfuatano wa maneno, nambari, boolean)? ## Zana kama vigezo kwa zana nyingine Zana zinaweza kupitishwa kama vigezo kwa zana nyingine. Ingawa dhana hii inaweza kuonekana ngumu mwanzoni, ni sifa yenye nguvu inayowezesha mifumo flexible ya uundaji programu. Mfumo huu ni wa kawaida sana wakati unataka kusema "wakati jambo fulani litokee, fanya jambo hili." Kwa mfano, "wakati kengele inamaliza, endesha msimbo huu" au "wakati mtumiaji anakibonyeza kitufe, ita zana hii." Tazama setTimeout, ambayo ni zana ya ndani inayosubiri muda fulani na kisha kuendesha msimbo. Tunahitaji kuambia ni msimbo gani waendeshe – hii ni mfano bora wa kupitisha zana! Jaribu msimbo huu – baada ya sekunde 3, utaona ujumbe: Angalia jinsi tunavyopitisha displayDone (bila mabano) kwa setTimeout. Hatuwafanyi kuitisha zana sisi peke yetu – tunaikabidhi kwa setTimeout na kusema "iite ndani ya sekunde 3." ### Zana zisizo na majina Wakati mwingine unahitaji zana kwa jambo moja tu na hutaki kuipa jina. Fikiria – kama utatumia zana mara moja tu, kwa nini ujaze msimbo wako na jina ziada? JavaScript hukuwezesha kuunda zana zisizo na majina – zana zisizo na majina ambazo unaweza kuziainisha mahali unapotakiwa. Hapa kuna jinsi tunaweza kuandika upya mfano wetu wa kengele tukitumia zana isiyo na jina: Hii inapatikana matokeo sawa, lakini zana imefafanuliwa moja kwa moja ndani ya wito wa setTimeout, kuondoa hitaji la tangazo la zana tofauti. ### Zana za mshale mpana (Fat arrow functions) JavaScript ya kisasa ina njia fupi zaidi ya kuandika zana inayoitwa arrow functions. Zinatumia => (inavyoonekana kama mshale – umeielewa?) na ni maarufu sana kwa waendelezaji. Zana za mshale hukuruhusu kuacha neno function na kuandika msimbo wenye ufanisi zaidi. Hapa ni mfano wa kengele ukitumia zana ya mshale: () ni mahali pa vigezo (hali hii ni tupu), kisha mshale =>, na mwili wa zana ndani ya mabano. Hii hutoa utendakazi uleule kwa sarufi fupi zaidi. ### Wakati wa kutumia kila mbinu Ni lini unapaswa kutumia kila njia? Mwelekeo wa vitendo: ikiwa utatumia zana mara nyingi, ipa jina na uiainishe tofauti. Ikiwa ni kwa matumizi maalum mara moja, fikiria zana isiyo na jina. Zana za mshale na sarufi ya jadi zote ni chaguo halali, ingawa zana za mshale zinaenea sana katika misimbo ya JavaScript ya kisasa. ### 🎨 Ukaguzi wa Mtindo wa Zana: Kuchagua Sarufi Sahihi Jaribu ufahamu wako wa sarufi: - Ni lini unaweza kupendelea zana za mshale badala ya sarufi ya jadi za zana? - Faida kuu ya zana zisizo na majina ni nini? - Unaweza kufikiria hali ambapo zana iliyo na jina ni bora kuliko isiyo na jina? --- ## 🚀 Changamoto Je, unaweza kuelezea tofauti kati ya zana na mbinu kwa sentensi moja? Jaribu sasa! ## Changamoto ya Wakala wa GitHub Copilot 🚀 Tumia hali ya Wakala kukamilisha changamoto ifuatayo: Maelezo: Unda maktaba ya zana za hisabati inayoonyesha dhana mbalimbali za zana zilizojadiliwa katika somo hili, ikijumuisha vigezo, thamani za chaguo-msingi, thamani za kurudishiwa, na zana za mshale. Maelekezo: Unda faili la JavaScript linaloitwa mathUtils.js lenye zana zifuatazo: 1. Zana add inayopitisha vigezo viwili na kurudisha jumla yao 2. Zana multiply ikiwa na thamani za chaguo-msingi za vigezo (kigezo cha pili kina thamani ya asili 1) 3. Zana ya mshale square inayopitisha nambari na kurudisha mraba wake 4. Zana calculate inayokubali zana nyingine kama kigezo na nambari mbili, kisha kutumia zana hiyo kwa nambari hizo 5. Onyesha kuitisha kila zana kwa kesi za majaribio zinazofaa Jifunze zaidi kuhusu hali ya wakala hapa. ## Mtihani Baada ya Mhodhi Post-lecture quiz ## Mapitio & Kujisomea Inafaa kusoma zaidi kuhusu zana za mshale, kwani zinazidi kutumika katika misimbo ya kisasa. Fanya mazoezi ya kuandika zana, kisha uiongeze tena kwa sarufi hii. ## Kazi ya Nyumbani Burudika na Zana --- ## 🧰 Muhtasari wa Kikokotoo cha Zana Zako za JavaScript --- ## 🚀 Muda wa Ukamilishaji wa Ustadi wa Zana za JavaScript Yako ### ⚡ Unachoweza Kufanya Katika Dakika 5 Zijazo - [ ] Andika zana rahisi inayorudisha nambari unayopenda - [ ] Unda zana yenye vigezo viwili inayojumlisha vigezo hivyo pamoja - [ ] Jaribu kubadilisha kazi ya kawaida kuwa sintaksia ya kazi ya mshale - [ ] Fanya mazoezi ya changamoto: eleza tofauti kati ya kazi na mbinu ### 🎯 Unachoweza Kufanikisha Saa Hii - [ ] Kompleti jaribio la baada ya somo na kupitia dhana zozote zinazochanganya - [ ] Jenga maktaba ya zana za hisabati kutoka changamoto ya GitHub Copilot - [ ] Unda kazi inayotumia kazi nyingine kama parameta - [ ] Fanya mazoezi ya kuandika kazi zilizo na parameta za chaguo-msingi - [ ] Jaribu tempeleti za maneno katika thamani za kurudisha kazi ### 📅 Utaalamu Wako wa Kazi Kwa Wiki Nzima - [ ] Kompleti kazi ya "Mchezo na Kazi" kwa ubunifu - [ ] Rekebisha baadhi ya msimbo unaorudiwa uliouandika kuwa kazi zinazotumika tena - [ ] Jenga kalkuleta ndogo ukitumia kazi pekee (hakuna vigezo vya ulimwengu) - [ ] Fanya mazoezi ya kazi za mshale kwa kutumia mbinu za safu kama map() na filter() - [ ] Unda mkusanyiko wa kazi za zana kwa kazi za kawaida - [ ] Soma kazi za ngazi ya juu na dhana za programu za kazi ### 🌟 Mabadiliko Yako Kwa Mwezi Mzima - [ ] Tawala dhana za juu za kazi kama closures na scope - [ ] Jenga mradi unaotumia sana muundo wa kazi - [ ] Changia kwenye chanzo wazi kwa kuboresha hati za kazi - [ ] Fundisha mtu mwingine kuhusu kazi na mtindo tofauti wa sintaksia - [ ] Chunguza mitazamo ya programu za kazi katika JavaScript - [ ] Unda maktaba binafsi ya kazi zinazotumika tena kwa miradi ya baadaye ### 🏆 Ukaguzi wa Mwisho wa Bingwa wa Kazi Sherehekea utaalamu wako wa kazi: - Ni kazi gani yenye manufaa zaidi uliyounda hadi sasa? - Je, kujifunza kuhusu kazi kumeathiri vipi mtazamo wako juu ya upangaji wa msimbo? - Ni sintaksia gani ya kazi unapendelea na kwa nini? - Ni tatizo gani halisi la dunia ungeweza kulitatua kwa kuandika kazi? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Tangazo la Kukataa: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kwamba tafsiri za kiotomatiki zinaweza kuwa na makosa au kasoro. Hati ya asili katika lugha yake ya asili inapaswa kuzingatiwa kama chanzo cha zaidi kuaminiwa. Kwa taarifa muhimu, tafsiri ya mtaalamu wa lugha ya binadamu inapendekezwa. Hatubeba dhamana yoyote kwa kutoelewana au tafsiri potofu zinazotokana na matumizi ya tafsiri hii. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Misingi ya JavaScript: Kufanya Maamuzi

Je, umewahi kuwa na mshangao jinsi programu zinavyofanya maamuzi mahiri? Kama vile mfumo wa urambazaji unavyochagua njia ya haraka zaidi, au jinsi thermostat inavyopima lini kuwasha joto? Hii ni dhana msingi ya kufanya maamuzi katika programu. Kama vile Mashine ya Kikaguzi ya Charles Babbage ilivyotengenezwa kufuata mfuatano tofauti wa operesheni kulingana na masharti, programu za kisasa za JavaScript zinahitaji kufanya chaguzi kulingana na hali tofauti. Uwezo huu wa kupinda na kufanya maamuzi ndio unaobadilisha msimbo wa kustaafu kuwa programu zenye majibu mahiri. Katika somo hili, utajifunza jinsi ya kutekeleza mantiki ya masharti katika programu zako. Tutachunguza taarifa za masharti, vigezo vya kulinganisha, na maelezo ya mantiki ambayo yanaruhusu msimbo wako kutathmini hali na kutoa majibu sahihi. ## Mtihani wa Kabla ya Mhadhara Pre-lecture quiz Uwezo wa kufanya maamuzi na kudhibiti mtiririko wa programu ni kipengele msingi cha programu. Sehemu hii inahusu jinsi ya kudhibiti njia ya utekelezaji wa programu zako za JavaScript kwa kutumia Thamani za Boolean na mantiki ya masharti. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## Muhtasari Mfupi kuhusu Booleans Kabla ya kuchunguza kufanya maamuzi, tuchukulie tena Thamani za Boolean kutoka somo letu la awali. Zinaitwa kwa jina la mwanagundua hisabati George Boole, thamani hizi zinaonyesha hali za binary – iwe true au false. Hakuna mkanganyiko, hakuna kati. Thamani hizi za binary ndizo msingi wa mantiki zote za kompyuta. Kila uamuzi unaotengenezwa na programu yako hatimaye huanza na tathmini ya Boolean. Kuumba vigezo vya Boolean ni rahisi: Hii inaunda vigezo viwili vilivyo na thamani za wazi za Boolean. ✅ Booleans zinaitwa kwa jina la mwanahisabati, mwanafalsafa na mantiki wa Kiingereza George Boole (1815–1864). ## Vigezo vya Kulinganisha na Booleans Katika vitendo, mara chache utaweka Thamani za Boolean kwa mkono. Badala yake, utazitengeneza kwa kutathmini masharti: "Je, nambari hii ni kubwa zaidi kuliko ile?" au "Je, thamani hizi ni sawa?" Vigezo vya kulinganisha vinaruhusu tathmini hizi. Vinalinganisha thamani na kurudisha matokeo ya Boolean kulingana na uhusiano kati ya waendeshaji. ✅ Angalia maarifa yako kwa kuandika kulinganisha kadhaa kwenye koni ya kivinjari chako. Je, data iliyorejeshwa inakushangaza? ### 🧠 Mtihani wa Uwezo wa Kulinganisha: Kuelewa Mantiki ya Boolean Jaribu uelewa wako wa kulinganisha: - Kwa nini unadhani === (ulinganifu wa dhati) hupendekezwa zaidi kuliko == (ulinganifu usio rasmi)? - Je, unaweza kutabiri nini 5 === '5' inarudisha? Vipi kwa 5 == '5'? - Tofauti ni gani kati ya !== na !=? ## Kauli ya If Kauli ya if ni kama kuuliza swali ndani ya msimbo wako. "Kama sharti hili ni kweli, basi fanya hili jambo." Inaweza kuwa zana muhimu zaidi unayotumia kwa kufanya maamuzi ndani ya JavaScript. Hivi ndivyo inavyofanya kazi: Sharti linaingia ndani ya mabano ya mzunguko, na ikiwa ni true, JavaScript inaendesha msimbo ndani ya mabano hayo. Ikiwa ni false, JavaScript inasahau sehemu yote hiyo. Mara nyingi utatumia vigezo vya kulinganisha kuunda masharti haya. Tazama mfano wa vitendo: Kwa kuwa 1000 >= 800 inathibitishwa kuwa true, msimbo ndani ya block unaendeshwa, ukionyesha "Kupata kompyuta mpya!" kwenye koni. ## Kauli ya If..Else Lakini vipi ikiwa unataka programu yako ifanye kitu tofauti wakati sharti ni false? Hapo ndipo else huingia – ni kama kuwa na mpango wa akiba. Kauli ya else inakupa njia ya kusema "kama sharti hili si kweli, fanya jambo hili badala yake." Sasa kwa kuwa 500 >= 800 ni false, JavaScript inaruka sehemu ya kwanza na kuendesha block la else badala yake. Utaona "Huwezi kumudu kompyuta mpya, bado!" kwenye koni. ✅ Jaribu kuelewa msimbo huu na msimbo unaofuata kwa kuukimbia kwenye koni ya kivinjari. Badilisha thamani za vigezo vya currentMoney na laptopPrice kubadilisha console.log() inayorejeshwa. ### 🎯 Kagua Mantiki ya If-Else: Njia Zinazotofautiana Tathmini uelewa wako wa mantiki ya masharti: - Nini hutokea ikiwa currentMoney iko sawa kabisa na laptopPrice? - Je, unaweza kufikiria mfano halisi ambapo mantiki ya if-else itakuwa na manufaa? - Unawezaje kuiongeza hii kushughulikia anuwai ya viwango vya bei? ## Kauli ya Switch Wakati mwingine unahitaji kulinganisha thamani moja dhidi ya chaguzi nyingi. Ingawa unaweza kuunganisha kauli kadhaa za if..else, njia hii inaweza kuwa ngumu kusimamia. Kauli ya switch hutoa muundo safi wa kushughulikia thamani nyingi tofauti. Dhana hii inafanana na mifumo ya kubadili mitambo iliyotumika kwenye mabadilishano ya simu ya mwanzo – thamani moja ya ingizo huchagua njia maalum ambayo utekelezaji unaifuata. Hivi ndivyo imeumbwa: - JavaScript inathibitisha usemi mara moja - Inaangalia kila case kutafuta mechi - Inapopata mechi, inaendesha sehemu ya msimbo huo - break inamuambia JavaScript kusimamisha na kutoka switch - Ikiwa hakuna case inapatana, inaendesha block ya default (ikiwa ipo) Katika mfano huu, JavaScript inaona kwamba dayNumber ni 2, inapata case inayoendana ya 2, inaweka dayName kuwa "Tuesday", na kisha inatoka switch. Matokeo? "Leo ni Jumanne" inaandikwa kwenye koni. ✅ Jaribu kuelewa msimbo huu na msimbo unaofuata kwa kuukimbia kwenye koni ya kivinjari. Badilisha thamani za mabadiliko a kubadilisha console.log() inayorejeshwa. ### 🔄 Ukakamavu wa Kauli ya Switch: Chaguzi Nyingi Jaribu uelewa wako wa switch: - Nini hutokea ikiwa unasahau kauli ya break? - Ungetumia switch lini badala ya kauli nyingi za if-else? - Kwa nini case ya default ni muhimu hata kama unadhani umefunika kila uwezekano? ## Vigezo vya Mantiki na Booleans Maamuzi magumu mara nyingi yanahitaji kutathmini masharti mengi kwa wakati mmoja. Kama vile aljebra ya Boolean inavyowezesha mwanahisabati kuunganisha maelezo ya mantiki, programu hutoa vigezo vya mantiki kuunganisha masharti mengi ya Boolean. Vigezo hivi vinaruhusu mantiki ya masharti ya hali ya juu kwa kuunganisha tathmini rahisi za true/false. Vigezo hivi vinakuwezesha kuunganisha masharti kwa njia zenye manufaa: - AND (&&) maana yake masharti yote mawili lazima yawe true - OR (||) maana yake angalau sharti moja lazima liwe true - NOT (!) hubadilisha true kuwa false (na kinyume chake) ## Masharti na Maamuzi na Vigezo vya Mantiki Tazama jinsi vigezo hivi vya mantiki vinavyofanya kazi kwa mfano halisi zaidi: Katika mfano huu: tunaweka bei ya punguzo la 20% (640), kisha tunathibitisha ikiwa fedha zetu zinatosha kulipia bei kamili AU bei yenye punguzo. Kwa kuwa 600 ni chini ya kiwango cha punguzo cha 640, sharti linatathminiwa kuwa true. ### 🧮 Kagua Vigezo vya Mantiki: Kuunganisha Masharti Jaribu uelewa wako wa vigezo vya mantiki: - Katika usemi A && B, nini hutokea ikiwa A ni false? Je, B inatathminiwa? - Je, unaweza kufikiria hali ambayo unahitaji vigezo vyote vitatu (&&, ||, !) pamoja? - Tofauti ni gani kati ya !user.isActive na user.isActive !== true? ### Kinyume cha Mantiki Wakati mwingine ni rahisi kufikiria wakati jambo si kweli. Kama badala ya kuuliza "Je, mtumiaji ameingia?" unaweza kuuliza "Je, mtumiaji HAJAINGIA?" Uendeshaji wa alama ya kishindo (!) hubadilisha mantiki hii kwako. Uendeshaji ! ni kama kusema "kinyume cha..." – ikiwa jambo ni true, ! linaifanya iwe false, na kinyume chake. ### Maelezo ya Ternary Kwa ajili ya ugawaji rahisi wa masharti, JavaScript hutoa uendeshaji wa ternary. Hii ni sintaksia fupi inayokuwezesha kuandika usemi wa sharti kwenye mstari mmoja, na ni muhimu wakati unahitaji kugawa thamani moja kati ya mbili kulingana na sharti. Inasomeka kama swali: "Je, sharti hili ni kweli? Ikiwa ndiyo, tumia thamani hii. Ikiwa siyo, tumia thamani ile." Hapa chini kuna mfano halisi zaidi: ✅ Chukua muda kusoma msimbo huu mara kadhaa. Je, unaelewa jinsi vigezo hivi vinavyotumika? Hii mistari inasema: "Je, firstNumber ni kubwa kuliko secondNumber? Ikiwa ndiyo, weka firstNumber katika biggestNumber. Ikiwa siyo, weka secondNumber katika biggestNumber." Uendeshaji wa ternary ni njia fupi zaidi ya kuandika kauli ya kawaida ya if..else: Mbali na kuchapisha matokeo sawa. Uendeshaji wa ternary hutoa ufupi, wakati muundo wa kawaida wa if-else unaweza kuwa rahisi kusoma kwa masharti magumu. --- ## 🚀 Changamoto Tengeneza programu ambayo imeandikwa kwanza kwa vigezo vya mantiki, kisha uandike upya ukitumia usemi wa ternary. Je, ni sintaksia gani unayopendelea? --- ## Changamoto ya Msaidizi wa GitHub Copilot 🚀 Tumia hali ya Msaidizi kukamilisha changamoto ifuatayo: Maelezo: Tengeneza kalikulatori ya alama kamili inayowakilisha dhana nyingi za kufanya maamuzi kutoka somo hili, ikiwa ni pamoja na kauli za if-else, switch, vigezo vya mantiki, na maelezo ya ternary. Agizo: Andika programu ya JavaScript inayopokea alama ya kisambaza chuo kutoka 0 hadi 100 na kuamua daraja la barua kutumia vigezo vifuatavyo: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Chini ya 60 Mahitaji: 1. Tumia kauli ya if-else kuamua daraja la barua 2. Tumia waendeshaji wa mantiki kuangalia kama mwanafunzi anapita (alama >= 60) NA ana heshima (alama >= 90) 3. Tumia tamko la switch kutoa maoni maalum kwa kila daraja la herufi 4. Tumia muendeshaji wa ternary kuamua kama mwanafunzi anastahili kozi inayofuata (alama >= 70) 5. Jumuisha uthibitishaji wa ingizo kuhakikisha alama ni kati ya 0 na 100 Jaribu programu yako kwa alama mbalimbali ikiwa ni pamoja na matukio ya mwisho kama 59, 60, 89, 90, na maingizo yasiyo halali. Jifunze zaidi kuhusu agent mode hapa. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Soma zaidi kuhusu waendeshaji wengi waliopo kwa mtumiaji katika MDN. Pitia nzuri ya Josh Comeau operator lookup! ## Assignment Operators --- ## 🧠 Muhtasari wa Kifaa Chako cha Kutoa Maamuzi --- ## 🚀 Ratiba Yako ya Ustadi wa Kutoa Maamuzi wa JavaScript ### ⚡ Unachoweza Kufanya Katika Dakika 5 Zifuatazo - [ ] Fanya mazoezi ya waendeshaji wa kulinganisha kwenye console ya kivinjari chako - [ ] Andika tamko rahisi la if-else linalokagua umri wako - [ ] Jaribu changamoto: andika upya if-else ukitumia muendeshaji wa ternary - [ ] Jaribu kinachotokea na thamani tofauti za "truthy" na "falsy" ### 🎯 Unachoweza Kufanikisha Saa Hii - [ ] Kamilisha mtihani baada ya somo na pitia dhana yoyote isiyoeleweka - [ ] Tengeneza kalkuleta kamili ya alama kutoka changamoto ya GitHub Copilot - [ ] Unda mti wa maamuzi rahisi kwa hali halisi (kama kuchagua mavazi) - [ ] Fanya mazoezi ya kuunganisha masharti mengi kwa kutumia waendeshaji wa mantiki - [ ] Jaribu tamko za switch kwa matumizi tofauti ### 📅 Ustadi Wako wa Mantiki wa Wiki Nzima - [ ] Kamilisha kazi ya waendeshaji kwa mifano ya ubunifu - [ ] Tengeneza programu ndogo ya mtihani kwa kutumia muundo mbalimbali wa masharti - [ ] Unda kirekodi kinachokagua masharti mengi ya ingizo - [ ] Fanya mazoezi ya mazoezi ya Josh Comeau ya operator lookup - [ ] Boresha msimbo uliopo kutumia muundo wa masharti unaofaa zaidi - [ ] Soma tathmini ya kukata mkato na athari za utendaji ### 🌟 Mabadiliko Yako ya Mwezi Mzima - [ ] Jifunze masharti magumu yaliyomo ndani na dumisha usomeaji wa msimbo - [ ] Tengeneza programu yenye mantiki ya maamuzi ya hali ya juu - [ ] Changia wazi kwa kuboresha mantiki ya masharti katika miradi iliyopo - [ ] Fundisha mtu mwingine juu ya miundo tofauti ya masharti na lini ya kutumia kila moja - [ ] Chunguza mbinu za programu zenye kazi za mantiki ya masharti - [ ] Tengeneza mwongozo wa kibinafsi kwa mbinu bora za masharti ### 🏆 Ukaguzi wa Mwisho wa Bingwa wa Uamuzi Sherehekea ubingwa wako wa kufikiri kwa mantiki: - Ni mantiki gani ngumu ya maamuzi uliyotransisha kwa mafanikio? - Ni muundo gani wa masharti unahisi kuwa wa asili kwako na kwa nini? - Je, kujifunza kuhusu waendeshaji wa mantiki kumebadilisha vipi njia yako ya kutatua matatizo? - Ni programu gani halisi ingefaidika na mantiki ya maamuzi ya hali ya juu? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Kiarifu cha Kukataa: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kupata usahihi, tafadhali fahamu kwamba tafsiri za kiotomatiki zinaweza kuwa na makosa au upotoshaji. Hati asili katika lugha yake ya asili inapaswa kuzingatiwa kama chanzo halali. Kwa taarifa muhimu, tafsiri ya mtaalamu wa binadamu inapendekezwa. Hatuwajibiki kwa kutoelewana au tafsiri potofu zitokanazo na matumizi ya tafsiri hii. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Misingi ya JavaScript: Mfululizo na Mizunguko

## Jaribio la Kabla ya Darasa Jaribio la kabla ya darasa Umewahi kujiuliza jinsi tovuti zinavyofuatilia vitu vilivyomo kwenye kikapu cha ununuzi au kuonyesha orodha ya marafiki zako? Hapo ndipo mfululizo na mizunguko vinapoingia kazi. Mfululizo ni kama makontena ya kidigitali ambayo hugharamia vipande vingi vya taarifa, wakati mizunguko hukuwezesha kufanya kazi na data hiyo yote kwa ufanisi bila kuandika msimbo mrefu wa kurudia. Kwa pamoja, dhana hizi mbili zinaunda msingi wa kushughulikia taarifa katika programu zako. Utajifunza kutoka kuandika kila hatua kwa mkono hadi kuunda msimbo mzuri, wenye ufanisi unaoweza kushughulikia mamia au hata maelfu ya vitu haraka. Mwisho wa somo hili, utaelewa jinsi ya kutekeleza kazi tata za data kwa mistari michache tu ya msimbo. Tuchunguze dhana hizo muhimu za programu. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Mfululizo Fikiria mfululizo kama kabati ya kuhifadhi dijitali - badala ya kuhifadhi hati moja kwa kisanduku, unaweza kupanga vitu vingine vingi vinavyohusiana kwenye kontena moja lililopangwa. Kwa maneno ya programu, mfululizo hukuruhusu kuhifadhi vipande vingi vya taarifa kwa kifurushi kimoja kilichopangwa. Iwe unajenga maktaba ya picha, kusimamia orodha ya kazi za kufanywa, au kufuatilia alama za juu katika mchezo, mfululizo hutoa msingi wa upangaji wa data. Tuchunguze jinsi zinavyofanya kazi. ✅ Mfululizo upo kila mahali! Unaweza kufikiria mfano wa maisha halisi wa mfululizo, kama mfululizo wa paneli za jua? ### Kuunda Mfululizo Kuunda mfululizo ni rahisi sana - tumia mabano ya mraba! Nini kinatokea hapa? Umeunda kontena tupu ukitumia mabano hayo []. Fikiria kama rafu tupu ya maktaba - iko tayari kuhifadhi vitabu vyovyote unavyotaka kupanga hapo. Unaweza pia kujaza mfululizo wako na maadili ya mwanzo kutoka mwanzo kabisa: Mambo mazuri ya kuona: - Unaweza kuhifadhi maandishi, nambari, au hata maadili ya kweli/silimu katika mfululizo mmoja - Tenganisha kila kipengee kwa koma - rahisi! - Mfululizo ni mzuri kudumisha taarifa zinazohusiana pamoja ### Kuingiza Na Kupanua Mfululizo Hapa kuna jambo ambalo linaweza kuonekana la ajabu mwanzoni: mfululizo huhesabu vipengee vyake kuanzia 0, sio 1. Uhifadhi huu wa nambari kuanzia sifuri una asili yake kutoka jinsi kumbukumbu za kompyuta zinavyofanya kazi - imekuwa desturi ya programu tangu enzi za mapema za lugha kama C. Kila nafasi katika mfululizo ina nambari yake ya saraka inayoitwa index. ✅ Je, unashangazwa kwamba mfululizo huanza kwa index ya sifuri? Katika baadhi ya lugha za programu, indexes huanza kwa 1. Kuna historia ya kuvutia kuhusu hili, ambayo unaweza kusoma kwenye Wikipedia. Kupata Vipengee vya Mfululizo: Kuvunja kinachotokea hapa: - Inatumia notation ya mabano ya mraba pamoja na nambari ya index kupata vipengee - Inarudisha thamani iliyohifadhiwa katika nafasi hiyo maalum ya mfululizo - Huanza kuhesabu kutoka 0, ikifanya kipengee cha kwanza kuwa index 0 Kurekebisha Vipengee vya Mfululizo: Juu hapo, tumefanya: - Tume badilisha kipengee cha index 4 kutoka "Rocky Road" kuwa "Butter Pecan" - Tume ongeza kipengee kipya "Cookie Dough" kwenye index 5 - Tume panua urefu wa mfululizo moja kwa moja wakati wa kuongeza zaidi ya mipaka ya sasa ### Urefu wa Mfululizo na Mbinu Muhimu Mfululizo huja na mali na mbinu zilizojengwa ndani zinazorahisisha kazi na data. Kupata Urefu wa Mfululizo: Pointi muhimu ya kukumbuka: - Huiarudisha idadi ya vipengee vyote vilivyomo mfululizoni - Huvunjika moja kwa moja wakati vipengee vinaongezwa au kuondolewa - Hutoa hesabu hai inayotumika kwa mizunguko na uthibitishaji Mbinu Muhimu za Mfululizo: Kuelewa mbinu hizi: - Inaongeza vipengee na push() (mwisho) na unshift() (mwanzoni) - Inaondoa vipengee na pop() (mwisho) na shift() (mwanzoni) - Inatafuta vipengee na indexOf() na huthibitisha kuwepo na includes() - Huirudisha maadili ya maana kama vipengee vilivyoondolewa au index za nafasi ✅ Jaribu mwenyewe! Tumia konsole ya kivinjari chako kuunda na kubadilisha mfululizo wa uumbaji wako. ### 🧠 Kagua Misingi ya Mfululizo: Kupanga Data Yako Jaribu uelewa wako wa mfululizo: - Kwa nini unadhani mfululizo huanza kuhesabu kutoka 0 badala ya 1? - Nini hutokea ukijaribu kupata index isiyopo (kama arr[100] kwenye mfululizo wa vipengee 5)? - Unaweza kufikiria matukio matatu ya maisha halisi ambapo mfululizo utakuwa na maana? ## Mizunguko Fikiria adhabu maarufu kutoka riwaya za Charles Dickens ambapo wanafunzi walilazimishwa kuandika mistari mara kwa mara kwenye mbao. Fikiria kama ungeweza tu kumuamuru mtu "andika sentensi hii mara 100" na ikatendeka moja kwa moja. Hicho ndicho mizunguko hufanya kwa msimbo wako. Mizunguko ni kama kuwa na msaidizi asiyechoka ambaye anaweza kurudia kazi bila makosa. Iwe unahitaji kuangalia kila kipengee kwenye kikapu cha ununuzi au kuonyesha picha zote kwenye albamu, mizunguko hugharamia kurudia kwa ufanisi. JavaScript hutoa aina kadhaa za mizunguko ya kuchagua. Tuchunguze kila moja na kuelewa lini kuwatumia. ### Mdundo wa For Mdundo wa for ni kama kuweka kengele ya muda - unajua angalau mara ngapi unataka kitu kitokee. Ni mpangilio mzuri na unaoweza kutegemewa, hivyo ni bora wakati unafanya kazi na mfululizo au unahitaji kuhesabu vitu. Muundo wa Mdundo wa For: Hatua kwa hatua, hii ndicho kinachotokea: - Inaanzisha kigezo cha kuhesabu i kwa 0 mwanzoni - Inakagua sharti i < 10 kabla ya kila mizunguko - Inatekeleza msimbo muda sharti liko kweli - Inaongeza i kwa 1 baada ya kila mzunguko kwa i++ - Inasimama wakati sharti linapokuwa si kweli (wakati i inafikia 10) ✅ Endesha msimbo huu kwenye konsole ya kivinjari. Nini hutokea unapoanzisha mabadiliko madogo kwa kigezo cha kuhesabu, sharti, au usemaji wa mizunguko? Unaweza kulifanya lifanye nyuma, likitengeneza kuhesabu chini? ### 🗓️ Kagua Ujuzi wa Mdundo wa For: Kurudia kwa Kudhibitiwa Chunguza uelewa wako wa mdundo wa for: - Ni sehemu tatu gani za mdundo wa for, na kila moja hufanyaje? - Ungeweza aje kuzunguka mfululizo nyuma? - Nini hutokea ikiwa utasahau sehemu ya kuongeza (i++)? ### Mdundo wa While Mdundo wa while ni kama kusema "endelea kufanya hivi hadi..." - huenda usijue mara ngapi utaendesha, lakini unajua lini kusimama. Ni bora kwa mambo kama kuuliza mtumiaji kuingiza data hadi ape yale unayohitaji, au kutafuta kwenye data hadi upate unachotafuta. Sifa za Mdundo wa While: - Huendelea kutekeleza mradi sharti ni kweli - Inahitaji usimamizi wa mikono wa vigezo vyovyote vya kuhesabu - Inakagua sharti kabla ya kila mzunguko - Ina hatari ya mizunguko isiyoisha kama sharti halitawahi kuwa si kweli Kuelewa mifano hii: - Inasimamia kigezo cha kuhesabu i kwa mkono ndani ya mwili wa mzunguko - Inaongeza kigezo kuzuia mizunguko isiyoisha - Inaonyesha matumizi ya vitendo kwa data ya mtumiaji na kikomo cha majaribio - Inajumuisha vipengele vya usalama kuzuia utekelezaji usioisha ### ♾️ Kagua Uelewa wa Mdundo wa While: Kurudia Kunategemea Sharti Jaribu uelewa wako wa mdundo wa while: - Hatari kuu je unapotumia mizunguko ya while ni ipi? - Ungechagua lini mdundo wa while badala ya for? - Unawezaje kuzuia mizunguko isiyoisha? ### Mbinu za Kisasa za Mizunguko JavaScript hutoa sintaksia za kisasa za mizunguko ambazo zinaweza kufanya msimbo wako usomeke vizuri na usiwe na makosa. Mwendo wa For...of (ES6+): Faida kuu za for...of: - Huondoa usimamizi wa index pamoja na makosa ya kuhesabu moja kwa moja - Hutoa ufikiaji wa moja kwa moja kwa vipengee vya mfululizo - Huboresha usomaji wa msimbo na kupunguza ugumu wa sintaksia Mbinu ya forEach: Unachohitaji kujua kuhusu forEach: - Hutekeleza kazi kwa kila kipengee cha mfululizo - Hutoa thamani ya kipengee na index kama vigezo - Haiwezi kusimamishwa mapema (tofauti na mizunguko ya kawaida) - Hurejesha undefined (haitoi mfululizo mpya) ✅ Kwanini utachagua mdundo wa for badala ya while? Watazamaji 17K walikuwa na swali sawa StackOverflow, na baadhi ya maoni yanaweza kuwa ya kuvutia kwako. ### 🎨 Kagua Sintaksia za Kisasa za Mizunguko: Kukumbatia ES6+ Kagua uelewa wako wa JavaScript ya kisasa: - Faida za for...of juu ya mizunguko ya for ya kawaida ni zipi? - Ungependa lini bado kutumia mizunguko ya for ya kawaida? - Tofauti ni ipi kati ya forEach na map? ## Mizunguko na Mfululizo Kuunganisha mfululizo na mizunguko kunaunda uwezo mkubwa wa usindikaji data. Mchanganyiko huu ni msingi wa kazi nyingi za programu, kutoka kuonyesha orodha hadi kuhesabu takwimu. Usindikaji wa Mfululizo wa Kiasili: Tuelewe kila njia: - Inatumia mali ya urefu wa mfululizo kuamua mpaka wa mzunguko - Inapata vipengee kwa index katika mizunguko ya for ya kiasili - Hutoa ufikiaji wa moja kwa moja kwa vipengee katika mizunguko ya for...of - Inashughulikia kila kipengee cha mfululizo mara moja tu Mfano wa Kazi halisi ya Usindikaji Data: Hapa ni jinsi msimbo huu unavyofanya kazi: - Inaanzisha vigezo vya kufuatilia jumla na viwango - Inasindika kila alama kwa mzunguko mmoja wenye ufanisi - Inakusanya jumla kwa ajili ya hesabu ya wastani - Inafuatilia viwango vya juu na chini wakati wa mzunguko - Inahesabu takwimu za mwisho baada ya mzunguko kumalizika ✅ Jaribu kuzunguka mfululizo uliouunda mwenyewe kwenye konsole ya kivinjari chako. --- ## Changamoto ya Msaidizi wa GitHub Copilot 🚀 Tumia hali ya Msaidizi kumaliza changamoto ifuatayo: Maelezo: Jenga kazi kuu ya usindikaji data inayounganisha mfululizo na mizunguko kuchambua seti ya data na kutoa taarifa za maana. Mwito: Unda kazi iitwayo analyzeGrades inayopokea mfululizo wa vitu vya alama za wanafunzi (kila kikiwa na mali za jina na alama) na kurejesha kitu chenye takwimu ikiwa ni pamoja na alama ya juu zaidi, alama ya chini zaidi, alama ya wastani, idadi ya wanafunzi waliopitisha (alama >= 70), na mfululizo wa majina ya wanafunzi waliopata zaidi ya wastani. Tumia angalau aina mbili tofauti za mizunguko katika suluhisho lako. Jifunze zaidi kuhusu hali ya msaidizi hapa. ## 🚀 Changamoto JavaScript hutoa mbinu kadhaa za kisasa za safu ambazo zinaweza kubadilisha mizunguko ya jadi kwa kazi maalum. Chunguza forEach, for-of, map, filter, na reduce. Changamoto yako: Rekebisha mfano wa alama za wanafunzi ukitumia mbinu tatu tofauti za safu. Angalia jinsi msimbo unavyokuwa safi zaidi na rahisi kusomeka kwa kutumia sintaksia ya kisasa ya JavaScript. ## Mtihani Baada ya Mafunzo Mtihani baada ya mafunzo ## Mapitio & Kujifunza Binafsi Safu katika JavaScript zina mbinu nyingi zilizoambatanishwa nazo, ambazo ni muhimu sana kwa usindikaji wa data. Soma kuhusu mbinu hizi na jaribu baadhi zao (kama vile push, pop, slice na splice) kwenye safu uliyoitengeneza mwenyewe. ## Kazi ya Nyumbani Loop an Array --- ## 📊 Muhtasari wa Zana Zako za Safu & Mizunguko --- ## 🚀 Ratiba Yako ya Ustadi wa Safu & Mizunguko ### ⚡ Kile Unachoweza Kufanya Katika Dakika 5 Zijazo - [ ] Tengeneza safu ya filamu zako unazopenda na pata vipengele maalum - [ ] Andika for loop inayohesabu kutoka 1 hadi 10 - [ ] Jaribu changamoto ya mbinu za kisasa za safu kutoka somo - [ ] Fanya mazoezi ya kuorodhesha safu kwenye console ya kivinjari chako ### 🎯 Kile Unachoweza Kufanikisha Saa Hii - [ ] Kamilisha mtihani baada ya somo na pitia dhana zozote ngumu - [ ] Tengeneza kifumbuzi kamili cha tathmini ya alama kutoka changamoto ya GitHub Copilot - [ ] Tengeneza kikapu rahisi cha ununuzi kinachoongeza na kuondoa vitu - [ ] Fanya mazoezi ya kubadilisha aina tofauti za mizunguko - [ ] Jaribu mbinu za safu kama push, pop, slice, na splice ### 📅 Safari Yako ya Siku Mmoja la Usindikaji Data - [ ] Kamilisha kazi ya "Loop an Array" na maboresho ya ubunifu - [ ] Tengeneza programu ya orodha ya kufanya kazi ukitumia safu na mizunguko - [ ] Tengeneza kalkuleta rahisi ya takwimu kwa data za nambari - [ ] Fanya mazoezi na mbinu za safu za MDN - [ ] Tengeneza galeri ya picha au kiolesura cha orodha ya muziki - [ ] Chunguza programu ya kifasihi kwa kutumia map, filter, na reduce ### 🌟 Mabadiliko Yako ya Mwezi Mmoja - [ ] Jifunze mbinu za hali ya juu za safu na uboreshaji wa utendaji - [ ] Tengeneza dashibodi kamili ya kuona data - [ ] Changia miradi ya chanzo huria inayohusiana na usindikaji data - [ ] Fafanua kwa mtu mwingine kuhusu safu na mizunguko kwa mifano ya vitendo - [ ] Tengeneza maktaba binafsi ya kazi zinazoweza kutumika tena za usindikaji data - [ ] Chunguza algoriti na miundo ya data inayojengwa juu ya safu ### 🏆 Ukaguzi wa Mwisho wa Bingwa wa Usindikaji Data Sherehekea ustadi wako wa safu na mizunguko: - Ni operesheni gani ya safu ambayo imekuwa ya muhimu zaidi kwa matumizi halisi uliyojifunza? - Aina gani ya mzunguko unahisi ni rahisi zaidi kwako na kwa nini? - Je, uelewa wa safu na mizunguko umebadilisha vipi mtazamo wako wa kupanga data? - Ni kazi gani ngumu ya usindikaji data ungependa kushughulikia ijayo? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> Kunywa nia: Nyaraka hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kufanikisha usahihi, tafadhali fahamu kuwa tafsiri za moja kwa moja zinaweza kuwa na makosa au usahihi mdogo. Nyaraka ya asili katika lugha yake ya asili inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa habari muhimu, tafsiri ya kitaalamu inayofanywa na watu inashauriwa. Sisi hatuwezi kuwajibika kwa kutoelewana au tafsiri potofu zinazotokana na matumizi ya tafsiri hii. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ஜாவாஸ்கிரிப்ட் அறிமுகம்

ஜாவாஸ்கிரிப்ட் வலைப்பக்கத்தின் மொழியாகும். இந்த நான்கு பாடங்களில், அதன் அடிப்படைகளை நீங்கள் கற்றுக்கொள்வீர்கள். ### தலைப்புகள் 1. மாறிகள் மற்றும் தரவுத் வகைகள் 2. செயல்பாடுகள் மற்றும் முறைகள் 3. ஜாவாஸ்கிரிப்டுடன் முடிவுகளை எடுப்பது 4. அறைகள் மற்றும் மடக்கங்கள் ### கிரெடிட்ஸ் இந்த பாடங்கள் ♥️ உடன் ஜாஸ்மின் கிரீனவே, கிரிஸ்டோபர் ஹாரிசன் மற்றும் கிரிஸ் நோரிங் ஆகியோரால் எழுதப்பட்டவை. --- அறிவிப்பு: இந்த ஆவணம் Co-op Translator என்ற AI மொழிபெயர்ப்பு சேவையை பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சிக்கிறோம், ஆனால் தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் இருக்கக்கூடும் என்பதை கவனத்தில் கொள்ளவும். அதன் சொந்த மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்களுக்கும் அல்லது தவறான விளக்கங்களுக்கும் நாங்கள் பொறுப்பல்ல.

web,development

JavaScript அடிப்படைகள்: தரவுத் தரவுகள்

தரவுத் தரவுகள் JavaScript இல் அடிப்படையான கருத்துக்களில் ஒன்றாகும், நீங்கள் எழுதும் ஒவ்வொரு நிகழ்ச்சியிலும் சந்திக்கும். தரவுத் தரவுகளை எக்சாண்டிரியாவின் பண்டைய நூலகத் தலைவர்களால் பயன்படுத்தப்பட்ட கோப்பமைப்பு முறையைப் போல நினைக்கவும் – கவிதை, கணிதம் மற்றும் வரலாற்றின் பதிவுகள் கொண்ட சீலைப் பொறுத்தவாறு குறிப்பிட்ட இடங்கள் இருந்தன. JavaScript தகவலை இவ்வாறு பிரிவுகளின் அடிப்படையில் ஒழுங்குபடுத்துகிறது. இந்த பாடத்தில், JavaScript இயங்கச் செய்யும் முக்கிய தரவுத் தரவுகளை ஆராய்வோம். நீங்கள் எண்கள், உரை, உண்மை/பொய் மதிப்புகளை எவ்வாறு கையாள்வது மற்றும் சரியான தரவு வகையைத் தேர்ந்தெடுப்பது உங்கள் செயலிகளுக்கு ஏன் அவசியமானதென்று அறிவீர்கள். இவை முதலில் கற்பனைப்படுத்தக்கூடியதாக தோன்றலாம், ஆனால் பயிற்சியுடன் இவை இயல்பானவையாக மாறும். தரவுத் தரவுகளைப் புரிந்துகொள்வது JavaScript இல் மற்ற அனைத்தையும் தெளிவாக மாற்றும். கட்டிடக்கலைஞர்கள் கத்தீட்ரலை கட்டுவதற்கு முன்பு வெவ்வேறு கட்டிடப் பொருட்களைப் புரிந்துகொள்ள வேண்டியவாறு, இந்த அடிப்படைகள் நீங்கள் கட்டும் அனைத்திற்கும் ஆதரவாக இருக்கும். ## வகுப்புக்குப் பாய்நிலை வினாடி வினாக்கள் வகுப்புக்குப் பாய்நிலை வினாடி வினாக்கள் இந்த பாடம் அடிப்படை JavaScript கலைப்பாடங்களை கையாண்டு வலைப்பக்கத்தில் இலவசமான ஊடாட்டத்தை வழங்குகிறது. [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript இல் மாறிலிகள்") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript இல் தரவுத் தரவுகள்") மாறிலிகள் மற்றும் அவற்றை நிரப்பும் தரவுத் தரவுகளுடன் தொடங்குவோம்! ## மாறிலிகள் மாறிலிகள் நிகழ்ச்சி எழுதுவதில் அடிப்படை கட்டமைப்புகள் போன்றவை. நடுத்தர கால அலகிமிகள் பல்வேறு பொருட்களை சேமிக்கத் பயன்படுத்திய லேபிள் வைத்த கோப்பைப்போல், மாறிலிகள் தகவலை சேமித்து பின்னர் அதை குறிக்க உதவும் பெயரை வழங்குகின்றன. ஒருவரின் வயதை நினைவில் வைத்திருக்க வேண்டுமா? age என்ற மாறிலியில் சேமிக்கவும். ஒரு பயனரின் பெயரை கண்காணிக்க விரும்புகிறீர்களா? userName என்ற மாறிலியில் வைத்திருக்கவும். JavaScript இல் மாறிலிகளை உருவாக்கும் நவீன முறையை நாம் கவனிப்போம். இங்கே நீங்கள் கற்றுக்கொள்ளும் நுட்பங்கள் மொழியின் வருடங்கள் பழக்கம் மற்றும் நிரலாக்க சமூகத்தால் உருவான சிறந்த நடைமுறைகளை பிரதிபலிக்கின்றன. ஒரு மாறிலியை உருவாக்கி கட்டளை செய்யும் முறையின் முறைபதிவில் [keyword] [name] உள்ளது. இது இரண்டு பகுதிகளைக் கொண்டது: - வார்த்தை. மாற்றங்கள் ஏற்படக்கூடிய மாறிலிகளுக்கு let ஐ, மாற்றம் இல்லாத மதிப்புகளுக்கு const ஐ பயன்படுத்தவும். - மாறிலியின் பெயர், இது நீங்கள் தேர்ந்தெடுத்த விளக்கமான பெயர். ✅ ES6 இல் அறிமுகம் செய்யப்பட்ட let வார்த்தை உங்கள் மாறிலிக்கு _block scope_ ஐ வழங்குகிறது. பண்டைய var வார்த்தைமிகப்பெரிய அளவு பயன்படுத்துவதை விட let அல்லது const பயன்படுத்த பரிந்துரைக்கப்படுகிறது. நாம் எதிர்கால பகுதிகளில் block scope விடயங்களை விரிவாகப் பார்க்கப் போகிறோம். ### பணிக்கான செயலி - மாறிலிகளுடன் வேலை செய்யுதல் 1. மாறிலியை கண்டறிக. முதற்கட்டமாக தங்கள் முதல் மாறிலியை உருவாக்குவோம்: ```javascript let myVariable; ``` இதனால் என்ன நடக்கும்: - இது JavaScript ஐ myVariable என்ற சேமிப்பிடத்தை உருவாக்க சொல்லுகிறது - JavaScript இந்த மாறிலிக்கான நினைவக இடத்தை ஒதுக்குகிறது - இப்போதைக்கு மதிப்பு எதுவும் இல்லை (undefined) 2. ஒரு மதிப்பை கொடு. இப்போது, மாறிலியில் ஏதேனும் ஒன்றைத் தொட்டு பார்ப்போம்: ```javascript myVariable = 123; ``` பAssignமுறை எப்படி வேலை செய்கிறது: - = இயங்கு 123 என்ற மதிப்பை நமது மாறிலிக்கு ஒதுக்குகிறது - மாறிலிக்கு இப்போது இந்த மதிப்பு உள்ளது, undefined அல்ல - myVariable ஐப் பயன்படுத்தி உங்கள் முழு குறியீட்டிலும் இந்த மதிப்பை குறிக்கலாம் > குறிப்பு: இந்த பாடத்தில் = பயன்படுத்துவது "ஒதுக்கல் இயங்கு" என்பதை குறிக்கின்றது, மதிப்பை மாறிலிக்கு அமைப்பதற்கானது; சமமானதைக் குறிக்காது. 3. சில அநுணுக்கமாக செய்யுங்கள். உண்மையில், இந்த இரண்டு படிகளையும் ஒன்றாகச் செய்கிறோம்: ```javascript let myVariable = 123; ``` இந்த முயற்சி சிக்கனமானது: - நீங்கள் ஒரு அறிவிப்பில் மாறிலியை உருவாக்கி அதற்கு மதிப்பையும் ஒதுக்குகிறீர்கள் - இந்த நடைமுறை மேம்பாட்டாளர்களிடையே தரநிலை - குறியீட்டு நீளத்தை குறைத்து தெளிவை பராமரிக்கிறது 4. உங்கள் எண்ணத்தை மாற்றுங்கள். வேறு ஒரு எண்ணைச் சேமிக்க விருப்பத்தோ? ```javascript myVariable = 321; ``` மறுபAssignம் பற்றி புரிந்து கொள்வது: - இப்போது மாறிலியில் 321 உள்ளது, 123 அல்ல - முந்தைய மதிப்பு மாற்றப்பட்டுவிட்டது – மாறிலிகள் ஒரே நேரத்தில் ஒரே மதிப்பை மட்டுமே வைத்திருக்க முடியும் - let உடன் அறிவிக்கப்பட்ட மாறிலிகளின் முக்கிய அம்சமான மாற்றக்கூடிய தன்மை இது ✅ முயற்சி செய்யுங்கள்! உங்கள் உலாவியில் நேரடியாக JavaScript எழுதலாம். உலாவி விண்டோவை திறந்து Developer Tools-க்கு வா. கான்சோல் பகுதியில் let myVariable = 123 என தட்டச்சு செய்து Enter அழுத்தவும், பிறகு myVariable எனத் தட்டச்சு செய்யவும். என்ன நடக்கிறது? பின்னர் வரும் பாடங்களில் இந்த கருத்துக்கள் பற்றி அதிகம் கற்றுக்கொள்ள போகிறோம். ### 🧠 மாறிலிகள் பற்றிய தேர்வு: நம்பிக்கை பெறுதல் மாறிலிகள் பற்றி நீங்கள் எப்படி உணர்கிறீர்கள் பார்க்கலாம்: - ஒரு மாறிலியை அறிவிப்பது மற்றும் ஒதுப்பது என்பவற்றை விளக்க முடியுமா? - நீங்கள் அறிவிப்பதற்கு முன்பே மாறிலியை பயன்படுத்தி பார்க்கும்போது என்ன நடக்கும்? - எந்த நேரங்களில் let ஐ const இற்கு பதிலாகப் பயன்படுத்துவீர்கள்? ## நிலைத்த தரவுகள் சில நேரங்களில் செயலியின் இயங்கும்போது மாறாத தகவலை சேமிக்க வேண்டியிருக்கும். நிலைத்த தரவுகள் பண்டைய கிரேக்க கணிதவியலாளர் யூக்ளிட் நிறுவிய கணிதக் கொள்கைகளைப் போன்றவை – ஒருமுறை சான்றுதிக்கப்பட்டதும், அடுத்தடுத்த காலத்திற்கும் மாற்றமின்றி இருக்கும். நிலைத்த தரவுகளும் மாறிலிகளைப் போன்றவை தான், ஆனால் முக்கியமான கட்டுப்பாடு ஒரு மாறிலிக்கு அமைந்தவாறே அதை ஒருமுறை மட்டுமே மதிப்பிட முடியும். இது தவறான மாற்றங்களிலிருந்து முக்கிய மதிப்புகளை பாதுகாக்க உதவுகிறது. நிலைத்த தரவு அறிவிப்பும் துவக்கம் செய்வதும் மாறிலிகளுடன் துல்லியமான பொருத்தத்தில் இருக்கும், const வார்த்தையைத் தவிர. நிலைத்ததுகள் பொதுவாக முழு பெரிய எழுத்துக்களில் அறிவிக்கப்படுகின்றன. இந்த குறியீடு செய்யும் வேலை: - MY_VARIABLE என்ற ஒரு நிலைத்ததைக் உருவாக்குகிறது, மதிப்பு 123 - நிலைத்ததுகளுக்கு பெரிய எழுத்துக்கள பயன்படுத்துகிறது - இந்த மதிப்பை எதிர்காலத்தில் மாற்ற முடியாது நிலைத்ததிற்க்கு இரண்டு முக்கிய விதிகளும் உண்டு: - உங்களுக்கு உடனடியாக ஒரு மதிப்பை கொடுக்க வேண்டும் – காலி நிலைத்ததுகள் அனுமதிக்கப்படவில்லை! - அந்த மதிப்பை நீங்கள் மறுபடியும் மாற்ற முடியாது – முயற்சிப்பது பிழையை உருவாக்கும். இதைக் காண்போம்: எளிய மதிப்பு - பின்வரும் அனுமதிக்கப்படாது: ```javascript const PI = 3; PI = 4; // அனுமதிக்கப்படாது ``` நினைத்துக் கொள்ள வேண்டியது: - நிலைத்ததிகளை மறுபAssignம் செய்வது பிழை ஏற்படுத்தும் - முக்கிய மதிப்புகளை தவறுதலாக மாற்றுவதைத் தடுக்கும் - செயலியின் முழு காலத்திலும் மதிப்பு நிலையான வகையில் இருக்கும் ஒப்ஜெக்ட் குறிப்புரு பாதுகாக்கப்படுகிறது - பின்வரும் அனுமதிக்கப்படாது: ```javascript const obj = { a: 3 }; obj = { b: 5 } // அனுமதிக்கப்படாது ``` இந்த கருத்தை புரிந்து கொள்வது: - முழு ஒப்ஜெக்ட்டைப் புதியதுடன் மாற்றுவதை தடுக்கும் - அதே ஒப்ஜெக்ட் குறிப்பை பாதுகாக்கும் - நினைவகத்தில் ஒப்ஜெக்ட்டின் அடையாளத்தை பேணுகிறது ஒப்ஜெக்ட் உள்ளடக்கம் பாதுகாக்கப்படாது - பின்வரும் அனுமதிக்கப்படுகிறது: ```javascript const obj = { a: 3 }; obj.a = 5; // அனுமதி ``` இங்கே என்ன நடக்கும் என்பதைச் சீராக்குவது: - ஒப்ஜெக்டின் உள்ள பண்பின் மதிப்பை மாற்றுகிறது - அதே ஒப்ஜெக்ட் குறிப்பை வைத்திருக்கிறது - ஒப்ஜெக்ட்டின் உள்ளடக்கம் மாற்றக்கூடியதாலும் குறிப்பின் தன்மை நிலையானதுதான் என்பதைக் காட்டுகிறது > குறிப்பு: const என்பது குறிப்புரு மறுபAssignம் செய்யப்படாததை அர்த்தம். மதிப்பு _மாறாதது_ அல்ல, குறிப்பாக அது ஒப்ஜெக்ட் போன்றக் குறைந்த கட்டமைப்பாக இருந்தால், அது மாறலாம். ## தரவுத் தரவுகள் JavaScript தகவலை வெவ்வேறு வகை பகுதிகளாக ஒழுங்கமைக்கின்றது, அவற்றைக் கணவைத்த தரவுத் தரவுகள் எனக் கூறுபவர்களாகும். இது பண்டைய பண்டிதர்கள் அறிவியலைப் பிரித்து வகைப்படுத்திய முறையை ஒத்ததாகும் — ஆரிஸ்டாட்டில் வெவ்வேறு வகையான வாதங்களைப் பிரித்து கவிதை, கணிதம் மற்றும் இயற்கை தத்துவத்திற்கு ஒரே விதி பொருந்தாது எனக் கற்றுக்கொண்டார். தரவுத் தரவுகள் முக்கியம் ஏனெனில், வெவ்வேறு செயல்கள் வெவ்வேறு வகை தகவல்களுடன் வேலை செய்கின்றன. ஒருவரின் பெயருக்கு கணக்கீடு செய்ய முடியாதது போன்று, JavaScript ஒவ்வொரு செயற்கான செயலுக்கு பொருத்தமான தரவு வகையைத் தேவைப்படுத்துகிறது. இதை புரிந்து கொள்வது பிழைகளைத் தடுக்கும் மற்றும் உங்கள் குறியீட்டை நம்பகமாக்கும். மாறிலிகள் எண்ணிக்கை மற்றும் உரை போன்ற பலவித மதிப்புகளைச் சேமிக்க முடியும். இவ்வகையான ஒவ்வொரு மதிப்பும் ஒரு தரவுத் தரவாக அழைக்கப்படுகின்றது. தரவுத் தரவுகள் மென்பொருள் உத்தரவாதத்தில் முக்கிய பங்கு வகிக்கின்றன, ஏனெனில் இது உருவாக்குநர்களுக்கு நிரலை எவ்வாறு எழுத வேண்டும் என்பதையும் மென்பொருள் எப்படி இயங்க வேண்டும் என்பதையும் தீர்மானிக்க உதவுகிறது. மேலும் சில தரவுத் தரவுகளுக்கு தனிப்பட்ட அம்சங்கள் உள்ளன, அவை மதிப்புகளை மாற்ற அல்லது மேலதிக தகவலைப் பெற உதவுகின்றன. ✅ தரவுத் தரவுகள் JavaScript தரவு அடிப்படைக் கட்டங்களாகவும் அழைக்கப்படுகின்றன, ஏனெனில் இவை மொழியால் வழங்கப்படும் குறைந்தபட்ச தரவுத் தரவுகள் ஆகும். 7 அடிப்படை தரவுத் தரவுகள் உள்ளன: string, number, bigint, boolean, undefined, null மற்றும் symbol. ஒவ்வொரு அடிப்படைக் கலைபாடும் என்ன பொருள் கொண்டிருக்கலாம் என்று ஒரு நிமிடம் யோசிக்கவும். zebra என்றால் என்ன? 0 என்றால்? true? ### எண்கள் எண்கள் JavaScript இல் மிகவும் நேர்த்தியான தரவுத் தரவாகும். நீங்கள் முழு எண்களான 42, புள்ளி எண்களான 3.14, naan படிக வினாக்களின் மீதும் -5 போன்ற எண்களுடன் வேலை செய்கிறீர்களா, JavaScript இவை அனைத்தையும் ஒரே மாதிரியாக கையாள்கின்றது. நமது முன்பு இருந்த மாறிலியை நினைவுகூருங்கள்? நாம் சேமித்த 123 ஒரு எண் தரவுத் தரவாகவே இருந்தது: முக்கிய அம்சங்கள்: - JavaScript எண் மதிப்புகளை தானாக அறிகிறது - இந்த மாறிலிகளுடன் கணக்குப் பணிகளை செய்யலாம் - வகை அறிவிப்பு அவசியமில்லை மாறிலிகள் புள்ளியியல் எண்கள் மற்றும் எதிர்மறை எண்களையும் சேமிக்க ஆவணப்படுத்தலாம். எண்கள் கணக்கீடு இயக்கிகளுடன் பயன்படுத்தப்படலாம், இது அடுத்த பகுதி இல் விவரிக்கபடும். ### கணக்கிட்டல் இயக்கிகள் கணக்கிட்டல் இயக்கிகள் JavaScript இல் கணக்குப் பணிகளைச் செய்ய உதவுகின்றன. இந்த இயக்கிகள் நூற்றாண்டுகளாக கணிதவியலாளர்களால் பயன்படுத்தப்படும் ஒரு முறைபாடுகளை பின்பற்றுகின்றன – ஆல்கோரித்மி போன்ற அறிஞர் உருவாக்கிய கணித குறியீடுகளும் இதனுடன் சேர்ந்தவை. இயக்கிகள் பாரம்பரிய கணிதத்திலிருந்து எதிர்பார்த்தபடி இயங்குகின்றன: கூட்டல், கழித்தல் போன்றவைகள். கணக்கிட பயன்படுத்தப்படக்கூடிய டிப்யூட்டன்கள் சில இங்கே: ✅ முயற்சி செய்யுங்கள்! உலாவி மடியில் கணக்கிடும் செயல்பாட்டை முயற்சி செய்யவும். முடிவுகள் உங்களை ஆச்சரியப்படுத்துமா? ### 🧮 கணக்கு திறன்கள் சோதனை: நம்பிக்கையுடன் கணக்கிடுதல் கணக்கிடும் புரிதலைச் சோதிக்கவும்: - / (பிரிப்பு) மற்றும் % (மீதம்) இற்கு என்ன வித்தியாசம்? - 10 % 3 எவ்வளவு? (க் குறிப்பு: 3.33... அல்ல) - மீதம் இயக்கி நிரலாக்கத்தில் ஏன் பயனுள்ளதாக இருக்கும்? ### குறிகள் (Strings) JavaScript இல் உரை தரவு குறிகளாக வடிவமைக்கப்படுகிறது. "குறிகள்" என்ற சொல் என்றால் தொடர் எழுத்துக்கள் ஜோடி கட்டப்பட்டவை, நடுத்தரக்கால மடங்களின் நூலாசிரியர்கள் எழுத்துக்களை இணைத்து சொற்களையும் வாக்கியங்களையும் உருவாக்கியமை போல். குறிகள் வலைஉதவியில் அடிப்படையானவை. ஒரு வலைத்தளத்தில் காட்டப்படும் ஒவ்வொரு உரை பகுதியும் – பயனர் பெயர்கள், பட்டன் குறிச்சொற்கள், பிழை செய்திகள், உள்ளடக்கம் – குறி தரவாக கையாளப்படுகின்றது. குறிகளை புரிந்துகொள்வது செயற்கை பயன்பாட்டு இடைமுகங்களை உருவாக்க மிகவும் அவசியம். குறிகள் ஒற்றை அல்லது இரட்டைப் புள்ளிகள் இடையேயான எழுத்துக்கள் தொகுதிகளாகும். இந்த கருத்துகளைப் புரிந்துகொள்ளவும்: - குறிகளை உருவாக்க ஒரே ' ' அல்லது இரட்டைப் " " குறிகளைப் பயன்படுத்துகிறது - எழுத்துக்கள், எண்கள் மற்றும் சின்னங்கள் போன்ற உரைத் தரவுகளை சேமிக்கிறது - பிறகு பயன்படுத்த மாறிலிகளில் குறி மதிப்புகளை ஒதுக்குகிறது - உரை மற்றும் மாறிலியின் பெயரை வேறுபடுத்த குறிகள் அவசியம் ஒரு குறி எழுதும்போது குறிகளை பயன்படுத்த மறக்காதீர்கள், இல்லையென்றால் JavaScript அதை மாறிலியின் பெயராக கருதும். ### குறிகளை வடிவமைத்தல் குறி மேலாண்மை உரை கூறுகளை இணைத்து, மாறிலிகளை உட்படுத்து, மற்றும் நிகழ்ச்சி நிலைக்கு ஏற்ப மாறும் உள்ளடக்கம் உருவாக்க உதவும். இக்கலை மூலம் உரையை நிரலாக்க முறையில் கட்டமைக்க முடியும். பல குறிகளை ஒன்றாக சேர்க்க வேண்டிய போது – இதுவே இணைப்பாகும் (concatenation). concatenate இரண்டு அல்லது அதற்கு மேற்பட்ட strings-ஐ சேர்க்க அல்லது ஒன்றிணைக்க + இயக்கியைப் பயன்படுத்தவும். தொடர்ந்து என்ன நடக்கிறது என்பதை படிப்படியாகப் பார்க்கலாம்: - + இயக்கியைப் பயன்படுத்தி பல strings-ஐ சேர்க்கிறது - முதலாவது உதாரணத்தில் இடைவெளிகள் இல்லாமல் strings-ஐ நேரடியாக இணைக்கிறது - வாசிக்கும் வசதிக்காக strings-க்குள் இடைவெளி எழுத்துக்களை " " சேர்க்கிறது - சரியான வடிவமைப்பிற்காக தவில்கள் போன்ற வினாக்களைக் நுழைக்கிறது ✅ JavaScript-ல் ஏன் 1 + 1 = 2 ஆனாலும், '1' + '1' = 11 ஆகும்? சிந்தியுங்கள். '1' + 1 பற்றி என்ன? Template literals என்பது strings-ஐ வடிவமைப்பதற்கான மற்றொரு வழி, ஆனால் சொற்கள் ஆழியிடின் பதிலாக பின்தட்டு (backtick) பயன்படுத்தப்படுகிறது. சாதாரண உரை அல்லாத எதையாவது ${ } பிளேஸ்ஹோல்டர் உள்ளே வைக்க வேண்டும். இதில் string ஆக இருக்கக்கூடிய மாறிலிகள் அடங்கும். ஒவ்வொரு பகுதிக்கும் புரிந்துகொள்ளலாம்: - பொதுவான சொற்களின் பதிலாக பின்தட்டு ` `` பயன்படுத்தி template literals-ஐ உருவாக்குகிறது - ${} பிளேஸ்ஹோல்டர்ச் சூத்திரத்தைப் பயன்படுத்தி மாறிலிகளை நேரடியாக நுழைக்கிறது - இடைவெளிகள் மற்றும் வடிவமைப்பை எழுதியபடி துல்லியமாக பாதுகாக்கிறது - மாறிலிகளுடன் கூடிய சிக்கலான strings உருவாக்குவதற்கு சுத்தமான வழியை வழங்குகிறது இரண்டும் உங்கள் வடிவமைப்பு குறிக்கோள்களை அடைய முடியும், ஆனால் template literals இடைவெளி மற்றும் வரிச் மீட்புகளை மதிப்பளிக்கும். ✅ நீங்கள் எப்போது plain stringக்கு பதிலாக template literal-ஐப் பயன்படுத்துவீர்கள்? ### 🔤 String சம்பந்தமான திறனைச் சோதனை: உரை மாற்றும் நம்பிக்கை உங்கள் string திறன்களை மதிப்பிடுங்கள்: - ஏன் '1' + '1' என்பது 2 என்றால் அல்லாமல் '11' ஆகின்றது என்று விளக்க முடியுமா? - எந்த string முறையைப் பயன்படுத்துவது உங்களுக்கு வாசிக்க எளிதானது என்று தோன்றுகிறது: concatenate செய்வது அல்லது template literals? - ஒரு string-இன் சுற்றியுள்ள சொற்களை மறந்து விட்டால் என்ன நடக்கும்? ### பூலியன் (Booleans) பூலியன் என்றால் மிக எளிய தரவு வடிவமாகும்: அதன் மதிப்புகள் இரண்டு மட்டும் இருக்க முடியும் – true அல்லது false. இந்த இரட்டை தர்க்க அமைப்பு 19ஆம் நூற்றாண்டின் கணிதவியலாளர் ஜார்ஜ் பூல் George Boole-ரின் Boolean க்ரமவியல் வேலைக்கு அடிப்படையாக உள்ளது. எளிமையான போதிலும், பூலியன்கள் நிரலைக் கட்டுப்படுத்த முக்கியமானவை. பயனர் உள்நுழைந்துள்ளாரா, பொத்தான் அழுத்தப்பட்டுள்ளதா, அல்லது சில நிபந்தனைகள் பூர்த்தி செய்யப்பட்டுள்ளதா போன்ற நிலைகளின் அடிப்படையில் உங்கள் கோடு முடிவெடுக்க உதவுகின்றன. Boolean மதிப்புகள் true அல்லது false மட்டுமே இருக்க முடியும். Boolean புலங்கள் குறிப்பிட்ட நிபந்தனைகள் பூர்த்தி செய்யப்பட்டால் ஓட வேண்டிய கோட் வரிகளைத் தீர்மானிக்க உதவும். பல நேரங்களில் operators Boolean மதிப்பை அமைக்க உதவுகின்றன, மேலும் மாறிலிகளை ஆரம்பிக்க அல்லது அவர்களின் மதிப்புகளை மாற்றுவதற்கு நீங்கள் கட்டளைகளைப் பயன்படுத்துவது தெளிவாக காணப்படும். மேலே நாம் செய்துள்ளோம்: - Boolean மதிப்பான true-ஐ சேமிக்கும் ஒரு மாறிலை உருவாக்கியது - Boolean மதிப்பான false-ஐ சேமிப்பதைக் காண்பித்தது - true மற்றும் false என்ற துல்லியமான விசைப்பலகையைச் (keywords) பயன்படுத்தியது (சொற்களில்லை) - பின்விளைவுகளில் பயன்படுத்த இந்த மாறில்களை தயார் செய்தது ✅ ஒரு மாறி Boolean true ஆக மதிப்பாய்வின் போது 'truthy' எனக் கருதலாம். JavaScript இல் அனைத்து மதிப்புகளும் நினைவூட்டல் மதிப்பாக இல்லாத வரை truthy ஆக இருக்கின்றன என்பது கவனிக்க வேண்டும். ### 🎯 Boolean தர்க்க சோதனை: முடிவெடுக்க திறன் Boolean புரிதலைப் பரிசோதிக்க: - JavaScript-ல் true மற்றும் false தவிர “truthy” மற்றும் “falsy” மதிப்புகள் ஏன் உள்ளன என்று நினைக்கிறீர்களா? - இவற்றில் எந்தது falsy என்றும் கணிக்க முடியுமா: 0, "0", [], "false"? - Boolean-கள் நிரல் ஓட்டத்தை கட்டுப்படுத்த எப்படி உதவுகின்றன? --- ## 📊 உங்கள் தரவுத்தর வகைகள் கருவி தொகுப்பு சுருக்கம் ## GitHub Copilot ஏஜெண்ட் சவால் 🚀 அந்த ஜாவாஸ்கிரிப்ட் தரவுத்தர் வகைகளை பயன்படுத்தி ரியல்-படிமம் தரவுத் சூழ்நிலைகளை கையாளும் தனிப்பட்ட தகவல் மேலாளரை உருவாக்க இதைச் செய்யுங்கள்: விவரிப்பு: இந்த பாடத்தில் கற்ற ஜாவாஸ்கிரிப் தரவுத்தரம் வகைகளை எல்லாம் காட்டும் தனிப்பட்ட ப்ரொபைல் பொருளை உருவாக்கவும். அதில் ஆளுடைய பெயர் (string), வயது (number), மாணவர் நிலை (boolean), பிடித்த நிறங்கள் வரிசை (array), மற்றும் வீதி, நகரம், ZIP குறியீட்டை கொண்ட முகவரி பொருள் அடங்கும். ப்ரொபைல் தகவலைக் காட்டும் மற்றும் ஒவ்வொரு புலத்தையும் புதுப்பிக்கும் செயல்பாடுகளை சேர்க்கவும். string இணைப்பும், template literals, வயதுடன் கணிதசார் நடவடிக்கைகள் மற்றும் boolean நிலையை காட்டவும். agent mode பற்றி இங்கே அறிய ## 🚀 சவால் JavaScript-ல் சில செயல்பாடுகள் எழுதுபவர்களை ஆச்சரியப்படுத்தும். இதோ ஒரு பழமையான உதாரணம்: உலாவி கன்சோலில் typed செய்ய முயற்சிக்கவும்: let age = 1; let Age = 2; age == Age முடிவைப் பார். இது false திரும்பும் – ஏன் என கண்டுபிடிக்க முடிகிறதா? JavaScript-ன் இது போன்ற பல பண்புகளைப் புரிந்துகொள்வது நிரல் எழுதுவதையும் பிழைகளைத் தெளிவாக்குவதையும் எளிதாக்கும். ## பின்வரும் பாட Quiz பிறகு-பாட Quiz ## மதிப்பாய்வு மற்றும் சுயபயிற்சி இந்த JavaScript பயிற்ச்சிகள் பட்டியலை பாருங்கள் மற்றும் ஒன்றை முயற்சிக்கவும். என்ன கற்றீர்கள்? ## பணியமைப்பு தரவுத்தரம் பயிற்சி ## 🚀 உங்கள் JavaScript தரவுத்தரம் திறமை நேரவியல் ### ⚡ அடுத்த 5 நிமிடங்களில் செய்யவேண்டியது - [ ] உலாவி கன்சோலை திறந்து வேற்றுவேறு தரவுத்தரம் வகைகளுடன் 3 மாறிகளை உருவாக்கவும் - [ ] சவால்களைச் செய்க: let age = 1; let Age = 2; age == Age ஏன் false என்று கண்டுபிடிக்கவும் - [ ] உங்கள் பெயர் மற்றும் பிடித்த எண்ணுடன் string இணைப்பை பயிற்சி செய்யவும் - [ ] ஒரு string இனைப்பில் எண்ணைப் போட்டால் என்ன நடக்கும் என சோதிக்கவும் ### 🎯 இந்த மணிநேரத்தில் சாதிக்கவேண்டியது - [ ] பாடம் முடிந்த பின் Quiz-ஐ முடித்து குழப்பமான கருத்துக்களை மதிப்பாய்வு செய்யவும் - [ ] இரண்டு எண்கள் கூட்டுதல், கழித்தல், பெருக்கல், வகுத்தல் செய்யும் ஒரு சிறிய கணினியை உருவாக்கவும் - [ ] template literals பயன்படுத்தி ஒரு எளிய பெயர் வடிவமைப்பை உருவாக்கவும் - [ ] == மற்றும் === ஒப்பீட்டு இயக்கிகளின் வேறுபாடுகளை ஆராயவும் - [ ] வெவ்வேறு தரவுத்தரம் வகைகளுக்கு இடையில் மாற்றங்களை பயிற்சி செய்யவும் ### 📅 உங்கள் வாராந்திர JavaScript அடித்தளம் - [ ] பணியை நம்பிக்கையுடன் மற்றும் படைப்பாற்றலுடன் முடிக்கவும் - [ ] கற்றற்ற அனைத்து தரவுத்தரம் வகைகளையும் பயன்படுத்தி தனிப்பட்ட ப்ரொபைல் பொருள் உருவாக்கவும் - [ ] CSS-Tricks-இல் உள்ள JavaScript பயிற்சிகளுடன் பயிற்சி செய்யவும் - [ ] boolean தர்க்கத்தைப் பயன்படுத்தி எளிய படிவ சரிபார்ப்பாளரை உருவாக்கவும் - [ ] வரிசைகள் மற்றும் பொருள் தரவுத்தர வகைகளை ஆய்வு செய்யவும் (வரவிருக்கும் பாடங்களுக்கான முன்னோட்டம்) - [ ] JavaScript சமூகத்தில் சேர்ந்து தரவுத்தரம் எதுவென்று கேள்விகள் கேளுங்கள் ### 🌟 உங்கள் மாதாந்திர மாற்றம் - [ ] தரவுத்தரம் அறிவை பெரிய நிரல் திட்டங்களில் இணைக்கவும் - [ ] உண்மை பயன்பாடுகளில் எந்த தரவுத்திரம் எப்போது மற்றும் ஏன் பயன்படுத்த வேண்டும் என்பதை புரிந்து கொள்ளவும் - [ ] பிற துவக்கத்தைப் புரிந்து கொள்வவர்களுக்கு JavaScript அடிப்படைகளை விளக்க உதவவும் - [ ] பல வகையான பயனர் தரவுகளை நிர்வகிக்கும் சிறிய பயன்பாட்டை உருவாக்கவும் - [ ] type coercion மற்றும் கடுமையான சமத்துவம் போன்ற மேம்பட்ட தரவுத்தரம் கருத்துக்களை ஆராயவும் - [ ] ஆவணமயமாக்கல் மேம்பாடுகளுடன் திறந்த மூல JavaScript திட்டங்களுக்கு பங்களிக்கவும் ### 🧠 இறுதி தரவுத்தரம் திறன் சோதனை உங்கள் JavaScript அடித்தளத்தை கொண்டாடுங்கள்: - எந்த தரவுத்தர் அதன் நடத்தைக் கொண்டு உங்களை அதிகம் ஆச்சரியப்படுத்தியது? - மாறிலிகள் மற்றும் நிரந்தரங்களை நண்பருக்கு விளக்குவதில் எவ்வளவு நம்பிக்கையுடன் இருக்கிறீர்கள்? - JavaScript-ன் தரவுத்தரம் அமைப்புக்கான மிகச் சுவாரசியமான விஷயம் என்ன இருந்தது? - இந்த அடிப்படைகள் கொண்டு உருவாக்கக்கூடிய உண்மை உலக பயன்பாட்டை நீங்கள் எந்தெந்த வகையில் கற்பனை செய்கிறீர்கள்? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> அறிவிப்பு: இந்த ஆவணம் AI மொழிபெயர்ப்பு சேவை Co-op Translator பயன்படுத்தி மொழி மாற்றப்பட்டது. நாங்கள் துல்லியத்தை உறுதி செய்ய முயற்சித்தாலும், தானாக மொழிபெயர்ப்பு செய்துள்ளதால் பிழைகள் அல்லது தவறான தகவல்கள் இருக்க வாய்ப்பு உள்ளது. அசல் ஆவணம் அதன் சொந்த மொழியிலேயே அதிகாரப்பூர்வ ஆதாரமாகக் கருதப்பட வேண்டும். முக்கியமான தகவலுக்கு, தொழில்நுட்பமான மனித மொழிபெயர்ப்பை பரிந்துரைக்கிறோம். இந்த மொழிபெயர்ப்பால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பானவர்கள் அல்லோம். <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ஜாவாஸ்கிரிப்ட் அடிப்படைகள்: முறைகள் மற்றும் செயல்பாடுகள்

## முன்-விளக்கக்காட்சித் தேர்வு முன்-விளக்கக்காட்சித் தேர்வு அதே கோடுகளை மீண்டும் மீண்டும் எழுதுவது என்பது நிரலாக்கத்தில் மிக பொதுவான கோபக்காரணங்களில் ஒன்றாகும். செயல்பாடுகள் இந்த பிரச்சனையை தீர்க்கும் முறையாகும், அதாவது நீங்கள் கோடுகளை மீண்டும் பயன்படுத்தக்கூடிய தொகுதிகளாக தொகுக்க முடியும். ஹென்‌ரி போர்ட்டின் அசெம்ப்ளி லைன் மாற்றத்தை உருவாக்கிய விதமான பாகங்களாக செயல்பாடுகளை நினைத்துப் பாருங்கள் – ஒருமுறை நீங்கள் நம்பகமான கூறை உருவாக்கினால், அதை மீண்டும் மீண்டும் பழையதை மீண்டும் கட்டாமல் எந்த இடத்தில் வேண்டுமானாலும் பயன்படுத்தலாம். செயல்பாடுகள் உங்களுக்கு உங்கள் நிரலில் மறுபயன்படுத்தக்கூடிய வகையில் கோடு துண்டுக்களை தொகுத்துப் பயன்படுத்த அனுமதிக்கின்றன. அதே தத்தமையே ஓருகூட வைக்காமல் எல்லா இடங்களிலும் நகல் எடுத்து ஒட்டுவதற்குப் பதிலாக, நீங்கள் ஒருமுறை ஒரு செயல்பாட்டை உருவாக்கி அதைஎந்த நேரமும் அழைக்கலாம். இந்த அணுகுமுறை உங்கள் குறியீட்டைக் கட்டுப்படுத்தவும் புதுப்பிப்புகளை எளிதாக்கவும் உதவுகிறது. இந்த பாடத்தில், உங்கள் சொந்த செயல்பாடுகளை உருவாக்குவது எப்படி, அதற்கு தகவல்களை அளிப்பது மற்றும் பயனுள்ள முடிவுகளைப் பெறுவது பற்றி கற்கப் போகிறீர்கள். செயல்பாடுகளுக்கும் முறைகளுக்கும் இடையேயான வேறுபாட்டை அறிந்து கொள்வீர்கள், நவீன சினிமாஸ்தல் முறைகளை கற்றுக்கொள்வீர்கள் மற்றும் செயல்பாடுகள் எப்படி மற்ற செயல்பாடுகளுடன் இணைந்து செயல்படுகின்றன என்பதைக் காண்பீர்கள். நாம் இக்கான்செப்ட்களை படிப்படியாக கட்டியெழுப்புவோம். [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## செயல்பாடுகள் ஒரு செயல்பாடு என்பது ஒரு குறிப்பிட்ட பணியை செய்யும் தன்னைச் சூழ்ந்த குறியீட்டுத் தொகுதி ஆகும். இது தேவையான நேரத்தில் இயங்கக்கூடிய தர்க்கத்தை அடக்கி வைக்கிறது. உங்கள் நிரலில் ஒரே கோடுகளை பலமுறை எழுதுவதற்கு பதிலாக, அதை செயல்பாட்டில் தொகுத்து, உங்கள் குறியீட்டிற்கு ஏதேனும் நேரத்தில் அந்த செயல்பாட்டை அழைக்கலாம். இந்த முறையில் உங்கள் குறியீடு சுத்தமாகவும், புதுப்பிப்புகள் எளிதாகவும் இருக்கும். உங்கள் குறியீட்டுத் தொகுதியில் 20 விதமான இடங்களில் திருப்பு தர்க்கம் இருந்தால் அதை மாற்றுவது எப்படி சிரமம் என்பதைக் கவனியுங்கள். உங்கள் செயல்பாடுகளுக்கு சரியான விளக்கமான பெயர்கள் அளிப்பது அவசியம். நன்றாக பெயரிடப்பட்ட செயல்பாடு அதன் நோக்கத்தை தெளிவாகப் பயனாளருக்கு தெரிவிக்கும் – cancelTimer() என்ற பெயரைப் பார்த்தவுடன் அது என்ன செய்கிறது என்பதைக் கேளுங்கள், அதேபோல் ஒரு தெளிவான லேபிளுடன் கூடிய பொத்தானை நீங்கள் கிளிக் செய்தால் என்ன நடைபெறும் என்பதும் விரைவில் தெரியும். ## ஒரு செயல்பாட்டை உருவாக்கி அழைப்பது ஒரு செயல்பாட்டை எப்படி உருவாக்குவது என்று பார்ப்போம். சிந்தானை பின்வரும் வழியில் பின்பற்றுகிறது: இதை உடைத்துப் பார்க்கலாம்: - function என்ற சொல் JavaScriptக்கு "நான் ஒரு செயல்பாட்டை உருவாக்குகிறேன்!" என்று தெரிவிக்கும் - nameOfFunction இல் நீங்கள் உங்கள் செயல்பாட்டுக்கு விளக்கமான பெயரை வழங்குவீர்கள் - () கூற்று குறுக்கைகள் வழியாக நீங்கள் அளவுருக்களைச் சேர்க்கலாம் (இதற்கு விரைவில் வரும்) - {} குலுக்கை அட்டவணையில் நீங்கள் எழுத்து எழுதும் உண்மையான குறியீட்டை வைத்திருப்பீர்கள் பதிலளிக்கும் ஒரு எளிய வாழ்த்து செயல்பாட்டை உருவாக்குவோம்: இந்த செயல்பாடு "Hello, world!" எனக் கண்டுபிடித்து காணொளி அடங்குமிடத்தில் அச்சிடுகிறது. இதைப் பரிபார்த்த பின், தேவையான போது பலமுறை பயன்படுத்தலாம். உங்கள் செயல்பாட்டை இயக்க (அல்லது "அழைக்க") அதன் பெயரைத் தொடர்ந்து கூற்றுகளை எழுதுங்கள். JavaScript உங்கள் செயல்பாட்டை இதுவரை அழைக்க முன்பு அல்லது பின் வரிசையில் வரையலாம் – JavaScript இயந்திரம் இயக்கவுருவை கையாளும். இந்த கோடு வரி இயக்கும்போது, உங்கள் displayGreeting செயல்பாட்டிற்குள் உள்ள அனைத்து குறியீடும் இயங்கும், உங்கள் உலாவியில் "Hello, world!" என்பதை காணொளி பகுதியிலும் காணலாம். இதை மீண்டும் மீண்டும் அழைக்கலாம். ### 🧠 செயல்பாட்டு அடிப்படைகள் சோதனை: உங்கள் முதலாவது செயல்பாடுகளை கட்டமைத்தல் அடிப்படையான செயல்பாடுகள் பற்றி உங்கள் உணர்வை பாருங்கள்: - செயல்பாட்டின் வரையறைகளில் {} குலுக்கைகள் ஏன் பயன்படுத்துகிறோம்? - displayGreeting என்பதை () இல்லாமல் எழுதினால் என்ன நடக்கும்? - ஒரே செயல்பாட்டை பலமுறை அழைக்க விரும்பும் காரணம் என்ன? ### செயல்பாடு சிறந்த நடைமுறைகள் சில வழிச்சூழல்களைக் கீழே காண்க: - உங்கள் செயல்பாடுகளுக்கு தெளிவான, விளக்கமான பெயர்களைக் கொடுங்கள் – எதிர்கால நீங்களும் நன்றி கூறுவீர்கள்! - பல்லிணை சொற்களுக்கு camelCase பயன்படுத்துங்கள் (ตัวอย่างเช่น calculateTotal calculate_total என்பதற்குப் பதிலாக) - ஒவ்வொரு செயல்பாட்டும் ஒரு பணியைக் கவனிப்பதை மட்டும் செய்ய வைக்கவும் ## செயல்பாட்டுக்கு தகவல் வழங்கல் நம் displayGreeting செயல்பாடு எல்லாவற்றிற்கும் ஒன்றே "Hello, world!" காட்டும் மட்டுமே முடியும். அளவுருக்கள் (parameters) மூலம் நமக்கு செயல்பாடுகளை மேலும் சுழல்படுத்தக்கூடியதாகவும் பயனுள்ளதுமானதாக மாற்ற முடியும். அளவுருக்கள் என்பது செயல்பாட்டை ஒவ்வொரு முறையும் பயன்படுத்தும் போது வெவ்வேறு மதிப்புகளை இடம் கொடுக்கலாம் என்பதில் பிளேஸ்‌ஹோல்டர் மாதிரிகள் ஆகும். இதனால் ஒரே செயல்பாடு பல தடவைகளிலும் வெவ்வேறு தகவல்களுக்கு வேலை செய்யும். நீங்கள் செயல்பாட்டை வரையறுத்தப்பின் பரந்த வட்டாரத்தில் அளவுருக்களை வரிசைப்படுத்தி எழுதுகிறீர்கள், பல அளவுருக்களை பிரிக்க கம்மா பாவிக்கவும்: ஒவ்வொரு அளவுருவும் ஒரு பிளேஸ்‌ஹோல்டராக செயல்படும் – ஒருவர் உங்கள் செயல்பாட்டை அழைக்கும் போது அவை உள்ளிடப்படும் மதிப்புகளை வழங்குவார். நாம் வாழ்த்து செயல்பாட்டை ஒருவரின் பெயரை ஏற்றுக்கொள்ள மாற்றுவோம்: நாம் இங்கு பிணைக்கட்டிகள் (` `) மற்றும் ${}` ஐப் பயன்படுத்தி நேரடியாக பெயரை நமது செய்தியில் நுழைக்கின்றோம் – இதே 'template literal' என்று அழைக்கப்படுகிறது, மாறிலிகள் கலந்துசெய்யப்பட்ட பணிகளை எழுத சிறந்த வழியாக இது அமைகிறது. இப்போது நாம் இக்குழுவான செயல்பாட்டை அழைக்கும் பொழுது, எந்த பெயரையும் அனுப்பலாம்: JavaScript 'Christopher' என்ற சரத்தை name என்ற அளவுருவுக்கு ஒதுக்கி, தனிப்பட்ட செய்தி "Hello, Christopher!" உருவாக்குகிறது. ## இயல்புநிலை மதிப்புகள் சில அளவுருக்களை விருப்பமானதாக மாற்ற விரும்பினால்? அதற்கான வழி இயல்புநிலை மதிப்புகள்! நாம் வாழ்த்துச் சொல்லா வார்த்தையை தனிப்பயனாக்க அனுமதிக்க விரும்பினாலும், அவர்கள் குறிப்பிடாமல் விட்டோ, நாம் "Hello" என்பதைக் பயன்படுத்துவோம் என்றால்? வகுத்துக் கொள்ள இயல்புநிலை மதிப்புகளைப் பயன்படுத்து, அதில் = உடன் மதிப்புகளைக் கொடுங்கள்: இங்கே, name இன்னும் தேவையானதாக இருக்கிறது, ஆனால் salutation என்பதற்கு வித்தியாசமான வாழ்த்துச் சொல்லாக யாரும் தரவில்லை என்றால் 'Hello' என்பதை சரிவரப் பயன்படுத்தும். இவ்வாறு இந்த செயல்பாட்டை இரு விதமான முறைகளில் அழைக்கலாம்: முதலாவது அழைப்பில், salutation என்று குறிப்பிடாததால் JavaScript இயல்புநிலை "Hello" ஐப் பயன்படுத்துகிறது. இரண்டாவது அழைப்பில், தனிப்பயன் "Hi" பயன்படுத்தப்படுகிறது. இந்த மாறுபாடுகள் செயல்பாடுகளை பல்வேறு சூழலுக்கு ஏற்றவாறு மாற்றுகிறது. ### 🎛️ அளவுருக்கள் தேர்ச்சி சோதனை: செயல்பாடுகளை சுழல்படுத்துவது உங்கள் அளவுரு புரிதலை சோதியுங்கள்: - அளவுரு மற்றும் வாதம் (argument) இடையேயான வேறுபாடு என்ன? - இயல்புநிலை மதிப்புகள் உண்மையான நிரலாக்கத்தில் எப்படி பயனுள்ளதாக இருக்கின்றன? - அளவுருக்களைவிட அதிகமான வாதங்களை நீங்கள் அனுப்பினால் என்ன நடைபெறும் என்று நீங்கள் கணிக்கலாமா? ## மதிப்புகளை திருப்பி அனுப்பல் இன்னும் வரை நம் செயல்பாடுகள் வெறும் காணொளியில் செய்திகளை அச்சிடும் மட்டுமே செய்ததாக இருந்தாலும், நீங்கள் ஒரு செயல் செய்யும் செயல்பாட்டை உருவாக்கி அதன் முடிவை மீண்டும் பெற விரும்பினால்? இதற்கு திருப்பி அனுப்பும் மதிப்புகள் உண்டு. வெறும் காணொளியில் அச்சிடுவதைவிட, ஒரு செயல்பாடு மதிப்பை திரும்ப அனுப்ப முடியும், அப்படின்னால் அதனை ஒரு மாறிலியில் சேமிக்க முடியும் அல்லது உங்கள் குறியீட்டின் பிற பகுதிகளில் பயன்படுத்தலாம். ஒரு மதிப்பை மீண்டும் அனுப்ப return என்ற முக்கிய சொல்லை பயன்படுத்தி பின்னர் நீங்கள் திருப்பி அனுப்ப விரும்பும் மதிப்பை கொடுங்கள்: இது முக்கியம்: ஒரு செயல்பாடு return பகுதியைச் சென்றவுடன் உடனடியாக நிறுத்தி, அந்த மதிப்பை அழைக்க நினைத்தவருக்கு அனுப்புகிறது. நமது வாழ்த்து செயல்பாட்டை மாற்றி செய்தியைக் காணொளியில் அச்சிடுவதற்குப் பதிலாக அதைத் திருப்பி அனுப்பும் படி செய்வோம்: இப்போது வாழ்த்து அச்சிடும் பதிலாக, இந்த செயல்பாடு செய்தியை உருவாக்கி அதைத் திரும்ப அனுப்புகிறது. திருப்பி பெறப்பட்ட மதிப்பை பயன்படுத்த, அதியனை ஒரு மாறிலியில் சேமிக்கலாம் மற்ற மதிப்புகளுடன் போல: இப்போது greetingMessage என்பது "Hello, Christopher" என்பதை உடையது, இதைப் பக்கவழிப் பயன்படுத்து, ஒரு இமெயிலில் பயன்படுத்தி அல்லது மற்றொரு செயல்பாட்டுக்கு அனுப்பலாம். ### 🔄 திருப்பி அனுப்பும் மதிப்புகளைப் பார்வையிடல் நீங்கள் உங்கள் திருப்பி அனுப்பும் மதிப்பை எவ்வாறு புரிந்துகொள்கிறீர்கள் என்பதை மதிப்பிடுங்கள்: - return என்பதற்குப் பிறகு செயல்பாட்டின் குறியீட்டிற்கு என்ன நடக்கிறது? - மதிப்புகளைச் திருப்பி அனுப்புவது காணொளியில் அச்சிடுவதைவிட ஏன் சிறந்தது? - ஒரு செயல்பாடு வெவ்வேறு வகையான மதிப்புகளை (சரங்கள், எண்கள், பூலியன்) திருப்பிக் கொடுக்குமா? ## செயல்பாடுகளை மற்ற செயல்பாடுகளுக்கு அளவுருக்கள் போல அனுப்புதல் செயல்பாடுகள் மற்ற செயல்பாடுகளில் அளவுரு போல அனுப்பப்படலாம். இது முதலில் சிரமமாகத் தோன்றலாம், ஆனால் இது மிகவும் சக்திவாய்ந்த அம்சமாகும் மற்றும் மென்மைமிக்க நிரலாக்க மாதிரிகளை எளிதாக்குகிறது. இந்த முறை மிகப் பொதுவானது "ஏதேனும் ஒன்று நிகழும்போது, இந்த வேறு ஒன்றை செய்" என்ற நிலையை உருவாக்குவதாகும். உதாரணமாக, "டைமர் முடிந்த போது இந்த குறியீட்டை இயக்கு" அல்லது "பயனர் பொத்தானை கிளிக் செய்தால் இந்த செயல்பாட்டை அழைக்கவும்." setTimeout என்னும் மரபூகமுறை செயல்பாடு குறிப்பிட்ட சில நேரம் காத்திருந்து பின்னர் குறியீட்டை இயக்கும். அதிபதாக, அதை இயக்குவதற்கான குறியீட்டை நாம் கூற வேண்டியது அவசியம் – இது செயல்பாட்டை அனுப்பும் ஒரு சரியான பயன்படுத்தல்! இந்த குறியீட்டை முயற்சிக்கவும் – 3 விநாடிகளுக்குப் பிறகு நீங்கள் ஒரு செய்தியை காண்பீர்கள்: நாம் displayDone ஐ ( ) இல்லாமல் setTimeoutக்கு அனுப்புகிறோம் என்பதை கவனியுங்கள். நாங்கள் அதனை நேரடியாக அழைக்காமல், setTimeoutக்கு "3 விநாடிகளில் இதை அழை" எனக் கூறி உள்ளது. ### பெயர் இல்லா (Anonymous) செயல்பாடுகள் இனிமேல் கீழாண்மை மற்றும் மீண்டும் பயன்படுத்த வேண்டாமெனின் செயல்பாடு ஒன்று ஒன்றுக்கு பெயர் வேண்டாமென நினைக்கலாம். அதிகம் பயன்படுத்தாவிட்டாலும் ஒரு செயல்பாட்டை உருவாக்குவதற்கு ஏற்புடையது. JavaScript உங்களுக்கு அயனோனிமஸ் செயல்பாடுகள் (பெயர் இல்லா செயல்பாடுகள்) உருவாக்க அனுமதிக்கிறது – இடத்தில் எழுதக்கூடிய அதன் பெயர் இல்லாத செயல்பாடுகள். இதை எப்படி செய்யலாம் என்பதை கீழ்க்காணும் டைமர் எடுத்துக்காட்டில் பார்ப்போம்: இதே முடிவைக் கொடுக்கிறது, ஆனால் செயல்பாடு நேரடியாக setTimeout அழைப்பில் வரையறுக்கப்பட்டுள்ளது, தனிப்பட்ட செயல்பாடு குறிப்பேற்றம் தேவை இல்லை. ### தான் விலாச (Fat arrow) செயல்பாடுகள் நவீன JavaScript இல் செயல்பாடுகளை எழுத இன்னும் குறும்பட வழி உள்ளது, அது அவுட் அம்புத்துள் (arrow) செயல்பாடுகள். இது => ஐப் பயன்படுத்துகிறது (அம்பு போன்றது) மற்றும் அபிவிருத்தியாளர்கள் இடையே மிகப் பிரபலமாக இருக்கிறது. அம்புத்துள் செயல்பாடுகள் function என்ற சொல்லை விட்டு விட்டு குறுந்தகடு குறியீட்டை எழுத அனுமதிக்கின்றன. கீழே நமது டைமர் எடுத்துக்காட்டை அவுட் அம்புத்துள் செயல்பாடாக மாற்றியுள்ளோம்: () இங்கே அளவுருக்கள் செல்லும் இடம் (இங்கு காலியாக உள்ளது), பின்னர் அம்பு => வருகிறது, அடுத்து செயல்பாட்டு உடல் {} உள்ளடக்கப்பட்டுள்ளது. இது குறும்படப்பட்ட மேம்படுத்திய சிந்தனையை அட்டவணையாக்கிறது. ### எப்போது எந்த முறையை பயன்படுத்துவது எப்போது எது பயன்படுத்துவது? ஒரு நடைமுறை வழிகாட்டி: நீங்கள் செயல்பாட்டை பல முறை பயன்படுத்தப்போகிறீர்களானால், ஒரு பெயர் கொடுத்து தனித்து வரையறுக்கவும். ஒரு குறிப்பிட்ட ஒரு பயன்பாட்டுக்கு என்று இருந்தால் பெயர் இல்லா செயல்பாட்டைப் பயன்படுத்தும். அவுட் அம்புத்துள் மற்றும் பாரம்பரிய வழிமுறைகள் இரண்டும் செல்லுபடியாகும், ஆனால் நவீன JavaScript குறியீட்டில் அவுட் அம்புத்துள் செயல்பாடுகள் அதிகம் உள்ளது. ### 🎨 செயல்பாட்டு முறைகள் தேர்ச்சி சோதனை: சரியான கொண்டாட்டத்தைத் தேர்ந்தெடுக்கவும் உங்கள் சிந்தனை சோதனை: - பாரம்பரிய செயல்பாடுகளுக்கு பதிலாக அவுட் அம்புத்துள் செயல்பாடுகளை நிறுத்த விரும்பும் சூழல் எது? - பெயர் இல்லா செயல்பாடுகளுக்கு முதன்மை நன்மை என்ன? - ஒரு பெயர் கொண்ட செயல்பாடு பெயர் இல்லா ஒன்றைக் விட ஏன் சிறந்தது என்று எண்ணக்கூடிய நேரம் எது? --- ## 🚀 சவால் செயல்பாடுகள் மற்றும் முறைகளுக்கு இடையேயான வேறுபாட்டை ஒரு வாக்கியத்தில் விளக்க முடியுமா? முயற்சி செய்க! ## GitHub Copilot ஏஜென்ட் சவால் 🚀 ஏஜென்ட் முறையில் கீழ்க்காணும் சவால்களை நிறைவேற்றவும்: விளக்கம்: இதுவரை கற்ற செயல்பாடு கருத்துக்களை எடுத்துக்காட்டு, அளவுருக்கள், இயல்புநிலை மதிப்புகள், திருப்பி அனுப்பல் மதிப்புகள் மற்றும் அவுட் அம்புத்துள் செயல்பாடுகள் அடங்கிய கணித நடவடிக்கைகளுக்கான பயன்பாடு நூலகத்தை உருவாக்கவும். முயற்சி: mathUtils.js என்ற ஜாவாஸ்கிரிப்ட் கோப்பை உருவாக்கவும், அதில் பின்வரும் செயல்பாடுகள் இருக்க வேண்டும்: 1. இரண்டு அளவுருக்களை எடுத்துக் கொண்டு அவற்றின் கூட்டைத் திருப்பி அனுப்பும் add செயல்பாடு 2. இயல்புநிலை மதிப்புதுகளுடன் (இரண்டாம் அளவுரு இயல்பாக 1) multiply செயல்பாடு 3. ஒரு எண்ணை எடுத்துக் கொண்டு அதன் விரிவை திருப்பி அனுப்பும் அம்புத்துள் செயல்பாடு square 4. மற்றொரு செயல்பாட்டை அளவுரு ஆகக் கொண்டு, இரண்டு எண்களில் செயல்பாட்டை செயல்படுத்தும் calculate செயல்பாடு 5. ஒவ்வொரு செயல்பாடையும் பரிசோதனை வழக்குகளுடன் அழைக்கக் காட்டுதல் agent mode பற்றி மேலதிகமாக அறியவும். ## பிந்தைய விளக்கக்காட்சித் தேர்வு பிந்தைய விளக்கக்காட்சித் தேர்வு ## மதிப்பாய்வு மற்றும் தனிப்பயிற்சி அவுட் அம்புத்துள் செயல்பாடுகள் குறித்த மேலும் வாசிக்கவும் அது குறியீட்டு தளங்களில் நிறைவாக பயன்படுகிறது என்பதால். ஒரு செயல்பாட்டை எழுதவும், பின்னர் அந்த செயல்பாட்டைப் பயன்படுத்தி உள்ளாவது மாற்றத்துடன் மறுபடியும் எழுதுவதற்கும் பயிற்சி மேற்கொள்ளவும். ## பணிகள் செயல்பாடுகளுடன் விளையாடு --- ## 🧰 உங்கள் ஜாவாஸ்கிரிப்ட் செயல்பாடுகளுக்கான கருவி தொகுப்பு சுருக்கம் --- ## 🚀 உங்கள் ஜாவாஸ்கிரிப்ட் செயல்பாடுகள் தேர்ச்சி காலவரிசை ### ⚡ அடுத்த 5 நிமிடங்களில் நீங்கள் செய்யக்கூடியவை - [ ] உங்கள் விருப்பமான எண்ணை திருப்பிச் சொல்லும் எளிய செயல்பாட்டை எழுதுங்கள் - [ ] இரண்டு அளவுருக்களுடன் அதைச் சேர்க்கும் செயல்பாட்டை உருவாக்குங்கள் - [ ] பாரம்பரிய செயல்பாட்டை அம்பு செயல்பாடு இலக்கியத்தில் மாற்ற முயற்சி செய்க - [ ] சவாலுக்கு பயிற்சி செய்யவும்: செயல்பாடுகள் மற்றும் முறைகளுக்கு இடையேயான வேறுபாட்டை விளக்கவும் ### 🎯 இந்த மணித்தியாலத்தில் நீங்கள் சாதிக்கக்கூடியவை - [ ] பாடம் முடிந்த பின் வினாடி வினா நுழைவையும் குழப்பமாக இருந்த கருத்துக்களை மீண்டும் பார்வையிடவும் - [ ] GitHub Copilot சவாலிலிருந்து கணித உதவிக் கருவி நூலகத்தை கட்டமைக்கவும் - [ ] மற்றொரு செயல்பாட்டை அளவுருவாக பயன்படுத்தும் செயல்பாட்டை உருவாக்கவும் - [ ] இயல்புநிலை அளவுருக்கள் உடன் செயல்பாடுகள் எழுதும் பயிற்சியைச் செய்யவும் - [ ] செயல்பாட்டின் மீள்நிலை மதிப்புகளில் டெம்பிளேட் இலக்கணங்களை முயற்சி செய்யவும் ### 📅 உங்கள் ஒரு வார நீடித்த செயல்பாட்டு தேர்ச்சிக் காரியம் - [ ] "செயல்பாடுகளுடன் மகிழ்ச்சி" பணியை படைப்பாற்றலுடன் முடிக்கவும் - [ ] நீங்கள் எழுதின மீண்டும் பயன்படுத்தக்கூடிய செயல்பாடுகளாக சில திரும்ப வரும் குறியீடுகளை மறுசீரமைக்கவும் - [ ] சாதாரண செயல்பாடுகளை மட்டுமே பயன்படுத்தி சிறிய கணிதக்கருவி ஒன்று கட்டமைக்கவும் (உலகளாவிய மாறிகள் இல்லாமல்) - [ ] map() மற்றும் filter() போன்ற தொகுப்புப் முறைகளுடன் அம்பு செயல்பாடுகளை பயிற்சி செய்யவும் - [ ] பொதுவான பணிகளுக்கான உதவிக் கருவி செயல்பாடுகளின் கூராமணி ஒன்றை உருவாக்கவும் - [ ] உயர்-தர செயல்பாடுகள் மற்றும் செயல்பாட்டிய கணினி கான்செப்டுகளை படிக்கவும் ### 🌟 உங்கள் ஒரு மாத நீடித்த மாற்றம் - [ ] மூடல் மற்றும் பரப்பளவு போன்ற மேம்பட்ட செயல்பாட்டு கருத்துக்களை உத்தருந்த செல்லவும் - [ ] செயல்பாட்டு இணைப்பை மிகுந்து பயன்படுத்தும் ஒரு திட்டத்தை கட்டமைக்கவும் - [ ] செயல்பாட்டு ஆவணவற்றை மேம்படுத்த எளிய ஆதரவுக் கொடுப்பதில் பங்கு கொடுக்கவும் - [ ] மற்றவர்களுக்கு செயல்பாடுகள் மற்றும் வெவ்வேறு இலக்கிய அசைவுகளைக் கற்பிக்கவும் - [ ] ஜாவாஸ்கிரிப்டில் செயல்பாட்டிய கணினி நடைமுறைகளை ஆராயவும் - [ ] எதிர்காலத் திட்டங்களுக்கு திரும்ப பயன்படுத்தக்கூடிய தனிப்பட்ட செயல்பாட்டு நூலகத்தை உருவாக்கவும் ### 🏆 இறுதி செயல்பாட்டு சாம்பியன் பரிசோதனை உங்கள் செயல்பாட்டு தேர்ச்சியை கொண்டாடுங்கள்: - இதுவரை நீங்கள் உருவாக்கிய மிகவும் பயனுள்ள செயல்பாடு என்ன? - செயல்பாடுகள் பற்றி கற்றுக்கொண்டது உங்கள் குறியீட்டுத் தொகுப்புப்பாணியை எப்படி மாற்றியது? - எது செயல்பாட்டு இலக்கியத்தை நீங்கள் விரும்புகிறீர்கள் மற்றும் ஏன்? - ஒரு செயல்பாட்டை எழுதுவதன் மூலம் நீங்கள் எதுபற்றிய யதார்த்த பிரச்சனையை தீர்க்கப்போகிறீர்கள்? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> புறக்கணிப்பு: இந்த ஆவணத்தை Co-op Translator என்ற செயற்கை நுண்ணறிவு மொழிபெயர்ப்பு சேவையை பயன்படுத்தி மொழிமாற்றம் செய்துள்ளோம். துல்லியத்துக்காக முயற்சித்தாலும், தானாக செய்யப்பட்ட மொழிபெயர்ப்புகள் தவறுகள் அல்லது பிழைகள் இருக்கக்கூடும் என்பதைக் கவனத்தில் கொள்ளவும். அசல் ஆவணம் அதன் மூல மொழியில் அங்கீகாரம் பெற்ற ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்காக, தொழில்முறை மனித மொழிபெயர்ப்பை பரிந்துரைக்கின்றோம். இந்த மொழிபெயர்ப்பின் பயன்பாட்டினால் ஏற்படும் எந்த தவறுணர்வுகளுக்கும் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பு ஏற்க முடியாது. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

JavaScript அடிப்படைகள்: முடிவெடுப்பது

நீங்கள் ஏதாவது செயலிகள் எப்படி புத்திசாலித்தனமாக முடிவெடுக்கின்றன என்று ஆச்சரியப்பட்டிருக்கிறீர்களா? ஒரு வழிப்படுத்தும் அமைப்பு எவ்வாறு வேகமான பாதையை தேர்வு செய்கிறது, அல்லது ஒரு தார்மோஸ்டேட் எப்போது கம்பம் அடைக்க வேண்டும் என்று எவ்வாறு முடிவு செய்கிறது? இது நிரலாக்கத்தில் முடிவெடுக்கும் அடிப்படைக் கருத்து. சார்ல்ஸ் பாபேஜின் அனாலிடிகல் இன்ஜின் விதிகள் மற்றும் சூழல்களுக்கு ஏற்ப வேறுபட்ட செயல்பாட்டுக் கூறுகளை பின்பற்ற உருவாக்கப்பட்டபோல், நவீன JavaScript சோதனைகள் மாறுபட்ட சூழ்நிலைகளின் அடிப்படையில் தேர்வுகளை மேற்கொள்ள வேண்டும். இந்த கிளைபிரிவு மற்றும் முடிவெடுக்கும் திறன்தான் நிலையான குறியீட்டை பதிலளிக்கும், புத்திசாலி செயலிகளாக மாற்றுகிறது. இந்த பாடத்தில், உங்கள் நிரல்களில் நிபந்தனை முறைசெய்யலைப் பயன்படுத்த எப்படி என்று கற்கப்போகின்றீர்கள். நிபந்தனை கூற்றுக்கள், ஒப்பிடும் இயக்கிகள், மற்றும் தர்க்கமான வெளிப்பாடுகளை ஆராய்வோம், அவைகள் உங்கள் குறியீட்டுக்கு நிலைகளை மதிப்பீடு செய்து, சரியான முறையில் பதிலளிக்க உதவும். ## முன்-பாடப் போட்டி முன்-பாடப் போட்டி முடிவெடுப்பில் திறன் மற்றும் நிரல் ஓட்டத்தை கட்டுப்படுத்தல் என்பது நிரலாக்கத்தின் அடிப்படைக் கூறாகும். இந்த பகுதி Boolean மதிப்புகள் மற்றும் நிபந்தனை முறைசெய்யலை பயன்படுத்தி உங்கள் JavaScript நிகழ்காலந்தங்களின் செயல்பாட்டு பாதையை கட்டுப்படுத்துவது எப்படி என்பதை விளக்குகிறது. [](https://youtube.com/watch?v=SxTp8j-fMMY "உறுப்புகளைச் செய்யுதல்") ## Boolean பற்றி ஒரு சுருக்கமான விமர்சனம் முடிவெடுப்பை ஆராய்வதற்கு முன், முந்தைய பாடத்தில் கற்ற Boolean மதிப்புகளை மீண்டும் பார்க்கலாம். கணிதவியலாளர் ஜார்ஜ் பூல் அவர்களின் பெயரை பயன் படுத்தி, இவை இரண்டுகோடான நிலைகளைக் குறிக்கும் - true அல்லது false. இடைநிலை தவிர வேறெதுவும் இல்லை. இந்த இரு நிலைகள் அனைத்து கணினி தர்க்கத்தின் அடித்தளம் ஆகின்றன. உங்கள் நிரல் எதுவும் முடிவுகளை எப்போதும் Boolean மதிப்பிற்கு அழுத்துகிறது. Boolean மாறிகளைக் உருவாக்குவது எளிது: இது இரண்டு Boolean மதிப்புகள் உடைய மாறிகள் உருவாக்குகிறது. ✅ Boolean என்பதற்கு பெயர் பெற்றவர் ஆங்கிலக் கணிதவியலாளர், தத்துவஞானி மற்றும் தர்க்கவியலாளர் ஜார்ஜ் பூல் (1815–1864). ## ஒப்பிடும் இயக்கிகள் மற்றும் Boolean நீங்கள் வழக்கமாக Boolean மதிப்புகளை கையால் அமைக்க மாட்டீர்கள். அதற்கு பதிலாக, நிபந்தனைகளை மதிப்பீடு செய்வதன் மூலம் அவை உருவாகின்றன: "இந்த எண் அந்த எண்ணைக் கொண்டுவிடுமா?" அல்லது "இந்த மதிப்புகள் இணையாக உள்ளனவா?" ஒப்பீட்டு இயக்கிகள் இந்த மதிப்பீடுகளை செய்ய உதவுகின்றன. அவை மதிப்புகளை ஒப்பிட்டு, operand இலக ஆல் சார்ந்த Boolean முடிவுகளை நியமிக்கின்றன. ✅ உங்களுடைய அறிவை உலாவியில் சில ஒப்பீட்டுக்களை எழுதிப் பார்க்கவும். எந்தவொரு தரவும் உங்களுக்கு ஆச்சரியமளிக்கிறதா? ### 🧠 ஒப்பீட்டு தேர்ச்சி: Boolean தர்க்கத்தை புரிந்துகொள்ளுதல் உங்கள் ஒப்பீட்டை சோதிக்கவும்: - பொதுவாக == (தடைசாரா சமம்) விட === (கடுமையான சமம்) கேள்வி ஏன் மீண்டும் முன்னுரிமைக்குரியது என்று நினைக்கிறீர்கள்? - 5 === '5' எந்தப் பதிலை தரும் என்று கணிக்க முடியுமா? 5 == '5' என்பது? - !== மற்றும் != என்பதினால் என்ன வித்தியாசம் உள்ளது? ## If கூற்று if கூற்று உங்கள் குறியீட்டில் ஒரு கேள்வியை கேட்கும் போல உள்ளது: "இந்த நிபந்தனை சரியானால், இதை செய்யவும்." JavaScript இல் முடிவெடுப்பதற்கான மிக முக்கியமான கருவியாக இது இருக்கிறது. இது எப்படி இயங்குகிறது: நிபந்தனை மரபான உள்ளே வைக்கும், அது true ஆக இருந்தால், JavaScript வளையுள்ள அடுக்கில் உள்ள குறியீட்டை ஓட்டும். false என்றால், அந்த தொகுதியை தவிர்க்கும். இந்த நிபந்தனைகளை உருவாக்க ஒப்பீட்டு இயக்கிகள் பயன்படுத்துவீர்கள். ஒரு நடைமுறை உதாரணம் பார்ப்போம்: 1000 >= 800 என்பது true என்பதினால், அந்த தொகுதியின் உள்ளடக்கம் இயக்கப்படுகிறது, "புதிதாக ஒரு லேப்டாப்பை வாங்குதல்!" என்று கான்ஸோலில் காட்டப்படுகிறது. ## If..Else கூற்று ஆனாலும், நிபந்தனை தவறான போது உங்கள் நிரல் வேறு ஒன்றை செய்யவேண்டும் என்றால்? அப்போது else பயன்படும் – இது ஒரு போலியாக பிளான் உள்ளது. else கூற்று "இந்த நிபந்தனை தவறு என்றால், இதை செய்யவும்" என்று சொல்ல உதவுகிறது. இப்போது கண்டு கொள்ளுங்கள் 500 >= 800 என்பது false. எனவே JavaScript முதல் தொகுதியை தவிர்த்து, else தொகுதியை இயக்குகிறது. நீங்கள் கான்ஸோலில் "புதிதாக ஒரு லேப்டாப்பை வாங்க இயலாது, இன்னும்!" என்பதைப் பார்வையிடுவீர்கள். ✅ இந்த குறியீட்டை browser console இல் இயக்கிப் பாருங்கள். currentMoney மற்றும் laptopPrice என்ற மாறி மதிப்புகளை மாற்றி, வெறும் console.log() வெளியீட்டை மாற்ற முடியும். ### 🎯 If-Else தர்க்கக் கண்காணிப்பு: கிளைபிரிவுகள் நிபந்தனை தர்க்கத்தை சோதிக்கவும்: - currentMoney மற்றும் laptopPrice சமமாவதின் போது என்ன நடக்கும்? - உண்மைச் சூழ்நிலையில் if-else தர்க்கம் எங்கு பயனுள்ளதாக இருக்கும்? - பல விலையில் நிலைகளை எப்படி விரிவாக்கிக்கொள்ள முடியும்? ## Switch கூற்று ஒரு மதிப்பை பல விருப்பங்களுக்கு ஒப்பிட வேண்டிய நேரங்களில். நீங்கள் பல if..else statements ஐச் சரணாக்களை பிரித்து பாவித்து நேரத்தை அழிக்கலாம். சுவிட்ச் கூற்று பல தனித்த விருப்பங்களை மேலும் சுத்தமாக நிர்வகிக்க உதவும். இதுபோன்றது முதன்முதலில் தொலைபேசி பரிமாற்றங்களில் பயன்படுத்தப்படும் இயந்திர மாற்றும் முறைமை போல – ஒரே உள்ளீட்டு மதிப்பு எதுவென்று என்பதை கண்டுபிடித்து அந்த பாதையை தேர்வு செய்கிறது. இது எப்படி அமைக்கப்பட்டுள்ளது: - JavaScript பகுப்பாய்வை ஒருமுறை செய்கிறது - ஒவ்வொரு case ஐ பொருத்தி தேடுகிறது - பொருத்தம் கிடைத்தால் அதை இயக்குகிறது - break JavaScript ஐ நிறுத்தி சுவிட்ச் இருந்து வெளியேற்றுகிறது - பொருத்தம் இல்லாதால் default தொகுதியை இயக்கும் (உடனிருந்தால்) இந்த உதாரணத்தில், JavaScript dayNumber ஐ 2 என்றும் பார்க்கிறது, அதனால் பொருத்தப்பட்ட case 2 ஐ கண்டுபிடித்து dayName ஐ "செவ்வாய்" என அமைக்கிறது, பின்னர் சுவிட்ச் இருந்து வெளியேறும். விளைவாக கான்ஸோலில் "இன்று செவ்வாய்" என்பதைக் காணலாம். ✅ இந்த குறியீட்டையும் கீழ்க்காணும் குறியீட்டையும் browser console இல் இயக்கிப் பாருங்கள். a மாறியின் மதிப்பை மாற்றி console.log() வெளியீட்டை மாற்றிக்கொள்ளவும். ### 🔄 Switch கூற்று தேர்ச்சி: பல விருப்புகள் நீங்கள் switch விளக்கத்தைச் சோதிக்கவும்: - break குறித்து மறந்தால் என்ன நடக்கும்? - பல if-else statements மாற்றாக 언제 switch ஐப் பயன்படுத்துவது? - உங்கள் எல்லா வாய்ப்புகளையும் மீட்டுக்கொண்டாலும் default வழக்கு எப்படி பயனுள்ளதாக இருக்கும்? ## தர்க்க ஒப்பீடு இயக்கிகள் மற்றும் Boolean சிக்கலான முடிவுகள் பல நிபந்தனைகளை ஒரே நேரத்தில் மதிப்பீடு செய்ய தேவைப்படுகிறது. Boolean புவி கணிதவியலாளர்கள் தர்க்க வெளிப்பாடுகளை இணைக்கும் போல, நிரலாக்கத்தில் தர்க்க இயக்கிகள் பயன்படுகிறது. இதுவே சிக்கலான நிபந்தனை தர்க்கத்தை உருவாக்கும், எளிய true/false மதிப்பீடுகளை கூட்டுகின்றது. இந்த இயக்கிகள் நிபந்தனைகளை பயனுள்ள வழிகளில் இணைக்க உதவுகிறது: - AND (&&) என்று இரண்டும் true ஆக வேண்டியது - OR (||) என்று குறைந்தது ஒன்று true ஆகவேண்டும் - NOT (!) எனில் true ஐ false ஆக மாற்றுதல் (மற்றும் அதற்குப் பின்) ## தர்க்க இயக்கிகளுடன் நிபந்தனைகள் மற்றும் முடிவுகள் இப்போது இந்த செயற்கூறுகளுக்கு ஒரு நம்பகமான உதாரணத்தில் பார்க்கலாம்: இந்த உதாரணத்தில்: நாம் ஒரு 20% தள்ளுபடி விலையை (640) கணக்கிடுகின்றோம், பின்னர் முழு விலை அல்லது தள்ளுபடி விலை கொடுக்கப்படும் பணம் போதுமானதா என்று மதிப்பீடு செய்கின்றோம். 600 பழுது தள்ளுபடி விலைக்கு கீழானதால், நிபந்தனை true ஆக மதிப்பிடப்படுகிறது. ### 🧮 தர்க்க இயக்கிகள் சோதனை: நிபந்தனைகளை இணைத்தல் உங்கள் Logical operator புரிதலை சரிபார்க்கவும்: - A && B என்ற வெளிப்பாட்டில் A false என்றால் என்ன olur? B கண்டிப்பா மதிப்பிடப்படுமா? - நீங்கள் எந்தச் சூழ்நிலையிலும் மூன்றுவிதமான இயக்கிகளையும் (&&, ||, !) ஒருங்கிணைக்க வேண்டியதோ? - !user.isActive மற்றும் user.isActive !== true என்பதுக்கு என்ன வித்தியாசம் உள்ளது? ### மறுப்புச் செயலி (Negation Operator) சில சமயங்களில் எதுவும் true இல்லாத போது குறித்தது எப்படி என்று தெரியவேண்டும். உதாரணமாக, "பயனர் பயன்படுத்தி உள்ளாரா?" என்ற கேள்வி பதிலுக்கு பதிலாக "பயனர் பயன்படுத்தவில்லை என்றாலே என்ன?" என்று கேட்கலாம். ! செயலி உங்கள் தர்க்கதை மாற்றி விடும். ! செயலி "எதிர்மறை..." என்பது போல – எதுவும் true ஆக இருந்தால், ! அதை false ஆக மாற்றும், மற்றும் மாறாகவும். ### முக்கோணம் வெளியீடுகள் (Ternary Expressions) எளிய நிபந்தனை ஒதுக்கீடுகளுக்காக JavaScript முக்கோணம் செயலி (ternary operator) வழங்குகிறது. இந்த சுருக்கமான வழியால் ஒரு வரியில் நிபந்தனையை எழுதலாம், இது ஒரு நிபந்தனை முடிவில் இரண்டு மதிப்புகளில் ஒன்றை ஒதுக்க தேவையெனில் பயனுள்ளது. இது ஒரு கேள்வி போல வாசிக்கிறது: "இந்த நிபந்தனை சரியா? ஆம் என்றால் இந்த மதிப்பை பயன்படுத்து. இல்லையென்றால் அதை பயன்படுத்து." கீழே ஒரு விழிப்புணர்வு உதாரணம் உள்ளது: ✅ இந்த குறியீட்டை சில முறை படித்து பாருங்கள். இந்த இயக்கிகள் எப்படி இயங்குகின்றன என்பதை புரிந்துகொள்ளுகிறீர்களா? இந்த வரி என்ன சொல்கிறது: "firstNumber secondNumber ஐவிட பெரியதா? ஆம் என்றால், biggestNumber க்கு firstNumber வை வைத்துக் கொள். இல்லை என்றால் secondNumber வை வைக்கும்." முக்கோணம் செயலி, இந்த பாரம்பரிய if..else கூற்றை சுருக்கி எழுதும் வழி: இரு முறைகளும் இதே விளைவுகளை அளிக்கின்றன. முக்கோணம் செயலி சுருக்கமானதாக இருக்கிறது, ஆனால் கடினமான நிபந்தனைகளுக்கு பாரம்பரிய if-else வடிவம் வாசிக்கமுடியுமென்பதால் பயனுள்ளதாக இருக்கலாம். --- ## 🚀 சவால் முதலில் தர்க்க இயக்கிகள் கொண்டு நிரல் எழுதவும், பிறகு முக்கோணம் வெளிப்பாடு கொண்டு அதே நிரலை மீண்டும் எழுதவும். உங்கள் விருப்பமான வடிவமைப்புப் போது என்ன? --- ## GitHub Copilot Agent சவால் 🚀 Agent அமைப்பைப் பயன்படுத்தி பின்வரும் சவால்களைக் கைகொள்ளவும்: விளக்கம்: இந்த பாடத்தில் கற்ற if-else கூற்று, switch கூற்று, logical operators மற்றும் ternary expressions உட்பட பல முடிவெடுப்புச் கருத்துக்களை ஒருங்கிணைக்கும் ஒரு விரிவான தரமதிப்பீட்டாளர் நிரலை உருவாக்குக. உரையாடல்: ஒரு மாணவனின் எண் மதிப்பை (0-100) பெற்று, கீழ்காணும் படி எழுத்து மதிப்பை கண்டறியும் JavaScript நிரலை எழுது: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60க்கு கீழ் தேவைகள்: 1. எழுத்து தரத்தைத் தீர்மானிக்க if-else கூற்றைப் பயன்படுத்துங்கள் 2. மாணவர் தேர்ச்சி பெறுகிறாரா என்று சரிபார்க்க தர்க்க ஒப்புருவிகளைப் பயன்படுத்தவும் (மதிப்பெண் >= 60) மற்றும் மாணவர் தேர்ச்சி சிறப்பு பெற்றிருக்கிறாரா (மதிப்பெண் >= 90) 3. ஒவ்வொரு எழுத்து மதிப்பிற்கும் தனித்துவமான பின்னூட்டத்தை வழங்க switch அறிக்கையைப் பயன்படுத்தவும் 4. மாணவர் அடுத்த பாடத்துக்குப் பதவி தகுதி உள்ளாரா என்று தீர்மானிக்க ternary operator ஐப் பயன்படுத்தவும் (மதிப்பெண் >= 70) 5. மதிப்பெண் 0 மற்றும் 100 இடையே இருப்பதை உறுதிப்படுத்த உள்ளீட்டு சரிபார்ப்பைச் சேர்க்கவும் 59, 60, 89, 90 போன்ற எல்லைக்கிராம மதிப்புகள் மற்றும் தவறான உள்ளீடுகளை உள்ளடக்கிய பல்வேறு மதிப்பெண்களுடன் உங்கள் நிரலை சோதிக்கவும். agent mode பற்றி மேலும் அறியவும். ## பாடத்துக்குப் பிறகு கூத்து பாடத்துக்குப் பிறகு கூத்து ## விமர்சனம் மற்றும் சுயபடிப்பு பயனருக்கு கிடைக்கும் பல்வேறு இயக்கிகளைப் பற்றி மேலும் படிக்க MDN இல். ஜோஷ் கொண்டிருக்கும் அருமையான operator lookup ஐப் படியுங்கள்! ## ஒதுக்கீடு இயக்கிகள் --- ## 🧠 உங்கள் தீர்மானம் எடுக்கும் கருவிகளுக்கான சுருக்கம் --- ## 🚀 உங்கள் JavaScript தீர்மானம் எடுக்கும் திறன் நோக்கு கால அட்டவணை ### ⚡ அடுத்த 5 நிமிடங்களில் நீங்கள் என்ன செய்யலாம் - [ ] உலாவி கன்சோலில் ஒப்பீட்டு இயக்கிகளைப் பயிற்சி செய்யவும் - [ ] உங்கள் வயதைச் சரிபார்க்க ஒரு எளிய if-else வாக்கியத்தை எழுதவும் - [ ] ஒரு if-else ஐ ternary operator பயன்படுத்தி மறுஅழைக்கவும் - [ ] வெவ்வேறு "true" மற்றும் "false" மதிப்புகளுடன் என்ன நடக்கிறதென்பதை பரிசோதிக்கவும் ### 🎯 இந்த மணிநேரத்தில் நீங்கள் எதை அடைய முடியும் - [ ] பாடத்துக்குப் பிறகு கூத்தான்னை முடித்து குழப்பமான கருத்துக்களை மறுபரிசீலனை செய்யவும் - [ ] GitHub Copilot சவாலை மேற்கொண்டு முழுமையான மதிப்பெண் கண்காணிப்பாளரை உருவாக்கவும் - [ ] حقیقي உலக சூழலுக்கு ஒரு எளிய தீர்மான மரத்தை உருவாக்கவும் (எ.கா., எதை அணியவேண்டும் என்பது போன்றது) - [ ] பல நிபந்தனைகளை தர்க்க இயக்கிகளுடன் இணைத்து பயிற்சி செய்யவும் - [ ] பல்வேறு பயன்பாடுகளுக்கு switch அறிக்கையுடன் முயற்சி செய்யவும் ### 📅 உங்கள் வாரநாள் தர்க்க திறனுக்கு - [ ] சிந்தனையுடைய உதாரணங்களுடன் இயக்கிகள் ஒதுக்கீடு முடிக்கவும் - [ ] பல்வேறு நிபந்தனை அமைப்புகளைப் பயன்படுத்தி ஒரு சிறிய கூத்து செயலியை உருவாக்கவும் - [ ] பல உள்ளீட்டு நிபந்தனைகளை சரிபார்க்கும் படிவ சரிபார்ப்பாளரை உருவாக்கவும் - [ ] ஜோஷ் கொண்டிருக்கும் operator lookupவினையைப் பயிற்சி செய்யவும் - [ ] உள்ளிருக்கும் குறியீட்டைக் கூடுதல் பொருத்தமான நிபந்தனை அமைப்புகளுக்கு மாற்றவும் - [ ] குறுக்குவழி மதிப்பீடு மற்றும் செயல்திறன் விளைவுகளைப் படிக்கவும் ### 🌟 உங்கள் மாதாந்திர மாற்றம் - [ ] சிக்கலான நெடுக்களுக்குள் நிபந்தனைகளை சரியாக கையாள்ந்து குறியீட்டுப் படிப்பை நீண்டநீண்ட பராமரிக்கவும் - [ ] சிக்கலான தீர்மானம் எடுக்கும் தர்க்கத்துடன் ஒரு செயலியை உருவாக்கவும் - [ ] உள்ளிருக்கும் திட்டங்களில் நிபந்தனைத் தர்க்கத்தை மேம்படுத்தும் வகையில் திறந்த மூலத்திற்கு பங்களிக்கவும் - [ ] வேறு யாராவது நிபந்தனை அமைப்புகள் மற்றும் அவற்றை எப்போது பயன்படுத்துவது என்பதில் அறிவுரையளிக்கவும் - [ ] நிபந்தனைத் தர்க்கத்திற்கு செயல்பாட்டு நிரலாக்க அணுகுமுறைகளை ஆராயவும் - [ ] நிபந்தனை சிறந்த நடைமுறைகளுக்கான தனிப்பட்ட குறிப்பு கையேட்டை உருவாக்கவும் ### 🏆 இறுதி தீர்மானம் எடுக்கும் சாம்பியனுக்கான சரிபார்ப்பு உங்கள் தர்க்கத் திறனை கொண்டாடுங்கள்: - நீங்கள் வெற்றிகரமாக அமல்படுத்திய மிகவும் சிக்கலான தீர்மானம் என்ன? - எந்த நிபந்தனை அமைப்பு உங்களுக்கு மிகவும் இயல்பானதாக தோன்றுகிறது மற்றும் ஏன்? - தர்க்க இயக்கிகள் பற்றி கற்றல் உங்கள் பிரச்சனை தீர்க்கும் முறையை எப்படி மாற்றியது? - எந்தவொரு உண்மையான பயன்பாடு நுட்பமான தீர்மான தூண்டுதல் தர்க்கத்தைக் பெறும்? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> வரட்டுத்தகவு: இந்தக் குறிப்புரை Co-op Translator என்ற எய்ஐ மொழிபெயர்ப்பு சேவையைப் பயன்படுத்து மாக மொழிபெயர்க்கப்பட்டது. நாம் துல்லியத்திற்காக முயற்சித்தாலும், தானாக மொழிபெயர்ப்பு செய்யப்படுவதால் பிழைகள் அல்லது தவறுகள் இருக்கக்கூடும் என்பதை தயவுசெய்து உணர்ந்துக்கொள்ளவும். அசல் ஆவணம் அதன் தாய்மொழியில் அதிகாரபூர்வமான மூலமாக கருதப்பட வேண்டும். முக்கிய தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்பட்ட எந்த தவறான புரிதல்களுக்கும் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பாளர்கள் அல்ல. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

ஜாவாஸ்கிரிப்ட் அடிப்படைகள்: வரிசைகள் மற்றும் லூப்புகள்

## முன்-வகுப்பு க்விஸ் முன்-வகுப்பு க்விஸ் வலைத்தளங்கள் எப்படி ஷாப்பிங் கார்ட் பொருட்களை கண்காணிக்கிறார்கள் அல்லது உங்கள் நட்பர்களின் பட்டியலை எவ்வாறு காட்டுகிறார்கள் என்று நீங்கள் யோசித்தீர்களா? அங்கே வரிசைகள் மற்றும் லூப்புகள் உதவுகின்றன. வரிசைகள் என்பது பல தகவல் துண்டுகளை வரும் ஒரு டிஜிட்டல் தொட்டி போன்றவை, லூப்புகள் அந்தத் தகவல்களை மறுபடியும் மீண்டும் எழுதாமல் ஆகச்செய்ய உதவுகின்றன. இரண்டும் சேர்ந்து உங்கள் திட்டங்களில் தகவலை கையாளும் அடித்தளத்தை உருவாக்குகின்றன. நீங்கள் ஒவ்வொரு படியையும் கையால் எழுதுவதிலிருந்து, நூற்றுக்கணக்கான அல்லது ஆயிரக்கணக்கான பொருட்களை விரைவில் செயலாக்கும் புத்திசாலி, திறமையான குறியீட்டை உருவாக்க கற்றுக்கொள்வீர்கள். இந்த பாட முடிவில், குறைந்த வரிகளை கொண்ட குறியீட்டின் மூலம் சிக்கலான தரவு பணிகளை எவ்வாறு செய்யலாம் என்பதைப் புரிந்து கொள்வீர்கள். இந்த அடிப்படையான நிரலாக்க கருத்துக்களை ஆராய்ப்போம். [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## வரிசைகள் வரிசைகளை ஒரு டிஜிட்டல் கோப்பு அலமாரி போல எண்ணுங்கள் - ஒவ்வொரு திடலில் ஒரு கோப்பை சேமிப்பதற்கு பதிலாக, ஒரே கட்டமைக்கப்பட்ட தொட்டியில் பல தொடர்புடைய பொருட்களை அமைக்கலாம். நிரலாக்க விதிகள் மூலம், வரிசைகள் பல தகவல் துண்டுகளை ஒரே ஒருங்கிணைந்த தொகுப்பில் சேமிக்க உதவுகின்றன. நீங்கள் படம் காட்சித்தொகுப்பை உருவாக்கினாலும், செய்யவேண்டிய பணிப் பட்டியலை நிர்வகிக்கிறீர்களோ அல்லது ஒரு கேம் மேல் மதிப்புகளை கண்காணிக்கிறீர்கள் என்றாலும், வரிசைகள் தரவு ஒழுங்குமுறையின் அடித்தளமாக இருக்கின்றது. இப்போது அவற்றின் செயல்பாட்டைப் பார்க்கலாம். ✅ வரிசைகள் எங்கும் உள்ளன! ஒரு உண்மையான வாழ்க்கை உதாரணமாக சோலார் பனல் வரிசையை நினைத்து பார்க்க முடியுமா? ### வரிசைகள் உருவாக்கல் வரிசைகளை உருவாக்குவது மிகவும் எளிது - வெறும் சதுரக் கோடுகள் பயன்படுத்துங்கள்! இங்கு என்ன நடக்கிறது? நீங்கள் வெறும் சதுரக் கோடுகள் [] பயன்படுத்தி காலியான தொட்டியை உருவாக்கியுள்ளீர்கள். இதை ஒரு காலியான நூலகத் தட்டில் போல நினைக்கலாம் - நீங்கள் அதை எந்த புத்தகங்களைக் கொண்டிருக்க விரும்பினாலும் கையாள்வதற்கு தயாரானது. நீங்கள் உங்கள் வரிசையை ஆரம்பத்திலிருந்தே முதன்முதல் மதிப்புகளால் நிரப்பலாம்: கவர்ச்சியான விஷயங்கள்: - ஒரே வரிசையில் எழுத்துகள், எண்கள் அல்லது true/false மதிப்புகள் சேமிக்கலாம் - ஒவ்வொரு பொருளையும் கிளியை கொண்டு பிரிக்க வேண்டும் - எளிது! - வரிசைகள் தொடர்புடைய தகவலை ஒன்றாகவே நிர்வகிக்க சிறந்தது ### வரிசை குறியீட்டல் இது முதலில் வித்தியாசமாக தோன்றலாம்: வரிசைகள் தங்கள் பொருட்களை 0-இன் எண்ணிக்கையிலிருந்து தொடங்கி எண்கள் அடிக்கின்றன, 1-இல்ல. இந்த பூஜ்ய அடிப்படைக் குறியீட்டு அமைப்பு கணினி நினைவகப் பண்புகளிலிருந்தே வருகிறது - இது C போன்ற கணினி மொழிகளின் ஆரம்ப நாளிலிருந்து பயன்படுத்தப்படுகிறது. ஒவ்வொரு இடமும் ஒரு index எனப்படும் முகவரி எண்ணை பெறுகிறது. ✅ நீங்கள் வரிசைகள் பூஜ்ய குறியீட்டிலிருந்து தொடங்குவதை மகிழ்ச்சியுடன் ஏற்றுகிறீர்களா? சில நிரலாக்க மொழிகளில் குறியீடுகள் 1-இன் எண்ணிக்கையிலிருந்து தொடங்குகின்றன. இதன் பின்னணியில் ஒரு சுவாரஸ்யமான வரலாறு உள்ளது, அதைப் விக்கிப்பீடியாவில் படிக்கலாம். வரிசை உறுப்பினர்களைப் பெறுதல்: இங்கு என்ன நடக்கிறது: - குறியீட்டை அடையாளப்படுத்த சதுரக் கோடுகள் அழைப்பாகக் கொண்டுள்ளது - ஒரு குறிப்பிட்ட இடத்தில் இருக்கும் மதிப்பை ফেরுத்து தருகின்றது - 0-இன் எண்ணிக்கையிலிருந்து உருப்படிகளை எண்ணுகிறது, அதனால் முதல் உறுப்பினன் குறியீடு 0 ஆகும் வரிசை உறுப்பினர்களை மாற்றுதல்: மேலே நாம்: - குறைந்த 4 குறியீட்டின் "Rocky Road" என்பதை "Butter Pecan" ஆக மாற்றி விட்டோம் - குறைந்த 5 இடத்தில் புதிய "Cookie Dough" உறுப்பினரை சேர்த்தோம் - வரிசை நீளம் தானாக அதிகரிக்கிறது, கட்டுப்பாட்டுக்கு வெளியே சேர்க்கையில் ### வரிசை நீளம் மற்றும் பொதுவான முறைகள் வரிசைகள் பல முக்கிய பணிகளை எளிதாக்க builtin பண்புகள் மற்றும் முறைகள் கொண்டுள்ளன. வரிசை நீளம் கண்டறிதல்: முக்கியக் குறிப்புகள்: - சொடுக்குகளை மொத்த எண்ணிக்கையைத் தருகிறது - உறுப்பினர்கள் சேர்க்கப்பட்டாலும் அல்லது நீக்கப்பட்டாலும் தானாக புதுப்பிக்கிறது - லூப்புகள் மற்றும் சரிபார்ப்புகளுக்கான இயல்பான எண்ணிக்கை தருகிறது அவசியமான வரிசை முறைகள்: இந்த முறைகளை புரிந்துகொள்வது: - push() (இறுதியில்) மற்றும் unshift() (ஆரம்பத்தில்) உருப்படிகளை சேர்க்கும் - pop() (இறுதியில்) மற்றும் shift() (ஆரம்பத்தில்) உருப்படிகளை நீக்கும் - indexOf() மூலம் உருப்படிகளை கண்டறிந்து, includes() மூலம் இருப்பதை உறுதிப்படுத்தும் - நீக்கப்பட்ட உருப்படிகள் மற்றும் இடங்களைத் திருப்பி தரும் ✅ உங்களின் உலாவி console இல் உங்கள் சொந்த வரிசையை உருவாக்கி சோதிக்கவும். ### 🧠 வரிசை அடிப்படைகள் சரிபார்ப்பு: உங்கள் தரவை ஒழுங்குபடுத்துதல் உங்கள் வரிசை புரிதலைச் சோதிக்க: - ஏன் வரிசைகள் 0-இல் இருந்து எண்ண தொடங்குகின்றன என்று நினைக்கிறீர்கள்? - ஒரு கிடைக்கும் இடம் இல்லாமல் பார்க்க முயற்சித்தால் (உதா: 5-உறுப்படிகள் கொண்ட வரிசையில் arr[100]) என்ன நடக்கும்? - வரிசைகள் பயன்படும் மூன்று நிஜ உலகக் காட்சிகளை நினைத்துக் கொள்ளுங்கள்? ## லூப்புகள் சார்லஸ் டிக்கன்ஸின் நாவல்களில் மாணவர்கள் பலமுறை ஒரு கோரிக்கையை எழுத கட்டாயம் செய்ததற்கான புகழ்பெற்ற தண்டனை உதாரணத்தை நினைத்துக்கொள்ளுங்கள். நீங்கள் ஒருவருக்கு "இந்த வசனத்தை 100 முறை எழுது" என்று சொன்னால் தானாகவே அது செய்யப்படும் என்றால்? அதுவே லூப்புகள் உங்கள் குறியீட்டுக்கு செய்கின்றன. லூப்புகள் தவறுகள் இல்லாமல் பணிகளை மீண்டும் மீண்டும் செய்யும் ஒரு மாற்றமில்லாத உதவியாளராக இருக்கின்றன. நீங்கள் ஒரு ஷாப்பிங் கார்டின் ஒவ்வொரு பொருளையும் பரிசோதிக்க வேண்டும் என்றாலும், அல்லது ஒரு ஆல்பத்தில் உள்ள அனைத்து படங்களையும் காட்ட வேண்டும் என்பாலும், லூப்புகள் அந்தப் பணிகளை திறமையாக கையாள்கின்றன. ஜாவாஸ்கிரிப்ட் பல வகையான லூப்புகளை வழங்குகிறது. ஒவ்வொன்றையும் பகுப்பாய்வு செய்து எப்போது பயன்படுத்துவது என்பதைப் புரிந்து கொள்வோம். ### for லூப் for லூப் ஒரு டைமர் அமைப்பதைப் போல - நீங்கள் எத்தனை முறை நடப்பதாக வேண்டுமென்று தெரிந்து காணலாம். இது மிகவும் ஒழுங்கமைக்கப்பட்ட மற்றும் கணிப்பிடக்கூடியது, அதனால் வரிசைகளுடன் வேலை செய்யும்போது அல்லது எண்ணிக்கைகளை கணக்கிடும் போது இது சிறந்தது. for லூப் அமைப்பு: எடுத்துக்காட்டாக, என்ன நடக்கிறது: - கணக்கிடுவதை i என்ற மாறியை தொடக்கத்தில் 0 ஆக ஆரம்பிக்கிறது - ஒவ்வொரு முறை இயக்கத்திற்கு முன் i < 10 என்ற நிபந்தனையை பரிசோதிக்கிறது - நிபந்தனை உண்மையானபோது குறியீட்டு தொகுதியை இயக்குகிறது - ஒவ்வொரு முறை பிறகு i-ஐ 1-ஆக அதிகரிக்கிறது i++ மூலம் - நிபந்தனை துெறிவானபோது (i 10 ஆகும் போது) நிறுத்துகிறது ✅ உலாவி console இல் இந்த குறியீட்டைக் இயக்குங்கள். கணக்கிடும் மாறி, நிபந்தனை அல்லது மறுநிரலாக்க தொடர்ச்சியில் சிறிய மாற்றங்கள் செய்தால் என்ன நடக்கும்? நீங்கள் அதை பின்னோக்கி இயங்கச் செய்யவா, தொலைவுக் கணக்கெடுப்பாக மாற்ற முடியுமா? ### 🗓️ for லூப் தேர்வு: கட்டுப்படுத்தப்பட்ட மீண்டும் செயல் உங்கள் for லூப் புரிதலை மதிப்பாய்வு செய்ய: - ஒரு for லூப்பின் மூன்று பகுதிகள் என்ன மற்றும் ஒவ்வொன்றும் என்ன செய்கின்றன? - வரிசையை பின்னோக்கி எப்படி சுற்றிப்பார்ப்பது? - நீங்கள் மேல் செல்லல் பகுதியை (i++) மறந்துவிட்டால் என்ன நிகழும்? ### while லூப் while லூப் என்பது "இதுவரை செய்ய..." என்பதுபோல் - அதுவெவ்வளவு முறை நடக்கும் என்று தெரியாது, ஆனால் எப்போது நிறுத்துவது என்பது தெரியும். அது பயனரிடமிருந்து தேவையான உள்ளீட்டை பெறும் வரை கேட்க அல்லது தரவுகளில் தேடும்போது சிறந்தது. while லூப்பின் பண்புகள்: - நிபந்தனை உண்மையானது வரைக்கும் தொடர்ச்சியாக இயங்கும் - எந்தவொரு கணக்கிடும் மாறியையும் உங்கள் கைமுறையாளர் நிர்வகிக்க வேண்டும் - ஒவ்வொரு முறை இயக்கத்திற்கு முன் நிபந்தனையை பரிசோதிக்கிறது - நிபந்தனை மெய்மையாக மாறாதிருக்கின் நோக்கி நீளக் கால லூப்புகள் உண்டாகும் அபாயம் உள்ளது இந்த எடுத்துக்காட்டுகளை புரிந்துகொள்ள: - லூப் உட்கருத்தில் கணக்கிடும் மாறி i கைமுறை நிர்வகிக்கப்படுகிறது - அளவிற்குள் இருக்கக் காக்க கணக்கிடும் மாறி அதிகரிக்கப்படுகிறது - பயனர் உள்ளீட்டு மற்றும் முயற்சி வரம்புகளுடன் நடைமுறை பயன்பாட்டைக் காட்டுகிறது - முடிவில்லாத செயல்பாடுகளைத் தவிர்க்க பாதுகாப்பு முறைகள் உள்ளது ### ♾️ while லூப் ஞானம்: நிபந்தனை அடிப்படையிலான மீண்டும் செயல் தனது while லூப் புரிதலை சோதிக்க: - while லூப்புகளில் முக்கிய ஆபத்து என்ன? - எப்போது for லூப்புக்கு பதிலாக while லூப்பை நீங்கள் தேர்ந்தெடுப்பீர்கள்? - முடிவில்லாத லூப்புகளைத் தவிர்ப்பது எப்படி? ### நவீன லூப் மாற்றி வழிகள் ஜாவாஸ்கிரிப்ட் உங்கள் குறியீட்டை மேலும் வாசிக்கக்கூடியதும் குறைவான தவறுகளுடையதுமானதாக செய்ய நவீன லூப் சொற்றொடர்களை வழங்குகிறது. For...of லூப் (ES6+): for...of இன் முக்கிய நன்மைகள்: - குறியீட்டை நிர்வகிக்க வேண்டிய தேவையைக் குறைத்தல் மற்றும் off-by-one பிழைகளை தவிர்ப்பு - வரிசை உறுப்பினர்களுக்கு நேரடியாக அணுகல் வழங்கல் - குறியீடு வாசிப்புக்கு எளிதாக்கம் மற்றும் சொற்றொடர் சிக்கல்களை குறைத்தல் forEach முறை: forEach பற்றி நீங்கள் அறிவது: - ஒவ்வொரு வரிசை உறுப்பிற்கும் ஒரு செயல்பாட்டை இயக்குகிறது - உறுப்பினர் மதிப்பையும் குறியீட்டையும் அளவுருக்களாக வழங்குகிறது - பூர்வ ரசிக லூப்புகளால் நிறுத்த முடியாது - undefined ஐ திருப்பி தருகிறது (புதிய வரிசை உருவாக்காது) ✅ நீங்கள் ஏன் for லூப்பிற்கு பதிலாக while லூப்பை தேர்ந்தெடுப்பீர்கள்? StackOverflow இல் 17 ஆயிரம் பார்வையாளர்கள் இதைப் பற்றி கேள்வி எழுப்பியுள்ளனர், சில கருத்துக்கள் உங்களுக்குப் பயனாக இருக்கலாம். ### 🎨 நவீன லூப் சொற்றொடர் தேர்வு: ES6+ஐ அங்கீகரித்தல் உங்கள் நவீன ஜாவாஸ்கிரிப்ட் புரிதலை மதிப்பாய்வு செய்ய: - பாரம்பரிய for லூப்புகளுக்கு மாற்றாக for...of இன் நன்மைகள் என்ன? - எப்போது நீங்கள் பாரம்பரிய for லூப்பை விரும்பலாம்? - forEach மற்றும் map இன் வேறுபாடு என்ன? ## லூப்புகளும் வரிசைகளும் வரிசைகளுடன் லூப்புகளை இணைத்தல் வலுவான தரவு செயலாக்க திறன்களை ஏற்படுத்துகிறது. பட்டியல்கள் காட்டுதல் முதல் புள்ளிவிவர கணக்கீடு வரை பல நிரலாக்க பணிகளுக்கான அடிப்படையாக இணைப்பு உள்ளது. பாரம்பரிய வரிசை செயலாக்கம்: ஒவ்வொரு முறையிலும் பார்க்கலாம்: - லூப் எல்லையைத் தீர்மானிக்க வரிசை நீளம் பண்பை பயன்படுத்துகிறது - பாரம்பரிய for லூப்பில் குறியீட்டை கொண்டு உறுப்பினரை அணுகுகிறது - for...of லூப்பில் நேரடியாக உறுப்பினரை அணுகுகிறது - ஒவ்வொரு உறுப்பினரையும் ஒருமுறை முறையாக செயலாக்குகிறது உயிரியல் தரவு செயலாக்க உதாரணம்: இந்த குறியீடு எப்படி செயல்படுகிறது: - மொத்தம் மற்றும் உயர்ந்த/குறைந்த மதிப்புகள் கண்காணிப்பதை தொடங்கி நிலைத்துவைக்கிறது - ஒவ்வொரு மதிப்பையும் ஒன்றுதான் ஓர் திறமையான லூப்பில் செயலாக்குகிறது - சராசரி கணக்கீட்டுக்கு மொத்தத்தை சேர்க்கிறது - சுழற்சியின் போது மிக உயர்ந்த மற்றும் மிகக் குறைந்த மதிப்புகளைக் கண்காணிக்கிறது - லூப்புக்குப் பிறகு இறுதி புள்ளிவிவரங்களை கணக்கிடுகிறது ✅ உங்களது உலாவி console இல் தானாக உருவாக்கிய வரிசையை பயன்படுத்தி லூப்புக்களுடன் முயற்சி செய்யவும். --- ## GitHub Copilot முகவர் சவால் 🚀 Agent முறையைப் பயன்படுத்தி கீழ்க்கண்ட சவாலை முடிக்கவும்: விளக்கம்: ஒரு தரவுத்தொகுப்பை பகுப்பாய்வு செய்து பொருத்தமான விளக்கங்களை உருவாக்கும் வரிசைகள் மற்றும் லூப்புகளை இணைத்த ஒரு சிக்கலான தரவு செயலாக்க முறை/function உருவாக்குக. கட்டளை: analyzeGrades என்ற ஒரு function உருவாக்கவும், இது மாணவர் மதிப்பெண் பொருள் கொண்ட ஒரு வரிசையை (ஒவ்வொன்றும் பெயர் மற்றும் மதிப்பெண் பண்புகளை கொண்டது) எடுத்துக்கொண்டு, அதிகபட்ச மதிப்பெண், குறைந்தபட்ச மதிப்பெண், சராசரி மதிப்பெண், தேர்ச்சி பெற்ற மாணவர்களின் எண்ணிக்கை (மதிப்பெண் >= 70), மற்றும் சராசரிக்கு மேல் மதிப்பெண் பெற்ற மாணவர்களின் பெயர் வரிசையை உட்பொதிகிறது. உங்கள் தீர்வில் குறைந்தது இரண்டு விதமான லூப்புகளை பயன்படுத்தவும். மேலும் அறிய agent mode இல். ## 🚀 சவால் JavaScript பல நவீன வரிசை முறைகளை வழங்குகிறது, அவை குறிப்பிட்ட பணிகளுக்காக பாரம்பரிய 반복ங்களை மாற்ற முடியும். forEach, for-of, map, filter, மற்றும் reduce ஆகியவற்றை ஆராயுங்கள். உங்கள் சவால்: மாணவர் மதிப்பெண் எடுத்துக்காட்டை குறைந்தது மூன்று விதமான வரிசை முறைகளைக் கொண்டு மறுசீரமைக்கவும். நவீன JavaScript نحو பயன்படுத்தி குறியீடு எவ்வளவு சுத்தமாகவும் தெளிவாகவும் மாறுகிறதோ கவனியுங்கள். ## பாடத்துக்குப் பின் வினாடி வினா பாடத்துக்குப் பின் வினாடி வினா ## பரிசீலனை & தனிப்பட்ட ஆய்வு JavaScript இல் வரிசைகளுக்கு அண்மையில் பல முறைகள் சேர்க்கப்பட்டுள்ளன, அவை தரவு கையாள்வதற்கு மிகவும் பயனுள்ளதாக இருக்கின்றன. இந்த முறைகள் பற்றி படியுங்கள் மற்றும் உங்கள் உருவாக்கிய வரிசையில் சிலவற்றை (push, pop, slice மற்றும் splice போன்றவை) முயற்சிக்கவும். ## பணிகள் ஒரு வரிசையை சுழற்றுக --- ## 📊 உங்கள் வரிசைகள் மற்றும் 반복 கருவி தொகுப்பின் சுருக்கம் --- ## 🚀 உங்கள் வரிசைகள் மற்றும் 반복 திறமை நேர வரிசை ### ⚡ அடுத்து 5 நிமிடங்களில் செய்யக்கூடியவை - [ ] உங்கள் விருப்பமான திரைப்படங்களின் ஒரு வரிசையை உருவாக்கி குறிப்பிட்ட உருப்படிகளை அணுகவும் - [ ] 1 இருந்து 10 வரை எண்ணும் ஒரு for 반복ம் எழுதவும் - [ ] பாடத்தில் உள்ள நவீன வரிசை முறைகளுக்கான சவாலை முயற்சிக்கவும் - [ ] உலாவியில் வரிசை குறியீட்டைப் பயிற்சி செய்யவும் ### 🎯 இந்த மணிநேரத்தில் சாதிக்க முடியவுள்ளவை - [ ] பாடத்துக்குப் பின் வினாடி வினாவை முடித்து சிக்கலான கருத்துக்களை மதிப்பாய்வு செய்யவும் - [ ] GitHub Copilot சவாலிலிருந்து முழுமையான மதிப்பெண் பகுப்பாய்வையாளர் உருவாக்கவும் - [ ] பொருட்களை சேர்க்கும் மற்றும் அகற்றும் எளிய ஷாப்பிங் கார்ட் உருவாக்கவும் - [ ] விதிவிலக்கான 반복 வகைகளை மாற்றும் பயிற்சிகள் செய்யவும் - [ ] push, pop, slice, மற்றும் splice போன்ற வரிசை முறைகளைப் பயன்படுத்தி முயற்சி செய்யவும் ### 📅 உங்கள் வாராந்திர தரவு செயலாக்க பயணம் - [ ] "ஒரு வரிசையை சுழற்றுக" பணியை படைப்பாற்றலுடன் முடிக்கவும் - [ ] வரிசைகள் மற்றும் 반복ங்களைக் கொண்டு ஒரு பணியாளர்கள் பட்டியல் செயலி உருவாக்கவும் - [ ] எண்களின் எளிய புள்ளியியல் கணக்கிடியை உருவாக்கவும் - [ ] MDN வரிசை முறைகளை பயிற்சி செய்யவும் - [ ] புகைப்படக் காட்சியகம் அல்லது இசை பட்டியல் இடைமுகம் உருவாக்கவும் - [ ] map, filter, மற்றும் reduce போன்ற செயல்பாடுகள் அடிப்படையிலான நிரலாக்கத்தை ஆராயவும் ### 🌟 உங்கள் மாதநிலை மாற்றம் - [ ] முன்னோடிய வரிசை செயல்பாடுகள் மற்றும் செயல்திறன் மேம்பாட்டை ஆற்றலாம் - [ ] முழுமையான தரவு காட்சி அட்டவணையை உருவாக்கவும் - [ ] தரவு செயலாக்கத்துடன் தொடர்புடைய திறந்த மூல திட்டங்களில் பங்களிக்கவும் - [ ] பிறருக்கு வரிசைகள் மற்றும் 반복ங்களை நடைமுறை எடுத்துக்காட்டுகளுடன் கற்பிக்கவும் - [ ] மறு பயன்பாட்டுக்குரிய தனிப்பட்ட தரவு செயலாக்க செயல்பாடுகள் நூலகத்தை உருவாக்கவும் - [ ] வரிசைகளை அடிப்படையாகக் கொண்டு கட்டமைக்கப்பட்ட தகவல் அலகுகள் மற்றும் கூடுக்களை ஆராயவும் ### 🏆 இறுதி தரவு செயலாக்க சாம்பியன் சரிபார்ப்பு உங்கள் வரிசைகள் மற்றும் 반복 திறமையை கொண்டாடுங்கள்: - நிஜ பயன்பாடுகளுக்கு நீங்கள் கற்றுக்கொண்ட மிகவும் பயனுள்ள வரிசை செயல்பாடு என்ன? - எந்த 반복 வகை உங்கள் கைகளுக்கு இயல்பானது மற்றும் ஏன்? - வரிசைகள் மற்றும் 반복ங்களைப் புரிந்துகொண்டதில் உங்கள் தரவு ஒழுங்குபடுத்தும் முறையில் எப்படி மாற்றம் ஏற்பட்டது? - இன்னும் எதைச் செய்ய விரும்புகிறீர்கள் கருத்து சிக்கலான தரவு செயலாக்க பணியொன்றை? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> அறிகுறி: இந்த ஆவணம் கூ-ஒப் மொழிபெயர்ப்பாளர் என்ற செயற்கை நுண்ணறிவு மொழிபெயர்ப்பு சேவையை பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. துல்லியமாக இருப்பதற்காக நாம் முயலினாலும், தானாகவே செய்யப்பட்ட மொழிபெயர்ப்புகளில் தவறுகள் அல்லது நுட்பக் குறைவுகள் இருக்க வாய்ப்பு உள்ளது. தாய்மொழியில் உள்ள அசல் ஆவணம் அதிகாரப்பூர்வ மூலம் என கருதப்பட வேண்டும். மிகவும் முக்கியமான தகவல்களுக்கு, திறமையான மனித பிற மொழிபெயர்ப்பை பரிந்துரைக்கிறோம். இந்த மொழிபெயர்ப்பின் பயன்பாட்டினால் ஏற்பட்ட எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கும் நாங்கள் பொறுப்பல்ல. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

జావాస్క్రిప్ట్ పరిచయం

జావాస్క్రిప్ట్ అనేది వెబ్ భాష. ఈ నాలుగు పాఠాల్లో, మీరు దాని మౌలికాలను నేర్చుకుంటారు. ### విషయాలు 1. చరాలు మరియు డేటా రకాలు 2. ఫంక్షన్లు మరియు విధానాలు 3. జావాస్క్రిప్ట్ తో నిర్ణయాలు తీసుకోవడం 4. అర레이లు మరియు లూపులు ### క్రెడిట్స్ ఈ పాఠాలు ♥️ తో రాశారు Jasmine Greenaway, Christopher Harrison మరియు Chris Noring --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> త్యజింపు: ఈ డాక్యుమెంట్ Co-op Translator అనే AI అనువాద సేవను ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటిక్ అనువాదాలలో పొరపాట్లు లేదా లోపాలు ఉండే అవకాశం ఉందని దయచేసి గమనించండి. మూల డాక్యుమెంట్ తన స్వదేశీ భాషలో ప్రామాణిక మూలంగా పరిగణించబడాలి. ముఖ్యమైన సమాచారం కోసం వృత్తిపరమైన మానవ అనువాదం సూచించబడుతుంది. ఈ అనువాదం వలన కలిగే ఏవైనా తప్పులపై లేదా అర్థం తప్పులపై మేము బాధ్యత వహించము. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

జావాస్క్రిప్ట్ మౌలికాలు: డేటా రకాలు

డేటా రకాలు జావాస్క్రిప్ట్‌లోని ప్రాథమిక భావనలలో ఒకటి, మీరు రాసే ప్రతి ప్రోగ్రాంలో మీరు ఎదుర్కొననేంటివి. డేటా రకాలని అలెగ్జాండ్రియాలో పురాతన గ్రంథాలయకర్తలు వాడిన ఫైలింగ్ సిస్టమ్ లా అనుకోండి – వారు కవితలు, గణితం, మరియు చరిత్రా రికార్డులు ఉన్న స్క్రోలు కోసం నిర్దిష్ట ప్రదేశాలు కలిగారు. జావాస్క్రిప్ట్ కూడా వివిధ రకాల డేటాకు విభిన్న వర్గాలు ఇలాచేరుస్తుంది. ఈ పాఠంలో, జావాస్క్రిప్ట్‌ని పనిచేస్తించే ముఖ్యమైన డేటా రకాలను పరిశీలిస్తాము. మీరు సంఖ్యలు, పాఠ్యాలు, సత్య/అసత్య విలువలను ఎలా నిర్వహించాలో నేర్చుకుంటారు, మరియు సరైన రకం ఎంచుకోవడం మీ ప్రోగ్రామ్లకు ఎందుకు అవసరమో అర్థం చేసుకుంటారు. ఈ భావనలు మొదట్లో抽象ంగా అనిపించవచ్చు, కాని అనుభవంతో అవి సహజంగా మారతాయి. డేటా రకాలను అర్థం చేసుకోవడం జావాస్క్రిప్ట్‌లోని మిగతా విషయాలన్నింటికీ స్పష్టత ఇస్తుంది. ఒక కేథెడ్రాల్ నిర్మించాలంటే శిల్పకారులు వివిధ నిర్మాణ పదార్థాలను అర్థం చేసుకోవాలి గానీ, ఇలాంటి ప్రాథమిక విషయాలు మీరు భవిష్యత్తులో తయారుచేసే ప్రతిదానికి మద్దతు ఇస్తాయి. ## లెక్చర్ ముందు క్విజ్ లెక్చర్ ముందు క్విజ్ ఈ పాఠం వెబ్‌పై ఇంటరాక్టివిటీని అందించే జావాస్క్రిప్ట్ యొక్క మౌలికమైన అంశాలను కవరిస్తుంది. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") వేరియబుల్స్ మరియు వాటిలో నిల్వ అయ్యే డేటా రకాలతో ప్రారంభిద్దాం! ## వేరియబుల్స్ వేరియబుల్స్ ప్రోగ్రామింగ్‌లో ప్రాథమిక నిర్మాణ బ్లాకులు. మధ్యయుగ గంధకారుల వలె వివిధ పదార్థాలను నిల్వ చేసే స్టిక్కర్లు ఉన్న జార్లు లా, వేరియబుల్స్ మీరు సమాచారాన్ని నిల్వ చేసి దానికి వివరణాత్మక పేరు ఇస్తారు, తద్వారా మీరు మళ్లీ ఆ సమాచారాన్ని సూచించవచ్చు. ఎవరో యువత వయస్సును గుర్తు పెట్టుకోవాలా? దానిని age అనే వేరియబుల్‌లో నిల్వ చేయండి. ఒక వినియోగదారుని పేరు ట్రాక్ చేయాలా? దానిని userName అనే వేరియబుల్‌లో ఉంచండి. మనం జావాస్క్రిప్ట్‌లో వేరియబుల్స్ సృష్టించడంలో ఆధునిక దృష్టికోణాన్ని పరిగణిస్తాము. మీరు ఇక్కడ నేర్చుకుంటున్న సాంకేతికతలు భాష అభివృద్ధి మరియు ప్రోగ్రామింగ్ స‌మాజం ద్వారా అభివృద్ధి చెందిన ఉత్తమ పద్ధతులను ప్రతిబింబిస్తాయి. ఒక వేరియబుల్ సృష్టించడం మరియు ప్రకటన చేయడం ఈ విధంగా ఉంటుంది [keyword] [name]. ఇది రెండు భాగాల సంగమం: - కీవర్డ్. మారగల వేరియబుల్స్ కోసం let ఉపయోగించండి, లేదా విలువ మారకదగినవి అయితే const ఉపయోగించండి. - వేరియబుల్ పేరు, మీరు ఎంచుకునే వివరణాత్మక పేరు. ✅ let కీవర్డ్ ES6లో ప్రవేశపెట్టబడింది మరియు మీ వేరియబుల్‌కు ఒక _బ్లాక్ స్కోప్_ ఇస్తుంది. పాత var కీవర్డ్‌కి బదులుగా మీకు let లేదా const ఉపయోగించడం సిఫార్సు చేయబడుతుంది. బ్లాక్ స్కోప్స్ గురించి మేము భవిష్యత్తులో ఎక్కువగా మాట్లాడతాము. ### పని - వేరియబుల్స్ తో పని 1. వేరియబుల్ ప్రకటించండి. మన మొదటి వేరియబుల్ సృష్టించడం ప్రారంభిద్దాం: ```javascript let myVariable; ``` ఇది ఏమి సాధిస్తుంది: - జావాస్క్రిప్ట్‌కి myVariable అనే నిల్వ స్థలాన్ని సృష్టించాలని చెబుతుంది - జావాస్క్రిప్ట్ ఈ వేరియబుల్ కోసం మెమరీలో స్థలం కేటాయిస్తుంది - వేరియబుల్‌ను ప్రస్తుతం ఏ విలువ లేదు (అర్థం కానిది) 2. దానికి విలువ ఇవ్వండి. ఇప్పుడు మన వేరియబుల్‌లో ఏదైనా ఉంచుదాం: ```javascript myVariable = 123; ``` అసైన్‌మెంట్ ఎలా పనిచేస్తింది: - = ఆపరేటర్ 123 విలువను మా వేరియబుల్‌కు కేటాయిస్తుంది - వేరియబుల్ ఇప్పుడు ఎవ్వైదైన విలువులతో ఉంటుంది, అర్థం కానిది కాదు - మీరు myVariable వాడడం ద్వారా ఈ విలువను మీ కోడ్ మొత్తం అభియోగించవచ్చు > గమనిక: ఈ పాఠంలో = ఉపయోగించడం అంటే మేము "అసైన్‌మెంట్ ఆపరేటర్" వాడుతున్నాం, ఇది వేరియబుల్‌కు విలువ సెట్ చేసేందుకు ఉపయోగిస్తారు. ఇది సమానత్వాన్ని సూచించదు. 3. సమర్థవంతమైన మార్గం. వాస్తవానికి, ఈ రెండు దశలను కలిపిద్దాం: ```javascript let myVariable = 123; ``` ఈ విధానం ఎక్కువ సమర్థవంతం: - ఒక అభిప్రాయంలో వేరియబుల్ ప్రకటించి విలువను కేటాయిస్తున్నారు - ఇది డెవలపర్లలో సాంప్రదాయ పద్ధతి - కోడ్ పొడవును తగ్గించినా స్పష్టత ఉంటుంది 4. మార్చాలనుకుంటే. వేరియబుల్ లో వేరే సంఖ్య ఉంచాలంటే? ```javascript myVariable = 321; ``` పునఃనియామకం అర్థం చేసుకోండి: - వేరియబుల్ ఇప్పుడు 123 కాకుండా 321 కలిగి ఉంది - మొన్నటి విలువ మారు ఐనది – వేరియబుల్స్ ఒక్కోసారి ఒక్క విలువను నిల్వ చేస్తాయి - ఈ మారగలpekత letతో ప్రకటించిన వేరియబుల్స్ ముఖ్య లక్షణం ✅ ప్రయత్నించండి! మీరు మీ బ్రౌజర్‌లోనే జావాస్క్రిప్ట్ రాయవచ్చు. ఒక బ్రౌజర్ విండో తెరవండి మరియు డెవలపర్ టూల్స్‌కు వెళ్ళండి. కన్సోల్‌లో మీరు ఒక ప్రాంప్ట్ చూడగలరు; let myVariable = 123 టైప్ చేసి, రిటర్న్ నొక్కండి, అప్పుడు myVariable టైప్ చేయండి. ఏం జరుగుతుంది? ఈ భావనలు తరువాతి పాఠాలలో మరింత వివరంగా నేర్చుకుంటారు. ### 🧠 వేరియబుల్స్ ఆచరణ పరీక్ష: సౌకర్యంగా ఉండటానికి వేరియబుల్స్ గురించి మీ భావన ఎలా ఉందో చూద్దాము: - వేరియబుల్ ప్రకటించడం మరియు అసైన్ చేయడంలో తేడా చెప్పగలరా? - మీరు వేరియబుల్‌ను ప్రకటించేములోపల వాడితే ఏం జరుగుతుంది? - ఎప్పుడు వేరియబుల్ కోసం let ను const కంటే ఎంపికచేస్తారు? ## కాన్స్టెంట్స్ కొన్నిసార్లు మీరు ప్రోగ్రామ్ అమలులో యథాతథంగా మారని సమాచారం నిల్వ చేయాలి. కాన్స్టెంట్లు పురాతన గ్రీస్‌లో యుక్లిడ్ స్థాపించిన గణిత సూత్రాల లాగా – ఒకసారి నిరూపించబడి నమోదు అయ్యాక, అవి భవిష్యత్తులో ఎప్పుడూ మారవు. కాన్స్టెంట్లు వేరియబుల్స్ లా పనిచేస్తాయి, అయితే ఒక ముఖ్యమైన పరిమితితో: మీరు వాటికి మొదటిసారి విలువను కేటాయించిన తరువాత, దానిని మార్చలేరు. ఈ స్థిరత్వం ప్రోగ్రామ్‌లో ముఖ్యమైన విలువలకు అనుకోని మార్పులకు అడ్డుకట్ట వేస్తుంది. కాన్స్ట్ ప్రకటన మరియు ప్రారంభం వేరియబుల్‌ల వలే ఉంటుంది, కానీ కీవర్డ్ const. కాన్స్టెంట్లు సాధారణంగా పెద్ద అక్షరాలతో పేరిస్తారు. ఈ కోడ్ ఏమి చేస్తుంది: - MY_VARIABLE అనే కాన్స్టెంట్ను 123 విలువతో సృష్టిస్తుంది - కాన్స్టెంట్లకు పెద్ద అక్షరాల నేమింగ్ కాన్వెన్షన్ ఉపయోగిస్తుంది - ఈ విలువకు భవిష్యత్తులో మార్పులు జరగకుండా నిరోధిస్తుంది కాన్స్టెంట్లకు రెండు ప్రధాన నియమాలు ఉన్నాయి: - వాళ్ళకు వెంటనే విలువ ఇవ్వాలి – ఖాళీ కాన్స్టెంట్లు అనుమతించబడవు! - మీరు ఆ విలువను ఎప్పటికీ మార్చలేరు – ప్రయత్నిస్తే జావాస్క్రిప్ట్ తప్పిదం చూపుతుంది. దీన్ని చూద్దాం: సాధారణ విలువ - ఈ క్రింది అనుమతించబడదు: ```javascript const PI = 3; PI = 4; // అనుమతించబడదు ``` మీరు గుర్తుంచుకోవాల్సింది: - కాన్స్టెంట్ పునఃనియామకం ప్రయత్నాలు తప్పుదోవ కలిగిస్తాయి - ముఖ్యమైన విలువలను అనుకోని మార్పుల నుంచి రక్షిస్తుంది - విలువ ప్రోగ్రామ్ అంతటికీ స్థిరంగా ఉంచుతుంది ఆబ్జెక్ట్ రిఫరెన్స్ రక్షించబడినది - ఈ క్రింది అనుమతించబడదు: ```javascript const obj = { a: 3 }; obj = { b: 5 } // అనుమతించబడదు ``` ఈ భావనలు అర్థం చేసుకోండి: - అన్ని ఆబ్జెక్ట్ను కొత్తదిగా మార్చకుండా నిరోధిస్తుంది - మొదటి ఆబ్జెక్ట్‌కు రిఫరెన్స్‌ను రక్షిస్తుంది - ఆబ్జెక్ట్ గుర్తింపును మెమరీలో నిలుపుతుంది ఆబ్జెక్ట్ విలువ రక్షించబడలేదు - ఈ క్రింది అనుమతించబడుతుంది: ```javascript const obj = { a: 3 }; obj.a = 5; // అనుమతించబడింది ``` ఇక్కడ ఏమి జరుగుతుందో వివరణ: - ఆబ్జెక్ట్ లోపల ప్రాపర్టీ విలువను మార్చింది - అదే ఆబ్జెక్ట్ రిఫరెన్స్ నిలిపింది - ఆబ్జెక్ట్ కంటెంట్స్ మారవచ్చు కానీ రిఫరెన్స్ స్థిరంగా ఉంటుంది > గమనిక, const అంటే రిఫరెన్స్ పునఃనియామకం నుంచి రక్షించబడింది. విలువ మాత్రం _అమర్యాదకరం_ కాదు, ముఖ్యంగా అది ఆబ్జెక్ట్ వంటి సంక్లిష్ట నిర్మాణం అయితే మారవచ్చు. ## డేటా రకాలు జావాస్క్రిప్ట్ సమాచారం ను వివిధ వర్గాలుగా విభజిస్తుంది, వీటిని డేటా రకాలు అంటారు. ఈ భావన పురాతన పండితులు జ్ఞానాన్ని వర్గీకరించిన విధానాన్ని అనుసరిస్తుంది – అరిస్టోటిల్ వివిధ రకాల తర్కాన్ని వేరుగా చూపించాడు, ఎందుకంటే సాంఘిక సూత్రాలను కవిత, గణితం, ప్రకృతి తత్వశాస్త్రాలకు సమానంగా వర్తింపజేయలేవు. డేటా రకాలు ముఖ్యం ఎందుకంటే వివిధ రకాల సమాచారం వివిధ ఆపరేషన్లతో పని చేస్తాయి. మీరు వ్యక్తి పేరుపై గణితం చేయలేము కాబట్టి గణిత సమీకరణని అల్ఫాబెట్ల క్రమంలో అమర్చలేము, అదే విధంగా జావాస్క్రిప్ట్ ప్రతి ఆపరేషన్ కు సరైన డేటా రకం కావాలి. దీని అర్థం వల్ల తప్పులూ తగ్గుతాయి మరియు మీ కోడ్ భరోసాలైనది అవుతుంది. వేరియబుల్స్ అనేక రకాల విలువలను నిల్వ చేయగలవు, ఉదాహరణకు సంఖ్యలు మరియు పాఠ్యాలు. ఈ విలువల వివిధ రకాలే డేటా రకం గా పిలవబడతాయి. డేటా రకాలు సాఫ్ట్‌వేర్ అభివృద్ధిలో ముఖ్యమైనవి, ఎందుకంటే అవి డెవలపర్లకు కోడ్ రాయడంలో మరియు సాఫ్ట్‌వేర్ ఎలా నడిచించాలో నిర్ణయించడంలో సహాయపడతాయి. అంతేకాక, కొన్ని డేటా రకాలకు ప్రత్యేక లక్షణాలు ఉండి విలువలోని అదనపు సమాచారాన్ని మారుస్తాయి లేదా ఇవ్వగలవు. ✅ డేటా రకాలు జావాస్క్రిప్ట్ డేటా ప్రిమిటివ్ లాగా పిలవబడతాయి, ఎందుకంటే ఇవి భాష అందించే కనిష్ఠ స్థాయి డేటా రకాలు. ఏడు ప్రిమిటివ్ డాటా రకాలు ఉన్నాయి: string, number, bigint, boolean, undefined, null మరియు symbol. ప్రతీ ప్రిమిటివ్ ఏమిటో ఒక సారి ఊహించండి. zebra అంటే ఏమిటి? 0 అంటే? true అంటే? ### సంఖ్యలు సంఖ్యలు జావాస్క్రిప్ట్‌లో అత్యంత సరళమైన డేటా రకం. మీరు 42 వంటి సంపూర్ణ సంఖ్యలు, 3.14 లాంటి దశాంసాలు, లేదా -5 లాంటి ప్రతికూల సంఖ్యలతో పని చేస్తున్నా, జావాస్క్రిప్ట్ వాటిని ఒకే విధంగా వ్యవహరిస్తుంది. ముందు మన వేరియబుల్ గుర్తొచ్చా? మనం నిల్వ చేసిన 123 నిజానికి సంఖ్య డేటా రకం: ప్రధాన లక్షణాలు: - జావాస్క్రిప్ట్ స్వయంచాలకంగా సంఖ్యల విలువలను గుర్తిస్తుంది - మీరు ఈ వేరియబుల్స్‌తో గణిత ఆపరేషన్లను చేయవచ్చు - ప్రత్యేక రకం ప్రకటన అవసరం లేదు వేరియబుల్సందు అన్ని రకాల సంఖ్యలు నిల్వ చేయవచ్చు, దశాంసాలు లేదా ప్రతికూల సంఖ్యలు సహా. సంఖ్యలను గణిత ఆపరేటర్స్‌తో ఉపయోగించచ్చు, ఇది తర్వాతి భాగంలో వివరించబడింది. ### గణిత ఆపరేటర్లు గణిత ఆపరేటర్లు జావాస్క్రిప్ట్‌లో గణిత లెక్కింపులను చేయడానికి అనుమతిస్తాయి. ఈ ఆపరేటర్లు శతాబ్దాలుగా గణితజ్ఞులు ఉపయోగించిన సూత్రాలను అనుసరిస్తాయి – అల్-ఖ్వారిజ్మీ వంటి పండితుల రచనలలో కనిపించే అదే చిహ్నాలు. ఆపరేటర్లు సంప్రదాయ గణిత విధానాలా పనిచేస్తాయి: వేసుకోవాలంటే జోడించడం, తీసివేయాలంటే తీసివేయడం, మొదలైనవి. గణిత ఫంక్షన్లు నిర్వహించేటప్పుడు ఉపయోగించే కొన్ని ఆపరేటర్లను ఇక్కడ ను చూపడం జరిగింది: ✅ ప్రయత్నించండి! మీ బ్రౌజర్ కన్సోల్‌లో గణిత లెక్కింపు ఆపరేషన్ ఒకటి ప్రయత్నించండి. ఫలితాలు మిమ్మల్ని ఆశ్చర్యచకితులు చేస్తాయా? ### 🧮 గణిత నైపుణ్యాల పరిశీలన: విశ్వాసంతో లెక్కించండి మీ గణిత అర్థం పరీక్షించండి: - / (భాగం) మరియు % (శేషం) మధ్య తేడా ఏమిటి? - 10 % 3 విలువు ఏమిటో ఊహించాల్సి ఉంది? (సూచన: అది 3.33 కాదు...) - ప్రోగ్రామింగ్‌లో శేష ఆపరేటర్ ఎందుకు ఉపయోగకరమై ఉంటుంది? ### స్ట్రింగ్స్ జావాస్క్రిప్ట్‌లో, పాఠ్య డేటాను స్ట్రింగ్స్ (strings) గా ప్రాతినిథ్యం చేస్తారు. "స్ట్రింగ్" పదం అక్షరాలను క్రమంగా జతకలిపిన విజ్ఞానం నుంచి వచ్చింది, మధ్యయుగ మఠాలలో శ్రద్ధగా అక్షరాల నుంచి పదాలు, వాక్యాలు తయారు చేసిన విధానాన్ని పోలి ఉంటుంది. స్ట్రింగ్స్ వెబ్ డెవలప్‌మెంట్‌లో ప్రాథమికం. ఒక వెబ్‌సైట్‌పై చూపించే ప్రతి టెక్స్ట్ – వినియోగదారు పేర్లు, బటన్ లేబుల్స్, లోప సందేశాలు, కంటెంట్ – అన్ని స్ట్రింగ్ డేటాగా నిర్వహించబడతాయి. స్ట్రింగ్స్ అర్థం చేసుకోవడం పనితనపు యూజర్ ఇంటర్‌ఫేస్‌లను తయారుచేయడానికి అవసరం. స్ట్రింగ్స్ ఒకల మేటి కోట్స్ లేదా ద్విటీయ కోట్స్ మధ్య ఉన్న అక్షరాల సమాహారం. ఈ భావనలు అర్థం చేసుకోండి: - స్ట్రింగ్స్ నిర్వచించేందుకు ఒకల కోట్స్ ' లేదా ద్విటీయ కోట్స్ " వాడతారు - అక్షరాలు, సంఖ్యలు మరియు చిహ్నాలు ఉన్న పాఠ్య డేటాను నిల్వ చేస్తుంది - వేరియబుల్స్ కోసం స్ట్రింగ్ విలువలను అసైన్ చేస్తుంది - పాఠ్యాన్ని వేరియబుల్ номићతినుండి వేరుచేయడానికి కోట్స్ అవసరం స్ట్రింగ్ రాయేటప్పుడు కోట్స్ వాడాలి, లేకపోతే జావాస్క్రిప్ట్ దానిని వేరియబుల్ పేరు అనుకుంటుంది. ### స్ట్రింగ్ ఫార్మాటింగ్ స్ట్రింగ్ నిర్వహణ ద్వారా మీరు పాఠ్యం భాగాలను కలపవచ్చు, వేరియబుల్స్‌ను చేర్చవచ్చు, మరియు ప్రోగ్రామ్ పరిస్థితికి అనుగుణంగా సాంద్రీకృత కంటెంట్ సృష్టించవచ్చు. ఈ సాంకేతికత టెక్స్ట్‌ని ప్రోగ్రామింగ్ రూపంలో నిర్మించడానికి సహాయపడుతుంది. సాధారణంగా, మీరు బహుళ స్ట్రింగ్స్ ని కలపాల్సి వస్తుంది – దీన్ని కనక్టెనేషన్ అంటారు. రెండు లేదా అంతకంటే ఎక్కువ స్ట్రింగులను కణకటించడానికి లేదా వాటిని కలపడానికి, + ఆపరేటర్ ఉపయోగించండి. దశలవారీగా, ఇది ఏమి జరుగుతున్నది అనేది ఇక్కడ ఉంది: - + ఆపరేటర్ ఉపయోగించి అనేక స్ట్రింగులను మిళితం చేస్తుంది - మొదటి ఉదాహరణలో స్ట్రింగులను మధ్యలో ఖాళీలు లేకుండా కలపడం - వాచకతకు స్ట్రింగుల మధ్య " " ఖాళీ అక్షరాలను చేరుస్తుంది - సరైన ఆకృతీకరణ కోసం కామాలు వంటి విరామార్థ చిహ్నాలను చేర్చడం ✅ JavaScriptలో ఎందుకు 1 + 1 = 2 కానీ '1' + '1' = 11 అవుతుంది? దీని గురించి ఆలోచించండి. '1' + 1 గురించి ఏం జరుగుతుంది? టెంప్లేట్ లిటరల్స్ అనేవి స్ట్రింగులను ఆకృతీకరించడానికి మరో మార్గం, కానీ క్వోట్ల బదులు బ్యాక్‌టిక్ ఉపయోగిస్తారు. ఏదైనా సున్నితమైన వచనం కాకుండా ఉంచాలి ${ } ప్లేస్హోల్‌డర్లు లో. ఇందులో స్ట్రింగ్ అయ్యే వేరియబుల్స్ కూడా ఉంటాయి. ప్రతి భాగాన్ని అర్థం చేసుకుందాం: - టెంప్లేట్ లిటరల్స్ సృష్టించడానికి సాధారణ క్వోట్ల బదులు బ్యాక్‌టిక్కులు ` `` ఉపయోగిస్తుంది - ${} ప్లేస్హోల్డర్ సింటాక్స్ ఉపయోగించి వేరియబుల్స్‌ను నేరుగా ఎంబెడ్ చేస్తుంది - ఖాళీలు మరియు ఆకృతీకరణను గానీ, అలాగే వ్రాయబడినట్లుగా పూర్తిగా సంరక్షిస్తుంది - వేరియబుల్స్ తో సంక్లిష్ట స్ట్రింగులను సృష్టించడానికి చక్కటి పద్ధతి అందిస్తుంది ఈ రెండు విధానాలలో ఏదైనా మీ ఆకృతీకరణ అవసరాలను సాధించవచ్చు, కానీ టెంప్లేట్ లిటరల్స్ అన్ని ఖాళీలు మరియు లైన్ బ్రేక్స్ ని గౌరవిస్తాయి. ✅ టెంప్లేట్ లిటరల్ మరియు సాధారణ స్ట్రింగ్ ఎప్పుడు ఉపయోగిస్తారు? ### 🔤 స్ట్రింగ్ నైపుణ్యం పరీక్ష: టెక్స్ట్ మానిప్యులేషన్ విశ్వాసం మీ స్ట్రింగ్ నైపుణ్యాలను మూల్యాంకనం చేయండి: - '1' + '1' ఎందుకు 2 కాదు '11' అవుతుంది అనేది మీరు వివరిస్తారా? - మీరు ఏ స్ట్రింగ్ పద్ధతిని మరింత వాచకతగా భావిస్తారు: కణకటన లేదా టెంప్లేట్ లిటరల్స్? - స్ట్రింగ్ చుట్టూ క్వోట్లను మర్చిపోయితే ఏమి జరుగుతుంది? ### బూలియన్స్ బూలియన్స్ అత్యంత సాదారణ డేటా రూపం: అవి দুটি విలువలలో ఒకదాన్ని మాత్రమే కలిగి ఉంటాయి – true లేదా false. ఈ బైనరీ లాజిక్ వ్యవస్థ 19వ శతాబ్దంలోని గణిత శాస్త్రజ్ఞుడు జర్జ్ బూల్ అభివృద్ధి చేసిన బూలియన్ ఆల్జీబ్రా నుండి వెలువడింది. సాదాసీదాగా ఉన్నా, బూలియన్స్ ప్రోగ్రాం లాజిక్ కోసం చాలా అవసరమైనవి. అవి మీ కోడ్‌ను షరతుల ఆధారంగా నిర్ణయాలు తీసుకునే విధానాన్ని అనుమతిస్తాయి – వాడుకదారు లాగిన్ అయిందా, బటన్ క్లిక్ అయిందా, లేదా నిర్దిష్ట ప్రమాణాలు తీర్చబడ్డాయా అన్నది. బూలియన్స్ రెండు విలువలే కలిగి ఉండవచ్చు: true లేదా false. బూలియన్స్ సహాయంతో నిర్దిష్ట షరతులు తీరినప్పుడు ఏ కోడ్ లైన్లు అమలు అవుతాయో మీరు నిర్ణయించవచ్చు. చాలా సందర్భాల్లో, ఆపరేటర్లు బూలియన్ విలువను సెట్ చేయడంలో సహాయపడతాయి, మరియు మీరు తరచూ వేరియబుల్స్‌ ప్రారంభం, లేదా వాటి విలువలు ఆపరేటర్ సహాయంతో నవీకరింపబడుతున్నట్టు గమనిస్తారు. పైన చేసినది: - బూలియన్ విలువ true ని నిలుపుకొనే వేరియబుల్‌ను సృష్టించాము - బూలియన్ విలువ false ని నిలుపుకోవడం ప్రదర్శించాము - ఖచ్చితంగా true మరియు false అనే కీవర్డ్స్ ను (క్వోట్ల అవసరం లేదు) ఉపయోగించాము - ఈ వేరియబుల్స్‌ను షరతు భావన లలో ఉపయోగించేందుకు సిద్ధం చేసాము ✅ ఒక వేరియబుల్‌ను 'ట్రూతీ' అని పరిగణించవచ్చు అంటే అది బూలియన్ true గా తేలికవ్వాలి. ఆసక్తికరంగా, JavaScriptలో, అన్ని విలువలు ట్రూతీగా పరిగణించబడతాయి, తప్ప టాల్సీగా నిర్వచించబడినవి మాత్రమే భిన్నంగా ఉంటాయి. ### 🎯 బూలియన్ లాజిక్ పరీక్ష: నిర్ణయం తీసుకునే నైపుణ్యాలు మీ బూలియన్ అవగాహనను పరీక్షించండి: - మీరు ఎందుకు అనుకుంటున్నారు JavaScriptలో true మరియు false కంటే మరింత "ట్రూతీ" మరియు "టాల్సీ" విలువలు కూడా ఉన్నాయని? - 0, "0", [], "false"లో ఏది టాల్సీ అని మీరు భావిస్తారు? - బూలియన్స్ ప్రోగ్రాం ఫ్లో నియంత్రణలో ఎలా ఉపయోగపడతాయి? --- ## 📊 మీ డేటా రకాల సాధనాల సంక్షిప్తం ## GitHub Copilot ఏజెంట్ సవాలు 🚀 ఏజెంట్ మోడ్ ఉపయోగించి క్రింది సవాలను పూర్తి చేయండి: వివరణ: మీరు ఈ పాఠంలో నేర్పుకున్న అన్ని JavaScript డేటా రకాల ఉపయోగాలను ప్రదర్శించే వ్యక్తిగత సమాచార నిర్వాహకిని నిర్మించండి. ఇది వాస్తవ ప్రపంచ డేటా సన్నివేశాలను నిర్వహిస్తుంది. ప్రాంప్ట్: వ్యక్తి పేరు (స్ట్రింగ్), వయస్సు (నంబర్), విద్యార్థి స్థితి (బూలియన్), ఇష్ట రంగులు జాబితాగా (అర్రే), మరియు అడ్రస్ (స్ట్రీట్, సిటీ, జిప్ కోడ్) కలిగిన యూజర్ ప్రొఫైల్ ఆబ్జెక్టును సృష్టించే JavaScript ప్రోగ్రాం రూపొందించండి. ప్రొఫైల్ సమాచారాన్ని ప్రదర్శించడానికి మరియు వ్యక్తిగత ఫీల్డులను నవీకరించడానికి ఫంక్షన్లు చేర్చండి. స్ట్రింగ్ కణకటన, టెంప్లేట్ లిటరల్స్, వయస్సుతో గణిత ఆపరేషన్లు మరియు విద్యార్థి స్థితి కోసం బూలియన్ లాజిక్ ఉపయోగాన్ని చూపండి. ఏజెంట్ మోడ్ గురించి మరింత తెలుసుకోండి. ## 🚀 సవాలు JavaScriptలో కొన్ని ప్రవర్తనలు డెవలపర్లు ఆశ్చర్యానికి గురిచేయవచ్చు. ఒక ప్రాచీన ఉదాహరణ: బ్రౌజర్ కన్సోల్ లో టైప్ చేయండి: let age = 1; let Age = 2; age == Age మరియు ఫలితాన్ని గమనించండి. ఇది false ఇస్తుంది – కారణం మీరు గమనించగలరా? ఇది JavaScriptలో అర్థం చేసుకోవలసిన అనేక ప్రవర్తనలలో ఒకటి మాత్రమే. ఈ విచిత్రతలను తెలుసుకోవడం మంచి విశ్వసనీయ కోడ్ రాయడానికి మరియు సమస్యలు డీబగ్ చేయడానికి సహాయపడుతుంది. ## లెక్చర్ తర్వాత క్విజ్ లెక్చర్ తర్వాత క్విజ్ ## సమీక్ష & స్వీయ అధ్యయనం ఈ JavaScript వ్యాయామాల జాబితాని చూడండి మరియు ఒకటి ప్రయత్నించండి. మీరు ఏమి నేర్చుకున్నారు? ## అసైన్మెంట్ డేటా రకాలు అభ్యాసం ## 🚀 మీ JavaScript డేటా రకాల ప్రావీణ్యం టైమ్‌లైన్ ### ⚡ తర్వాతి 5 నిమిషాల్లో మీరు చేయగలిగేది - [ ] బ్రౌజర్ కన్సోల్ తెరవండి మరియు వేర్వేరు డేటా రకాలతో 3 వేరియబుల్స్ సృష్టించండి - [ ] సవాలు ప్రయత్నించండి: let age = 1; let Age = 2; age == Age మరియు ఎందుకు false అవుతుంది తెలుసుకోండి - [ ] మీ పేరు మరియు ఇష్ట సంఖ్యతో స్ట్రింగ్ కణకటనం ప్రాక్టీస్ చేయండి - [ ] ఒక స్ట్రింగ్ కు సంఖ్య జోడించినప్పుడు ఏమి జరుగుతుందో పరీక్షించండి ### 🎯 ఈ గంటలో మీరు సాధించగలిగేది - [ ] పాఠం తర్వాత క్విజ్ పూర్తి చేసి ఎటువంటి సందేహాలు ఉన్నాయో సమీక్షించండి - [ ] రెండు సంఖ్యలను యాడ్, సబ్‌ట్రాక్ట్, మల్టిప్లై, డివైడ్ చేసే మిని కాల్క్యులేటర్ సృష్టించండి - [ ] టెంప్లేట్ లిటరల్స్ ఉపయోగించి సరళమైన పేరు ఆకృతీకర్తను తయారు చేయండి - [ ] == మరియు === తులనాత్మక ఆపరేటర్ల మధ్య వ్యత్యాసాలను అన్వేషించండి - [ ] వేర్వేరు డేటా రకాల మధ్య మార్పిడి ప్రాక్టీస్ చేయండి ### 📅 మీ వారాంతం JavaScript పునాదులు - [ ] అసైన్‌మెంట్‌ను నమ్మకంతో మరియు సృజనాత్మకతతో పూర్తి చేయండి - [ ] నేర్చుకున్న అన్ని డేటా రకాలతో వ్యక్తిగత ప్రొఫైల్ ఆబ్జెక్టును సృష్టించండి - [ ] CSS-Tricks నుండి JavaScript వ్యాయామాలతో ప్రాక్టీస్ చేయండి - [ ] బూలియన్ లాజిక్ ఉపయోగించి సరళమైన ఫారమ్ వాలిడేటర్ సృష్టించండి - [ ] అర్రే మరియు ఆబ్జెక్ట్ డేటా రకాలపై ప్రాక్టీస్ చేయండి (భవిష్యత్తు పాఠాల అవలోకనం) - [ ] JavaScript కమ్యూనిటీతో చేరి డేటా రకాల గురించి ప్రశ్నలు అడగండి ### 🌟 మీ నెల రోజుల మార్పు - [ ] పెద్ద ప్రోగ్రామింగ్ ప్రాజెక్టుల్లో డేటా రకాల జ్ఞానాన్ని ప్రముఖంగా ఉపయోగించండి - [ ] ప్రతి డేటా రకాన్ని నిజ జీవిత అనువర్తనాల్లో ఎప్పుడు మరియు ఎందుకు ఉపయోగించాలో అర్థం చేసుకోండి - [ ] ఇతర ప్రారంభకులకు JavaScript ప్రాథమికాలను అర్థం చేసుకోవడంలో సహాయం చేయండి - [ ] భిన్న రకాల యూజర్ డేటాను నిర్వహించే చిన్న అప్లికేషన్ నిర్మించండి - [ ] టైపు కోర్షన్ మరియు కఠిన సరిపోలిక (strict equality) వంటి అధునాతన డేటా రక భావనలను అన్వేషించండి - [ ] డాక్యుమెంటేషన్ మెరుగుదలతో ఓపెన్ సోర్స్ JavaScript ప్రాజెక్టులకు సహాయం చేయండి ### 🧠 చివరి డేటా రక ప్రావీణ్యత తనిఖీ మీ JavaScript ప్రాధమికాన్ని జరుపుకోండి: - ఏ డేటా రకం దాని ప్రవర్తన పరంగా మీకు అత్యంత ఆశ్చర్యంగా అనిపించింది? - వేరియబుల్స్ మరియు కాన్స్టెంట్లను స్నేహితుడికి వివరించడంలో మీరు ఎంత సంతృప్తిగా ఉన్నారు? - JavaScript టైపు వ్యవస్థ గురించి మీరిచ్చిన అత్యంత ఆసక్తికర విషయం ఏమిటి? - ఈ ప్రాథమికాలతో మీరు ఏ నిజ జీవిత అనువర్తనాన్ని నిర్మించవచ్చు అని ఊహించుకోవచ్చు? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> వెలిపించే నోటీసు: ఈ డాక్యుమెంట్‌ను AI అనువాద సేవ Co-op Translator ఉపయోగించి అనువదించబడింది. మేము సరిగా ఉండే ప్రయత్నం చేస్తాం, అయినప్పటికీ ఆటోమేటెడ్ అనువాదాల్లో తప్పులు లేదా పొరపాట్లు ఉండవచ్చు. మూల డాక్యుమెంట్ native భాషలోనే అధికారిక మూలంగా పరిగణించాలి. ప్రధాన సమాచారం కోసం, వృత్తిపరమైన మానవ అనువాదం సిఫారసు చేయబడుతుంది. ఈ అనువాదం వాడినందರಿಂದ కలిగే ఏ తప్పుదోవలుబాళ్ళకో లేదా తప్పుడు అర్థాలకో మేము బాధ్యత వహించమేము. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

జావాస్క్రిప్ట్ బేసిక్స్: మెల్యాళ్లు మరియు ఫంక్షన్లు

## లెక్చర్ ముందు క్విజ్ లెక్చర్ ముందు క్విజ్ అనే కోడ్ ను పునరావృతం చేయడం ప్రోగ్రామింగ్ లో అత్యంత సాధారణమైన నిరాశలలో ఒకటి. ఫంక్షన్లు ఈ సమస్యను పరిష్కరిస్తాయి, మీరు కోడ్ ను పునర్వినియోగయోగ్యమైన బ్లాక్‌లలో ప్యాకేజీ చేయగలుగుతారు. ఫంక్షన్లను హెన్రీ ఫోర్డ్ అసెంబ్లీ లైన్ విప్లవాత్మకంగా చేసింది అటువంటి ప్రమాణీకృత భాగాలుగా పరిగణించండి – ఒక నమ్మదగిన భాగాన్ని సృష్టించిన తర్వాత, మీరు దాన్ని ఎక్కడ కావలే అక్కడ ఉపయోగించవచ్చు, మొదలుఅరు నుండి పునర్రచయించడం అవసరం లేదు. ఫంక్షన్లు మీకు కోడ్ భాగాలను బండిల్ చేయడానికి అనుమతిస్తాయి, కాబట్టి మీరు వాటిని మీ ప్రోగ్రామ్ లో ఎక్కడైనా పునర్వినియోగం చేసుకోవచ్చు. ప్రతి చోటా అదే లాజిక్ ను కాపీ చేసి పేస్ట్ చేయాలనుకోవడం వులా కాకుండా, మీరు ఒకసారి ఫంక్షన్ ను సృష్టించి అవసరమైనప్పుడు దాన్ని కాల్ చేయవచ్చు. ఈ విధానం మీ కోడ్ ను సుసంఘటితంగా ఉంచుతుంది మరియు తాజాకరణలను ఎంతో సులభంగా చేస్తుంది. ఈ పాఠంలో, మీరు మీ స్వంత ఫంక్షన్లను ఎలా సృష్టించాలో, వారికి సమాచారాన్ని ఎలా పంపించాలో, మరియు ఉపయోగకరమైన ఫలితాలను ఎలా తీసుకోవాలో నేర్చుకుంటారు. మీరు ఫంక్షన్ల మరియు మెల్యాళ్ల మధ్య తేడాను గుర్తిస్తారు, ఆధునిక సింటాక్స్ పద్ధతులను నేరుగుతారు మరియు ఫంక్షన్లు ఇతర ఫంక్షన్లతో ఎలా పనిచెయ్యగలవో చూస్తారు. ఈ కాన్సెప్ట్‌లను దశల వారీగా మీరు ఏర్పాటు చేస్తారు. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## ఫంక్షన్లు ఫంక్షన్ అనేది ఒక స్వయంక్రియాత్మక కోడ్ బ్లాక్, ఇది నిర్దిష్ట పనిని నిర్వహిస్తుంది. ఇది మీరు కావలసినపుడు అమలు చేసుకునే లాజిక్‌ను కలిపి ఉంచుతుంది. మీ ప్రోగ్రామ్‌లో ఒకటే కోడ్‌ను బహుళసార్లు రాయడం అంతే కాకుండా, మీరు దానిని ఒక ఫంక్షన్‌లో ప్యాకేజీ చేసి అవసరమైనప్పుడు ఆ ఫంక్షన్‌ను కాల్ చేయవచ్చు. ఈ విధానం మీ కోడ్‌ను శుభ్రంగా ఉంచుతుంది మరియు నవీకరణలను చాలా సులభతరం చేస్తుంది. మీ కోడ్‌బేస్‌లో 20 వేర్వేరు ప్రదేశాల్లో వ్యాప్తిస్థితిలో ఉన్న లాజిక్‌ను మార్చాల్సి వచ్చినపుడు సంరక్షణ సవాలును బట్టి చూడండి. మీ ఫంక్షన్ల పేర్లను వివరణాత్మకంగా పెట్టడం అత్యవసరం. బాగా నామకరణం చేపట్టిన ఫంక్షన్ దాని ఉద్దేశాన్ని స్పష్టంగా తెలియజేస్తుంది – మీరు cancelTimer() ను చూసే వాతావరణంలో అది ఏమి చేస్తుందో వెంటనే అర్థమవుతుంది, అలాగే స్పష్టంగా లేబుల్ చేసిన బటన్ మీరు క్లిక్ చేసినా ఏమి జరుగుతుందో మీకు చెప్పుతుంది. ## ఫంక్షన్ సృష్టించడం మరియు కాల్ చేయడం మనం ఫంక్షన్‌ని ఎలా సృష్టించమో పరిశీలించుకుందాం. సింటాక్స్ నిరంతర నమూనాను అనుసరిస్తుంది: దాన్ని విడగొట్టి చూద్దాం: - function కీవర్డ్ జావాస్క్రిప్ట్‌కు "నేను ఫంక్షన్ సృష్టిస్తున్నాను!" అని చెప్తుంది - nameOfFunction వద్ద మీరు మీ ఫంక్షన్‌కు వివరణాత్మక పేరు ఇస్తారు - కోణాకాసులు () లో మీరు పారామితులను చేర్చవచ్చు (దాన్ని త్వరలో చూడబోతాము) - కలుపు బ్రేసులు {} లో మీరు ఫంక్షన్ ని కాల్ చేసినపుడు నడిచే అసలు కోడ్ ఉంటుంది మనం సింపుల్ గ్రీటింగ్ ఫంక్షన్‌ని తయారు చేసి దీన్ని పరిశీలిద్దాం: ఈ ఫంక్షన్ కంసోల్ లో "Hello, world!" అనే సందేశాన్ని ప్రింట్ చేస్తుంది. మీరు దీన్ని నిర్వచించిన తర్వాత, మీరు దీన్ని ఎటువంటి విధంగా అనేకసార్లు ఉపయోగించవచ్చు. మీరు మీ ఫంక్షన్‌ను అమలు చేయాలంటే (లేదా "కాల్స్" చేయాలంటే), దాని పేరును తర్వాత కోణాకాసులు రాయండి. జావాస్క్రిప్ట్ మీ ఫంక్షన్‌ను మీరు కాల్ చేసే ముందు లేదా తరువాత నిర్వచించడానికి అనుమతిస్తుంది – జావాస్క్రిప్ట్ యంత్రం అమలు ఆర్డర్‌ను నిర్వహిస్తుంది. మీరు ఈ వరుసను నడిపితే, మీరు displayGreeting ఫంక్షన్ లోని అన్ని కోడ్‌ను అమలు చేస్తుంది, మీ బ్రౌజర్ కన్సోల్ లో "Hello, world!" ప్రదర్శిస్తుంది. మీరు ఈ ఫంక్షన్ ను పునర్వినియోగం చేయవచ్చు. ### 🧠 ఫంక్షన్ ప్రాథమిక పరీక్ష: మీ మొదటి ఫంక్షన్ల నిర్మాణం ప్రాథమిక ఫంక్షన్ల గురించి మీ భావనను తెలుసుకుందాం: - ఫంక్షన్ నిర్వచనాలలో {} కలుపు బ్రేసులు ఎందుకు వాడుతాము? - మీరు displayGreeting ను కోణాకాసులు లేకుండా రాసినప్పుడెమిటి జరుగుతుంది? - మీరు అదే ఫంక్షన్‌ను పునరావృతంగా ఎందుకు కాల్ చేయాలనుకుంటారు? ### ఫంక్షన్ ఉత్తమ ఉపయోగాలు మంచి ఫంక్షన్లు వ్రాయడానికి కొన్ని చిట్కాలు: - మీ ఫంక్షన్లకు స్పష్టమైన, వివరణాత్మక పేర్లు పెట్టండి – భవిష్యత్తులో మీరు ధన్యవాదములు తెలుపుతారు! - బహుళపద పేర్ల కోసం camelCase ఉపయోగించండి (ఉదా: calculateTotal బదులు calculate_total) - ప్రతి ఫంక్షన్ ఒకదే పని అద్భుతంగా చేయడం పైన దృష్టి పెట్టండి ## ఫంక్షన్ కి సమాచారాన్ని ఇవ్వడం మన displayGreeting ఫంక్షన్ పరిమితమైంది – ఇది అన్నింటికీ "Hello, world!" మాత్రమే ప్రదర్శించగలదు. పారామితులు ఫంక్షన్లను మరింత సువిధాత్మకంగా మరియు ఉపయోగకరంగా మార్చేందుకు దోహదపడతాయి. పారామితులు అనేవి ప్లేస్‌హోల్డర్ల్లా ఉంటాయి, మీరు ప్రతి సారి ఫంక్షన్ ఉపయోగించినప్పుడు వేరే విలువలను చేర్చవచ్చు. ఇలా, అదే ఫంక్షన్ ప్రతి కాల్ లో వేరే సమాచారంతో పనిచేస్తుంది. మీరు ఫంక్షన్ నిర్వచించినప్పుడు పారామితులను కోణాకాసులలో పెట్టాలి, ఏకకాలంలో అనేక పారామితులను విరామచిహ్నంతో విడగొడతారు: ప్రతి పారామిటర్ ఒక ప్లేస్‌హోల్డర్ లాంటిదే – మీరు ఎవరికైనా మీ ఫంక్షన్ ను కాల్ చేస్తే వారు నిజమైన విలువలను ఇస్తారు, అవి ఈ చోట్లకి జత చేయబడతాయి. మన గ్రీటింగ్ ఫంక్షన్ సరికొత్తగా పేరు పొందుడం చేయేద్దాం: ఇక్కడ మీరు బ్యాక్‌టిక్స్ (` `) మరియు ${}` ఉపయోగించి పేరును సందేశంలో నేరుగా చేర్చటం గమనించండి – ఇదే టెంప్లెట్ లిటరల్ అని అంటారు, ఇది వేరియబుల్స్ మిళితStrings సృష్టించడానికి చాలా ఉపయోగకరమైన పద్ధతి. ఇప్పుడు మనం ఫంక్షన్ ను కాల్ చేస్తే ఏ పేరైనా ఇస్తాం: జావాస్క్రిప్ట్ కూడా 'Christopher' ను name పేరామితి కి కేటాయించి, వ్యక్తిగతీకరించిన సందేశం "Hello, Christopher!" ని తయారు చేస్తుంది. ## డిఫాల్ట్ విలువలు మంచి దృష్టాంతం! మనం కొంత పారామితులను ఐచ్ఛికం గా చేసుకోవాలనుకుంటే? అందుకు డిఫాల్ట్ విలువలు ఉపయోగపడతాయి! మనం కొందరు మనం అభివాద పదాన్ని కస్టమైజ్ చేసుకోవాలని అనుకుంటే, కానీ వారు ఇచ్చకపోతే "Hello"ని డిఫాల్ట్ గా వాడే విధంగా సెటప్ చేయవచ్చు. డిఫాల్ట్ విలువలను సమానతరియక చిహ్నం ఉపయోగించి సెట్టింగ్ చేయవచ్చు, వేరియబుల్ వలే: ఇక్కడ, name ఇంకా అవసరం, కానీ salutation కు ఎవరైనా విభిన్నమైన గ్రీటింగ్ అందించనప్పుడు 'Hello' బ్యాకప్ విలువ ఉంది. ఇప్పుడు మనం ఈ ఫంక్షన్‌ను రెండు విధాలుగా కాల్ చేయవచ్చు: మొదటి కాల్ లో, మేము గ్రీటింగ్ చెప్పలేదు కనుక జావాస్క్రిప్ట్ డిఫాల్ట్ "Hello" వాడుతుంది. రెండవ కాల్ లో, మన కస్టమ్ "Hi" ఉపయోగిస్తారు. ఈ సౌలభ్యం ఫంక్షన్లను వివిధ పరిస్థితులకు అనుకూలంగా మారుస్తుంది. ### 🎛️ పారామితుల నైపుణ్యం పరీక్ష: ఫంక్షన్లను సడలించుట మీ పారామితుల అర్థం ని పరీక్షించండి: - పారామితి మరియు ఆర్గ్యుమెంట్ మధ్య తేడా ఏమిటి? - నిజ జీవిత ప్రోగ్రామింగ్‌లో డిఫాల్ట్ విలువలు ఎందుకు ఉపయోగకరంగా ఉంటాయి? - మీరు పారామితుల కంటే ఎక్కువ ఆర్గ్యుమెంట్లు పంపితే ఏమవుతుంది అని ఊహించగలరా? ## రిటర్న్ విలువలు ఇప్పటి వరకు మన ఫంక్షన్లు సందేశాలను కంసోల్ లో మాత్రమే ప్రింట్ చేస్తున్నారు, కానీ మీరు ఫంక్షన్ ను ఏదో లెక్కించి ఆ ఫలితాన్ని తిరిగి ఇవ్వాలని అనుకుంటే? అక్కడ return values అనే అంశం వస్తుంది. ఏదో ప్రదర్శించటం కాకుండా, ఫంక్షన్ మీరు నిల్వ చేసుకునే వేరియబుల్ లేదా మీ కోడ్ యొక్క ఇతర భాగాల్లో ఉపయోగించే విలువను తిరిగి ఇస్తుంది. విలువను తిరిగి ఇవ్వటానికి, మీరు return కీవర్డ్ ని ఉపయోగించి ఆ విలువను వ్రాయాలి: ఇంకో ముఖ్య విషయం ఇదే: ఫంక్షన్ return స్టేట్‌మెంట్‌ను ఎదుర్కొన్నప్పుడే వెంటనే ఆపి, ఆ విలువను దాన్ని కాల్ చేసిన దానికి రిటర్న్ చేస్తుంది. మన గ్రీటింగ్ ఫంక్షన్ ను ప్రింట్ చేయాలంటే కాకుండా, సందేశాన్ని తయారుచేసి తిరిగి ఇచ్చేలా మార్చుద్దాం: ఇప్పుడు ఈ ఫంక్షన్ గ్రీటింగ్ ను ప్రింట్ చేయకుండా సృష్టించి మాకు పంపిస్తుంది. తిరిగి వచ్చిన విలువను ఉపయోగించటానికి, దాన్ని వేరియబుల్ లో నిల్వ చేయవచ్చు: ఇప్పుడు greetingMessage లో "Hello, Christopher" ఉంటుంది, దాన్ని మీరు ఎక్కడైనా ఉపయోగించవచ్చు – వెబ్ పేజీ లో చూపించడానికి, ఇమెయిల్ లో చేర్చడానికి లేదా మరొక ఫంక్షన్ కు అందించడానికి. ### 🔄 రిటర్న్ విలువల పరీక్ష: ఫలితాలను తిరిగి పొందటం రితర్న్ విలువల అర్థం మీరు ఎంతవరకు గ్రహించారో ధరించండి: - ఫంక్షన్ లో return స్టేట్‌మెంట్ తరువాత కోడ్ కు ఏమి జరుగుతుంది? - కలపకుండా ప్రింట్ కంటే రిటర్న్ చేయడం ఎందుకు మంచిదని భావిస్తారు? - ఒక ఫంక్షన్ వేరే వర్గాల విలువలు (స్ట్రింగ్, నంబర్, బూలియన్) రిటర్న్ చేయగలదా? ## ఫంక్షన్లు ఫంక్షన్లకు పారామితులుగా ఫంక్షన్లను ఇతర ఫంక్షన్లకు పారామితులుగా పంపవచ్చు. మొదట ఇది క్లిష్టంగా అనిపించవచ్చు, కానీ ఇది శక్తివంతమైన ఫీచర్, ఇది సడలించగల ప్రోగ్రామింగ్ నమూనాలను వీలు చేస్తుంది. ఈ నమూనా చాలా సాధారణం, "ఏదైనా జరిగింది అంటే, ఇది చేయు" అని చెప్పాలి అని ఉంటే చాలు. ఉదాహరణకి, "టైమర్ ముగిసినప్పుడు ఈ కోడ్ నడపండి" లేదా "వినియోగదారు బటన్ క్లిక్ చేసినప్పుడు ఈ ఫంక్షన్ ను కాల్ చేయండి." setTimeout అనే బిల్ట్-ఇన్ ఫంక్షన్ ని చూద్దాం, ఇది కొంత సమయం వెయిట్ చేసి తరువాత కొంత కోడ్ నడిపిస్తుంది. మనం దానికి ఏ కోడ్ నడిపించాలో చెప్పాలి – ఫంక్షన్ పంపే ఉత్తమ సందర్భం! ఈ కోడ్ ప్రయత్నించండి – 3 సెకన్ల తర్వాత ఒక సందేశం కనిపిస్తుంది: మేము displayDone ను (కోణాకాసులు లేకుండా) setTimeout కి పంపుతున్నాము గమనించండి. మనం ఆ ఫంక్షన్‌ను స్వయంగా కాల్ చేయడం లేదు – దాన్ని setTimeout కు ఇచ్చి "3 సెకన్ల తర్వాత దీన్ని కాల్ చేయు" అని చెబుతున్నాము. ### అనామక ఫంక్షన్లు కొన్నిసార్లు మీరు ఒక్క పని కోసం ఒక ఫంక్షన్ కావాలి, అది పేరు పెట్టకపోవచ్చు. ఆలోచించండి – మీరు ఒకసారి మాత్రమే ఉపయోగించేది అంటే, కోడ్లో అదనపు పేరు ఎందుకు జోడించాలి? జావాస్క్రిప్ట్ మీకు అనామక ఫంక్షన్లు సృష్టించే అవకాశం ఇస్తుంది – పేర్లేని ఫంక్షన్లు, వాటిని మీరు అప్పుడు మరియు అక్కడ నిర్వచించవచ్చు. మనం మా టైమర్ ఉదాహరణను అనామక ఫంక్షన్ తో ఇలా మళ్లీ వ్రాయవచ్చు: ఇది అదే ఫలితాన్ని ఇస్తుంది, కానీ ఫంక్షన్ ను setTimeout కాల్ లోనే నేరుగా నిర్వచించడం వల్ల వేరొక డిక్లరేషన్ అవసరం లేదు. ### ఫ్యాట్ యారో ఫంక్షన్లు ఆధునిక జావాస్క్రిప్ట్ లో ఫంక్షన్లు రాయడానికి మరింత సంక్షిప్త పద్ధతి ఉంది, దాన్ని యారో ఫంక్షన్స్ అంటారు. వారు => ఉపయోగిస్తారు (ఒక యారో లా కనిపిస్తుంది), మరియు డెవలపర్లలో చాలా ప్రాచుర్యం పొందాయి. యారో ఫంక్షన్స్ మీరు function కీవర్డ్ వదిలివేసి సంక్షిప్తమైన కోడ్ రాయడానికి అనుమతిస్తాయి. మా టైమర్ ఉదాహరణను యారో ఫంక్షన్‌తో ఇలా వ్రాస్తారు: () లో పారామితులు ఉంటాయి (ఇక్కడ ఖాళీగా ఉంది), తరువాత యారో => వస్తుంది, మరియు చివరగా ఫంక్షన్ బాడీ కలుపు బ్రేసుల్లో ఉంటుంది. ఇది అదే ఫంక్షన్ పని చేస్తుంది మరింత సంక్షిప్త సింటాక్స్‌తో. ### ప్రతి విధానాన్ని ఎప్పుడు ఉపయోగించాలి ప్రతీ విధానాన్ని ఎప్పుడు వాడాలంటే? ఒక ప్రాక్టికల్ మార్గదర్శకం: మీరు ఫంక్షన్ ను అనేకసార్లు ఉపయోగించాలనుకుంటే, దానికి పేరు పెట్టి వేరుగా నిర్వచించు. ఒక ప్రత్యేక పని కోసం అయితే, అనామక ఫంక్షన్ పరిగణించండి. యారో ఫంక్షన్స్ మరియు సాంప్రదాయ సింటాక్స్ రెండూ సరైన ఎంపికలు, అయితే ఆధునిక జావాస్క్రిప్ట్ కోడ్ బేసులలో యారో ఫంక్షన్స్ ఎక్కువగా వాడతారు. ### 🎨 ఫంక్షన్ శైలుల నైపుణ్యం పరీక్ష: సరైన సింటాక్స్ ఎంచుకోవడం మీ సింటాక్స్ అర్థాంతాన్ని పరీక్షించండి: - మీరు ఎప్పుడు యారో ఫంక్షన్స్ ను సాంప్రదాయ ఫంక్షన్ సింటాక్స్ కంటే ప్రాధాన్యం ఇస్తారు? - అనామక ఫంక్షన్ యొక్క ప్రధాన ప్రయోజనం ఏమిటి? - పేరు ఉన్న ఫంక్షన్ అనామక ఫంక్షన్ తో పోలిస్తే ఎప్పుడు మెరుగుగా ఉంటుంది అనుకుంటారు? --- ## 🚀 సవాలు ఫంక్షన్లు మరియు మెథడ్ల మధ్య తేడాను ఒక వాక్యంలో వివరించగలరా? ప్రయత్నించండి! ## GitHub Copilot Agent సవాలు 🚀 క్రింది సవాలుని పూర్తి చేయడానికి ఏజెంట్ మోడ్ ఉపయోగించండి: వివరణ: ఈ పాఠంలో కవర్ చేసిన వివిధ ఫంక్షన్ కాన్సెప్ట్‌లను, మాదిరిగా పారామితులు, డిఫాల్ట్ విలువలు, రిటర్న్ విలువలు, మరియు యారో ఫంక్షన్లతో కూడిన గణిత సంబంధిత ఫంక్షన్‌ల ఉపయోగిత గ్రంథాలయాన్ని సృష్టించండి. ప్రాంప్ట్: mathUtils.js అనే ఒక జావాస్క్రిప్ట్ ఫైల్ సృష్టించండి, ఇందులో క్రింద వివరించిన ఫంక్షన్లు ఉండాలి: 1. రెండు పారామితులు తీసుకుని వాటి యోగాన్ని ఇవ్వు add ఫంక్షన్ 2. డిఫాల్ట్ పారామితుల విలువలతో multiply ఫంక్షన్ (రెండో పారామితి డిఫాల్ట్ గా 1) 3. ఒక సంఖ్య తీసుకొని దాని చదరంగం ఇచ్చే యారో ఫంక్షన్ square 4. మరో ఫంక్షన్ మరియు రెండు సంఖ్యలను పారామితులుగా తీసుకుని ఆ ఫంక్షన్ ను ఆ సంఖ్యలపై అమలు చేసే calculate ఫంక్షన్ 5. ప్రతి ఫంక్షన్ ను సంబంధిత టెస్ట్ కేసులతో కాల్ చేస్తూ ప్రకటన చేయండి ఏజెంట్ మోడ్ గురించి మరింత చదవండి. ## లెక్చర్ తరువాత క్విజ్ లెక్చర్ తరువాత క్విజ్ ## సమీక్ష & స్వవిద్య కోడింగ్ బేసుల్లో యారో ఫంక్షన్లు ಹೆಚ್ಚుతున్నాయని గమనించి, యారో ఫంక్షన్లపై మరింత చదవటం విలువయుతం. ఒక ఫంక్షన్ రాయడం అభ్యసించి, తరువాత దాన్ని ఈ సింటాక్స్ తో మళ్లీ రాయండి. ## అస్సైన్మెంట్ ఫంక్షన్లతో సరదా --- ## 🧰 మీ జావాస్క్రిప్ట్ ఫంక్షన్స్ సాధన పెట్టి 요약ం --- ## 🚀 మీ జావాస్క్రిప్ట్ ఫంక్షన్స్ ప్రావీణ్యత సమయరేఖ ### ⚡ తర్వాతి 5 నిమిషాల్లో మీరు చేయగలిగేది - [ ] మీ ఇష్టమైన సంఖ్యను రిటర్న్ చేసే ఒక సింపుల్ ఫంక్షన్ రాయండి - [ ] రెండు పారామితుల కలిగిన మరియు వాటిని కలిపే ఫంక్షన్ సృష్టించండి - [ ] సాంప్రదాయ ఫంక్షన్‌ను ఆర్రో ఫంక్షన్_Syntaxకి మార్పిడి చేయడానికి ప్రయత్నించండి - [ ] ఛాలెంజ్‌ను అభ్యసించండి: ఫంక్షన్లు మరియు మెథడ్స్ మధ్య తేడాను వివరించండి ### 🎯 ఈ గంటలో మీరు సాధించగలిగేది - [ ] పోస్ట్-లెసన్ క్విజ్ పూర్తి చేసి ఏదైనా గందరగోళమైన కాన్సెప్ట్‌లను సమీక్షించండి - [ ] GitHub Copilot ఛాలెంజ్ నుండి మ్యాథ్ యుటిలిటీస్ లైబ్రరీ నిర్మించండి - [ ] ఒక ఫంక్షన్‌ను పారామీటరుగా ఉపయోగించే మరో ఫంక్షన్ సృష్టించండి - [ ] డిఫాల్ట్ పారామీటర్లతో ఫంక్షన్లను రాయడం అభ్యసించండి - [ ] ఫంక్షన్ రిటర్న్ విలువలలో టెంప్లేట్ లిటర అలను ప్రయోగించండి ### 📅 మీ వారపత్రిక ఫంక్షన్ నైపుణ్యం - [ ] "ఫన్ విత్ ఫంక్షన్స్" అసైన్‌మెంట్‌ను సృజనాత్మకంగా పూర్తి చేయండి - [ ] మీరు రాయగా పునరావృతమైన కోడ్‌ను పునర్వినియోగయోగ్య ఫంక్షన్లుగా మార్చండి - [ ] కేవలం ఫంక్షన్లను ఉపయోగించి చిన్న క్యాలკ్యులేటర్‌ను నిర్మించండి (గ్లోబల్ వేరియబుల్స్ లేకపోయినా సరే) - [ ] map() మరియు filter() వంటి అర్రే మెథడ్లతో ఆర్రో ఫంక్షన్లను అభ్యసించండి - [ ] సాధారణ పనుల కోసం యుటిలిటి ఫంక్షన్ల సేకరణను రూపొందించండి - [ ] హయ్యర్-ఆర్డర్ ఫంక్షన్లు మరియు ఫంక్షనల్ ప్రోగ్రామింగ్ కాన్సెప్ట్‌లను అధ్యయనం చేయండి ### 🌟 మీ నెలపాటు పరివర్తనం - [ ] క్లోజర్‌లు మరియు స్కోప్ వంటి అధిక స్థాయి ఫంక్షన్ కాన్సెప్ట్‌లను చక్కన చేసుకోండి - [ ] ఫంక్షన్ కంపోజిషన్‌ని విస్తృతంగా ఉపయోగించే ప్రాజెక్ట్‌ను నిర్మించండి - [ ] ఫంక్షన్ డాక్యుమెంటేషన్ మెరుగుపరచడం ద్వారా ఓపెన్ సోర్స్‌కు విరాళం ఇవ్వండి - [ ] మరొకరికి ఫంక్షన్లు మరియు విభిన్న సింటాక్స్ శైలుల గురించి బోధించండి - [ ] జావాస్క్రిప్ట్‌లో ఫంక్షనల్ ప్రోగ్రామింగ్ పద్ధతులను అన్వేషించండి - [ ] భవిష్యపు ప్రాజెక్ట్‌ల కోసం పునర్వినియోగయోగ్యమైన వ్యక్తిగత ఫంక్షన్ లైబ్రరీని సృష్టించండి ### 🏆 అంతిమ ఫంక్షన్స్ ఛాంపియన్ చెక్-ఇన్ మీ ఫంక్షన్ నైపుణ్యాన్ని జరుపుకోండి: - ఇప్పటివరకు మీరు సృష్టించిన అత్యంత ఉపయోగకరమైన ఫంక్షన్ ఏది? - ఫంక్షన్ల గురించి నేర్చుకోవడం మీ కోడ్ ఆర్గనైజేషన్ దృక్పథాన్ని ఎలా మార్చిందని మీరు అనుకుంటున్నారు? - మీరు ఏ ఫంక్షన్ సింటాక్స్‌ను ప్రాధాన్యం ఇస్తారు మరియు ఎందుకు? - మీరు ఏ వాస్తవ ప్రపంచ సమస్యను ఒక ఫంక్షన్ రాయడం ద్వారా పరిష్కరించాలనుకుంటారు? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> దర్శక సూచన: ఈ డాక్యూమెంట్‌ని AI అనువాద సేవ Co-op Translator ఉపయోగించి అనువదించబడింది. మనం ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా అసత్యతలు ఉండవచ్చును. అసలు డాక్యూమెంట్ దాని స్వదేశ భాషలోనే అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని ఉపయోగించడం మంచిది. ఈ అనువాదం వలన ఏర్పడిన ఏదైనా అపార్థాలు లేదా తప్పుదిద్దుతలపై మేము బాధ్యత వహించము. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

జావాస్క్రిప్ట్ బేసిక్స్: నిర్ణయాలు తీసుకోవడం

మీరు ఎప్పుడైనా ఆలోచించారా, యాప్స్ ఎలా తెలివైన నిర్ణయాలు తీసుకుంటాయో? ఉదాహరణకి, ఒక నావిగేషన్ సిస్టమ్ వేగవంతమైన మార్గాన్ని ఎలా ఎంచుకుంటుంది, లేదా ఒక థర్మోస్టాట్ వేడి ఎప్పుడు ప్రారంభించాలో ఎలా నిర్ణయించుకుంటుంది? ఇది ప్రోగ్రామింగ్‌లో నిర్ణయం తీసుకునే ప్రాథమిక భావన. చార్లెస్ బాబేజ్ యొక్క అనలిటికల్ ఇంజిన్ పరిస్థితుల ఆధారంగా వివిధ ఆపరేషన్లు అనుసరిస్తుందని రూపకల్పన చేయబడింది అంటూ, ఆధునిక జావాస్క్రిప్ట్ ప్రోగ్రామ్‌లు వివిధ పరిస్థితులపై ఆధారపడి ఎంపికలు చేయాలి. ఈ శాఖ పద్ధతి, నిర్ణయాలు తీసుకోవడం వల్ల స్థిర కోడ్‌ ను స్పందనాత్మక, తెలివైన యాప్లికేషన్లుగా మారుస్తుంది. ఈ పాఠంలో, మీరు మీ ప్రోగ్రామ్‌లలో షరతు లాజిక్ ఎలా అమలు చేయాలో నేర్చుకుంటారు. షరతు స్టేట్మెంట్లు, పోలిక ఆపరేటర్లు, మరియు తార్కిక వ్యక్తీకరణలను పరిశీలించి, మీ కోడ్ పరిస్థితులను అంచనా వేసి సరిగ్గా స్పందించడానికి వీలు కల్పిస్తాయి. ## ముందస్తు ఉపన్యాస క్విజ్ ముందస్తు ఉపన్యాస క్విజ్ నిర్ణయాలు తీసుకోవడం మరియు ప్రోగ్రామ్ ప్రవాహాన్ని నియంత్రించడం ప్రోగ్రామింగ్ యొక్క ప్రాథమిక అంశం. ఈ విభాగం బూలియన్ విలువలు మరియు షరతు లాజిక్ ఉపయోగించి మీ జావాస్క్రిప్ట్ ప్రోగ్రామ్‌లు ఎలా అమలు చేయాలో వివరిస్తుంది. [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## బూలియన్‌లపై సంక్షిప్త జ్ఞాపకం నిర్ణయాలు తీసుకునే ప్రక్రియను పరిశీలించే ముందు, మన గత పాఠం నుంచి బూలియన్ విలువలను మళ్లీ చూసుకుందాం. గణిత శాస్త్రజ్ఞుడు జార్జ్ బూల్ పేరు మీద ఈ విలువలు binary స్థితులను సూచిస్తాయి – అది true లేదా false మాత్రమే. ఇందులో ఎటువంటి సందేహం లేదా మధ్యస్థానం ఉండదు. ఈ binary విలువలు అన్ని కంప్యూటేషనల్ లాజిక్ యొక్క పునాది. మీ ప్రోగ్రామ్ తీసుకునే ప్రతి నిర్ణయం తగినంతగా ఒక బూలియన్ అంచనాకే తగ్గుతుంది. బూలియన్ వేరియబుల్స్ సృష్టించడం సులభం: ఇది స్పష్టమైన బూలియన్ విలువలతో రెండు వేరియబుల్స్ సృష్టిస్తుంది. ✅ బూలియన్‌లు ఇంగ్లీషు గణిత శాస్త్రజ్ఞుడు, తత్త్వవేత్త మరియు తార్కికవేత్త జార్జ్ బూల్ (1815–1864) పేరిట ఉన్నాయి. ## పోలిక ఆపరేటర్లు మరియు బూలియన్‌లు ప్రాక్టికల్‌గా, మీరు బూలియన్ విలువలను వ్యక్తిగతంగా ఇలా సెట్ చేయరు. దీని బదులు, మీరు షరతులను అంచనా వేసి వాటిని ఉత్పత్తి చేస్తారు: "ఈ సంఖ్య ఆ సంఖ్య కంటే ఎక్కువగా ఉందా?" లేదా "ఈ విలువలు సమానంగానేనా?" పోలిక ఆపరేటర్లు ఈ అంచనాలు చేయడానికి ఉపయోగపడతాయి. అవి రెండూ విలువలను పోల్చి ఆపరాండ్ల మధ్య సంబంధం ఆధారంగా బూలియన్ ఫలితాలను ఇస్తాయి. ✅ మీ జ్ఞానాన్ని పరీక్షించేందుకు మీ బ్రౌజర్ కన్సోల్‌లో కొన్ని పోలికలు రాయండి. మీరు ఆశించని డేటా ఎవరైనా వచ్చిందా? ### 🧠 పోలిక నైపుణ్యం పరీక్ష: బూలియన్ లాజిక్ అర్థం చేసుకోడం మీ పోలిక అర్థం చేసుకున్నదా పరీక్షించండి: - మీరు ఎందుకు === (కఠిన సమానత్వం) ను సాధారణంగా == (కొద్దిగా సమానత్వం) కంటే ఇష్టపడతారు? - 5 === '5' ఎం వస్తుందో ఊహించగలరా? అలాగే 5 == '5'? - !== మరియు != మధ్య తేడా ఏమిటి? ## If స్టేట్మెంట్ if స్టేట్మెంట్ మీ కోడ్‌లో ఒక ప్రశ్న అడిగినట్టే. "ఈ షరతు true అయితే, ఈ పని చేయు." ఇది జావాస్క్రిప్ట్‌లో నిర్ణయాలు తీసుకునేందుకు అత్యంత ముఖ్యమైన పరికరం. ఇలా పనిచేస్తుంది: షరతు ప్రముఖంగా కోసుపైన ఉంచబడుతుంది, అది true అయితే, జావాస్క్రిప్ట్ కర్లీ బ్రేసెస్ లోని కోడ్‌ను నడుపుతుంది. false అయితే, ఆ బ్లాక్ మొత్తాన్ని స్కిప్ చేస్తుంది. మీరు తరచుగా ఈ షరతులను సృష్టించడానికి పోలిక ఆపరేటర్లను వాడతారు. ప్రావీట్ ఉదాహరణ చూద్దాం: 1000 >= 800 సత్యం కావడంతో, బ్లాక్‌లోని కోడ్ పనిచేస్తుంది, కన్సోల్‌లో "Getting a new laptop!" ప్రదర్శిస్తుంది. ## If..Else స్టేట్మెంట్ కానీ షరతు false అయినప్పుడు మీ ప్రోగ్రామ్ వేరే పని చేయాలని అనుకున్నట్లయితే? అప్పుడు else వస్తుంది – ఇది బ్యాక్‌అప్ ప్లాన్ లాంటి కొరుక్క. else స్టేట్మెంట్ అంటే "ఈ షరతు సత్యం కాదు అయితే, మరీచిన్న పని చేయు" అర్థం. ఇప్పుడు 500 >= 800 false కాబట్టి, జావాస్క్రిప్ట్ మొదటి బ్లాక్‌ ఖాళీ చేసి, else బ్లాక్ నడుపుతుంది. కన్సోల్‌లో "Can't afford a new laptop, yet!" కనిపిస్తుంది. ✅ ఈ కోడ్ మరియు క్రింద ఇవ్వబడిన కోడ్ మీ బ్రౌజర్ కన్సోల్ లో నడుపుతూ మీ అవగాహనను పరీక్షించండి. currentMoney మరియు laptopPrice వేరియబుల్స్ విలువలు మార్చి console.log() లో వేరే ఫలితాన్ని పొందండి. ### 🎯 If-Else లాజిక్ పరీక్ష: శాఖలు మీ షరతుల గురించి అర్థం చేసుకోవడం నిర్వహించుకోండి: - currentMoney సరియైనదిగా laptopPrice కి సమానం అయితే ఏం జరుగుతుంది? - నిజ జీవిత పరిస్థితిలో if-else లాజిక్ ఉపయోగించే ఎటువంటి ఉదాహరణ చెప్పగలరా? - మీరు ఈ[src]ను ఎట్లా విస్తరించవచ్చు, బహుళ ధర పరిధుల నిర్వహణ కోసం? ## Switch స్టేట్మెంట్ కొన్నిసార్లు మీరు ఒక విలువను బహుళ ఎంపికలతో పోల్చుకోవలసి ఉంటుంది. మీరు అనేక if..else స్టేట్మెంట్లను జత చేయవచ్చు కానీ అది స్తంభించిపోతుంది. switch స్టేట్మెంట్ బహుళ తేడా ఉన్న విలువల నిర్వహణకు క్లీన్ నిర్మాణం అందిస్తుంది. ఈ భావన తొలున్న టెలిఫోన్ ఎక్స్చేంజ్‌లలో ఉపయోగించిన మెకానికల్ స్విచ్చింగ్ వ్యవస్థకు సమానం – ఒక ఇన్‌పుట్ విలువ ఏ ప్రత్యేక మార్గాన్ని ఎంచుకోవాలనేదాన్ని నిర్ణయిస్తుంది. దీని నిర్మాణం ఇలా ఉంటుంది: - జావాస్క్రిప్ట్ ఒకసారి వ్యక్తీకరణని (expression) అంచనా వేస్తుంది - ప్రతి case ని చూసి సరిపోలడం చూసుకుంటుంది - సరిపడ్డప్పుడు ఆ కోడ్ బ్లాక్ నడుపుతుంది - break జావాస్క్రిప్ట్‌ని ఆపి switch నుండి బయటకు పంపుతుంది - ఎట్టిపరిస్థితిలో cases సరిపోకుండా ఉంటే, default బ్లాక్ నడుస్తుంది (మీ దగ్గర ఉంటే) ఈ ఉదాహరణలో, జావాస్క్రిప్ట్ dayNumber ని 2 గా గుర్తించి, case 2 కనుగొని, dayName ని "Tuesday" గా సెట్ చేస్తుంది, ఆపై switch నుండి బయటికెక్కుతుంది. ఫలితం: "Today is Tuesday" కన్సోల్ లో ప్రదర్శించబడింది. ✅ ఈ కోడ్ మరియు క్రింది కోడ్ లోని బదిలీ కోసం బ్రౌజర్ కన్సోల్ లో పరీక్షించండి. వేరియబుల్ a విలువలని మార్చి console.log() లో ఫలితాన్ని గమనించండి. ### 🔄 Switch స్టేట్మెంట్ నైపుణ్యం: బహుళ ఎంపికలు మీ switch అర్థం చేసుకోవడాన్ని పరీక్షించండి: - మీరు break స్టేట్మెంట్ మర్చిపోయినట్లయితే ఏం జరుగుతుంది? - మీరు ఎప్పుడు బహుళ if-else బదులు switch వాడతారు? - మీరు అన్ని అవకాశాలను కప్పుకున్నట్టు అనుకున్నా, ఎందుకు default వాడడం మంచిది? ## తార్కిక ఆపరేటర్లు మరియు బూలియన్‌లు క్లిష్ట నిర్ణయాలకు ఒకేసారి పలు పరిస్థితులను అంచనా వేసోవలసి ఉంటుంది. బూలియన్ బోధనలో మత్తుగా లాజికల్ వ్యక్తీకరణలను కలుపుతూ, ప్రోగ్రామింగ్‌లో తార్కిక ఆపరేటర్లు పలు బూలియన్ షరతులను కలుపుతాయి. ఈ ఆపరేటర్లు సరళమైన సత్య/అసత్య అంచనాలను సంయోజించి మెలుకువైన షరతు లాజిక్ సృష్టించడానికి వీలు కల్పిస్తాయి. ఈ ఆపరేటర్లతో మీరు పరిస్థితులను ఈ విదంగా కలుపుకోవచ్చు: - AND (&&) అంటే రెండు పరిస్థితులు నిజం కావాలి - OR (||) అంటే కనీసం ఒకటి నిజం కావాలి - NOT (!) నిజం ని అబద్ధంగా, అబద్ధాన్ని నిజంగా మార్చుతుంది ## తార్కిక ఆపరేటర్లతో షరతులు మరియు నిర్ణయాలు మామూలు ఉదాహరణతో ఈ తార్కిక ఆపరేటర్లను చూద్దాం: ఈ ఉదాహరణలో: మనం 20% డిస్కౌంట్ ధర (640) లెక్కించాము, తరువాత మన అందుబాటులో ఉన్న డబ్బు సంపూర్ణ ధర లేదా తగ్గింపు ధర అందుబాటులో ఉందో అంచనా వేస్తాం. 600 తగ్గింపు ధర 640 కి తక్కువగా ఉండటం వల్ల షరతు సత్యం అవుతుంది. ### 🧮 తార్కిక ఆపరేటర్స్ పరీక్ష: షరతులను కలపడం మీ తార్కిక ఆపరేటర్ అవగాహనని పరీక్షించండి: - A && B లో A false అయితే ఏం జరుగుతుంది? B అంచనా వేస్తేనా? - మీరు ఎప్పుడైతే మూడు ఆపరేటర్ల (&&, ||, !) అవసరం అవుతుందో ఒక పరిస్థితిని ఊహించగలరా? - !user.isActive మరియు user.isActive !== true మధ్య తేడా ఏమిటి? ### విరోధి ఆపరేటర్ ఎప్పుడో మాట, మీరు ఎప్పుడో విషయం నిజం కాకపోవడాన్ని విలువచేయాలనుకోవచ్చు. ఉదాహరణకు "వాడుకరి లాగిన్ అయ్యారా?" అడగకుండా "వాడుకరి లాగిన్ కాలేదా?" అని అడగడం. సూచిక గుర్తు (!) ఆ తీరు లాజిక్‌ను కొంత తేలికగా మార్చిస్తుంది. ! ఆపరేటర్ అంటే "వ్యతిరేకం" – ఏదైతే true అయితే ! వదిలితే false అవుతుంది, మరియు ఉల్టా కూడా. ### టెర్నరీ వ్యక్తీకరణలు సరళమైన షరతు విధానాల కోసం, జావాస్క్రిప్ట్ టెర్నరీ ఆపరేటర్ అందిస్తుంది. ఈ సంక్షిప్త సింటాక్స్ ఒక్క లైనులో షరతు బాధ్యతను వ్రాయడానికి ఉపయుక్తం, ఇది ఒక షరతు ఆధారంగా రెండు విలువల మధ్య ఒకదాన్ని కేటాయించడానికి ఉపయోగపడుతుంది. ఇది ఒక ప్రశ్నలా చదవండి: "ఈ షరతు true అయితే ఈ విలువ వాడు. false అయితే ఆ విలువ వాడు." క్రింది ఉదాహరణ చూడండి: ✅ కొంచెం సమయం తీసుకుని ఈ కోడ్ పునరుద్ఘహరించండి. ఈ ఆపరేటర్లు ఎలా పని చేస్తున్నాయో మీకు అర్థమవుతుందా? ఈ లైన్ ఇలా చెప్పటం: "firstNumber secondNumber కంటే ఎక్కువనా? అవును అయితే biggestNumber లో firstNumber ఉంచు. లేదంటే biggestNumber లో secondNumber ఉంచు." టెర్నరీ ఆపరేటర్ కింది సంప్రదాయ if..else స్టేట్మెంట్ కంటే కేవలం సంక్షిప్త రూపం: రెండు పద్ధతులు ఒకే ఫలితాన్ని ఇస్తాయి. టెర్నరీ ఆపరేటర్ సంక్షిప్తంగా ఉంటుంది, సాంప్రదాయ if-else కంటే క్లిష్ట పరిస్థితులలో చదవటానికి కొంత సులభమే. --- ## 🚀 సవాలు మొదట తార్కిక ఆపరేటర్లు వాడి, తరువాత టెర్నరీ వ్యక్తీకరణ వాడి వ్రాసిన ఒక ప్రోగ్రామ్ తయారు చేయండి. మీకు ఇష్టమైన సింటాక్స్ ఏది? --- ## GitHub Copilot ఏజెంట్ సవాలు 🚀 ఈ సవాలను పూర్తి చేయడానికి ఏజెంట్ మోడ్ ఉపయోగించండి: వివరణ: ఈ పాఠంలో నిర్ణయాలు తీసుకునే అనేక భావాలను చూపించే సమగ్ర గ్రేడ్ లెక్కింపు ప్రోగ్రామ్ రాయండి, ఇందులో if-else స్టేట్మెంట్లు, switch స్టేట్మెంట్లు, తార్కిక ఆపరేటర్లు మరియు టెర్నరీ వ్యక్తీకరణలు ఉంటాయి. ప్రాంప్ట్: ఒక విద్యార్థి సంఖ్యాత్మక స్కోర్ (0-100) ను తీసుకుని, క్రింది ప్రమాణాల ప్రకారం వారి లెటర్ గ్రేడ్ నిర్ణయించే జావాస్క్రిప్ట్ ప్రోగ్రామ్ వ్రాయండి: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 కి దిగువన అవసరాలు: 1. లెటర్ గ్రేడ్ నిర్ణయానికి if-else స్టేట్మెంట్ ఉపయోగించండి 2. విద్యార్థి ఉత్తీర్ణత సాధించినట్టునో (గ్రేడ్ >= 60) మరియు ఆర్డర్లు ఉన్నాయో (గ్రేడ్ >= 90) చెక్ చేయడానికి లాజికల్ ఆపరేటర్లను వాడండి 3. ప్రతి లెటర్ గ్రేడ్ కొరకు నిర్దిష్ట అభిప్రాయాన్ని పంచేందుకు స్విచ్ స్టేట్‌మెంట్‌ను వాడండి 4. తదుపరి కోర్సుకు విద్యార్థి అర్హుడా అనేదాన్ని నిర్ణయించడానికి టెర్నరీ ఆపరేటర్ వాడండి (గ్రేడ్ >= 70) 5. స్కోరు 0 మరియు 100 మధ్య ఉందని నిర్ధారించడానికి ఇన్‌పుట్ చెలామణీని చేర్చండి ముఖ్య సంఘర్షణలుగా 59, 60, 89, 90 మరియు చెలామణి కాని ఇన్‌పుట్‌లతో మీ ప్రోగ్రామ్ను పరీక్షించండి. ఇంకా సమాచారం కోసం agent mode ఇక్కడ చూడండి. ## పోస్ట్-లెక్చర్ క్విజ్ Post-lecture quiz ## సమీక్ష & స్వీయ అధ్యయనం యూజర్‌కు అందుబాటులో ఉన్న అనేక ఆపరేటర్లు గురించి మరింత తెలుసుకోండి MDNలో. జోష్ కామౌ యొక్క అద్భుతమైన ఆపరేటర్ లుకప్ని గమనించండి! ## అసైన్మెంట్ Operators --- ## 🧠 మీ నిర్ణయ-making టూల్‌కిట్ సారాంశం --- ## 🚀 మీ జావాస్క్రిప్ట్ నిర్ణయ-making మాస్టరీ టైమ్‌లైన్ ### ⚡ మరుసటి 5 నిమిషాల్లో మీరు చేయగలవు - [ ] మీ బ్రౌజర్ కన్సోల్‌లో పోలిక ఆపరేటర్లతో అభ్యాసం చేయండి - [ ] మీ వయస్సును చెక్ చేసే సాధారణ if-else స్టేట్‌మెంట్ రాయండి - [ ] ఒక if-else ను టెర్నరీ ఆపరేటర్ ఉపయోగించి మళ్లీ రాయడాన్ని ప్రయత్నించండి - [ ] వేర్వేరు “ట్రూతీ” మరియు “ఫాల్సీ” విలువలతో ఏమి జరుగుతుందో పరీక్షించండి ### 🎯 ఈ గంటలో మీరు సాధించగలిగేది - [ ] పోస్ట్-పాఠం క్విజ్ పూర్తి చేసి ఏదైనా చిక్కిన భావనలను సమీక్షించండి - [ ] GitHub Copilot ఛాలెంజ్ నుండి సమగ్ర గ్రేడ్ క్యాలిక్యులేటర్ నిర్మించండి - [ ] నిజ జీవిత పరిస్థితికి సరళమైన నిర్ణయ మొక్క (decision tree) సృష్టించండి (ఉదాహరణకు ఏమి ధరిస్తామో ఎంచుకోవడం) - [ ] అనేక పరిస్థితులను లాజికల్ ఆపరేటర్లతో కలిపి అభ్యాసం చేయండి - [ ] వేర్వేరు ఉపయోగాల కొరకు స్విచ్ స్టేట్మెంట్లను ప్రయోగించండి ### 📅 మీ వారాంతపు లాజిక్ మాస్టరీ - [ ] సృజనాత్మక ఉదాహరణలతో ఆపరేటర్ల అసైన్మెంట్ పూర్తి చేయండి - [ ] వేర్వేరు షరతుల నిర్మాణాలతో మినీ క్విజ్ అప్లికేషన్ రూపొందించండి - [ ] అనేక ఇన్‌పుట్ షరతులను చెక్ చేసే ఫారమ్ వాలిడేటర్ సృష్టించండి - [ ] జోష్ కామౌ యొక్క ఆపరేటర్ లుకప్ వ్యాయామాలను అభ్యసించండి - [ ] ప్రస్తుతం ఉన్న కోడ్‌ను మరింత తగిన షరతుల నిర్మాణాల కోసం పునఃరూపకల్పన చేయండి - [ ] షార్ట్-సర్క్యూట్ ఇవాల్యుషన్ మరియు పనితీరు ప్రభావాలను అధ్యయనం చేయండి ### 🌟 మీ నెలపాటు పరివర్తనం - [ ] సంక్లిష్టమైన nested షరతులను సంపూర్ణంగా ఆలస్యం లేకుండా నేర్చుకోండి మరియు కోడ్ చదవటానికి సులభతరం చేయండి - [ ] నైపుణ్యమయిన నిర్ణయ-making లాజిక్‌తో అప్లికేషన్ నిర్మించండి - [ ] ప్రస్తుత ప్రాజెక్టులలో షరతుల లాజిక్ మెరుగుపరచుతూ ఓపెన్ సోర్స్‌కు సహాయం చేయండి - [ ] ఇతరులకు వేర్వేరు షరతుల నిర్మాణాలు మరియు వాటిని ఎప్పుడు వాడాలో బోధించండి - [ ] షరతుల లాజిక్‌కు ఫంక్షనల్ ప్రోగ్రామింగ్ దారులను అన్వేషించండి - [ ] షరతుల ఉత్తమ విధానాల కోసం వ్యక్తిగత సూచిక గైడ్ సృష్టించండి ### 🏆 దశాంతమైన నిర్ణయ-making ఛాంపియన్ చెక్-ఇన్ మీ లాజికల్ ఆలోచన మాస్టరీని సంబరంగా జరుపుకోండి: - మీరు విజయవంతంగా అమలు చేసిన అత్యంత సంక్లిష్టమైన నిర్ణయ లాజిక్ ఏమిటి? - ఏ షరతుల నిర్మాణం మీకు అత్యంత సహజంగా అర్థమవుతుంది మరియు ఎందుకు? - లాజికల్ ఆపరేటర్ల గురించి నేర్చుకున్నことで మీ సమస్య పరిష్కార దశపై ఎలా ప్రభావం వచ్చింది? - ఏ నిజ జీవిత అప్లికేషన్ నైపుణ్యపూర్వక నిర్ణయ-making లాజిక్ నుంచి ప్రయోజనం పొందుతుంది? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> అస్పష్టత: ఈ పత్రాన్ని AI అనువాద సేవ Co-op Translator ఉపయోగించి అనువదించారు. మేము సంతృప్తికరమైన ఖచ్చితత్వం కోసం ప్రయత్నించినప్పటికీ, స్వయంచాలక అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. స్వదేశీ భాషలోని అసలు పత్రం అధికారిక మూలంగా తీసుకోవాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదాన్ని సూచించబడతుంది. ఈ అనువాద ఉపయోగంలో నుంచే వచ్చిన ఏదైనా అపార్థాలు లేదా తప్పుదారులు కారణంగా మేము బాధ్యులు కాదు. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

web,development

JavaScript ప్రాథమికాలు: శ్రేణులు మరియు పునరావృతాలు

## ముందు-పాఠం క్విజ్ మునుపటి పాఠం క్విజ్ వెబ్‌సైట్లలో షాపింగ్ కార్ట్ వస్తువులను ఎలా ట్రాక్ చేస్తారో లేదా మీ స్నేహితుల జాబితాను ఎలా చూపిస్తారో మీరు ఎప్పుడైనా ఆలోచించారా? అటువంటి సందర్భాల్లో శ్రేణులు మరియు పునరావృతాలు ఉపయోగపడతాయి. శ్రేణులు అనేవి అనేక సమాచారం భాగాలను ఉంచే డిజిటల్ కంటైనర్లు లాగా ఉంటాయి, మరియు పునరావృతాలు ఆ డాటాను పునరావృతం లేకుండా సమర్థంగా ఉపయోగించుకోవడానికి సహాయపడతాయి. ఈ రెండు సూత్రాలు కలిసి మీ ప్రోగ్రాములలో సమాచారాన్ని నిర్వహించే ప్రాధమిక నిర్మాణాన్ని ఏర్పరుస్తాయి. మీరు ప్రతి ఒక్క దశను చేతితో వ్రాయడం నుండి వేలు వెయ్యాలా లేదా వేల సంఖ్యలో అంశాలను త్వరగా ప్రాసెస్ చేయగల తెలివైన, సమర్థవంతమైన కోడ్ సృష్టించే దశకు ఎలా వెళ్ళాలో నేర్చుకుంటారు. ఈ పాఠం చివరలో, మీరు కొద్ది కోడ్ లైన్లతో క్లిష్టమైన డేటా పనులను ఎలా సాధించాలో అర్థమవుతుంది. వస్తువులు మరియు పునరావృతాల పాఠాల ఈ ముఖ్యమైన భాగాలను అన్వేషిద్దాం. [](https://youtube.com/watch?v=1U4qTyq02Xw "ష్రేణులు") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "పునరావృతాలు") ## శ్రేణులు శ్రేణులను ఒక డిజిటల్ ఫైలింగ్ కేబినెట్ లాగ భావించండి - ఒక్క ఓ షెల్ఫ్ లో ఒక్క డాక్యుమెంట్ నిల్వ చేయడానికి కాకుండా, మీరు అనేక సంబంధిత అంశాలను ఒకే, నిర్మిత కంటైనర్ లో సుధీర్ఘంగా ఉంచుకోవచ్చు. ప్రోగ్రామింగ్ దృష్టిలో, శ్రేణులు అనేది మీరు అనేక సమాచారం భాగాలను ఒక సక్రమ గూడుబిడ్డు లో నిల్వ చేయడానికి ఆప్షన్ ఇచ్చే కంటైనర్లు. మీరు ఫోటో గ్యాలరీని లేదా టూ-డూ జాబితాని నిర్మిస్తున్నారో లేదా గేమ్ లో ఉన్న హై స్కోర్లను ట్రాక్ చేస్తున్నారో, శ్రేణులు డేటాను గూడబెట్టడానికి ప్రాధమిక ఆధారం ఇస్తాయి. అవి ఎలా పని చేస్తాయో చూద్దాం. ✅ శ్రేణులు మన చుట్టూ ఎక్కడు ఉన్నాయో చూశారా? ఉదాహరణకి సాలర్లు ప్యానెల్ శ్రేణి గురించి మీరు కొంత ఆలోచించగలరా? ### శ్రేణులు సృష్టించడం శ్రేణిని సృష్టించడం చాలా సులభమే - కేవలం స్క్వేర్ బ్రాకెట్లను ఉపయోగించండి! ఇక్కడ ఏమి జరుగుతోంది? మీరు స్క్వేర్ బ్రాకెట్ల [] ద్వారా ఖాళీ కంటైనర్‌ని సృష్టించారు. ఒక ఖాళీ గ్రంథాలయ షెల్ఫ్ లాగా ఉంది - మీరు ఇందులో ఏ పుస్తకాల్న అయినా ఉంచుకోవడానికి సిద్ధంగా ఉంది. మీరు ప్రారంభంలోనే మీ శ్రేణిలో ప్రారంభ విలువలను కూడా నింపవచ్చు: గమనించదగ్గ వాటి విషయం: - ఒకే శ్రేణిలో మీరు పదాలు, సంఖ్యలు, నిజం/అబద్ధ విలువలన్నీ ఉంచుకోవచ్చు - ఒక్కో అంశాన్ని కామాతో విడగొట్టండి - ఇది సులభం! - శ్రేణులు సంబంధిత సమాచారాన్ని కలిసి ఉంచడానికి ఉత్తమం ### శ్రేణి సూచికలు (Array Indexing) ఇదే ఒక్క విషయం మొదటికి అసాధారణంగా అనిపించవచ్చు: శ్రేణులు తమ అంశాలను 0 నుండి నంబర్ చేస్తాయి, 1 నుండి కాదు. ఈ శూన్య ఆధారిత సూచిక విధానం కంప్యూటర్ మెమరీ పని విధానంలో మూలాలు కలిగి ఉంటుంది - ఇది తొలి రోజుల కంప్యూటర్ భాషలు, ముఖ్యంగా C భాష నుండి ప్రోగ్రామింగ్ సంప్రదాయం అయింది. శ్రేణిలో ప్రతి చోటుకు ఒక ప్రత్యేక చిరునామా నెంబరు ఉంటుంది, దీనిని సూచిక (index) అంటారు. ✅ మీరు ఆశ్చర్యపోతున్నారా శ్రేణులు 0 సూచిక నుండి మొదలవుతాయని? కొన్ని ప్రోగ్రామింగ్ భాషల్లో సూచికలు 1 నుండీ మొదలవుతాయి. దీనికి సంబంధించిన ఆసక్తికర చరిత్ర మీరు వికీపీడియాలో చదవవచ్చు. శ్రేణి అంశాలను యాక్సెస్ చేయడం: ఈ కోడ్ లో జరుగుతున్న విషయం: - స్క్వేర్ బ్రాకెట్ల సూచిక సంఖ్య ఉపయోగించి అంశాలను యాక్సెస్ చేస్తుంది - ఆ స్థానం లోని విలువను తిరిగి ఇస్తుంది - 0 నుండి లెక్క ప్రారంభించి మొదటి అంశం సూచిక 0 అవుతుంది శ్రేణి అంశాలను మార్చడం: ఈ కోడ్ లో: - సూచిక 4 వద్ద ఉన్న "Rocky Road" అంశాన్ని "Butter Pecan"కి మార్చింది - సూచిక 5 వద్ద కొత్త అంశం "Cookie Dough"ని జోడించింది - ప్రస్తుతం ఉన్న పరిమితిని మించి జోడిస్తున్నప్పుడు స్వయంచాలకంగా శ్రేణి పొడవును పెంచుతుంది ### శ్రేణి పొడవు మరియు సాధారణ పద్ధతులు శ్రేణులకు లోపల రూపొందిన గుణాలు మరియు పద్ధతులు ఉంటాయి, ఇవి డాటాతో పని చేయడాన్ని సులభతరం చేస్తాయి. శ్రేణి పొడవు తెలుసుకోవడం: గమనించవలసిన ముఖ్యాంశాలు: - శ్రేణిలో ఉన్న మొత్తం అంశాల సంఖ్యను తిరిగి ఇస్తుంది - అంశాలు జోడించబడితే లేదా తీసివేసితే ఆటోమేటిక్ గా నవీకరించబడుతుంది - పునరావృతాలకు మరియు సరైన ధృవీకరణకు ఉపయోగపడే డైనమిక్ లెక్కను ఇస్తుంది ముఖ్యమైన శ్రేణి పద్ధతులు: ఈ పద్ధతుల అర్థం: - push() (అంతే చివరలో) మరియు unshift() (ఆరంభంలో) ఉపయోగించి అంశాలను జోడిస్తుంది - pop() (చివర నుండి) మరియు shift() (ఆరంభం నుండి) ఉపయోగించి అంశాలను తొలగిస్తుంది - indexOf() తో అంశాల స్థానం తెలుసుకొంటుంది మరియు includes() తో ఉన్నదా కాదా దాన్ని చెక్ చేస్తుంది - తీసిన అంశాలు లేదా స్థానం సూచులను తిరిగి ఇస్తుంది ✅ మీరు ప్రయత్నించండి! మీ బ్రౌజర్ కన్సోల్ లో మీ స్వంత శ్రేణి సృష్టించి, దాన్ని నియంత్రించండి. ### 🧠 శ్రేణి ప్రాథమికాలు తనిఖీ: మీ డేటాను సక్రమంగా నిర్వహించండి మీ శ్రేణికి సంబంధించిన అర్ధాన్ని పరీక్షించండి: - ఎందుకు శ్రేణులు 1 కాక 0 నుండి లెక్కను ప్రారంభిస్తాయి? - 5 అంశాల శ్రేణిలో అస్తిత్వం లేని సూచిక (ఉదా: arr[100]) ను యాక్సెస్ చేస్తే ఏమవుతుంది? - మీరు మూడు వాస్తవ జీవిత పరిస్థితులు చెప్పగలరా, అక్కడ శ్రేణులు ఉపయోగపడతాయి? ## పునరావృతాలు (Loops) చార్ల్స్ డికెన్స్ నవలల నుండి తెలిసిన శిక్ష విధానం లో విద్యార్థులు పదాలు వరుసగా వ్రాయాల్సిన విధంగా ఉంది. ఇప్పుడు "ఈ వాక్యం 100 సార్లు వ్రాయండి" అని ఒకసారి చెప్పి వాటి ఎక్కడ చూసినా ఆ పని తక్షణమే జరిగిపోతుందని భావించండి. అదే పునరావృతాలు మీ కోడ్ కోసం చేస్తాయి. పునరావృతాలు అంటే తప్పులు లేకుండా పనులను పునరావృతం చేసే తలంపు లేని సహాయకుడు లాగే. మీరు షాపింగ్ కార్ట్ లోని ప్రతి అంశాన్ని చెక్ చేయాలనుకున్నా లేక ఫోటో ఆల్బం లోని అన్ని చిత్రాలను చూపించాలనుకున్నా, పునరావృతాలు ఆ పునరావృతతను సమర్థవంతంగా నిర్వహిస్తాయి. జావా స్క్రిప్ట్ వివిధ రకాల పునరావృతాలను అందిస్తుంది. వాటిని పరిశీలించి ఎప్పుడు ఉపయోగించాలో తెలుసుకుందాం. ### For Loop for లూప్ టైమర్ సెటింగ్ లాంటిది - మీరు ఒక పని ఏన్ని సార్లు జరగాలనో ముందే తెలుసు. ఇది బాగా సక్రమమైనది మరియు ఊహించదగ్గది, కనుక శ్రేణులతో పని చేస్తూ గణనలు చేయాల్సినప్పుడు ఇది అద్భుతంగా ఉంటుంది. For Loop నిర్మాణం: దశలవారీగా ఇది ఏమి చేస్తుందో: - ప్రారంభంలో కౌంటర్ వేరియబుల్ i ని 0 గా ఇనిషియలైజ్ చేస్తుంది - ప్రతి పావతిలో ముందుగా షరతును i < 10 చెక్ చేస్తుంది - షరతు నిజం అయితే కోడ్ బ్లాక్ నడుపుతుంది - ప్రతి పావతిలో i++ ద్వారా iని 1 పెంచుతుంది - షరతు అబద్ధంగా మారిపోయే (i = 10 కు చేరితే) స్టాప్ అవుతుంది ✅ ఈ కోడ్ ను మీ బ్రౌజర్ కన్సోల్లో నడిపి చూడండి. కౌంటర్, షరతు లేదా పునరావృతి ఎక్స్‌ప్రెషన్ లో చిన్న మార్పు చేస్తే ఏం జరుగుతుంది? మీరు దీన్ని వ్యతిరేక దిశలో (కౌంట్ డౌన్) నడిపించగలరా? ### 🗓️ For Loop లో పట్టు తనిఖీ: నియంత్రిత పునరావృతం మీ For loop అర్ధం పరీక్షించండి: - For loop లో మూడు భాగాలు ఏవీ, వాటి ప్రతి ఒక్కటి ఏమి చేస్తుంది? - మీరు శ్రేణిని వెనుక టు ముందు ఎలా లూప్ చేస్తారు? - ఇన్క్రిమెంట్ను (i++) మర్చిపోతే ఏం జరుగుతుంది? ### While Loop while లూప్ అంటే "ఇది జరుగుతూనే ఉండాలి..." అని చెప్పటం లాంటిది - మీరు ఇది ఎన్ని సార్లు నడుస్తుందో తెలియకపోవచ్చు, కానీ ఎప్పుడు ఆపాలనో తెలుసు. ఇది వినియోగదారుని ఇన్పుట్ కోరుతూ అనుకూల సమయంలో ఆపడం లేదా డేటాను శోధిస్తూ కావాల్సిన సందర్భంలో ఆపడం కోసం చాలా సరిపోయేది. While Loop లక్షణాలు: - షరతు నిజంగానే ఉన్నంత సమయం కొనసాగుతుంది - కౌంటర్ వేరియబుల్స్ మాన్యువల్ గా నిర్వహించాలి - ప్రతి పునరావృతానికి ముందు షరతు చెక్ చేస్తుంది - షరతు ఎప్పుడూ మంచి అయినా అర్ధం లేకుండా అనంత లూపులు రావచ్చు ఈ ఉదాహరణలు ఏమి చెబుతాయో: - కౌంటర్ వేరియబుల్ iని లూప్ బాడీ లో మాన్యువల్ గా నిర్వహిస్తుంది - అనంత లూపులు రాకుండా కౌంటర్ పెంచుతుంది - వినియోగదారుల ఇన్పుట్ మరియు ప్రయత్న పరిమితి చూపించి వ్యావహారిక ఉదాహరణ - ఎండ్లెస్ ఎగ్జిక్యూషన్ ని నివారించడానికి భద్రతా చర్యలు ### ♾️ While Loop జ్ఞానం తనిఖీ: షరతుపై ఆధారపడి పునరావృతం మీ While loop అర్ధం పరీక్షించండి: - While loops ఉపయోగిస్తే ప్రధాన ప్రమాదం ఏమిటి? - మీరు ఎప్పుడు while loop ను for loop కంటే ఎంచుకుంటారు? - అనంత లూపులకు మీరు ఎలా నివారణ చెయ్యగలరు? ### ఆధునిక లూప్ ప్రత్యామ్నాయాలు జావాస్క్రిప్ట్ ఆధునిక లూప్ వ్యాకరణాన్ని అందిస్తుంది, ఇది మీ కోడ్ ను చదవటానికి సులభం చేస్తుంది మరియు తప్పుల అవకాశాలను తగ్గిస్తుంది. For...of లూప్ (ES6+): for...of ప్రధాన లాభాలు: - సూచిక నిర్వహణను మరియు తప్పు సంభవించే అవకాశాన్ని తొలగిస్తుంది - శ్రేణి అంశాలను నేరుగా పొందుతుంది - కోడ్ చదవదగినదిగా మారుతుంది మరియు సింటాక్స్ క్లిష్టత తగ్గుతుంది forEach పద్ధతి: forEach గురించి ఎలాంటివి తెలుసుకోవాలి: - ప్రతి శ్రేణి అంశం కొరకు ఒక ఫంక్షన్ నడుపుతుంది - అంశ విలువ మరియు సూచికను పరామితులుగా ఇస్తుంది - త్వరగా ఆపలేరు (సాంప్రదాయ లూప్స్ లాగా కాదు) - తిరిగి ఇస్తుంది 'undefined' (కొత్త శ్రేణి సృష్టించదు) ✅ మీరు For loop మరియు While loop మధ్య ఎంపిక ఎందుకు చేస్తారు? StackOverflow లో 17 వేల మంది చూస్తున్న ప్రశ్నకు సంబంధించిన కొన్ని అభిప్రాయాలు మీకు ఆసక్తిగా ఉండవచ్చు. ### 🎨 ఆధునిక లూప్ వ్యాకరణం తనిఖీ: ES6+ అంగీకారము మీ ఆధునిక జావాస్క్రిప్ట్ అర్ధం పరీక్షించండి: - సాంప్రదాయ For loops కంటే for...of లాభాలు ఏవీ? - మీరు ఎప్పుడు సాంప్రదాయ మార్గాలు ఇంకా ఇష్టపడతారు? - forEach మరియు map మధ్య తేడా ఏమిటి? ## పునరావృతాలు మరియు శ్రేణులు శ్రేణులు మరియు పునరావృతాలను కలిపి ఉపయోగించడం శక్తివంతమైన డేటా ప్రాసెసింగ్ సామర్ధ్యాలను సృష్టిస్తుంది. ఇది అనేక ప్రోగ్రామింగ్ పనుల మధ‍‍య పెట్టుబడి, జాబితాలను చూపించడం నుండి గణాంకాలను లెక్కించడం వరకు ఉపయోగపడుతుంది. సాంప్రదాయ శ్రేణి ప్రాసెసింగ్: ప్రతి పద్ధతిని అర్థం చేసుకుందాం: - లూప్ పరిమితిని నిర్ణయించడానికి శ్రేణి పొడవు ప్రాపర్టీ ఉపయోగిస్తుంది - సాంప్రదాయ ఫర్ లూప్స్ లో సూచికతో అంశాలను యాక్సెస్ చేస్తుంది - for...of లూప్స్ లో నేరుగా అంశాలను పొందుతుంది - ప్రతి శ్రేణి అంశాన్ని ఒక్కసారి ప్రాసెస్ చేస్తుంది ప్రయోజనాత్మక డేటా ప్రాసెసింగ్ ఉదాహరణ: ఈ కోడ్ ఎలా పనిచేస్తుందో: - మొత్తం మరియు తీవ్రమైన విలువలను ట్రాక్ చేయడానికి వేరియబుళ్లను ఇనిషియలైజ్ చేస్తుంది - ప్రతీ గ్రేడ్‌ను ఒక్క లూప్ లో సమర్థవంతంగా ప్రాసెస్ చేస్తుంది - సగటును లెక్కించడానికి మొత్తం చేర్చుకుంటోంది - లూప్ సమయంలో అతిపెద్ద మరియు కనిష్ట విలువలను ట్రాక్ చేస్తుంది - లూప్ ముగిసిన తర్వాత ముగింపు గణాంకాలు లెక్కిస్తుంది ✅ మీరు మీ స్వంత శ్రేణి తో మీ బ్రౌజర్ కన్సోల్ లో ప్రయోగం చేయండి. --- ## GitHub Copilot ఏజెంట్ ఛాలెంజ్ 🚀 ఏజంట్ మోడ్ ఉపయోగించి క్రింది ఛాలెంజ్ పూర్తి చేయండి: వివరణ: శ్రేణులు మరియు పునరావృతాలను కలిపి ఉపయోగించి డేటా సెట్‌ను విశ్లేషించి అర్ధం వచ్చే వివరాలను అందించే సమగ్ర డేటా ప్రాసెసింగ్ ఫంక్షన్ ను నిర్మించండి. ప్రాంప్ట్: analyzeGrades అనే ఫంక్షన్ సృష్టించండి, ఇది విద్యార్థుల గ్రేడ్ ఆబ్జెక్టుల శ్రేణి (ప్రతి ఒకటిలో పేరు మరియు స్కోరు గుణాలున్నవి) తీసుకొని అత్యధిక స్కోరు, కనిష్ట స్కోరు, సగటు స్కోరు, పాసైనవారి సంఖ్య (స్కోరు >= 70), మరియు సగటు కన్నా ఎక్కువ స్కోరు పొందిన విద్యార్థుల పేర్ల శ్రేణిని గణించే గణాంకాలను కలిగి ఓ ఆబ్జెక్టును తిరిగి ఇస్తుంది. మీ పరిష్కారంలో కనీసం రెండు వేర్వేరు లూప్ రకాలను ఉపయోగించండి. ఏజెంట్ మోడ్ గురించి మరింత తెలుసుకోండి. ## 🚀 ఛాలెంజ్ JavaScript అనేది కొన్ని ఆధునిక అర్రే విధానాలను అందిస్తుంది, ఇవి ప్రత్యేక పనుల కోసం సాంప్రదాయక లూపులను బదులుగా ఉపయోగించవచ్చు. forEach, for-of, map, filter, మరియు reduce ను అన్వేషించండి. మీ సవాలు: కనీసం మూడు వేర్వేరు అర్రే విధానాలను ఉపయోగించి విద్యార్థుల గ్రేడ్ ఉదాహరణను రీఫాక్టర్ చేయండి. ఆధునిక JavaScript సింటాక్స్తో కోడ్ ఎంత చక్కగా మరియు స్పష్టంగా మారిందో గమనించండి. ## లెక్చర్ తర్వాత క్విజ్ లెక్చర్ తర్వాత క్విజ్ ## సమీక్ష & స్వీయ అధ్యయనం JavaScriptలో అర్రేలతో అనేక విధానాలు జోడించబడ్డాయి, ఇవి డేటా నియంత్రణకు అత్యంత ఉపయోగకరంగా ఉంటాయి. ఈ విధానాలను చదవండి మరియు మీ సృష్టించిన అర్రేపై (పుష్, పాప్, స్లైస్ మరియు స్ప్లైస్ వంటి) వాటిలో కొన్ని ప్రయత్నించండి. ## అసైన్‌మెంట్ అర్రే ను లూక్ చేయండి --- ## 📊 మీ అర్రేల & లూప్ టూల్‌కిట్ సమరీ --- ## 🚀 మీ అర్రేల & లూప్ మాస్టరీ టైમ్లైన్ ### ⚡ తర్వాతి 5 నిమిషాలలో మీరు చేయగలిగేది - [ ] మీ ఇష్టమైన సినిమాల అర్రే సృష్టించి ప్రత్యేక అంశాలను యాక్సెస్ చేయండి - [ ] 1 నుండి 10 వరకు లెక్కించునట్లు ఒక for లూప్ రాయండి - [ ] పాఠం నుంచి ఆధునిక అర్రే విధానాల సవాలు ప్రయత్నించండి - [ ] బ్రౌజర్ కన్సోల్‌లో అర్రే ఇండెక్సింగ్‌ను భావన చేయండి ### 🎯 ఈ గంటలో మీరు సాధించగలిగేది - [ ] పాఠం తర్వాత క్విజ్ పూర్తి చేసి ఎటువంటి క్లిష్టమైన భావనలను సమీక్షించండి - [ ] GitHub Copilot సవాళ్ల నుండి సమగ్ర గ్రేడ్ అనలుగర్ నిర్మించండి - [ ] వస్తువులను జోడించి తీసివేసే సాదారణ షాపింగ్ కార్ట్ సృష్టించండి - [ ] వేర్వేరు లూప్ రకాల మధ్య మార్పిడి సాధన చేయండి - [ ] push, pop, slice, మరియు splice వంటి అర్రే విధానాలతో ప్రయోగం చేయండి ### 📅 మీ వారాంతపు డేటా ప్రాసెసింగ్ ప్రయాణం - [ ] సృజనాత్మక మెరుగుదలలతో "అర్రేను లూప్ చేయండి" అసైన్‌మెంట్ పూర్తి చేయండి - [ ] అర్రేలతో మరియు లూపులతో టు-డూ లిస్ట్ అప్లికేషన్ తయారుచేయండి - [ ] గణనీయ డేటా కోసం ఒక సాదారణ గణాంక కాలిక్యులేటర్ తయారుచేయండి - [ ] MDN అర్రే విధానాలతో సాధన చేయండి - [ ] ఫోటో గ్యాలరీ లేదా సంగీత ప్లేలిస్ట్ ఇంటర్‌ఫేస్ నిర్మించండి - [ ] map, filter, మరియు reduce వంటి విధానాలతో ఫంక్షనల్ ప్రోగ్రామింగ్ అన్వేషించండి ### 🌟 మీ నెలరోజుల మార్పిడి - [ ] ఆధునిక అర్రే ఆపరేషన్లు మరియు పనితీరు ఆప్టిమైజేషన్‌లో మాస్టరీ సాధించండి - [ ] సంపూర్ణ డేటా విజువలైజేషన్ డాష్‌బోర్డ్ నిర్మించండి - [ ] డేటా ప్రాసెసింగ్‌లో పాల్గొన్న ఓపెన్ సోర్స్ ప్రాజెక్టులకు తోడ్పాటు ఇవ్వండి - [ ] ఉపయోగకరమైన ఉదాహరణలతో ఇతరులకు అర్రేల మరియు లూపులను బోధించండి - [ ] పునర్వినియోగ డేటా ప్రాసెసింగ్ ఫంక్షన్ల వ్యక్తిగత లైబ్రరీ సృష్టించండి - [ ] అర్రేల ఆధారంగా అల్గోరిథంలు మరియు డేటా నిర్మాణాలను అన్వేషించండి ### 🏆 చివరి డేటా ప్రాసెసింగ్ చాంపియన్ చెక్-ఇన్ మీ అర్రేల మరియు లూప్ మాస్టరీని సెలబ్రేట్ చేయండి: - మీరు నిజజీవిత అనువర్తనాలకు నేర్చుకున్న అత్యంత ఉపయోగకర అర్రే ఆపరేషన్ ఏది? - మీకు ఏ లూప్ రకం సహజంగా అనిపించిందీ మరియు ఎందుకు? - అర్రేలు మరియు లూపులను అర్థం చేసుకోవడం మీ డేటాను ఏర్పాటు చేసే దారిని ఎలా మార్చింది? - మీరు తదుపరి ఏ క్లిష్టమైన డేటా ప్రాసెసింగ్ టాస్క్ ను చేపట్టాలని కోరుకుంటున్నారు? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> డిస్క్లైమర్: ఈ డాక్యుమెంట్‌ను AI అనువాద సేవ Co-op Translator ద్వారా అనువదించబడినది. మేము నిజత్వంపై శ్రద్ధ వహించినప్పటికీ, ఆటోమేటెడ్ అనువాదాలలో పొరపాట్లు లేదా అసత్యతలు ఉండే అవకాశముంది. ఈ డాక్యుమెంట్ యొక్క మాతృష్టమైన భాషలో ఉన్న అసలు పత్రాన్ని అధికారిక మూలం గా పరిగణించాలి. గంభీరమైన సమాచారానికి, వృత్తిపరమైన మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకంనుంచి వచ్చే ఏవైనా అర్థం తప్పుదోవ పడే పరిస్థితులకు మేము బాధ్యత వహించము. <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

บทนำสู่ JavaScript

JavaScript เป็นภาษาของเว็บ ในบทเรียนทั้งสี่นี้ คุณจะได้เรียนรู้พื้นฐานของมัน ### หัวข้อ 1. ตัวแปรและประเภทข้อมูล 2. ฟังก์ชันและเมธอด 3. การตัดสินใจด้วย JavaScript 4. อาเรย์และลูป ### เครดิต บทเรียนเหล่านี้เขียนขึ้นด้วย ♥️ โดย Jasmine Greenaway, Christopher Harrison และ Chris Noring --- ข้อจำกัดความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้

javascript

JavaScript เบื้องต้น: ประเภทข้อมูล

ประเภทข้อมูลเป็นหนึ่งในแนวคิดพื้นฐานของ JavaScript ที่คุณจะพบเจอในทุกโปรแกรมที่คุณเขียน ลองนึกถึงประเภทข้อมูลเหมือนระบบจัดเก็บของบรรณารักษ์โบราณในเมืองอเล็กซานเดรีย – พวกเขามีที่จัดเก็บเฉพาะสำหรับม้วนกระดาษที่เก็บบทกวี คณิตศาสตร์ และบันทึกประวัติศาสตร์ JavaScript จัดการข้อมูลในลักษณะที่คล้ายกันโดยแยกเป็นหมวดหมู่ต่างๆ สำหรับข้อมูลแต่ละชนิด ในบทเรียนนี้ เราจะสำรวจประเภทข้อมูลหลักที่ทำให้ JavaScript ทำงานได้ คุณจะได้เรียนรู้วิธีจัดการกับตัวเลข ข้อความ ค่าจริง/เท็จ และเข้าใจว่าทำไมการเลือกประเภทข้อมูลที่ถูกต้องจึงมีความสำคัญสำหรับโปรแกรมของคุณ แนวคิดเหล่านี้อาจดูเป็นนามธรรมในตอนแรก แต่เมื่อฝึกฝนแล้ว จะกลายเป็นเรื่องปกติไปเอง การเข้าใจประเภทข้อมูลจะทำให้ทุกอย่างใน JavaScript ชัดเจนขึ้นมาก เหมือนกับที่สถาปนิกต้องเข้าใจวัสดุก่อสร้างต่างๆ ก่อนที่จะสร้างโบสถ์ ศาสตร์พื้นฐานเหล่านี้จะสนับสนุนทุกสิ่งที่คุณจะสร้างในอนาคต ## แบบทดสอบก่อนเรียน Pre-lecture quiz บทเรียนนี้ครอบคลุมพื้นฐานของ JavaScript ซึ่งเป็นภาษาโปรแกรมที่ใช้เพิ่มความโต้ตอบในเว็บ [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") เริ่มกันที่ตัวแปรและประเภทข้อมูลที่ใช้เก็บข้อมูลกันเลย! ## ตัวแปร ตัวแปรคือตัวสร้างพื้นฐานในโปรแกรม เหมือนกับโหลที่ติดป้ายชื่อซึ่งนักเล่นแร่แปรธาตุในยุคกลางใช้เก็บสารต่าง ๆ ตัวแปรช่วยให้คุณเก็บข้อมูลและตั้งชื่อที่บ่งบอก เพื่อให้คุณสามารถอ้างอิงภายหลังได้ ต้องการจดจำอายุของใครบางคนไหม? เก็บไว้ในตัวแปรชื่อ age ต้องการติดตามชื่อลูกค้าไหม? เก็บไว้ในตัวแปรชื่อ userName เราจะเน้นวิธีการสมัยใหม่ในการสร้างตัวแปรใน JavaScript เทคนิคที่คุณจะได้เรียนนี้สะท้อนการพัฒนาภาษามาหลายปีและแนวปฏิบัติที่ดีที่สุดที่ชุมชนนักพัฒนาได้สร้างขึ้น การสร้างและ ประกาศ ตัวแปรมีไวยากรณ์ดังนี้ [keyword] [name] ประกอบด้วยสองส่วนดังนี้: - คำสำคัญ (Keyword) ใช้ let สำหรับตัวแปรที่สามารถเปลี่ยนแปลงได้ หรือ const สำหรับค่าที่คงที่ - ชื่อตัวแปร เป็นชื่อที่บ่งบอกความหมายซึ่งคุณเลือกเอง ✅ คำสำคัญ let ถูกเพิ่มเข้ามาใน ES6 และให้ตัวแปรมีสิ่งที่เรียกว่า _block scope_ แนะนำให้ใช้ let หรือ const แทนคำเดิม var เราจะเรียนรู้เกี่ยวกับ block scope ให้ลึกขึ้นในบทต่อไป ### งาน - การทำงานกับตัวแปร 1. ประกาศตัวแปร เริ่มจากสร้างตัวแปรตัวแรกกัน: ```javascript let myVariable; ``` สิ่งที่เกิดขึ้น: - แจ้ง JavaScript ให้สร้างที่เก็บข้อมูลชื่อ myVariable - JavaScript จัดสรรพื้นที่ในหน่วยความจำสำหรับตัวแปรนี้ - ตัวแปรยังไม่มีค่า (undefined) 2. กำหนดค่าให้ตัวแปร มาลองใส่ค่าในตัวแปรกัน: ```javascript myVariable = 123; ``` การทำงานของการกำหนดค่า: - ตัวดำเนินการ = กำหนดค่า 123 ให้กับตัวแปร - ตัวแปรตอนนี้จะเก็บค่านี้แทนที่จะเป็น undefined - คุณสามารถอ้างอิงค่าที่เก็บในตัวแปรนี้ภายในโค้ดได้โดยใช้ myVariable > หมายเหตุ: การใช้ = ในบทเรียนนี้หมายถึงตัวดำเนินการ "assignment operator" เพื่อกำหนดค่าให้ตัวแปร ไม่ได้หมายถึงการเท่ากัน 3. ทำแบบฉลาด จริงๆ แล้ว มารวมสองขั้นตอนนี้เข้าด้วยกัน: ```javascript let myVariable = 123; ``` วิธีนี้มีประสิทธิภาพกว่า: - ประกาศตัวแปรและกำหนดค่าในคำสั่งเดียวกัน - เป็นแนวปฏิบัติที่นักพัฒนาทั่วไปใช้ - ลดความยาวโค้ดในขณะที่ยังคงความชัดเจน 4. เปลี่ยนใจ ถ้าอยากเก็บเลขอื่นล่ะ? ```javascript myVariable = 321; ``` เข้าใจการกำหนดค่าใหม่: - ตัวแปรตอนนี้มีค่า 321 แทน 123 - ค่าก่อนหน้าถูกแทนที่ – ตัวแปรเก็บค่าได้ทีละค่าเท่านั้น - ความเปลี่ยนแปลงนี้คือจุดเด่นของตัวแปรที่ประกาศด้วย let ✅ ลองดู! คุณสามารถเขียนโค้ด JavaScript ได้ในเบราว์เซอร์ เปิดหน้าเบราว์เซอร์และไปที่ Developer Tools บนแท็บ console จะมีช่องให้พิมพ์คำสั่ง; พิมพ์ let myVariable = 123 แล้วกด Enter จากนั้นพิมพ์ myVariable ผลลัพธ์เป็นอย่างไร? คุณจะได้เรียนรู้เรื่องนี้เพิ่มเติมในบทเรียนต่อไป ### 🧠 ตรวจสอบความเข้าใจตัวแปร: รู้สึกคุ้นเคยหรือยัง ลองดูว่าคุณเข้าใจตัวแปรแค่ไหน: - อธิบายความแตกต่างระหว่างการประกาศและกำหนดค่าตัวแปรได้ไหม? - จะเกิดอะไรขึ้นถ้าคุณพยายามใช้ตัวแปรก่อนประกาศ? - เมื่อไรคุณจะเลือกใช้ let แทน const? ## ค่าคงที่ (Constants) บางครั้งคุณต้องเก็บข้อมูลซึ่งไม่ควรเปลี่ยนแปลงตลอดเวลาที่โปรแกรมทำงาน คิดถึงค่าคงที่เหมือนหลักการคณิตศาสตร์ที่ยูคลิดกำหนดในกรีกโบราณ – เมื่อตั้งหลักการแล้วและบันทึกไว้ มันจะคงที่ตลอดไป ค่าคงที่ทำงานคล้ายตัวแปร แต่มีข้อจำกัดสำคัญ: เมื่อตั้งค่าคงที่แล้วค่าไม่สามารถเปลี่ยนแปลงได้ คุณสมบัตินี้ช่วยป้องกันไม่ให้เกิดการแก้ไขค่าที่สำคัญโดยบังเอิญในโปรแกรม การประกาศและตั้งค่าค่าคงที่ทำเหมือนกับตัวแปร แต่ใช้คำสำคัญ const ซึ่งโดยทั่วไปค่าคงที่จะตั้งด้วยตัวพิมพ์ใหญ่ทั้งหมด โค้ดนี้ทำอะไร: - สร้าง ค่าคงที่ชื่อ MY_VARIABLE ที่มีค่า 123 - ใช้ ตัวพิมพ์ใหญ่ทั้งหมดเพื่อระบุค่าคงที่ - ป้องกัน การเปลี่ยนแปลงค่าในอนาคต ค่าคงที่มีสองกฎหลัก: - ต้องกำหนดค่าเลยทันที – ไม่อนุญาตให้ค่าคงที่ว่างเปล่า! - ไม่สามารถเปลี่ยนค่าได้เลย – JavaScript จะรายงานข้อผิดพลาดถ้าพยายามทำ ลองดูสิ: ค่าธรรมดา – ต่อไปนี้ไม่อนุญาต: ```javascript const PI = 3; PI = 4; // ไม่อนุญาต ``` สิ่งที่ควรจำ: - การพยายาม ตั้งค่าคงที่ใหม่จะเกิดข้อผิดพลาด - ป้องกัน การเปลี่ยนค่าโดยไม่ตั้งใจ - ทำให้ ค่าคงที่เป็นที่เชื่อถือได้ตลอดโปรแกรม การอ้างอิงอ็อบเจ็กต์ถูกป้องกัน – ต่อไปนี้ไม่อนุญาต: ```javascript const obj = { a: 3 }; obj = { b: 5 } // ไม่อนุญาต ``` เข้าใจแนวคิดนี้: - ป้องกัน การแทนอ็อบเจ็กต์ต้นฉบับด้วยอ็อบเจ็กต์ใหม่ - รักษา การอ้างอิงไปยังอ็อบเจ็กต์เดิม - ทำให้ อัตลักษณ์ของอ็อบเจ็กต์ไม่เปลี่ยนแปลงในหน่วยความจำ ค่าสมบัติภายในอ็อบเจ็กต์เปลี่ยนได้ – ต่อไปนี้อนุญาต: ```javascript const obj = { a: 3 }; obj.a = 5; // อนุญาต ``` สิ่งที่เกิดขึ้น: - แก้ไข ค่าสมบัติภายในอ็อบเจ็กต์ - เก็บ การอ้างอิงไปยังอ็อบเจ็กต์เดิม - แสดงให้เห็น ว่าสมบัติของอ็อบเจ็กต์สามารถเปลี่ยนแปลงได้ในขณะที่อ้างอิงคงที่ > หมายเหตุ const หมายความว่าการอ้างอิงถูกป้องกันไม่ให้ถูกเปลี่ยนแปลง ค่าเองไม่จำเป็นต้องไม่เปลี่ยนแปลง (_immutable_) และสามารถเปลี่ยนได้ โดยเฉพาะอย่างยิ่งถ้าเป็นโครงสร้างซับซ้อนเช่นอ็อบเจ็กต์ ## ประเภทข้อมูล JavaScript จัดข้อมูลออกเป็นหมวดหมู่ที่เรียกว่าประเภทข้อมูล แนวคิดนี้คล้ายกับที่นักปราชญ์โบราณแยกประเภทความรู้ – อริสโตเติลจำแนกประเภทตรรกะต่างๆ อย่างชัดเจนว่าไม่สามารถประยุกต์ใช้หลักตรรกะเดียวกับบทกวี คณิตศาสตร์ และปรัชญาธรรมชาติได้อย่างเท่าเทียมกัน ประเภทข้อมูลสำคัญเพราะการดำเนินการต่าง ๆ ทำงานกับข้อมูลชนิดต่างกันได้ไม่เหมือนกัน เหมือนกับคุณไม่สามารถคำนวณทางคณิตศาสตร์กับชื่อคน หรือจัดเรียงสมการคณิตศาสตร์ตามตัวอักษรได้ JavaScript ต้องการประเภทข้อมูลที่เหมาะสมสำหรับการทำงานแต่ละอย่าง การเข้าใจเรื่องนี้ช่วยป้องกันความผิดพลาดและทำให้โค้ดน่าเชื่อถือมากขึ้น ตัวแปรสามารถเก็บค่าได้หลายประเภท เช่น ตัวเลขและข้อความ ประเภทของค่าที่ต่างกันเหล่านี้เรียกว่า ประเภทข้อมูล (data type) ประเภทข้อมูลเป็นส่วนสำคัญของการพัฒนาโปรแกรมเพราะช่วยให้นักพัฒนาตัดสินใจได้ว่าโค้ดควรเขียนอย่างไรและโปรแกรมควรทำงานอย่างไร นอกจากนี้ บางประเภทข้อมูลมีคุณสมบัติเฉพาะช่วยแปลงหรือดึงข้อมูลเพิ่มเติมจากค่าที่เก็บได้ ✅ ประเภทข้อมูลยังเรียกว่า data primitives ของ JavaScript ซึ่งเป็นประเภทข้อมูลพื้นฐานที่สุดที่ภาษามีอยู่ มี 7 ประเภท primitives คือ string, number, bigint, boolean, undefined, null และ symbol ลองนึกถึงสิ่งที่แต่ละ primitive อาจแทน เช่น zebra คืออะไร? แล้ว 0 หละ? หรือ true? ### ตัวเลข (Numbers) ตัวเลขเป็นประเภทข้อมูลที่ตรงไปตรงมาที่สุดใน JavaScript ไม่ว่าคุณจะใช้เลขจำนวนเต็ม เช่น 42 เลขทศนิยม เช่น 3.14 หรือเลขศูนย์ลบ เช่น -5 JavaScript จะจัดการเหมือนกันหมด จำตัวแปรที่เราสร้างไว้ก่อนหน้านี้ได้ไหม? ค่าที่เราเก็บ 123 นั้นเป็นประเภทข้อมูลตัวเลขจริงๆ: ลักษณะสำคัญ: - JavaScript รู้จักค่าตัวเลขโดยอัตโนมัติ - คุณสามารถทำคำนวณทางคณิตศาสตร์กับตัวแปรพวกนี้ได้ - ไม่จำเป็นต้องประกาศประเภทข้อมูลอย่างชัดเจน ตัวแปรสามารถเก็บตัวเลขทุกประเภทได้ รวมถึงทศนิยมและตัวเลขลบ ตัวเลขยังสามารถใช้กับตัวดำเนินการทางคณิตศาสตร์ ซึ่งเราจะอธิบายใน ส่วนถัดไป ### ตัวดำเนินการทางคณิตศาสตร์ ตัวดำเนินการทางคณิตศาสตร์ช่วยให้คุณทำการคำนวณทางคณิตศาสตร์ใน JavaScript ตัวดำเนินการเหล่านี้เป็นไปตามหลักการเดียวกับที่นักคณิตศาสตร์ใช้มาหลายศตวรรษ – สัญลักษณ์เดียวกับที่ปรากฏในผลงานของนักปราชญ์อย่าง อัล-คอวาริซมี ซึ่งพัฒนาระบบสัญลักษณ์ทางพีชคณิต ตัวดำเนินการทำงานตามที่คุณคาดหวังจากคณิตศาสตร์ทั่วไป เช่น บวกสำหรับการบวก ลบสำหรับการลบ เป็นต้น มีตัวดำเนินการหลายประเภทเมื่อทำฟังก์ชันทางคณิตศาสตร์ บางตัวที่ใช้บ่อยได้แก่: ✅ ลองดู! ลองทำการคำนวณทางคณิตศาสตร์ใน console ของเบราว์เซอร์ คุณรู้สึกประหลาดใจกับผลลัพธ์ไหม? ### 🧮 ทดสอบทักษะคณิตศาสตร์: คำนวณอย่างมั่นใจ ทดสอบความเข้าใจทางคณิตศาสตร์ของคุณ: - ความแตกต่างระหว่าง / (หาร) และ % (เศษเหลือ) คืออะไร? - คุณทำนายได้ไหมว่า 10 % 3 จะเท่ากับเท่าไหร่? (ฮินต์: ไม่ใช่ 3.33...) - ทำไมตัวดำเนินการเศษเหลือถึงมีประโยชน์ในโปรแกรมมิ่ง? ### ข้อความ (Strings) ใน JavaScript ข้อมูลข้อความจะแทนด้วยสตริง คำว่า "สตริง" มาจากแนวคิดของตัวอักษรที่ถูกเรียงต่อกันเป็นลำดับ เหมือนกับที่นักเขียนในอารามยุคกลางเชื่อมตัวอักษรเพื่อสร้างคำและประโยคในคัมภีร์ของพวกเขา สตริงเป็นองค์ประกอบสำคัญของการพัฒนาเว็บ ข้อความทุกชิ้นที่แสดงบนเว็บไซต์ – ชื่อผู้ใช้ ป้ายปุ่ม ข้อความแสดงความผิดพลาด เนื้อหา – ถูกจัดการเป็นข้อมูลสตริง การเข้าใจสตริงเป็นสิ่งจำเป็นสำหรับการสร้างส่วนต่อประสานผู้ใช้ที่ใช้งานได้ดี สตริงคือชุดตัวอักษรที่อยู่ระหว่างเครื่องหมายคำพูดเดี่ยวหรือคู่ ทำความเข้าใจแนวคิด: - ใช้ เครื่องหมายคำพูดเดี่ยว ' หรือคู่ " เพื่อกำหนดสตริง - เก็บ ข้อมูลข้อความซึ่งรวมตัวอักษร ตัวเลข และสัญลักษณ์ต่าง ๆ - กำหนดค่า สตริงให้ตัวแปรเพื่อใช้งานภายหลัง - ต้อง ใช้เครื่องหมายคำพูดเพื่อแยกระหว่างข้อความกับชื่อตัวแปร อย่าลืมใส่เครื่องหมายคำพูดเมื่อเขียนสตริง มิฉะนั้น JavaScript จะถือว่าเป็นชื่อตัวแปรแทน ### การจัดรูปแบบสตริง การจัดการกับสตริงช่วยให้คุณรวมข้อความหลายๆ ส่วนเข้าด้วยกัน ใส่ตัวแปรภายในข้อความ และสร้างเนื้อหาแบบไดนามิกที่ตอบสนองตามสถานะโปรแกรม เทคนิคนี้ทำให้คุณสร้างข้อความขึ้นโดยโปรแกรมได้ บ่อยครั้งที่คุณต้องรวมสตริงหลายชิ้นเข้าด้วยกัน – กระบวนการนี้เรียกว่าการเชื่อมสตริง (concatenation) ในการ เชื่อมต่อ สตริงสองตัวขึ้นไป หรือรวมเข้าด้วยกัน ให้ใช้ตัวดำเนินการ + ทีละขั้นตอน นี่คือสิ่งที่เกิดขึ้น: - รวม สตริงหลายตัวโดยใช้ตัวดำเนินการ + - เชื่อม สตริงเข้าด้วยกันโดยตรงโดยไม่มีช่องว่างในตัวอย่างแรก - เพิ่ม ตัวอักษรเว้นวรรค " " ระหว่างสตริงเพื่อให้อ่านง่ายขึ้น - แทรก เครื่องหมายวรรคตอน เช่น เครื่องหมายจุลภาคเพื่อสร้างรูปแบบที่ถูกต้อง ✅ ทำไม 1 + 1 = 2 ใน JavaScript แต่ '1' + '1' = 11? ลองคิดดูสิ แล้ว '1' + 1 ล่ะ? Template literals คือวิธีการจัดรูปแบบสตริงอีกแบบหนึ่ง โดยแทนที่การใช้เครื่องหมายคำพูดด้วย backtick () สิ่งที่ไม่ใช่ข้อความธรรมดาจะต้องวางไว้ในตัวแทนที่ ${ }` ซึ่งรวมถึงตัวแปรใด ๆ ที่อาจเป็นสตริงด้วย มาทำความเข้าใจแต่ละส่วน: - ใช้ backtick ` `` แทนที่จะเป็นเครื่องหมายคำพูดปกติเพื่อสร้าง template literals - ฝัง ตัวแปรโดยตรงโดยใช้ไวยากรณ์ตัวแทนที่ ${} - รักษา ช่องว่างและการจัดรูปแบบไว้เหมือนที่เขียน - ให้ วิธีที่สะอาดกว่าในการสร้างสตริงที่ซับซ้อนพร้อมตัวแปร คุณสามารถทำให้รูปแบบของคุณสำเร็จได้โดยวิธีใดก็ได้ แต่ template literals จะเคารพช่องว่างและการขึ้นบรรทัดใหม่ ✅ คุณจะใช้ template literal เมื่อใด เทียบกับสตริงธรรมดา? ### 🔤 ตรวจสอบความชำนาญสตริง: ความมั่นใจในการจัดการข้อความ ประเมินทักษะสตริงของคุณ: - คุณอธิบายได้ไหมว่าทำไม '1' + '1' ถึงเท่ากับ '11' แทนที่จะเป็น 2? - คุณชอบวิธีการสตริงแบบไหนที่อ่านง่ายกว่า: การเชื่อมต่อ หรือ template literals? - จะเกิดอะไรขึ้นถ้าคุณลืมเครื่องหมายคำพูดรอบสตริง? ### บูลีน (Booleans) บูลีนแทนรูปแบบข้อมูลที่ง่ายที่สุด: สามารถเก็บค่าได้เพียงสองค่า คือ true หรือ false ระบบตรรกะสองค่านี้มีต้นกำเนิดจากงานของ George Boole นักคณิตศาสตร์ในศตวรรษที่ 19 ผู้พัฒนาพีชคณิตบูลีน แม้จะเรียบง่าย บูลีนมีความสำคัญต่อตรรกะโปรแกรมอย่างยิ่ง เพราะช่วยให้โค้ดของคุณสามารถตัดสินใจโดยอิงตามเงื่อนไข — ว่าผู้ใช้ได้เข้าสู่ระบบหรือไม่, ปุ่มถูกกดหรือไม่, หรือเงื่อนไขบางอย่างได้รับการตอบสนองหรือไม่ บูลีนสามารถมีค่าได้เพียงสองค่า: true หรือ false บูลีนช่วยให้ตัดสินใจได้ว่าโค้ดบางบรรทัดควรถูกเรียกใช้เมื่อเงื่อนไขบางอย่างเป็นจริงหรือไม่ ในหลายกรณี โอเปอเรเตอร์ ช่วยตั้งค่าค่าของบูลีน และคุณมักจะเห็นการสร้างตัวแปรหรืออัปเดตค่าของตัวแปรโดยใช้โอเปอเรเตอร์เหล่านี้ จากข้างต้น เราได้: - สร้าง ตัวแปรที่เก็บค่าบูลีน true - สาธิต วิธีเก็บค่าบูลีน false - ใช้ คีย์เวิร์ด true และ false อย่างถูกต้อง (ไม่ต้องใส่เครื่องหมายคำพูด) - เตรียม ตัวแปรเหล่านี้ใช้งานในคำสั่งเงื่อนไข ✅ ตัวแปรสามารถถือเป็น 'truthy' ถ้ามันประเมินค่าเป็นบูลีน true น่าสนใจว่าใน JavaScript ค่าทั้งหมดถือเป็น truthy ยกเว้นที่ถูกนิยามเป็น falsy ### 🎯 ตรวจสอบตรรกะบูลีน: ทักษะการตัดสินใจ ทดสอบความเข้าใจบูลีนของคุณ: - ทำไมคุณคิดว่า JavaScript จึงมีค่า "truthy" และ "falsy" นอกเหนือจากแค่ true และ false? - คุณทำนายได้ไหมว่าค่าไหนเป็น falsy: 0, "0", [], "false"? - บูลีนมีประโยชน์อย่างไรในการควบคุมการทำงานของโปรแกรม? --- ## 📊 สรุปชุดเครื่องมือข้อมูลของคุณ ## ความท้าทาย GitHub Copilot Agent 🚀 ใช้โหมด Agent เพื่อทำความท้าทายต่อไปนี้ให้สำเร็จ: คำอธิบาย: สร้างตัวจัดการข้อมูลส่วนบุคคลที่แสดงข้อมูลทุกประเภทข้อมูลใน JavaScript ที่คุณได้เรียนรู้ในบทนี้ ขณะจัดการสถานการณ์ข้อมูลจริง คำสั่ง: สร้างโปรแกรม JavaScript ที่สร้างอ็อบเจกต์โปรไฟล์ผู้ใช้ซึ่งมี: ชื่อบุคคล (สตริง), อายุ (ตัวเลข), สถานะนักเรียน (บูลีน), สีโปรดเป็นอาเรย์ และอ็อบเจกต์ที่อยู่ ประกอบด้วยถนน, เมือง, และรหัสไปรษณีย์ รวมฟังก์ชันเพื่อแสดงข้อมูลโปรไฟล์และอัปเดตแต่ละฟิลด์ แน่ใจว่าได้สาธิตการเชื่อมสตริง, template literals, การคำนวณเชิงคณิตศาสตร์กับอายุ และตรรกะบูลีนสำหรับสถานะนักเรียน เรียนรู้เพิ่มเติมเกี่ยวกับ agent mode ที่นี่ ## 🚀 ความท้าทาย JavaScript มีพฤติกรรมบางอย่างที่อาจทำให้นักพัฒนาประหลาดใจ นี่คือตัวอย่างคลาสสิก: ลองพิมพ์ในคอนโซลเบราว์เซอร์ของคุณ: let age = 1; let Age = 2; age == Age และสังเกตผลลัพธ์ มันคืนค่า false – คุณสามารถหาสาเหตุได้ไหม? นี่เป็นหนึ่งในพฤติกรรมของ JavaScript ที่ควรเข้าใจ การคุ้นเคยกับสิ่งเหล่านี้จะช่วยให้คุณเขียนโค้ดที่เชื่อถือได้มากขึ้นและแก้ไขข้อผิดพลาดได้ดีขึ้น ## แบบทดสอบหลังบรรยาย แบบทดสอบหลังบรรยาย ## ทบทวน & ศึกษาด้วยตนเอง ดูที่ รายการแบบฝึกหัด JavaScript นี้ และลองทำดู คุณได้เรียนรู้อะไรบ้าง? ## การบ้าน การฝึกฝนชนิดข้อมูล ## 🚀 ไทม์ไลน์ความชำนาญชนิดข้อมูล JavaScript ของคุณ ### ⚡ สิ่งที่คุณทำได้ใน 5 นาทีถัดไป - [ ] เปิดคอนโซลเบราว์เซอร์และสร้างตัวแปร 3 ตัวที่มีชนิดข้อมูลต่างกัน - [ ] ลองความท้าทาย: let age = 1; let Age = 2; age == Age และหาสาเหตุว่าทำไมมันเป็น false - [ ] ฝึกการเชื่อมสตริงกับชื่อและตัวเลขโปรดของคุณ - [ ] ทดสอบสิ่งที่จะเกิดขึ้นเมื่อคุณบวกตัวเลขกับสตริง ### 🎯 สิ่งที่คุณทำได้ภายในชั่วโมงนี้ - [ ] ทำแบบทดสอบหลังบทเรียนและทบทวนแนวคิดที่สับสน - [ ] สร้างเครื่องคิดเลขขนาดเล็กที่บวก ลบ คูณ และหารตัวเลขสองตัว - [ ] สร้างรูปแบบชื่อเรียบง่ายโดยใช้ template literals - [ ] สำรวจความแตกต่างระหว่างโอเปอเรเตอร์เปรียบเทียบ == และ === - [ ] ฝึกแปลงชนิดข้อมูลระหว่างประเภทต่าง ๆ ### 📅 พื้นฐาน JavaScript ของคุณในหนึ่งสัปดาห์ - [ ] ทำการบ้านอย่างมั่นใจและสร้างสรรค์ - [ ] สร้างอ็อบเจกต์โปรไฟล์ส่วนบุคคลโดยใช้ชนิดข้อมูลที่เรียนทั้งหมด - [ ] ฝึกทำแบบฝึกหัด JavaScript จาก CSS-Tricks - [ ] สร้างตัวยืนยันแบบฟอร์มง่าย ๆ โดยใช้ตรรกะบูลีน - [ ] ทดลองกับชนิดข้อมูลอาเรย์และอ็อบเจกต์ (พรีวิวบทเรียนที่จะมา) - [ ] เข้าร่วมชุมชน JavaScript แล้วถามคำถามเกี่ยวกับชนิดข้อมูล ### 🌟 การเปลี่ยนแปลงในหนึ่งเดือนของคุณ - [ ] ผนวกความรู้ชนิดข้อมูลในโปรเจกต์โปรแกรมที่ใหญ่ขึ้น - [ ] เข้าใจว่าเมื่อไรและทำไมต้องใช้ชนิดข้อมูลแต่ละชนิดในแอปพลิเคชันจริง - [ ] ช่วยเหลือผู้เริ่มต้นทำความเข้าใจพื้นฐานของ JavaScript - [ ] สร้างแอปพลิเคชันขนาดเล็กเพื่อจัดการข้อมูลผู้ใช้ชนิดต่าง ๆ - [ ] สำรวจแนวคิดขั้นสูง เช่น การบังคับแปลงชนิดข้อมูลและการเปรียบเทียบแบบเข้มงวด - [ ] มีส่วนร่วมในโปรเจกต์โอเพนซอร์ส JavaScript โดยปรับปรุงเอกสาร ### 🧠 การตรวจสอบความชำนาญชนิดข้อมูลสุดท้าย ฉลองความรู้พื้นฐาน JavaScript ของคุณ: - ชนิดข้อมูลใดทำให้คุณประหลาดใจที่สุดในเรื่องพฤติกรรมของมัน? - คุณรู้สึกมั่นใจแค่ไหนในการอธิบายตัวแปรและค่าคงที่ให้เพื่อนฟัง? - สิ่งที่น่าสนใจที่สุดที่คุณค้นพบเกี่ยวกับระบบชนิดข้อมูลของ JavaScript คืออะไร? - คุณนึกภาพได้ไหมว่าจะสร้างแอปพลิเคชันจริงอะไรโดยใช้พื้นฐานเหล่านี้? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> คำปฏิเสธความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามให้ความถูกต้องสูงสุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาดั้งเดิมถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้บริการแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดที่เกิดจากการใช้การแปลนี้ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Methods and Functions

## Pre-Lecture Quiz แบบทดสอบก่อนบรรยาย การเขียนโค้ดแบบเดิมซ้ำ ๆ เป็นหนึ่งในความน่าหงุดหงิดที่พบบ่อยที่สุดในการเขียนโปรแกรม ฟังก์ชันช่วยแก้ปัญหานี้ด้วยการให้คุณแพ็กโค้ดให้อยู่ในบล็อกที่ใช้ซ้ำได้ คิดถึงฟังก์ชันเหมือนกับชิ้นส่วนมาตรฐานที่ทำให้สายพานการประกอบของ Henry Ford ธรรมดากลายเป็นนวัตกรรม — เมื่อคุณสร้างส่วนประกอบที่เชื่อถือได้แล้ว คุณสามารถใช้ซ้ำได้ทุกที่โดยไม่ต้องสร้างใหม่จากศูนย์ ฟังก์ชันช่วยให้คุณรวบรวมชิ้นส่วนของโค้ดเพื่อให้สามารถใช้ซ้ำทั่วโปรแกรมของคุณ แทนที่จะคัดลอกและวางตรรกะเดียวกันซ้ำ ๆ คุณสามารถสร้างฟังก์ชันครั้งเดียวแล้วเรียกใช้เมื่อจำเป็น วิธีนี้ช่วยให้โค้ดของคุณเป็นระเบียบและทำให้อัปเดตง่ายขึ้นมาก ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีสร้างฟังก์ชันของคุณเอง ส่งข้อมูลให้ฟังก์ชัน และรับผลลัพธ์ที่มีประโยชน์กลับมา คุณจะได้ค้นพบความแตกต่างระหว่างฟังก์ชันและเมธอด เรียนรู้วิธีเขียนซินแท็กซ์แบบใหม่ และดูว่าฟังก์ชันสามารถทำงานร่วมกับฟังก์ชันอื่น ๆ ได้อย่างไร เราจะสร้างแนวคิดเหล่านี้ทีละขั้นตอน [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## Functions ฟังก์ชันคือบล็อกโค้ดที่แยกตัวออกเองและทำงานเฉพาะเจาะจง มันบรรจุตรรกะที่คุณสามารถเรียกใช้ได้เมื่อจำเป็น แทนที่จะเขียนโค้ดเดียวกันซ้ำหลายครั้งทั่วโปรแกรม คุณสามารถแพ็กโค้ดนี้ลงในฟังก์ชันแล้วเรียกใช้ฟังก์ชันเมื่อใดก็ได้ที่ต้องการ วิธีนี้ช่วยให้โค้ดของคุณสะอาดและทำให้อัปเดตง่ายขึ้น ลองนึกภาพความท้าทายในการบำรุงรักษาหากคุณต้องเปลี่ยนตรรกะที่กระจายอยู่ทั่วโค้ดโค้ดของคุณถึง 20 จุด การตั้งชื่อฟังก์ชันให้บรรยายความหมายเป็นสิ่งสำคัญ ฟังก์ชันที่มีชื่อดีจะสื่อความหมายของมันได้ชัดเจน — เมื่อคุณเห็น cancelTimer() คุณจะเข้าใจได้ทันทีว่าฟังก์ชันนี้ทำอะไร เหมือนกับปุ่มที่ติดป้ายไว้อย่างชัดเจนบอกคุณว่าเมื่อคลิกแล้วจะเกิดอะไรขึ้น ## Creating and calling a function ลองดูวิธีสร้างฟังก์ชันกัน ซินแท็กซ์จะเป็นรูปแบบที่สม่ำเสมอดังนี้: มาทำความเข้าใจกัน: - คีย์เวิร์ด function บอก JavaScript ว่า "เฮ้ ฉันกำลังสร้างฟังก์ชัน!" - nameOfFunction คือที่ที่คุณตั้งชื่อฟังก์ชันของคุณให้บ่งบอกความหมาย - วงเล็บ () คือที่วางพารามิเตอร์ (เราจะเรียนรู้เรื่องนี้เร็ว ๆ นี้) - เครื่องหมายปีกกา {} คือส่วนของโค้ดจริงที่จะทำงานเมื่อคุณเรียกฟังก์ชัน ลองสร้างฟังก์ชันทักทายง่าย ๆ เพื่อดูตัวอย่าง: ฟังก์ชันนี้จะแสดง "Hello, world!" ในคอนโซล เมื่อคุณกำหนดฟังก์ชันนี้แล้ว คุณสามารถใช้ได้หลายครั้งตามต้องการ เพื่อเรียกใช้ (หรือ "call") ฟังก์ชัน ให้เขียนชื่อฟังก์ชันตามด้วยวงเล็บ JavaScript อนุญาตให้คุณกำหนดฟังก์ชันก่อนหรือหลังการเรียกใช้งาน — เครื่องยนต์ JavaScript จะจัดลำดับการทำงานให้เอง เมื่อคุณรันบรรทัดนี้ มันจะทำงานโค้ดทั้งหมดที่อยู่ภายในฟังก์ชัน displayGreeting โดยแสดงข้อความ "Hello, world!" ในคอนโซลเบราว์เซอร์ คุณสามารถเรียกฟังก์ชันนี้ซ้ำได้ตามต้องการ ### 🧠 ฟังก์ชันเบื้องต้น: สร้างฟังก์ชันแรกของคุณ มาลองตรวจสอบความเข้าใจฟังก์ชันพื้นฐานของคุณ: - ทำไมเราถึงใช้เครื่องหมายปีกกา {} ในการกำหนดฟังก์ชัน? - จะเกิดอะไรขึ้นถ้าคุณเขียน displayGreeting โดยไม่มีวงเล็บ? - ทำไมคุณถึงอยากเรียกใช้ฟังก์ชันเดียวกันหลาย ๆ ครั้ง? ### แนวทางปฏิบัติที่ดีสำหรับฟังก์ชัน นี่คือเคล็ดลับเล็กน้อยที่ช่วยให้คุณเขียนฟังก์ชันได้ดีขึ้น: - ตั้งชื่อฟังก์ชันให้ชัดเจนและบรรยายความหมาย – คุณในอนาคตจะขอบคุณ! - ใช้ camelCasing สำหรับชื่อหลายคำ (เช่น calculateTotal แทน calculate_total) - ให้ฟังก์ชันทำงานเพียงสิ่งเดียวอย่างมีประสิทธิภาพ ## Passing information to a function ฟังก์ชัน displayGreeting ของเราเอาไว้แสดง "Hello, world!" เท่านั้น พารามิเตอร์ช่วยให้ฟังก์ชันยืดหยุ่นและมีประโยชน์มากขึ้น พารามิเตอร์ ทำหน้าที่เหมือนตัวแทนที่คุณจะใส่ค่าต่าง ๆ ลงไปในแต่ละครั้งที่ใช้ฟังก์ชัน วิธีนี้ทำให้ฟังก์ชันเดียวกันสามารถทำงานกับข้อมูลที่ต่างกันในแต่ละการเรียกใช้ เมื่อคุณกำหนดฟังก์ชัน ให้ระบุพารามิเตอร์ไว้ในวงเล็บ คั่นด้วยเครื่องหมายจุลภาคหากมีหลายพารามิเตอร์: แต่ละพารามิเตอร์จะทำหน้าที่เป็นตัวแทน — เมื่อใครสักคนเรียกใช้ฟังก์ชัน จะส่งค่าจริงมาแทนที่เหล่านี้ ลองปรับฟังก์ชันทักทายให้รับชื่อคน: สังเกตว่าตอนนี้เราใช้ backticks (` `) และ ${}` เพื่อแทรกชื่อคนตรง ๆ ในข้อความ — สิ่งนี้เรียกว่า template literal เป็นวิธีที่สะดวกมากในการสร้างสตริงที่มีตัวแปรผสมอยู่ ตอนนี้เมื่อเรียกฟังก์ชัน เราสามารถส่งชื่อใดก็ได้เข้าไป: JavaScript จะเอาสตริง 'Christopher' ไปกำหนดให้กับพารามิเตอร์ name และสร้างข้อความส่วนบุคคล "Hello, Christopher!" ขึ้นมา ## Default values ถ้าอยากให้บางพารามิเตอร์ไม่จำเป็นต้องใส่ (optional) เราทำได้ด้วยค่าเริ่มต้น! สมมติว่าอยากให้ผู้ใช้ปรับคำทักทายได้ แต่ถ้าไม่ระบุจะใช้คำว่า "Hello" แทน เราสามารถกำหนดค่าดีฟอลต์ได้ด้วยเครื่องหมายเท่ากับเหมือนการตั้งตัวแปร: ที่นี่ name ยังจำเป็นต้องใส่ แต่ salutation มีค่าดีฟอลต์เป็น 'Hello' ถ้าไม่มีใครป้อนคำทักทายมา ตอนนี้เราสามารถเรียกใช้ฟังก์ชันนี้ได้สองแบบ: การเรียกครั้งแรก JavaScript จะใช้ "Hello" ซึ่งเป็นค่าดีฟอลต์เพราะเราไม่ได้ส่งคำทักทายเข้ามา ครั้งที่สองจะใช้คำว่า "Hi" ที่เราส่งเข้าไป ฟีเจอร์นี้ทำให้ฟังก์ชันยืดหยุ่นกับสถานการณ์ที่แตกต่างกัน ### 🎛️ ตรวจสอบความเข้าใจพารามิเตอร์: ทำให้ฟังก์ชันยืดหยุ่น ทดสอบความเข้าใจเรื่องพารามิเตอร์: - ความแตกต่างระหว่างพารามิเตอร์กับอาร์กิวเมนต์คืออะไร? - ทำไมค่าดีฟอลต์จึงมีประโยชน์ในโปรแกรมจริง ๆ? - คุณคาดการณ์ได้ไหมว่าจะเกิดอะไรขึ้นถ้าส่งอาร์กิวเมนต์มากกว่าพารามิเตอร์? ## Return values ฟังก์ชันที่เราสร้างจนถึงตรงนี้แค่แสดงข้อความในคอนโซล แต่ถ้าคุณอยากให้ฟังก์ชันคำนวณสิ่งใดสิ่งหนึ่งแล้วคืนผลลัพธ์กลับมา? นี่แหละคือที่มาของ ค่าคืน (return values) แทนที่จะแค่แสดงข้อความ ฟังก์ชันสามารถส่งค่ากลับมาให้คุณเก็บไว้ในตัวแปรหรือใช้ในส่วนอื่นของโค้ดได้ ส่งค่ากลับได้โดยใช้คีย์เวิร์ด return ตามด้วยค่าที่ต้องการส่งกลับ: สิ่งสำคัญคือ เมื่อฟังก์ชันเจอ return ก็จะหยุดทำงานทันทีและส่งค่ากลับให้คนที่เรียกใช้งาน ลองดัดแปลงฟังก์ชันทักทายให้ส่งข้อความกลับแทนการแสดงผล: ตอนนี้ฟังก์ชันนี้ไม่ได้แสดงข้อความ แต่สร้างข้อความแล้วส่งกลับมาแทน เพื่อใช้ค่าที่คืนมา เราสามารถเก็บไว้ในตัวแปรเหมือนกับค่าทั่วไปได้: ตอนนี้ greetingMessage จะเก็บข้อความ "Hello, Christopher" และเราสามารถใช้มันที่ไหนก็ได้ในโค้ด — จะแสดงบนเว็บเพจ ส่งในอีเมล หรือส่งไปยังฟังก์ชันอื่น ### 🔄 ตรวจสอบค่าคืน: รับผลลัพธ์กลับ ประเมินความเข้าใจค่าคืน: - โค้ดหลังบรรทัด return ในฟังก์ชันจะเกิดอะไรขึ้น? - ทำไมการส่งค่าคืนถึงดีกว่าการแสดงผลแค่ในคอนโซล? - ฟังก์ชันสามารถส่งค่ากลับหลายประเภทได้ไหม (เช่น สตริง ตัวเลข บูลีน)? ## Functions as parameters for functions ฟังก์ชันสามารถถูกส่งเป็นพารามิเตอร์ให้ฟังก์ชันอื่นได้ แม้แนวคิดนี้จะดูซับซ้อนในตอนแรก แต่มันเป็นฟีเจอร์ที่ทรงพลังที่ช่วยให้โปรแกรมมีความยืดหยุ่นตามรูปแบบต่างๆ รูปแบบนี้พบได้บ่อยมากเวลาที่ต้องการพูดว่า "เมื่อบางสิ่งเกิดขึ้น ให้ทำสิ่งนี้" เช่น "เมื่อไทม์เมอร์หมดเวลา ให้รันโค้ดนี้" หรือ "เมื่อผู้ใช้คลิกปุ่ม ให้เรียกฟังก์ชันนี้" ลองดู setTimeout ฟังก์ชันในตัวที่รอเวลาหนึ่งแล้วจึงรันโค้ด เราต้องบอกมันว่าให้รันโค้ดอะไร — นี่แหละจุดที่ส่งฟังก์ชันไปเป็นพารามิเตอร์เหมาะมาก! ลองโค้ดนี้ — ผ่านไป 3 วินาที คุณจะเห็นข้อความ: สังเกตว่าเราไม่ได้เรียก displayDone (ไม่มีวงเล็บ) แต่ส่งชื่อฟังก์ชันไปยัง setTimeout พร้อมบอกว่า "เรียกใช้ฟังก์ชันนี้ใน 3 วินาที" ### Anonymous functions บางครั้งคุณแค่ต้องการฟังก์ชันเพื่องานเดียวเท่านั้นและไม่อยากตั้งชื่อ ถ้าคุณใช้งานฟังก์ชันนั้นแค่ครั้งเดียว การเพิ่มชื่อจะทำให้โค้ดรกไปโดยไม่จำเป็น JavaScript ให้คุณสร้าง ฟังก์ชันไร้ชื่อ (anonymous functions) — ฟังก์ชันที่ไม่มีชื่อที่คุณกำหนดไว้ตรงที่ใช้งานเลย นี่คือตัวอย่างการเขียน timer ใหม่โดยใช้ฟังก์ชันไร้ชื่อ: ผลลัพธ์เหมือนเดิม แต่ฟังก์ชันถูกกำหนดในคำสั่ง setTimeout โดยตรงโดยไม่ต้องประกาศฟังก์ชันแยกต่างหาก ### Fat arrow functions JavaScript สมัยใหม่มีวิธีเขียนฟังก์ชันสั้นกว่าที่เรียกว่า arrow functions ใช้สัญลักษณ์ => (เหมือนลูกศร — จำง่าย!) และเป็นที่นิยมในกลุ่มนักพัฒนา Arrow functions ช่วยข้ามคีย์เวิร์ด function และเขียนโค้ดให้น้อยลง นี่คือตัวอย่างโค้ดไทม์เมอร์โดยใช้ arrow function: วงเล็บ () คือที่ใส่พารามิเตอร์ (ในกรณีนี้ว่างเปล่า) ตามด้วยลูกศร => และส่วนของฟังก์ชันในเครื่องหมายปีกกา ฟังก์ชันนี้ทำงานเหมือนกับตัวอย่างก่อนหน้าแต่ซินแท็กซ์สั้นกว่า ### เมื่อไหร่ควรใช้แต่ละวิธี ควรใช้วิธีไหน? คำแนะนำง่าย ๆ: ถ้าจะใช้ฟังก์ชันนั้นหลายครั้ง ให้ตั้งชื่อและประกาศแยกต่างหาก ถ้าจะใช้แค่ครั้งเดียว ให้พิจารณาฟังก์ชันไร้ชื่อ สำหรับ arrow functions และฟังก์ชันปกติเป็นทางเลือกที่ถูกต้องทั้งคู่ แม้ arrow functions กำลังเป็นที่นิยมในโค้ด JavaScript สมัยใหม่ ### 🎨 ตรวจสอบความเข้าใจสไตล์ฟังก์ชัน: เลือกซินแท็กซ์ที่เหมาะสม ทดสอบความเข้าใจซินแท็กซ์: - เมื่อไหร่คุณจะชอบใช้ arrow functions มากกว่าฟังก์ชันแบบดั้งเดิม? - ข้อดีหลักของฟังก์ชันไร้ชื่อคืออะไร? - คุณนึกสถานการณ์ที่ควรใช้ฟังก์ชันมีชื่อดีกว่าฟังก์ชันไร้ชื่อได้ไหม? --- ## 🚀 Challenge คุณสามารถอธิบายในประโยคเดียวได้ไหมว่าความแตกต่างระหว่างฟังก์ชันกับเมธอดคืออะไร? ลองดู! ## GitHub Copilot Agent Challenge 🚀 ใช้โหมด Agent เพื่อทำภารกิจต่อไปนี้: คำอธิบาย: สร้างไลบรารียูทิลิตี้ของฟังก์ชันคณิตศาสตร์ที่แสดงแนวคิดฟังก์ชันต่าง ๆ ที่ครอบคลุมในบทเรียนนี้ รวมถึงพารามิเตอร์, ค่าดีฟอลต์, ค่าคืน, และ arrow functions พรอมต์: สร้างไฟล์ JavaScript ชื่อ mathUtils.js ที่มีฟังก์ชันดังนี้: 1. ฟังก์ชัน add ที่รับสองพารามิเตอร์และคืนผลรวมของทั้งสอง 2. ฟังก์ชัน multiply ที่มีค่าพารามิเตอร์ดีฟอลต์ (พารามิเตอร์ที่สองดีฟอลต์เป็น 1) 3. ฟังก์ชันลูกศร square ที่รับเลขและคืนกำลังสองของเลขนั้น 4. ฟังก์ชัน calculate ที่รับฟังก์ชันอีกตัวเป็นพารามิเตอร์ และเลขสองตัว แล้วประยุกต์ใช้ฟังก์ชันกับตัวเลขเหล่านั้น 5. แสดงการเรียกใช้ฟังก์ชันแต่ละตัวด้วยกรณีทดสอบที่เหมาะสม เรียนรู้เพิ่มเติมเกี่ยวกับ agent mode ได้ที่นี่ ## Post-Lecture Quiz แบบทดสอบหลังบรรยาย ## Review & Self Study ควร อ่านเพิ่มเติมเกี่ยวกับ arrow functions เพราะกำลังถูกใช้มากขึ้นในฐานโค้ด ลองฝึกเขียนฟังก์ชันและเขียนใหม่โดยใช้ซินแท็กซ์นี้ดู ## Assignment Fun with Functions --- ## 🧰 สรุปเครื่องมือฟังก์ชัน JavaScript ของคุณ --- ## 🚀 กรอบเวลาการเป็นผู้เชี่ยวชาญฟังก์ชัน JavaScript ของคุณ ### ⚡ สิ่งที่คุณทำได้ใน 5 นาทีข้างหน้า - [ ] เขียนฟังก์ชันง่าย ๆ ที่คืนค่าตัวเลขโปรดของคุณ - [ ] สร้างฟังก์ชันที่รับพารามิเตอร์สองตัวแล้วบวกกัน - [ ] ลองแปลงฟังก์ชันแบบดั้งเดิมเป็นไวยากรณ์ฟังก์ชันลูกศร - [ ] ฝึกทำชาเลนจ์: อธิบายความแตกต่างระหว่างฟังก์ชันและเมธอด ### 🎯 สิ่งที่คุณสามารถทำได้ในชั่วโมงนี้ - [ ] ทำแบบทดสอบหลังบทเรียนให้เสร็จและทบทวนแนวคิดที่สับสน - [ ] สร้างไลบรารีเครื่องมือคณิตศาสตร์จากชาเลนจ์ GitHub Copilot - [ ] สร้างฟังก์ชันที่ใช้ฟังก์ชันอื่นเป็นพารามิเตอร์ - [ ] ฝึกเขียนฟังก์ชันที่มีพารามิเตอร์ค่าปริยาย - [ ] ทดลองใช้ template literals ในค่าที่ฟังก์ชันส่งกลับ ### 📅 การฝึกฝนฟังก์ชันตลอดสัปดาห์ของคุณ - [ ] ทำการบ้าน "สนุกกับฟังก์ชัน" อย่างสร้างสรรค์ - [ ] ปรับปรุงโค้ดที่เขียนซ้ำซากให้เป็นฟังก์ชันที่นำกลับมาใช้ซ้ำได้ - [ ] สร้างเครื่องคิดเลขเล็ก ๆ โดยใช้เฉพาะฟังก์ชัน (ไม่มีตัวแปร global) - [ ] ฝึกใช้ฟังก์ชันลูกศรกับเมธอดอาร์เรย์เช่น map() และ filter() - [ ] สร้างคอลเลกชันฟังก์ชันเครื่องมือสำหรับงานทั่วไป - [ ] ศึกษาฟังก์ชันระดับสูงและแนวคิดการเขียนโปรแกรมเชิงฟังก์ชัน ### 🌟 การเปลี่ยนแปลงของคุณในเดือนนี้ - [ ] ฝึกฝนแนวคิดฟังก์ชันขั้นสูง เช่น closures และ scope - [ ] สร้างโปรเจกต์ที่ใช้ composition ของฟังก์ชันอย่างหนัก - [ ] มีส่วนร่วมในโอเพนซอร์สโดยพัฒนาการจัดทำเอกสารฟังก์ชัน - [ ] สอนผู้อื่นเกี่ยวกับฟังก์ชันและไวยากรณ์ที่แตกต่างกัน - [ ] สำรวจแนวทางการเขียนโปรแกรมเชิงฟังก์ชันใน JavaScript - [ ] สร้างไลบรารีฟังก์ชันส่วนตัวที่นำกลับมาใช้ใหม่ได้สำหรับโปรเจกต์อนาคต ### 🏆 การตรวจสอบแชมป์ฟังก์ชันขั้นสุดท้าย เฉลิมฉลองความชำนาญด้านฟังก์ชันของคุณ: - ฟังก์ชันที่มีประโยชน์ที่สุดที่คุณสร้างจนถึงตอนนี้คืออะไร? - การเรียนรู้เกี่ยวกับฟังก์ชันเปลี่ยนวิธีคิดในการจัดระเบียบโค้ดของคุณอย่างไร? - คุณชอบไวยากรณ์ฟังก์ชันแบบไหนและเพราะอะไร? - ปัญหาในโลกแห่งความจริงใดที่คุณจะแก้ได้ด้วยการเขียนฟังก์ชัน? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ข้อจำกัดความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาด้วย AI Co-op Translator ถึงแม้เราจะพยายามให้มีความถูกต้องสูงสุด กรุณาทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้องได้ เอกสารต้นฉบับในภาษาต้นทางถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลสำคัญ แนะนำให้ใช้บริการแปลโดยมืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดพลาดที่เกิดขึ้นจากการใช้การแปลนี้ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

function

พื้นฐาน JavaScript: การตัดสินใจ

คุณเคยสงสัยไหมว่าแอปพลิเคชันทำไมถึงตัดสินใจได้อย่างชาญฉลาด? เช่น ระบบนำทางเลือกเส้นทางที่เร็วที่สุดอย่างไร หรือเทอร์โมสตัทตัดสินใจเปิดความร้อนไปเมื่อไหร่? นี่คือแนวคิดพื้นฐานของการตัดสินใจในการเขียนโปรแกรม เช่นเดียวกับที่เครื่องมือวิเคราะห์ของ Charles Babbage ถูกออกแบบมาให้ปฏิบัติตามลำดับการทำงานที่แตกต่างกันตามเงื่อนไข โปรแกรม JavaScript สมัยใหม่จำเป็นต้องตัดสินใจตามสถานการณ์ที่แตกต่างกัน ความสามารถนี้ในการแยกสาขาและตัดสินใจคือสิ่งที่เปลี่ยนโค้ดนิ่งให้เป็นแอปพลิเคชันที่ตอบสนองและชาญฉลาด ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีใช้ตรรกะเชิงเงื่อนไขในโปรแกรมของคุณ เราจะสำรวจคำสั่งเงื่อนไข ตัวดำเนินการเปรียบเทียบ และนิพจน์ตรรกะที่ช่วยให้โค้ดของคุณประเมินสถานการณ์และตอบสนองได้อย่างเหมาะสม ## แบบทดสอบก่อนบรรยาย แบบทดสอบก่อนบรรยาย ความสามารถในการตัดสินใจและควบคุมลำดับการทำงานของโปรแกรมเป็นสิ่งสำคัญในการเขียนโปรแกรม ส่วนนี้จะครอบคลุมวิธีควบคุมเส้นทางการทำงานของโปรแกรม JavaScript โดยใช้ค่าบูลีนและตรรกะเชิงเงื่อนไข [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## ทบทวนย่อ ๆ เกี่ยวกับบูลีน ก่อนที่จะสำรวจการตัดสินใจ มาทบทวนค่าบูลีนที่เรียนมาก่อนหน้านี้ ชื่อค่าบูลีนตั้งตามนักคณิตศาสตร์ George Boole ค่าบูลีนแทนสถานะไบนารี – คือ true หรือ false ไม่มีความกำกวม ไม่มีค่าเต็มกลาง ค่าบูลีนนี้สร้างฐานตรรกะคอมพิวเตอร์ทั้งหมด การตัดสินใจทุกอย่างที่โปรแกรมทำในที่สุดแล้วสรุปเป็นการประเมินบูลีน การสร้างตัวแปรบูลีนทำได้ง่าย: นี่สร้างตัวแปรสองตัวโดยกำหนดค่าเป็นบูลีนอย่างชัดเจน ✅ บูลีนตั้งตามนักคณิตศาสตร์ นักปรัชญา และนักตรรกะชาวอังกฤษ George Boole (1815–1864) ## ตัวดำเนินการเปรียบเทียบและบูลีน ในทางปฏิบัติ คุณจะตั้งค่าบูลีนด้วยตนเองน้อยมาก แทนที่จะสร้างโดยประเมินเงื่อนไข เช่น "ตัวเลขนี้มากกว่าตัวนั้นไหม?" หรือ "ค่าพวกนี้เท่ากันไหม?" ตัวดำเนินการเปรียบเทียบช่วยให้การประเมินเหล่านี้ ตัวดำเนินการเหล่านี้เปรียบเทียบค่าและส่งคืนผลลัพธ์บูลีนตามความสัมพันธ์ระหว่างตัวแปรสองฝั่ง ✅ ตรวจสอบความเข้าใจโดยการเขียนการเปรียบเทียบบางอย่างในคอนโซลของเบราว์เซอร์ คุณพบค่าที่แปลกใจไหม? ### 🧠 ทดสอบความชำนาญการเปรียบเทียบ: เข้าใจตรรกะบูลีน ทดสอบความเข้าใจของคุณเกี่ยวกับการเปรียบเทียบ: - ทำไมถึงนิยมใช้ === (เท่ากันอย่างเคร่งครัด) มากกว่า == (เท่ากันแบบหย่อนยาน)? - คุณคาดเดาได้ไหมว่า 5 === '5' จะให้ค่าอะไร? แล้ว 5 == '5' ล่ะ? - ความแตกต่างระหว่าง !== กับ != คืออะไร? ## คำสั่ง If คำสั่ง if เปรียบเสมือนการถามคำถามในโค้ดของคุณ "ถ้าเงื่อนไขนี้เป็นจริง ให้ทำสิ่งนี้" เป็นเครื่องมือที่สำคัญที่สุดที่คุณจะใช้ในการตัดสินใจใน JavaScript วิธีการทำงานคือ: เงื่อนไขจะอยู่ในวงเล็บ และถ้าเป็น true JavaScript จะรันโค้ดในวงเล็บปีกกานั้น ถ้าเป็น false JavaScript จะข้ามบล็อกนั้นไปเลย คุณจะใช้ตัวดำเนินการเปรียบเทียบเพื่อสร้างเงื่อนไขเหล่านี้ ดูตัวอย่างใช้งานจริงด้านล่าง: เนื่องจาก 1000 >= 800 ประเมินเป็น true โค้ดในบล็อกจะรันแสดงผล "Getting a new laptop!" ในคอนโซล ## คำสั่ง If..Else แต่ถ้าคุณอยากให้โปรแกรมทำอย่างอื่นเมื่อเงื่อนไขเป็นเท็จล่ะ? นี่คือที่มาของ else – เหมือนมีแผนสำรอง คำสั่ง else ให้คุณบอกว่า "ถ้าเงื่อนไขนี้ไม่เป็นจริง ให้ทำอย่างอื่นแทน" ตอนนี้ เนื่องจาก 500 >= 800 เป็น false JavaScript จะข้ามบล็อกแรกแล้วรันบล็อก else แทน คุณจะเห็นข้อความ "Can't afford a new laptop, yet!" ในคอนโซล ✅ ทดสอบความเข้าใจโค้ดนี้และโค้ดถัดไปด้วยการรันในคอนโซลเบราว์เซอร์ เปลี่ยนค่าตัวแปร currentMoney และ laptopPrice เพื่อดูผลลัพธ์ใน console.log() ### 🎯 ตรวจสอบตรรกะ If-Else: เส้นทางแยก ประเมินความเข้าใจตรรกะเชิงเงื่อนไขของคุณ: - จะเกิดอะไรขึ้นถ้า currentMoney เท่ากับ laptopPrice พอดี? - คุณคิดสถานการณ์จริงที่ตรรกะ if-else จะมีประโยชน์ไหม? - คุณจะขยายตรรกะนี้อย่างไรเพื่อจัดการช่วงราคาหลายระดับ? ## คำสั่ง Switch บางครั้งคุณอาจต้องเปรียบเทียบค่าหนึ่งกับตัวเลือกหลายค่า แม้ว่าจะใช้ if..else หลาย ๆ บรรทัดได้ แต่วิธีนั้นจะยุ่งยาก คำสั่ง switch จึงเป็นโครงสร้างที่สะอาดกว่าในการจัดการค่าหลายค่าแยกกัน แนวคิดคล้ายกับระบบสวิตช์เชิงกลที่ใช้ในสถานีโทรศัพท์สมัยก่อน – ค่าอินพุตตัวเดียวกำหนดเส้นทางที่การทำงานจะไป นี่คือโครงสร้าง: - JavaScript ประเมินนิพจน์ครั้งเดียว - ตรวจสอบแต่ละกรณี case เพื่อหาตรงกัน - เมื่อเจอตรงกัน จะรันโค้ดในบล็อกนั้น - break บอกให้ JavaScript หยุดและออกจาก switch - หากไม่มีกรณีใดตรงกัน จะรันบล็อก default (ถ้ามี) ในตัวอย่างนี้ JavaScript เห็นว่า dayNumber คือ 2 เจอกรณีที่ตรงกับ case 2 กำหนดค่า dayName เป็น "Tuesday" แล้วหยุดออกจาก switch ผลลัพธ์คือ "Today is Tuesday" แสดงในคอนโซล ✅ ทดสอบความเข้าใจโค้ดนี้และถัดไปด้วยการรันในคอนโซลเบราว์เซอร์ เปลี่ยนค่าตัวแปร a เพื่อดูผลลัพธ์ใน console.log() ### 🔄 ทดสอบความชำนาญคำสั่ง Switch: ตัวเลือกหลายทาง ลองทดสอบความเข้าใจ switch: - จะเกิดอะไรขึ้นถ้าคุณลืมใส่คำสั่ง break? - คุณจะเลือกใช้ switch แทน if-else หลาย ๆ ครั้งเมื่อไหร่? - ทำไมถึงต้องมีกรณี default ถึงแม้ว่าคุณคิดว่าครอบคลุมทุกกรณีแล้ว? ## ตัวดำเนินการตรรกะและบูลีน การตัดสินใจที่ซับซ้อนมักต้องประเมินหลายเงื่อนไขพร้อมกัน เช่นเดียวกับพีชคณิตบูลีนที่ให้นักคณิตศาสตร์รวมเชิงตรรกะต่าง ๆ การเขียนโปรแกรมมีตัวดำเนินการตรรกะที่เชื่อมเงื่อนไขบูลีนหลาย ๆ เงื่อนไขเข้าด้วยกัน ตัวดำเนินการเหล่านี้ช่วยให้ตรรกะเชิงเงื่อนไขซับซ้อนโดยรวมการประเมิน true/false อย่างง่ายได้ ตัวดำเนินการเหล่านี้ช่วยให้คุณรวมเงื่อนไขในแบบมีประโยชน์: - AND (&&) หมายความว่าเงื่อนไขทั้งสองต้องเป็นจริง - OR (||) หมายความว่ามีเงื่อนไขหนึ่งอย่างน้อยต้องเป็นจริง - NOT (!) เปลี่ยนค่า true เป็น false (และในทางกลับกัน) ## เงื่อนไขและการตัดสินใจกับตัวดำเนินการตรรกะ มาดูตัวดำเนินการตรรกะนี้ในตัวอย่างที่สมจริงมากขึ้น: ในตัวอย่างนี้: เราคำนวณราคาลด 20% (640) แล้วประเมินว่ากองทุนของเราครอบคลุมราคาทั้งหมด OR ราคาลดหรือไม่ เนื่องจาก 600 ไม่ถึงเกณฑ์ราคาลด 640 เงื่อนไขประเมินเป็น false ### 🧮 ตรวจสอบตัวดำเนินการตรรกะ: การรวมเงื่อนไข ทดสอบความเข้าใจตัวดำเนินการตรรกะ: - ในนิพจน์ A && B เกิดอะไรขึ้นถ้า A เป็นเท็จ? B จะถูกประเมินไหม? - คุณนึกสถานการณ์ที่ต้องใช้ตัวดำเนินการทั้งสาม (&&, ||, !) พร้อมกันได้ไหม? - ความแตกต่างระหว่าง !user.isActive กับ user.isActive !== true คืออะไร? ### ตัวดำเนินการปฏิเสธ (Negation) บางครั้งง่ายกว่าที่จะคิดว่าเมื่อไรบางอย่างไม่ใช่ความจริง เช่นแทนที่จะถามว่า "ผู้ใช้เข้าสู่ระบบหรือไม่?" คุณอาจจะถามว่า "ผู้ใช้ยังไม่ได้เข้าสู่ระบบหรือเปล่า?" เครื่องหมายตกใจ (!) จะเปลี่ยนตรรกะให้คุณ ตัวดำเนินการ ! เปรียบเสมือนพูดว่า "ตรงข้ามกับ..." – ถ้าบางอย่างเป็น true ตัว ! จะทำให้เป็น false และในทางกลับกัน ### นิพจน์เทอร์นารี (Ternary Expressions) สำหรับการกำหนดเงื่อนไขอย่างง่าย JavaScript มี ตัวดำเนินการเทอร์นารี ไวยากรณ์นี้กระทัดรัดช่วยให้เขียนนิพจน์เงื่อนไขในบรรทัดเดียว เหมาะสำหรับการกำหนดค่าหนึ่งในสองค่าโดยขึ้นกับเงื่อนไข อ่านเหมือนคำถามว่า: "เงื่อนไขนี้เป็นจริงไหม? ถ้าใช่ ใช้ค่านี้ ถ้าไม่ ใช้อีกค่านึง" ด้านล่างเป็นตัวอย่างที่เข้าใจง่ายขึ้น: ✅ ใช้เวลาสักครู่อ่านข้อความโค้ดนี้หลาย ๆ รอบ คุณเข้าใจการทำงานของตัวดำเนินการเหล่านี้ไหม? บรรทัดนี้หมายความว่า: "ค่า firstNumber มากกว่า secondNumber หรือไม่? ถ้าใช่ ให้ใส่ firstNumber ใน biggestNumber ถ้าไม่ ให้ใส่ secondNumber ใน biggestNumber" ตัวดำเนินการเทอร์นารีเป็นวิธีสั้น ๆ ในการเขียนคำสั่ง if..else แบบดั้งเดิมนี้: ทั้งสองวิธีให้ผลลัพธ์เหมือนกัน ตัวดำเนินการเทอร์นารีกระชับกว่า ในขณะที่โครงสร้าง if-else แบบดั้งเดิมอ่านง่ายกว่าในกรณีเงื่อนไขซับซ้อน --- ## 🚀 ความท้าทาย สร้างโปรแกรมที่เขียนด้วยตัวดำเนินการตรรกะก่อน แล้วเขียนใหม่โดยใช้นิพจน์เทอร์นารี คุณชอบไวยากรณ์แบบไหนมากกว่ากัน? --- ## ความท้าทาย GitHub Copilot Agent 🚀 ใช้โหมด Agent เพื่อทำความท้าทายต่อไปนี้: คำอธิบาย: สร้างเครื่องคำนวณเกรดอย่างครบถ้วนที่แสดงให้เห็นแนวคิดหลายอย่างของการตัดสินใจในบทเรียนนี้ รวมถึงคำสั่ง if-else, switch, ตัวดำเนินการตรรกะ และนิพจน์เทอร์นารี คำสั่ง: เขียนโปรแกรม JavaScript ที่รับคะแนนตัวเลขของนักเรียน (0-100) แล้วกำหนดเกรดตัวอักษรตามเกณฑ์เหล่านี้: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: ต่ำกว่า 60 ข้อกำหนด: 1. ใช้คำสั่ง if-else เพื่อกำหนดเกรดตัวอักษร 2. ใช้ตัวดำเนินการเชิงตรรกะเพื่อตรวจสอบว่านักเรียนผ่าน (grade >= 60) และได้รับเกียรตินิยม (grade >= 90) 3. ใช้คำสั่ง switch เพื่อนำเสนอความคิดเห็นเฉพาะสำหรับแต่ละเกรดตัวอักษร 4. ใช้ตัวดำเนินการ ternary เพื่อกำหนดว่านักเรียนมีสิทธิ์เข้าเรียนหลักสูตรถัดไปหรือไม่ (grade >= 70) 5. รวมการตรวจสอบอินพุตเพื่อให้แน่ใจว่าคะแนนอยู่ระหว่าง 0 ถึง 100 ทดสอบโปรแกรมของคุณด้วยคะแนนต่างๆ รวมถึงกรณีขอบเช่น 59, 60, 89, 90, และอินพุตที่ไม่ถูกต้อง เรียนรู้เพิ่มเติมเกี่ยวกับ agent mode ได้ที่นี่ ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study อ่านเพิ่มเติมเกี่ยวกับตัวดำเนินการมากมายที่มีให้ผู้ใช้ บน MDN ลองดู operator lookup อันยอดเยี่ยมของ Josh Comeau! ## Assignment Operators --- ## 🧠 สรุปชุดเครื่องมือการตัดสินใจของคุณ --- ## 🚀 เส้นเวลาการฝึกความชำนาญในการตัดสินใจของ JavaScript ของคุณ ### ⚡ สิ่งที่คุณทำได้ใน 5 นาทีถัดไป - [ ] ฝึกใช้ตัวดำเนินการเปรียบเทียบในคอนโซลเบราว์เซอร์ของคุณ - [ ] เขียน if-else ง่ายๆ เพื่อตรวจสอบอายุของคุณ - [ ] ลองทำโจทย์: เขียน if-else ใหม่โดยใช้ตัวดำเนินการ ternary - [ ] ทดสอบสิ่งที่จะเกิดขึ้นกับค่าที่เป็น "truthy" และ "falsy" ต่างๆ ### 🎯 สิ่งที่คุณทำสำเร็จได้ในหนึ่งชั่วโมงนี้ - [ ] ทำแบบทดสอบหลังบทเรียนและทบทวนแนวคิดที่สับสน - [ ] สร้างเครื่องคิดเลขเกรดแบบครบวงจรจากความท้าทาย GitHub Copilot - [ ] สร้างต้นไม้การตัดสินใจง่ายๆ สำหรับสถานการณ์จริง (เช่น เลือกเสื้อผ้าที่จะใส่) - [ ] ฝึกการรวมเงื่อนไขหลายๆ อย่างด้วยตัวดำเนินการเชิงตรรกะ - [ ] ทดลองใช้คำสั่ง switch สำหรับกรณีการใช้งานต่างๆ ### 📅 ความชำนาญตรรกะตลอดสัปดาห์ของคุณ - [ ] ทำงานมอบหมายเกี่ยวกับตัวดำเนินการพร้อมตัวอย่างสร้างสรรค์ - [ ] สร้างแอปทดสอบขนาดเล็กโดยใช้โครงสร้างเงื่อนไขหลากหลาย - [ ] สร้างตัวตรวจสอบฟอร์มที่เช็คหลายเงื่อนไขของอินพุต - [ ] ฝึกทำแบบฝึกหัด operator lookup ของ Josh Comeau - [ ] ปรับปรุงโค้ดที่มีอยู่ให้ใช้โครงสร้างเงื่อนไขที่เหมาะสมขึ้น - [ ] ศึกษาการประเมินสั้นวงจรและผลกระทบต่อประสิทธิภาพ ### 🌟 การเปลี่ยนแปลงตลอดเดือนของคุณ - [ ] เชี่ยวชาญเงื่อนไขซ้อนซับซ้อนและรักษาความอ่านง่ายของโค้ด - [ ] สร้างแอปที่มีตรรกะการตัดสินใจซับซ้อน - [ ] มีส่วนร่วมกับโครงการโอเพ่นซอร์สโดยปรับปรุงตรรกะเงื่อนไขในโปรเจกต์ที่มีอยู่ - [ ] สอนคนอื่นเกี่ยวกับโครงสร้างเงื่อนไขต่างๆ และเมื่อไหร่ควรใช้แต่ละแบบ - [ ] สำรวจแนวทางการเขียนโปรแกรมเชิงฟังก์ชันกับตรรกะเงื่อนไข - [ ] สร้างคู่มืออ้างอิงส่วนตัวเกี่ยวกับแนวปฏิบัติที่ดีที่สุดของเงื่อนไข ### 🏆 เช็คอินแชมป์การตัดสินใจขั้นสุดท้าย ฉลองความชำนาญการคิดเชิงตรรกะของคุณ: - ตรรกะการตัดสินใจที่ซับซ้อนที่สุดที่คุณเคยนำไปใช้ได้สำเร็จคืออะไร? - โครงสร้างเงื่อนไขไหนที่คุณรู้สึกว่าเป็นธรรมชาติมากที่สุดและเพราะเหตุใด? - การเรียนรู้เกี่ยวกับตัวดำเนินการเชิงตรรกะเปลี่ยนวิธีแก้ปัญหาของคุณอย่างไร? - แอปพลิเคชันในโลกจริงใดที่จะได้รับประโยชน์จากตรรกะการตัดสินใจที่ซับซ้อนได้บ้าง? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> คำปฏิเสธความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามให้มีความถูกต้อง โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความคลาดเคลื่อน เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่น่าเชื่อถือ สำหรับข้อมูลสำคัญ ขอแนะนำให้ใช้บริการแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่อาจเกิดขึ้นจากการใช้การแปลนี้ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

Arrays and Loops

## การทดสอบก่อนเรียน แบบทดสอบก่อนเรียน เคยสงสัยไหมว่าเว็บไซต์เก็บข้อมูลของสินค้าที่อยู่ในตะกร้าช็อปปิ้งหรือแสดงรายการเพื่อนของคุณได้อย่างไร? นั่นคือที่มาของอาร์เรย์และลูป อาร์เรย์เหมือนภาชนะดิจิทัลที่เก็บข้อมูลหลายชิ้นไว้ด้วยกัน ในขณะที่ลูปช่วยให้คุณทำงานกับข้อมูลทั้งหมดอย่างมีประสิทธิภาพโดยไม่ต้องเขียนโค้ดซ้ำๆ สองแนวคิดนี้รวมกันเป็นรากฐานสำหรับจัดการข้อมูลในโปรแกรมของคุณ คุณจะเรียนรู้การเปลี่ยนจากเขียนทีละขั้นตอนด้วยมือมาเป็นการสร้างโค้ดอัจฉริยะและมีประสิทธิภาพที่สามารถประมวลผลรายการหลายร้อยหรือหลายพันรายการได้อย่างรวดเร็ว เมื่อจบบทเรียนนี้ คุณจะเข้าใจวิธีทำงานกับข้อมูลที่ซับซ้อนโดยใช้โค้ดเพียงไม่กี่บรรทัด มาเรียนรู้แนวคิดสำคัญของการเขียนโปรแกรมนี้ไปด้วยกัน [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## อาร์เรย์ คิดว่าอาร์เรย์เหมือนกับตู้เก็บเอกสารดิจิทัล — แทนที่จะเก็บเอกสารเพียงชิ้นเดียวในลิ้นชักแต่ละลิ้นชัก คุณสามารถจัดหมวดหมู่รายการที่เกี่ยวข้องกันหลายรายการในภาชนะที่มีโครงสร้างเดียว ในทางโปรแกรมมิ่ง อาร์เรย์ช่วยให้คุณเก็บข้อมูลหลายชิ้นในแพ็กเกจเดียวที่จัดระเบียบไว้แล้ว ไม่ว่าจะเป็นการสร้างแกลเลอรี่ภาพ จัดการกับรายการสิ่งที่ต้องทำ หรือเก็บคะแนนสูงสุดในเกม อาร์เรย์เป็นพื้นฐานสำหรับการจัดระเบียบข้อมูล มาดูกันว่ามันทำงานอย่างไร ✅ อาร์เรย์อยู่รอบตัวเรา! คุณนึกตัวอย่างในชีวิตจริงของอาร์เรย์ได้ไหม เช่น แผงโซลาร์เซลล์? ### การสร้างอาร์เรย์ การสร้างอาร์เรย์ง่ายมาก — ใช้วงเล็บเหลี่ยม! เกิดอะไรขึ้นที่นี่? คุณเพิ่งสร้างภาชนะว่างเปล่าด้วยวงเล็บเหลี่ยม [] คิดว่ามันเหมือนชั้นหนังสือเปล่าที่พร้อมจะเก็บหนังสือในแบบที่คุณต้องการจัดระเบียบไว้ที่นั่น คุณยังสามารถเติมค่าเริ่มต้นในอาร์เรย์ของคุณตั้งแต่ต้นได้ด้วย: สิ่งเจ๋งที่ควรสังเกต: - คุณสามารถเก็บข้อความ ตัวเลข หรือค่าจริง/เท็จในอาร์เรย์เดียวกัน - เพียงแค่คั่นแต่ละรายการด้วยเครื่องหมายจุลภาค - ง่ายมาก! - อาร์เรย์เหมาะสำหรับเก็บข้อมูลที่เกี่ยวข้องกันไว้ด้วยกัน ### ดัชนีของอาร์เรย์ สิ่งหนึ่งที่อาจดูแปลกในตอนแรก: อาร์เรย์จะเริ่มนับรายการจาก 0 ไม่ใช่ 1 การเข้ารหัสแบบมีดัชนีเริ่มต้นที่ศูนย์นี้มีรากฐานมาจากวิธีทำงานของหน่วยความจำคอมพิวเตอร์ — เป็นข้อปฏิบัติในโปรแกรมมิ่งตั้งแต่ช่วงแรกของภาษาคอมพิวเตอร์อย่าง C แต่ละตำแหน่งในอาร์เรย์จะมีหมายเลขที่เรียกว่า ดัชนี ✅ คุณรู้สึกประหลาดใจไหมที่อาร์เรย์เริ่มนับจากดัชนีศูนย์? ในบางภาษาการเขียนโปรแกรม ดัชนีเริ่มต้นที่ 1 มีประวัติที่น่าสนใจเกี่ยวกับเรื่องนี้ คุณสามารถ อ่านเพิ่มเติมได้ที่ Wikipedia การเข้าถึงองค์ประกอบในอาร์เรย์: แตกย่อยสิ่งที่เกิดขึ้นที่นี่: - ใช้ การเข้าถึงด้วยวงเล็บเหลี่ยมพร้อมหมายเลขดัชนี - ส่งคืน ค่าที่จัดเก็บในตำแหน่งนั้นในอาร์เรย์ - เริ่มนับ จาก 0 โดยองค์ประกอบตัวแรกมีดัชนีเป็น 0 การแก้ไของค์ประกอบในอาร์เรย์: ในตัวอย่างข้างต้นเราได้: - แก้ไข องค์ประกอบที่ดัชนี 4 จาก "ร็อกกี้โร้ด" เป็น "บัตเตอร์พีแคน" - เพิ่ม องค์ประกอบใหม่ "คุกกี้โดว์" ที่ดัชนีที่ 5 - ขยาย ความยาวอาร์เรย์โดยอัตโนมัติเมื่อต้องเพิ่มเกินขอบเขตปัจจุบัน ### ความยาวอาร์เรย์และเมธอดทั่วไป อาร์เรย์มาพร้อมกับคุณสมบัติและเมธอดในตัวที่ช่วยให้การทำงานกับข้อมูลง่ายขึ้นมาก การหาความยาวของอาร์เรย์: จุดสำคัญที่จดจำได้: - ส่งคืน จำนวนองค์ประกอบทั้งหมดในอาร์เรย์ - อัปเดต อัตโนมัติเมื่อต้องเพิ่มหรือลบองค์ประกอบ - ให้ ตัวนับแบบไดนามิกที่มีประโยชน์สำหรับลูปและการตรวจสอบ เมธอดพื้นฐานของอาร์เรย์: เข้าใจเมธอดเหล่านี้: - เพิ่ม องค์ประกอบด้วย push() (ท้าย) และ unshift() (ต้น) - ลบ องค์ประกอบด้วย pop() (ท้าย) และ shift() (ต้น) - ค้นหา องค์ประกอบด้วย indexOf() และตรวจสอบการมีอยู่ด้วย includes() - ส่งคืน ค่าที่มีประโยชน์ เช่น องค์ประกอบที่ถูกลบหรือดัชนีตำแหน่ง ✅ ลองทำดูเอง! ใช้คอนโซลของเบราว์เซอร์สร้างและจัดการอาร์เรย์ที่คุณสร้างขึ้นเอง ### 🧠 ตรวจสอบพื้นฐานอาร์เรย์: การจัดระเบียบข้อมูลของคุณ ทดสอบความเข้าใจอาร์เรย์: - ทำไมคุณคิดว่าอาร์เรย์เริ่มนับที่ 0 แทนที่จะเป็น 1? - จะเกิดอะไรขึ้นถ้าคุณพยายามเข้าถึงดัชนีที่ไม่มี (เช่น arr[100] ในอาร์เรย์ 5 องค์ประกอบ)? - คุณนึกสถานการณ์จริงที่เหมาะกับการใช้ อาร์เรย์ ได้สามสถานการณ์ไหม? ## ลูป คิดถึงบทลงโทษในนิยายของชาลส์ ดิคเก้นส์ ที่นักเรียนต้องเขียนประโยคซ้ำๆ บนกระดานดำ ลองจินตนาการว่าคุณสามารถสั่งใครสักคนว่า "เขียนประโยคนี้ 100 ครั้ง" แล้วมันก็ทำได้โดยอัตโนมัติ นั่นคือสิ่งที่ลูปทำกับโค้ดของคุณ ลูปเหมือนผู้ช่วยที่ไม่เหน็ดเหนื่อย สามารถทำงานซ้ำๆ ได้โดยไม่ผิดพลาด ไม่ว่าคุณจะต้องตรวจสอบสินค้าทุกชิ้นในตะกร้าหรือแสดงภาพทั้งหมดในอัลบั้ม ลูปจัดการงานซ้ำๆ เหล่านี้ได้อย่างมีประสิทธิภาพ JavaScript มีลูปหลายประเภทให้เลือก เรามาดูแต่ละแบบและเข้าใจว่าจะใช้เมื่อไร ### ลูป for ลูป for เหมือนตั้งเวลานับถอยหลัง — คุณรู้ว่าต้องการให้เกิดขึ้นกี่ครั้ง จึงมีความเป็นระเบียบและคาดการณ์ได้ดี เหมาะมากเมื่อคุณทำงานกับอาร์เรย์หรือต้องนับจำนวน โครงสร้างลูป for: ทีละขั้นตอน สิ่งที่เกิดขึ้นคือ: - กำหนดค่าเริ่มต้น ตัวแปรนับ i เท่ากับ 0 ตอนเริ่มต้น - ตรวจสอบ เงื่อนไข i < 10 ก่อนแต่ละรอบลูป - เรียกใช้ บล็อกโค้ดเมื่อเงื่อนไขเป็นจริง - เพิ่มค่า i ทีละ 1 หลังจากแต่ละรอบด้วย i++ - หยุด เมื่อเงื่อนไขเป็นเท็จ (เมื่อ i ถึง 10) ✅ รันโค้ดนี้ในคอนโซลเบราว์เซอร์ดูสิ จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนค่าตัวนับ เงื่อนไข หรือการเพิ่มค่าเล็กน้อย? คุณทำให้มันนับถอยหลังได้ไหม? ### 🗓️ ตรวจสอบความชำนาญลูป for: การทำซ้ำที่ควบคุมได้ ประเมินความเข้าใจลูป for: - ลูป for มีสามส่วน คืออะไร และแต่ละส่วนทำหน้าที่อะไร? - คุณจะเขียนลูปสำหรับผ่านอาร์เรย์ย้อนหลังอย่างไร? - จะเกิดอะไรขึ้นถ้าคุณลืมเขียนส่วนเพิ่มค่า (i++)? ### ลูป while ลูป while เหมือนการบอกว่า "ทำสิ่งนี้ต่อไปจนกว่า…" — คุณอาจไม่รู้จำนวนครั้งที่แน่นอน แต่มักรู้ว่าเมื่อใดควรหยุด เหมาะสำหรับการขอรับข้อมูลจากผู้ใช้จนกว่าจะได้รับข้อมูลครบถ้วน หรือค้นหาข้อมูลจนกว่าจะเจอเป้าหมาย ลักษณะลูป while: - ดำเนินการ ต่อเนื่องตราบใดที่เงื่อนไขเป็นจริง - ต้อง จัดการตัวแปรนับด้วยตนเอง - ตรวจสอบ เงื่อนไขก่อนทำทุกครั้ง - เสี่ยง ที่จะเกิดลูปไม่รู้จบถ้าเงื่อนไขไม่เคยเป็นเท็จ ทำความเข้าใจกับตัวอย่าง: - จัดการ ตัวแปรนับ i ด้วยตนเองภายในบอดี้ลูป - เพิ่มค่า ตัวนับเพื่อป้องกันลูปไม่รู้จบ - แสดง กรณีใช้งานจริงกับการรับข้อมูลจากผู้ใช้และจำกัดจำนวนครั้ง - มี กลไกความปลอดภัยป้องกันการทำงานไม่จบสิ้น ### ♾️ ทดสอบความรู้ลูป while: การทำซ้ำตามเงื่อนไข ทดสอบความเข้าใจลูป while: - อันตรายหลักของการใช้ลูป while คืออะไร? - เมื่อไหร่คุณจะเลือกใช้ลูป while แทนลูป for? - คุณป้องกันการเกิดลูปไม่รู้จบอย่างไร? ### ทางเลือกลูปสมัยใหม่ JavaScript มีไวยากรณ์ลูปสมัยใหม่ที่ทำให้โค้ดของคุณอ่านง่ายขึ้นและลดความผิดพลาด for...of Loop (ES6+): ข้อดีหลักของ for...of: - ขจัด การจัดการดัชนีและข้อผิดพลาดดัชนีเกิน/ต่ำ - ให้ การเข้าถึงองค์ประกอบในอาร์เรย์ตรง ๆ - ปรับปรุง ความอ่านง่ายและลดความซับซ้อนของไวยากรณ์ เมธอด forEach: สิ่งที่ควรรู้เกี่ยวกับ forEach: - รัน ฟังก์ชันสำหรับองค์ประกอบแต่ละตัวในอาร์เรย์ - ให้ ทั้งค่าองค์ประกอบและดัชนีเป็นพารามิเตอร์ - ไม่สามารถ หยุดกลางคัน (ต่างจากลูปแบบดั้งเดิม) - คืนค่า undefined (ไม่สร้างอาร์เรย์ใหม่) ✅ ทำไมคุณถึงเลือกใช้ลูป for แทนลูป while? มีผู้ชม 17,000 คนตั้งคำถามนี้บน StackOverflow และบางความคิดเห็น อาจน่าสนใจสำหรับคุณ ### 🎨 ตรวจสอบไวยากรณ์ลูปสมัยใหม่: ยอมรับ ES6+ ประเมินความเข้าใจ JavaScript สมัยใหม่ของคุณ: - ข้อดีของ for...of เมื่อเทียบกับลูป for แบบดั้งเดิมคืออะไร? - เมื่อใดที่คุณยังเลือกใช้ลูป for แบบดั้งเดิม? - ความแตกต่างระหว่าง forEach กับ map คืออะไร? ## ลูปและอาร์เรย์ การรวมกันของอาร์เรย์และลูปสร้างความสามารถในการประมวลผลข้อมูลที่ทรงพลัง คู่ผสมนี้เป็นพื้นฐานสำหรับงานหลักหลายประเภทในโปรแกรม เช่น การแสดงรายการหรือการคำนวณสถิติ การประมวลผลอาร์เรย์แบบดั้งเดิม: เข้าใจวิธีนี้: - ใช้ คุณสมบัติความยาวของอาร์เรย์เพื่อกำหนดขอบเขตลูป - เข้าถึง องค์ประกอบด้วยดัชนีในลูป for แบบดั้งเดิม - ให้ การเข้าถึงองค์ประกอบโดยตรงในลูป for...of - ประมวลผล ทุกองค์ประกอบในอาร์เรย์ทีละตัว ตัวอย่างการประมวลผลข้อมูลจริง: โค้ดนี้ทำงานอย่างไร: - กำหนด ตัวแปรติดตามผลรวมและค่าสูงสุดต่ำสุด - ประมวลผล คะแนนแต่ละตัวด้วยลูปลูปเดียวที่มีประสิทธิภาพ - สะสม ผลรวมเพื่อคำนวณค่าเฉลี่ย - ติดตาม ค่าสูงสุดและต่ำสุดในระหว่างการวนซ้ำ - คำนวณ สถิติสุดท้ายหลังจากจบลูป ✅ ทดลองใช้ลูปกับอาร์เรย์ที่คุณสร้างเองในคอนโซลบราวเซอร์ของคุณ --- ## ความท้าทาย GitHub Copilot Agent 🚀 ใช้โหมด Agent เพื่อทำความท้าทายดังนี้: คำอธิบาย: สร้างฟังก์ชันประมวลผลข้อมูลครบถ้วนที่รวมอาร์เรย์และลูป เพื่อวิเคราะห์ชุดข้อมูลและสร้างข้อมูลเชิงลึกที่มีความหมาย คำสั่ง: สร้างฟังก์ชันชื่อ analyzeGrades ที่รับอาร์เรย์ของอ็อบเจกต์เกรดนักเรียน (ซึ่งแต่ละอ็อบเจกต์ประกอบด้วยชื่อและคะแนน) และส่งคืนอ็อบเจกต์ที่มีสถิติรวมถึงคะแนนสูงสุด คะแนนต่ำสุด ค่าเฉลี่ย จำนวนผู้ผ่าน (คะแนน >= 70) และอาร์เรย์ของชื่อนักเรียนที่ได้คะแนนสูงกว่าค่าเฉลี่ย ใช้ลูปอย่างน้อยสองชนิดในโค้ดของคุณ เรียนรู้เพิ่มเติมเกี่ยวกับ โหมด agent ที่นี่ ## 🚀 ความท้าทาย JavaScript มีเมธอดอาร์เรย์สมัยใหม่หลายอย่างที่สามารถแทนที่ลูปแบบดั้งเดิมในงานเฉพาะได้ สำรวจ forEach, for-of, map, filter, และ reduce ความท้าทายของคุณ: ปรับปรุงตัวอย่างเกรดของนักเรียนโดยใช้เมธอดอาร์เรย์ที่แตกต่างกันอย่างน้อยสามตัว สังเกตว่ารหัสสะอาดและอ่านง่ายขึ้นมากด้วยไวยากรณ์ JavaScript สมัยใหม่ ## แบบทดสอบหลังบรรยาย แบบทดสอบหลังบรรยาย ## ทบทวน & การเรียนรู้ด้วยตนเอง อาร์เรย์ใน JavaScript มีเมธอดมากมายที่แนบมาด้วย ซึ่งมีประโยชน์มากสำหรับการจัดการข้อมูล อ่านเกี่ยวกับเมธอดเหล่านี้ และลองใช้บางส่วน (เช่น push, pop, slice และ splice) กับอาร์เรย์ที่คุณสร้างขึ้น ## การบ้าน การวนลูปอาร์เรย์ --- ## 📊 สรุปเครื่องมืออาร์เรย์ & ลูป ของคุณ --- ## 🚀 เส้นเวลาความชำนาญในอาร์เรย์ & ลูป ของคุณ ### ⚡ สิ่งที่คุณทำได้ใน 5 นาทีถัดไป - [ ] สร้างอาร์เรย์ของภาพยนตร์ที่คุณชื่นชอบและเข้าถึงองค์ประกอบเฉพาะ - [ ] เขียนลูป for ที่นับจาก 1 ถึง 10 - [ ] ลองความท้าทายเมธอดอาร์เรย์สมัยใหม่จากบทเรียนนี้ - [ ] ฝึกดัชนีอาร์เรย์ในคอนโซลเบราว์เซอร์ของคุณ ### 🎯 สิ่งที่คุณทำสำเร็จในชั่วโมงนี้ - [ ] ทำแบบทดสอบหลังบทเรียนให้เสร็จและทบทวนแนวคิดที่ยาก - [ ] สร้างโปรแกรมวิเคราะห์เกรดอย่างครบถ้วนจากความท้าทาย GitHub Copilot - [ ] สร้างตะกร้าสินค้าแบบง่ายที่สามารถเพิ่มและลบรายการ - [ ] ฝึกแปลงระหว่างประเภทลูปต่าง ๆ - [ ] ทดลองใช้เมธอดอาร์เรย์เช่น push, pop, slice และ splice ### 📅 เส้นทางการประมวลผลข้อมูลระยะเวลา 1 สัปดาห์ของคุณ - [ ] ทำการบ้าน "วนลูปอาร์เรย์" ให้เสร็จพร้อมเติมเต็มความคิดสร้างสรรค์ - [ ] สร้างแอปพลิเคชันรายการสิ่งที่ต้องทำโดยใช้ อาร์เรย์และลูป - [ ] สร้างเครื่องคิดเลขสถิติพื้นฐานสำหรับข้อมูลตัวเลข - [ ] ฝึกใช้ เมธอดอาร์เรย์ MDN - [ ] สร้างแกลเลอรีรูปภาพหรืออินเทอร์เฟซเพลย์ลิสต์เพลง - [ ] สำรวจการเขียนโปรแกรมเชิงฟังก์ชันด้วย map, filter และ reduce ### 🌟 การเปลี่ยนแปลงตลอด 1 เดือนของคุณ - [ ] เชี่ยวชาญการทำงานกับอาร์เรย์ขั้นสูงและการปรับประสิทธิภาพ - [ ] สร้างแดชบอร์ดภาพข้อมูลอย่างครบวงจร - [ ] มีส่วนร่วมในโปรเจคโอเพนซอร์สเกี่ยวกับการประมวลผลข้อมูล - [ ] สอนผู้อื่นเกี่ยวกับอาร์เรย์และลูปด้วยตัวอย่างใช้งานจริง - [ ] สร้างห้องสมุดส่วนตัวของฟังก์ชันการประมวลผลข้อมูลที่นำกลับมาใช้ใหม่ได้ - [ ] สำรวจอัลกอริทึมและโครงสร้างข้อมูลที่สร้างบนอาร์เรย์ ### 🏆 การตรวจสอบความเป็นแชมป์การประมวลผลข้อมูลขั้นสุดท้าย เฉลิมฉลองความชำนาญอาร์เรย์และลูปของคุณ: - การดำเนินการอาร์เรย์ใดที่มีประโยชน์ที่สุดที่คุณได้เรียนรู้สำหรับการใช้งานในโลกจริง? - ลูปประเภทใดที่รู้สึกว่าสอดคล้องกับคุณที่สุดและเพราะเหตุใด? - การเข้าใจอาร์เรย์และลูปได้เปลี่ยนวิธีการจัดระเบียบข้อมูลของคุณอย่างไร? - งานประมวลผลข้อมูลซับซ้อนใดที่คุณต้องการจะทำในขั้นตอนต่อไป? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> ข้อจำกัดความรับผิด: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามให้การแปลมีความถูกต้อง โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลโดยมืออาชีพซึ่งเป็นมนุษย์ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดที่เกิดจากการใช้การแปลนี้ <!-- CO-OP TRANSLATOR DISCLAIMER END -->

array,loop

Panimula sa JavaScript

Ang JavaScript ay ang wika ng web. Sa apat na araling ito, matutunan mo ang mga pangunahing kaalaman nito. ### Mga Paksa 1. Mga Variable at Uri ng Data 2. Mga Function at Pamamaraan 3. Paggawa ng Desisyon gamit ang JavaScript 4. Mga Array at Loop ### Mga Kredito Ang mga araling ito ay isinulat nang may ♥️ nina Jasmine Greenaway, Christopher Harrison at Chris Noring --- Paunawa: Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.

javascript

Mga Pangunahing Kaalaman sa JavaScript: Mga Uri ng Data

Ang mga uri ng data ay isa sa mga pangunahing konsepto sa JavaScript na makikita mo sa bawat programang iyong isusulat. Isipin ang mga uri ng data na parang sistema ng pag-aayos na ginamit ng mga sinaunang librarian sa Alexandria – may partikular na lugar para sa mga scroll na naglalaman ng tula, matematika, at kasaysayan. Ang JavaScript ay nag-aayos ng impormasyon sa katulad na paraan gamit ang iba't ibang kategorya para sa iba't ibang uri ng data. Sa araling ito, tatalakayin natin ang mga pangunahing uri ng data na nagpapagana sa JavaScript. Matututuhan mo kung paano hawakan ang mga numero, teksto, mga halaga ng true/false, at mauunawaan kung bakit mahalaga ang tamang pagpili ng uri para sa iyong mga programa. Maaaring mukhang abstrakto ang mga konseptong ito sa simula, ngunit sa pagsasanay, magiging natural na ito sa iyo. Ang pag-unawa sa mga uri ng data ay magpapalinaw sa lahat ng iba pang aspeto ng JavaScript. Tulad ng mga arkitekto na kailangang maunawaan ang iba't ibang materyales sa pagtatayo bago magtayo ng katedral, ang mga pundasyong ito ang magiging suporta sa lahat ng iyong itatayo sa hinaharap. ## Pre-Lecture Quiz Pre-lecture quiz Ang araling ito ay sumasaklaw sa mga pangunahing kaalaman ng JavaScript, ang wika na nagbibigay ng interaktibidad sa web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Mga Variable sa JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Mga Uri ng Data sa JavaScript") Simulan natin sa mga variable at ang mga uri ng data na bumubuo sa mga ito! ## Mga Variable Ang mga variable ay pangunahing bahagi ng programming. Tulad ng mga garapon na may label na ginamit ng mga alkemistang medieval para mag-imbak ng iba't ibang sangkap, ang mga variable ay nagbibigay-daan sa iyo na mag-imbak ng impormasyon at bigyan ito ng deskriptibong pangalan para magamit mo ito sa hinaharap. Kailangang tandaan ang edad ng isang tao? I-imbak ito sa isang variable na tinatawag na age. Gusto mong subaybayan ang pangalan ng isang user? Itago ito sa isang variable na tinatawag na userName. Tututukan natin ang modernong paraan ng paggawa ng mga variable sa JavaScript. Ang mga teknik na matututunan mo dito ay kumakatawan sa mga taon ng ebolusyon ng wika at pinakamahusay na kasanayan na binuo ng komunidad ng programming. Ang paggawa at pagdeklara ng isang variable ay may sumusunod na syntax [keyword] [name]. Binubuo ito ng dalawang bahagi: - Keyword. Gamitin ang let para sa mga variable na maaaring magbago, o const para sa mga halaga na mananatiling pareho. - Pangalan ng variable, ito ay isang deskriptibong pangalan na ikaw mismo ang pipili. ✅ Ang keyword na let ay ipinakilala sa ES6 at nagbibigay sa iyong variable ng tinatawag na _block scope_. Inirerekomenda na gamitin mo ang let o const sa halip na ang mas lumang keyword na var. Tatalakayin natin ang block scopes nang mas malalim sa mga susunod na bahagi. ### Gawain - Paggamit ng mga Variable 1. Magdeklara ng isang variable. Magsimula tayo sa paggawa ng ating unang variable: ```javascript let myVariable; ``` Ano ang nagagawa nito: - Sinasabi nito sa JavaScript na gumawa ng isang storage location na tinatawag na myVariable - Naglalaan ang JavaScript ng espasyo sa memorya para sa variable na ito - Ang variable ay kasalukuyang walang halaga (undefined) 2. Bigyan ito ng halaga. Ngayon, maglagay tayo ng isang bagay sa ating variable: ```javascript myVariable = 123; ``` Paano gumagana ang assignment: - Ang operator na = ay nag-a-assign ng halaga na 123 sa ating variable - Ang variable ay naglalaman na ngayon ng halagang ito sa halip na undefined - Maaari mong i-refer ang halagang ito sa buong code gamit ang myVariable > Tandaan: ang paggamit ng = sa araling ito ay nangangahulugan na ginagamit natin ang "assignment operator", na ginagamit upang mag-set ng halaga sa isang variable. Hindi ito nangangahulugang pagkakapantay-pantay. 3. Gawin ito sa mas matalinong paraan. Sa totoo lang, pagsamahin natin ang dalawang hakbang na iyon: ```javascript let myVariable = 123; ``` Mas epektibo ang pamamaraang ito: - Nagdeklara ka ng variable at nag-a-assign ng halaga sa isang statement - Ito ang karaniwang kasanayan sa mga developer - Binabawasan nito ang haba ng code habang pinapanatili ang kalinawan 4. Baguhin ang iyong isip. Paano kung gusto nating mag-imbak ng ibang numero? ```javascript myVariable = 321; ``` Pag-unawa sa reassignment: - Ang variable ay naglalaman na ngayon ng 321 sa halip na 123 - Ang dating halaga ay napalitan – ang mga variable ay nag-iimbak lamang ng isang halaga sa isang pagkakataon - Ang mutability na ito ang pangunahing katangian ng mga variable na idineklara gamit ang let ✅ Subukan ito! Maaari kang magsulat ng JavaScript mismo sa iyong browser. Buksan ang isang browser window at pumunta sa Developer Tools. Sa console, makikita mo ang isang prompt; i-type ang let myVariable = 123, pindutin ang return, pagkatapos ay i-type ang myVariable. Ano ang nangyayari? Tandaan, matututunan mo ang higit pa tungkol sa mga konseptong ito sa mga susunod na aralin. ### 🧠 Pag-master ng Mga Variable: Pagiging Komportable Tingnan natin kung gaano ka komportable sa mga variable: - Kaya mo bang ipaliwanag ang pagkakaiba ng pagdeklara at pag-a-assign ng variable? - Ano ang mangyayari kung susubukan mong gamitin ang isang variable bago mo ito ideklara? - Kailan mo pipiliin ang let sa halip na const para sa isang variable? ## Constants Minsan kailangan mong mag-imbak ng impormasyon na hindi dapat magbago habang tumatakbo ang programa. Isipin ang constants na parang mga prinsipyo ng matematika na itinatag ni Euclid sa sinaunang Greece – kapag napatunayan at naitala, nananatili itong hindi nagbabago para sa lahat ng susunod na sanggunian. Ang constants ay gumagana nang katulad sa mga variable, ngunit may mahalagang limitasyon: kapag na-assign mo na ang kanilang halaga, hindi na ito maaaring baguhin. Ang immutability na ito ay nakakatulong na maiwasan ang hindi sinasadyang pagbabago sa mga mahahalagang halaga sa iyong programa. Ang deklarasyon at inisyal na pag-assign ng isang constant ay sumusunod sa parehong konsepto ng isang variable, maliban sa paggamit ng keyword na const. Ang constants ay karaniwang idinedeklara gamit ang lahat ng uppercase na letra. Ano ang ginagawa ng code na ito: - Gumagawa ng constant na pinangalanang MY_VARIABLE na may halagang 123 - Gumagamit ng uppercase naming convention para sa constants - Pinipigilan ang anumang pagbabago sa halagang ito sa hinaharap Ang constants ay may dalawang pangunahing tuntunin: - Dapat mong bigyan agad ng halaga – walang puwedeng walang laman na constants! - Hindi mo maaaring baguhin ang halagang iyon – maglalabas ng error ang JavaScript kung susubukan mo. Tingnan natin ang ibig sabihin nito: Simpleng halaga - Ang sumusunod ay HINDI pinapayagan: ```javascript const PI = 3; PI = 4; // hindi pinapayagan ``` Ano ang dapat tandaan: - Mga pagtatangka na i-reassign ang isang constant ay magdudulot ng error - Pinoprotektahan ang mahahalagang halaga mula sa hindi sinasadyang pagbabago - Tinitiyak na ang halaga ay nananatiling pare-pareho sa buong programa Protektado ang reference ng object - Ang sumusunod ay HINDI pinapayagan: ```javascript const obj = { a: 3 }; obj = { b: 5 } // hindi pinapayagan ``` Pag-unawa sa mga konseptong ito: - Pinipigilan ang pagpapalit ng buong object ng bago - Pinoprotektahan ang reference sa orihinal na object - Pinapanatili ang pagkakakilanlan ng object sa memorya Hindi protektado ang halaga ng object - Ang sumusunod ay PINAPAYAGAN: ```javascript const obj = { a: 3 }; obj.a = 5; // pinapayagan ``` Pag-unawa sa nangyayari dito: - Binabago ang halaga ng property sa loob ng object - Pinapanatili ang parehong reference ng object - Ipinapakita na ang mga nilalaman ng object ay maaaring magbago habang nananatiling pareho ang reference > Tandaan, ang const ay nangangahulugang protektado ang reference mula sa reassignment. Ang halaga ay hindi _immutable_ at maaaring magbago, lalo na kung ito ay isang komplikadong construct tulad ng isang object. ## Mga Uri ng Data Ang JavaScript ay nag-aayos ng impormasyon sa iba't ibang kategorya na tinatawag na mga uri ng data. Ang konseptong ito ay kahalintulad sa kung paano ikinategorya ng mga sinaunang iskolar ang kaalaman – inihiwalay ni Aristotle ang iba't ibang uri ng pangangatwiran, alam na ang mga prinsipyo ng lohika ay hindi maaaring pantay na ilapat sa tula, matematika, at natural na pilosopiya. Mahalaga ang mga uri ng data dahil ang iba't ibang operasyon ay gumagana sa iba't ibang uri ng impormasyon. Tulad ng hindi mo maaaring gawin ang aritmetika sa pangalan ng isang tao o i-alpabeto ang isang equation sa matematika, ang JavaScript ay nangangailangan ng tamang uri ng data para sa bawat operasyon. Ang pag-unawa dito ay nakakaiwas sa mga error at nagpapaganda ng pagiging maaasahan ng iyong code. Ang mga variable ay maaaring mag-imbak ng iba't ibang uri ng halaga, tulad ng mga numero at teksto. Ang iba't ibang uri ng mga halagang ito ay kilala bilang uri ng data. Ang mga uri ng data ay mahalagang bahagi ng pagbuo ng software dahil nakakatulong ito sa mga developer na magdesisyon kung paano dapat isulat ang code at kung paano dapat tumakbo ang software. Bukod pa rito, ang ilang uri ng data ay may natatanging mga tampok na tumutulong sa pagbabago o pagkuha ng karagdagang impormasyon sa isang halaga. ✅ Ang mga Uri ng Data ay tinatawag ding mga JavaScript data primitives, dahil sila ang pinakamababang antas ng mga uri ng data na ibinibigay ng wika. Mayroong 7 primitive na uri ng data: string, number, bigint, boolean, undefined, null, at symbol. Maglaan ng sandali upang maisip kung ano ang maaaring kumatawan sa bawat isa sa mga primitives na ito. Ano ang zebra? Paano naman ang 0? true? ### Mga Numero Ang mga numero ang pinakasimple sa mga uri ng data sa JavaScript. Kung nagtatrabaho ka man sa mga buong numero tulad ng 42, mga decimal tulad ng 3.14, o mga negatibong numero tulad ng -5, pare-pareho ang paghawak ng JavaScript sa mga ito. Tandaan ang ating variable mula kanina? Ang 123 na ating iniimbak ay talagang isang uri ng data na numero: Mga Pangunahing Katangian: - Awtomatikong kinikilala ng JavaScript ang mga numerong halaga - Maaari kang magsagawa ng mga operasyong matematika gamit ang mga variable na ito - Walang kinakailangang tahasang deklarasyon ng uri Ang mga variable ay maaaring mag-imbak ng lahat ng uri ng mga numero, kabilang ang mga decimal o negatibong numero. Ang mga numero ay maaari ring gamitin sa mga arithmetic operator, na tatalakayin sa susunod na seksyon. ### Mga Arithmetic Operator Ang mga arithmetic operator ay nagbibigay-daan sa iyo na magsagawa ng mga kalkulasyong matematika sa JavaScript. Ang mga operator na ito ay sumusunod sa parehong mga prinsipyo na ginamit ng mga mathematician sa loob ng maraming siglo – ang parehong mga simbolo na lumitaw sa mga gawa ng mga iskolar tulad ni Al-Khwarizmi, na bumuo ng algebraic notation. Ang mga operator ay gumagana tulad ng inaasahan mula sa tradisyunal na matematika: plus para sa addition, minus para sa subtraction, at iba pa. Mayroong ilang mga uri ng operator na magagamit kapag nagsasagawa ng mga arithmetic function, at ilan ay nakalista dito: ✅ Subukan ito! Subukan ang isang arithmetic operation sa console ng iyong browser. Nagulat ka ba sa mga resulta? ### 🧮 Pag-check ng Kakayahan sa Math: Pagkalkula nang May Kumpiyansa Subukan ang iyong pag-unawa sa arithmetic: - Ano ang pagkakaiba ng / (division) at % (remainder)? - Kaya mo bang hulaan kung ano ang 10 % 3? (Hint: hindi ito 3.33...) - Bakit maaaring maging kapaki-pakinabang ang remainder operator sa programming? ### Mga Strings Sa JavaScript, ang tekstuwal na data ay kinakatawan bilang mga string. Ang terminong "string" ay nagmula sa konsepto ng mga character na magkakasunod na pinagsama-sama, tulad ng paraan ng mga tagasulat sa mga monasteryo noong medieval na nag-uugnay ng mga letra upang bumuo ng mga salita at pangungusap sa kanilang mga manuskrito. Ang mga string ay mahalaga sa web development. Ang bawat piraso ng teksto na ipinapakita sa isang website – mga username, label ng button, mga mensahe ng error, nilalaman – ay hinahawakan bilang string data. Ang pag-unawa sa mga string ay mahalaga para sa paggawa ng mga functional na user interface. Ang mga string ay mga set ng mga character na nakapaloob sa pagitan ng single o double quotes. Pag-unawa sa mga konseptong ito: - Gumagamit ng single quotes ' o double quotes " upang tukuyin ang mga string - Nag-iimbak ng tekstuwal na data na maaaring maglaman ng mga letra, numero, at simbolo - Nag-a-assign ng mga halaga ng string sa mga variable para magamit sa hinaharap - Nangangailangan ng mga quotes upang maiba ang teksto mula sa mga pangalan ng variable Tandaan na gumamit ng mga quotes kapag nagsusulat ng string, kung hindi, iisipin ng JavaScript na ito ay pangalan ng variable. ### Pag-format ng Mga String Ang manipulasyon ng string ay nagbibigay-daan sa iyo na pagsamahin ang mga elemento ng teksto, isama ang mga variable, at lumikha ng dynamic na nilalaman na tumutugon sa estado ng programa. Ang teknik na ito ay nagbibigay-daan sa iyo na bumuo ng teksto nang programmatically. Kadalasan kailangan mong pagsamahin ang maraming string – ang prosesong ito ay tinatawag na concatenation. Upang pagsamahin ang dalawa o higit pang mga string, o pagsamahin ang mga ito, gamitin ang + operator. Hakbang-hakbang, narito ang nangyayari: - Pinagsasama ang maraming string gamit ang + operator - Pinagsasama ang mga string nang direkta nang walang espasyo sa unang halimbawa - Nagdaragdag ng mga espasyo " " sa pagitan ng mga string para sa mas malinaw na pagbabasa - Naglalagay ng mga bantas tulad ng mga kuwit upang makabuo ng tamang format ✅ Bakit 1 + 1 = 2 sa JavaScript, pero '1' + '1' = 11? Pag-isipan ito. Paano naman ang '1' + 1? Template literals ay isa pang paraan upang mag-format ng mga string, maliban sa halip na mga quotes, ginagamit ang backtick. Anumang hindi plain text ay kailangang ilagay sa loob ng placeholders ${ }. Kasama dito ang anumang mga variable na maaaring mga string. Unawain natin ang bawat bahagi: - Gumagamit ng backticks ` `` sa halip na regular na quotes upang lumikha ng template literals - Naglalagay ng mga variable nang direkta gamit ang syntax ng placeholder ${} - Pinapanatili ang mga espasyo at format nang eksakto kung paano ito isinulat - Nagbibigay ng mas malinis na paraan upang lumikha ng mas kumplikadong mga string na may mga variable Maaari mong makamit ang iyong mga layunin sa pag-format gamit ang alinmang paraan, ngunit ang template literals ay igagalang ang anumang mga espasyo at line breaks. ✅ Kailan mo gagamitin ang template literal kumpara sa plain string? ### 🔤 Pag-master ng String: Kumpiyansa sa Manipulasyon ng Teksto Suriin ang iyong kakayahan sa string: - Kaya mo bang ipaliwanag kung bakit '1' + '1' ay nagiging '11' sa halip na 2? - Alin sa mga string method ang mas nababasa para sa iyo: concatenation o template literals? - Ano ang mangyayari kung nakalimutan mo ang mga quotes sa paligid ng isang string? ### Booleans Ang Booleans ay kumakatawan sa pinakasimpleng anyo ng data: maaari lamang itong maglaman ng isa sa dalawang halaga – true o false. Ang binary logic system na ito ay nagmula sa trabaho ni George Boole, isang mathematician noong ika-19 na siglo na nag-develop ng Boolean algebra. Sa kabila ng kanilang pagiging simple, mahalaga ang booleans para sa program logic. Pinapayagan nila ang iyong code na gumawa ng desisyon batay sa mga kondisyon – kung naka-log in ang isang user, kung na-click ang isang button, o kung natugunan ang ilang pamantayan. Ang Booleans ay maaari lamang magkaroon ng dalawang halaga: true o false. Ang Booleans ay makakatulong sa paggawa ng desisyon kung aling mga linya ng code ang dapat tumakbo kapag natugunan ang ilang mga kondisyon. Sa maraming kaso, ang operators ay tumutulong sa pagtatakda ng halaga ng Boolean at madalas mong mapapansin at isusulat ang mga variable na ini-initialize o ang kanilang mga halaga ay ina-update gamit ang operator. Sa itaas, ginawa natin ang sumusunod: - Lumikha ng variable na nag-iimbak ng Boolean value na true - Ipinakita kung paano mag-imbak ng Boolean value na false - Gumamit ng eksaktong mga keyword na true at false (walang quotes na kailangan) - Ipinaghanda ang mga variable na ito para sa paggamit sa mga conditional statements ✅ Ang isang variable ay maaaring ituring na 'truthy' kung ito ay nag-e-evaluate sa boolean na true. Nakakatuwa, sa JavaScript, lahat ng mga halaga ay truthy maliban kung tinukoy bilang falsy. ### 🎯 Suriin ang Boolean Logic: Kakayahan sa Paggawa ng Desisyon Subukan ang iyong pag-unawa sa boolean: - Bakit sa tingin mo may "truthy" at "falsy" values ang JavaScript bukod sa true at false? - Kaya mo bang hulaan kung alin sa mga ito ang falsy: 0, "0", [], "false"? - Paano maaaring maging kapaki-pakinabang ang booleans sa pagkontrol ng daloy ng programa? --- ## 📊 Buod ng Iyong Toolkit sa Data Types ## Hamon ng GitHub Copilot Agent 🚀 Gamitin ang Agent mode upang kumpletuhin ang sumusunod na hamon: Deskripsyon: Gumawa ng personal information manager na nagpapakita ng lahat ng JavaScript data types na natutunan mo sa araling ito habang hinahawakan ang mga real-world data scenarios. Prompt: Gumawa ng JavaScript program na lumilikha ng user profile object na naglalaman ng: pangalan ng tao (string), edad (number), status bilang estudyante (boolean), mga paboritong kulay bilang array, at isang address object na may street, city, at zip code properties. Isama ang mga function upang ipakita ang impormasyon ng profile at i-update ang mga indibidwal na field. Siguraduhing ipakita ang string concatenation, template literals, arithmetic operations gamit ang edad, at boolean logic para sa status bilang estudyante. Alamin pa ang tungkol sa agent mode dito. ## 🚀 Hamon May ilang mga behavior ang JavaScript na maaaring magulat ang mga developer. Narito ang isang klasikong halimbawa upang tuklasin: subukang i-type ito sa iyong browser console: let age = 1; let Age = 2; age == Age at obserbahan ang resulta. Ito ay nagbabalik ng false – kaya mo bang tukuyin kung bakit? Ito ay kumakatawan sa isa sa maraming mga behavior ng JavaScript na mahalagang maunawaan. Ang pagiging pamilyar sa mga kakaibang ito ay makakatulong sa iyo na magsulat ng mas maaasahang code at mas epektibong mag-debug ng mga isyu. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Tingnan ang listahan ng mga JavaScript exercises at subukan ang isa. Ano ang natutunan mo? ## Assignment Data Types Practice ## 🚀 Timeline ng Iyong Mastery sa JavaScript Data Types ### ⚡ Ano ang Magagawa Mo sa Loob ng Susunod na 5 Minuto - [ ] Buksan ang iyong browser console at gumawa ng 3 variables na may iba't ibang data types - [ ] Subukan ang hamon: let age = 1; let Age = 2; age == Age at alamin kung bakit ito false - [ ] Magpraktis ng string concatenation gamit ang iyong pangalan at paboritong numero - [ ] Subukan kung ano ang mangyayari kapag nagdagdag ka ng numero sa isang string ### 🎯 Ano ang Maaaring Makamit Mo sa Loob ng Isang Oras - [ ] Kumpletuhin ang post-lesson quiz at suriin ang anumang nakakalitong konsepto - [ ] Gumawa ng mini calculator na nagdadagdag, nagbabawas, nagmumultiply, at naghahati ng dalawang numero - [ ] Bumuo ng simpleng name formatter gamit ang template literals - [ ] Tuklasin ang mga pagkakaiba sa pagitan ng == at === comparison operators - [ ] Magpraktis ng pag-convert sa pagitan ng iba't ibang data types ### 📅 Ang Iyong Foundation sa JavaScript sa Loob ng Isang Linggo - [ ] Kumpletuhin ang assignment nang may kumpiyansa at pagkamalikhain - [ ] Gumawa ng personal profile object gamit ang lahat ng data types na natutunan - [ ] Magpraktis gamit ang JavaScript exercises mula sa CSS-Tricks - [ ] Bumuo ng simpleng form validator gamit ang boolean logic - [ ] Mag-eksperimento sa array at object data types (preview ng mga susunod na aralin) - [ ] Sumali sa JavaScript community at magtanong tungkol sa data types ### 🌟 Ang Iyong Transformation sa Loob ng Isang Buwan - [ ] Isama ang kaalaman sa data type sa mas malalaking programming projects - [ ] Unawain kung kailan at bakit gagamitin ang bawat data type sa mga tunay na aplikasyon - [ ] Tulungan ang ibang mga baguhan na maunawaan ang mga pundasyon ng JavaScript - [ ] Bumuo ng maliit na application na nagma-manage ng iba't ibang uri ng user data - [ ] Tuklasin ang mga advanced na konsepto ng data type tulad ng type coercion at strict equality - [ ] Mag-ambag sa mga open source JavaScript projects sa pamamagitan ng pagpapabuti ng dokumentasyon ### 🧠 Huling Suriin ang Iyong Mastery sa Data Types I-celebrate ang iyong pundasyon sa JavaScript: - Aling data type ang pinaka-nakagulat sa iyo sa mga tuntunin ng behavior nito? - Gaano ka komportable sa pagpapaliwanag ng variables vs. constants sa isang kaibigan? - Ano ang pinaka-kawili-wiling bagay na natuklasan mo tungkol sa type system ng JavaScript? - Aling tunay na aplikasyon ang naiisip mong gawin gamit ang mga pundasyong ito? --- Paunawa: Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na mapagkakatiwalaang pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.

javascript,data

Mga Pangunahing Kaalaman sa JavaScript: Mga Pamamaraan at Function

## Pre-Lecture Quiz Pre-lecture quiz Ang paulit-ulit na pagsusulat ng parehong code ay isa sa mga pinakakaraniwang pagkabigo sa programming. Ang mga function ay nag-aayos ng problemang ito sa pamamagitan ng pagpapahintulot sa iyo na i-package ang code sa mga reusable na bloke. Isipin ang mga function na parang mga standardized na bahagi na nagpa-rebolusyon sa assembly line ni Henry Ford – kapag nakagawa ka ng maaasahang bahagi, magagamit mo ito kahit saan nang hindi kailangang magsimula muli. Ang mga function ay nagbibigay-daan sa iyo na mag-bundle ng mga piraso ng code upang magamit mo ang mga ito sa buong programa. Sa halip na kopyahin at i-paste ang parehong lohika sa lahat ng dako, maaari kang lumikha ng isang function nang isang beses at tawagin ito tuwing kinakailangan. Ang ganitong paraan ay nagpapanatili ng organisado ang iyong code at ginagawang mas madali ang mga update. Sa araling ito, matututunan mo kung paano lumikha ng sarili mong mga function, magpasa ng impormasyon sa mga ito, at makakuha ng kapaki-pakinabang na resulta. Malalaman mo ang pagkakaiba ng mga function at mga pamamaraan, matutunan ang mga modernong syntax na diskarte, at makikita kung paano gumagana ang mga function kasama ang iba pang mga function. Bubuuin natin ang mga konseptong ito nang paunti-unti. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Mga Pamamaraan at Function") ## Mga Function Ang isang function ay isang self-contained na bloke ng code na gumaganap ng isang partikular na gawain. Pinagsasama nito ang lohika na maaari mong isagawa tuwing kinakailangan. Sa halip na isulat ang parehong code nang maraming beses sa buong programa, maaari mo itong i-package sa isang function at tawagin ang function na iyon tuwing kailangan mo ito. Ang ganitong paraan ay nagpapanatili ng malinis ang iyong code at ginagawang mas madali ang mga update. Isipin ang hamon sa pagpapanatili kung kailangan mong baguhin ang lohika na nakakalat sa 20 iba't ibang lokasyon sa iyong codebase. Napakahalaga ng pagbibigay ng mga deskriptibong pangalan sa iyong mga function. Ang isang maayos na pinangalanang function ay malinaw na nagpapahayag ng layunin nito – kapag nakita mo ang cancelTimer(), agad mong maiintindihan kung ano ang ginagawa nito, tulad ng isang malinaw na nakalabel na button na nagsasabi sa iyo kung ano ang mangyayari kapag na-click mo ito. ## Paglikha at pagtawag sa isang function Tingnan natin kung paano lumikha ng isang function. Ang syntax ay sumusunod sa isang pare-parehong pattern: Himayin natin ito: - Ang keyword na function ay nagsasabi sa JavaScript na "Hoy, gumagawa ako ng isang function!" - Ang nameOfFunction ay kung saan mo bibigyan ng deskriptibong pangalan ang iyong function - Ang mga panaklong () ay kung saan maaari kang magdagdag ng mga parameter (pag-uusapan natin ito mamaya) - Ang mga kulot na braces {} ay naglalaman ng aktwal na code na tumatakbo kapag tinawag mo ang function Gumawa tayo ng simpleng greeting function upang makita ito sa aksyon: Ang function na ito ay nagpi-print ng "Hello, world!" sa console. Kapag na-define mo na ito, magagamit mo ito nang maraming beses kung kinakailangan. Upang maisagawa (o "tawagin") ang iyong function, isulat ang pangalan nito na sinusundan ng mga panaklong. Pinapayagan ka ng JavaScript na i-define ang iyong function bago o pagkatapos mo itong tawagin – ang JavaScript engine ang bahala sa pagkakasunod-sunod ng pagpapatupad. Kapag pinatakbo mo ang linyang ito, isinasagawa nito ang lahat ng code sa loob ng iyong displayGreeting function, na nagpapakita ng "Hello, world!" sa console ng iyong browser. Maaari mong tawagin ang function na ito nang paulit-ulit. ### 🧠 Pag-unawa sa Mga Pangunahing Kaalaman sa Function: Pagbuo ng Iyong Unang Mga Function Tingnan natin kung paano mo naiintindihan ang mga pangunahing function: - Maaari mo bang ipaliwanag kung bakit ginagamit ang mga kulot na braces {} sa mga definition ng function? - Ano ang mangyayari kung isusulat mo ang displayGreeting nang walang mga panaklong? - Bakit mo gustong tawagin ang parehong function nang maraming beses? ### Mga pinakamahusay na kasanayan sa function Narito ang ilang mga tip upang matulungan kang magsulat ng mahusay na mga function: - Bigyan ang iyong mga function ng malinaw, deskriptibong mga pangalan – pasasalamatan ka ng iyong hinaharap na sarili! - Gumamit ng camelCasing para sa mga pangalan na may maraming salita (tulad ng calculateTotal sa halip na calculate_total) - Panatilihing nakatuon ang bawat function sa paggawa ng isang bagay nang mahusay ## Pagpapasa ng impormasyon sa isang function Ang aming displayGreeting function ay limitado – maaari lamang itong magpakita ng "Hello, world!" para sa lahat. Ang mga parameter ay nagbibigay-daan sa amin na gawing mas flexible at kapaki-pakinabang ang mga function. Ang mga parameter ay kumikilos na parang mga placeholder kung saan maaari kang magpasok ng iba't ibang mga halaga sa bawat oras na gamitin mo ang function. Sa ganitong paraan, ang parehong function ay maaaring gumana sa iba't ibang impormasyon sa bawat tawag. Ililista mo ang mga parameter sa loob ng mga panaklong kapag dinefine mo ang iyong function, na naghihiwalay sa maraming parameter gamit ang mga kuwit: Ang bawat parameter ay kumikilos na parang placeholder – kapag may tumawag sa iyong function, magbibigay sila ng aktwal na mga halaga na ipapasok sa mga lugar na ito. I-update natin ang aming greeting function upang tanggapin ang pangalan ng isang tao: Pansinin kung paano namin ginagamit ang backticks (` `) at ${}` upang ipasok ang pangalan nang direkta sa aming mensahe – ito ay tinatawag na template literal, at ito ay isang napaka-kapaki-pakinabang na paraan upang bumuo ng mga string na may halong mga variable. Ngayon kapag tinawag namin ang aming function, maaari naming ipasa ang anumang pangalan: Kinukuha ng JavaScript ang string na 'Christopher', itinalaga ito sa parameter na name, at lumilikha ng personalized na mensahe na "Hello, Christopher!" ## Mga default na halaga Paano kung gusto nating gawing opsyonal ang ilang mga parameter? Dito nagiging kapaki-pakinabang ang mga default na halaga! Sabihin nating gusto nating pahintulutan ang mga tao na i-customize ang salutation, ngunit kung hindi sila magbigay ng isa, gagamitin lang natin ang "Hello" bilang fallback. Maaari kang mag-set up ng mga default na halaga sa pamamagitan ng paggamit ng equals sign, tulad ng pag-set ng variable: Dito, ang name ay kinakailangan pa rin, ngunit ang salutation ay may backup na halaga na 'Hello' kung walang magbigay ng ibang pagbati. Ngayon maaari naming tawagin ang function na ito sa dalawang magkaibang paraan: Sa unang tawag, ginagamit ng JavaScript ang default na "Hello" dahil hindi kami nagbigay ng salutation. Sa pangalawang tawag, ginagamit nito ang aming custom na "Hi" sa halip. Ang flexibility na ito ay ginagawang adaptable ang mga function sa iba't ibang sitwasyon. ### 🎛️ Pag-unawa sa Mga Parameter: Ginagawang Flexible ang Mga Function Subukan ang iyong pag-unawa sa parameter: - Ano ang pagkakaiba ng parameter at argument? - Bakit kapaki-pakinabang ang mga default na halaga sa totoong programming? - Maaari mo bang hulaan kung ano ang mangyayari kung magpasa ka ng mas maraming argumento kaysa sa mga parameter? ## Mga return value Ang aming mga function sa ngayon ay nagpi-print lang ng mga mensahe sa console, ngunit paano kung gusto mong mag-compute ang isang function at ibalik sa iyo ang resulta? Dito pumapasok ang mga return value. Sa halip na magpakita lang ng isang bagay, ang isang function ay maaaring magbigay sa iyo ng isang halaga na maaari mong i-store sa isang variable o gamitin sa iba pang bahagi ng iyong code. Upang magpadala ng halaga pabalik, gagamitin mo ang keyword na return na sinusundan ng anumang gusto mong ibalik: Narito ang isang mahalagang bagay: kapag ang isang function ay tumama sa isang return statement, agad itong humihinto sa pagtakbo at ipinapadala ang halagang iyon pabalik sa tumawag dito. I-modify natin ang aming greeting function upang ibalik ang mensahe sa halip na i-print ito: Ngayon sa halip na i-print ang pagbati, ang function na ito ay lumilikha ng mensahe at ibinibigay ito pabalik sa amin. Upang magamit ang ibinalik na halaga, maaari naming i-store ito sa isang variable tulad ng anumang iba pang halaga: Ngayon ang greetingMessage ay naglalaman ng "Hello, Christopher" at magagamit namin ito kahit saan sa aming code – upang ipakita ito sa isang webpage, isama ito sa isang email, o ipasa ito sa isa pang function. ### 🔄 Pag-unawa sa Mga Return Value: Pagkuha ng Mga Resulta Suriin ang iyong pag-unawa sa return value: - Ano ang nangyayari sa code pagkatapos ng isang return statement sa isang function? - Bakit mas madalas na mas mahusay ang pagbabalik ng mga halaga kaysa sa pagpi-print lang sa console? - Maaari bang magbalik ang isang function ng iba't ibang uri ng mga halaga (string, number, boolean)? ## Mga function bilang mga parameter para sa mga function Ang mga function ay maaaring ipasa bilang mga parameter sa iba pang mga function. Bagama't maaaring mukhang kumplikado ang konseptong ito sa simula, ito ay isang makapangyarihang tampok na nagbibigay-daan sa mga flexible na pattern ng programming. Ang pattern na ito ay karaniwang ginagamit kapag gusto mong sabihin na "kapag may nangyari, gawin ang ibang bagay na ito." Halimbawa, "kapag natapos ang timer, patakbuhin ang code na ito" o "kapag nag-click ang user sa button, tawagin ang function na ito." Tingnan natin ang setTimeout, na isang built-in na function na naghihintay ng tiyak na oras at pagkatapos ay nagpapatakbo ng ilang code. Kailangan nating sabihin dito kung anong code ang tatakbo – perpektong kaso para sa pagpapasa ng isang function! Subukan ang code na ito – pagkatapos ng 3 segundo, makakakita ka ng mensahe: Pansinin kung paano namin ipinapasa ang displayDone (nang walang mga panaklong) sa setTimeout. Hindi namin tinatawag ang function mismo – ibinibigay namin ito sa setTimeout at sinasabing "tawagin ito sa loob ng 3 segundo." ### Mga anonymous na function Minsan kailangan mo ng isang function para sa isang bagay lang at ayaw mong bigyan ito ng pangalan. Isipin ito – kung gagamitin mo lang ang isang function nang isang beses, bakit mo pa ito bibigyan ng pangalan na magpapasikip sa iyong code? Pinapayagan ka ng JavaScript na lumikha ng mga anonymous na function – mga function na walang pangalan na maaari mong i-define kung saan mo ito kailangan. Narito kung paano natin maaaring isulat muli ang halimbawa ng timer gamit ang isang anonymous na function: Nakakamit nito ang parehong resulta, ngunit ang function ay na-define nang direkta sa loob ng tawag sa setTimeout, na inaalis ang pangangailangan para sa isang hiwalay na deklarasyon ng function. ### Mga fat arrow function Ang modernong JavaScript ay may mas maikling paraan upang magsulat ng mga function na tinatawag na arrow functions. Ginagamit nila ang => (na mukhang isang arrow – gets mo?) at napakapopular sa mga developer. Ang mga arrow function ay nagbibigay-daan sa iyo na laktawan ang keyword na function at magsulat ng mas maikli na code. Narito ang halimbawa ng timer gamit ang isang arrow function: Ang () ay kung saan ilalagay ang mga parameter (walang laman sa kasong ito), pagkatapos ay darating ang arrow =>, at sa wakas ang katawan ng function sa mga kulot na braces. Nagbibigay ito ng parehong functionality na may mas maikling syntax. ### Kailan gagamitin ang bawat diskarte Kailan mo dapat gamitin ang bawat approach? Isang praktikal na gabay: kung gagamitin mo ang function nang maraming beses, bigyan ito ng pangalan at i-define ito nang hiwalay. Kung ito ay para sa isang partikular na paggamit, isaalang-alang ang isang anonymous na function. Parehong valid ang arrow functions at tradisyunal na syntax, bagama't ang arrow functions ay laganap sa mga modernong JavaScript codebase. ### 🎨 Pag-unawa sa Mga Estilo ng Function: Pagpili ng Tamang Syntax Subukan ang iyong pag-unawa sa syntax: - Kailan mo mas gugustuhin ang arrow functions kaysa sa tradisyunal na syntax ng function? - Ano ang pangunahing bentahe ng mga anonymous na function? - Maaari mo bang isipin ang isang sitwasyon kung saan mas maganda ang isang named function kaysa sa isang anonymous na function? --- ## 🚀 Hamon Maaari mo bang ipaliwanag sa isang pangungusap ang pagkakaiba ng mga function at mga pamamaraan? Subukan mo! ## Hamon ng GitHub Copilot Agent 🚀 Gamitin ang Agent mode upang tapusin ang sumusunod na hamon: Deskripsyon: Gumawa ng utility library ng mga mathematical function na nagpapakita ng iba't ibang konsepto ng function na tinalakay sa araling ito, kabilang ang mga parameter, default na halaga, return value, at arrow functions. Prompt: Gumawa ng JavaScript file na tinatawag na mathUtils.js na naglalaman ng mga sumusunod na function: 1. Isang function na add na tumatanggap ng dalawang parameter at ibinabalik ang kanilang kabuuan 2. Isang function na multiply na may default na halaga ng parameter (ang pangalawang parameter ay default sa 1) 3. Isang arrow function na square na tumatanggap ng isang numero at ibinabalik ang square nito 4. Isang function na calculate na tumatanggap ng isa pang function bilang parameter at dalawang numero, pagkatapos ay inilalapat ang function sa mga numerong iyon 5. Ipakita ang pagtawag sa bawat function gamit ang mga angkop na test case Alamin ang higit pa tungkol sa agent mode dito. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Sulit na magbasa pa tungkol sa arrow functions, dahil mas madalas na ginagamit ang mga ito sa mga code base. Magpraktis sa pagsusulat ng isang function, at pagkatapos ay isulat ito muli gamit ang syntax na ito. ## Assignment Masaya sa Mga Function --- ## 🧰 Buod ng Iyong Toolkit sa JavaScript Functions --- ## 🚀 Timeline ng Iyong Mastery sa JavaScript Functions ### ⚡ Ano ang Magagawa Mo sa Susunod na 5 Minuto - [ ] Sumulat ng simpleng function na nagbabalik ng iyong paboritong numero - [ ] Gumawa ng function na may dalawang parameter na nagdadagdag sa kanila - [ ] Subukan ang pag-convert ng isang tradisyunal na function sa arrow function syntax - [ ] Sanayin ang hamon: ipaliwanag ang pagkakaiba ng functions at methods ### 🎯 Ano ang Maaaring Magawa Mo sa Loob ng Isang Oras - [ ] Kumpletuhin ang post-lesson quiz at balikan ang anumang nakakalitong konsepto - [ ] Bumuo ng math utilities library mula sa GitHub Copilot challenge - [ ] Gumawa ng function na gumagamit ng ibang function bilang parameter - [ ] Sanayin ang pagsusulat ng functions na may default parameters - [ ] Subukan ang paggamit ng template literals sa mga return value ng function ### 📅 Ang Iyong Lingguhang Pag-master ng Functions - [ ] Kumpletuhin ang "Fun with Functions" na assignment nang may pagkamalikhain - [ ] I-refactor ang ilang paulit-ulit na code na nagawa mo sa reusable functions - [ ] Bumuo ng maliit na calculator gamit lamang ang functions (walang global variables) - [ ] Sanayin ang arrow functions gamit ang array methods tulad ng map() at filter() - [ ] Gumawa ng koleksyon ng utility functions para sa mga karaniwang gawain - [ ] Pag-aralan ang higher-order functions at mga konsepto ng functional programming ### 🌟 Ang Iyong Buwanang Transformasyon - [ ] Pag-master ng advanced function concepts tulad ng closures at scope - [ ] Bumuo ng proyekto na malaki ang paggamit ng function composition - [ ] Mag-ambag sa open source sa pamamagitan ng pagpapabuti ng function documentation - [ ] Magturo sa iba tungkol sa functions at iba't ibang syntax styles - [ ] Tuklasin ang mga paradigms ng functional programming sa JavaScript - [ ] Gumawa ng personal na library ng reusable functions para sa mga susunod na proyekto ### 🏆 Huling Check-in ng Functions Champion I-celebrate ang iyong pag-master ng functions: - Ano ang pinaka-kapaki-pakinabang na function na nagawa mo? - Paano nabago ng pag-aaral tungkol sa functions ang pananaw mo sa pag-organisa ng code? - Aling syntax ng function ang mas gusto mo at bakit? - Anong totoong problema ang nais mong lutasin sa pamamagitan ng pagsusulat ng function? --- Paunawa: Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na mapagkakatiwalaang pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.

javascript,function

Mga Pangunahing Kaalaman sa JavaScript: Paggawa ng Desisyon

Naisip mo na ba kung paano gumagawa ng matatalinong desisyon ang mga aplikasyon? Tulad ng kung paano pumipili ang isang navigation system ng pinakamabilis na ruta, o kung paano nagdedesisyon ang isang thermostat kung kailan bubuksan ang init? Ito ang pangunahing konsepto ng paggawa ng desisyon sa programming. Katulad ng Analytical Engine ni Charles Babbage na idinisenyo upang sundin ang iba't ibang sequence ng operasyon batay sa mga kondisyon, ang mga modernong JavaScript program ay kailangang gumawa ng mga pagpipilian batay sa iba't ibang sitwasyon. Ang kakayahang mag-branch at gumawa ng desisyon ang nagbabago sa static na code upang maging responsive at matalino na mga aplikasyon. Sa araling ito, matututunan mo kung paano ipatupad ang conditional logic sa iyong mga programa. Susuriin natin ang mga conditional statement, comparison operator, at logical expression na nagpapahintulot sa iyong code na suriin ang mga sitwasyon at tumugon nang naaangkop. ## Pre-Lecture Quiz Pre-lecture quiz Ang kakayahang gumawa ng desisyon at kontrolin ang daloy ng programa ay isang mahalagang aspeto ng programming. Saklaw ng seksyong ito kung paano kontrolin ang execution path ng iyong mga JavaScript program gamit ang Boolean values at conditional logic. [](https://youtube.com/watch?v=SxTp8j-fMMY "Paggawa ng Desisyon") ## Maikling Pagbabalik-tanaw sa Booleans Bago suriin ang paggawa ng desisyon, balikan natin ang Boolean values mula sa nakaraang aralin. Pinangalanan mula sa mathematician na si George Boole, ang mga value na ito ay kumakatawan sa binary states – alinman true o false. Walang kalabuan, walang gitnang estado. Ang mga binary value na ito ang bumubuo sa pundasyon ng lahat ng computational logic. Ang bawat desisyon na ginagawa ng iyong programa ay sa huli ay nagreresulta sa isang Boolean evaluation. Ang paggawa ng Boolean variables ay simple: Ito ay lumilikha ng dalawang variable na may explicit na Boolean values. ✅ Ang Booleans ay pinangalanan mula sa English mathematician, philosopher, at logician na si George Boole (1815–1864). ## Mga Comparison Operator at Booleans Sa praktika, bihira kang mag-set ng Boolean values nang manu-mano. Sa halip, gagawa ka ng mga ito sa pamamagitan ng pagsusuri ng mga kondisyon: "Mas malaki ba ang numerong ito kaysa sa isa?" o "Magkakapareho ba ang mga value na ito?" Ang mga comparison operator ang nagbibigay-daan sa mga pagsusuring ito. Kinukumpara nila ang mga value at nagbabalik ng Boolean results batay sa relasyon ng mga operand. ✅ Subukan ang iyong kaalaman sa pamamagitan ng pagsusulat ng ilang mga comparison sa console ng iyong browser. May data bang nagbalik na ikinagulat mo? ### 🧠 Pag-master ng Comparison: Pag-unawa sa Boolean Logic Subukan ang iyong pag-unawa sa comparison: - Bakit sa tingin mo mas karaniwang ginagamit ang === (strict equality) kaysa sa == (loose equality)? - Kaya mo bang hulaan kung ano ang ibabalik ng 5 === '5'? Paano naman ang 5 == '5'? - Ano ang pagkakaiba ng !== at !=? ## If Statement Ang if statement ay parang pagtatanong sa iyong code. "Kung ang kondisyong ito ay totoo, gawin ang bagay na ito." Marahil ito ang pinakamahalagang tool na gagamitin mo para sa paggawa ng desisyon sa JavaScript. Ganito ito gumagana: Ang kondisyon ay inilalagay sa loob ng parentheses, at kung ito ay true, tatakbo ang JavaScript sa code sa loob ng curly braces. Kung ito ay false, lalaktawan lang ng JavaScript ang buong block. Madalas mong gagamitin ang mga comparison operator upang lumikha ng mga kondisyong ito. Tingnan natin ang isang praktikal na halimbawa: Dahil ang 1000 >= 800 ay nag-evaluate sa true, ang code sa loob ng block ay tatakbo, na magpapakita ng "Getting a new laptop!" sa console. ## If..Else Statement Pero paano kung gusto mong gawin ng iyong programa ang ibang bagay kapag ang kondisyon ay false? Dito papasok ang else – parang may backup plan ka. Ang else statement ay nagbibigay sa iyo ng paraan upang sabihin "kung ang kondisyong ito ay hindi totoo, gawin ang ibang bagay na ito." Ngayon, dahil ang 500 >= 800 ay false, lalaktawan ng JavaScript ang unang block at tatakbo sa else block. Makikita mo ang "Can't afford a new laptop, yet!" sa console. ✅ Subukan ang iyong pag-unawa sa code na ito at sa susunod na code sa pamamagitan ng pagpapatakbo nito sa console ng browser. Palitan ang mga value ng mga variable na currentMoney at laptopPrice upang baguhin ang ibinalik na console.log(). ### 🎯 Pagsusuri ng If-Else Logic: Mga Sanga ng Landas Suriin ang iyong pag-unawa sa conditional logic: - Ano ang mangyayari kung ang currentMoney ay eksaktong katumbas ng laptopPrice? - Makakaisip ka ba ng isang sitwasyon sa totoong buhay kung saan magiging kapaki-pakinabang ang if-else logic? - Paano mo ito mapapalawak upang hawakan ang maraming saklaw ng presyo? ## Switch Statement Minsan kailangan mong ikumpara ang isang value laban sa maraming opsyon. Bagama't maaari kang mag-chain ng maraming if..else statements, nagiging magulo ang ganitong paraan. Ang switch statement ay nagbibigay ng mas malinis na istruktura para sa paghawak ng maraming discrete na value. Ang konsepto ay kahalintulad ng mechanical switching systems na ginamit sa mga unang telephone exchanges – isang input value ang tumutukoy kung aling partikular na landas ang susundan ng execution. Ganito ang istruktura: - Sinusuri ng JavaScript ang expression nang isang beses - Tinitingnan nito ang bawat case upang makahanap ng tugma - Kapag nakahanap ng tugma, tatakbo ang code block na iyon - Ang break ay nagsasabi sa JavaScript na huminto at lumabas sa switch - Kung walang tugma sa mga case, tatakbo ang default block (kung mayroon ka nito) Sa halimbawang ito, nakikita ng JavaScript na ang dayNumber ay 2, hinahanap ang tugmang case 2, itinatakda ang dayName sa "Tuesday", at pagkatapos ay lumalabas sa switch. Ang resulta? "Today is Tuesday" ang makikita sa console. ✅ Subukan ang iyong pag-unawa sa code na ito at sa susunod na code sa pamamagitan ng pagpapatakbo nito sa console ng browser. Palitan ang mga value ng variable a upang baguhin ang ibinalik na console.log(). ### 🔄 Pag-master ng Switch Statement: Maraming Opsyon Subukan ang iyong pag-unawa sa switch: - Ano ang mangyayari kung nakalimutan mo ang break statement? - Kailan mo gagamitin ang switch sa halip na maraming if-else statements? - Bakit kapaki-pakinabang ang default case kahit na sa tingin mo ay nasaklaw mo na ang lahat ng posibilidad? ## Logical Operators at Booleans Ang mga kumplikadong desisyon ay madalas na nangangailangan ng pagsusuri ng maraming kondisyon nang sabay-sabay. Katulad ng Boolean algebra na nagpapahintulot sa mga mathematician na pagsamahin ang mga logical expression, nagbibigay ang programming ng logical operators upang ikonekta ang maraming Boolean na kondisyon. Ang mga operator na ito ay nagbibigay-daan sa sopistikadong conditional logic sa pamamagitan ng pagsasama-sama ng mga simpleng true/false evaluations. Ang mga operator na ito ay nagbibigay-daan sa iyo na pagsamahin ang mga kondisyon sa kapaki-pakinabang na paraan: - AND (&&) nangangahulugan na parehong kondisyon ay dapat true - OR (||) nangangahulugan na kahit isa sa kondisyon ay dapat true - NOT (!) binabaliktad ang true sa false (at kabaliktaran) ## Mga Kondisyon at Desisyon gamit ang Logical Operators Tingnan natin ang mga logical operator na ito sa aksyon gamit ang mas makatotohanang halimbawa: Sa halimbawang ito: kinakalkula natin ang 20% discount price (640), pagkatapos ay sinusuri kung ang ating available funds ay sapat para sa buong presyo O sa discounted price. Dahil ang 600 ay tumutugma sa threshold ng discounted price na 640, ang kondisyon ay nag-evaluate sa true. ### 🧮 Pagsusuri ng Logical Operators: Pagsasama-sama ng Kondisyon Subukan ang iyong pag-unawa sa logical operator: - Sa expression na A && B, ano ang mangyayari kung ang A ay false? Ang B ba ay susuriin pa? - Makakaisip ka ba ng sitwasyon kung saan kakailanganin mo ang lahat ng tatlong operator (&&, ||, !)? - Ano ang pagkakaiba ng !user.isActive at user.isActive !== true? ### Negation Operator Minsan mas madali ang mag-isip tungkol sa kung kailan ang isang bagay ay HINDI totoo. Tulad ng sa halip na magtanong "Naka-log in ba ang user?", baka gusto mong magtanong "Hindi ba naka-log in ang user?" Ang exclamation mark (!) operator ang nagbabaliktad ng logic para sa iyo. Ang ! operator ay parang sinasabi "ang kabaligtaran ng..." – kung ang isang bagay ay true, ginagawang false ng !, at kabaliktaran. ### Ternary Expressions Para sa simpleng conditional assignments, nagbibigay ang JavaScript ng ternary operator. Ang maikling syntax na ito ay nagbibigay-daan sa iyo na magsulat ng conditional expression sa isang linya, kapaki-pakinabang kapag kailangan mong mag-assign ng isa sa dalawang value batay sa kondisyon. Binabasa ito na parang tanong: "Ang kondisyong ito ba ay totoo? Kung oo, gamitin ang value na ito. Kung hindi, gamitin ang value na iyon." Narito ang mas konkretong halimbawa: ✅ Maglaan ng sandali upang basahin ang code na ito nang ilang beses. Nauunawaan mo ba kung paano gumagana ang mga operator na ito? Narito ang sinasabi ng linyang ito: "Mas mataas ba ang firstNumber kaysa sa secondNumber? Kung oo, ilagay ang firstNumber sa biggestNumber. Kung hindi, ilagay ang secondNumber sa biggestNumber." Ang ternary operator ay mas maikling paraan lamang upang isulat ang tradisyunal na if..else statement: Parehong nagbubunga ng magkaparehong resulta ang dalawang paraan. Ang ternary operator ay nag-aalok ng pagiging maikli, habang ang tradisyunal na if-else na istruktura ay maaaring mas madaling basahin para sa mas kumplikadong kondisyon. --- ## 🚀 Hamon Gumawa ng programa na unang isinulat gamit ang logical operators, at pagkatapos ay isulat muli ito gamit ang ternary expression. Ano ang mas gusto mong syntax? --- ## Hamon ng GitHub Copilot Agent 🚀 Gamitin ang Agent mode upang kumpletuhin ang sumusunod na hamon: Deskripsyon: Gumawa ng komprehensibong grade calculator na nagpapakita ng maraming konsepto ng paggawa ng desisyon mula sa araling ito, kabilang ang if-else statements, switch statements, logical operators, at ternary expressions. Prompt: Sumulat ng JavaScript program na tumatanggap ng numerical score ng isang estudyante (0-100) at tinutukoy ang kanilang letter grade gamit ang sumusunod na pamantayan: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Mas mababa sa 60 Mga Kinakailangan: 1. Gumamit ng if-else statement upang matukoy ang letter grade 2. Gumamit ng mga logical operator para suriin kung pasado ang estudyante (grade >= 60) AT may honors (grade >= 90) 3. Gumamit ng switch statement para magbigay ng partikular na feedback para sa bawat letter grade 4. Gumamit ng ternary operator para matukoy kung kwalipikado ang estudyante para sa susunod na kurso (grade >= 70) 5. Maglagay ng input validation para masigurong ang score ay nasa pagitan ng 0 at 100 Subukan ang iyong programa gamit ang iba't ibang scores kabilang ang mga edge cases tulad ng 59, 60, 89, 90, at mga invalid na input. Alamin pa ang tungkol sa agent mode dito. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Basahin pa ang tungkol sa iba't ibang operators na magagamit ng user sa MDN. Suriin ang kahanga-hangang operator lookup ni Josh Comeau! ## Assignment Operators --- ## 🧠 Buod ng Iyong Decision-Making Toolkit --- ## 🚀 Ang Iyong JavaScript Decision-Making Mastery Timeline ### ⚡ Mga Magagawa Mo sa Loob ng Susunod na 5 Minuto - [ ] Magpraktis ng comparison operators sa browser console - [ ] Gumawa ng simpleng if-else statement na sumusuri sa iyong edad - [ ] Subukan ang hamon: isulat muli ang isang if-else gamit ang ternary operator - [ ] Subukan kung ano ang mangyayari sa iba't ibang "truthy" at "falsy" values ### 🎯 Mga Magagawa Mo sa Loob ng Isang Oras - [ ] Kumpletuhin ang post-lesson quiz at suriin ang anumang nakakalitong konsepto - [ ] Bumuo ng komprehensibong grade calculator mula sa GitHub Copilot challenge - [ ] Gumawa ng simpleng decision tree para sa isang real-world na sitwasyon (tulad ng pagpili ng isusuot) - [ ] Magpraktis ng pagsasama-sama ng maraming kondisyon gamit ang logical operators - [ ] Mag-eksperimento sa switch statements para sa iba't ibang gamit ### 📅 Logic Mastery Mo sa Loob ng Isang Linggo - [ ] Kumpletuhin ang operators assignment gamit ang mga malikhaing halimbawa - [ ] Bumuo ng mini quiz application gamit ang iba't ibang conditional structures - [ ] Gumawa ng form validator na sumusuri sa maraming kondisyon ng input - [ ] Magpraktis ng mga exercise sa operator lookup ni Josh Comeau - [ ] I-refactor ang umiiral na code para gumamit ng mas angkop na conditional structures - [ ] Pag-aralan ang short-circuit evaluation at ang mga implikasyon nito sa performance ### 🌟 Transformation Mo sa Loob ng Isang Buwan - [ ] Masterin ang mga complex nested conditions at panatilihin ang readability ng code - [ ] Bumuo ng application na may sopistikadong decision-making logic - [ ] Mag-ambag sa open source sa pamamagitan ng pagpapabuti ng conditional logic sa umiiral na mga proyekto - [ ] Magturo sa iba tungkol sa iba't ibang conditional structures at kung kailan gagamitin ang bawat isa - [ ] Tuklasin ang mga functional programming approach sa conditional logic - [ ] Gumawa ng personal na reference guide para sa mga best practices sa conditional logic ### 🏆 Final Decision-Making Champion Check-in I-celebrate ang iyong mastery sa logical thinking: - Ano ang pinaka-komplikadong decision logic na matagumpay mong na-implement? - Aling conditional structure ang pinaka-natural para sa iyo at bakit? - Paano binago ng pag-aaral tungkol sa logical operators ang iyong paraan ng paglutas ng problema? - Anong real-world application ang makikinabang sa sopistikadong decision-making logic? --- Paunawa: Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagamat sinisikap naming maging tumpak, pakatandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.

javascript

Mga Pangunahing Kaalaman sa JavaScript: Arrays at Loops

## Pre-Lecture Quiz Pre-lecture quiz Naisip mo na ba kung paano nagtatala ang mga website ng mga item sa shopping cart o nagpapakita ng listahan ng mga kaibigan? Diyan pumapasok ang arrays at loops. Ang arrays ay parang mga digital na lalagyan na nag-iimbak ng maraming impormasyon, habang ang loops ay nagbibigay-daan sa iyo na magtrabaho sa lahat ng data nang epektibo nang hindi inuulit ang code. Ang dalawang konseptong ito ay bumubuo ng pundasyon para sa paghawak ng impormasyon sa iyong mga programa. Matututo kang lumipat mula sa manu-manong pagsusulat ng bawat hakbang patungo sa paggawa ng matalino at epektibong code na maaaring magproseso ng daan-daang o libu-libong item nang mabilis. Sa pagtatapos ng araling ito, maiintindihan mo kung paano magawa ang mga kumplikadong gawain sa data gamit ang ilang linya ng code lamang. Tuklasin natin ang mga mahahalagang konsepto sa programming na ito. [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Isipin ang arrays bilang isang digital na filing cabinet - sa halip na mag-imbak ng isang dokumento bawat drawer, maaari mong ayusin ang maraming kaugnay na item sa isang solong, maayos na lalagyan. Sa mga termino ng programming, ang arrays ay nagbibigay-daan sa iyo na mag-imbak ng maraming piraso ng impormasyon sa isang maayos na pakete. Kung ikaw ay gumagawa ng photo gallery, nagma-manage ng to-do list, o nagtatala ng mga high scores sa isang laro, ang arrays ang pundasyon para sa organisasyon ng data. Tingnan natin kung paano ito gumagana. ✅ Ang arrays ay nasa paligid natin! Makakaisip ka ba ng isang halimbawa ng array sa totoong buhay, tulad ng isang solar panel array? ### Paglikha ng Arrays Napakadaling gumawa ng array - gumamit lang ng square brackets! Ano ang nangyayari dito? Kakagawa mo lang ng isang walang laman na lalagyan gamit ang mga square brackets []. Isipin ito na parang isang walang laman na istante ng aklatan - handa na itong maglaman ng anumang mga aklat na nais mong ayusin doon. Maaari mo ring punan ang iyong array ng mga paunang halaga mula sa simula: Mga cool na bagay na mapapansin: - Maaari kang mag-imbak ng text, numero, o kahit mga true/false na halaga sa parehong array - Paghiwalayin lang ang bawat item gamit ang comma - madali! - Perpekto ang arrays para sa pag-iimbak ng mga kaugnay na impormasyon ### Pag-index ng Array Narito ang isang bagay na maaaring mukhang hindi pangkaraniwan sa simula: ang mga array ay nagbibilang ng kanilang mga item simula sa 0, hindi 1. Ang zero-based indexing na ito ay may ugat sa kung paano gumagana ang memorya ng computer - ito ay naging isang programming convention mula pa noong unang panahon ng mga wika sa programming tulad ng C. Ang bawat puwesto sa array ay may sariling numero ng address na tinatawag na index. ✅ Nagulat ka ba na ang arrays ay nagsisimula sa zero index? Sa ilang programming languages, ang mga index ay nagsisimula sa 1. Mayroong isang kawili-wiling kasaysayan tungkol dito, na maaari mong basahin sa Wikipedia. Pag-access sa mga Elemento ng Array: Pag-unawa sa nangyayari dito: - Gumagamit ng square bracket notation na may numero ng index para ma-access ang mga elemento - Nagbabalik ng halaga na nakaimbak sa partikular na posisyon sa array - Nagsisimula sa pagbilang mula sa 0, kaya ang unang elemento ay index 0 Pagbabago ng mga Elemento ng Array: Sa itaas, ginawa natin: - Binago ang elemento sa index 4 mula "Rocky Road" patungong "Butter Pecan" - Nagdagdag ng bagong elemento "Cookie Dough" sa index 5 - Pinalawak ang haba ng array nang awtomatiko kapag nagdagdag ng lampas sa kasalukuyang hangganan ### Haba ng Array at Karaniwang Mga Pamamaraan Ang arrays ay may mga built-in na properties at methods na nagpapadali sa pagtrabaho sa data. Paghanap ng Haba ng Array: Mga mahalagang punto na dapat tandaan: - Nagbabalik ng kabuuang bilang ng mga elemento sa array - Ina-update nang awtomatiko kapag may idinagdag o tinanggal na mga elemento - Nagbibigay ng dynamic na bilang na kapaki-pakinabang para sa loops at validation Mahahalagang Pamamaraan ng Array: Pag-unawa sa mga pamamaraang ito: - Nagdaragdag ng mga elemento gamit ang push() (dulo) at unshift() (simula) - Nag-aalis ng mga elemento gamit ang pop() (dulo) at shift() (simula) - Hinahanap ang mga elemento gamit ang indexOf() at sinusuri ang pagkakaroon gamit ang includes() - Nagbabalik ng mga kapaki-pakinabang na halaga tulad ng mga tinanggal na elemento o mga posisyon ng index ✅ Subukan mo ito! Gumamit ng console ng browser para gumawa at manipulahin ang isang array na ikaw mismo ang lumikha. ### 🧠 Pag-check ng Mga Pangunahing Kaalaman sa Array: Pag-aayos ng Iyong Data Subukan ang iyong kaalaman sa array: - Bakit sa tingin mo nagsisimula ang arrays sa pagbilang mula sa 0 sa halip na 1? - Ano ang mangyayari kung susubukan mong i-access ang isang index na hindi umiiral (tulad ng arr[100] sa isang 5-element array)? - Makakaisip ka ba ng tatlong sitwasyon sa totoong buhay kung saan magiging kapaki-pakinabang ang arrays? ## Loops Isipin ang sikat na parusa mula sa mga nobela ni Charles Dickens kung saan kailangang magsulat ng mga linya nang paulit-ulit ang mga estudyante sa isang slate. Isipin kung maaari mong simpleng utusan ang isang tao na "isulat ang pangungusap na ito ng 100 beses" at magawa ito nang awtomatiko. Iyan ang eksaktong ginagawa ng loops para sa iyong code. Ang loops ay parang may walang pagod na katulong na maaaring ulitin ang mga gawain nang walang error. Kung kailangan mong suriin ang bawat item sa shopping cart o ipakita ang lahat ng mga larawan sa isang album, ang loops ang humahawak sa pag-uulit nang epektibo. Nagbibigay ang JavaScript ng ilang uri ng loops na maaari mong pagpilian. Tingnan natin ang bawat isa at unawain kung kailan ito gagamitin. ### For Loop Ang for loop ay parang pag-set ng timer - alam mo nang eksakto kung ilang beses mo gustong mangyari ang isang bagay. Napaka-organisado at predictable nito, kaya perpekto ito kapag nagtatrabaho ka sa arrays o kailangang magbilang ng mga bagay. Struktura ng For Loop: Hakbang-hakbang, narito ang nangyayari: - Nagsisimula ang counter variable i sa 0 sa simula - Sinusuri ang kondisyon i < 10 bago ang bawat iteration - Isinasagawa ang code block kapag ang kondisyon ay totoo - Ina-update ang i ng 1 pagkatapos ng bawat iteration gamit ang i++ - Humihinto kapag ang kondisyon ay naging false (kapag umabot ang i sa 10) ✅ Patakbuhin ang code na ito sa console ng browser. Ano ang nangyayari kapag gumawa ka ng maliliit na pagbabago sa counter, kondisyon, o expression ng iteration? Kaya mo bang gawing paatras ito, na gumagawa ng countdown? ### 🗓️ Pag-check ng Mastery sa For Loop: Kinokontrol na Pag-uulit Suriin ang iyong kaalaman sa for loop: - Ano ang tatlong bahagi ng isang for loop, at ano ang ginagawa ng bawat isa? - Paano mo i-loop ang isang array nang paatras? - Ano ang mangyayari kung nakalimutan mo ang bahagi ng increment (i++)? ### While Loop Ang while loop ay parang sinasabi na "patuloy na gawin ito hanggang..." - maaaring hindi mo alam nang eksakto kung ilang beses itong tatakbo, pero alam mo kung kailan titigil. Perpekto ito para sa mga bagay tulad ng paghingi ng input mula sa user hanggang sa ibigay nila ang kailangan mo, o paghahanap sa data hanggang sa makita mo ang hinahanap mo. Mga Katangian ng While Loop: - Nagpapatuloy sa pag-execute hangga't ang kondisyon ay totoo - Nangangailangan ng manu-manong pamamahala ng anumang counter variables - Sinusuri ang kondisyon bago ang bawat iteration - May panganib ng infinite loops kung ang kondisyon ay hindi kailanman magiging false Pag-unawa sa mga halimbawa: - Pinamamahalaan ang counter variable i nang manu-mano sa loob ng loop body - Ina-update ang counter para maiwasan ang infinite loops - Nagpapakita ng praktikal na paggamit sa input ng user at limitasyon ng mga pagtatangka - Kasama ang mga safety mechanisms para maiwasan ang walang katapusang execution ### ♾️ Pag-check ng Karunungan sa While Loop: Pag-uulit Batay sa Kondisyon Subukan ang iyong kaalaman sa while loop: - Ano ang pangunahing panganib kapag gumagamit ng while loops? - Kailan mo pipiliin ang while loop kaysa sa for loop? - Paano mo maiiwasan ang infinite loops? ### Mga Modernong Alternatibo sa Loop Nag-aalok ang JavaScript ng modernong syntax ng loop na maaaring gawing mas nababasa at mas kaunti ang error sa iyong code. For...of Loop (ES6+): Mga pangunahing bentahe ng for...of: - Inaalis ang pamamahala ng index at potensyal na mga error sa off-by-one - Nagbibigay ng direktang access sa mga elemento ng array - Pinapabuti ang readability ng code at binabawasan ang syntax complexity Pamamaraan ng forEach: Mga dapat mong malaman tungkol sa forEach: - Isinasagawa ang isang function para sa bawat elemento ng array - Nagbibigay ng parehong halaga ng elemento at index bilang mga parameter - Hindi maaaring ihinto nang maaga (hindi tulad ng tradisyunal na loops) - Nagbabalik ng undefined (hindi gumagawa ng bagong array) ✅ Bakit mo pipiliin ang for loop kumpara sa while loop? 17K na mga manonood ang may parehong tanong sa StackOverflow, at ang ilan sa mga opinyon maaaring maging kawili-wili sa iyo. ### 🎨 Pag-check ng Modernong Syntax ng Loop: Pagtanggap sa ES6+ Suriin ang iyong kaalaman sa modernong JavaScript: - Ano ang mga bentahe ng for...of kumpara sa tradisyunal na for loops? - Kailan mo mas pipiliin ang tradisyunal na for loops? - Ano ang pagkakaiba ng forEach at map? ## Loops at Arrays Ang pagsasama ng arrays sa loops ay lumilikha ng makapangyarihang kakayahan sa pagproseso ng data. Ang kombinasyong ito ay mahalaga sa maraming gawain sa programming, mula sa pagpapakita ng mga listahan hanggang sa pagkalkula ng mga istatistika. Tradisyunal na Pagproseso ng Array: Unawain ang bawat paraan: - Gumagamit ng property ng haba ng array para matukoy ang hangganan ng loop - Ina-access ang mga elemento sa pamamagitan ng index sa tradisyunal na for loops - Nagbibigay ng direktang access sa mga elemento sa for...of loops - Pinoproseso ang bawat elemento ng array nang eksakto isang beses Halimbawa ng Praktikal na Pagproseso ng Data: Narito kung paano gumagana ang code na ito: - Nagsisimula ng mga tracking variables para sa kabuuan at extremes - Pinoproseso ang bawat grade gamit ang isang epektibong loop - Nag-iipon ng kabuuan para sa pagkalkula ng average - Nagtatala ng pinakamataas at pinakamababang halaga sa panahon ng iteration - Kinakalkula ang panghuling istatistika pagkatapos ng loop ✅ Subukan ang pag-loop sa isang array na ikaw mismo ang lumikha sa console ng iyong browser. --- ## Hamon ng GitHub Copilot Agent 🚀 Gamitin ang Agent mode para tapusin ang sumusunod na hamon: Deskripsyon: Gumawa ng komprehensibong function sa pagproseso ng data na pinagsasama ang arrays at loops para suriin ang isang dataset at makabuo ng makabuluhang mga insight. Prompt: Gumawa ng function na tinatawag na analyzeGrades na tumatanggap ng array ng mga object ng grade ng estudyante (bawat isa ay naglalaman ng name at score properties) at nagbabalik ng object na may mga istatistika kabilang ang pinakamataas na score, pinakamababang score, average score, bilang ng mga estudyanteng pumasa (score >= 70), at isang array ng mga pangalan ng estudyante na nakakuha ng score na mas mataas sa average. Gumamit ng hindi bababa sa dalawang magkaibang uri ng loop sa iyong solusyon. Alamin pa ang tungkol sa agent mode dito. ## 🚀 Hamon Nag-aalok ang JavaScript ng ilang modernong pamamaraan para sa array na maaaring pumalit sa tradisyunal na mga loop para sa partikular na mga gawain. Tuklasin ang forEach, for-of, map, filter, at reduce. Ang iyong hamon: I-refactor ang halimbawa ng mga grado ng estudyante gamit ang hindi bababa sa tatlong iba't ibang pamamaraan para sa array. Pansinin kung gaano kalinis at mas madaling basahin ang code gamit ang modernong syntax ng JavaScript. ## Post-Lecture Quiz Post-lecture quiz ## Review & Self Study Ang mga array sa JavaScript ay may maraming mga pamamaraan na nakakabit sa kanila, na napaka-kapaki-pakinabang para sa pagmamanipula ng data. Basahin ang tungkol sa mga pamamaraang ito at subukan ang ilan sa mga ito (tulad ng push, pop, slice, at splice) sa isang array na iyong ginawa. ## Assignment Loop an Array --- ## 📊 Buod ng Iyong Toolkit para sa Arrays at Loops --- ## 🚀 Timeline ng Iyong Mastery sa Arrays at Loops ### ⚡ Ano ang Magagawa Mo sa Susunod na 5 Minuto - [ ] Gumawa ng array ng iyong mga paboritong pelikula at i-access ang mga partikular na elemento - [ ] Sumulat ng isang for loop na nagbibilang mula 1 hanggang 10 - [ ] Subukan ang hamon sa modernong pamamaraan ng array mula sa aralin - [ ] Magpraktis ng pag-index ng array sa console ng iyong browser ### 🎯 Ano ang Maaaring Makamit Mo sa Loob ng Isang Oras - [ ] Kumpletuhin ang post-lesson quiz at suriin ang anumang mahirap na konsepto - [ ] Bumuo ng komprehensibong grade analyzer mula sa hamon ng GitHub Copilot - [ ] Gumawa ng simpleng shopping cart na nagdadagdag at nag-aalis ng mga item - [ ] Magpraktis ng pag-convert sa pagitan ng iba't ibang uri ng loop - [ ] Mag-eksperimento sa mga pamamaraan ng array tulad ng push, pop, slice, at splice ### 📅 Ang Iyong Lingguhang Paglalakbay sa Pagproseso ng Data - [ ] Kumpletuhin ang "Loop an Array" na assignment na may malikhaing mga pagpapahusay - [ ] Bumuo ng isang to-do list application gamit ang arrays at loops - [ ] Gumawa ng simpleng calculator ng istatistika para sa numerikal na data - [ ] Magpraktis gamit ang MDN array methods - [ ] Bumuo ng photo gallery o music playlist interface - [ ] Tuklasin ang functional programming gamit ang map, filter, at reduce ### 🌟 Ang Iyong Buwanang Transformasyon - [ ] Masterin ang advanced na mga operasyon sa array at pag-optimize ng performance - [ ] Bumuo ng kumpletong dashboard para sa data visualization - [ ] Mag-ambag sa mga open source na proyekto na may kaugnayan sa pagproseso ng data - [ ] Magturo sa iba tungkol sa arrays at loops gamit ang mga praktikal na halimbawa - [ ] Gumawa ng personal na library ng mga reusable na function para sa pagproseso ng data - [ ] Tuklasin ang mga algorithm at istruktura ng data na nakabatay sa arrays ### 🏆 Huling Check-in para sa Data Processing Champion I-celebrate ang iyong mastery sa arrays at loops: - Ano ang pinaka-kapaki-pakinabang na operasyon sa array na natutunan mo para sa mga aplikasyon sa totoong mundo? - Aling uri ng loop ang pinaka-natural para sa iyo at bakit? - Paano binago ng pag-unawa sa arrays at loops ang iyong paraan ng pag-oorganisa ng data? - Anong masalimuot na gawain sa pagproseso ng data ang nais mong harapin sa susunod? --- Paunawa: Ang dokumentong ito ay isinalin gamit ang AI translation service Co-op Translator. Bagamat sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na mapagkakatiwalaang pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.

javascript,array,loop

JavaScript'e Giriş

JavaScript, web'in dilidir. Bu dört derste, temel bilgilerini öğreneceksiniz. ### Konular 1. Değişkenler ve Veri Türleri 2. Fonksiyonlar ve Metotlar 3. JavaScript ile Karar Verme 4. Diziler ve Döngüler ### Katkıda Bulunanlar Bu dersler, Jasmine Greenaway, Christopher Harrison ve Chris Noring tarafından ♥️ ile yazılmıştır. Feragatname: Bu belge, Co-op Translator adlı bir yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel bir insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.

javascript

JavaScript Temelleri: Veri Türleri

Veri türleri, JavaScript'te yazacağınız her programda karşılaşacağınız temel kavramlardan biridir. Veri türlerini, antik İskenderiye kütüphanecilerinin kullandığı dosyalama sistemi gibi düşünebilirsiniz – şiir, matematik ve tarih kayıtlarını içeren parşömenler için belirli yerler vardı. JavaScript, bilgiyi benzer şekilde farklı veri türleriyle organize eder. Bu derste, JavaScript'in çalışmasını sağlayan temel veri türlerini keşfedeceğiz. Sayılar, metinler, doğru/yanlış değerleriyle nasıl çalışacağınızı öğrenecek ve doğru türü seçmenin programlarınız için neden önemli olduğunu anlayacaksınız. Bu kavramlar başlangıçta soyut görünebilir, ancak pratik yaptıkça doğal hale gelecek. Veri türlerini anlamak, JavaScript'teki diğer her şeyi çok daha net hale getirecek. Tıpkı bir katedral inşa etmeden önce farklı yapı malzemelerini anlaması gereken bir mimar gibi, bu temeller ileride inşa edeceğiniz her şeyi destekleyecek. ## Ders Öncesi Test Ders öncesi test Bu ders, webde etkileşim sağlayan dil olan JavaScript'in temellerini kapsar. [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript'te Değişkenler") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript'te Veri Türleri") Haydi değişkenler ve onları dolduran veri türleriyle başlayalım! ## Değişkenler Değişkenler, programlamanın temel yapı taşlarıdır. Ortaçağ simyacılarının farklı maddeleri saklamak için kullandıkları etiketli kavanozlar gibi, değişkenler bilgiyi saklamanıza ve daha sonra başvurabilmeniz için ona açıklayıcı bir isim vermenize olanak tanır. Birinin yaşını hatırlamanız mı gerekiyor? age adlı bir değişkende saklayın. Bir kullanıcının adını mı takip etmek istiyorsunuz? userName adlı bir değişkende tutun. Burada JavaScript'te değişkenler oluşturmanın modern yaklaşımına odaklanacağız. Burada öğreneceğiniz teknikler, yıllar süren dil evriminin ve programlama topluluğu tarafından geliştirilen en iyi uygulamaların bir sonucudur. Bir değişken oluşturmak ve tanımlamak şu sözdizimini takip eder: [anahtar kelime] [isim]. İki bölümden oluşur: - Anahtar kelime. Değişebilen değişkenler için let, sabit kalan değerler için const kullanın. - Değişken adı, bu sizin seçtiğiniz açıklayıcı bir isimdir. ✅ ES6'da tanıtılan let anahtar kelimesi, değişkeninize bir tür _blok kapsamı_ sağlar. let veya const kullanmanız, eski var anahtar kelimesi yerine önerilir. Blok kapsamlarını daha ayrıntılı olarak ilerleyen bölümlerde ele alacağız. ### Görev - Değişkenlerle Çalışmak 1. Bir değişken tanımlayın. İlk değişkenimizi oluşturarak başlayalım: ```javascript let myVariable; ``` Bu ne işe yarar: - JavaScript'e myVariable adlı bir depolama yeri oluşturmasını söyler - JavaScript bu değişken için bellekte yer ayırır - Değişken şu anda bir değere sahip değil (undefined) 2. Ona bir değer verin. Şimdi değişkenimize bir şey koyalım: ```javascript myVariable = 123; ``` Atama nasıl çalışır: - = operatörü, değişkenimize 123 değerini atar - Değişken artık bu değeri içerir ve undefined değildir - Kodunuzda bu değeri myVariable kullanarak referans alabilirsiniz > Not: Bu derste = kullanımı, bir değişkene değer atamak için kullanılan bir "atama operatörü" anlamına gelir. Eşitlik anlamına gelmez. 3. Akıllıca yapın. Aslında, bu iki adımı birleştirelim: ```javascript let myVariable = 123; ``` Bu yaklaşım daha verimlidir: - Değişkeni tanımlıyor ve bir değeri tek bir ifadede atıyorsunuz - Bu, geliştiriciler arasında standart bir uygulamadır - Kod uzunluğunu azaltırken açıklığı korur 4. Fikrini değiştir. Peki ya farklı bir sayı saklamak istersek? ```javascript myVariable = 321; ``` Yeniden atamayı anlamak: - Değişken artık 321 yerine 123 içeriyor - Önceki değer değiştirildi – değişkenler aynı anda yalnızca bir değer saklar - Bu değişebilirlik, let ile tanımlanan değişkenlerin temel özelliğidir ✅ Deneyin! JavaScript'i doğrudan tarayıcınızda yazabilirsiniz. Bir tarayıcı penceresi açın ve Geliştirici Araçları'na gidin. Konsolda bir istem bulacaksınız; let myVariable = 123 yazın, enter tuşuna basın, ardından myVariable yazın. Ne oluyor? Bu kavramlar hakkında daha fazla bilgiyi sonraki derslerde öğreneceksiniz. ### 🧠 Değişkenlerde Ustalık Testi: Rahat Hissetmek Değişkenler hakkında ne kadar bilgi sahibisiniz? - Bir değişkeni tanımlamak ile ona değer atamak arasındaki farkı açıklayabilir misiniz? - Bir değişkeni tanımlamadan önce kullanmaya çalışırsanız ne olur? - Bir değişken için let yerine const kullanmayı ne zaman tercih edersiniz? ## Sabitler Bazen program çalışırken asla değişmemesi gereken bilgileri saklamanız gerekir. Sabitleri, antik Yunan'da Euclid'in kurduğu matematiksel prensipler gibi düşünebilirsiniz – bir kez kanıtlanıp belgelenince, gelecekteki tüm referanslar için sabit kalırlar. Sabitler, değişkenlere benzer şekilde çalışır, ancak önemli bir kısıtlama ile: bir kez değer atandıktan sonra değiştirilemezler. Bu değişmezlik, programınızdaki kritik değerlerin yanlışlıkla değiştirilmesini önlemeye yardımcı olur. Bir sabitin tanımlanması ve başlatılması, bir değişkenle aynı kavramları takip eder, ancak const anahtar kelimesi kullanılır. Sabitler genellikle büyük harflerle tanımlanır. Bu kodun yaptığı şey: - Bir sabit olan MY_VARIABLE adında bir değişken oluşturur ve ona 123 değerini atar - Büyük harf adlandırma kuralını sabitler için kullanır - Gelecekteki değişiklikleri bu değere karşı engeller Sabitlerin iki ana kuralı vardır: - Hemen bir değer vermelisiniz – boş sabitlere izin verilmez! - Bu değeri asla değiştiremezsiniz – JavaScript bunu denerseniz bir hata verir. Ne demek istediğimi görelim: Basit değer - Aşağıdaki işlem İZİN VERİLMEZ: ```javascript const PI = 3; PI = 4; // izin verilmez ``` Hatırlamanız gerekenler: - Sabitin yeniden atanması hata oluşturur - Önemli değerleri yanlışlıkla değişikliklerden korur - Değerin program boyunca tutarlı kalmasını sağlar Nesne referansı korunur - Aşağıdaki işlem İZİN VERİLMEZ: ```javascript const obj = { a: 3 }; obj = { b: 5 } // izin verilmez ``` Bu kavramları anlamak: - Tüm nesnenin yenisiyle değiştirilmesini engeller - Orijinal nesneye olan referansı korur - Nesnenin kimliğini bellekte tutar Nesne değeri korunmaz - Aşağıdaki işlem İZİN VERİLİR: ```javascript const obj = { a: 3 }; obj.a = 5; // izin verilir ``` Burada olanlar: - Nesne içindeki özellik değerini değiştirir - Aynı nesne referansını korur - Gösterir ki nesne içeriği değişebilir, ancak referans sabit kalır > Not, bir const referansın yeniden atanmasını engeller. Ancak değer tamamen _değişmez_ değildir ve özellikle bir nesne gibi karmaşık yapılar söz konusu olduğunda değişebilir. ## Veri Türleri JavaScript, bilgiyi veri türleri adı verilen farklı kategorilere ayırır. Bu kavram, antik bilginlerin bilgiyi kategorilere ayırma yöntemine benzer – Aristoteles, mantıksal ilkelerin şiir, matematik ve doğal felsefeye eşit şekilde uygulanamayacağını bilerek farklı türde akıl yürütme biçimlerini ayırmıştır. Veri türleri önemlidir çünkü farklı işlemler farklı türde bilgilerle çalışır. Tıpkı bir kişinin adıyla aritmetik yapamayacağınız veya bir matematiksel denklemi alfabetik sıraya koyamayacağınız gibi, JavaScript her işlem için uygun veri türünü gerektirir. Bunu anlamak hataları önler ve kodunuzu daha güvenilir hale getirir. Değişkenler, sayılar ve metinler gibi birçok farklı türde değer saklayabilir. Bu çeşitli değer türleri veri türü olarak bilinir. Veri türleri, yazılım geliştirmede önemli bir rol oynar çünkü geliştiricilerin kodun nasıl yazılması gerektiği ve yazılımın nasıl çalışması gerektiği konusunda kararlar almasına yardımcı olur. Ayrıca, bazı veri türleri bir değerde ek bilgi dönüştürme veya çıkarma gibi benzersiz özelliklere sahiptir. ✅ Veri Türleri, JavaScript veri primitifleri olarak da adlandırılır, çünkü dil tarafından sağlanan en düşük seviyeli veri türleridir. 7 temel veri türü vardır: string, number, bigint, boolean, undefined, null ve symbol. Her bir primitifin neyi temsil edebileceğini hayal etmek için bir dakika ayırın. Bir zebra nedir? Peki ya 0? true? ### Sayılar Sayılar, JavaScript'teki en basit veri türüdür. İster 42 gibi tam sayılar, ister 3.14 gibi ondalık sayılar, ister -5 gibi negatif sayılar olsun, JavaScript bunları aynı şekilde işler. Daha önceki değişkenimizi hatırlıyor musunuz? Sakladığımız 123 aslında bir sayı veri türüydü: Temel özellikler: - JavaScript sayısal değerleri otomatik olarak tanır - Bu değişkenlerle matematiksel işlemler yapabilirsiniz - Açık bir tür bildirimi gerekmez Değişkenler, ondalık veya negatif sayılar dahil tüm türdeki sayıları saklayabilir. Sayılar ayrıca bir sonraki bölümde ele alınacak aritmetik operatörlerle kullanılabilir. ### Aritmetik Operatörler Aritmetik operatörler, JavaScript'te matematiksel hesaplamalar yapmanıza olanak tanır. Bu operatörler, yüzyıllardır matematikçilerin kullandığı prensipleri takip eder – cebirsel notasyonu geliştiren Al-Khwarizmi gibi bilginlerin eserlerinde görülen aynı semboller. Operatörler, geleneksel matematikten beklediğiniz gibi çalışır: toplama için artı, çıkarma için eksi ve benzeri. Aritmetik işlevler gerçekleştirirken kullanabileceğiniz birkaç operatör türü vardır ve bazıları aşağıda listelenmiştir: ✅ Deneyin! Tarayıcınızın konsolunda bir aritmetik işlem deneyin. Sonuçlar sizi şaşırtıyor mu? ### 🧮 Matematik Becerileri Testi: Güvenle Hesaplama Aritmetik anlayışınızı test edin: - / (bölme) ile % (kalan) arasındaki fark nedir? - 10 % 3'ün ne olduğunu tahmin edebilir misiniz? (İpucu: 3.33 değil...) - Kalan operatörü programlamada neden faydalı olabilir? ### Strings JavaScript'te metinsel veriler, string olarak temsil edilir. "String" terimi, karakterlerin bir dizi halinde bir araya getirilmesi fikrinden gelir; tıpkı ortaçağ manastırlarında yazıcıların harfleri birleştirerek kelimeler ve cümleler oluşturması gibi. Stringler, web geliştirme için temel bir unsurdur. Bir web sitesinde görüntülenen her metin parçası – kullanıcı adları, düğme etiketleri, hata mesajları, içerik – string veri olarak işlenir. Stringleri anlamak, işlevsel kullanıcı arayüzleri oluşturmak için gereklidir. Stringler, tek veya çift tırnak arasında yer alan karakter dizileridir. Bu kavramları anlamak: - Tek tırnak ' veya çift tırnak " kullanarak stringleri tanımlar - Harfler, sayılar ve semboller içeren metin verilerini saklar - String değerlerini değişkenlere atar ve daha sonra kullanır - Metni değişken adlarından ayırmak için tırnak işaretleri gerektirir String yazarken tırnak işaretlerini kullanmayı unutmayın, aksi takdirde JavaScript bunun bir değişken adı olduğunu varsayar. ### String Formatlama String manipülasyonu, metin öğelerini birleştirmenize, değişkenleri dahil etmenize ve program durumuna yanıt veren dinamik içerik oluşturmanıza olanak tanır. Bu teknik, metni programlı olarak oluşturmanıza olanak tanır. Çoğu zaman birden fazla stringi birleştirmeniz gerekir – bu işleme birleştirme (concatenation) denir. İki veya daha fazla stringi birleştirmek veya bir araya getirmek için + operatörünü kullanabilirsiniz. Adım adım neler oluyor: - Birleştirir birden fazla stringi + operatörü ile - İlk örnekte boşluk olmadan stringleri doğrudan birleştirir - Okunabilirlik için stringler arasına boşluk karakterleri " " ekler - Doğru formatlama için virgül gibi noktalama işaretlerini ekler ✅ Neden JavaScript'te 1 + 1 = 2, ama '1' + '1' = 11? Bir düşünün. Peki ya '1' + 1? Şablon stringler (template literals), stringleri biçimlendirmenin başka bir yoludur. Ancak, tırnak işaretleri yerine ters tırnak işareti kullanılır. Düz metin olmayan her şey ${ } içindeki yer tutuculara yerleştirilmelidir. Bu, string olabilecek değişkenleri de içerir. Her bir kısmı anlayalım: - Şablon stringler oluşturmak için normal tırnak işaretleri yerine ters tırnak ` `` kullanır - ${} yer tutucu sözdizimi ile değişkenleri doğrudan gömme imkanı sağlar - Yazıldığı gibi boşlukları ve formatlamayı korur - Değişkenlerle karmaşık stringler oluşturmak için daha temiz bir yol sunuyor Formatlama hedeflerinize her iki yöntemle de ulaşabilirsiniz, ancak şablon stringler boşlukları ve satır sonlarını daha iyi korur. ✅ Şablon stringi ne zaman, düz bir string yerine kullanırsınız? ### 🔤 String Ustalık Kontrolü: Metin Manipülasyonu Güveni String becerilerinizi değerlendirin: - '1' + '1' neden '11' eder, 2 değil? Açıklayabilir misiniz? - Hangi string yöntemi daha okunabilir buluyorsunuz: birleştirme mi yoksa şablon stringler mi? - Bir stringin etrafındaki tırnak işaretlerini unutursanız ne olur? ### Booleans Booleanlar en basit veri biçimini temsil eder: yalnızca iki değer tutabilirler – true veya false. Bu ikili mantık sistemi, 19. yüzyıl matematikçisi George Boole'un geliştirdiği Boolean cebirine dayanır. Basitliklerine rağmen, booleanlar program mantığı için çok önemlidir. Kodunuzun koşullara göre karar vermesini sağlar – bir kullanıcının oturum açıp açmadığı, bir düğmeye tıklanıp tıklanmadığı veya belirli kriterlerin karşılanıp karşılanmadığı gibi. Booleanlar yalnızca iki değer olabilir: true veya false. Booleanlar, belirli koşullar karşılandığında hangi kod satırlarının çalışması gerektiğine karar vermeye yardımcı olur. Çoğu durumda, operatörler bir Boolean değerini ayarlamada yardımcı olur ve genellikle değişkenlerin bir operatörle başlatıldığını veya değerlerinin güncellendiğini fark edersiniz. Yukarıda şunları yaptık: - Boolean değeri true saklayan bir değişken oluşturduk - Boolean değeri false saklamayı gösterdik - Tam olarak true ve false anahtar kelimelerini (tırnak işareti olmadan) kullandık - Bu değişkenleri koşullu ifadelerde kullanmak için hazırladık ✅ Bir değişken, boolean true olarak değerlendiriliyorsa 'doğru' (truthy) olarak kabul edilebilir. İlginç bir şekilde, JavaScript'te tüm değerler, falsy olarak tanımlanmadıkça doğruluk taşır. ### 🎯 Boolean Mantık Kontrolü: Karar Verme Becerileri Boolean anlayışınızı test edin: - Neden JavaScript'te true ve false dışında "doğru" ve "yanlış" değerler olduğunu düşünüyorsunuz? - Hangisinin falsy olduğunu tahmin edebilirsiniz: 0, "0", [], "false"? - Booleanlar program akışını kontrol etmekte nasıl faydalı olabilir? --- ## 📊 Veri Türleri Araç Seti Özeti ## GitHub Copilot Agent Challenge 🚀 Agent modunu kullanarak aşağıdaki meydan okumayı tamamlayın: Açıklama: Bu derste öğrendiğiniz tüm JavaScript veri türlerini gerçek dünya veri senaryolarını işlerken gösteren bir kişisel bilgi yöneticisi oluşturun. Talimat: Bir kişinin adını (string), yaşını (number), öğrenci olup olmadığını (boolean), favori renklerini bir dizi olarak ve sokak, şehir ve posta kodu özelliklerine sahip bir adres nesnesini içeren bir kullanıcı profili nesnesi oluşturacak bir JavaScript programı yazın. Profil bilgilerini görüntülemek ve bireysel alanları güncellemek için işlevler ekleyin. String birleştirme, şablon stringler, yaş ile aritmetik işlemler ve öğrenci durumu için boolean mantığını gösterdiğinizden emin olun. Agent modu hakkında daha fazla bilgi edinin. ## 🚀 Meydan Okuma JavaScript'in geliştiricileri şaşırtabilecek bazı davranışları vardır. İşte keşfetmek için klasik bir örnek: tarayıcı konsolunuza şunu yazmayı deneyin: let age = 1; let Age = 2; age == Age ve sonucu gözlemleyin. Sonuç false döner – nedenini belirleyebilir misiniz? Bu, JavaScript'in anlaşılması gereken birçok davranışından biridir. Bu tuhaflıkları tanımak, daha güvenilir kod yazmanıza ve sorunları daha etkili bir şekilde çözmenize yardımcı olacaktır. ## Ders Sonrası Test Ders sonrası test ## Gözden Geçirme ve Kendi Kendine Çalışma Bu JavaScript alıştırmaları listesini inceleyin ve birini deneyin. Ne öğrendiniz? ## Ödev Veri Türleri Alıştırması ## 🚀 JavaScript Veri Türleri Ustalık Zaman Çizelgeniz ### ⚡ Sonraki 5 Dakikada Yapabilecekleriniz - [ ] Tarayıcı konsolunuzu açın ve farklı veri türlerine sahip 3 değişken oluşturun - [ ] Meydan okumayı deneyin: let age = 1; let Age = 2; age == Age ve neden yanlış olduğunu öğrenin - [ ] Adınız ve favori numaranızla string birleştirme pratiği yapın - [ ] Bir stringe bir sayı eklediğinizde ne olduğunu test edin ### 🎯 Bu Saatte Başarabilecekleriniz - [ ] Ders sonrası testi tamamlayın ve kafa karıştırıcı kavramları gözden geçirin - [ ] İki sayıyı toplama, çıkarma, çarpma ve bölme işlemi yapan mini bir hesap makinesi oluşturun - [ ] Şablon stringler kullanarak basit bir isim biçimlendirici oluşturun - [ ] == ve === karşılaştırma operatörleri arasındaki farkları keşfedin - [ ] Farklı veri türleri arasında dönüştürme pratiği yapın ### 📅 Bir Haftalık JavaScript Temelleri - [ ] Ödevi güvenle ve yaratıcılıkla tamamlayın - [ ] Öğrenilen tüm veri türlerini kullanarak kişisel bir profil nesnesi oluşturun - [ ] CSS-Tricks'ten JavaScript alıştırmaları ile pratik yapın - [ ] Boolean mantığı kullanarak basit bir form doğrulayıcı oluşturun - [ ] Dizi ve nesne veri türlerini deneyin (gelecek derslerin önizlemesi) - [ ] Bir JavaScript topluluğuna katılın ve veri türleri hakkında sorular sorun ### 🌟 Bir Aylık Dönüşüm - [ ] Veri türü bilgilerini daha büyük programlama projelerine entegre edin - [ ] Gerçek uygulamalarda her veri türünü ne zaman ve neden kullanacağınızı anlayın - [ ] Diğer yeni başlayanlara JavaScript temellerini anlamaları için yardımcı olun - [ ] Farklı türde kullanıcı verilerini yöneten küçük bir uygulama oluşturun - [ ] Tür zorlama ve kesin eşitlik gibi gelişmiş veri türü kavramlarını keşfedin - [ ] Açık kaynak JavaScript projelerine belgeleri iyileştirerek katkıda bulunun ### 🧠 Son Veri Türleri Ustalık Kontrolü JavaScript temelinizi kutlayın: - Davranışı açısından sizi en çok şaşırtan veri türü hangisiydi? - Bir arkadaşınıza değişkenler ve sabitler arasındaki farkı açıklamakta ne kadar rahatsınız? - JavaScript'in tür sistemi hakkında keşfettiğiniz en ilginç şey nedir? - Bu temellerle hangi gerçek dünya uygulamasını hayal edebilirsiniz? --- Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.

javascript

JavaScript Temelleri: Metotlar ve Fonksiyonlar

## Ders Öncesi Quiz Ders öncesi quiz Aynı kodu tekrar tekrar yazmak, programlamanın en yaygın sıkıntılarından biridir. Fonksiyonlar, kodu yeniden kullanılabilir bloklar halinde paketleyerek bu sorunu çözer. Fonksiyonları, Henry Ford'un montaj hattını devrim niteliğinde yapan standart parçalar gibi düşünebilirsiniz – güvenilir bir bileşen oluşturduktan sonra, ihtiyacınız olan her yerde sıfırdan yeniden inşa etmeden kullanabilirsiniz. Fonksiyonlar, kod parçalarını paketlemenize ve programınız boyunca yeniden kullanmanıza olanak tanır. Aynı mantığı her yerde kopyalayıp yapıştırmak yerine, bir kez bir fonksiyon oluşturabilir ve ihtiyaç duyduğunuzda çağırabilirsiniz. Bu yaklaşım kodunuzu düzenli tutar ve güncellemeleri çok daha kolay hale getirir. Bu derste, kendi fonksiyonlarınızı nasıl oluşturacağınızı, onlara nasıl bilgi aktaracağınızı ve faydalı sonuçlar alacağınızı öğreneceksiniz. Fonksiyonlar ile metotlar arasındaki farkı keşfedecek, modern sözdizimi yaklaşımlarını öğrenecek ve fonksiyonların diğer fonksiyonlarla nasıl çalışabileceğini göreceksiniz. Bu kavramları adım adım inşa edeceğiz. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Metotlar ve Fonksiyonlar") ## Fonksiyonlar Bir fonksiyon, belirli bir görevi yerine getiren bağımsız bir kod bloğudur. İhtiyaç duyduğunuzda çalıştırabileceğiniz mantığı kapsüller. Programınız boyunca aynı kodu birden fazla kez yazmak yerine, bunu bir fonksiyonda paketleyebilir ve ihtiyacınız olduğunda o fonksiyonu çağırabilirsiniz. Bu yaklaşım kodunuzu temiz tutar ve güncellemeleri çok daha kolay hale getirir. Mantığın kod tabanınızda 20 farklı yerde dağınık olduğunu düşünürsek, bakım zorluğunu hayal edin. Fonksiyonlarınıza açıklayıcı isimler vermek çok önemlidir. İyi adlandırılmış bir fonksiyon amacını açıkça iletir – cancelTimer() gördüğünüzde, ne yaptığını hemen anlarsınız, tıpkı açıkça etiketlenmiş bir düğmenin tıklayınca ne olacağını size söylemesi gibi. ## Bir fonksiyon oluşturma ve çağırma Bir fonksiyonun nasıl oluşturulacağını inceleyelim. Sözdizimi tutarlı bir deseni takip eder: Bunu parçalayalım: - function anahtar kelimesi JavaScript'e "Hey, bir fonksiyon oluşturuyorum!" der. - nameOfFunction fonksiyonunuza açıklayıcı bir isim verdiğiniz yerdir. - Parantezler () parametreler ekleyebileceğiniz yerdir (buna birazdan geleceğiz). - Süslü parantezler {} fonksiyonu çağırdığınızda çalışacak olan gerçek kodu içerir. Bunu uygulamada görmek için basit bir selamlama fonksiyonu oluşturalım: Bu fonksiyon konsola "Merhaba, dünya!" yazdırır. Bir kez tanımladıktan sonra, ihtiyacınız olduğu kadar kullanabilirsiniz. Fonksiyonunuzu çalıştırmak (veya "çağırmak") için adını yazıp ardından parantez ekleyin. JavaScript, fonksiyonunuzu çağırmadan önce veya sonra tanımlamanıza izin verir – JavaScript motoru yürütme sırasını halleder. Bu satırı çalıştırdığınızda, displayGreeting fonksiyonunuzun içindeki tüm kodu çalıştırır ve tarayıcınızın konsolunda "Merhaba, dünya!" görüntüler. Bu fonksiyonu tekrar tekrar çağırabilirsiniz. ### 🧠 Fonksiyon Temelleri Kontrolü: İlk Fonksiyonlarınızı Oluşturma Temel fonksiyonlar hakkında nasıl hissettiğinizi görelim: - Fonksiyon tanımlarında neden süslü parantez {} kullandığımızı açıklayabilir misiniz? - displayGreeting yazarsanız ama parantez eklemezseniz ne olur? - Aynı fonksiyonu neden birden fazla kez çağırmak isteyebilirsiniz? ### Fonksiyon yazma en iyi uygulamaları İşte harika fonksiyonlar yazmanıza yardımcı olacak birkaç ipucu: - Fonksiyonlarınıza açık, açıklayıcı isimler verin – gelecekteki haliniz size teşekkür edecek! - Çok kelimeli isimler için camelCasing kullanın (örneğin, calculateTotal yerine calculate_total). - Her bir fonksiyonu tek bir şeyi iyi yapmaya odaklanmış tutun. ## Bir fonksiyona bilgi aktarma displayGreeting fonksiyonumuz sınırlı – herkes için sadece "Merhaba, dünya!" yazdırabilir. Parametreler, fonksiyonları daha esnek ve kullanışlı hale getirmemizi sağlar. Parametreler, fonksiyonu her kullandığınızda farklı değerler ekleyebileceğiniz yerlerdir. Bu şekilde, aynı fonksiyon her çağrıda farklı bilgilerle çalışabilir. Fonksiyonunuzu tanımlarken parametreleri parantez içine listeleyin ve birden fazla parametreyi virgülle ayırın: Her parametre bir yer tutucu gibi davranır – birisi fonksiyonunuzu çağırdığında, bu yerlere gerçek değerler sağlar. Selamlama fonksiyonumuzu birinin adını kabul edecek şekilde güncelleyelim: Adı doğrudan mesajımıza eklemek için ters tırnak işaretleri (` `) ve ${}` kullandığımıza dikkat edin – buna şablon literal denir ve değişkenlerle karışık dizeler oluşturmanın gerçekten kullanışlı bir yoludur. Şimdi fonksiyonumuzu çağırdığımızda herhangi bir isim geçirebiliriz: JavaScript, 'Christopher' dizgesini alır, name parametresine atar ve kişiselleştirilmiş mesaj "Merhaba, Christopher!" oluşturur. ## Varsayılan değerler Bazı parametreleri isteğe bağlı yapmak istersek ne olur? İşte burada varsayılan değerler devreye girer! Diyelim ki insanlar selamlama kelimesini özelleştirebilsin istiyoruz, ancak biri belirtmezse, yedek olarak "Merhaba" kullanacağız. Varsayılan değerleri, bir değişken ayarlamak gibi eşittir işareti kullanarak ayarlayabilirsiniz: Burada name hala gereklidir, ancak salutation kimse farklı bir selamlama sağlamazsa 'Merhaba' yedek değerine sahiptir. Artık bu fonksiyonu iki farklı şekilde çağırabiliriz: İlk çağrıda, selamlama belirtmediğimiz için JavaScript varsayılan "Merhaba"yı kullanır. İkinci çağrıda ise özel "Selam"ımızı kullanır. Bu esneklik, fonksiyonları farklı senaryolara uyarlanabilir hale getirir. ### 🎛️ Parametreler Ustalık Kontrolü: Fonksiyonları Esnek Hale Getirme Parametre anlayışınızı test edin: - Parametre ile argüman arasındaki fark nedir? - Varsayılan değerler gerçek dünyada programlamada neden kullanışlıdır? - Parametrelerden daha fazla argüman geçerseniz ne olacağını tahmin edebilir misiniz? ## Geri dönüş değerleri Şimdiye kadar fonksiyonlarımız sadece konsola mesajlar yazdırıyordu, ancak bir fonksiyonun bir şeyler hesaplamasını ve sonucu size geri vermesini istiyorsanız ne olur? İşte burada geri dönüş değerleri devreye girer. Bir şey görüntülemek yerine, bir fonksiyon size geri döndürebileceğiniz bir değer verebilir ve bu değeri bir değişkende saklayabilir veya kodunuzun diğer bölümlerinde kullanabilirsiniz. Bir değeri geri göndermek için return anahtar kelimesini ve ardından geri döndürmek istediğiniz şeyi kullanırsınız: Önemli bir nokta: Bir fonksiyon bir return ifadesine ulaştığında, hemen çalışmayı durdurur ve bu değeri çağırana geri gönderir. Selamlama fonksiyonumuzu mesajı yazdırmak yerine geri döndürecek şekilde değiştirelim: Artık bu fonksiyon selamlamayı yazdırmak yerine mesajı oluşturur ve bize geri verir. Geri döndürülen değeri kullanmak için, diğer herhangi bir değer gibi bir değişkende saklayabiliriz: Artık greetingMessage "Merhaba, Christopher" içerir ve bunu kodunuzun herhangi bir yerinde kullanabilirsiniz – bir web sayfasında görüntülemek, bir e-postaya eklemek veya başka bir fonksiyona iletmek için. ### 🔄 Geri Dönüş Değerleri Kontrolü: Sonuçları Geri Alma Geri dönüş değeri anlayışınızı değerlendirin: - Bir fonksiyondaki return ifadesinden sonra kodda ne olur? - Değerleri geri döndürmek neden sadece konsola yazdırmaktan daha iyidir? - Bir fonksiyon farklı türde değerler (dize, sayı, boolean) döndürebilir mi? ## Fonksiyonları diğer fonksiyonlara parametre olarak geçirme Fonksiyonlar, diğer fonksiyonlara parametre olarak geçirilebilir. Bu kavram başlangıçta karmaşık görünebilir, ancak esnek programlama desenlerini mümkün kılan güçlü bir özelliktir. Bu desen, "bir şey olduğunda, şu diğer şeyi yap" demek istediğinizde çok yaygındır. Örneğin, "zamanlayıcı bittiğinde, bu kodu çalıştır" veya "kullanıcı düğmeye tıkladığında, bu fonksiyonu çağır." setTimeout'a bakalım, bu yerleşik bir fonksiyondur ve belirli bir süre bekler, ardından bazı kodları çalıştırır. Hangi kodu çalıştıracağını söylememiz gerekir – fonksiyon geçirme için mükemmel bir kullanım durumu! Bu kodu deneyin – 3 saniye sonra bir mesaj göreceksiniz: setTimeout'a displayDone fonksiyonunu (parantez olmadan) geçirdiğimize dikkat edin. Fonksiyonu kendimiz çağırmıyoruz – onu setTimeout'a teslim ediyoruz ve "bunu 3 saniye içinde çağır" diyoruz. ### İsimsiz fonksiyonlar Bazen sadece bir şey için bir fonksiyona ihtiyacınız olur ve ona bir isim vermek istemezsiniz. Düşünün – bir fonksiyonu sadece bir kez kullanıyorsanız, kodunuzu fazladan bir isimle neden karmaşıklaştırasınız? JavaScript, isimsiz fonksiyonlar oluşturmanıza olanak tanır – yalnızca ihtiyacınız olan yerde tanımlayabileceğiniz isimsiz fonksiyonlar. Zamanlayıcı örneğimizi bir isimsiz fonksiyon kullanarak yeniden yazabiliriz: Bu aynı sonucu elde eder, ancak fonksiyon doğrudan setTimeout çağrısı içinde tanımlanır, ayrı bir fonksiyon bildirimi ihtiyacını ortadan kaldırır. ### Ok fonksiyonları Modern JavaScript, ok fonksiyonları adı verilen daha kısa bir fonksiyon yazma yöntemi sunar. => (ok gibi görünüyor – anladınız mı?) kullanır ve geliştiriciler arasında oldukça popülerdir. Ok fonksiyonları, function anahtar kelimesini atlamanıza ve daha özlü kod yazmanıza olanak tanır. Zamanlayıcı örneğimizi bir ok fonksiyonu kullanarak yazalım: () parametrelerin gideceği yerdir (bu durumda boş), ardından ok => gelir ve son olarak süslü parantezler içinde fonksiyon gövdesi. Bu, daha özlü bir sözdizimiyle aynı işlevselliği sağlar. ### Hangi stratejiyi ne zaman kullanmalı Her yaklaşımı ne zaman kullanmalısınız? Pratik bir kılavuz: Fonksiyonu birden fazla kez kullanacaksanız, ona bir isim verin ve ayrı olarak tanımlayın. Sadece belirli bir kullanım içinse, bir isimsiz fonksiyon düşünün. Hem ok fonksiyonları hem de geleneksel sözdizimi geçerli seçeneklerdir, ancak ok fonksiyonları modern JavaScript kod tabanlarında yaygındır. ### 🎨 Fonksiyon Stilleri Ustalık Kontrolü: Doğru Sözdizimini Seçmek Sözdizimi anlayışınızı test edin: - Ok fonksiyonlarını geleneksel fonksiyon sözdizimine tercih etmenizin nedeni ne olabilir? - İsimsiz fonksiyonların ana avantajı nedir? - İsimsiz bir fonksiyon yerine isimli bir fonksiyonun daha iyi olduğu bir durumu düşünebilir misiniz? --- ## 🚀 Zorluk Fonksiyonlar ile metotlar arasındaki farkı bir cümleyle açıklayabilir misiniz? Deneyin! ## GitHub Copilot Agent Zorluğu 🚀 Agent modunu kullanarak aşağıdaki zorluğu tamamlayın: Açıklama: Bu derste ele alınan farklı fonksiyon kavramlarını içeren matematiksel fonksiyonlardan oluşan bir yardımcı kütüphane oluşturun. Parametreler, varsayılan değerler, geri dönüş değerleri ve ok fonksiyonları dahil. İstek: mathUtils.js adlı bir JavaScript dosyası oluşturun ve şu fonksiyonları içersin: 1. İki parametre alan ve toplamlarını döndüren bir add fonksiyonu 2. Varsayılan parametre değerlerine sahip bir multiply fonksiyonu (ikinci parametre varsayılan olarak 1) 3. Bir sayı alıp karesini döndüren bir ok fonksiyonu square 4. Başka bir fonksiyonu parametre olarak kabul eden ve iki sayıya uygulayan bir calculate fonksiyonu 5. Her fonksiyonu uygun test durumlarıyla çağırmayı gösterin Agent modu hakkında daha fazla bilgi edinin: burada. ## Ders Sonrası Quiz Ders sonrası quiz ## Gözden Geçirme ve Kendi Kendine Çalışma Ok fonksiyonları hakkında biraz daha okumaya değer, çünkü kod tabanlarında giderek daha fazla kullanılıyor. Bir fonksiyon yazmayı ve ardından bu sözdizimiyle yeniden yazmayı deneyin. ## Ödev Fonksiyonlarla Eğlence --- ## 🧰 JavaScript Fonksiyonları Araç Seti Özeti --- ## 🚀 JavaScript Fonksiyonları Ustalık Zaman Çizelgesi ### ⚡ Sonraki 5 Dakikada Yapabilecekleriniz - [ ] Favori numaranızı döndüren basit bir fonksiyon yazın - [ ] İki parametreye sahip ve bunları toplayan bir fonksiyon oluşturun - [ ] Geleneksel bir fonksiyonu ok işareti (arrow function) sözdizimine dönüştürmeyi deneyin - [ ] Meydan okumayı uygulayın: fonksiyonlar ile metotlar arasındaki farkı açıklayın ### 🎯 Bu Saatte Neler Başarabilirsiniz - [ ] Ders sonrası testi tamamlayın ve kafa karıştırıcı kavramları gözden geçirin - [ ] GitHub Copilot meydan okumasından matematik yardımcı kütüphanesini oluşturun - [ ] Parametre olarak başka bir fonksiyon kullanan bir fonksiyon oluşturun - [ ] Varsayılan parametrelerle fonksiyon yazmayı uygulayın - [ ] Fonksiyon dönüş değerlerinde şablon dizgileriyle (template literals) denemeler yapın ### 📅 Hafta Boyunca Fonksiyon Ustalığı - [ ] "Fonksiyonlarla Eğlence" ödevini yaratıcılıkla tamamlayın - [ ] Yazdığınız tekrarlayan kodları yeniden kullanılabilir fonksiyonlara dönüştürün - [ ] Sadece fonksiyonlar kullanarak küçük bir hesap makinesi oluşturun (global değişkenler olmadan) - [ ] map() ve filter() gibi dizi metotlarıyla ok işareti (arrow function) fonksiyonlarını uygulayın - [ ] Yaygın görevler için bir yardımcı fonksiyon koleksiyonu oluşturun - [ ] Üst düzey fonksiyonlar ve fonksiyonel programlama kavramlarını inceleyin ### 🌟 Ay Boyunca Dönüşüm - [ ] Closure ve kapsam (scope) gibi ileri düzey fonksiyon kavramlarını öğrenin - [ ] Fonksiyon bileşimini yoğun bir şekilde kullanan bir proje oluşturun - [ ] Açık kaynak projelere katkıda bulunarak fonksiyon dokümantasyonunu geliştirin - [ ] Bir başkasına fonksiyonlar ve farklı sözdizimi stilleri hakkında öğretin - [ ] JavaScript'te fonksiyonel programlama paradigmalarını keşfedin - [ ] Gelecekteki projeler için yeniden kullanılabilir fonksiyonlardan oluşan kişisel bir kütüphane oluşturun ### 🏆 Son Fonksiyon Şampiyonu Kontrol Noktası Fonksiyon ustalığınızı kutlayın: - Şimdiye kadar oluşturduğunuz en faydalı fonksiyon hangisi? - Fonksiyonlar hakkında öğrenmek kod organizasyonu hakkındaki düşüncelerinizi nasıl değiştirdi? - Hangi fonksiyon sözdizimini tercih ediyorsunuz ve neden? - Hangi gerçek dünya problemini bir fonksiyon yazarak çözerdiniz? --- Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.

javascript

JavaScript Temelleri: Karar Verme

Hiç uygulamaların nasıl akıllıca kararlar verdiğini merak ettiniz mi? Örneğin, bir navigasyon sisteminin en hızlı rotayı nasıl seçtiği ya da bir termostatın ısıtmayı ne zaman açacağına nasıl karar verdiği? İşte programlamada karar verme kavramının temeli budur. Charles Babbage'in Analitik Motoru'nun koşullara bağlı olarak farklı işlem dizilerini takip etmek üzere tasarlandığı gibi, modern JavaScript programlarının da değişen koşullara göre seçim yapması gerekir. Bu dallanma ve karar verme yeteneği, statik kodu duyarlı ve akıllı uygulamalara dönüştürür. Bu derste, programlarınızda koşullu mantığı nasıl uygulayacağınızı öğreneceksiniz. Koşullu ifadeleri, karşılaştırma operatörlerini ve kodunuzun durumları değerlendirmesine ve uygun şekilde yanıt vermesine olanak tanıyan mantıksal ifadeleri keşfedeceğiz. ## Ders Öncesi Test Ders öncesi test Karar verme ve program akışını kontrol etme yeteneği, programlamanın temel bir yönüdür. Bu bölüm, JavaScript programlarınızın yürütme yolunu Boolean değerler ve koşullu mantık kullanarak nasıl kontrol edeceğinizi kapsar. [](https://youtube.com/watch?v=SxTp8j-fMMY "Karar Verme") ## Boolean'lar Üzerine Kısa Bir Hatırlatma Karar vermeyi keşfetmeden önce, önceki dersimizden Boolean değerlerini tekrar gözden geçirelim. Matematikçi George Boole'un adını taşıyan bu değerler, ikili durumları temsil eder – ya true ya da false. Hiçbir belirsizlik, hiçbir ara durum yoktur. Bu ikili değerler, tüm hesaplama mantığının temelini oluşturur. Programınızın verdiği her karar nihayetinde bir Boolean değerlendirmesine indirgenir. Boolean değişkenleri oluşturmak oldukça basittir: Bu, açık Boolean değerlerine sahip iki değişken oluşturur. ✅ Boolean'lar, İngiliz matematikçi, filozof ve mantıkçı George Boole (1815–1864) adına adlandırılmıştır. ## Karşılaştırma Operatörleri ve Boolean'lar Pratikte, Boolean değerlerini manuel olarak ayarlamanız nadirdir. Bunun yerine, koşulları değerlendirerek onları oluşturursunuz: "Bu sayı diğerinden büyük mü?" veya "Bu değerler eşit mi?" Karşılaştırma operatörleri bu değerlendirmeleri mümkün kılar. Değerleri karşılaştırır ve operatörler arasındaki ilişkiye bağlı olarak Boolean sonuçları döndürür. ✅ Bilginizi test etmek için tarayıcınızın konsolunda bazı karşılaştırmalar yazın. Döndürülen veriler sizi şaşırtıyor mu? ### 🧠 Karşılaştırma Ustalık Testi: Boolean Mantığını Anlama Karşılaştırma bilginizi test edin: - Neden === (sıkı eşitlik) genellikle == (gevşek eşitlik) yerine tercih edilir? - 5 === '5' ne döndürür? Peki ya 5 == '5'? - !== ile != arasındaki fark nedir? ## If İfadesi if ifadesi, kodunuzda bir soru sormak gibidir. "Eğer bu koşul doğruysa, o zaman bu şeyi yap." JavaScript'te karar vermek için kullanacağınız en önemli araçlardan biridir. İşte nasıl çalıştığı: Koşul parantezlerin içine gider ve eğer true ise, JavaScript süslü parantezlerin içindeki kodu çalıştırır. Eğer false ise, JavaScript o bloğu tamamen atlar. Bu koşulları oluşturmak için genellikle karşılaştırma operatörlerini kullanırsınız. İşte pratik bir örnek: 1000 >= 800 true olarak değerlendirildiği için, blok içindeki kod çalışır ve konsolda "Yeni bir dizüstü bilgisayar alınıyor!" görüntülenir. ## If..Else İfadesi Peki ya koşul yanlış olduğunda programınızın farklı bir şey yapmasını istiyorsanız? İşte burada else devreye girer – yedek bir planınız varmış gibi. else ifadesi, "eğer bu koşul doğru değilse, bunun yerine başka bir şey yap" demenizi sağlar. Şimdi 500 >= 800 false olduğu için, JavaScript ilk bloğu atlar ve bunun yerine else bloğunu çalıştırır. Konsolda "Henüz yeni bir dizüstü bilgisayar alamıyorum!" görüntülenir. ✅ Bu kodu ve aşağıdaki kodu tarayıcı konsolunda çalıştırarak anlayışınızı test edin. Döndürülen console.log() değerini değiştirmek için currentMoney ve laptopPrice değişkenlerinin değerlerini değiştirin. ### 🎯 If-Else Mantık Kontrolü: Dallanma Yolları Koşullu mantık bilginizi değerlendirin: - currentMoney tam olarak laptopPrice'a eşit olursa ne olur? - If-else mantığının gerçek dünyada faydalı olabileceği bir senaryo düşünebilir misiniz? - Bunu birden fazla fiyat aralığını ele alacak şekilde nasıl genişletebilirsiniz? ## Switch İfadesi Bazen bir değeri birden fazla seçeneğe karşı karşılaştırmanız gerekir. Birkaç if..else ifadesini zincirleyebilirsiniz, ancak bu yaklaşım hantal hale gelir. switch ifadesi, birden fazla ayrık değeri ele almak için daha temiz bir yapı sağlar. Bu kavram, erken dönem telefon santrallerinde kullanılan mekanik anahtarlama sistemlerine benzer – bir giriş değeri, yürütmenin hangi özel yolu izleyeceğini belirler. İşte yapısı: - JavaScript ifadeyi bir kez değerlendirir - Her case'i bir eşleşme bulmak için kontrol eder - Eşleşme bulduğunda, o kod bloğunu çalıştırır - break, JavaScript'e durmasını ve switch'ten çıkmasını söyler - Hiçbir case eşleşmezse, varsa default bloğunu çalıştırır Bu örnekte, JavaScript dayNumber'ın 2 olduğunu görür, eşleşen case 2'yi bulur, dayName'i "Salı" olarak ayarlar ve ardından switch'ten çıkar. Sonuç? Konsolda "Bugün Salı" görüntülenir. ✅ Bu kodu ve aşağıdaki kodu tarayıcı konsolunda çalıştırarak anlayışınızı test edin. Değişken a'nın değerlerini değiştirerek döndürülen console.log() değerini değiştirin. ### 🔄 Switch İfadesi Ustalık Testi: Birden Fazla Seçenek Switch bilginizi test edin: - Bir break ifadesini unutursanız ne olur? - Birden fazla if-else ifadesi yerine ne zaman switch kullanırsınız? - Tüm olasılıkları kapsadığınızı düşünseniz bile default case neden faydalıdır? ## Mantıksal Operatörler ve Boolean'lar Karmaşık kararlar genellikle aynı anda birden fazla koşulu değerlendirmeyi gerektirir. Boolean cebiri matematikçilerin mantıksal ifadeleri birleştirmesine olanak tanıdığı gibi, programlama da birden fazla Boolean koşulunu bağlamak için mantıksal operatörler sağlar. Bu operatörler, basit doğru/yanlış değerlendirmeleri birleştirerek sofistike koşullu mantık sağlar. Bu operatörler koşulları faydalı şekillerde birleştirmenizi sağlar: - VE (&&) her iki koşulun da doğru olması gerektiği anlamına gelir - VEYA (||) en az bir koşulun doğru olması gerektiği anlamına gelir - DEĞİL (!) doğruyu yanlışa (ve tam tersine) çevirir ## Mantıksal Operatörlerle Koşullar ve Kararlar Bu mantıksal operatörleri daha gerçekçi bir örnekle görelim: Bu örnekte: %20 indirimli fiyatı (640) hesaplıyoruz, ardından mevcut paramızın tam fiyatı VEYA indirimli fiyatı karşılayıp karşılamadığını değerlendiriyoruz. 600, indirimli fiyat eşiği olan 640'ı karşıladığı için koşul doğru olarak değerlendirilir. ### 🧮 Mantıksal Operatörler Kontrolü: Koşulları Birleştirme Mantıksal operatör bilginizi test edin: - A && B ifadesinde, A yanlışsa ne olur? B değerlendirilir mi? - Üç operatöre (&&, ||, !) birden ihtiyaç duyacağınız bir durum düşünebilir misiniz? - !user.isActive ile user.isActive !== true arasındaki fark nedir? ### Negasyon Operatörü Bazen bir şeyin doğru olmadığı durumları düşünmek daha kolaydır. Örneğin, "Kullanıcı giriş yaptı mı?" diye sormak yerine "Kullanıcı giriş yapmadı mı?" diye sormak isteyebilirsiniz. Ünlem işareti (!) operatörü mantığı sizin için ters çevirir. ! operatörü "tam tersi..." demek gibidir – bir şey true ise, ! bunu false yapar ve tam tersini. ### Ternary İfadeler Basit koşullu atamalar için JavaScript, ternary operatörünü sağlar. Bu kısa sözdizimi, bir koşullu ifadeyi tek bir satırda yazmanıza olanak tanır ve bir koşula bağlı olarak iki değerden birini atamanız gerektiğinde kullanışlıdır. Bu bir soru gibi okunur: "Bu koşul doğru mu? Eğer evet, bu değeri kullan. Eğer hayır, şu değeri kullan." Aşağıda daha somut bir örnek var: ✅ Bu kodu birkaç kez okuyarak bir dakika ayırın. Bu operatörlerin nasıl çalıştığını anlıyor musunuz? Bu satır şunu söylüyor: "firstNumber secondNumber'dan büyük mü? Eğer evet, firstNumber'ı biggestNumber'a koy. Eğer hayır, secondNumber'ı biggestNumber'a koy." Ternary operatörü, bu geleneksel if..else ifadesini yazmanın sadece daha kısa bir yoludur: Her iki yaklaşım da aynı sonuçları üretir. Ternary operatörü kısalık sunarken, geleneksel if-else yapısı karmaşık koşullar için daha okunabilir olabilir. --- ## 🚀 Meydan Okuma Önce mantıksal operatörlerle yazılmış, ardından bir ternary ifade kullanılarak yeniden yazılmış bir program oluşturun. Tercih ettiğiniz sözdizimi hangisi? --- ## GitHub Copilot Agent Meydan Okuması 🚀 Agent modunu kullanarak aşağıdaki meydan okumayı tamamlayın: Açıklama: Bu dersteki birden fazla karar verme kavramını, if-else ifadeleri, switch ifadeleri, mantıksal operatörler ve ternary ifadeler dahil olmak üzere gösteren kapsamlı bir not hesaplayıcı oluşturun. İstek: Bir öğrencinin sayısal puanını (0-100) alan ve aşağıdaki kriterlere göre harf notunu belirleyen bir JavaScript programı yazın: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60'ın altında Gereksinimler: 1. Harf notunu belirlemek için bir if-else ifadesi kullanın 2. Mantıksal operatörleri kullanarak öğrencinin geçip geçmediğini (not >= 60) VE onur belgesi alıp almadığını (not >= 90) kontrol edin. 3. Her harf notu için özel geri bildirim sağlamak amacıyla bir switch ifadesi kullanın. 4. Öğrencinin bir sonraki kursa uygun olup olmadığını belirlemek için bir üçlü operatör kullanın (not >= 70). 5. Puanın 0 ile 100 arasında olduğundan emin olmak için giriş doğrulaması ekleyin. Programınızı 59, 60, 89, 90 gibi sınır durumlar ve geçersiz girişler dahil olmak üzere çeşitli puanlarla test edin. agent mode hakkında daha fazla bilgi edinin. ## Ders Sonrası Test Ders sonrası test ## Gözden Geçirme ve Kendi Kendine Çalışma Kullanıcıya sunulan birçok operatör hakkında daha fazla bilgi edinin MDN'de. Josh Comeau'nun harika operatör rehberine göz atın! ## Ödev Operatörler --- ## 🧠 Karar Verme Araçlarınızın Özeti --- ## 🚀 JavaScript Karar Verme Uzmanlığı Zaman Çizelgeniz ### ⚡ Sonraki 5 Dakikada Yapabilecekleriniz - [ ] Tarayıcı konsolunuzda karşılaştırma operatörlerini pratik yapın - [ ] Yaşınızı kontrol eden basit bir if-else ifadesi yazın - [ ] Meydan okuma: bir if-else ifadesini üçlü operatör kullanarak yeniden yazmayı deneyin - [ ] Farklı "doğru" ve "yanlış" değerlerle ne olduğunu test edin ### 🎯 Bu Saatte Başarabilecekleriniz - [ ] Ders sonrası testi tamamlayın ve kafa karıştırıcı kavramları gözden geçirin - [ ] GitHub Copilot meydan okumasından kapsamlı bir not hesaplayıcı oluşturun - [ ] Gerçek bir senaryo için basit bir karar ağacı oluşturun (örneğin, ne giyeceğinizi seçmek gibi) - [ ] Mantıksal operatörlerle birden fazla koşulu birleştirme pratiği yapın - [ ] Farklı kullanım durumları için switch ifadelerini deneyin ### 📅 Haftalık Mantık Uzmanlığı - [ ] Yaratıcı örneklerle operatörler ödevini tamamlayın - [ ] Çeşitli koşullu yapılar kullanarak mini bir test uygulaması oluşturun - [ ] Birden fazla giriş koşulunu kontrol eden bir form doğrulayıcı oluşturun - [ ] Josh Comeau'nun operatör rehberi alıştırmalarını pratik yapın - [ ] Mevcut kodu daha uygun koşullu yapılar kullanarak yeniden düzenleyin - [ ] Kısa devre değerlendirmesini ve performans etkilerini inceleyin ### 🌟 Aylık Dönüşümünüz - [ ] Karmaşık iç içe geçmiş koşulları ustalıkla kullanın ve kod okunabilirliğini koruyun - [ ] Gelişmiş karar verme mantığına sahip bir uygulama oluşturun - [ ] Mevcut projelerde koşullu mantığı iyileştirerek açık kaynak katkısında bulunun - [ ] Farklı koşullu yapılar hakkında bir başkasına öğretin ve her birinin ne zaman kullanılacağını açıklayın - [ ] Koşullu mantık için fonksiyonel programlama yaklaşımlarını keşfedin - [ ] Koşullu en iyi uygulamalar için kişisel bir referans rehberi oluşturun ### 🏆 Son Karar Verme Şampiyonu Kontrol Noktası Mantıksal düşünme ustalığınızı kutlayın: - Başarıyla uyguladığınız en karmaşık karar mantığı nedir? - Hangi koşullu yapı size en doğal geliyor ve neden? - Mantıksal operatörler hakkında öğrenmek problem çözme yaklaşımınızı nasıl değiştirdi? - Hangi gerçek dünya uygulaması gelişmiş karar verme mantığından faydalanabilir? --- Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.

javascript

JavaScript Temelleri: Diziler ve Döngüler

## Ders Öncesi Test Ders öncesi test Hiç web sitelerinin alışveriş sepeti öğelerini nasıl takip ettiğini veya arkadaş listenizi nasıl görüntülediğini merak ettiniz mi? İşte burada diziler ve döngüler devreye giriyor. Diziler, birden fazla bilgiyi tutan dijital kaplar gibidir, döngüler ise tüm bu verilerle verimli bir şekilde çalışmanıza olanak tanır. Bu iki kavram bir araya geldiğinde, programlarınızda bilgi işleme temellerini oluşturur. Her adımı manuel olarak yazmaktan, yüzlerce hatta binlerce öğeyi hızlı bir şekilde işleyebilen akıllı ve verimli kodlar oluşturmaya geçiş yapmayı öğreneceksiniz. Bu dersin sonunda, sadece birkaç satır kodla karmaşık veri görevlerini nasıl gerçekleştireceğinizi anlayacaksınız. Haydi bu temel programlama kavramlarını keşfedelim. [](https://youtube.com/watch?v=1U4qTyq02Xw "Diziler") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Döngüler") ## Diziler Dizileri dijital bir dosya dolabı gibi düşünün - her çekmecede bir belge saklamak yerine, birden fazla ilgili öğeyi tek bir yapılandırılmış kapta organize edebilirsiniz. Programlama açısından, diziler birden fazla bilgiyi tek bir düzenli pakette saklamanıza olanak tanır. Bir fotoğraf galerisi oluşturuyor, yapılacaklar listesini yönetiyor veya bir oyunda yüksek puanları takip ediyor olun, diziler veri organizasyonu için temel sağlar. Haydi nasıl çalıştıklarına bakalım. ✅ Diziler her yerde! Güneş paneli dizisi gibi gerçek hayattan bir dizi örneği düşünebilir misiniz? ### Dizi Oluşturma Bir dizi oluşturmak çok basit - sadece köşeli parantezler kullanın! Burada ne oluyor? Köşeli parantezler [] kullanarak boş bir kap oluşturdunuz. Bunu boş bir kütüphane rafı gibi düşünün - orada organize etmek istediğiniz kitapları tutmaya hazır. Diziyi başlangıç değerleriyle doldurabilirsiniz: Dikkat edilmesi gereken harika şeyler: - Aynı dizide metin, sayı veya doğru/yanlış değerleri saklayabilirsiniz - Her öğeyi bir virgülle ayırmanız yeterli - çok kolay! - Diziler, ilgili bilgileri bir arada tutmak için mükemmeldir ### Dizi İndeksleme Başlangıçta biraz garip gelebilecek bir şey: diziler öğelerini 1'den değil, 0'dan numaralandırır. Bu sıfır tabanlı indeksleme, bilgisayar belleğinin çalışma şekline dayanır - C gibi eski programlama dillerinden beri bir programlama geleneği olmuştur. Dizideki her bir nokta, indeks adı verilen kendi adres numarasını alır. ✅ Dizilerin sıfır indeksinden başlaması sizi şaşırtıyor mu? Bazı programlama dillerinde indeksler 1'den başlar. Bununla ilgili ilginç bir geçmişi Wikipedia'da okuyabilirsiniz. Dizi Öğelerine Erişim: Burada olanları açıklayalım: - Kullanır: İndeks numarasıyla köşeli parantez notasyonu - Döndürür: Dizideki belirli pozisyonda saklanan değeri - Başlar: 0'dan saymaya, ilk öğe indeks 0 olur Dizi Öğelerini Değiştirme: Yukarıda şunları yaptık: - Değiştirdik: İndeks 4'teki öğeyi "Rocky Road"dan "Butter Pecan"a - Ekledik: İndeks 5'e yeni bir öğe "Cookie Dough" - Otomatik olarak genişlettik: Mevcut sınırların ötesine ekleme yapıldığında dizi uzunluğu ### Dizi Uzunluğu ve Yaygın Metotlar Diziler, veriyle çalışmayı çok daha kolaylaştıran yerleşik özellikler ve metotlarla birlikte gelir. Dizi Uzunluğunu Bulma: Hatırlanması gereken önemli noktalar: - Döndürür: Dizideki toplam öğe sayısını - Otomatik olarak güncellenir: Öğeler eklendiğinde veya kaldırıldığında - Dinamik bir sayaç sağlar: Döngüler ve doğrulama için kullanışlıdır Temel Dizi Metotları: Bu metotları anlamak: - Ekler: push() (son) ve unshift() (başlangıç) ile öğeler - Kaldırır: pop() (son) ve shift() (başlangıç) ile öğeler - Bulur: indexOf() ile öğeleri ve includes() ile varlığını kontrol eder - Döndürür: Kaldırılan öğeler veya pozisyon indeksleri gibi faydalı değerler ✅ Kendiniz deneyin! Tarayıcınızın konsolunda kendi oluşturduğunuz bir diziyi oluşturun ve üzerinde değişiklikler yapın. ### 🧠 Dizi Temelleri Kontrolü: Verilerinizi Düzenleme Dizi anlayışınızı test edin: - Sizce diziler neden 0'dan saymaya başlıyor, 1'den değil? - Var olmayan bir indekse erişmeye çalışırsanız ne olur (örneğin, 5 öğeli bir dizide arr[100])? - Dizilerin kullanışlı olduğu üç gerçek dünya senaryosu düşünebilir misiniz? ## Döngüler Charles Dickens'ın romanlarındaki ünlü ceza sahnesini düşünün; öğrenciler bir cümleyi defalarca yazmak zorunda kalırdı. Birine "bu cümleyi 100 kez yaz" demeyi ve bunun otomatik olarak yapılmasını hayal edin. Döngüler tam olarak bunu kodunuz için yapar. Döngüler, görevleri hatasız bir şekilde tekrarlayabilen yorulmaz bir asistan gibidir. Alışveriş sepetindeki her öğeyi kontrol etmek veya bir albümdeki tüm fotoğrafları görüntülemek istiyorsanız, döngüler tekrarı verimli bir şekilde halleder. JavaScript, seçebileceğiniz birkaç döngü türü sunar. Her birini inceleyelim ve ne zaman kullanmanız gerektiğini anlayalım. ### For Döngüsü for döngüsü, bir zamanlayıcı ayarlamak gibidir - bir şeyin kaç kez gerçekleşmesini istediğinizi tam olarak bilirsiniz. Çok düzenli ve öngörülebilirdir, bu da dizilerle çalışırken veya bir şeyleri saymanız gerektiğinde mükemmel bir seçimdir. For Döngüsü Yapısı: Adım adım, burada olanlar: - Başlatır: Sayaç değişkeni iyi başlangıçta 0 olarak ayarlar - Kontrol eder: Her yinelemeden önce i < 10 koşulunu - Çalıştırır: Koşul doğru olduğunda kod bloğunu - Artırır: Her yinelemeden sonra iyi 1 artırır (i++) - Durur: Koşul yanlış olduğunda (örneğin, i 10'a ulaştığında) ✅ Bu kodu tarayıcı konsolunda çalıştırın. Sayaç, koşul veya yineleme ifadesinde küçük değişiklikler yaptığınızda ne olur? Geriye doğru çalıştırabilir misiniz, bir geri sayım oluşturabilir misiniz? ### 🗓️ For Döngüsü Ustalık Kontrolü: Kontrollü Tekrar For döngüsü anlayışınızı değerlendirin: - Bir for döngüsünün üç parçası nedir ve her biri ne yapar? - Bir diziyi geriye doğru nasıl döngüye alırsınız? - Artış kısmını (i++) unutursanız ne olur? ### While Döngüsü while döngüsü, "bunu yapmaya devam et, ta ki..." demek gibidir - kaç kez çalışacağını tam olarak bilmeyebilirsiniz, ancak ne zaman duracağınızı bilirsiniz. Kullanıcıdan istediğiniz girdiyi alana kadar sormak veya aradığınız veriyi bulana kadar veri aramak gibi durumlar için mükemmeldir. While Döngüsü Özellikleri: - Devam eder: Koşul doğru olduğu sürece çalışır - Gerektirir: Sayaç değişkenlerinin manuel yönetimini - Kontrol eder: Her yinelemeden önce koşulu - Risk taşır: Koşul asla yanlış olmazsa sonsuz döngü riski Bu örnekleri anlamak: - Yönetir: Sayaç değişkeni iyi döngü gövdesinde manuel olarak - Artırır: Sonsuz döngüleri önlemek için sayaç - Pratik kullanım örneği gösterir: Kullanıcı girdisi ve deneme sınırlandırması ile - Güvenlik mekanizmaları içerir: Sonsuz çalışmayı önlemek için ### ♾️ While Döngüsü Bilgeliği Kontrolü: Koşula Dayalı Tekrar While döngüsü anlayışınızı test edin: - While döngüleri kullanırken en büyük tehlike nedir? - Bir for döngüsü yerine ne zaman bir while döngüsü seçersiniz? - Sonsuz döngüleri nasıl önleyebilirsiniz? ### Modern Döngü Alternatifleri JavaScript, kodunuzu daha okunabilir ve daha az hata yapmaya yatkın hale getirebilecek modern döngü sözdizimi sunar. For...of Döngüsü (ES6+): For...of'un temel avantajları: - Ortadan kaldırır: İndeks yönetimi ve olası bir hata - Sağlar: Dizi öğelerine doğrudan erişim - Geliştirir: Kod okunabilirliğini ve sözdizimi karmaşıklığını azaltır forEach Metodu: forEach hakkında bilmeniz gerekenler: - Çalıştırır: Her dizi öğesi için bir fonksiyon - Sağlar: Hem öğe değeri hem de indeks parametre olarak - Durdurulamaz: Geleneksel döngüler gibi erken durdurulamaz - Döndürür: Undefined (yeni bir dizi oluşturmaz) ✅ Neden bir for döngüsü yerine bir while döngüsü seçersiniz? StackOverflow'da 17K izleyici aynı soruyu sordu ve bazı görüşler ilginç olabilir. ### 🎨 Modern Döngü Sözdizimi Kontrolü: ES6+'yı Benimsemek Modern JavaScript anlayışınızı değerlendirin: - For...ofun geleneksel for döngülerine göre avantajları nelerdir? - Geleneksel for döngülerini ne zaman tercih edersiniz? - forEach ile map arasındaki fark nedir? ## Döngüler ve Diziler Dizileri döngülerle birleştirmek, güçlü veri işleme yetenekleri oluşturur. Bu eşleşme, listeleri görüntülemekten istatistikleri hesaplamaya kadar birçok programlama görevi için temel oluşturur. Geleneksel Dizi İşleme: Her yaklaşımı anlayalım: - Kullanır: Döngü sınırını belirlemek için dizi uzunluğu özelliği - Erişir: Geleneksel for döngülerde indeksle öğelere - Sağlar: For...of döngülerde doğrudan öğe erişimi - İşler: Her dizi öğesini tam olarak bir kez Pratik Veri İşleme Örneği: Bu kodun nasıl çalıştığı: - Başlatır: Toplam ve uç değerler için izleme değişkenleri - İşler: Tek bir verimli döngüyle her bir notu - Biriktirir: Ortalama hesaplama için toplamı - Takip eder: Yineleme sırasında en yüksek ve en düşük değerleri - Hesaplar: Döngü tamamlandıktan sonra nihai istatistikleri ✅ Kendi oluşturduğunuz bir dizi üzerinde tarayıcı konsolunda döngü deneyleri yapın. --- ## GitHub Copilot Agent Challenge 🚀 Agent modunu kullanarak aşağıdaki meydan okumayı tamamlayın: Açıklama: Diziler ve döngüleri birleştirerek bir veri setini analiz eden ve anlamlı içgörüler üreten kapsamlı bir veri işleme fonksiyonu oluşturun. İstek: analyzeGrades adlı bir fonksiyon oluşturun. Bu fonksiyon, öğrenci notu nesnelerinden oluşan bir dizi alır (her biri ad ve puan özelliklerini içerir) ve en yüksek puan, en düşük puan, ortalama puan, geçen öğrenci sayısı (puan >= 70) ve ortalamanın üzerinde puan alan öğrenci isimlerini içeren bir istatistik nesnesi döndürür. Çözümünüzde en az iki farklı döngü türü kullanın. Agent modu hakkında daha fazla bilgi edinin: burada. ## 🚀 Meydan Okuma JavaScript, belirli görevler için geleneksel döngülerin yerini alabilecek birkaç modern dizi yöntemi sunar. forEach, for-of, map, filter ve reduce yöntemlerini keşfedin. Sizin göreviniz: Öğrenci notları örneğini en az üç farklı dizi yöntemi kullanarak yeniden düzenleyin. Modern JavaScript sözdizimi ile kodun ne kadar daha temiz ve okunabilir hale geldiğini fark edin. ## Ders Sonrası Test Ders sonrası test ## Gözden Geçirme ve Kendi Kendine Çalışma JavaScript'teki diziler, veri manipülasyonu için son derece kullanışlı birçok yönteme sahiptir. Bu yöntemler hakkında bilgi edinin ve kendi oluşturduğunuz bir dizi üzerinde bazılarını (örneğin push, pop, slice ve splice) deneyin. ## Ödev Diziyi Döngüye Al --- ## 📊 Diziler ve Döngüler Araç Seti Özeti --- ## 🚀 Diziler ve Döngüler Uzmanlık Zaman Çizelgesi ### ⚡ Sonraki 5 Dakikada Yapabilecekleriniz - [ ] Favori filmlerinizden oluşan bir dizi oluşturun ve belirli öğelere erişin - [ ] 1'den 10'a kadar sayan bir for döngüsü yazın - [ ] Dersteki modern dizi yöntemleri meydan okumasını deneyin - [ ] Tarayıcı konsolunuzda dizi indekslemeyi pratik yapın ### 🎯 Bu Saatte Başarabilecekleriniz - [ ] Ders sonrası testi tamamlayın ve zorlayıcı kavramları gözden geçirin - [ ] GitHub Copilot meydan okumasından kapsamlı not analizörü oluşturun - [ ] Basit bir alışveriş sepeti oluşturun ve öğeler ekleyip çıkarın - [ ] Farklı döngü türleri arasında dönüştürmeyi pratik yapın - [ ] push, pop, slice ve splice gibi dizi yöntemlerini deneyin ### 📅 Haftalık Veri İşleme Yolculuğunuz - [ ] "Diziyi Döngüye Al" ödevini yaratıcı geliştirmelerle tamamlayın - [ ] Diziler ve döngüler kullanarak bir yapılacaklar listesi uygulaması oluşturun - [ ] Sayısal veriler için basit bir istatistik hesaplayıcı oluşturun - [ ] MDN dizi yöntemleri ile pratik yapın - [ ] Fotoğraf galerisi veya müzik çalma listesi arayüzü oluşturun - [ ] map, filter ve reduce ile fonksiyonel programlamayı keşfedin ### 🌟 Aylık Dönüşümünüz - [ ] Gelişmiş dizi işlemleri ve performans optimizasyonunda ustalaşın - [ ] Tam bir veri görselleştirme panosu oluşturun - [ ] Veri işleme ile ilgili açık kaynak projelerine katkıda bulunun - [ ] Pratik örneklerle bir başkasına diziler ve döngüler hakkında öğretin - [ ] Yeniden kullanılabilir veri işleme fonksiyonlarından oluşan kişisel bir kütüphane oluşturun - [ ] Dizilere dayalı algoritmalar ve veri yapıları keşfedin ### 🏆 Son Veri İşleme Şampiyonu Kontrol Noktası Diziler ve döngülerdeki ustalığınızı kutlayın: - Gerçek dünya uygulamaları için öğrendiğiniz en faydalı dizi işlemi nedir? - Hangi döngü türü size en doğal geliyor ve neden? - Diziler ve döngüleri anlamak, verileri organize etme yaklaşımınızı nasıl değiştirdi? - Bir sonraki ele almak istediğiniz karmaşık veri işleme görevi nedir? --- Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.

javascript

Вступ до JavaScript

JavaScript — це мова вебу. У цих чотирьох уроках ви ознайомитеся з її основами. ### Теми 1. Змінні та типи даних 2. Функції та методи 3. Прийняття рішень за допомогою JavaScript 4. Масиви та цикли ### Автори Ці уроки були написані з ♥️ Jasmine Greenaway, Christopher Harrison та Chris Noring --- Відмова від відповідальності: Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.

javascript

Основи JavaScript: Типи даних

Типи даних — це одна з основних концепцій у JavaScript, з якою ви зіткнетеся в кожній програмі, яку пишете. Уявіть типи даних як систему каталогізації, яку використовували стародавні бібліотекарі в Александрії – вони мали окремі місця для сувоїв з поезією, математикою та історичними записами. JavaScript організовує інформацію схожим чином, розділяючи її на різні категорії для різних типів даних. У цьому уроці ми розглянемо основні типи даних, які роблять JavaScript таким потужним. Ви навчитеся працювати з числами, текстом, значеннями true/false і зрозумієте, чому вибір правильного типу даних є важливим для ваших програм. Ці концепції можуть здатися абстрактними на початку, але з практикою вони стануть для вас природними. Розуміння типів даних зробить все інше в JavaScript набагато зрозумілішим. Як архітектори повинні розуміти різні будівельні матеріали перед тим, як будувати собор, ці основи підтримуватимуть усе, що ви створюватимете в майбутньому. ## Тест перед лекцією Тест перед лекцією Цей урок охоплює основи JavaScript, мови, яка забезпечує інтерактивність у вебі. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Змінні в JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Типи даних у JavaScript") Почнемо зі змінних і типів даних, які їх наповнюють! ## Змінні Змінні — це фундаментальні будівельні блоки в програмуванні. Як і підписані банки, які середньовічні алхіміки використовували для зберігання різних речовин, змінні дозволяють зберігати інформацію та давати їй описову назву, щоб ви могли звертатися до неї пізніше. Потрібно запам'ятати чийсь вік? Збережіть його в змінній age. Хочете відстежувати ім'я користувача? Збережіть його в змінній userName. Ми зосередимося на сучасному підході до створення змінних у JavaScript. Техніки, які ви тут вивчите, представляють роки еволюції мови та найкращі практики, розроблені програмістами. Створення та оголошення змінної має наступний синтаксис [ключове слово] [назва]. Це складається з двох частин: - Ключове слово. Використовуйте let для змінних, які можуть змінюватися, або const для значень, які залишаються незмінними. - Назва змінної, це описова назва, яку ви вибираєте самі. ✅ Ключове слово let було введено в ES6 і надає вашій змінній так звану _блокову область видимості_. Рекомендується використовувати let або const замість старішого ключового слова var. Ми детальніше розглянемо блокові області видимості в наступних частинах. ### Завдання - робота зі змінними 1. Оголосіть змінну. Почнемо з створення нашої першої змінної: ```javascript let myVariable; ``` Що це робить: - Це говорить JavaScript створити місце для зберігання під назвою myVariable - JavaScript виділяє місце в пам'яті для цієї змінної - Змінна наразі не має значення (undefined) 2. Присвойте значення. Тепер давайте помістимо щось у нашу змінну: ```javascript myVariable = 123; ``` Як працює присвоєння: - Оператор = присвоює значення 123 нашій змінній - Змінна тепер містить це значення замість того, щоб бути undefined - Ви можете звертатися до цього значення у вашому коді, використовуючи myVariable > Примітка: використання = у цьому уроці означає, що ми використовуємо "оператор присвоєння", який використовується для встановлення значення змінної. Це не позначає рівність. 3. Зробіть це розумно. Насправді, давайте об'єднаємо ці два кроки: ```javascript let myVariable = 123; ``` Цей підхід більш ефективний: - Ви оголошуєте змінну та присвоюєте значення в одному операторі - Це стандартна практика серед розробників - Це скорочує довжину коду, зберігаючи його зрозумілість 4. Змініть свою думку. Що, якщо ми хочемо зберегти інше число? ```javascript myVariable = 321; ``` Розуміння повторного присвоєння: - Змінна тепер містить 321 замість 123 - Попереднє значення замінено – змінні зберігають лише одне значення за раз - Ця змінність є ключовою характеристикою змінних, оголошених за допомогою let ✅ Спробуйте! Ви можете писати JavaScript прямо у вашому браузері. Відкрийте вікно браузера та перейдіть до Інструментів розробника. У консолі ви знайдете запит; введіть let myVariable = 123, натисніть Enter, а потім введіть myVariable. Що відбувається? Зверніть увагу, ви дізнаєтеся більше про ці концепції в наступних уроках. ### 🧠 Перевірка майстерності змінних: освоєння Давайте перевіримо, як ви почуваєтеся щодо змінних: - Чи можете ви пояснити різницю між оголошенням і присвоєнням змінної? - Що станеться, якщо ви спробуєте використати змінну до її оголошення? - Коли ви оберете let замість const для змінної? ## Константи Іноді вам потрібно зберігати інформацію, яка не повинна змінюватися під час виконання програми. Уявіть константи як математичні принципи, які встановив Евклід у стародавній Греції – після доведення та документування вони залишалися незмінними для всіх майбутніх поколінь. Константи працюють схожим чином до змінних, але з важливим обмеженням: після присвоєння значення його не можна змінити. Ця незмінність допомагає запобігти випадковим змінам критичних значень у вашій програмі. Оголошення та ініціалізація константи слідує тим же концепціям, що і змінна, за винятком ключового слова const. Константи зазвичай оголошуються великими літерами. Що робить цей код: - Створює константу під назвою MY_VARIABLE зі значенням 123 - Використовує конвенцію написання великими літерами для констант - Запобігає будь-яким майбутнім змінам цього значення Константи мають два основних правила: - Ви повинні надати їм значення одразу – порожні константи не дозволені! - Ви ніколи не можете змінити це значення – JavaScript видасть помилку, якщо ви спробуєте. Давайте подивимося, що я маю на увазі: Просте значення - Наступне НЕ дозволено: ```javascript const PI = 3; PI = 4; // не дозволено ``` Що потрібно пам'ятати: - Спроби повторного присвоєння константи викличуть помилку - Захищає важливі значення від випадкових змін - Гарантує, що значення залишатиметься постійним протягом всієї програми Посилання на об'єкт захищене - Наступне НЕ дозволено: ```javascript const obj = { a: 3 }; obj = { b: 5 } // не дозволено ``` Розуміння цих концепцій: - Запобігає заміні всього об'єкта на новий - Захищає посилання на оригінальний об'єкт - Зберігає ідентичність об'єкта в пам'яті Значення об'єкта не захищене - Наступне дозволено: ```javascript const obj = { a: 3 }; obj.a = 5; // дозволено ``` Розбір того, що тут відбувається: - Змінює значення властивості всередині об'єкта - Зберігає те саме посилання на об'єкт - Демонструє, що вміст об'єкта може змінюватися, поки посилання залишається постійним > Примітка, const означає, що посилання захищене від повторного присвоєння. Однак значення не є _незмінним_ і може змінюватися, особливо якщо це складна структура, як-от об'єкт. ## Типи даних JavaScript організовує інформацію в різні категорії, які називаються типами даних. Ця концепція нагадує, як стародавні вчені класифікували знання – Арістотель розрізняв різні типи мислення, знаючи, що логічні принципи не можна однаково застосовувати до поезії, математики та природної філософії. Типи даних важливі, тому що різні операції працюють з різними видами інформації. Як ви не можете виконати арифметичні дії над ім'ям людини або алфавітно впорядкувати математичне рівняння, JavaScript вимагає відповідного типу даних для кожної операції. Розуміння цього запобігає помилкам і робить ваш код більш надійним. Змінні можуть зберігати багато різних типів значень, таких як числа та текст. Ці різні типи значень відомі як типи даних. Типи даних є важливою частиною розробки програмного забезпечення, оскільки вони допомагають розробникам приймати рішення про те, як має бути написаний код і як має працювати програмне забезпечення. Крім того, деякі типи даних мають унікальні особливості, які допомагають трансформувати або витягувати додаткову інформацію зі значення. ✅ Типи даних також називаються примітивами даних JavaScript, оскільки вони є найнижчим рівнем типів даних, які надає мова. Існує 7 примітивних типів даних: string, number, bigint, boolean, undefined, null і symbol. Зробіть паузу, щоб уявити, що кожен із цих примітивів може представляти. Що таке zebra? А як щодо 0? true? ### Числа Числа — це найпростіший тип даних у JavaScript. Незалежно від того, працюєте ви з цілими числами, такими як 42, десятковими дробами, такими як 3.14, або від'ємними числами, такими як -5, JavaScript обробляє їх однаково. Пам'ятаєте нашу змінну з попереднього прикладу? Той 123, який ми зберегли, насправді був числовим типом даних: Основні характеристики: - JavaScript автоматично розпізнає числові значення - Ви можете виконувати математичні операції з цими змінними - Не потрібна явна декларація типу Змінні можуть зберігати всі типи чисел, включаючи десяткові дроби або від'ємні числа. Числа також можуть використовуватися з арифметичними операторами, які розглядаються в наступному розділі. ### Арифметичні оператори Арифметичні оператори дозволяють виконувати математичні обчислення в JavaScript. Ці оператори слідують тим же принципам, які математики використовували століттями – ті ж символи, які з'являлися в роботах таких учених, як Аль-Хорезмі, який розробив алгебраїчну нотацію. Оператори працюють так, як ви очікуєте від традиційної математики: плюс для додавання, мінус для віднімання тощо. Існує кілька типів операторів для виконання арифметичних функцій, і деякі з них наведені тут: ✅ Спробуйте! Спробуйте арифметичну операцію в консолі вашого браузера. Чи здивували вас результати? ### 🧮 Перевірка математичних навичок: впевнені обчислення Перевірте своє розуміння арифметики: - У чому різниця між / (ділення) і % (залишок)? - Чи можете ви передбачити, чому дорівнює 10 % 3? (Підказка: це не 3.33...) - Чому оператор залишку може бути корисним у програмуванні? ### Рядки У JavaScript текстові дані представлені як рядки. Термін "рядок" походить від концепції символів, з'єднаних у послідовність, як літери, які середньовічні писарі з'єднували для створення слів і речень у своїх рукописах. Рядки є основою веб-розробки. Кожен шматок тексту, який відображається на веб-сайті – імена користувачів, підписи кнопок, повідомлення про помилки, контент – обробляється як дані рядка. Розуміння рядків є важливим для створення функціональних інтерфейсів користувача. Рядки — це набори символів, які знаходяться між одинарними або подв Щоб об'єднати два або більше рядків, або з'єднати їх разом, використовуйте оператор +. Крок за кроком, ось що відбувається: - Об'єднує кілька рядків за допомогою оператора + - З'єднує рядки безпосередньо без пробілів у першому прикладі - Додає пробіли " " між рядками для зручності читання - Вставляє пунктуацію, наприклад, коми, для правильного форматування ✅ Чому 1 + 1 = 2 у JavaScript, але '1' + '1' = 11? Подумайте над цим. А як щодо '1' + 1? Шаблонні літерали – це ще один спосіб форматування рядків, але замість лапок використовується зворотний апостроф. Все, що не є простим текстом, має бути поміщене в заповнювачі ${ }. Це включає будь-які змінні, які можуть бути рядками. Розберемо кожну частину: - Використовує зворотні апострофи ` `` замість звичайних лапок для створення шаблонних літералів - Вбудовує змінні безпосередньо за допомогою синтаксису заповнювача ${} - Зберігає пробіли та форматування точно так, як написано - Забезпечує зручніший спосіб створення складних рядків зі змінними Ви можете досягти своїх цілей форматування будь-яким методом, але шаблонні літерали зберігають пробіли та розриви рядків. ✅ Коли ви б використали шаблонний літерал замість звичайного рядка? ### 🔤 Перевірка майстерності роботи з рядками: впевненість у маніпуляції текстом Оцініть свої навички роботи з рядками: - Чи можете ви пояснити, чому '1' + '1' дорівнює '11', а не 2? - Який метод роботи з рядками ви вважаєте більш зручним: конкатенацію чи шаблонні літерали? - Що станеться, якщо ви забудете лапки навколо рядка? ### Булеві значення Булеві значення представляють найпростіший тип даних: вони можуть мати лише одне з двох значень – true або false. Ця система двійкової логіки бере свій початок з роботи Джорджа Була, математика XIX століття, який розробив булеву алгебру. Незважаючи на свою простоту, булеві значення є важливими для логіки програм. Вони дозволяють вашому коду приймати рішення на основі умов – чи користувач увійшов у систему, чи була натиснута кнопка, чи виконані певні критерії. Булеві значення можуть бути лише двох значень: true або false. Вони допомагають приймати рішення, які рядки коду повинні виконуватися за певних умов. У багатьох випадках оператори допомагають встановлювати значення булевих змінних, і ви часто помітите та будете писати змінні, які ініціалізуються або їх значення оновлюється за допомогою оператора. У наведеному прикладі ми: - Створили змінну, яка зберігає булеве значення true - Продемонстрували, як зберігати булеве значення false - Використали точні ключові слова true і false (без лапок) - Підготували ці змінні для використання в умовних операторах ✅ Змінна може вважатися "істинною", якщо вона оцінюється як булеве значення true. Цікаво, що в JavaScript усі значення є істинними, якщо вони не визначені як хибні. ### 🎯 Перевірка логіки булевих значень: навички прийняття рішень Перевірте своє розуміння булевих значень: - Чому, на вашу думку, JavaScript має "істинні" та "хибні" значення, окрім просто true і false? - Чи можете ви передбачити, яке з цих значень є хибним: 0, "0", [], "false"? - Як булеві значення можуть бути корисними для контролю потоку програми? --- ## 📊 Резюме вашого інструментарію типів даних ## Виклик GitHub Copilot Agent 🚀 Використовуйте режим Agent, щоб виконати наступний виклик: Опис: Створіть менеджер особистої інформації, який демонструє всі типи даних JavaScript, які ви вивчили на цьому уроці, працюючи з реальними сценаріями даних. Завдання: Напишіть програму на JavaScript, яка створює об'єкт профілю користувача, що містить: ім'я особи (рядок), вік (число), статус студента (булеве значення), улюблені кольори як масив і об'єкт адреси з властивостями вулиці, міста та поштового індексу. Додайте функції для відображення інформації профілю та оновлення окремих полів. Обов'язково продемонструйте конкатенацію рядків, шаблонні літерали, арифметичні операції з віком і булеву логіку для статусу студента. Дізнайтеся більше про режим Agent тут. ## 🚀 Виклик JavaScript має деякі поведінкові особливості, які можуть здивувати розробників. Ось класичний приклад для дослідження: спробуйте ввести це в консоль вашого браузера: let age = 1; let Age = 2; age == Age і спостерігайте за результатом. Він повертає false – чи можете ви визначити, чому? Це один із багатьох аспектів поведінки JavaScript, які варто зрозуміти. Знання цих особливостей допоможе вам писати більш надійний код і ефективно виправляти помилки. ## Післялекційний тест Післялекційний тест ## Огляд і самостійне навчання Перегляньте цей список вправ з JavaScript і спробуйте одну. Що ви дізналися? ## Завдання Практика типів даних ## 🚀 Ваш графік освоєння типів даних JavaScript ### ⚡ Що ви можете зробити за наступні 5 хвилин - [ ] Відкрийте консоль браузера і створіть 3 змінні з різними типами даних - [ ] Спробуйте виклик: let age = 1; let Age = 2; age == Age і зрозумійте, чому це false - [ ] Попрактикуйте конкатенацію рядків зі своїм ім'ям і улюбленим числом - [ ] Перевірте, що станеться, якщо додати число до рядка ### 🎯 Що ви можете досягти за годину - [ ] Завершіть тест після уроку та перегляньте будь-які незрозумілі концепції - [ ] Створіть міні-калькулятор, який додає, віднімає, множить і ділить два числа - [ ] Побудуйте простий форматувач імен за допомогою шаблонних літералів - [ ] Досліджуйте різницю між операторами порівняння == і === - [ ] Попрактикуйте перетворення між різними типами даних ### 📅 Ваш тижневий фундамент JavaScript - [ ] Завершіть завдання з упевненістю та творчістю - [ ] Створіть об'єкт особистого профілю, використовуючи всі типи даних, які ви вивчили - [ ] Практикуйтеся з вправами JavaScript від CSS-Tricks - [ ] Побудуйте простий валідатор форм, використовуючи булеву логіку - [ ] Експериментуйте з масивами та об'єктами (попередній перегляд наступних уроків) - [ ] Приєднайтеся до спільноти JavaScript і задавайте питання про типи даних ### 🌟 Ваш місячний трансформаційний шлях - [ ] Інтегруйте знання про типи даних у більші програмні проекти - [ ] Зрозумійте, коли і чому використовувати кожен тип даних у реальних додатках - [ ] Допомагайте іншим новачкам зрозуміти основи JavaScript - [ ] Створіть невеликий додаток, який управляє різними типами даних користувача - [ ] Досліджуйте складні концепції типів даних, такі як примусове приведення типів і сувора рівність - [ ] Внесіть свій вклад у проекти з відкритим кодом JavaScript, покращуючи документацію ### 🧠 Фінальна перевірка майстерності типів даних Відзначте свої досягнення у JavaScript: - Який тип даних здивував вас найбільше своєю поведінкою? - Наскільки комфортно ви почуваєтеся, пояснюючи змінні та константи другу? - Що найцікавіше ви дізналися про систему типів JavaScript? - Який реальний додаток ви можете уявити, використовуючи ці основи? --- Відмова від відповідальності: Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.

javascript

Основи JavaScript: Методи та функції

## Тест перед лекцією Тест перед лекцією Постійне написання одного й того ж коду є однією з найпоширеніших проблем у програмуванні. Функції вирішують цю проблему, дозволяючи упаковувати код у блоки, які можна використовувати повторно. Уявіть функції як стандартизовані деталі, які зробили революцію на конвеєрі Генрі Форда – створивши надійний компонент, ви можете використовувати його де завгодно, не створюючи заново. Функції дозволяють об'єднувати частини коду, щоб використовувати їх у різних місцях програми. Замість копіювання та вставки однієї й тієї ж логіки всюди, ви можете створити функцію один раз і викликати її, коли це потрібно. Такий підхід допомагає організувати код і значно спрощує оновлення. У цьому уроці ви навчитеся створювати власні функції, передавати їм інформацію та отримувати корисні результати. Ви дізнаєтеся різницю між функціями та методами, освоїте сучасні синтаксичні підходи та побачите, як функції можуть взаємодіяти одна з одною. Ми будемо розбирати ці концепції крок за кроком. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Методи та функції") ## Функції Функція – це автономний блок коду, який виконує певне завдання. Вона інкапсулює логіку, яку можна виконати за потреби. Замість написання одного й того ж коду кілька разів у програмі, ви можете упакувати його у функцію і викликати її, коли це потрібно. Такий підхід допомагає зберігати код чистим і значно спрощує оновлення. Уявіть, як складно було б змінити логіку, розкидану по 20 різних місцях у вашій кодовій базі. Дуже важливо давати функціям описові назви. Добре названі функції чітко передають своє призначення – коли ви бачите cancelTimer(), ви одразу розумієте, що вона робить, так само як чітко позначена кнопка повідомляє, що станеться при її натисканні. ## Створення та виклик функції Давайте розглянемо, як створити функцію. Синтаксис дотримується послідовного шаблону: Розберемо це: - Ключове слово function повідомляє JavaScript: "Гей, я створюю функцію!" - nameOfFunction – це місце, де ви даєте функції описову назву - Круглі дужки () – це місце, де можна додати параметри (ми скоро до цього дійдемо) - Фігурні дужки {} містять фактичний код, який виконується при виклику функції Давайте створимо просту функцію привітання, щоб побачити це в дії: Ця функція виводить "Hello, world!" у консоль. Після того, як ви її визначили, ви можете використовувати її стільки разів, скільки потрібно. Щоб виконати (або "викликати") вашу функцію, напишіть її назву, а потім круглі дужки. JavaScript дозволяє визначати функцію до або після її виклику – двигун JavaScript обробить порядок виконання. Коли ви запускаєте цей рядок, він виконує весь код всередині вашої функції displayGreeting, відображаючи "Hello, world!" у консолі вашого браузера. Ви можете викликати цю функцію повторно. ### 🧠 Перевірка основ функцій: Створення ваших перших функцій Давайте перевіримо, як ви розумієте основи функцій: - Чому ми використовуємо фігурні дужки {} у визначеннях функцій? - Що станеться, якщо написати displayGreeting без круглих дужок? - Чому може знадобитися викликати одну й ту ж функцію кілька разів? ### Найкращі практики для функцій Ось кілька порад, які допоможуть вам писати якісні функції: - Давайте функціям чіткі, описові назви – ваш майбутній "я" буде вам вдячний! - Використовуйте camelCasing для назв із кількох слів (наприклад, calculateTotal замість calculate_total) - Зосередьте кожну функцію на виконанні одного завдання добре ## Передача інформації у функцію Наша функція displayGreeting обмежена – вона може показувати "Hello, world!" для всіх. Параметри дозволяють зробити функції більш гнучкими та корисними. Параметри діють як заповнювачі, куди можна вставляти різні значення кожного разу, коли ви використовуєте функцію. Таким чином, одна й та ж функція може працювати з різною інформацією при кожному виклику. Ви перераховуєте параметри всередині круглих дужок при визначенні функції, розділяючи кілька параметрів комами: Кожен параметр діє як заповнювач – коли хтось викликає вашу функцію, він надає фактичні значення, які вставляються в ці місця. Давайте оновимо нашу функцію привітання, щоб вона приймала ім'я людини: Зверніть увагу, як ми використовуємо зворотні лапки (` `) і ${}` для вставки імені безпосередньо в наше повідомлення – це називається шаблонним літералом, і це дуже зручний спосіб створення рядків із змінними. Тепер, коли ми викликаємо нашу функцію, ми можемо передати будь-яке ім'я: JavaScript бере рядок 'Christopher', присвоює його параметру name і створює персоналізоване повідомлення "Hello, Christopher!" ## Значення за замовчуванням Що, якщо ми хочемо зробити деякі параметри необов'язковими? Тут стають у нагоді значення за замовчуванням! Наприклад, ми хочемо, щоб люди могли налаштувати слово привітання, але якщо вони не вкажуть його, ми просто використаємо "Hello" як резервне. Ви можете встановити значення за замовчуванням, використовуючи знак рівності, так само як при встановленні змінної: Тут name все ще обов'язковий, але salutation має резервне значення 'Hello', якщо ніхто не надасть іншого привітання. Тепер ми можемо викликати цю функцію двома різними способами: У першому виклику JavaScript використовує значення за замовчуванням "Hello", оскільки ми не вказали привітання. У другому виклику він використовує наше власне "Hi". Така гнучкість робить функції адаптивними до різних сценаріїв. ### 🎛️ Перевірка параметрів: Робимо функції гнучкими Перевірте своє розуміння параметрів: - У чому різниця між параметром і аргументом? - Чому значення за замовчуванням корисні в реальному програмуванні? - Чи можете ви передбачити, що станеться, якщо передати більше аргументів, ніж параметрів? ## Повернення значень Наші функції до цього моменту просто виводили повідомлення в консоль, але що, якщо ви хочете, щоб функція щось обчислювала і повертала результат? Тут у гру вступають значення, що повертаються. Замість того, щоб просто щось відображати, функція може повернути значення, яке ви можете зберегти у змінній або використовувати в інших частинах вашого коду. Щоб повернути значення, використовуйте ключове слово return, за яким слідує те, що ви хочете повернути: Ось важливий момент: коли функція досягає оператора return, вона негайно припиняє виконання і повертає це значення тому, хто її викликав. Давайте змінимо нашу функцію привітання, щоб вона повертала повідомлення замість того, щоб виводити його: Тепер замість того, щоб виводити привітання, ця функція створює повідомлення і передає його нам. Щоб використовувати повернене значення, ми можемо зберегти його у змінній, як будь-яке інше значення: Тепер greetingMessage містить "Hello, Christopher", і ми можемо використовувати його будь-де в нашому коді – для відображення на веб-сторінці, включення в електронний лист або передачі іншій функції. ### 🔄 Перевірка значень, що повертаються: Отримання результатів Оцініть своє розуміння значень, що повертаються: - Що відбувається з кодом після оператора return у функції? - Чому повернення значень часто краще, ніж просто виведення в консоль? - Чи може функція повертати різні типи значень (рядок, число, булеве значення)? ## Функції як параметри для функцій Функції можуть передаватися як параметри іншим функціям. Хоча ця концепція може здатися складною спочатку, це потужна функція, яка дозволяє створювати гнучкі шаблони програмування. Цей шаблон дуже поширений, коли ви хочете сказати "коли щось станеться, зробіть це інше". Наприклад, "коли таймер закінчиться, виконайте цей код" або "коли користувач натисне кнопку, викличте цю функцію". Давайте розглянемо setTimeout, яка є вбудованою функцією, що чекає певний час, а потім виконує код. Нам потрібно сказати їй, який код виконати – ідеальний випадок для передачі функції! Спробуйте цей код – через 3 секунди ви побачите повідомлення: Зверніть увагу, як ми передаємо displayDone (без круглих дужок) у setTimeout. Ми не викликаємо функцію самі – ми передаємо її setTimeout і кажемо "викличте це через 3 секунди". ### Анонімні функції Іноді вам потрібна функція лише для однієї задачі, і ви не хочете давати їй ім'я. Подумайте про це – якщо ви використовуєте функцію лише один раз, навіщо захаращувати код зайвим ім'ям? JavaScript дозволяє створювати анонімні функції – функції без імен, які можна визначити там, де вони потрібні. Ось як ми можемо переписати наш приклад таймера, використовуючи анонімну функцію: Це досягає того ж результату, але функція визначається безпосередньо в виклику setTimeout, усуваючи потребу в окремому визначенні функції. ### Стрілкові функції Сучасний JavaScript має ще коротший спосіб написання функцій, який називається стрілковими функціями. Вони використовують => (що виглядає як стрілка – зрозуміло?) і дуже популярні серед розробників. Стрілкові функції дозволяють пропустити ключове слово function і писати більш лаконічний код. Ось наш приклад таймера, використовуючи стрілкову функцію: () – це місце, де будуть параметри (порожнє в цьому випадку), потім йде стрілка =>, і нарешті тіло функції у фігурних дужках. Це забезпечує ту ж функціональність із більш лаконічним синтаксисом. ### Коли використовувати кожну стратегію Коли слід використовувати кожен підхід? Практичне правило: якщо ви будете використовувати функцію кілька разів, дайте їй ім'я і визначте її окремо. Якщо вона потрібна для одного конкретного використання, розгляньте анонімну функцію. І стрілкові функції, і традиційний синтаксис є допустимими варіантами, хоча стрілкові функції поширені в сучасних кодових базах JavaScript. ### 🎨 Перевірка стилів функцій: Вибір правильного синтаксису Перевірте своє розуміння синтаксису: - Коли ви можете віддати перевагу стрілковим функціям над традиційним синтаксисом функцій? - У чому основна перевага анонімних функцій? - Чи можете ви придумати ситуацію, коли іменована функція краще за анонімну? --- ## 🚀 Виклик Чи можете ви сформулювати в одному реченні різницю між функціями та методами? Спробуйте! ## Виклик GitHub Copilot Agent 🚀 Використовуйте режим Agent, щоб виконати наступний виклик: Опис: Створіть бібліотеку утиліт математичних функцій, яка демонструє різні концепції функцій, розглянуті в цьому уроці, включаючи параметри, значення за замовчуванням, значення, що повертаються, і стрілкові функції. Запит: Створіть файл JavaScript під назвою mathUtils.js, який містить наступні функції: 1. Функція add, яка приймає два параметри і повертає їх суму 2. Функція multiply із значеннями параметрів за замовчуванням (другий параметр за замовчуванням дорівнює 1) 3. Стрілкова функція square, яка приймає число і повертає його квадрат 4. Функція calculate, яка приймає іншу функцію як параметр і два числа, а потім застосовує функцію до цих чисел 5. Продемонструйте виклик кожної функції з відповідними тестовими випадками Дізнайтеся більше про режим Agent тут. ## Тест після лекції Тест після лекції ## Огляд і самост - [ ] Спробуйте перетворити традиційну функцію на синтаксис стрілкової функції - [ ] Практикуйте завдання: поясніть різницю між функціями та методами ### 🎯 Що Ви Можете Зробити За Цю Годину - [ ] Завершіть тест після уроку та перегляньте будь-які незрозумілі концепції - [ ] Створіть бібліотеку математичних утиліт із виклику GitHub Copilot - [ ] Напишіть функцію, яка використовує іншу функцію як параметр - [ ] Практикуйте написання функцій із параметрами за замовчуванням - [ ] Експериментуйте з шаблонними літералами у значеннях, які повертають функції ### 📅 Ваш Тижневий Майстер-Клас Функцій - [ ] Завершіть завдання "Розваги з функціями" творчо - [ ] Переробіть повторюваний код, який ви написали, у багаторазові функції - [ ] Створіть невеликий калькулятор, використовуючи лише функції (без глобальних змінних) - [ ] Практикуйте стрілкові функції з методами масивів, такими як map() і filter() - [ ] Створіть колекцію утиліт-функцій для поширених завдань - [ ] Вивчайте функції вищого порядку та концепції функціонального програмування ### 🌟 Ваш Місячний Ривок - [ ] Опануйте складні концепції функцій, такі як замикання та область видимості - [ ] Створіть проєкт, який активно використовує композицію функцій - [ ] Внесіть вклад у відкритий код, покращуючи документацію функцій - [ ] Навчіть когось іншого функціям та різним стилям синтаксису - [ ] Досліджуйте парадигми функціонального програмування в JavaScript - [ ] Створіть особисту бібліотеку багаторазових функцій для майбутніх проєктів ### 🏆 Фінальна Перевірка Чемпіона Функцій Відсвяткуйте своє опанування функцій: - Яка найкорисніша функція, яку ви створили до цього часу? - Як вивчення функцій змінило ваш підхід до організації коду? - Який синтаксис функцій ви віддаєте перевагу і чому? - Яку реальну проблему ви б вирішили, написавши функцію? --- Відмова від відповідальності: Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.

javascript

Основи JavaScript: Прийняття рішень

Чи замислювалися ви, як програми приймають розумні рішення? Наприклад, як навігаційна система вибирає найшвидший маршрут або як термостат вирішує, коли увімкнути обігрів? Це основна концепція прийняття рішень у програмуванні. Як і Аналітична машина Чарльза Беббіджа, яка була створена для виконання різних послідовностей операцій залежно від умов, сучасні програми на JavaScript повинні приймати рішення, враховуючи різні обставини. Ця здатність розгалужуватися і приймати рішення перетворює статичний код на чутливі, інтелектуальні програми. У цьому уроці ви навчитеся реалізовувати умовну логіку у своїх програмах. Ми розглянемо умовні оператори, оператори порівняння та логічні вирази, які дозволяють вашому коду оцінювати ситуації та відповідно реагувати. ## Тест перед лекцією Тест перед лекцією Здатність приймати рішення та контролювати потік програми є фундаментальним аспектом програмування. У цьому розділі ми розглянемо, як контролювати шлях виконання ваших програм на JavaScript за допомогою булевих значень та умовної логіки. [](https://youtube.com/watch?v=SxTp8j-fMMY "Прийняття рішень") ## Короткий огляд булевих значень Перед тим як перейти до прийняття рішень, давайте згадаємо булеві значення з нашого попереднього уроку. Названі на честь математика Джорджа Буля, ці значення представляють двійкові стани – або true, або false. Тут немає неоднозначності, немає середнього значення. Ці двійкові значення є основою всієї обчислювальної логіки. Кожне рішення, яке приймає ваша програма, зрештою зводиться до булевої оцінки. Створення булевих змінних є простим: Це створює дві змінні з явними булевими значеннями. ✅ Булеві значення названі на честь англійського математика, філософа та логіка Джорджа Буля (1815–1864). ## Оператори порівняння та булеві значення На практиці ви рідко будете вручну встановлювати булеві значення. Замість цього ви будете генерувати їх, оцінюючи умови: "Чи це число більше за те?" або "Чи ці значення рівні?" Оператори порівняння дозволяють виконувати ці оцінки. Вони порівнюють значення і повертають булеві результати на основі відношення між операндами. ✅ Перевірте свої знання, написавши кілька порівнянь у консолі вашого браузера. Чи здивували вас якісь отримані дані? ### 🧠 Перевірка майстерності порівнянь: Розуміння булевої логіки Перевірте своє розуміння порівнянь: - Чому, на вашу думку, === (строга рівність) зазвичай віддається перевага над == (нестрога рівність)? - Чи можете ви передбачити, що поверне 5 === '5'? А як щодо 5 == '5'? - У чому різниця між !== та !=? ## Оператор if Оператор if схожий на запитання у вашому коді. "Якщо ця умова істинна, тоді зроби це." Це, мабуть, найважливіший інструмент, який ви будете використовувати для прийняття рішень у JavaScript. Ось як це працює: Умова розміщується всередині круглих дужок, і якщо вона true, JavaScript виконує код всередині фігурних дужок. Якщо вона false, JavaScript просто пропускає цей блок. Ви часто будете використовувати оператори порівняння для створення цих умов. Давайте розглянемо практичний приклад: Оскільки 1000 >= 800 оцінюється як true, код всередині блоку виконується, відображаючи "Купую новий ноутбук!" у консолі. ## Оператор if..else Але що, якщо ви хочете, щоб ваша програма робила щось інше, коли умова хибна? Тут на допомогу приходить else – це як запасний план. Оператор else дає вам можливість сказати "якщо ця умова не істинна, зроби щось інше." Тепер, оскільки 500 >= 800 є false, JavaScript пропускає перший блок і виконує блок else. Ви побачите "Поки не можу дозволити собі новий ноутбук!" у консолі. ✅ Перевірте своє розуміння цього коду та наступного коду, запустивши його в консолі браузера. Змініть значення змінних currentMoney та laptopPrice, щоб змінити результат console.log(). ### 🎯 Перевірка логіки if-else: Розгалуження шляхів Оцініть своє розуміння умовної логіки: - Що станеться, якщо currentMoney точно дорівнює laptopPrice? - Чи можете ви придумати реальний сценарій, де логіка if-else була б корисною? - Як ви могли б розширити це для обробки кількох діапазонів цін? ## Оператор switch Іноді вам потрібно порівняти одне значення з кількома варіантами. Хоча ви могли б зв'язати кілька операторів if..else, цей підхід стає громіздким. Оператор switch забезпечує більш чисту структуру для обробки кількох дискретних значень. Концепція нагадує механічні системи перемикання, які використовувалися в ранніх телефонних станціях – одне вхідне значення визначає, який конкретний шлях виконання буде обраний. Ось як це структуровано: - JavaScript оцінює вираз один раз - Переглядає кожен case, щоб знайти збіг - Коли знаходить збіг, виконує цей блок коду - break каже JavaScript зупинитися і вийти з switch - Якщо жоден case не збігається, виконується блок default (якщо він є) У цьому прикладі JavaScript бачить, що dayNumber дорівнює 2, знаходить відповідний case 2, встановлює dayName як "Вівторок", а потім виходить із switch. Результат? "Сьогодні вівторок" виводиться в консоль. ✅ Перевірте своє розуміння цього коду та наступного коду, запустивши його в консолі браузера. Змініть значення змінної a, щоб змінити результат console.log(). ### 🔄 Перевірка майстерності switch: Багато варіантів Перевірте своє розуміння switch: - Що станеться, якщо ви забудете оператор break? - Коли ви б використали switch замість кількох операторів if-else? - Чому блок default корисний, навіть якщо ви думаєте, що охопили всі можливості? ## Логічні оператори та булеві значення Складні рішення часто вимагають оцінки кількох умов одночасно. Як і булева алгебра дозволяє математикам комбінувати логічні вирази, програмування надає логічні оператори для з'єднання кількох булевих умов. Ці оператори дозволяють створювати складну умовну логіку, комбінуючи прості оцінки true/false. Ці оператори дозволяють комбінувати умови корисними способами: - І (&&) означає, що обидві умови повинні бути істинними - АБО (||) означає, що хоча б одна умова повинна бути істинною - НЕ (!) перевертає true на false (і навпаки) ## Умови та рішення з логічними операторами Давайте подивимося, як ці логічні оператори працюють на практиці з більш реалістичним прикладом: У цьому прикладі: ми розраховуємо ціну зі знижкою 20% (640), а потім оцінюємо, чи наші доступні кошти покривають повну ціну АБО ціну зі знижкою. Оскільки 600 відповідає порогу ціни зі знижкою 640, умова оцінюється як true. ### 🧮 Перевірка логічних операторів: Комбінування умов Перевірте своє розуміння логічних операторів: - У виразі A && B, що станеться, якщо A хибне? Чи буде B взагалі оцінюватися? - Чи можете ви придумати ситуацію, де вам знадобляться всі три оператори (&&, ||, !)? - У чому різниця між !user.isActive та user.isActive !== true? ### Оператор заперечення Іноді легше думати про те, коли щось НЕ істинне. Наприклад, замість того, щоб запитувати "Чи користувач увійшов у систему?", ви можете запитати "Чи користувач НЕ увійшов у систему?" Оператор оклику (!) перевертає логіку для вас. Оператор ! схожий на "протилежне до..." – якщо щось є true, ! робить це false, і навпаки. ### Тернарні вирази Для простих умовних присвоєнь JavaScript надає тернарний оператор. Цей лаконічний синтаксис дозволяє написати умовний вираз в одному рядку, що корисно, коли вам потрібно призначити одне з двох значень на основі умови. Це читається як запитання: "Чи ця умова істинна? Якщо так, використовуйте це значення. Якщо ні, використовуйте те значення." Нижче наведено більш зрозумілий приклад: ✅ Приділіть хвилину, щоб кілька разів прочитати цей код. Чи розумієте ви, як працюють ці оператори? Ось що говорить цей рядок: "Чи firstNumber більше за secondNumber? Якщо так, помістіть firstNumber у biggestNumber. Якщо ні, помістіть secondNumber у biggestNumber." Тернарний оператор – це просто коротший спосіб написати традиційний оператор if..else: Обидва підходи дають однакові результати. Тернарний оператор пропонує лаконічність, тоді як традиційна структура if-else може бути більш читабельною для складних умов. --- ## 🚀 Виклик Створіть програму, яка спочатку написана з використанням логічних операторів, а потім перепишіть її, використовуючи тернарний вираз. Який синтаксис вам більше подобається? --- ## Виклик GitHub Copilot Agent 🚀 Використовуйте режим Agent, щоб виконати наступний виклик: Опис: Створіть комплексний калькулятор оцінок, який демонструє кілька концепцій прийняття рішень з цього уроку, включаючи оператори if-else, switch, логічні оператори та тернарні вирази. Завдання: Напишіть програму на JavaScript, яка приймає числовий бал студента (0-100) і визначає його літерну оцінку за такими критеріями: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Менше 60 Вимоги: 1. Використовуйте оператор if-else для визначення літерної оцінки 2. Використовуйте логічні оператори, щоб перевірити, чи студент склав іспит (оцінка >= 60) І має відзнаку (оцінка >= 90). 3. Використовуйте оператор switch, щоб надати конкретний відгук для кожної літерної оцінки. 4. Використовуйте тернарний оператор, щоб визначити, чи студент має право на наступний курс (оцінка >= 70). 5. Включіть перевірку введення, щоб переконатися, що оцінка знаходиться в межах від 0 до 100. Протестуйте вашу програму з різними оцінками, включаючи крайні випадки, такі як 59, 60, 89, 90, та недійсні введення. Дізнайтеся більше про режим агента тут. ## Тест після лекції Тест після лекції ## Огляд і самостійне навчання Дізнайтеся більше про різноманітні оператори, доступні користувачеві, на MDN. Перегляньте чудовий довідник операторів від Джоша Комо! ## Завдання Оператори --- ## 🧠 Резюме вашого інструментарію для прийняття рішень --- ## 🚀 Хронологія вашого освоєння прийняття рішень у JavaScript ### ⚡ Що ви можете зробити за наступні 5 хвилин - [ ] Попрактикуйте оператори порівняння в консолі вашого браузера - [ ] Напишіть простий оператор if-else, який перевіряє ваш вік - [ ] Спробуйте виклик: перепишіть if-else, використовуючи тернарний оператор - [ ] Перевірте, що відбувається з різними "truthy" і "falsy" значеннями ### 🎯 Що ви можете досягти за цю годину - [ ] Завершіть тест після уроку та перегляньте будь-які незрозумілі концепції - [ ] Побудуйте комплексний калькулятор оцінок із виклику GitHub Copilot - [ ] Створіть просте дерево рішень для реальної ситуації (наприклад, вибір одягу) - [ ] Попрактикуйте комбінування кількох умов за допомогою логічних операторів - [ ] Експериментуйте з операторами switch для різних випадків використання ### 📅 Ваш тижневий шлях до освоєння логіки - [ ] Завершіть завдання з операторами, використовуючи творчі приклади - [ ] Створіть міні-додаток для тестів, використовуючи різні умовні структури - [ ] Створіть валідатор форми, який перевіряє кілька умов введення - [ ] Попрактикуйте вправи з довідника операторів Джоша Комо - [ ] Оптимізуйте існуючий код, використовуючи більш відповідні умовні структури - [ ] Вивчіть коротке замикання та його вплив на продуктивність ### 🌟 Ваш місячний шлях до трансформації - [ ] Освойте складні вкладені умови та підтримуйте читабельність коду - [ ] Створіть додаток із складною логікою прийняття рішень - [ ] Внесіть вклад у відкритий код, покращуючи умовну логіку в існуючих проєктах - [ ] Навчіть когось іншого різним умовним структурам і коли їх використовувати - [ ] Досліджуйте функціональні підходи до умовної логіки - [ ] Створіть особистий довідник найкращих практик умовної логіки ### 🏆 Фінальна перевірка вашого чемпіонства у прийнятті рішень Відсвяткуйте ваше освоєння логічного мислення: - Яка найскладніша логіка прийняття рішень, яку ви успішно реалізували? - Яка умовна структура здається вам найбільш природною і чому? - Як навчання логічним операторам змінило ваш підхід до вирішення проблем? - Яке реальне застосування виграє від складної логіки прийняття рішень? --- Відмова від відповідальності: Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.

javascript

Основи JavaScript: Масиви та Цикли

## Тест перед лекцією Тест перед лекцією Задумувалися, як вебсайти відстежують товари у кошику або показують список ваших друзів? Тут на допомогу приходять масиви та цикли. Масиви — це як цифрові контейнери, які зберігають кілька елементів інформації, а цикли дозволяють працювати з усіма цими даними ефективно, без повторення коду. Разом ці дві концепції формують основу для обробки інформації у ваших програмах. Ви навчитеся переходити від ручного написання кожного кроку до створення розумного, ефективного коду, який може обробляти сотні або навіть тисячі елементів швидко. До кінця цього уроку ви зрозумієте, як виконувати складні завдання з даними лише кількома рядками коду. Давайте дослідимо ці важливі концепції програмування. [](https://youtube.com/watch?v=1U4qTyq02Xw "Масиви") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Цикли") ## Масиви Уявіть масиви як цифрову картотеку - замість того, щоб зберігати один документ у кожній шухляді, ви можете організувати кілька пов'язаних елементів в одному структурованому контейнері. У термінах програмування масиви дозволяють зберігати кілька елементів інформації в одному організованому пакеті. Чи то створення фотогалереї, управління списком справ або відстеження високих балів у грі, масиви забезпечують основу для організації даних. Давайте подивимося, як вони працюють. ✅ Масиви всюди навколо нас! Чи можете ви придумати реальний приклад масиву, наприклад, масив сонячних панелей? ### Створення масивів Створити масив дуже просто - просто використовуйте квадратні дужки! Що тут відбувається? Ви щойно створили порожній контейнер за допомогою квадратних дужок []. Уявіть це як порожню полицю в бібліотеці - вона готова до зберігання будь-яких книг, які ви хочете там організувати. Ви також можете заповнити свій масив початковими значеннями прямо з самого початку: Цікаві моменти: - Ви можете зберігати текст, числа або навіть значення true/false в одному масиві - Просто розділіть кожен елемент комою - легко! - Масиви ідеально підходять для зберігання пов'язаної інформації разом ### Індексація масивів Ось що може здатися незвичним спочатку: масиви нумерують свої елементи, починаючи з 0, а не з 1. Ця індексація з нуля має коріння в тому, як працює пам'ять комп'ютера - це програмна конвенція, яка існує з ранніх днів мов програмування, таких як C. Кожне місце в масиві отримує свій власний номер адреси, який називається індексом. ✅ Чи здивувало вас, що масиви починаються з індексу нуль? У деяких мовах програмування індекси починаються з 1. Це цікава історія, яку ви можете прочитати на Вікіпедії. Доступ до елементів масиву: Розбираємо, що тут відбувається: - Використовує квадратні дужки з номером індексу для доступу до елементів - Повертає значення, збережене на конкретній позиції в масиві - Починає рахунок з 0, роблячи перший елемент індексом 0 Зміна елементів масиву: У наведеному вище прикладі ми: - Змінили елемент на індексі 4 з "Рокі Роуд" на "Масляний Пекан" - Додали новий елемент "Тісто для печива" на індексі 5 - Автоматично розширили довжину масиву при додаванні за межі поточного обсягу ### Довжина масиву та основні методи Масиви мають вбудовані властивості та методи, які значно спрощують роботу з даними. Визначення довжини масиву: Основні моменти: - Повертає загальну кількість елементів у масиві - Оновлюється автоматично при додаванні або видаленні елементів - Надає динамічний підрахунок, корисний для циклів і перевірки Основні методи масивів: Розуміння цих методів: - Додає елементи за допомогою push() (в кінці) і unshift() (на початку) - Видаляє елементи за допомогою pop() (з кінця) і shift() (з початку) - Знаходить елементи за допомогою indexOf() і перевіряє наявність за допомогою includes() - Повертає корисні значення, такі як видалені елементи або індекси позицій ✅ Спробуйте самі! Використовуйте консоль вашого браузера, щоб створити і змінити масив власного створення. ### 🧠 Перевірка основ масивів: Організація ваших даних Перевірте своє розуміння масивів: - Чому, на вашу думку, масиви починають рахунок з 0, а не з 1? - Що станеться, якщо ви спробуєте отримати доступ до індексу, який не існує (наприклад, arr[100] у масиві з 5 елементами)? - Чи можете ви придумати три реальні сценарії, де масиви були б корисними? ## Цикли Уявіть знамените покарання з романів Чарльза Діккенса, де учні повинні були багато разів писати одну й ту ж фразу на дошці. Уявіть, що ви могли б просто сказати комусь "напиши це речення 100 разів", і це було б зроблено автоматично. Саме це роблять цикли для вашого коду. Цикли — це як мати невтомного помічника, який може повторювати завдання без помилок. Чи потрібно вам перевірити кожен елемент у кошику для покупок, чи показати всі фотографії в альбомі, цикли ефективно справляються з повторенням. JavaScript пропонує кілька типів циклів на вибір. Давайте розглянемо кожен з них і зрозуміємо, коли їх використовувати. ### Цикл For Цикл for схожий на таймер - ви точно знаєте, скільки разів хочете виконати щось. Він дуже організований і передбачуваний, що робить його ідеальним для роботи з масивами або підрахунку чогось. Структура циклу For: Крок за кроком, ось що відбувається: - Ініціалізує змінну лічильника i на 0 на початку - Перевіряє умову i < 10 перед кожною ітерацією - Виконує блок коду, якщо умова істинна - Збільшує i на 1 після кожної ітерації за допомогою i++ - Зупиняється, коли умова стає хибною (коли i досягає 10) ✅ Запустіть цей код у консолі браузера. Що станеться, якщо ви внесете невеликі зміни до лічильника, умови або виразу ітерації? Чи можете ви змусити його працювати у зворотному напрямку, створюючи зворотний відлік? ### 🗓️ Перевірка майстерності циклу For: Контрольоване повторення Оцініть своє розуміння циклу for: - Які три частини циклу for і що кожна з них робить? - Як би ви пройшли через масив у зворотному порядку? - Що станеться, якщо ви забудете частину інкремента (i++)? ### Цикл While Цикл while схожий на фразу "продовжуй робити це, поки..." - ви можете не знати точно, скільки разів він буде виконуватися, але знаєте, коли зупинитися. Він ідеально підходить для таких речей, як запитування користувача, поки він не надасть потрібну вам інформацію, або пошук даних, поки ви не знайдете те, що шукаєте. Характеристики циклу While: - Продовжує виконання, поки умова істинна - Вимагає ручного управління будь-якими змінними лічильника - Перевіряє умову перед кожною ітерацією - Ризикує нескінченними циклами, якщо умова ніколи не стане хибною Розуміння цих прикладів: - Керує змінною лічильника i вручну всередині тіла циклу - Збільшує лічильник, щоб уникнути нескінченних циклів - Демонструє практичний випадок використання з введенням користувача та обмеженням спроб - Включає механізми безпеки для запобігання нескінченному виконанню ### ♾️ Перевірка мудрості циклу While: Повторення на основі умови Перевірте своє розуміння циклу while: - Яка основна небезпека при використанні циклів while? - Коли ви б вибрали цикл while замість циклу for? - Як можна запобігти нескінченним циклам? ### Сучасні альтернативи циклам JavaScript пропонує сучасний синтаксис циклів, який може зробити ваш код більш читабельним і менш схильним до помилок. Цикл For...of (ES6+): Основні переваги for...of: - Усуває управління індексами та потенційні помилки на одиницю - Надає прямий доступ до елементів масиву - Покращує читабельність коду та зменшує складність синтаксису Метод forEach: Що потрібно знати про forEach: - Виконує функцію для кожного елемента масиву - Надає як значення елемента, так і індекс як параметри - Не може бути зупинений раніше (на відміну від традиційних циклів) - Повертає undefined (не створює новий масив) ✅ Чому ви б вибрали цикл for замість циклу while? 17 тисяч користувачів мали те ж питання на StackOverflow, і деякі думки можуть бути цікавими для вас. ### 🎨 Перевірка синтаксису сучасних циклів: Освоєння ES6+ Оцініть своє розуміння сучасного JavaScript: - Які переваги for...of над традиційними циклами for? - Коли ви все ще можете віддати перевагу традиційним циклам for? - У чому різниця між forEach і map? ## Цикли та Масиви Поєднання масивів із циклами створює потужні можливості обробки даних. Це поєднання є основою багатьох програмних завдань, від відображення списків до обчислення статистики. Традиційна обробка масивів: Давайте зрозуміємо кожен підхід: - Використовує властивість довжини масиву для визначення меж циклу - Отримує доступ до елементів за індексом у традиційних циклах for - Надає прямий доступ до елементів у циклах for...of - Обробляє кожен елемент масиву рівно один раз Практичний приклад обробки даних: Ось як працює цей код: - Ініціалізує змінні для відстеження суми та екстремальних значень - Обробляє кожну оцінку за допомогою одного ефективного циклу - Накопичує загальну суму для обчислення середнього значення - Відстежує найвищі та найнижчі значення під час ітерації - Обчислює фінальну статистику після завершення циклу ✅ Експериментуйте з ітерацією масиву власного створення у консолі вашого браузера. --- ## Виклик GitHub Copilot Agent 🚀 Використовуйте режим Agent, щоб виконати наступний виклик: Опис: Створіть комплексну функцію обробки даних, яка поєднує масиви та цикли для аналізу набору даних і створення значущих висновків. Запит: Створіть функцію під назвою `an JavaScript пропонує кілька сучасних методів роботи з масивами, які можуть замінити традиційні цикли для виконання конкретних завдань. Ознайомтеся з forEach, for-of, map, filter і reduce. Ваше завдання: Перепишіть приклад оцінок студентів, використовуючи щонайменше три різні методи роботи з масивами. Зверніть увагу, наскільки чистішим і зрозумілішим стає код із сучасним синтаксисом JavaScript. ## Тест після лекції Тест після лекції ## Огляд і самостійне навчання Масиви в JavaScript мають багато методів, які надзвичайно корисні для обробки даних. Дізнайтеся більше про ці методи і спробуйте деякі з них (наприклад, push, pop, slice і splice) на масиві, який ви створите. ## Завдання Цикл масиву --- ## 📊 Ваш підсумок інструментів для масивів і циклів --- ## 🚀 Ваш графік освоєння масивів і циклів ### ⚡ Що можна зробити за наступні 5 хвилин - [ ] Створіть масив ваших улюблених фільмів і отримайте доступ до конкретних елементів - [ ] Напишіть цикл for, який рахує від 1 до 10 - [ ] Виконайте завдання з сучасними методами масивів із уроку - [ ] Попрактикуйте індексацію масивів у консолі вашого браузера ### 🎯 Що можна досягти за годину - [ ] Завершіть тест після уроку і перегляньте складні концепції - [ ] Побудуйте комплексний аналізатор оцінок із виклику GitHub Copilot - [ ] Створіть простий кошик для покупок, який додає і видаляє товари - [ ] Попрактикуйте конвертацію між різними типами циклів - [ ] Експериментуйте з методами масивів, такими як push, pop, slice і splice ### 📅 Ваш тижневий шлях обробки даних - [ ] Завершіть завдання "Цикл масиву" з творчими доповненнями - [ ] Створіть додаток списку справ, використовуючи масиви і цикли - [ ] Створіть простий калькулятор статистики для числових даних - [ ] Попрактикуйтеся з методами масивів MDN - [ ] Побудуйте інтерфейс фотогалереї або музичного плейлиста - [ ] Досліджуйте функціональне програмування з map, filter і reduce ### 🌟 Ваш місячний шлях трансформації - [ ] Освойте складні операції з масивами і оптимізацію продуктивності - [ ] Створіть повний інформаційний дашборд для візуалізації даних - [ ] Внесіть вклад у проєкти з відкритим кодом, пов'язані з обробкою даних - [ ] Навчіть когось іншого масивів і циклів із практичними прикладами - [ ] Створіть особисту бібліотеку функцій для обробки даних - [ ] Досліджуйте алгоритми і структури даних, побудовані на масивах ### 🏆 Фінальна перевірка чемпіона обробки даних Відсвяткуйте своє освоєння масивів і циклів: - Яка операція з масивами була для вас найкориснішою для реальних застосувань? - Який тип циклу здається вам найбільш природним і чому? - Як розуміння масивів і циклів змінило ваш підхід до організації даних? - Яке складне завдання з обробки даних ви хотіли б вирішити наступним? --- Відмова від відповідальності: Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.

javascript

جاوا اسکرپٹ کا تعارف

جاوا اسکرپٹ ویب کی زبان ہے۔ ان چار اسباق میں، آپ اس کی بنیادی باتیں سیکھیں گے۔ ### موضوعات 1. ویری ایبلز اور ڈیٹا ٹائپس 2. فنکشنز اور میتھڈز 3. جاوا اسکرپٹ کے ساتھ فیصلے کرنا 4. ایرے اور لوپس ### کریڈٹس یہ اسباق ♥️ کے ساتھ لکھے گئے ہیں جیسمن گرین اوے، کرسٹوفر ہیریسن اور کرس نورنگ کے ذریعے۔ ڈسکلیمر: یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔

web,development

جاوا اسکرپٹ کی بنیادی باتیں: ڈیٹا کی اقسام

ڈیٹا کی اقسام جاوا اسکرپٹ کے بنیادی تصورات میں سے ایک ہیں جن کا سامنا آپ کو ہر پروگرام میں ہوگا جو آپ لکھتے ہیں۔ ڈیٹا کی اقسام کو قدیم لائبریریوں کے فائلنگ سسٹم کی طرح سمجھیں – ان کے پاس شاعری، ریاضی، اور تاریخی ریکارڈز کے لیے مخصوص جگہیں تھیں۔ جاوا اسکرپٹ معلومات کو اسی طرح مختلف اقسام میں منظم کرتا ہے۔ اس سبق میں، ہم جاوا اسکرپٹ کو چلانے والی بنیادی ڈیٹا کی اقسام کا جائزہ لیں گے۔ آپ سیکھیں گے کہ نمبروں، متن، سچ/جھوٹ کی اقدار کو کیسے سنبھالنا ہے، اور یہ سمجھیں گے کہ آپ کے پروگراموں کے لیے صحیح قسم کا انتخاب کیوں ضروری ہے۔ یہ تصورات شروع میں تجریدی لگ سکتے ہیں، لیکن مشق کے ساتھ، یہ آپ کے لیے آسان ہو جائیں گے۔ ڈیٹا کی اقسام کو سمجھنا جاوا اسکرپٹ میں باقی سب کچھ بہت واضح کر دے گا۔ جیسے معماروں کو گرجا گھر بنانے سے پہلے مختلف تعمیراتی مواد کو سمجھنا ضروری ہوتا ہے، یہ بنیادی باتیں آپ کے آگے بڑھنے والے ہر کام کی حمایت کریں گی۔ ## لیکچر سے پہلے کا کوئز لیکچر سے پہلے کا کوئز یہ سبق جاوا اسکرپٹ کی بنیادی باتوں کا احاطہ کرتا ہے، وہ زبان جو ویب پر انٹرایکٹیویٹی فراہم کرتی ہے۔ [](https://youtube.com/watch?v=JNIXfGiDWM8 "جاوا اسکرپٹ میں متغیرات") [](https://youtube.com/watch?v=AWfA95eLdq8 "جاوا اسکرپٹ میں ڈیٹا کی اقسام") چلیں متغیرات اور ان میں موجود ڈیٹا کی اقسام سے شروع کرتے ہیں! ## متغیرات متغیرات پروگرامنگ میں بنیادی تعمیراتی بلاکس ہیں۔ جیسے قرون وسطیٰ کے کیمیا دان مختلف مادوں کو ذخیرہ کرنے کے لیے لیبل والے جار استعمال کرتے تھے، متغیرات آپ کو معلومات ذخیرہ کرنے اور اسے ایک وضاحتی نام دینے دیتے ہیں تاکہ آپ بعد میں اس کا حوالہ دے سکیں۔ کسی کی عمر یاد رکھنی ہے؟ اسے age نامی متغیر میں ذخیرہ کریں۔ کسی صارف کا نام ٹریک کرنا چاہتے ہیں؟ اسے userName نامی متغیر میں رکھیں۔ ہم جاوا اسکرپٹ میں متغیرات بنانے کے جدید طریقے پر توجہ مرکوز کریں گے۔ آپ یہاں جو تکنیک سیکھیں گے وہ زبان کے ارتقاء کے سالوں اور پروگرامنگ کمیونٹی کے ذریعہ تیار کردہ بہترین طریقوں کی نمائندگی کرتی ہیں۔ متغیر بنانے اور اعلان کرنے کا درج ذیل نحو ہے [keyword] [name]۔ یہ دو حصوں پر مشتمل ہے: - کلیدی لفظ۔ ایسے متغیرات کے لیے let استعمال کریں جو تبدیل ہو سکتے ہیں، یا ایسی اقدار کے لیے const جو ہمیشہ ایک جیسی رہتی ہیں۔ - متغیر کا نام، یہ ایک وضاحتی نام ہے جو آپ خود منتخب کرتے ہیں۔ ✅ کلیدی لفظ let ES6 میں متعارف کرایا گیا تھا اور آپ کے متغیر کو ایک _بلاک اسکوپ_ دیتا ہے۔ یہ تجویز کیا جاتا ہے کہ آپ let یا const استعمال کریں بجائے پرانے var کلیدی لفظ کے۔ ہم مستقبل کے حصوں میں بلاک اسکوپ کو مزید گہرائی سے کور کریں گے۔ ### کام - متغیرات کے ساتھ کام کرنا 1. متغیر کا اعلان کریں۔ آئیے اپنا پہلا متغیر بناتے ہیں: ```javascript let myVariable; ``` یہ کیا حاصل کرتا ہے: - یہ جاوا اسکرپٹ کو myVariable نامی اسٹوریج لوکیشن بنانے کے لیے کہتا ہے - جاوا اسکرپٹ اس متغیر کے لیے میموری میں جگہ مختص کرتا ہے - متغیر کے پاس فی الحال کوئی قدر نہیں ہے (غیر متعین) 2. اسے ایک قدر دیں۔ اب آئیے اپنے متغیر میں کچھ ڈالیں: ```javascript myVariable = 123; ``` تفویض کیسے کام کرتی ہے: - = آپریٹر ہمارے متغیر کو 123 کی قدر تفویض کرتا ہے - متغیر اب اس قدر کو رکھتا ہے بجائے غیر متعین ہونے کے - آپ اپنے کوڈ میں اس قدر کا حوالہ دے سکتے ہیں myVariable استعمال کرتے ہوئے > نوٹ: اس سبق میں = کا استعمال ایک "تفویض آپریٹر" کے طور پر کیا جاتا ہے، جو متغیر کو ایک قدر تفویض کرنے کے لیے استعمال ہوتا ہے۔ یہ مساوات کو ظاہر نہیں کرتا۔ 3. سمارٹ طریقہ اختیار کریں۔ دراصل، آئیے ان دونوں مراحل کو یکجا کریں: ```javascript let myVariable = 123; ``` یہ طریقہ زیادہ موثر ہے: - آپ ایک بیان میں متغیر کا اعلان اور قدر تفویض کر رہے ہیں - یہ ڈویلپرز کے درمیان معیاری عمل ہے - یہ کوڈ کی لمبائی کو کم کرتا ہے جبکہ وضاحت کو برقرار رکھتا ہے 4. اپنا ارادہ بدلیں۔ اگر ہم کوئی مختلف نمبر ذخیرہ کرنا چاہتے ہیں تو کیا ہوگا؟ ```javascript myVariable = 321; ``` دوبارہ تفویض کو سمجھنا: - متغیر اب 321 رکھتا ہے بجائے 123 کے - پچھلی قدر کو تبدیل کر دیا گیا ہے – متغیرات ایک وقت میں صرف ایک قدر ذخیرہ کرتے ہیں - یہ تبدیلی متغیرات کے ساتھ let کے ذریعے اعلان کردہ کلیدی خصوصیت ہے ✅ اسے آزمائیں! آپ اپنے براؤزر میں جاوا اسکرپٹ لکھ سکتے ہیں۔ ایک براؤزر ونڈو کھولیں اور ڈیولپر ٹولز پر جائیں۔ کنسول میں، آپ کو ایک پرامپٹ ملے گا؛ let myVariable = 123 ٹائپ کریں، ریٹرن دبائیں، پھر myVariable ٹائپ کریں۔ کیا ہوتا ہے؟ نوٹ کریں، آپ ان تصورات کے بارے میں مزید اگلے اسباق میں سیکھیں گے۔ ### 🧠 متغیرات کی مہارت چیک: آرام دہ ہونا آئیے دیکھتے ہیں کہ آپ متغیرات کے بارے میں کیسا محسوس کر رہے ہیں: - کیا آپ متغیر کے اعلان اور تفویض کے درمیان فرق کی وضاحت کر سکتے ہیں؟ - اگر آپ کسی متغیر کو اعلان کرنے سے پہلے استعمال کرنے کی کوشش کریں تو کیا ہوتا ہے؟ - آپ let کو const پر کب ترجیح دیں گے؟ ## مستقلات کبھی کبھی آپ کو ایسی معلومات ذخیرہ کرنے کی ضرورت ہوتی ہے جو پروگرام کے دوران کبھی تبدیل نہ ہو۔ مستقلات کو ان ریاضیاتی اصولوں کی طرح سمجھیں جو یورپ میں قدیم یونان میں قائم کیے گئے تھے – ایک بار ثابت اور دستاویزی، وہ تمام مستقبل کے حوالہ کے لیے مستقل رہے۔ مستقلات متغیرات کی طرح کام کرتے ہیں، لیکن ایک اہم پابندی کے ساتھ: ایک بار جب آپ ان کی قدر تفویض کرتے ہیں، تو اسے تبدیل نہیں کیا جا سکتا۔ یہ غیر متغیر خصوصیت آپ کے پروگرام میں اہم اقدار کو حادثاتی ترمیم سے بچانے میں مدد کرتی ہے۔ مستقل کے اعلان اور ابتدائیہ وہی تصورات پر عمل کرتے ہیں جیسے متغیر، سوائے const کلیدی لفظ کے۔ مستقلات عام طور پر تمام بڑے حروف کے ساتھ اعلان کیے جاتے ہیں۔ یہ کوڈ کیا کرتا ہے: - ایک مستقل MY_VARIABLE نامی 123 کی قدر کے ساتھ بناتا ہے - بڑے حروف کے نام دینے کے کنونشن کا استعمال کرتا ہے مستقلات کے لیے - کسی بھی مستقبل کی تبدیلیوں کو روکتا ہے اس قدر میں مستقلات کے دو اہم اصول ہیں: - آپ کو انہیں فوراً ایک قدر دینی ہوگی – خالی مستقلات کی اجازت نہیں ہے! - آپ اس قدر کو کبھی تبدیل نہیں کر سکتے – جاوا اسکرپٹ آپ کو ایسا کرنے کی کوشش پر ایک غلطی دے گا۔ آئیے دیکھتے ہیں کہ میرا مطلب کیا ہے: سادہ قدر - درج ذیل کی اجازت نہیں ہے: ```javascript const PI = 3; PI = 4; // اجازت نہیں ہے ``` آپ کو کیا یاد رکھنا ہے: - مستقل کو دوبارہ تفویض کرنے کی کوششیں ایک غلطی کا سبب بنیں گی - اہم اقدار کو حادثاتی تبدیلیوں سے بچاتا ہے - یقینی بناتا ہے کہ قدر آپ کے پروگرام کے دوران مستقل رہے آبجیکٹ حوالہ محفوظ ہے - درج ذیل کی اجازت نہیں ہے: ```javascript const obj = { a: 3 }; obj = { b: 5 } // اجازت نہیں ہے ``` ان تصورات کو سمجھنا: - پورے آبجیکٹ کو ایک نئے سے تبدیل کرنے سے روکتا ہے - اصل آبجیکٹ کے حوالہ کو محفوظ رکھتا ہے - میموری میں آبجیکٹ کی شناخت کو برقرار رکھتا ہے آبجیکٹ کی قدر محفوظ نہیں ہے - درج ذیل کی اجازت ہے: ```javascript const obj = { a: 3 }; obj.a = 5; // اجازت ہے ``` یہاں کیا ہوتا ہے: - آبجیکٹ کے اندر پراپرٹی کی قدر کو تبدیل کرتا ہے - وہی آبجیکٹ حوالہ رکھتا ہے - دکھاتا ہے کہ آبجیکٹ کے مواد تبدیل ہو سکتے ہیں جبکہ حوالہ مستقل رہتا ہے > نوٹ کریں، const کا مطلب ہے کہ حوالہ دوبارہ تفویض سے محفوظ ہے۔ قدر _غیر متغیر_ نہیں ہے اور تبدیل ہو سکتی ہے، خاص طور پر اگر یہ ایک پیچیدہ ساخت جیسے آبجیکٹ ہو۔ ## ڈیٹا کی اقسام جاوا اسکرپٹ معلومات کو مختلف اقسام میں منظم کرتا ہے جنہیں ڈیٹا کی اقسام کہا جاتا ہے۔ یہ تصور اس طرح ہے جیسے قدیم علماء نے علم کو مختلف اقسام میں تقسیم کیا – ارسطو نے مختلف قسم کی دلیلوں کے درمیان فرق کیا، یہ جانتے ہوئے کہ منطقی اصول شاعری، ریاضی، اور قدرتی فلسفہ پر یکساں طور پر لاگو نہیں ہو سکتے۔ ڈیٹا کی اقسام اہم ہیں کیونکہ مختلف آپریشنز مختلف قسم کی معلومات کے ساتھ کام کرتے ہیں۔ جیسے آپ کسی شخص کے نام پر ریاضی نہیں کر سکتے یا کسی ریاضیاتی مساوات کو حروف تہجی کے مطابق ترتیب نہیں دے سکتے، جاوا اسکرپٹ ہر آپریشن کے لیے مناسب ڈیٹا کی قسم کی ضرورت ہوتی ہے۔ اسے سمجھنا غلطیوں کو روکتا ہے اور آپ کے کوڈ کو زیادہ قابل اعتماد بناتا ہے۔ متغیرات مختلف قسم کی اقدار ذخیرہ کر سکتے ہیں، جیسے نمبر اور متن۔ ان مختلف قسم کی اقدار کو ڈیٹا کی قسم کہا جاتا ہے۔ ڈیٹا کی اقسام سافٹ ویئر ڈویلپمنٹ کا ایک اہم حصہ ہیں کیونکہ یہ ڈویلپرز کو یہ فیصلہ کرنے میں مدد دیتی ہیں کہ کوڈ کیسے لکھا جانا چاہیے اور سافٹ ویئر کیسے چلنا چاہیے۔ مزید برآں، کچھ ڈیٹا کی اقسام میں منفرد خصوصیات ہوتی ہیں جو کسی قدر میں اضافی معلومات کو تبدیل کرنے یا نکالنے میں مدد کرتی ہیں۔ ✅ ڈیٹا کی اقسام کو جاوا اسکرپٹ ڈیٹا پرائمٹیوز بھی کہا جاتا ہے، کیونکہ یہ زبان کے ذریعہ فراہم کردہ سب سے کم سطح کی ڈیٹا کی اقسام ہیں۔ 7 پرائمٹیو ڈیٹا کی اقسام ہیں: string, number, bigint, boolean, undefined, null اور symbol۔ ایک لمحہ نکال کر تصور کریں کہ ان میں سے ہر ایک پرائمٹیو کیا ظاہر کر سکتا ہے۔ zebra کیا ہے؟ 0 کے بارے میں کیا خیال ہے؟ true؟ ### نمبر نمبر جاوا اسکرپٹ میں سب سے سیدھی ڈیٹا کی قسم ہیں۔ چاہے آپ پورے نمبر جیسے 42، اعشاریہ جیسے 3.14، یا منفی نمبر جیسے -5 کے ساتھ کام کر رہے ہوں، جاوا اسکرپٹ انہیں یکساں طور پر سنبھالتا ہے۔ ہمارے پہلے متغیر کو یاد رکھیں؟ وہ 123 جو ہم نے ذخیرہ کیا تھا دراصل ایک نمبر ڈیٹا کی قسم تھی: اہم خصوصیات: - جاوا اسکرپٹ خود بخود عددی اقدار کو پہچانتا ہے - آپ ان متغیرات کے ساتھ ریاضی کے آپریشنز انجام دے سکتے ہیں - کسی واضح قسم کے اعلان کی ضرورت نہیں ہے متغیرات تمام قسم کے نمبر ذخیرہ کر سکتے ہیں، بشمول اعشاریہ یا منفی نمبر۔ نمبر ریاضیاتی آپریٹرز کے ساتھ بھی استعمال کیے جا سکتے ہیں، جو اگلے حصے میں شامل ہیں۔ ### ریاضیاتی آپریٹرز ریاضیاتی آپریٹرز آپ کو جاوا اسکرپٹ میں ریاضیاتی حسابات انجام دینے کی اجازت دیتے ہیں۔ یہ آپریٹرز وہی اصول استعمال کرتے ہیں جو صدیوں سے ریاضی دان استعمال کرتے آئے ہیں – وہی علامتیں جو علماء جیسے الخوارزمی کے کاموں میں ظاہر ہوئیں، جنہوں نے الجبری علامتیں تیار کیں۔ یہ آپریٹرز وہی کام کرتے ہیں جو آپ روایتی ریاضی سے توقع کرتے ہیں: جمع کے لیے پلس، تفریق کے لیے مائنس، وغیرہ۔ ریاضیاتی افعال انجام دیتے وقت استعمال کرنے کے لیے کئی قسم کے آپریٹرز ہیں، اور ان میں سے کچھ یہاں درج ہیں: ✅ اسے آزمائیں! اپنے براؤزر کے کنسول میں ایک ریاضیاتی آپریشن آزمائیں۔ کیا نتائج نے آپ کو حیران کیا؟ ### 🧮 ریاضی کی مہارت چیک: اعتماد کے ساتھ حساب لگانا اپنی ریاضی کی سمجھ کو جانچیں: - / (تقسیم) اور % (باقی) کے درمیان کیا فرق ہے؟ - کیا آپ پیش گوئی کر سکتے ہیں کہ 10 % 3 کیا ہوگا؟ (اشارہ: یہ 3.33 نہیں ہے...) - پروگرامنگ میں باقی آپریٹر کیوں مفید ہو سکتا ہے؟ ### سٹرنگز جاوا اسکرپٹ میں، متنی ڈیٹا کو سٹرنگز کے طور پر ظاہر کیا جاتا ہے۔ "سٹرنگ" کی اصطلاح کرداروں کو ترتیب میں جوڑنے کے تصور سے آتی ہے، بالکل اسی طرح جیسے قرون وسطیٰ کے خانقاہوں میں کاتب حروف کو جوڑ کر اپنے مخطوطات میں الفاظ اور جملے بناتے تھے۔ سٹرنگز ویب ڈویلپمنٹ کے لیے بنیادی ہیں۔ ویب سائٹ پر دکھایا گیا ہر متن – صارف کے نام، بٹن کے لیبل، غلطی کے پیغامات، مواد – کو سٹرنگ ڈیٹا کے طور پر سنبھالا جاتا ہے۔ فعال یوزر انٹرفیس بنانے کے لیے سٹرنگز کو سمجھنا ضروری ہے۔ سٹرنگز وہ کرداروں کے سیٹ ہیں جو سنگل یا ڈبل کوٹس کے درمیان ہوتے ہیں۔ ان تصورات کو سمجھنا: - سنگل کوٹس ' یا ڈبل کوٹس " کا استعمال کرتا ہے سٹرنگز کو بیان کرنے کے لیے - متن کا ڈیٹا ذخیرہ کرتا ہے جس میں حروف، نمبر، اور علامتیں شامل ہو سکتی ہیں - متغیرات کو سٹرنگ کی اقدار تفویض کرتا ہے تاکہ بعد میں استعمال کیا جا سکے - ** دو یا زیادہ strings کو جوڑنے یا اکٹھا کرنے کے لیے، + آپریٹر استعمال کریں۔ مرحلہ وار، یہاں کیا ہو رہا ہے: - مختلف strings کو + آپریٹر کے ذریعے جوڑنا - strings کو پہلے مثال میں بغیر اسپیس کے براہ راست جوڑنا - پڑھنے میں آسانی کے لیے strings کے درمیان اسپیس کردار " " شامل کرنا - صحیح فارمیٹنگ کے لیے کاما جیسے علامات شامل کرنا ✅ کیوں 1 + 1 = 2 جاوا اسکرپٹ میں ہوتا ہے، لیکن '1' + '1' = 11؟ اس بارے میں سوچیں۔ اور '1' + 1 کے بارے میں کیا خیال ہے؟ ٹیمپلیٹ لیٹرلز strings کو فارمیٹ کرنے کا ایک اور طریقہ ہیں، لیکن یہاں quotes کے بجائے backtick استعمال ہوتا ہے۔ جو کچھ بھی plain text نہیں ہے اسے placeholders ${ } کے اندر رکھا جاتا ہے۔ اس میں وہ تمام متغیرات شامل ہیں جو strings ہو سکتے ہیں۔ آئیے ہر حصہ سمجھتے ہیں: - بیک ٹکس ` `` استعمال کرتا ہے عام quotes کے بجائے ٹیمپلیٹ لیٹرلز بنانے کے لیے - متغیرات کو براہ راست ${} placeholder syntax کے ذریعے شامل کرتا ہے - اسپیس اور فارمیٹنگ کو بالکل ویسا ہی محفوظ رکھتا ہے جیسا لکھا گیا ہے - ایک صاف طریقہ فراہم کرتا ہے پیچیدہ strings کو متغیرات کے ساتھ بنانے کے لیے آپ اپنی فارمیٹنگ کے اہداف دونوں طریقوں سے حاصل کر سکتے ہیں، لیکن ٹیمپلیٹ لیٹرلز اسپیس اور لائن بریکس کا احترام کریں گے۔ ✅ آپ ٹیمپلیٹ لیٹرل کب استعمال کریں گے اور plain string کب؟ ### 🔤 String مہارت چیک: متن میں تبدیلی کا اعتماد اپنی string مہارت کا جائزہ لیں: - کیا آپ وضاحت کر سکتے ہیں کہ '1' + '1' کیوں '11' کے برابر ہے نہ کہ 2؟ - آپ کو کون سا string طریقہ زیادہ پڑھنے کے قابل لگتا ہے: concatenation یا template literals؟ - اگر آپ string کے ارد گرد quotes بھول جائیں تو کیا ہوتا ہے؟ ### Booleans Booleans ڈیٹا کی سب سے سادہ شکل کی نمائندگی کرتے ہیں: یہ صرف دو قدریں رکھ سکتے ہیں – true یا false۔ یہ binary logic system 19ویں صدی کے ریاضی دان George Boole کے کام سے جڑا ہوا ہے، جنہوں نے Boolean algebra تیار کی۔ ان کی سادگی کے باوجود، booleans پروگرام کی منطق کے لیے ضروری ہیں۔ یہ آپ کے کوڈ کو حالات کی بنیاد پر فیصلے کرنے کے قابل بناتے ہیں – چاہے صارف لاگ ان ہو، کوئی بٹن کلک کیا گیا ہو، یا کچھ شرائط پوری ہوں۔ Booleans صرف دو قدریں رکھ سکتے ہیں: true یا false۔ Booleans ان حالات میں فیصلے کرنے میں مدد کرتے ہیں کہ کون سی کوڈ لائنز چلنی چاہئیں۔ بہت سے معاملات میں، operators Boolean کی قدر کو سیٹ کرنے میں مدد کرتے ہیں اور آپ اکثر متغیرات کو ابتدائی یا ان کی قدریں آپریٹر کے ساتھ اپ ڈیٹ کرتے ہوئے دیکھیں گے۔ اوپر، ہم نے: - ایک متغیر بنایا جو Boolean قدر true کو محفوظ کرتا ہے - دکھایا کہ Boolean قدر false کو کیسے محفوظ کریں - بالکل وہی keywords استعمال کیے true اور false (کوئی quotes کی ضرورت نہیں) - ان متغیرات کو تیار کیا conditional statements میں استعمال کے لیے ✅ ایک متغیر 'truthy' سمجھا جا سکتا ہے اگر وہ Boolean true میں تبدیل ہو۔ دلچسپ بات یہ ہے کہ جاوا اسکرپٹ میں، تمام قدریں truthy ہیں جب تک کہ وہ falsy کے طور پر بیان نہ کی جائیں۔ ### 🎯 Boolean منطق چیک: فیصلہ سازی کی مہارت اپنی boolean سمجھ کو آزمائیں: - آپ کیوں سوچتے ہیں کہ جاوا اسکرپٹ میں true اور false کے علاوہ "truthy" اور "falsy" قدریں ہیں؟ - کیا آپ پیش گوئی کر سکتے ہیں کہ ان میں سے کون سی falsy ہے: 0, "0", [], "false"؟ - booleans پروگرام کے flow کو کنٹرول کرنے میں کیسے مفید ہو سکتے ہیں؟ --- ## 📊 آپ کا ڈیٹا ٹائپس ٹول کٹ خلاصہ ## GitHub Copilot Agent Challenge 🚀 Agent mode استعمال کریں اور درج ذیل چیلنج مکمل کریں: تفصیل: ایک personal information manager بنائیں جو اس سبق میں سیکھے گئے تمام جاوا اسکرپٹ ڈیٹا ٹائپس کو حقیقی دنیا کے ڈیٹا منظرناموں کو ہینڈل کرتے ہوئے ظاہر کرے۔ Prompt: ایک جاوا اسکرپٹ پروگرام بنائیں جو ایک user profile object بنائے جس میں شامل ہو: ایک شخص کا نام (string)، عمر (number)، طالب علم ہونے کی حیثیت (boolean)، پسندیدہ رنگوں کی ایک array، اور ایک address object جس میں street، city، اور zip code کی خصوصیات ہوں۔ پروفائل معلومات دکھانے اور انفرادی fields کو اپ ڈیٹ کرنے کے لیے functions شامل کریں۔ string concatenation، template literals، عمر کے ساتھ arithmetic operations، اور طالب علم کی حیثیت کے لیے boolean logic کو ظاہر کریں۔ Agent mode کے بارے میں مزید جانیں یہاں۔ ## 🚀 چیلنج جاوا اسکرپٹ کے کچھ رویے ہیں جو ڈویلپرز کو حیران کر سکتے ہیں۔ یہاں ایک کلاسک مثال ہے: اپنے براؤزر کنسول میں یہ ٹائپ کریں: let age = 1; let Age = 2; age == Age اور نتیجہ دیکھیں۔ یہ false واپس کرتا ہے – کیا آپ اس کی وجہ معلوم کر سکتے ہیں؟ یہ جاوا اسکرپٹ کے بہت سے رویوں میں سے ایک ہے جسے سمجھنا ضروری ہے۔ ان عجیب و غریب پہلوؤں سے واقفیت آپ کو زیادہ قابل اعتماد کوڈ لکھنے اور مسائل کو مؤثر طریقے سے ڈیبگ کرنے میں مدد دے گی۔ ## Post-Lecture Quiz Post-lecture quiz ## جائزہ اور خود مطالعہ جاوا اسکرپٹ مشقوں کی اس فہرست کو دیکھیں اور ایک آزمائیں۔ آپ نے کیا سیکھا؟ ## Assignment ڈیٹا ٹائپس پریکٹس ## 🚀 آپ کا جاوا اسکرپٹ ڈیٹا ٹائپس مہارت کا ٹائم لائن ### ⚡ آپ اگلے 5 منٹ میں کیا کر سکتے ہیں - [ ] اپنے براؤزر کنسول کو کھولیں اور مختلف ڈیٹا ٹائپس کے ساتھ 3 متغیرات بنائیں - [ ] چیلنج آزمائیں: let age = 1; let Age = 2; age == Age اور معلوم کریں کہ یہ false کیوں ہے - [ ] اپنے نام اور پسندیدہ نمبر کے ساتھ string concatenation کی مشق کریں - [ ] آزمائیں کہ جب آپ string میں نمبر شامل کرتے ہیں تو کیا ہوتا ہے ### 🎯 آپ اس گھنٹے میں کیا حاصل کر سکتے ہیں - [ ] سبق کے بعد کا کوئز مکمل کریں اور کسی بھی الجھن والے تصورات کا جائزہ لیں - [ ] ایک منی کیلکولیٹر بنائیں جو دو نمبروں کو جمع، تفریق، ضرب، اور تقسیم کرے - [ ] ٹیمپلیٹ لیٹرلز استعمال کرتے ہوئے ایک سادہ نام فارمیٹر بنائیں - [ ] == اور === موازنہ آپریٹرز کے فرق کو دریافت کریں - [ ] مختلف ڈیٹا ٹائپس کے درمیان تبدیل کرنے کی مشق کریں ### 📅 آپ کی ہفتہ بھر کی جاوا اسکرپٹ بنیاد - [ ] اعتماد اور تخلیقی صلاحیت کے ساتھ اسائنمنٹ مکمل کریں - [ ] تمام سیکھے گئے ڈیٹا ٹائپس کا استعمال کرتے ہوئے ایک personal profile object بنائیں - [ ] CSS-Tricks سے جاوا اسکرپٹ مشقوں کے ساتھ مشق کریں - [ ] Boolean logic استعمال کرتے ہوئے ایک سادہ فارم validator بنائیں - [ ] array اور object ڈیٹا ٹائپس کے ساتھ تجربہ کریں (آنے والے اسباق کا پیش نظارہ) - [ ] جاوا اسکرپٹ کمیونٹی میں شامل ہوں اور ڈیٹا ٹائپس کے بارے میں سوالات پوچھیں ### 🌟 آپ کی مہینہ بھر کی تبدیلی - [ ] ڈیٹا ٹائپس کے علم کو بڑے پروگرامنگ پروجیکٹس میں شامل کریں - [ ] حقیقی ایپلیکیشنز میں ہر ڈیٹا ٹائپ کو استعمال کرنے کا وقت اور وجہ سمجھیں - [ ] دوسرے ابتدائی افراد کو جاوا اسکرپٹ کے بنیادی اصول سمجھنے میں مدد کریں - [ ] ایک چھوٹا ایپلیکیشن بنائیں جو مختلف قسم کے صارف ڈیٹا کو منظم کرے - [ ] advanced ڈیٹا ٹائپ تصورات جیسے type coercion اور strict equality کو دریافت کریں - [ ] اوپن سورس جاوا اسکرپٹ پروجیکٹس میں دستاویزات کی بہتری کے ساتھ تعاون کریں ### 🧠 آخری ڈیٹا ٹائپس مہارت چیک ان اپنی جاوا اسکرپٹ بنیاد کا جشن منائیں: - کون سا ڈیٹا ٹائپ آپ کو سب سے زیادہ حیران کر گیا اس کے رویے کے لحاظ سے؟ - آپ متغیرات اور constants کو دوست کو سمجھانے میں کتنا آرام دہ محسوس کرتے ہیں؟ - جاوا اسکرپٹ کے ٹائپ سسٹم کے بارے میں آپ نے سب سے دلچسپ چیز کیا دریافت کی؟ - آپ ان بنیادی اصولوں کے ساتھ کون سی حقیقی دنیا کی ایپلیکیشن بنانے کا تصور کر سکتے ہیں؟ --- اعلانِ لاتعلقی: یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کی بھرپور کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔

web,development

جاوا اسکرپٹ کی بنیادی باتیں: طریقے اور فنکشنز

## لیکچر سے پہلے کا کوئز لیکچر سے پہلے کا کوئز بار بار ایک ہی کوڈ لکھنا پروگرامنگ کے سب سے عام مسائل میں سے ایک ہے۔ فنکشنز اس مسئلے کو حل کرتے ہیں کیونکہ یہ کوڈ کو دوبارہ استعمال کے قابل بلاکس میں پیک کرنے کی اجازت دیتے ہیں۔ فنکشنز کو ہنری فورڈ کی اسمبلی لائن کے معیاری حصوں کی طرح سمجھیں – ایک بار جب آپ ایک قابل اعتماد جزو بنا لیتے ہیں، تو آپ اسے جہاں ضرورت ہو استعمال کر سکتے ہیں بغیر دوبارہ شروع سے بنانے کے۔ فنکشنز آپ کو کوڈ کے ٹکڑوں کو ایک جگہ جمع کرنے کی اجازت دیتے ہیں تاکہ آپ انہیں اپنے پروگرام میں دوبارہ استعمال کر سکیں۔ ایک ہی منطق کو ہر جگہ کاپی اور پیسٹ کرنے کے بجائے، آپ ایک بار فنکشن بنا سکتے ہیں اور جب بھی ضرورت ہو اسے کال کر سکتے ہیں۔ یہ طریقہ آپ کے کوڈ کو منظم رکھتا ہے اور اپ ڈیٹس کو بہت آسان بناتا ہے۔ اس سبق میں، آپ سیکھیں گے کہ اپنے فنکشنز کیسے بنائیں، ان میں معلومات کیسے پاس کریں، اور ان سے مفید نتائج کیسے حاصل کریں۔ آپ فنکشنز اور طریقوں کے درمیان فرق دریافت کریں گے، جدید نحو کے طریقے سیکھیں گے، اور دیکھیں گے کہ فنکشنز دوسرے فنکشنز کے ساتھ کیسے کام کر سکتے ہیں۔ ہم ان تصورات کو مرحلہ وار بنائیں گے۔ [](https://youtube.com/watch?v=XgKsD6Zwvlc "طریقے اور فنکشنز") ## فنکشنز فنکشن ایک خود مختار کوڈ بلاک ہے جو ایک خاص کام انجام دیتا ہے۔ یہ منطق کو انکیپسولیٹ کرتا ہے جسے آپ جب چاہیں چلا سکتے ہیں۔ اپنے پروگرام میں ایک ہی کوڈ کو کئی بار لکھنے کے بجائے، آپ اسے ایک فنکشن میں پیک کر سکتے ہیں اور جب بھی ضرورت ہو اسے کال کر سکتے ہیں۔ یہ طریقہ آپ کے کوڈ کو صاف رکھتا ہے اور اپ ڈیٹس کو بہت آسان بناتا ہے۔ تصور کریں کہ اگر آپ کو اپنے کوڈ بیس کے 20 مختلف مقامات پر بکھری ہوئی منطق کو تبدیل کرنے کی ضرورت ہو تو یہ کتنا مشکل ہوگا۔ اپنے فنکشنز کو وضاحتی نام دینا ضروری ہے۔ ایک اچھا نام دیا گیا فنکشن اس کے مقصد کو واضح طور پر بتاتا ہے – جب آپ cancelTimer() دیکھتے ہیں، تو آپ فوراً سمجھ جاتے ہیں کہ یہ کیا کرتا ہے، بالکل اسی طرح جیسے ایک واضح طور پر لیبل لگا ہوا بٹن آپ کو بتاتا ہے کہ جب آپ اسے کلک کریں گے تو کیا ہوگا۔ ## فنکشن بنانا اور کال کرنا آئیے دیکھتے ہیں کہ فنکشن کیسے بنایا جائے۔ نحو ایک مستقل پیٹرن کی پیروی کرتا ہے: آئیے اسے توڑ کر دیکھتے ہیں: - function کلیدی لفظ جاوا اسکرپٹ کو بتاتا ہے "ارے، میں ایک فنکشن بنا رہا ہوں!" - nameOfFunction وہ جگہ ہے جہاں آپ اپنے فنکشن کو ایک وضاحتی نام دیتے ہیں - قوسین () وہ جگہ ہیں جہاں آپ پیرامیٹرز شامل کر سکتے ہیں (ہم جلد ہی اس پر پہنچیں گے) - گھنگریالے بریکٹس {} میں اصل کوڈ ہوتا ہے جو آپ کے فنکشن کو کال کرنے پر چلتا ہے آئیے ایک سادہ گریٹنگ فنکشن بناتے ہیں تاکہ اسے عملی طور پر دیکھ سکیں: یہ فنکشن "Hello, world!" کو کنسول میں پرنٹ کرتا ہے۔ ایک بار جب آپ نے اسے ڈیفائن کر لیا، تو آپ اسے جتنی بار چاہیں استعمال کر سکتے ہیں۔ اپنے فنکشن کو چلانے (یا "کال کرنے") کے لیے، اس کا نام لکھیں اور اس کے بعد قوسین لگائیں۔ جاوا اسکرپٹ آپ کو اپنے فنکشن کو کال کرنے سے پہلے یا بعد میں ڈیفائن کرنے کی اجازت دیتا ہے – جاوا اسکرپٹ انجن عملدرآمد کے ترتیب کو سنبھال لے گا۔ جب آپ یہ لائن چلاتے ہیں، تو یہ آپ کے displayGreeting فنکشن کے اندر موجود تمام کوڈ کو چلاتا ہے، اور "Hello, world!" کو آپ کے براؤزر کے کنسول میں دکھاتا ہے۔ آپ اس فنکشن کو بار بار کال کر سکتے ہیں۔ ### 🧠 فنکشن کی بنیادی باتوں کی جانچ: اپنے پہلے فنکشنز بنانا آئیے دیکھتے ہیں کہ آپ بنیادی فنکشنز کے بارے میں کیسا محسوس کر رہے ہیں: - کیا آپ وضاحت کر سکتے ہیں کہ فنکشن ڈیفینیشنز میں گھنگریالے بریکٹس {} کیوں استعمال کیے جاتے ہیں؟ - اگر آپ displayGreeting کو بغیر قوسین کے لکھیں تو کیا ہوگا؟ - آپ ایک ہی فنکشن کو کئی بار کال کیوں کرنا چاہیں گے؟ ### فنکشنز کے بہترین طریقے یہاں کچھ تجاویز ہیں جو آپ کو بہترین فنکشنز لکھنے میں مدد کریں گی: - اپنے فنکشنز کو واضح، وضاحتی نام دیں – آپ کا مستقبل کا خود آپ کا شکر گزار ہوگا! - camelCasing کا استعمال کریں جب نام میں ایک سے زیادہ الفاظ ہوں (جیسے calculateTotal بجائے calculate_total) - ہر فنکشن کو ایک کام کو اچھی طرح انجام دینے پر مرکوز رکھیں ## فنکشن کو معلومات دینا ہمارا displayGreeting فنکشن محدود ہے – یہ صرف "Hello, world!" سب کے لیے دکھا سکتا ہے۔ پیرامیٹرز ہمیں فنکشنز کو زیادہ لچکدار اور مفید بنانے کی اجازت دیتے ہیں۔ پیرامیٹرز ایسے پلیس ہولڈرز کی طرح کام کرتے ہیں جہاں آپ ہر بار فنکشن استعمال کرتے وقت مختلف اقدار ڈال سکتے ہیں۔ اس طرح، ایک ہی فنکشن ہر کال پر مختلف معلومات کے ساتھ کام کر سکتا ہے۔ جب آپ اپنے فنکشن کو ڈیفائن کرتے ہیں تو پیرامیٹرز کو قوسین کے اندر درج کریں، اور متعدد پیرامیٹرز کو کاما کے ساتھ الگ کریں: ہر پیرامیٹر ایک پلیس ہولڈر کی طرح کام کرتا ہے – جب کوئی آپ کے فنکشن کو کال کرتا ہے، تو وہ اصل اقدار فراہم کرے گا جو ان جگہوں پر ڈال دی جائیں گی۔ آئیے اپنے گریٹنگ فنکشن کو اپ ڈیٹ کریں تاکہ کسی کا نام قبول کر سکے: نوٹ کریں کہ ہم بیک ٹکس (` `) اور ${}` کا استعمال کر رہے ہیں تاکہ نام کو براہ راست اپنے پیغام میں ڈال سکیں – اسے ٹیمپلیٹ لیٹرل کہا جاتا ہے، اور یہ متغیرات کے ساتھ ملے ہوئے اسٹرنگز بنانے کا ایک بہت ہی آسان طریقہ ہے۔ اب جب ہم اپنے فنکشن کو کال کرتے ہیں، تو ہم کوئی بھی نام پاس کر سکتے ہیں: جاوا اسکرپٹ اسٹرنگ 'Christopher' لیتا ہے، اسے name پیرامیٹر کو تفویض کرتا ہے، اور ذاتی پیغام "Hello, Christopher!" بناتا ہے۔ ## ڈیفالٹ اقدار اگر ہم کچھ پیرامیٹرز کو اختیاری بنانا چاہتے ہیں تو کیا ہوگا؟ یہی وہ جگہ ہے جہاں ڈیفالٹ اقدار کام آتی ہیں! فرض کریں کہ ہم چاہتے ہیں کہ لوگ گریٹنگ کے لفظ کو اپنی مرضی کے مطابق بنا سکیں، لیکن اگر وہ کوئی خاص لفظ نہ بتائیں، تو ہم "Hello" کو بیک اپ کے طور پر استعمال کریں گے۔ آپ ڈیفالٹ اقدار کو برابر کے نشان کا استعمال کرتے ہوئے سیٹ کر سکتے ہیں، بالکل ویری ایبل سیٹ کرنے کی طرح: یہاں، name اب بھی ضروری ہے، لیکن salutation کے پاس 'Hello' کی بیک اپ ویلیو ہے اگر کوئی مختلف گریٹنگ فراہم نہ کرے۔ اب ہم اس فنکشن کو دو مختلف طریقوں سے کال کر سکتے ہیں: پہلی کال میں، جاوا اسکرپٹ ڈیفالٹ "Hello" استعمال کرتا ہے کیونکہ ہم نے کوئی گریٹنگ نہیں بتائی۔ دوسری کال میں، یہ ہماری مرضی کے مطابق "Hi" استعمال کرتا ہے۔ یہ لچک فنکشنز کو مختلف حالات کے مطابق ڈھالنے کے قابل بناتی ہے۔ ### 🎛️ پیرامیٹرز کی مہارت کی جانچ: فنکشنز کو لچکدار بنانا اپنے پیرامیٹرز کی سمجھ کو جانچیں: - پیرامیٹر اور آرگیومنٹ میں کیا فرق ہے؟ - حقیقی دنیا کی پروگرامنگ میں ڈیفالٹ اقدار کیوں مفید ہیں؟ - کیا آپ پیش گوئی کر سکتے ہیں کہ اگر آپ پیرامیٹرز سے زیادہ آرگیومنٹس پاس کریں تو کیا ہوگا؟ ## واپسی کی اقدار ہمارے فنکشنز اب تک صرف کنسول میں پیغامات پرنٹ کر رہے ہیں، لیکن اگر آپ چاہتے ہیں کہ فنکشن کچھ حساب کرے اور آپ کو نتیجہ واپس دے؟ یہی وہ جگہ ہے جہاں واپسی کی اقدار کام آتی ہیں۔ کچھ دکھانے کے بجائے، ایک فنکشن آپ کو ایک ویلیو واپس دے سکتا ہے جسے آپ ویری ایبل میں اسٹور کر سکتے ہیں یا اپنے کوڈ کے دوسرے حصوں میں استعمال کر سکتے ہیں۔ ویلیو واپس بھیجنے کے لیے، آپ return کلیدی لفظ استعمال کرتے ہیں اور اس کے بعد جو بھی آپ واپس بھیجنا چاہتے ہیں: یہاں ایک اہم بات ہے: جب فنکشن return اسٹیٹمنٹ پر پہنچتا ہے، تو یہ فوراً چلنا بند کر دیتا ہے اور اس ویلیو کو واپس بھیج دیتا ہے جس نے اسے کال کیا تھا۔ آئیے اپنے گریٹنگ فنکشن کو تبدیل کریں تاکہ پیغام کو پرنٹ کرنے کے بجائے واپس کرے: اب یہ فنکشن گریٹنگ کو پرنٹ کرنے کے بجائے پیغام بناتا ہے اور ہمیں واپس دیتا ہے۔ واپس کی گئی ویلیو کو استعمال کرنے کے لیے، ہم اسے کسی ویری ایبل میں اسٹور کر سکتے ہیں بالکل کسی اور ویلیو کی طرح: اب greetingMessage میں "Hello, Christopher" موجود ہے اور ہم اسے اپنے کوڈ میں کہیں بھی استعمال کر سکتے ہیں – ویب پیج پر دکھانے کے لیے، ای میل میں شامل کرنے کے لیے، یا کسی دوسرے فنکشن کو پاس کرنے کے لیے۔ ### 🔄 واپسی کی اقدار کی جانچ: نتائج واپس حاصل کرنا اپنی واپسی کی اقدار کی سمجھ کو جانچیں: - فنکشن میں return اسٹیٹمنٹ کے بعد کوڈ کے ساتھ کیا ہوتا ہے؟ - کنسول میں صرف پرنٹ کرنے کے بجائے ویلیوز واپس کرنا کیوں بہتر ہے؟ - کیا فنکشن مختلف قسم کی ویلیوز واپس کر سکتا ہے (اسٹرنگ، نمبر، بولین)؟ ## فنکشنز کو فنکشنز کے پیرامیٹرز کے طور پر استعمال کرنا فنکشنز کو دوسرے فنکشنز کے پیرامیٹرز کے طور پر پاس کیا جا سکتا ہے۔ اگرچہ یہ تصور شروع میں پیچیدہ لگ سکتا ہے، یہ ایک طاقتور خصوصیت ہے جو لچکدار پروگرامنگ پیٹرنز کو فعال کرتی ہے۔ یہ پیٹرن بہت عام ہے جب آپ کہنا چاہتے ہیں "جب کچھ ہو، تو یہ دوسرا کام کرو۔" مثال کے طور پر، "جب ٹائمر ختم ہو، تو یہ کوڈ چلائیں" یا "جب صارف بٹن پر کلک کرے، تو اس فنکشن کو کال کریں۔" آئیے setTimeout دیکھتے ہیں، جو ایک بلٹ ان فنکشن ہے جو کچھ وقت انتظار کرتا ہے اور پھر کچھ کوڈ چلاتا ہے۔ ہمیں اسے بتانا ہوگا کہ کون سا کوڈ چلانا ہے – فنکشن پاس کرنے کے لیے بہترین کیس! یہ کوڈ آزمائیں – 3 سیکنڈ کے بعد، آپ کو ایک پیغام نظر آئے گا: نوٹ کریں کہ ہم displayDone کو (بغیر قوسین کے) setTimeout کو پاس کرتے ہیں۔ ہم خود فنکشن کو کال نہیں کر رہے – ہم اسے setTimeout کے حوالے کر رہے ہیں اور کہہ رہے ہیں "اسے 3 سیکنڈ میں کال کریں۔" ### گمنام فنکشنز کبھی کبھی آپ کو صرف ایک چیز کے لیے فنکشن کی ضرورت ہوتی ہے اور آپ اسے نام دینا نہیں چاہتے۔ سوچیں – اگر آپ صرف ایک بار فنکشن استعمال کر رہے ہیں، تو کیوں اپنے کوڈ کو ایک اضافی نام سے بھر دیں؟ جاوا اسکرپٹ آپ کو گمنام فنکشنز بنانے کی اجازت دیتا ہے – ایسے فنکشنز جن کے نام نہیں ہوتے اور آپ انہیں وہیں ڈیفائن کر سکتے ہیں جہاں آپ کو ضرورت ہو۔ یہاں ہم اپنے ٹائمر کی مثال کو گمنام فنکشن کا استعمال کرتے ہوئے دوبارہ لکھ سکتے ہیں: یہ وہی نتیجہ حاصل کرتا ہے، لیکن فنکشن کو براہ راست setTimeout کال کے اندر ڈیفائن کیا گیا ہے، جس سے الگ فنکشن ڈیفینیشن کی ضرورت ختم ہو جاتی ہے۔ ### فیٹ ایرو فنکشنز جدید جاوا اسکرپٹ میں فنکشنز لکھنے کا ایک اور مختصر طریقہ ہے جسے ایرو فنکشنز کہا جاتا ہے۔ یہ => استعمال کرتے ہیں (جو ایک تیر کی طرح لگتا ہے – سمجھ گئے؟) اور ڈویلپرز میں بہت مقبول ہیں۔ ایرو فنکشنز آپ کو function کلیدی لفظ چھوڑنے اور زیادہ مختصر کوڈ لکھنے کی اجازت دیتی ہیں۔ یہاں ہمارا ٹائمر کی مثال ایرو فنکشن کا استعمال کرتے ہوئے ہے: () وہ جگہ ہے جہاں پیرامیٹرز جائیں گے (اس کیس میں خالی)، پھر تیر => آتا ہے، اور آخر میں فنکشن باڈی گھنگریالے بریکٹس میں۔ یہ زیادہ مختصر نحو کے ساتھ وہی فعالیت فراہم کرتا ہے۔ ### ہر حکمت عملی کب استعمال کریں آپ کو ہر طریقہ کب استعمال کرنا چاہیے؟ ایک عملی رہنما: اگر آپ فنکشن کو کئی بار استعمال کریں گے، تو اسے ایک نام دیں اور الگ سے ڈیفائن کریں۔ اگر یہ ایک خاص استعمال کے لیے ہے، تو گمنام فنکشن پر غور کریں۔ ایرو فنکشنز اور روایتی نحو دونوں درست انتخاب ہیں، حالانکہ ایرو فنکشنز جدید جاوا اسکرپٹ کوڈ بیسز میں عام ہیں۔ ### 🎨 فنکشن اسٹائلز کی مہارت کی جانچ: صحیح نحو کا انتخاب اپنے نحو کی سمجھ کو جانچیں: - آپ ایرو فنکشنز کو روایتی فنکشن نحو پر کب ترجیح دیں گے؟ - گمنام فنکشنز کا بنیادی فائدہ کیا ہے؟ - کیا آپ ایسی صورتحال کے بارے میں سوچ سکتے ہیں جہاں گمنام فنکشن کے بجائے نام دیا گیا فنکشن بہتر ہو؟ --- ## 🚀 چیلنج کیا آپ ایک جملے میں فنکشنز اور طریقوں کے درمیان فرق بیان کر سکتے ہیں؟ کوشش کریں! ## GitHub Copilot Agent چیلنج 🚀 Agent موڈ کا استعمال کرتے ہوئے درج ذیل چیلنج مکمل کریں: تفصیل: ایک یوٹیلیٹی لائبریری بنائیں جو مختلف فنکشن تصورات کو ظاہر کرے جو اس سبق میں شامل ہیں، بشمول پیرامیٹرز، ڈیفالٹ اقدار، واپسی کی اقدار، اور ایرو فنکشنز۔ پرومپٹ: ایک جاوا اسکرپٹ فائل بنائیں جس کا نام mathUtils.js ہو جس میں درج ذیل فنکشنز شامل ہوں: 1. ایک فنکشن add جو دو پیرامیٹرز لیتا ہے اور ان کا مجموعہ واپس کرتا ہے 2. ایک فنکشن multiply جس میں ڈیفالٹ پیرامیٹر ویلیوز ہوں (دوسرا پیرامیٹر ڈیفالٹ 1 ہو) 3. ایک ایرو فنکشن ` - [ ] روایتی فنکشن کو ایرو فنکشن کے انداز میں تبدیل کرنے کی کوشش کریں - [ ] چیلنج پر عمل کریں: فنکشنز اور میتھڈز کے درمیان فرق کو سمجھائیں ### 🎯 اس گھنٹے میں آپ کیا حاصل کر سکتے ہیں - [ ] سبق کے بعد کا کوئز مکمل کریں اور کسی بھی الجھن والے تصورات کا جائزہ لیں - [ ] GitHub Copilot چیلنج سے میتھ یوٹیلیٹیز لائبریری بنائیں - [ ] ایک فنکشن بنائیں جو دوسرے فنکشن کو پیرامیٹر کے طور پر استعمال کرے - [ ] ڈیفالٹ پیرامیٹرز کے ساتھ فنکشن لکھنے کی مشق کریں - [ ] فنکشن کے ریٹرن ویلیوز میں ٹیمپلیٹ لیٹرلز کے ساتھ تجربہ کریں ### 📅 آپ کی ہفتہ بھر کی فنکشن مہارت - [ ] "فن ود فنکشنز" اسائنمنٹ کو تخلیقی انداز میں مکمل کریں - [ ] اپنے لکھے ہوئے کچھ دہرائے گئے کوڈ کو دوبارہ قابل استعمال فنکشنز میں تبدیل کریں - [ ] صرف فنکشنز کا استعمال کرتے ہوئے ایک چھوٹا کیلکولیٹر بنائیں (کوئی گلوبل ویریبلز نہیں) - [ ] ایرو فنکشنز کی مشق کریں جیسے map() اور filter() کے ساتھ - [ ] عام کاموں کے لیے یوٹیلیٹی فنکشنز کا مجموعہ بنائیں - [ ] ہائر آرڈر فنکشنز اور فنکشنل پروگرامنگ کے تصورات کا مطالعہ کریں ### 🌟 آپ کی مہینے بھر کی تبدیلی - [ ] ایڈوانس فنکشن تصورات جیسے کلوزرز اور اسکوپ میں مہارت حاصل کریں - [ ] ایک پروجیکٹ بنائیں جو فنکشن کمپوزیشن کا بھرپور استعمال کرے - [ ] اوپن سورس میں حصہ لیں اور فنکشن ڈاکیومنٹیشن کو بہتر بنائیں - [ ] کسی اور کو فنکشنز اور مختلف انداز کے بارے میں سکھائیں - [ ] جاوا اسکرپٹ میں فنکشنل پروگرامنگ کے پیراڈائمز کو دریافت کریں - [ ] مستقبل کے پروجیکٹس کے لیے قابل استعمال فنکشنز کی ذاتی لائبریری بنائیں ### 🏆 فنکشنز چیمپئن کی آخری چیک ان اپنی فنکشن مہارت کا جشن منائیں: - اب تک آپ نے سب سے زیادہ مفید فنکشن کون سا بنایا ہے؟ - فنکشنز کے بارے میں سیکھنے سے کوڈ آرگنائزیشن کے بارے میں آپ کی سوچ کیسے بدلی؟ - آپ کو کون سا فنکشن انداز زیادہ پسند ہے اور کیوں؟ - آپ کون سا حقیقی دنیا کا مسئلہ فنکشن لکھ کر حل کریں گے؟ --- اعلانِ لاتعلقی: یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔

web,development

جاوا اسکرپٹ کی بنیادی باتیں: فیصلے کرنا

کیا آپ نے کبھی سوچا ہے کہ ایپلیکیشنز کیسے سمجھدار فیصلے کرتی ہیں؟ جیسے کہ نیویگیشن سسٹم کیسے تیز ترین راستہ منتخب کرتا ہے، یا تھرمو اسٹیٹ کیسے فیصلہ کرتا ہے کہ گرمی کب آن کرنی ہے؟ یہ پروگرامنگ میں فیصلے کرنے کا بنیادی تصور ہے۔ جیسے کہ چارلس بیبج کے اینالیٹیکل انجن کو مختلف حالات کے مطابق مختلف آپریشنز کے سلسلے پر عمل کرنے کے لیے ڈیزائن کیا گیا تھا، جدید جاوا اسکرپٹ پروگرامز کو مختلف حالات کے مطابق انتخاب کرنے کی ضرورت ہوتی ہے۔ یہ صلاحیت کہ کوڈ مختلف راستوں پر جا سکے اور فیصلے کر سکے، جامد کوڈ کو جوابدہ اور ذہین ایپلیکیشنز میں تبدیل کرتی ہے۔ اس سبق میں، آپ اپنے پروگرامز میں مشروط منطق کو نافذ کرنے کا طریقہ سیکھیں گے۔ ہم مشروط بیانات، موازنہ آپریٹرز، اور منطقی اظہاروں کو دریافت کریں گے جو آپ کے کوڈ کو حالات کا جائزہ لینے اور مناسب ردعمل دینے کی اجازت دیتے ہیں۔ ## لیکچر سے پہلے کا کوئز لیکچر سے پہلے کا کوئز فیصلے کرنے اور پروگرام کے بہاؤ کو کنٹرول کرنے کی صلاحیت پروگرامنگ کا ایک بنیادی پہلو ہے۔ یہ سیکشن آپ کے جاوا اسکرپٹ پروگرامز کے عمل کے راستے کو کنٹرول کرنے کا احاطہ کرتا ہے، بوولین ویلیوز اور مشروط منطق کا استعمال کرتے ہوئے۔ [](https://youtube.com/watch?v=SxTp8j-fMMY "فیصلے کرنا") ## بوولینز پر مختصر نظر فیصلے کرنے کو دریافت کرنے سے پہلے، آئیے اپنے پچھلے سبق سے بوولین ویلیوز پر دوبارہ نظر ڈالیں۔ ریاضی دان جارج بول کے نام پر رکھی گئی، یہ ویلیوز بائنری حالتوں کی نمائندگی کرتی ہیں – یا تو true یا false۔ اس میں کوئی ابہام نہیں، کوئی درمیانی راستہ نہیں۔ یہ بائنری ویلیوز تمام کمپیوٹیشنل منطق کی بنیاد بناتی ہیں۔ آپ کا پروگرام جو بھی فیصلہ کرتا ہے وہ بالآخر بوولین جائزے میں تبدیل ہو جاتا ہے۔ بوولین ویریبلز بنانا آسان ہے: یہ دو ویریبلز کو واضح بوولین ویلیوز کے ساتھ بناتا ہے۔ ✅ بوولینز کا نام انگریزی ریاضی دان، فلسفی اور منطقی جارج بول (1815–1864) کے نام پر رکھا گیا ہے۔ ## موازنہ آپریٹرز اور بوولینز عملی طور پر، آپ شاذ و نادر ہی بوولین ویلیوز کو دستی طور پر سیٹ کریں گے۔ اس کے بجائے، آپ حالات کا جائزہ لے کر انہیں پیدا کریں گے: "کیا یہ نمبر اس سے بڑا ہے؟" یا "کیا یہ ویلیوز برابر ہیں؟" موازنہ آپریٹرز ان جائزوں کو ممکن بناتے ہیں۔ وہ ویلیوز کا موازنہ کرتے ہیں اور آپریٹرز کے درمیان تعلق کی بنیاد پر بوولین نتائج واپس کرتے ہیں۔ ✅ اپنے علم کو جانچنے کے لیے اپنے براؤزر کے کنسول میں کچھ موازنہ لکھیں۔ کیا کوئی واپس شدہ ڈیٹا آپ کو حیران کرتا ہے؟ ### 🧠 موازنہ کی مہارت کی جانچ: بوولین منطق کو سمجھنا اپنے موازنہ کی سمجھ کو جانچیں: - آپ کیوں سوچتے ہیں کہ === (سخت برابری) عام طور پر == (ڈھیلی برابری) پر ترجیح دی جاتی ہے؟ - کیا آپ پیش گوئی کر سکتے ہیں کہ 5 === '5' کیا واپس کرے گا؟ اور 5 == '5'؟ - !== اور != میں کیا فرق ہے؟ ## If بیان if بیان آپ کے کوڈ میں سوال پوچھنے جیسا ہے۔ "اگر یہ حالت درست ہے، تو یہ کام کرو۔" یہ شاید جاوا اسکرپٹ میں فیصلے کرنے کے لیے آپ کا سب سے اہم ٹول ہوگا۔ یہاں یہ کیسے کام کرتا ہے: حالت قوسین کے اندر جاتی ہے، اور اگر یہ true ہے، تو جاوا اسکرپٹ کوڈ کو گھنگریالے بریکٹس کے اندر چلاتا ہے۔ اگر یہ false ہے، تو جاوا اسکرپٹ پورے بلاک کو چھوڑ دیتا ہے۔ آپ اکثر ان حالات کو بنانے کے لیے موازنہ آپریٹرز استعمال کریں گے۔ آئیے ایک عملی مثال دیکھتے ہیں: چونکہ 1000 >= 800 true کے طور پر جائزہ لیتا ہے، بلاک کے اندر کوڈ چلتا ہے، اور کنسول میں "Getting a new laptop!" دکھاتا ہے۔ ## If..Else بیان لیکن اگر آپ چاہتے ہیں کہ آپ کا پروگرام حالت کے غلط ہونے پر کچھ مختلف کرے؟ یہی وہ جگہ ہے جہاں else آتا ہے – یہ آپ کو "اگر یہ حالت درست نہیں ہے، تو اس کے بجائے یہ دوسرا کام کرو" کہنے کا طریقہ دیتا ہے۔ else بیان آپ کو ایک بیک اپ پلان فراہم کرتا ہے۔ اب چونکہ 500 >= 800 false ہے، جاوا اسکرپٹ پہلے بلاک کو چھوڑ دیتا ہے اور اس کے بجائے else بلاک چلاتا ہے۔ آپ کنسول میں "Can't afford a new laptop, yet!" دیکھیں گے۔ ✅ اس کوڈ اور درج ذیل کوڈ کو براؤزر کنسول میں چلا کر اپنی سمجھ کو جانچیں۔ currentMoney اور laptopPrice ویریبلز کی ویلیوز کو تبدیل کریں تاکہ واپس شدہ console.log() کو تبدیل کیا جا سکے۔ ### 🎯 If-Else منطق کی جانچ: شاخوں کے راستے اپنی مشروط منطق کی سمجھ کو جانچیں: - کیا ہوتا ہے اگر currentMoney بالکل laptopPrice کے برابر ہو؟ - کیا آپ کسی حقیقی دنیا کے منظر نامے کے بارے میں سوچ سکتے ہیں جہاں if-else منطق مفید ہو؟ - آپ اسے متعدد قیمتوں کی حدوں کو سنبھالنے کے لیے کیسے بڑھا سکتے ہیں؟ ## Switch بیان کبھی کبھی آپ کو ایک ویلیو کو متعدد اختیارات کے خلاف موازنہ کرنے کی ضرورت ہوتی ہے۔ حالانکہ آپ کئی if..else بیانات کو جوڑ سکتے ہیں، یہ طریقہ غیر عملی ہو جاتا ہے۔ switch بیان متعدد مخصوص ویلیوز کو سنبھالنے کے لیے ایک صاف ستھری ساخت فراہم کرتا ہے۔ یہ تصور ابتدائی ٹیلیفون ایکسچینجز میں استعمال ہونے والے میکینیکل سوئچنگ سسٹمز سے مشابہت رکھتا ہے – ایک ان پٹ ویلیو فیصلہ کرتی ہے کہ عمل کس مخصوص راستے پر جائے گا۔ یہاں یہ کیسے ترتیب دیا گیا ہے: - جاوا اسکرپٹ ایکسپریشن کا ایک بار جائزہ لیتا ہے - یہ ہر case کو دیکھتا ہے تاکہ ایک میچ تلاش کرے - جب اسے میچ ملتا ہے، تو وہ کوڈ بلاک چلاتا ہے - break جاوا اسکرپٹ کو بتاتا ہے کہ رک جائے اور سوئچ سے باہر نکل جائے - اگر کوئی کیسز میچ نہیں کرتے، تو یہ default بلاک چلاتا ہے (اگر آپ کے پاس ہو) اس مثال میں، جاوا اسکرپٹ دیکھتا ہے کہ dayNumber 2 ہے، مماثل case 2 تلاش کرتا ہے، dayName کو "Tuesday" پر سیٹ کرتا ہے، اور پھر سوئچ سے باہر نکل جاتا ہے۔ نتیجہ؟ "Today is Tuesday" کنسول میں لاگ ہوتا ہے۔ ✅ اس کوڈ اور درج ذیل کوڈ کو براؤزر کنسول میں چلا کر اپنی سمجھ کو جانچیں۔ ویریبل a کی ویلیوز کو تبدیل کریں تاکہ واپس شدہ console.log() کو تبدیل کیا جا سکے۔ ### 🔄 Switch بیان کی مہارت: متعدد اختیارات اپنی سوئچ کی سمجھ کو جانچیں: - کیا ہوتا ہے اگر آپ break بیان بھول جائیں؟ - آپ کب switch کو متعدد if-else بیانات کے بجائے استعمال کریں گے؟ - default کیس کیوں مفید ہے حالانکہ آپ سوچتے ہیں کہ آپ نے تمام امکانات کا احاطہ کر لیا ہے؟ ## منطقی آپریٹرز اور بوولینز پیچیدہ فیصلے اکثر ایک ساتھ متعدد حالات کا جائزہ لینے کی ضرورت ہوتی ہے۔ جیسے کہ بوولین الجبرا ریاضی دانوں کو منطقی اظہاروں کو جوڑنے کی اجازت دیتا ہے، پروگرامنگ منطقی آپریٹرز فراہم کرتی ہے تاکہ متعدد بوولین حالات کو جوڑا جا سکے۔ یہ آپریٹرز سادہ true/false جائزوں کو جوڑ کر پیچیدہ مشروط منطق کو ممکن بناتے ہیں۔ یہ آپریٹرز آپ کو حالات کو مفید طریقوں سے جوڑنے کی اجازت دیتے ہیں: - AND (&&) کا مطلب ہے کہ دونوں حالات true ہونے چاہئیں - OR (||) کا مطلب ہے کہ کم از کم ایک حالت true ہونی چاہیے - NOT (!) true کو false میں تبدیل کرتا ہے (اور اس کے برعکس) ## منطقی آپریٹرز کے ساتھ حالات اور فیصلے آئیے ان منطقی آپریٹرز کو ایک زیادہ حقیقت پسندانہ مثال کے ساتھ دیکھتے ہیں: اس مثال میں: ہم 20% ڈسکاؤنٹ قیمت (640) کا حساب لگاتے ہیں، پھر جائزہ لیتے ہیں کہ آیا ہمارے دستیاب فنڈز مکمل قیمت یا ڈسکاؤنٹ قیمت کو پورا کرتے ہیں۔ چونکہ 600 ڈسکاؤنٹ قیمت کی حد 640 کو پورا کرتا ہے، حالت true کے طور پر جائزہ لیتی ہے۔ ### 🧮 منطقی آپریٹرز کی جانچ: حالات کو جوڑنا اپنی منطقی آپریٹرز کی سمجھ کو جانچیں: - اظہار A && B میں، کیا ہوتا ہے اگر A false ہو؟ کیا B کا جائزہ لیا جاتا ہے؟ - کیا آپ ایسی صورتحال کے بارے میں سوچ سکتے ہیں جہاں آپ کو تینوں آپریٹرز (&&, ||, !) کی ضرورت ہو؟ - !user.isActive اور user.isActive !== true میں کیا فرق ہے؟ ### نفی کا آپریٹر کبھی کبھی یہ سوچنا آسان ہوتا ہے کہ جب کچھ درست نہیں ہوتا۔ جیسے کہ "کیا صارف لاگ ان ہے؟" پوچھنے کے بجائے، آپ "کیا صارف لاگ ان نہیں ہے؟" پوچھنا چاہتے ہیں۔ تعجب نشان (!) آپ کے لیے منطق کو پلٹ دیتا ہے۔ ! آپریٹر ایسا ہے جیسے کہ "اس کے برعکس..." – اگر کچھ true ہے، ! اسے false بناتا ہے، اور اس کے برعکس۔ ### تین گنا اظہار سادہ مشروط تفویضات کے لیے، جاوا اسکرپٹ تین گنا آپریٹر فراہم کرتا ہے۔ یہ مختصر نحو آپ کو ایک مشروط اظہار کو ایک لائن میں لکھنے کی اجازت دیتا ہے، جب آپ کو کسی حالت کی بنیاد پر دو ویلیوز میں سے ایک تفویض کرنے کی ضرورت ہو تو مفید ہے۔ یہ سوال کی طرح پڑھتا ہے: "کیا یہ حالت درست ہے؟ اگر ہاں، تو یہ ویلیو استعمال کریں۔ اگر نہیں، تو وہ ویلیو استعمال کریں۔" نیچے ایک زیادہ قابل فہم مثال ہے: ✅ اس کوڈ کو چند بار پڑھنے کے لیے ایک منٹ نکالیں۔ کیا آپ سمجھتے ہیں کہ یہ آپریٹرز کیسے کام کر رہے ہیں؟ یہ لائن یہ کہہ رہی ہے: "کیا firstNumber secondNumber سے بڑا ہے؟ اگر ہاں، تو firstNumber کو biggestNumber میں ڈالیں۔ اگر نہیں، تو secondNumber کو biggestNumber میں ڈالیں۔" تین گنا آپریٹر یہ روایتی if..else بیان لکھنے کا صرف ایک مختصر طریقہ ہے: دونوں طریقے ایک جیسے نتائج پیدا کرتے ہیں۔ تین گنا آپریٹر اختصار فراہم کرتا ہے، جبکہ روایتی if-else ساخت پیچیدہ حالات کے لیے زیادہ قابل مطالعہ ہو سکتی ہے۔ --- ## 🚀 چیلنج ایک پروگرام بنائیں جو پہلے منطقی آپریٹرز کے ساتھ لکھا گیا ہو، اور پھر اسے تین گنا اظہار کا استعمال کرتے ہوئے دوبارہ لکھیں۔ آپ کو کون سا نحو زیادہ پسند ہے؟ --- ## GitHub Copilot Agent چیلنج 🚀 Agent موڈ کا استعمال کرتے ہوئے درج ذیل چیلنج مکمل کریں: تفصیل: ایک جامع گریڈ کیلکولیٹر بنائیں جو اس سبق سے متعدد فیصلے کرنے کے تصورات کو ظاہر کرے، بشمول if-else بیانات، switch بیانات، منطقی آپریٹرز، اور تین گنا اظہار۔ پرومپٹ: ایک جاوا اسکرپٹ پروگرام لکھیں جو ایک طالب علم کے عددی اسکور (0-100) کو لے اور ان کے لیٹر گریڈ کا تعین کرے درج ذیل معیار کے مطابق: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 سے کم ضروریات: 1. لیٹر گریڈ کا تعین کرنے کے لیے if-else بیان کا استعمال کریں 2. منطقی آپریٹرز کا استعمال کریں تاکہ یہ چیک کیا جا سکے کہ طالب علم پاس کرتا ہے (گریڈ >= 60) اور اعزاز حاصل کرتا ہے (گریڈ >= 90)۔ 3. ایک سوئچ اسٹیٹمنٹ کا استعمال کریں تاکہ ہر لیٹر گریڈ کے لیے مخصوص فیڈبیک فراہم کیا جا سکے۔ 4. ایک ٹرنری آپریٹر کا استعمال کریں تاکہ یہ طے کیا جا سکے کہ طالب علم اگلے کورس کے لیے اہل ہے یا نہیں (گریڈ >= 70)۔ 5. ان پٹ کی تصدیق شامل کریں تاکہ اسکور 0 اور 100 کے درمیان ہو۔ اپنے پروگرام کو مختلف اسکورز کے ساتھ ٹیسٹ کریں، جن میں کنارے کے کیسز جیسے 59، 60، 89، 90، اور غیر درست ان پٹ شامل ہوں۔ ایجنٹ موڈ کے بارے میں مزید جانیں۔ ## لیکچر کے بعد کا کوئز لیکچر کے بعد کا کوئز ## جائزہ اور خود مطالعہ صارف کے لیے دستیاب مختلف آپریٹرز کے بارے میں مزید پڑھیں ایم ڈی این پر۔ جوش کومو کے شاندار آپریٹر لوک اپ کو دیکھیں! ## اسائنمنٹ آپریٹرز --- ## 🧠 آپ کے فیصلہ سازی کے ٹول کٹ کا خلاصہ --- ## 🚀 آپ کے جاوا اسکرپٹ فیصلہ سازی کے ماہر بننے کا ٹائم لائن ### ⚡ اگلے 5 منٹ میں آپ کیا کر سکتے ہیں - [ ] اپنے براؤزر کنسول میں موازنہ آپریٹرز کی مشق کریں۔ - [ ] ایک سادہ if-else اسٹیٹمنٹ لکھیں جو آپ کی عمر چیک کرے۔ - [ ] چیلنج آزمائیں: ایک if-else کو ٹرنری آپریٹر کے ذریعے دوبارہ لکھیں۔ - [ ] مختلف "truthy" اور "falsy" ویلیوز کے ساتھ کیا ہوتا ہے، ٹیسٹ کریں۔ ### 🎯 اس گھنٹے میں آپ کیا حاصل کر سکتے ہیں - [ ] لیکچر کے بعد کا کوئز مکمل کریں اور کسی بھی الجھن والے تصورات کا جائزہ لیں۔ - [ ] گٹ ہب کوپائلٹ چیلنج سے جامع گریڈ کیلکولیٹر بنائیں۔ - [ ] ایک حقیقی دنیا کے منظرنامے کے لیے ایک سادہ فیصلہ درخت بنائیں (جیسے کیا پہننا ہے منتخب کرنا)۔ - [ ] منطقی آپریٹرز کے ساتھ متعدد شرائط کو یکجا کرنے کی مشق کریں۔ - [ ] مختلف استعمال کے کیسز کے لیے سوئچ اسٹیٹمنٹ کے ساتھ تجربہ کریں۔ ### 📅 آپ کی ہفتہ بھر کی منطق کی مہارت - [ ] تخلیقی مثالوں کے ساتھ آپریٹرز اسائنمنٹ مکمل کریں۔ - [ ] مختلف مشروط ڈھانچوں کا استعمال کرتے ہوئے ایک منی کوئز ایپلیکیشن بنائیں۔ - [ ] ایک فارم ویلیڈیٹر بنائیں جو متعدد ان پٹ شرائط کو چیک کرے۔ - [ ] جوش کومو کے آپریٹر لوک اپ مشقوں کی مشق کریں۔ - [ ] موجودہ کوڈ کو زیادہ مناسب مشروط ڈھانچوں کے استعمال کے لیے دوبارہ ترتیب دیں۔ - [ ] شارٹ سرکٹ ایویلیوایشن اور کارکردگی کے اثرات کا مطالعہ کریں۔ ### 🌟 آپ کی مہینے بھر کی تبدیلی - [ ] پیچیدہ نیسٹڈ شرائط میں مہارت حاصل کریں اور کوڈ کی پڑھنے کی صلاحیت کو برقرار رکھیں۔ - [ ] پیچیدہ فیصلہ سازی کی منطق کے ساتھ ایک ایپلیکیشن بنائیں۔ - [ ] موجودہ پروجیکٹس میں مشروط منطق کو بہتر بنا کر اوپن سورس میں تعاون کریں۔ - [ ] کسی اور کو مختلف مشروط ڈھانچوں کے بارے میں سکھائیں اور کب کس کا استعمال کرنا ہے۔ - [ ] مشروط منطق کے لیے فنکشنل پروگرامنگ کے طریقوں کو دریافت کریں۔ - [ ] مشروط بہترین طریقوں کے لیے ذاتی حوالہ گائیڈ بنائیں۔ ### 🏆 فیصلہ سازی کے چیمپئن کے لیے آخری چیک ان اپنی منطقی سوچ کی مہارت کا جشن منائیں: - آپ نے سب سے پیچیدہ فیصلہ سازی کی منطق کون سی کامیابی سے نافذ کی؟ - آپ کو کون سا مشروط ڈھانچہ سب سے زیادہ قدرتی لگتا ہے اور کیوں؟ - منطقی آپریٹرز کے بارے میں جاننے سے آپ کے مسئلے کو حل کرنے کے طریقے میں کیا تبدیلی آئی؟ - کون سی حقیقی دنیا کی ایپلیکیشن پیچیدہ فیصلہ سازی کی منطق سے فائدہ اٹھا سکتی ہے؟ --- ڈسکلیمر: یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔

web,development

جاوا اسکرپٹ کی بنیادی باتیں: Arrays اور Loops

## لیکچر سے پہلے کا کوئز لیکچر سے پہلے کا کوئز کبھی سوچا ہے کہ ویب سائٹس شاپنگ کارٹ آئٹمز کو کیسے ٹریک کرتی ہیں یا آپ کی فرینڈ لسٹ کیسے دکھاتی ہیں؟ یہی وہ جگہ ہے جہاں arrays اور loops کام آتے ہیں۔ Arrays ڈیجیٹل کنٹینرز کی طرح ہیں جو کئی معلومات کو ایک ساتھ رکھتے ہیں، جبکہ loops آپ کو اس ڈیٹا کے ساتھ مؤثر طریقے سے کام کرنے دیتے ہیں بغیر بار بار کوڈ لکھے۔ یہ دونوں تصورات مل کر آپ کے پروگرامز میں معلومات کو سنبھالنے کی بنیاد بناتے ہیں۔ آپ سیکھیں گے کہ ہر قدم کو دستی طور پر لکھنے سے لے کر اسمارٹ، مؤثر کوڈ بنانے تک کیسے جائیں جو سیکڑوں یا ہزاروں آئٹمز کو جلدی سے پروسیس کر سکے۔ اس سبق کے اختتام تک، آپ سمجھ جائیں گے کہ صرف چند لائنوں کے کوڈ کے ساتھ پیچیدہ ڈیٹا کے کام کیسے انجام دیے جا سکتے ہیں۔ آئیے ان ضروری پروگرامنگ تصورات کو دریافت کریں۔ [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## Arrays Arrays کو ایک ڈیجیٹل فائلنگ کیبنٹ کے طور پر سوچیں - ایک دراز میں ایک دستاویز رکھنے کے بجائے، آپ ایک ہی منظم کنٹینر میں کئی متعلقہ آئٹمز کو ترتیب دے سکتے ہیں۔ پروگرامنگ کی زبان میں، arrays آپ کو ایک منظم پیکج میں کئی معلومات ذخیرہ کرنے دیتے ہیں۔ چاہے آپ فوٹو گیلری بنا رہے ہوں، ٹو ڈو لسٹ کا انتظام کر رہے ہوں، یا کسی گیم میں ہائی اسکورز کو ٹریک کر رہے ہوں، arrays ڈیٹا آرگنائزیشن کی بنیاد فراہم کرتے ہیں۔ آئیے دیکھتے ہیں کہ یہ کیسے کام کرتے ہیں۔ ✅ Arrays ہر جگہ موجود ہیں! کیا آپ arrays کی کسی حقیقی زندگی کی مثال دے سکتے ہیں، جیسے سولر پینل array؟ ### Arrays بنانا Arrays بنانا بہت آسان ہے - بس مربع بریکٹس استعمال کریں! یہاں کیا ہو رہا ہے؟ آپ نے ابھی ان مربع بریکٹس [] کا استعمال کرتے ہوئے ایک خالی کنٹینر بنایا ہے۔ اسے ایک خالی لائبریری شیلف کی طرح سوچیں - یہ تیار ہے کہ آپ جو کتابیں وہاں رکھنا چاہتے ہیں انہیں ترتیب دے۔ آپ اپنے array کو شروع سے ہی ابتدائی اقدار کے ساتھ بھر سکتے ہیں: نوٹ کرنے کے لیے دلچسپ باتیں: - آپ ایک ہی array میں متن، نمبر، یا یہاں تک کہ true/false اقدار کو ذخیرہ کر سکتے ہیں - ہر آئٹم کو کاما سے الگ کریں - آسان! - Arrays متعلقہ معلومات کو ایک ساتھ رکھنے کے لیے بہترین ہیں ### Array Indexing یہاں ایک چیز ہے جو شروع میں غیر معمولی لگ سکتی ہے: arrays اپنے آئٹمز کو 0 سے شروع کرتے ہوئے نمبر دیتے ہیں، 1 سے نہیں۔ یہ زیرو بیسڈ انڈیکسنگ کمپیوٹر میموری کے کام کرنے کے طریقے کی جڑوں میں ہے - یہ کمپیوٹنگ زبانوں جیسے C کے ابتدائی دنوں سے ایک پروگرامنگ روایت رہی ہے۔ array میں ہر جگہ کو ایک اپنا ایڈریس نمبر ملتا ہے جسے index کہا جاتا ہے۔ ✅ کیا آپ کو حیرت ہوتی ہے کہ arrays زیرو انڈیکس سے شروع ہوتے ہیں؟ کچھ پروگرامنگ زبانوں میں انڈیکس 1 سے شروع ہوتے ہیں۔ اس کے بارے میں دلچسپ تاریخ Wikipedia پر پڑھ سکتے ہیں۔ Array عناصر تک رسائی حاصل کرنا: یہاں کیا ہو رہا ہے: - استعمال کرتا ہے مربع بریکٹ نوٹیشن کے ساتھ انڈیکس نمبر عناصر تک رسائی حاصل کرنے کے لیے - واپس کرتا ہے array میں اس مخصوص پوزیشن پر ذخیرہ شدہ ویلیو - شروع کرتا ہے 0 سے گنتی، پہلا عنصر انڈیکس 0 بناتا ہے Array عناصر میں ترمیم کرنا: اوپر، ہم نے: - ترمیم کی انڈیکس 4 پر عنصر "Rocky Road" سے "Butter Pecan" میں - ایک نیا عنصر شامل کیا "Cookie Dough" انڈیکس 5 پر - خودکار طور پر array کی لمبائی بڑھائی جب موجودہ حد سے آگے شامل کیا ### Array کی لمبائی اور عام طریقے Arrays میں بلٹ ان پراپرٹیز اور طریقے ہوتے ہیں جو ڈیٹا کے ساتھ کام کرنا بہت آسان بناتے ہیں۔ Array کی لمبائی معلوم کرنا: یاد رکھنے کے اہم نکات: - واپس کرتا ہے array میں عناصر کی کل تعداد - خودکار طور پر اپ ڈیٹ ہوتا ہے جب عناصر شامل یا ہٹائے جاتے ہیں - فراہم کرتا ہے ایک متحرک گنتی جو loops اور validation کے لیے مفید ہے ضروری Array طریقے: ان طریقوں کو سمجھنا: - شامل کرتا ہے عناصر push() (آخر میں) اور unshift() (شروع میں) کے ساتھ - ہٹاتا ہے عناصر pop() (آخر میں) اور shift() (شروع میں) کے ساتھ - مقام کا پتہ لگاتا ہے indexOf() کے ساتھ اور موجودگی کو چیک کرتا ہے includes() کے ساتھ - واپس کرتا ہے مفید ویلیوز جیسے ہٹائے گئے عناصر یا پوزیشن انڈیکس ✅ خود آزمائیں! اپنے براؤزر کے کنسول میں ایک array بنائیں اور اس میں ترمیم کریں۔ ### 🧠 Array کی بنیادی باتوں کی جانچ: اپنے ڈیٹا کو منظم کرنا اپنی array کی سمجھ کو جانچیں: - آپ کے خیال میں arrays 0 سے گنتی کیوں شروع کرتے ہیں نہ کہ 1 سے؟ - اگر آپ کسی انڈیکس تک رسائی حاصل کرنے کی کوشش کریں جو موجود نہیں ہے (جیسے arr[100] 5 عنصر والے array میں)، تو کیا ہوگا؟ - کیا آپ تین حقیقی دنیا کے منظرنامے سوچ سکتے ہیں جہاں arrays مفید ہوں؟ ## Loops چارلس ڈکنز کے ناولوں میں مشہور سزا کے بارے میں سوچیں جہاں طلباء کو بار بار تختی پر لائنیں لکھنی پڑتی تھیں۔ تصور کریں کہ اگر آپ کسی کو صرف یہ ہدایت دے سکیں کہ "یہ جملہ 100 بار لکھو" اور یہ خود بخود ہو جائے۔ یہی کام loops آپ کے کوڈ کے لیے کرتے ہیں۔ Loops ایک تھکے بغیر کام کرنے والے معاون کی طرح ہیں جو کاموں کو بغیر کسی غلطی کے دہراتے ہیں۔ چاہے آپ کو شاپنگ کارٹ میں ہر آئٹم کو چیک کرنا ہو یا البم میں تمام تصاویر دکھانی ہوں، loops مؤثر طریقے سے تکرار کو سنبھالتے ہیں۔ جاوا اسکرپٹ کئی قسم کے loops فراہم کرتا ہے جن میں سے انتخاب کیا جا سکتا ہے۔ آئیے ہر ایک کو دیکھتے ہیں اور سمجھتے ہیں کہ کب ان کا استعمال کرنا ہے۔ ### For Loop for loop ایک ٹائمر سیٹ کرنے کی طرح ہے - آپ کو بالکل معلوم ہوتا ہے کہ آپ کچھ کتنی بار کرنا چاہتے ہیں۔ یہ بہت منظم اور پیش گوئی کے قابل ہے، جو اسے arrays کے ساتھ کام کرنے یا چیزوں کو گننے کے لیے بہترین بناتا ہے۔ For Loop کی ساخت: مرحلہ وار، یہاں کیا ہو رہا ہے: - ابتدائیہ کاؤنٹر ویریبل i کو 0 پر سیٹ کرتا ہے شروع میں - چیک کرتا ہے شرط i < 10 ہر iteration سے پہلے - عمل کرتا ہے کوڈ بلاک جب شرط درست ہو - اضافہ کرتا ہے i کو 1 سے ہر iteration کے بعد i++ کے ساتھ - روکتا ہے جب شرط غلط ہو جائے (جب i 10 تک پہنچ جائے) ✅ اس کوڈ کو براؤزر کنسول میں چلائیں۔ کیا ہوتا ہے جب آپ کاؤنٹر، شرط، یا iteration expression میں چھوٹے تبدیلیاں کرتے ہیں؟ کیا آپ اسے الٹا چلا سکتے ہیں، ایک countdown بناتے ہوئے؟ ### 🗓️ For Loop کی مہارت کی جانچ: کنٹرول شدہ تکرار اپنی for loop کی سمجھ کو جانچیں: - for loop کے تین حصے کیا ہیں، اور ہر ایک کیا کرتا ہے؟ - آپ array کو الٹا کیسے loop کریں گے؟ - اگر آپ increment حصہ (i++) بھول جائیں تو کیا ہوگا؟ ### While Loop while loop ایسا ہے جیسے "یہ کرتے رہو جب تک..." - آپ کو معلوم نہیں ہو سکتا کہ یہ کتنی بار چلے گا، لیکن آپ جانتے ہیں کہ کب رکنا ہے۔ یہ چیزوں کے لیے بہترین ہے جیسے صارف سے ان پٹ مانگنا جب تک وہ آپ کو مطلوبہ چیز نہ دے، یا ڈیٹا میں تلاش کرنا جب تک آپ کو مطلوبہ چیز نہ ملے۔ While Loop کی خصوصیات: - جاری رکھتا ہے جب تک شرط درست ہو - ضرورت ہوتی ہے کسی بھی کاؤنٹر ویریبل کا دستی انتظام - چیک کرتا ہے شرط ہر iteration سے پہلے - خطرہ ہوتا ہے لامتناہی loops کا اگر شرط کبھی غلط نہ ہو ان مثالوں کو سمجھنا: - منظم کرتا ہے کاؤنٹر ویریبل i کو دستی طور پر loop کے اندر - اضافہ کرتا ہے کاؤنٹر کو لامتناہی loops سے بچانے کے لیے - عملی استعمال کا مظاہرہ کرتا ہے صارف انپٹ اور کوششوں کی حد بندی کے ساتھ - شامل کرتا ہے حفاظتی میکانزم لامتناہی عمل کو روکنے کے لیے ### ♾️ While Loop کی دانشمندی کی جانچ: شرط پر مبنی تکرار اپنی while loop کی سمجھ کو جانچیں: - while loops استعمال کرتے وقت سب سے بڑا خطرہ کیا ہے؟ - آپ while loop کو for loop پر کب ترجیح دیں گے؟ - آپ لامتناہی loops کو کیسے روک سکتے ہیں؟ ### جدید Loop کے متبادل جاوا اسکرپٹ جدید loop syntax پیش کرتا ہے جو آپ کے کوڈ کو زیادہ پڑھنے کے قابل اور کم غلطی کا شکار بناتا ہے۔ For...of Loop (ES6+): For...of کے اہم فوائد: - ختم کرتا ہے انڈیکس کے انتظام اور ممکنہ off-by-one غلطیوں کو - فراہم کرتا ہے array عناصر تک براہ راست رسائی - بہتر بناتا ہے کوڈ readability اور syntax کی پیچیدگی کو کم کرتا ہے forEach طریقہ: forEach کے بارے میں جاننے کی باتیں: - عمل کرتا ہے ہر array عنصر کے لیے ایک فنکشن - فراہم کرتا ہے عنصر کی ویلیو اور انڈیکس دونوں کو پیرامیٹرز کے طور پر - روکا نہیں جا سکتا جلدی (روایتی loops کے برعکس) - واپس کرتا ہے undefined (نیا array نہیں بناتا) ✅ آپ for loop کے مقابلے میں while loop کیوں منتخب کریں گے؟ 17K ناظرین نے StackOverflow پر یہی سوال کیا، اور کچھ آراء آپ کے لیے دلچسپ ہو سکتی ہیں۔ ### 🎨 جدید Loop Syntax کی جانچ: ES6+ کو اپنانا اپنی جدید جاوا اسکرپٹ کی سمجھ کو جانچیں: - روایتی for loops کے مقابلے میں for...of کے فوائد کیا ہیں؟ - آپ روایتی for loops کو کب ترجیح دیں گے؟ - forEach اور map میں کیا فرق ہے؟ ## Loops اور Arrays Arrays کو loops کے ساتھ جوڑنا طاقتور ڈیٹا پروسیسنگ کی صلاحیتیں پیدا کرتا ہے۔ یہ جوڑی بہت سے پروگرامنگ کاموں کے لیے بنیادی ہے، جیسے فہرستیں دکھانا یا شماریات کا حساب لگانا۔ روایتی Array پروسیسنگ: آئیے ہر طریقہ کو سمجھتے ہیں: - استعمال کرتا ہے array کی لمبائی پراپرٹی loop کی حد کا تعین کرنے کے لیے - رسائی حاصل کرتا ہے عناصر کو انڈیکس کے ذریعے روایتی for loops میں - فراہم کرتا ہے براہ راست عنصر تک رسائی for...of loops میں - پروسیس کرتا ہے ہر array عنصر کو بالکل ایک بار عملی ڈیٹا پروسیسنگ کی مثال: یہ کوڈ کیسے کام کرتا ہے: - ابتدائیہ کرتا ہے ٹریکنگ ویریبلز کو مجموعی اور انتہائی اقدار کے لیے - پروسیس کرتا ہے ہر گریڈ کو ایک مؤثر loop کے ساتھ - جمع کرتا ہے کل کو اوسط حساب کے لیے - ٹریک کرتا ہے سب سے زیادہ اور سب سے کم ویلیوز iteration کے دوران - حساب کرتا ہے حتمی شماریات loop کے اختتام کے بعد ✅ اپنے براؤزر کے کنسول میں اپنے بنائے ہوئے array پر loop کرنے کا تجربہ کریں۔ --- ## GitHub Copilot Agent Challenge 🚀 Agent mode استعمال کریں درج ذیل چیلنج مکمل کرنے کے لیے: تفصیل: ایک جامع ڈیٹا پروسیسنگ فنکشن بنائیں جو arrays اور loops کو ملا کر ایک dataset کا تجزیہ کرے اور معنی خیز بصیرت پیدا کرے۔ Prompt: ایک فنکشن بنائیں جس کا نام analyzeGrades ہو جو ایک array لے جس میں طالب علموں کے گریڈ objects ہوں (ہر ایک میں name اور score پراپرٹیز ہوں) اور ایک object واپس کرے جس میں شماریات شامل ہوں جیسے سب سے زیادہ سکور، سب سے کم سکور، اوسط سکور، پاس ہونے والے طالب علموں کی تعداد (score >= 70)، اور ایک array طالب علموں کے ناموں کا جو اوسط سے زیادہ سکور حاصل کریں۔ اپنے حل میں کم از کم دو مختلف loop اقسام استعمال کریں۔ Agent mode کے بارے میں مزید جانیں یہاں۔ ## 🚀 چیلنج جاوا اسکرپٹ کئی جدید array کے طریقے پیش کرتا ہے جو مخصوص کاموں کے لیے روایتی loops کی جگہ لے سکتے ہیں۔ forEach، for-of، map، filter، اور reduce کو دریافت کریں۔ آپ کا چیلنج: طالب علموں کے گریڈز کی مثال کو کم از کم تین مختلف array کے طریقوں کا استعمال کرتے ہوئے دوبارہ لکھیں۔ دیکھیں کہ جدید جاوا اسکرپٹ سینٹیکس کے ساتھ کوڈ کتنا صاف اور پڑھنے کے قابل ہو جاتا ہے۔ ## لیکچر کے بعد کا کوئز لیکچر کے بعد کا کوئز ## جائزہ اور خود مطالعہ جاوا اسکرپٹ میں arrays کے ساتھ کئی طریقے منسلک ہوتے ہیں جو ڈیٹا کو منظم کرنے میں انتہائی مفید ہیں۔ ان طریقوں کے بارے میں پڑھیں اور ان میں سے کچھ کو اپنی تخلیق کردہ array پر آزمائیں (جیسے push، pop، slice اور splice)۔ ## اسائنمنٹ ایک Array کو لوپ کریں --- ## 📊 آپ کے Arrays اور Loops کے ٹول کٹ کا خلاصہ --- ## 🚀 آپ کے Arrays اور Loops کی مہارت کا ٹائم لائن ### ⚡ اگلے 5 منٹ میں آپ کیا کر سکتے ہیں - [ ] اپنی پسندیدہ فلموں کی ایک array بنائیں اور مخصوص عناصر تک رسائی حاصل کریں - [ ] ایک for loop لکھیں جو 1 سے 10 تک گنتی کرے - [ ] سبق سے جدید array کے طریقوں کا چیلنج آزمائیں - [ ] اپنے براؤزر کنسول میں array indexing کی مشق کریں ### 🎯 اس گھنٹے میں آپ کیا حاصل کر سکتے ہیں - [ ] لیکچر کے بعد کا کوئز مکمل کریں اور کسی بھی مشکل تصورات کا جائزہ لیں - [ ] GitHub Copilot چیلنج سے جامع گریڈ تجزیہ کار بنائیں - [ ] ایک سادہ shopping cart بنائیں جو اشیاء کو شامل اور ہٹائے - [ ] مختلف loop کی اقسام میں تبدیل کرنے کی مشق کریں - [ ] array کے طریقوں جیسے push، pop، slice، اور splice کے ساتھ تجربہ کریں ### 📅 آپ کا ہفتہ بھر کا ڈیٹا پروسیسنگ سفر - [ ] "ایک Array کو لوپ کریں" اسائنمنٹ کو تخلیقی اضافوں کے ساتھ مکمل کریں - [ ] arrays اور loops کا استعمال کرتے ہوئے ایک to-do list ایپلیکیشن بنائیں - [ ] عددی ڈیٹا کے لیے ایک سادہ شماریاتی کیلکولیٹر بنائیں - [ ] MDN array کے طریقوں کے ساتھ مشق کریں - [ ] ایک فوٹو گیلری یا موسیقی کی پلے لسٹ انٹرفیس بنائیں - [ ] map، filter، اور reduce کے ساتھ functional programming کو دریافت کریں ### 🌟 آپ کی مہینے بھر کی تبدیلی - [ ] جدید array آپریشنز اور کارکردگی کی اصلاح میں مہارت حاصل کریں - [ ] ایک مکمل ڈیٹا visualization ڈیش بورڈ بنائیں - [ ] ڈیٹا پروسیسنگ سے متعلق اوپن سورس پروجیکٹس میں حصہ لیں - [ ] عملی مثالوں کے ساتھ کسی اور کو arrays اور loops کے بارے میں سکھائیں - [ ] دوبارہ استعمال کے قابل ڈیٹا پروسیسنگ فنکشنز کی ذاتی لائبریری بنائیں - [ ] arrays پر مبنی الگورتھمز اور ڈیٹا اسٹرکچرز کو دریافت کریں ### 🏆 ڈیٹا پروسیسنگ چیمپئن کے آخری چیک ان اپنی array اور loop کی مہارت کا جشن منائیں: - آپ نے حقیقی دنیا کی ایپلیکیشنز کے لیے سب سے زیادہ مفید array آپریشن کون سا سیکھا؟ - آپ کو کون سا loop کی قسم سب سے زیادہ قدرتی لگتی ہے اور کیوں؟ - arrays اور loops کو سمجھنے سے آپ کے ڈیٹا کو منظم کرنے کے طریقے میں کیا تبدیلی آئی؟ - آپ اگلا کون سا پیچیدہ ڈیٹا پروسیسنگ کام کرنا چاہیں گے؟ --- اعلانِ لاتعلقی: یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔

array,loop

Giới thiệu về JavaScript

JavaScript là ngôn ngữ của web. Trong bốn bài học này, bạn sẽ học những kiến thức cơ bản về nó. ### Chủ đề 1. Biến và Kiểu Dữ Liệu 2. Hàm và Phương Thức 3. Ra Quyết Định với JavaScript 4. Mảng và Vòng Lặp ### Tín dụng Những bài học này được viết với ♥️ bởi Jasmine Greenaway, Christopher Harrison và Chris Noring --- Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.

javascript

Cơ bản về JavaScript: Kiểu dữ liệu

Kiểu dữ liệu là một trong những khái niệm cơ bản trong JavaScript mà bạn sẽ gặp trong mọi chương trình bạn viết. Hãy nghĩ về kiểu dữ liệu như hệ thống lưu trữ mà các thủ thư cổ đại ở Alexandria đã sử dụng – họ có những nơi cụ thể để lưu trữ các cuộn giấy chứa thơ ca, toán học và lịch sử. JavaScript tổ chức thông tin theo cách tương tự với các danh mục khác nhau cho các loại dữ liệu khác nhau. Trong bài học này, chúng ta sẽ khám phá các kiểu dữ liệu cốt lõi làm cho JavaScript hoạt động. Bạn sẽ học cách xử lý số, văn bản, giá trị đúng/sai và hiểu tại sao việc chọn đúng kiểu dữ liệu lại quan trọng đối với chương trình của bạn. Những khái niệm này có thể trông trừu tượng lúc đầu, nhưng với thực hành, chúng sẽ trở nên quen thuộc. Hiểu kiểu dữ liệu sẽ làm mọi thứ khác trong JavaScript trở nên rõ ràng hơn. Giống như các kiến trúc sư cần hiểu các vật liệu xây dựng khác nhau trước khi xây dựng một nhà thờ lớn, những nền tảng này sẽ hỗ trợ mọi thứ bạn xây dựng sau này. ## Quiz trước bài học Quiz trước bài học Bài học này bao gồm những kiến thức cơ bản về JavaScript, ngôn ngữ mang lại tính tương tác trên web. [](https://youtube.com/watch?v=JNIXfGiDWM8 "Biến trong JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Kiểu dữ liệu trong JavaScript") Hãy bắt đầu với biến và các kiểu dữ liệu mà chúng chứa! ## Biến Biến là những khối xây dựng cơ bản trong lập trình. Giống như những lọ được dán nhãn mà các nhà giả kim thời trung cổ sử dụng để lưu trữ các chất khác nhau, biến cho phép bạn lưu trữ thông tin và đặt cho nó một cái tên mô tả để bạn có thể tham chiếu sau này. Cần nhớ tuổi của ai đó? Lưu nó trong một biến gọi là age. Muốn theo dõi tên người dùng? Lưu nó trong một biến gọi là userName. Chúng ta sẽ tập trung vào cách tiếp cận hiện đại để tạo biến trong JavaScript. Các kỹ thuật bạn học ở đây đại diện cho nhiều năm phát triển ngôn ngữ và các thực hành tốt nhất được cộng đồng lập trình phát triển. Tạo và khai báo một biến có cú pháp sau [keyword] [name]. Nó bao gồm hai phần: - Từ khóa. Sử dụng let cho các biến có thể thay đổi, hoặc const cho các giá trị không thay đổi. - Tên biến, đây là tên mô tả mà bạn tự chọn. ✅ Từ khóa let được giới thiệu trong ES6 và cung cấp cho biến của bạn một cái gọi là _phạm vi khối_. Khuyến nghị rằng bạn nên sử dụng let hoặc const thay vì từ khóa cũ var. Chúng ta sẽ tìm hiểu sâu hơn về phạm vi khối trong các phần sau. ### Nhiệm vụ - làm việc với biến 1. Khai báo một biến. Hãy bắt đầu bằng cách tạo biến đầu tiên của chúng ta: ```javascript let myVariable; ``` Điều này đạt được: - Điều này yêu cầu JavaScript tạo một vị trí lưu trữ gọi là myVariable - JavaScript phân bổ không gian trong bộ nhớ cho biến này - Biến hiện tại không có giá trị (undefined) 2. Gán giá trị cho nó. Bây giờ hãy đặt một cái gì đó vào biến của chúng ta: ```javascript myVariable = 123; ``` Cách hoạt động của việc gán giá trị: - Toán tử = gán giá trị 123 cho biến của chúng ta - Biến hiện tại chứa giá trị này thay vì undefined - Bạn có thể tham chiếu giá trị này trong toàn bộ mã của mình bằng cách sử dụng myVariable > Lưu ý: việc sử dụng = trong bài học này có nghĩa là chúng ta sử dụng một "toán tử gán", được sử dụng để đặt giá trị cho một biến. Nó không biểu thị sự bằng nhau. 3. Làm theo cách thông minh. Thực ra, hãy kết hợp hai bước đó: ```javascript let myVariable = 123; ``` Cách tiếp cận này hiệu quả hơn: - Bạn đang khai báo biến và gán giá trị trong một câu lệnh - Đây là thực hành tiêu chuẩn trong các nhà phát triển - Nó giảm độ dài mã trong khi vẫn duy trì sự rõ ràng 4. Thay đổi ý định. Điều gì xảy ra nếu chúng ta muốn lưu trữ một số khác? ```javascript myVariable = 321; ``` Hiểu về việc gán lại giá trị: - Biến hiện tại chứa 321 thay vì 123 - Giá trị trước đó bị thay thế – biến chỉ lưu trữ một giá trị tại một thời điểm - Tính có thể thay đổi này là đặc điểm chính của các biến được khai báo với let ✅ Thử ngay! Bạn có thể viết JavaScript trực tiếp trong trình duyệt của mình. Mở một cửa sổ trình duyệt và điều hướng đến Công cụ dành cho nhà phát triển. Trong bảng điều khiển, bạn sẽ thấy một lời nhắc; nhập let myVariable = 123, nhấn Enter, sau đó nhập myVariable. Điều gì xảy ra? Lưu ý, bạn sẽ học thêm về những khái niệm này trong các bài học tiếp theo. ### 🧠 Kiểm tra sự thành thạo về biến: Làm quen Hãy xem bạn cảm thấy thế nào về biến: - Bạn có thể giải thích sự khác biệt giữa khai báo và gán giá trị cho biến không? - Điều gì xảy ra nếu bạn cố gắng sử dụng một biến trước khi khai báo nó? - Khi nào bạn sẽ chọn let thay vì const cho một biến? ## Hằng số Đôi khi bạn cần lưu trữ thông tin không bao giờ thay đổi trong suốt quá trình thực thi chương trình. Hãy nghĩ về hằng số như các nguyên lý toán học mà Euclid đã thiết lập ở Hy Lạp cổ đại – một khi được chứng minh và ghi chép, chúng vẫn cố định cho tất cả các tham chiếu trong tương lai. Hằng số hoạt động tương tự như biến, nhưng với một hạn chế quan trọng: một khi bạn gán giá trị cho chúng, giá trị đó không thể thay đổi. Tính bất biến này giúp ngăn chặn các thay đổi không mong muốn đối với các giá trị quan trọng trong chương trình của bạn. Khai báo và khởi tạo một hằng số tuân theo các khái niệm giống như biến, ngoại trừ từ khóa const. Hằng số thường được khai báo với tất cả các chữ cái viết hoa. Đây là những gì mã này làm: - Tạo một hằng số tên là MY_VARIABLE với giá trị 123 - Sử dụng quy ước đặt tên viết hoa cho hằng số - Ngăn chặn bất kỳ thay đổi nào trong tương lai đối với giá trị này Hằng số có hai quy tắc chính: - Bạn phải gán giá trị ngay lập tức – không được phép có hằng số trống! - Bạn không bao giờ có thể thay đổi giá trị đó – JavaScript sẽ báo lỗi nếu bạn cố gắng. Hãy xem ý nghĩa của điều này: Giá trị đơn giản - Điều sau đây KHÔNG được phép: ```javascript const PI = 3; PI = 4; // không được phép ``` Những điều bạn cần nhớ: - Cố gắng gán lại giá trị cho hằng số sẽ gây ra lỗi - Bảo vệ các giá trị quan trọng khỏi các thay đổi không mong muốn - Đảm bảo giá trị vẫn nhất quán trong toàn bộ chương trình của bạn Tham chiếu đối tượng được bảo vệ - Điều sau đây KHÔNG được phép: ```javascript const obj = { a: 3 }; obj = { b: 5 } // không được phép ``` Hiểu những khái niệm này: - Ngăn chặn thay thế toàn bộ đối tượng bằng một đối tượng mới - Bảo vệ tham chiếu đến đối tượng ban đầu - Duy trì danh tính của đối tượng trong bộ nhớ Giá trị đối tượng không được bảo vệ - Điều sau đây ĐƯỢC phép: ```javascript const obj = { a: 3 }; obj.a = 5; // được phép ``` Phân tích điều gì xảy ra ở đây: - Thay đổi giá trị thuộc tính bên trong đối tượng - Giữ nguyên tham chiếu đối tượng - Chứng minh rằng nội dung đối tượng có thể thay đổi trong khi tham chiếu vẫn cố định > Lưu ý, một const có nghĩa là tham chiếu được bảo vệ khỏi việc gán lại. Giá trị không phải là _bất biến_ và có thể thay đổi, đặc biệt nếu nó là một cấu trúc phức tạp như một đối tượng. ## Kiểu dữ liệu JavaScript tổ chức thông tin thành các danh mục khác nhau gọi là kiểu dữ liệu. Khái niệm này giống như cách các học giả cổ đại phân loại kiến thức – Aristotle phân biệt giữa các loại lý luận khác nhau, biết rằng các nguyên lý logic không thể áp dụng đồng nhất cho thơ ca, toán học và triết học tự nhiên. Kiểu dữ liệu quan trọng vì các thao tác khác nhau hoạt động với các loại thông tin khác nhau. Giống như bạn không thể thực hiện phép toán trên tên của một người hoặc sắp xếp theo thứ tự bảng chữ cái một phương trình toán học, JavaScript yêu cầu kiểu dữ liệu phù hợp cho mỗi thao tác. Hiểu điều này giúp tránh lỗi và làm cho mã của bạn đáng tin cậy hơn. Biến có thể lưu trữ nhiều loại giá trị khác nhau, như số và văn bản. Những loại giá trị khác nhau này được gọi là kiểu dữ liệu. Kiểu dữ liệu là một phần quan trọng của phát triển phần mềm vì nó giúp các nhà phát triển đưa ra quyết định về cách mã nên được viết và cách phần mềm nên chạy. Hơn nữa, một số kiểu dữ liệu có các tính năng độc đáo giúp biến đổi hoặc trích xuất thông tin bổ sung từ một giá trị. ✅ Kiểu dữ liệu cũng được gọi là các kiểu dữ liệu nguyên thủy của JavaScript, vì chúng là các kiểu dữ liệu cấp thấp nhất được cung cấp bởi ngôn ngữ. Có 7 kiểu dữ liệu nguyên thủy: string, number, bigint, boolean, undefined, null và symbol. Dành một phút để hình dung mỗi kiểu dữ liệu nguyên thủy này có thể đại diện cho điều gì. zebra là gì? Còn 0 thì sao? true? ### Số Số là kiểu dữ liệu đơn giản nhất trong JavaScript. Cho dù bạn đang làm việc với số nguyên như 42, số thập phân như 3.14, hay số âm như -5, JavaScript xử lý chúng một cách đồng nhất. Nhớ biến của chúng ta từ trước không? Số 123 mà chúng ta đã lưu thực ra là một kiểu dữ liệu số: Đặc điểm chính: - JavaScript tự động nhận diện giá trị số - Bạn có thể thực hiện các phép toán với các biến này - Không cần khai báo kiểu rõ ràng Biến có thể lưu trữ tất cả các loại số, bao gồm số thập phân hoặc số âm. Số cũng có thể được sử dụng với các toán tử số học, được đề cập trong phần tiếp theo. ### Toán tử số học Toán tử số học cho phép bạn thực hiện các phép tính toán học trong JavaScript. Các toán tử này tuân theo các nguyên lý mà các nhà toán học đã sử dụng trong nhiều thế kỷ – các ký hiệu giống như những ký hiệu xuất hiện trong các tác phẩm của các học giả như Al-Khwarizmi, người đã phát triển ký hiệu đại số. Các toán tử hoạt động như bạn mong đợi từ toán học truyền thống: dấu cộng để cộng, dấu trừ để trừ, và tương tự. Có một số loại toán tử để sử dụng khi thực hiện các chức năng số học, và một số được liệt kê dưới đây: ✅ Thử ngay! Thử một phép toán số học trong bảng điều khiển của trình duyệt của bạn. Kết quả có làm bạn ngạc nhiên không? ### 🧮 Kiểm tra kỹ năng toán học: Tính toán tự tin Kiểm tra sự hiểu biết về số học của bạn: - Sự khác biệt giữa / (chia) và % (phần dư) là gì? - Bạn có thể dự đoán 10 % 3 bằng bao nhiêu không? (Gợi ý: không phải 3.33 đâu...) - Tại sao toán tử phần dư lại hữu ích trong lập trình? ### Chuỗi Trong JavaScript, dữ liệu văn bản được biểu diễn dưới dạng chuỗi. Thuật ngữ "chuỗi" xuất phát từ khái niệm các ký tự được nối lại với nhau theo trình tự, giống như cách các nhà chép sách trong các tu viện thời trung cổ kết nối các chữ cái để tạo thành từ và câu trong bản thảo của họ. Chuỗi là nền tảng của phát triển web. Mọi đoạn văn bản hiển thị trên một trang web – tên người dùng, nhãn nút, thông báo lỗi, nội dung – đều được xử lý dưới dạng dữ liệu chuỗi. Hiểu chuỗi là điều cần thiết để tạo giao diện người dùng chức năng. Chuỗi là tập hợp các ký tự nằm giữa dấu nháy đơn hoặc nháy kép. Hiểu những khái niệm này: - Sử dụng dấu nháy đơn ' hoặc dấu nháy kép " để định nghĩa chuỗi - Lưu trữ dữ liệu văn bản có thể bao gồm chữ cái, số và ký hiệu - Gán giá trị chuỗi cho biến để sử dụng sau này - Yêu cầu dấu nháy để phân biệt văn bản với tên biến Hãy nhớ sử dụng dấu nháy khi viết chuỗi, nếu không JavaScript sẽ cho rằng đó là tên biến. ### Định dạng chuỗi Việc thao tác chuỗi cho phép bạn kết hợp các phần tử văn bản, tích hợp biến và tạo nội dung động phản hồi trạng thái chương trình. Kỹ thuật này cho phép bạn xây dựng văn bản một cách lập trình. Thường bạn cần nối nhiều chuỗi lại với nhau – quá trình này được gọi là nối chuỗi. Để nối hai hoặc nhiều chuỗi, hoặc ghép chúng lại với nhau, sử dụng toán tử +. Từng bước, đây là những gì đang diễn ra: - Kết hợp nhiều chuỗi bằng toán tử + - Ghép các chuỗi trực tiếp với nhau mà không có khoảng trắng trong ví dụ đầu tiên - Thêm ký tự khoảng trắng " " giữa các chuỗi để dễ đọc hơn - Chèn dấu câu như dấu phẩy để tạo định dạng đúng ✅ Tại sao 1 + 1 = 2 trong JavaScript, nhưng '1' + '1' = 11? Hãy suy nghĩ về điều này. Còn '1' + 1 thì sao? Template literals là một cách khác để định dạng chuỗi, thay vì sử dụng dấu nháy, bạn sử dụng dấu backtick. Bất cứ thứ gì không phải văn bản thông thường phải được đặt trong các placeholder ${ }. Điều này bao gồm bất kỳ biến nào có thể là chuỗi. Hãy hiểu từng phần: - Sử dụng dấu backtick ` `` thay vì dấu nháy thông thường để tạo template literals - Nhúng biến trực tiếp bằng cú pháp placeholder ${} - Giữ nguyên khoảng trắng và định dạng đúng như đã viết - Cung cấp cách tạo chuỗi phức tạp với biến một cách rõ ràng hơn Bạn có thể đạt được mục tiêu định dạng của mình bằng cả hai phương pháp, nhưng template literals sẽ giữ nguyên khoảng trắng và ngắt dòng. ✅ Khi nào bạn nên sử dụng template literal thay vì chuỗi thông thường? ### 🔤 Kiểm tra kỹ năng chuỗi: Tự tin thao tác văn bản Đánh giá kỹ năng chuỗi của bạn: - Bạn có thể giải thích tại sao '1' + '1' bằng '11' thay vì 2 không? - Phương pháp nào bạn thấy dễ đọc hơn: nối chuỗi hay template literals? - Điều gì xảy ra nếu bạn quên dấu nháy quanh một chuỗi? ### Booleans Booleans đại diện cho dạng dữ liệu đơn giản nhất: chúng chỉ có thể chứa một trong hai giá trị – true hoặc false. Hệ thống logic nhị phân này bắt nguồn từ công trình của George Boole, một nhà toán học thế kỷ 19 đã phát triển đại số Boolean. Mặc dù đơn giản, booleans rất quan trọng đối với logic chương trình. Chúng cho phép mã của bạn đưa ra quyết định dựa trên các điều kiện – liệu người dùng đã đăng nhập, nút đã được nhấn hay các tiêu chí nhất định đã được đáp ứng. Booleans chỉ có thể có hai giá trị: true hoặc false. Booleans giúp đưa ra quyết định về dòng mã nào nên chạy khi các điều kiện nhất định được đáp ứng. Trong nhiều trường hợp, toán tử hỗ trợ thiết lập giá trị của Boolean và bạn sẽ thường thấy và viết các biến được khởi tạo hoặc giá trị của chúng được cập nhật bằng một toán tử. Trong ví dụ trên, chúng ta đã: - Tạo một biến lưu giá trị Boolean true - Minh họa cách lưu giá trị Boolean false - Sử dụng các từ khóa chính xác true và false (không cần dấu nháy) - Chuẩn bị các biến này để sử dụng trong các câu lệnh điều kiện ✅ Một biến có thể được coi là 'truthy' nếu nó đánh giá là boolean true. Thú vị là, trong JavaScript, tất cả các giá trị đều là truthy trừ khi được định nghĩa là falsy. ### 🎯 Kiểm tra logic Boolean: Kỹ năng ra quyết định Kiểm tra hiểu biết của bạn về boolean: - Tại sao bạn nghĩ JavaScript có giá trị "truthy" và "falsy" ngoài chỉ true và false? - Bạn có thể dự đoán giá trị nào trong số này là falsy: 0, "0", [], "false" không? - Làm thế nào booleans có thể hữu ích trong việc kiểm soát luồng chương trình? --- ## 📊 Tóm tắt công cụ kiểu dữ liệu của bạn ## Thử thách GitHub Copilot Agent 🚀 Sử dụng chế độ Agent để hoàn thành thử thách sau: Mô tả: Tạo một trình quản lý thông tin cá nhân thể hiện tất cả các kiểu dữ liệu JavaScript bạn đã học trong bài học này đồng thời xử lý các tình huống dữ liệu thực tế. Yêu cầu: Xây dựng một chương trình JavaScript tạo một đối tượng hồ sơ người dùng chứa: tên của một người (string), tuổi (number), trạng thái là sinh viên (boolean), các màu yêu thích dưới dạng mảng, và một đối tượng địa chỉ với các thuộc tính đường phố, thành phố, và mã bưu điện. Bao gồm các hàm để hiển thị thông tin hồ sơ và cập nhật từng trường riêng lẻ. Đảm bảo thể hiện nối chuỗi, template literals, các phép toán số học với tuổi, và logic boolean cho trạng thái sinh viên. Tìm hiểu thêm về chế độ agent tại đây. ## 🚀 Thử thách JavaScript có một số hành vi có thể khiến các nhà phát triển bất ngờ. Đây là một ví dụ kinh điển để khám phá: thử gõ vào bảng điều khiển trình duyệt của bạn: let age = 1; let Age = 2; age == Age và quan sát kết quả. Nó trả về false – bạn có thể xác định tại sao không? Điều này đại diện cho một trong nhiều hành vi JavaScript đáng hiểu. Hiểu rõ những điều kỳ quặc này sẽ giúp bạn viết mã đáng tin cậy hơn và gỡ lỗi hiệu quả hơn. ## Câu hỏi sau bài giảng Câu hỏi sau bài giảng ## Ôn tập & Tự học Xem qua danh sách bài tập JavaScript này và thử một bài. Bạn đã học được gì? ## Bài tập Thực hành kiểu dữ liệu ## 🚀 Lộ trình làm chủ kiểu dữ liệu JavaScript của bạn ### ⚡ Những gì bạn có thể làm trong 5 phút tới - [ ] Mở bảng điều khiển trình duyệt của bạn và tạo 3 biến với các kiểu dữ liệu khác nhau - [ ] Thử thách: let age = 1; let Age = 2; age == Age và tìm hiểu tại sao nó là false - [ ] Thực hành nối chuỗi với tên của bạn và số yêu thích - [ ] Kiểm tra điều gì xảy ra khi bạn cộng một số vào một chuỗi ### 🎯 Những gì bạn có thể hoàn thành trong giờ này - [ ] Hoàn thành câu hỏi sau bài học và ôn lại các khái niệm khó hiểu - [ ] Tạo một máy tính mini cộng, trừ, nhân, và chia hai số - [ ] Xây dựng một trình định dạng tên đơn giản bằng template literals - [ ] Khám phá sự khác biệt giữa toán tử so sánh == và === - [ ] Thực hành chuyển đổi giữa các kiểu dữ liệu khác nhau ### 📅 Nền tảng JavaScript của bạn trong tuần - [ ] Hoàn thành bài tập với sự tự tin và sáng tạo - [ ] Tạo một đối tượng hồ sơ cá nhân sử dụng tất cả các kiểu dữ liệu đã học - [ ] Thực hành với bài tập JavaScript từ CSS-Tricks - [ ] Xây dựng một trình xác thực biểu mẫu đơn giản bằng logic boolean - [ ] Thử nghiệm với kiểu dữ liệu mảng và đối tượng (xem trước bài học tiếp theo) - [ ] Tham gia cộng đồng JavaScript và đặt câu hỏi về kiểu dữ liệu ### 🌟 Sự chuyển đổi của bạn trong tháng - [ ] Tích hợp kiến thức kiểu dữ liệu vào các dự án lập trình lớn hơn - [ ] Hiểu khi nào và tại sao sử dụng từng kiểu dữ liệu trong ứng dụng thực tế - [ ] Giúp những người mới bắt đầu hiểu các nguyên tắc cơ bản của JavaScript - [ ] Xây dựng một ứng dụng nhỏ quản lý các loại dữ liệu người dùng khác nhau - [ ] Khám phá các khái niệm kiểu dữ liệu nâng cao như ép kiểu và so sánh nghiêm ngặt - [ ] Đóng góp cho các dự án JavaScript mã nguồn mở bằng cách cải thiện tài liệu ### 🧠 Kiểm tra cuối cùng về làm chủ kiểu dữ liệu Chúc mừng nền tảng JavaScript của bạn: - Kiểu dữ liệu nào khiến bạn ngạc nhiên nhất về hành vi của nó? - Bạn cảm thấy thoải mái như thế nào khi giải thích biến so với hằng số cho một người bạn? - Điều thú vị nhất bạn phát hiện về hệ thống kiểu của JavaScript là gì? - Ứng dụng thực tế nào bạn có thể tưởng tượng xây dựng với những nguyên tắc cơ bản này? --- Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.

javascript

Cơ bản về JavaScript: Phương thức và Hàm

## Quiz trước bài học Quiz trước bài học Việc viết lại cùng một đoạn mã nhiều lần là một trong những điều gây khó chịu nhất trong lập trình. Hàm giải quyết vấn đề này bằng cách cho phép bạn đóng gói mã thành các khối có thể tái sử dụng. Hãy nghĩ về hàm như các bộ phận tiêu chuẩn hóa đã làm cho dây chuyền lắp ráp của Henry Ford trở nên cách mạng – một khi bạn tạo ra một thành phần đáng tin cậy, bạn có thể sử dụng nó ở bất cứ đâu mà không cần phải xây dựng lại từ đầu. Hàm cho phép bạn gói gọn các đoạn mã để bạn có thể tái sử dụng chúng trong toàn bộ chương trình của mình. Thay vì sao chép và dán cùng một logic ở khắp nơi, bạn có thể tạo một hàm một lần và gọi nó bất cứ khi nào cần. Cách tiếp cận này giúp mã của bạn được tổ chức và việc cập nhật trở nên dễ dàng hơn. Trong bài học này, bạn sẽ học cách tạo hàm của riêng mình, truyền thông tin vào chúng và nhận lại kết quả hữu ích. Bạn sẽ khám phá sự khác biệt giữa hàm và phương thức, học các cách tiếp cận cú pháp hiện đại, và thấy cách các hàm có thể hoạt động cùng nhau. Chúng ta sẽ xây dựng các khái niệm này từng bước. [](https://youtube.com/watch?v=XgKsD6Zwvlc "Phương thức và Hàm") ## Hàm Hàm là một khối mã độc lập thực hiện một nhiệm vụ cụ thể. Nó bao gồm logic mà bạn có thể thực thi bất cứ khi nào cần. Thay vì viết lại cùng một đoạn mã nhiều lần trong chương trình của bạn, bạn có thể đóng gói nó trong một hàm và gọi hàm đó bất cứ khi nào bạn cần. Cách tiếp cận này giúp mã của bạn sạch sẽ và việc cập nhật trở nên dễ dàng hơn. Hãy nghĩ đến thách thức bảo trì nếu bạn cần thay đổi logic được rải rác ở 20 vị trí khác nhau trong mã của mình. Việc đặt tên hàm một cách mô tả là rất quan trọng. Một hàm được đặt tên rõ ràng sẽ truyền đạt mục đích của nó một cách dễ hiểu – khi bạn thấy cancelTimer(), bạn ngay lập tức hiểu nó làm gì, giống như một nút được gắn nhãn rõ ràng cho bạn biết chính xác điều gì sẽ xảy ra khi bạn nhấp vào. ## Tạo và gọi một hàm Hãy xem cách tạo một hàm. Cú pháp tuân theo một mẫu nhất quán: Hãy phân tích: - Từ khóa function cho JavaScript biết "Này, tôi đang tạo một hàm!" - nameOfFunction là nơi bạn đặt tên mô tả cho hàm của mình - Dấu ngoặc đơn () là nơi bạn có thể thêm tham số (chúng ta sẽ nói về điều này sớm) - Dấu ngoặc nhọn {} chứa mã thực tế sẽ chạy khi bạn gọi hàm Hãy tạo một hàm chào đơn giản để xem cách hoạt động: Hàm này in "Hello, world!" ra console. Một khi bạn đã định nghĩa nó, bạn có thể sử dụng nó nhiều lần khi cần. Để thực thi (hoặc "gọi") hàm của bạn, hãy viết tên của nó theo sau là dấu ngoặc đơn. JavaScript cho phép bạn định nghĩa hàm trước hoặc sau khi gọi nó – công cụ JavaScript sẽ xử lý thứ tự thực thi. Khi bạn chạy dòng này, nó thực thi tất cả mã bên trong hàm displayGreeting của bạn, hiển thị "Hello, world!" trong console của trình duyệt. Bạn có thể gọi hàm này nhiều lần. ### 🧠 Kiểm tra kiến thức cơ bản về hàm: Xây dựng các hàm đầu tiên của bạn Hãy xem bạn cảm thấy thế nào về các hàm cơ bản: - Bạn có thể giải thích tại sao chúng ta sử dụng dấu ngoặc nhọn {} trong định nghĩa hàm không? - Điều gì xảy ra nếu bạn viết displayGreeting mà không có dấu ngoặc đơn? - Tại sao bạn có thể muốn gọi cùng một hàm nhiều lần? ### Các thực hành tốt nhất về hàm Dưới đây là một vài mẹo giúp bạn viết các hàm tốt: - Đặt tên hàm rõ ràng, mô tả – bạn sẽ cảm ơn chính mình trong tương lai! - Sử dụng camelCasing cho tên nhiều từ (như calculateTotal thay vì calculate_total) - Giữ mỗi hàm tập trung vào việc thực hiện một nhiệm vụ tốt ## Truyền thông tin vào một hàm Hàm displayGreeting của chúng ta bị giới hạn – nó chỉ có thể hiển thị "Hello, world!" cho tất cả mọi người. Tham số cho phép chúng ta làm cho các hàm linh hoạt và hữu ích hơn. Tham số hoạt động như các chỗ trống nơi bạn có thể chèn các giá trị khác nhau mỗi lần bạn sử dụng hàm. Bằng cách này, cùng một hàm có thể hoạt động với thông tin khác nhau trong mỗi lần gọi. Bạn liệt kê các tham số bên trong dấu ngoặc đơn khi bạn định nghĩa hàm, tách các tham số bằng dấu phẩy: Mỗi tham số hoạt động như một chỗ trống – khi ai đó gọi hàm của bạn, họ sẽ cung cấp các giá trị thực tế được chèn vào các vị trí này. Hãy cập nhật hàm chào của chúng ta để chấp nhận tên của ai đó: Lưu ý cách chúng ta sử dụng dấu backticks (` `) và ${}` để chèn tên trực tiếp vào thông điệp – đây được gọi là template literal, và nó là một cách rất tiện lợi để xây dựng chuỗi với các biến được trộn lẫn. Bây giờ khi chúng ta gọi hàm, chúng ta có thể truyền vào bất kỳ tên nào: JavaScript lấy chuỗi 'Christopher', gán nó cho tham số name, và tạo thông điệp cá nhân hóa "Hello, Christopher!" ## Giá trị mặc định Điều gì xảy ra nếu chúng ta muốn làm cho một số tham số tùy chọn? Đó là lúc giá trị mặc định trở nên hữu ích! Giả sử chúng ta muốn mọi người có thể tùy chỉnh từ chào, nhưng nếu họ không chỉ định, chúng ta sẽ chỉ sử dụng "Hello" làm giá trị dự phòng. Bạn có thể thiết lập giá trị mặc định bằng cách sử dụng dấu bằng, giống như thiết lập một biến: Ở đây, name vẫn là bắt buộc, nhưng salutation có giá trị dự phòng là 'Hello' nếu không ai cung cấp một lời chào khác. Bây giờ chúng ta có thể gọi hàm này theo hai cách khác nhau: Trong lần gọi đầu tiên, JavaScript sử dụng giá trị mặc định "Hello" vì chúng ta không chỉ định lời chào. Trong lần gọi thứ hai, nó sử dụng "Hi" tùy chỉnh của chúng ta. Sự linh hoạt này làm cho các hàm thích ứng với các tình huống khác nhau. ### 🎛️ Kiểm tra sự thành thạo về tham số: Làm cho hàm linh hoạt Kiểm tra sự hiểu biết của bạn về tham số: - Sự khác biệt giữa tham số và đối số là gì? - Tại sao giá trị mặc định lại hữu ích trong lập trình thực tế? - Bạn có thể dự đoán điều gì xảy ra nếu bạn truyền nhiều đối số hơn số tham số không? ## Giá trị trả về Các hàm của chúng ta cho đến nay chỉ hiển thị thông điệp ra console, nhưng điều gì xảy ra nếu bạn muốn một hàm tính toán điều gì đó và trả lại kết quả cho bạn? Đó là lúc giá trị trả về xuất hiện. Thay vì chỉ hiển thị điều gì đó, một hàm có thể trả lại một giá trị mà bạn có thể lưu trữ trong một biến hoặc sử dụng ở các phần khác của mã. Để gửi một giá trị trở lại, bạn sử dụng từ khóa return theo sau là bất cứ điều gì bạn muốn trả về: Điều quan trọng: khi một hàm gặp câu lệnh return, nó ngay lập tức dừng chạy và gửi giá trị đó trở lại cho người gọi. Hãy sửa đổi hàm chào của chúng ta để trả về thông điệp thay vì hiển thị nó: Bây giờ thay vì hiển thị lời chào, hàm này tạo thông điệp và trả lại cho chúng ta. Để sử dụng giá trị trả về, chúng ta có thể lưu trữ nó trong một biến giống như bất kỳ giá trị nào khác: Bây giờ greetingMessage chứa "Hello, Christopher" và chúng ta có thể sử dụng nó ở bất cứ đâu trong mã của mình – để hiển thị trên trang web, đưa vào email, hoặc truyền cho một hàm khác. ### 🔄 Kiểm tra giá trị trả về: Nhận kết quả trở lại Đánh giá sự hiểu biết của bạn về giá trị trả về: - Điều gì xảy ra với mã sau câu lệnh return trong một hàm? - Tại sao việc trả về giá trị thường tốt hơn chỉ hiển thị ra console? - Một hàm có thể trả về các loại giá trị khác nhau (chuỗi, số, boolean) không? ## Hàm như tham số cho hàm khác Hàm có thể được truyền làm tham số cho các hàm khác. Mặc dù khái niệm này ban đầu có vẻ phức tạp, nhưng nó là một tính năng mạnh mẽ cho phép các mẫu lập trình linh hoạt. Mẫu này rất phổ biến khi bạn muốn nói "khi điều gì đó xảy ra, thực hiện điều này." Ví dụ, "khi bộ đếm thời gian kết thúc, chạy đoạn mã này" hoặc "khi người dùng nhấp vào nút, gọi hàm này." Hãy xem setTimeout, một hàm tích hợp chờ một khoảng thời gian nhất định và sau đó chạy một đoạn mã. Chúng ta cần nói cho nó biết đoạn mã nào sẽ chạy – trường hợp sử dụng hoàn hảo để truyền một hàm! Hãy thử đoạn mã này – sau 3 giây, bạn sẽ thấy một thông điệp: Lưu ý cách chúng ta truyền displayDone (không có dấu ngoặc đơn) cho setTimeout. Chúng ta không tự gọi hàm – chúng ta đưa nó cho setTimeout và nói "gọi hàm này sau 3 giây." ### Hàm ẩn danh Đôi khi bạn cần một hàm chỉ cho một việc và không muốn đặt tên cho nó. Hãy nghĩ về điều này – nếu bạn chỉ sử dụng một hàm một lần, tại sao lại làm rối mã của bạn với một cái tên thừa? JavaScript cho phép bạn tạo hàm ẩn danh – các hàm không có tên mà bạn có thể định nghĩa ngay tại nơi bạn cần. Dưới đây là cách chúng ta có thể viết lại ví dụ bộ đếm thời gian của mình bằng một hàm ẩn danh: Điều này đạt được cùng một kết quả, nhưng hàm được định nghĩa trực tiếp trong lệnh gọi setTimeout, loại bỏ nhu cầu khai báo hàm riêng biệt. ### Hàm mũi tên JavaScript hiện đại có một cách viết hàm ngắn gọn hơn gọi là hàm mũi tên. Chúng sử dụng => (trông giống như một mũi tên – hiểu chứ?) và rất phổ biến với các nhà phát triển. Hàm mũi tên cho phép bạn bỏ qua từ khóa function và viết mã ngắn gọn hơn. Dưới đây là ví dụ bộ đếm thời gian của chúng ta sử dụng hàm mũi tên: Dấu ngoặc đơn () là nơi các tham số sẽ đi vào (trống trong trường hợp này), sau đó là mũi tên =>, và cuối cùng là phần thân hàm trong dấu ngoặc nhọn. Điều này cung cấp cùng một chức năng với cú pháp ngắn gọn hơn. ### Khi nào sử dụng từng chiến lược Khi nào bạn nên sử dụng từng cách tiếp cận? Một hướng dẫn thực tế: nếu bạn sẽ sử dụng hàm nhiều lần, hãy đặt tên cho nó và định nghĩa riêng. Nếu nó chỉ dành cho một mục đích cụ thể, hãy cân nhắc sử dụng hàm ẩn danh. Cả hàm mũi tên và cú pháp truyền thống đều là lựa chọn hợp lệ, mặc dù hàm mũi tên phổ biến trong các mã JavaScript hiện đại. ### 🎨 Kiểm tra sự thành thạo về phong cách hàm: Chọn cú pháp phù hợp Kiểm tra sự hiểu biết về cú pháp của bạn: - Khi nào bạn có thể thích hàm mũi tên hơn cú pháp hàm truyền thống? - Lợi ích chính của hàm ẩn danh là gì? - Bạn có thể nghĩ đến một tình huống mà hàm có tên tốt hơn hàm ẩn danh không? --- ## 🚀 Thử thách Bạn có thể diễn đạt trong một câu sự khác biệt giữa hàm và phương thức không? Hãy thử nhé! ## Thử thách GitHub Copilot Agent 🚀 Sử dụng chế độ Agent để hoàn thành thử thách sau: Mô tả: Tạo một thư viện tiện ích các hàm toán học minh họa các khái niệm hàm khác nhau được đề cập trong bài học này, bao gồm tham số, giá trị mặc định, giá trị trả về, và hàm mũi tên. Yêu cầu: Tạo một tệp JavaScript có tên mathUtils.js chứa các hàm sau: 1. Một hàm add nhận hai tham số và trả về tổng của chúng 2. Một hàm multiply với giá trị tham số mặc định (tham số thứ hai mặc định là 1) 3. Một hàm mũi tên square nhận một số và trả về bình phương của nó 4. Một hàm calculate chấp nhận một hàm khác làm tham số và hai số, sau đó áp dụng hàm đó cho các số 5. Minh họa việc gọi từng hàm với các trường hợp kiểm tra phù hợp Tìm hiểu thêm về chế độ agent tại đây. ## Quiz sau bài học Quiz sau bài học ## Ôn tập & Tự học Đáng để tìm hiểu thêm về hàm mũi tên, vì chúng ngày càng được sử dụng trong các mã nguồn. Hãy thực hành viết một hàm, và sau đó viết lại nó bằng cú pháp này. ## Bài tập Thú vị với Hàm --- ## 🧰 Tóm tắt công cụ hàm JavaScript của bạn --- ## 🚀 Lộ trình thành thạo hàm JavaScript của bạn ### ⚡ Những gì bạn có thể làm trong 5 phút tới - [ ] Viết một hàm đơn giản trả về số yêu thích của bạn - [ ] Tạo một hàm với hai tham số cộng chúng lại với nhau - [ ] Thử chuyển đổi một hàm truyền thống sang cú pháp hàm mũi tên - [ ] Luyện tập thử thách: giải thích sự khác biệt giữa hàm và phương thức ### 🎯 Những gì bạn có thể hoàn thành trong giờ này - [ ] Hoàn thành bài kiểm tra sau bài học và xem lại các khái niệm gây khó hiểu - [ ] Xây dựng thư viện tiện ích toán học từ thử thách GitHub Copilot - [ ] Tạo một hàm sử dụng một hàm khác làm tham số - [ ] Luyện tập viết hàm với các tham số mặc định - [ ] Thử nghiệm với template literals trong giá trị trả về của hàm ### 📅 Làm chủ hàm trong suốt tuần - [ ] Hoàn thành bài tập "Vui cùng hàm" một cách sáng tạo - [ ] Tái cấu trúc một số đoạn mã lặp lại bạn đã viết thành các hàm có thể tái sử dụng - [ ] Xây dựng một máy tính nhỏ chỉ sử dụng hàm (không sử dụng biến toàn cục) - [ ] Luyện tập hàm mũi tên với các phương thức mảng như map() và filter() - [ ] Tạo một bộ sưu tập các hàm tiện ích cho các tác vụ thông thường - [ ] Nghiên cứu các hàm bậc cao và các khái niệm lập trình hàm ### 🌟 Biến đổi trong tháng của bạn - [ ] Làm chủ các khái niệm hàm nâng cao như closures và phạm vi - [ ] Xây dựng một dự án sử dụng nhiều hàm kết hợp - [ ] Đóng góp cho mã nguồn mở bằng cách cải thiện tài liệu về hàm - [ ] Dạy người khác về hàm và các kiểu cú pháp khác nhau - [ ] Khám phá các mô hình lập trình hàm trong JavaScript - [ ] Tạo một thư viện cá nhân gồm các hàm có thể tái sử dụng cho các dự án tương lai ### 🏆 Kiểm tra cuối cùng: Nhà vô địch về hàm Ăn mừng sự làm chủ về hàm của bạn: - Hàm hữu ích nhất mà bạn đã tạo cho đến nay là gì? - Việc học về hàm đã thay đổi cách bạn suy nghĩ về tổ chức mã như thế nào? - Bạn thích cú pháp hàm nào hơn và tại sao? - Vấn đề thực tế nào bạn sẽ giải quyết bằng cách viết một hàm? --- Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.

javascript

Cơ bản về JavaScript: Ra quyết định

Bạn đã bao giờ tự hỏi làm thế nào các ứng dụng đưa ra quyết định thông minh chưa? Như cách hệ thống định vị chọn tuyến đường nhanh nhất, hoặc cách bộ điều nhiệt quyết định khi nào bật nhiệt? Đây là khái niệm cơ bản về việc ra quyết định trong lập trình. Cũng giống như Máy phân tích của Charles Babbage được thiết kế để thực hiện các chuỗi hoạt động khác nhau dựa trên điều kiện, các chương trình JavaScript hiện đại cần đưa ra lựa chọn dựa trên các hoàn cảnh khác nhau. Khả năng phân nhánh và đưa ra quyết định này là điều biến đổi mã tĩnh thành các ứng dụng phản hồi và thông minh. Trong bài học này, bạn sẽ học cách triển khai logic điều kiện trong chương trình của mình. Chúng ta sẽ khám phá các câu lệnh điều kiện, toán tử so sánh và biểu thức logic cho phép mã của bạn đánh giá tình huống và phản hồi phù hợp. ## Quiz trước bài học Quiz trước bài học Khả năng đưa ra quyết định và kiểm soát luồng chương trình là một khía cạnh cơ bản của lập trình. Phần này bao gồm cách kiểm soát đường dẫn thực thi của các chương trình JavaScript của bạn bằng các giá trị Boolean và logic điều kiện. [](https://youtube.com/watch?v=SxTp8j-fMMY "Ra quyết định") ## Tóm tắt ngắn gọn về Booleans Trước khi khám phá việc ra quyết định, hãy cùng ôn lại các giá trị Boolean từ bài học trước. Được đặt tên theo nhà toán học George Boole, các giá trị này đại diện cho trạng thái nhị phân – hoặc true hoặc false. Không có sự mơ hồ, không có trạng thái trung gian. Những giá trị nhị phân này là nền tảng của tất cả logic tính toán. Mọi quyết định mà chương trình của bạn đưa ra cuối cùng đều giảm xuống thành một đánh giá Boolean. Việc tạo các biến Boolean rất đơn giản: Điều này tạo ra hai biến với các giá trị Boolean rõ ràng. ✅ Booleans được đặt tên theo nhà toán học, triết gia và nhà logic học người Anh George Boole (1815–1864). ## Toán tử so sánh và Booleans Trong thực tế, bạn hiếm khi đặt giá trị Boolean một cách thủ công. Thay vào đó, bạn sẽ tạo ra chúng bằng cách đánh giá các điều kiện: "Số này có lớn hơn số kia không?" hoặc "Các giá trị này có bằng nhau không?" Các toán tử so sánh cho phép thực hiện các đánh giá này. Chúng so sánh các giá trị và trả về kết quả Boolean dựa trên mối quan hệ giữa các toán hạng. ✅ Kiểm tra kiến thức của bạn bằng cách viết một số so sánh trong bảng điều khiển của trình duyệt. Có dữ liệu nào trả về khiến bạn ngạc nhiên không? ### 🧠 Kiểm tra sự thành thạo về so sánh: Hiểu logic Boolean Kiểm tra sự hiểu biết của bạn về so sánh: - Tại sao bạn nghĩ rằng === (bằng nhau nghiêm ngặt) thường được ưu tiên hơn == (bằng nhau không nghiêm ngặt)? - Bạn có thể dự đoán 5 === '5' trả về gì không? Còn 5 == '5' thì sao? - Sự khác biệt giữa !== và != là gì? ## Câu lệnh If Câu lệnh if giống như việc đặt câu hỏi trong mã của bạn. "Nếu điều kiện này đúng, thì làm điều này." Đây có lẽ là công cụ quan trọng nhất bạn sẽ sử dụng để đưa ra quyết định trong JavaScript. Cách hoạt động như sau: Điều kiện được đặt trong dấu ngoặc đơn, và nếu nó là true, JavaScript sẽ chạy mã bên trong dấu ngoặc nhọn. Nếu nó là false, JavaScript sẽ bỏ qua toàn bộ khối đó. Bạn thường sử dụng các toán tử so sánh để tạo ra các điều kiện này. Hãy xem một ví dụ thực tế: Vì 1000 >= 800 đánh giá là true, mã bên trong khối sẽ được thực thi, hiển thị "Getting a new laptop!" trong bảng điều khiển. ## Câu lệnh If..Else Nhưng nếu bạn muốn chương trình của mình làm điều gì đó khác khi điều kiện là false thì sao? Đó là lúc else xuất hiện – nó giống như có một kế hoạch dự phòng. Câu lệnh else cho bạn cách nói "nếu điều kiện này không đúng, hãy làm điều khác thay thế." Bây giờ vì 500 >= 800 là false, JavaScript sẽ bỏ qua khối đầu tiên và chạy khối else thay thế. Bạn sẽ thấy "Can't afford a new laptop, yet!" trong bảng điều khiển. ✅ Kiểm tra sự hiểu biết của bạn về mã này và mã sau bằng cách chạy nó trong bảng điều khiển trình duyệt. Thay đổi giá trị của các biến currentMoney và laptopPrice để thay đổi kết quả console.log(). ### 🎯 Kiểm tra logic If-Else: Các đường dẫn phân nhánh Đánh giá sự hiểu biết của bạn về logic điều kiện: - Điều gì xảy ra nếu currentMoney bằng chính xác laptopPrice? - Bạn có thể nghĩ đến một tình huống thực tế nào mà logic if-else sẽ hữu ích không? - Làm thế nào bạn có thể mở rộng điều này để xử lý nhiều mức giá khác nhau? ## Câu lệnh Switch Đôi khi bạn cần so sánh một giá trị với nhiều tùy chọn. Mặc dù bạn có thể nối nhiều câu lệnh if..else, cách tiếp cận này trở nên khó quản lý. Câu lệnh switch cung cấp một cấu trúc gọn gàng hơn để xử lý nhiều giá trị riêng biệt. Khái niệm này giống như các hệ thống chuyển mạch cơ học được sử dụng trong các tổng đài điện thoại đầu tiên – một giá trị đầu vào xác định đường dẫn thực thi cụ thể nào sẽ được theo. Cách nó được cấu trúc: - JavaScript đánh giá biểu thức một lần - Nó tìm qua từng case để tìm một kết quả khớp - Khi tìm thấy kết quả khớp, nó chạy khối mã đó - break yêu cầu JavaScript dừng và thoát khỏi switch - Nếu không có case nào khớp, nó chạy khối default (nếu bạn có) Trong ví dụ này, JavaScript thấy rằng dayNumber là 2, tìm case 2 khớp, đặt dayName thành "Tuesday", và sau đó thoát khỏi switch. Kết quả? "Today is Tuesday" được ghi vào bảng điều khiển. ✅ Kiểm tra sự hiểu biết của bạn về mã này và mã sau bằng cách chạy nó trong bảng điều khiển trình duyệt. Thay đổi giá trị của biến a để thay đổi kết quả console.log(). ### 🔄 Kiểm tra sự thành thạo Switch: Nhiều tùy chọn Kiểm tra sự hiểu biết của bạn về switch: - Điều gì xảy ra nếu bạn quên một câu lệnh break? - Khi nào bạn sẽ sử dụng switch thay vì nhiều câu lệnh if-else? - Tại sao case default lại hữu ích ngay cả khi bạn nghĩ rằng bạn đã bao phủ tất cả các khả năng? ## Toán tử logic và Booleans Các quyết định phức tạp thường yêu cầu đánh giá nhiều điều kiện cùng lúc. Cũng như đại số Boolean cho phép các nhà toán học kết hợp các biểu thức logic, lập trình cung cấp các toán tử logic để kết nối nhiều điều kiện Boolean. Các toán tử này cho phép logic điều kiện phức tạp bằng cách kết hợp các đánh giá true/false đơn giản. Các toán tử này cho phép bạn kết hợp các điều kiện theo cách hữu ích: - AND (&&) nghĩa là cả hai điều kiện phải đúng - OR (||) nghĩa là ít nhất một điều kiện phải đúng - NOT (!) đảo ngược true thành false (và ngược lại) ## Điều kiện và quyết định với toán tử logic Hãy xem các toán tử logic này hoạt động trong một ví dụ thực tế hơn: Trong ví dụ này: chúng ta tính giá giảm 20% (640), sau đó đánh giá liệu số tiền có sẵn của chúng ta có đủ để chi trả giá đầy đủ HOẶC giá giảm hay không. Vì 600 đáp ứng ngưỡng giá giảm là 640, điều kiện đánh giá là true. ### 🧮 Kiểm tra toán tử logic: Kết hợp điều kiện Kiểm tra sự hiểu biết của bạn về toán tử logic: - Trong biểu thức A && B, điều gì xảy ra nếu A là false? B có được đánh giá không? - Bạn có thể nghĩ đến một tình huống mà bạn cần cả ba toán tử (&&, ||, !) cùng nhau không? - Sự khác biệt giữa !user.isActive và user.isActive !== true là gì? ### Toán tử phủ định Đôi khi dễ dàng hơn để nghĩ về khi điều gì đó KHÔNG đúng. Như thay vì hỏi "Người dùng đã đăng nhập chưa?", bạn có thể muốn hỏi "Người dùng CHƯA đăng nhập?" Dấu chấm than (!) đảo ngược logic cho bạn. Toán tử ! giống như nói "ngược lại với..." – nếu điều gì đó là true, ! làm nó thành false, và ngược lại. ### Biểu thức Ternary Đối với các phép gán điều kiện đơn giản, JavaScript cung cấp toán tử ternary. Cú pháp ngắn gọn này cho phép bạn viết một biểu thức điều kiện trong một dòng, hữu ích khi bạn cần gán một trong hai giá trị dựa trên một điều kiện. Nó đọc như một câu hỏi: "Điều kiện này có đúng không? Nếu đúng, sử dụng giá trị này. Nếu không, sử dụng giá trị kia." Dưới đây là một ví dụ cụ thể hơn: ✅ Dành một phút để đọc mã này vài lần. Bạn có hiểu cách các toán tử này hoạt động không? Đây là điều mà dòng này đang nói: "Số firstNumber có lớn hơn secondNumber không? Nếu đúng, đặt firstNumber vào biggestNumber. Nếu không, đặt secondNumber vào biggestNumber." Toán tử ternary chỉ là cách viết ngắn gọn hơn của câu lệnh if..else truyền thống: Cả hai cách đều cho ra kết quả giống nhau. Toán tử ternary mang lại sự ngắn gọn, trong khi cấu trúc if-else truyền thống có thể dễ đọc hơn đối với các điều kiện phức tạp. --- ## 🚀 Thử thách Tạo một chương trình được viết trước tiên với các toán tử logic, sau đó viết lại nó bằng biểu thức ternary. Bạn thích cú pháp nào hơn? --- ## Thử thách GitHub Copilot Agent 🚀 Sử dụng chế độ Agent để hoàn thành thử thách sau: Mô tả: Tạo một máy tính điểm toàn diện thể hiện nhiều khái niệm ra quyết định từ bài học này, bao gồm các câu lệnh if-else, switch, toán tử logic và biểu thức ternary. Yêu cầu: Viết một chương trình JavaScript nhận điểm số của học sinh (0-100) và xác định điểm chữ của họ dựa trên các tiêu chí sau: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: Dưới 60 Yêu cầu: 1. Sử dụng câu lệnh if-else để xác định điểm chữ 2. Sử dụng các toán tử logic để kiểm tra xem học sinh có đạt (điểm >= 60) VÀ có danh hiệu xuất sắc (điểm >= 90) 3. Sử dụng câu lệnh switch để cung cấp phản hồi cụ thể cho từng loại điểm chữ 4. Sử dụng toán tử ternary để xác định xem học sinh có đủ điều kiện tham gia khóa học tiếp theo (điểm >= 70) 5. Bao gồm kiểm tra đầu vào để đảm bảo điểm nằm trong khoảng từ 0 đến 100 Kiểm tra chương trình của bạn với nhiều điểm số khác nhau, bao gồm các trường hợp biên như 59, 60, 89, 90 và các đầu vào không hợp lệ. Tìm hiểu thêm về chế độ agent tại đây. ## Câu hỏi sau bài giảng Câu hỏi sau bài giảng ## Ôn tập & Tự học Đọc thêm về các toán tử có sẵn cho người dùng trên MDN. Xem qua công cụ tra cứu toán tử tuyệt vời của Josh Comeau operator lookup! ## Bài tập Toán tử --- ## 🧠 Tóm tắt Bộ Công Cụ Ra Quyết Định của Bạn --- ## 🚀 Lộ trình làm chủ ra quyết định trong JavaScript của bạn ### ⚡ Những gì bạn có thể làm trong 5 phút tới - [ ] Thực hành các toán tử so sánh trong console trình duyệt của bạn - [ ] Viết một câu lệnh if-else đơn giản để kiểm tra tuổi của bạn - [ ] Thử thách: viết lại một câu lệnh if-else bằng toán tử ternary - [ ] Kiểm tra điều gì xảy ra với các giá trị "truthy" và "falsy" khác nhau ### 🎯 Những gì bạn có thể hoàn thành trong giờ này - [ ] Hoàn thành bài kiểm tra sau bài học và xem lại các khái niệm gây nhầm lẫn - [ ] Xây dựng máy tính điểm toàn diện từ thử thách GitHub Copilot - [ ] Tạo một cây quyết định đơn giản cho một tình huống thực tế (như chọn trang phục) - [ ] Thực hành kết hợp nhiều điều kiện với các toán tử logic - [ ] Thử nghiệm với các câu lệnh switch cho các trường hợp sử dụng khác nhau ### 📅 Làm chủ logic trong một tuần - [ ] Hoàn thành bài tập về toán tử với các ví dụ sáng tạo - [ ] Xây dựng một ứng dụng quiz nhỏ sử dụng các cấu trúc điều kiện khác nhau - [ ] Tạo một trình kiểm tra biểu mẫu để kiểm tra nhiều điều kiện đầu vào - [ ] Thực hành các bài tập tra cứu toán tử của Josh Comeau operator lookup - [ ] Tái cấu trúc mã hiện có để sử dụng các cấu trúc điều kiện phù hợp hơn - [ ] Nghiên cứu đánh giá ngắn mạch và các tác động đến hiệu suất ### 🌟 Biến đổi trong một tháng - [ ] Làm chủ các điều kiện lồng phức tạp và duy trì khả năng đọc mã - [ ] Xây dựng một ứng dụng với logic ra quyết định tinh vi - [ ] Đóng góp cho mã nguồn mở bằng cách cải thiện logic điều kiện trong các dự án hiện có - [ ] Dạy người khác về các cấu trúc điều kiện khác nhau và khi nào nên sử dụng từng loại - [ ] Khám phá các phương pháp lập trình hàm cho logic điều kiện - [ ] Tạo một hướng dẫn tham khảo cá nhân về các thực hành tốt nhất cho điều kiện ### 🏆 Kiểm tra cuối cùng về làm chủ ra quyết định Ăn mừng sự làm chủ tư duy logic của bạn: - Logic quyết định phức tạp nhất mà bạn đã triển khai thành công là gì? - Cấu trúc điều kiện nào cảm thấy tự nhiên nhất với bạn và tại sao? - Việc học về các toán tử logic đã thay đổi cách tiếp cận giải quyết vấn đề của bạn như thế nào? - Ứng dụng thực tế nào sẽ được hưởng lợi từ logic ra quyết định tinh vi? --- Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.

javascript

Cơ bản về JavaScript: Mảng và Vòng lặp

## Quiz trước bài học Quiz trước bài học Bạn đã bao giờ tự hỏi làm thế nào các trang web theo dõi các mặt hàng trong giỏ hàng hoặc hiển thị danh sách bạn bè của bạn chưa? Đó chính là lúc mảng và vòng lặp xuất hiện. Mảng giống như những chiếc hộp kỹ thuật số chứa nhiều thông tin, trong khi vòng lặp giúp bạn xử lý tất cả dữ liệu đó một cách hiệu quả mà không cần viết mã lặp đi lặp lại. Hai khái niệm này cùng nhau tạo nền tảng cho việc xử lý thông tin trong chương trình của bạn. Bạn sẽ học cách chuyển từ việc viết từng bước một cách thủ công sang tạo mã thông minh, hiệu quả có thể xử lý hàng trăm hoặc thậm chí hàng nghìn mục một cách nhanh chóng. Kết thúc bài học này, bạn sẽ hiểu cách thực hiện các nhiệm vụ dữ liệu phức tạp chỉ với vài dòng mã. Hãy cùng khám phá những khái niệm lập trình thiết yếu này. [](https://youtube.com/watch?v=1U4qTyq02Xw "Mảng") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Vòng lặp") ## Mảng Hãy nghĩ về mảng như một tủ hồ sơ kỹ thuật số - thay vì lưu trữ một tài liệu mỗi ngăn, bạn có thể tổ chức nhiều mục liên quan trong một hộp chứa có cấu trúc. Trong thuật ngữ lập trình, mảng cho phép bạn lưu trữ nhiều thông tin trong một gói được tổ chức. Dù bạn đang xây dựng một thư viện ảnh, quản lý danh sách việc cần làm, hay theo dõi điểm cao trong một trò chơi, mảng cung cấp nền tảng cho việc tổ chức dữ liệu. Hãy xem cách chúng hoạt động. ✅ Mảng có mặt khắp nơi! Bạn có thể nghĩ ra một ví dụ thực tế về mảng, chẳng hạn như một mảng pin mặt trời không? ### Tạo mảng Tạo một mảng rất đơn giản - chỉ cần sử dụng dấu ngoặc vuông! Điều gì đang xảy ra ở đây? Bạn vừa tạo một hộp chứa rỗng bằng cách sử dụng dấu ngoặc vuông []. Hãy nghĩ về nó như một kệ sách trống - nó sẵn sàng chứa bất kỳ cuốn sách nào bạn muốn tổ chức ở đó. Bạn cũng có thể điền giá trị ban đầu vào mảng ngay từ đầu: Những điều thú vị cần chú ý: - Bạn có thể lưu trữ văn bản, số, hoặc thậm chí giá trị đúng/sai trong cùng một mảng - Chỉ cần tách từng mục bằng dấu phẩy - thật dễ dàng! - Mảng rất lý tưởng để giữ thông tin liên quan cùng nhau ### Chỉ số mảng Đây là điều có thể ban đầu sẽ hơi lạ: mảng đánh số các mục của chúng bắt đầu từ 0, không phải 1. Cách đánh số từ 0 này bắt nguồn từ cách bộ nhớ máy tính hoạt động - nó đã trở thành một quy ước lập trình từ những ngày đầu của các ngôn ngữ như C. Mỗi vị trí trong mảng có một số địa chỉ riêng gọi là chỉ số. ✅ Có làm bạn ngạc nhiên khi mảng bắt đầu từ chỉ số 0 không? Trong một số ngôn ngữ lập trình, chỉ số bắt đầu từ 1. Có một lịch sử thú vị về điều này, bạn có thể đọc trên Wikipedia. Truy cập các phần tử mảng: Phân tích điều gì xảy ra ở đây: - Sử dụng ký hiệu ngoặc vuông với số chỉ số để truy cập các phần tử - Trả về giá trị được lưu trữ tại vị trí cụ thể trong mảng - Bắt đầu đếm từ 0, làm cho phần tử đầu tiên có chỉ số 0 Thay đổi các phần tử mảng: Trong ví dụ trên, chúng ta đã: - Thay đổi phần tử tại chỉ số 4 từ "Rocky Road" thành "Butter Pecan" - Thêm một phần tử mới "Cookie Dough" tại chỉ số 5 - Tự động mở rộng độ dài mảng khi thêm vượt quá giới hạn hiện tại ### Độ dài mảng và các phương thức phổ biến Mảng đi kèm với các thuộc tính và phương thức tích hợp giúp làm việc với dữ liệu dễ dàng hơn. Tìm độ dài mảng: Những điểm chính cần nhớ: - Trả về tổng số phần tử trong mảng - Cập nhật tự động khi các phần tử được thêm hoặc xóa - Cung cấp số đếm động hữu ích cho vòng lặp và xác thực Các phương thức mảng thiết yếu: Hiểu các phương thức này: - Thêm phần tử với push() (cuối) và unshift() (đầu) - Xóa phần tử với pop() (cuối) và shift() (đầu) - Tìm phần tử với indexOf() và kiểm tra sự tồn tại với includes() - Trả về các giá trị hữu ích như phần tử đã xóa hoặc vị trí chỉ số ✅ Thử tự mình! Sử dụng bảng điều khiển trình duyệt để tạo và thao tác một mảng do bạn tự tạo. ### 🧠 Kiểm tra kiến thức cơ bản về mảng: Tổ chức dữ liệu của bạn Kiểm tra hiểu biết về mảng: - Tại sao bạn nghĩ mảng bắt đầu đếm từ 0 thay vì 1? - Điều gì xảy ra nếu bạn cố gắng truy cập một chỉ số không tồn tại (như arr[100] trong một mảng có 5 phần tử)? - Bạn có thể nghĩ ra ba tình huống thực tế mà mảng sẽ hữu ích không? ## Vòng lặp Hãy nghĩ về hình phạt nổi tiếng trong các tiểu thuyết của Charles Dickens, nơi học sinh phải viết đi viết lại một câu trên bảng. Hãy tưởng tượng nếu bạn có thể chỉ cần yêu cầu ai đó "viết câu này 100 lần" và nó được thực hiện tự động. Đó chính xác là những gì vòng lặp làm cho mã của bạn. Vòng lặp giống như có một trợ lý không biết mệt mỏi, có thể lặp lại các nhiệm vụ mà không mắc lỗi. Dù bạn cần kiểm tra từng mục trong giỏ hàng hay hiển thị tất cả ảnh trong một album, vòng lặp xử lý sự lặp lại một cách hiệu quả. JavaScript cung cấp nhiều loại vòng lặp để bạn lựa chọn. Hãy cùng xem xét từng loại và hiểu khi nào nên sử dụng chúng. ### Vòng lặp For Vòng lặp for giống như đặt một bộ hẹn giờ - bạn biết chính xác số lần bạn muốn điều gì đó xảy ra. Nó rất có tổ chức và dễ dự đoán, điều này làm cho nó trở nên hoàn hảo khi bạn làm việc với mảng hoặc cần đếm số lượng. Cấu trúc vòng lặp For: Từng bước, đây là điều gì đang xảy ra: - Khởi tạo biến đếm i thành 0 lúc bắt đầu - Kiểm tra điều kiện i < 10 trước mỗi lần lặp - Thực thi khối mã khi điều kiện đúng - Tăng i thêm 1 sau mỗi lần lặp với i++ - Dừng khi điều kiện trở thành sai (khi i đạt đến 10) ✅ Chạy đoạn mã này trong bảng điều khiển trình duyệt. Điều gì xảy ra khi bạn thực hiện các thay đổi nhỏ đối với biến đếm, điều kiện, hoặc biểu thức lặp? Bạn có thể làm cho nó chạy ngược lại, tạo một đếm ngược không? ### 🗓️ Kiểm tra sự thành thạo vòng lặp For: Lặp lại có kiểm soát Đánh giá hiểu biết về vòng lặp For: - Ba phần của vòng lặp For là gì, và mỗi phần làm gì? - Làm thế nào để bạn lặp qua một mảng ngược lại? - Điều gì xảy ra nếu bạn quên phần tăng (i++)? ### Vòng lặp While Vòng lặp while giống như nói "tiếp tục làm điều này cho đến khi..." - bạn có thể không biết chính xác số lần nó sẽ chạy, nhưng bạn biết khi nào nên dừng. Nó rất phù hợp cho những việc như yêu cầu người dùng nhập liệu cho đến khi họ cung cấp đúng thông tin, hoặc tìm kiếm dữ liệu cho đến khi bạn tìm thấy điều bạn cần. Đặc điểm của vòng lặp While: - Tiếp tục thực thi miễn là điều kiện đúng - Yêu cầu quản lý thủ công các biến đếm - Kiểm tra điều kiện trước mỗi lần lặp - Có nguy cơ vòng lặp vô hạn nếu điều kiện không bao giờ trở thành sai Hiểu các ví dụ này: - Quản lý biến đếm i thủ công bên trong thân vòng lặp - Tăng biến đếm để tránh vòng lặp vô hạn - Thể hiện trường hợp sử dụng thực tế với đầu vào người dùng và giới hạn số lần thử - Bao gồm cơ chế an toàn để tránh thực thi vô tận ### ♾️ Kiểm tra sự khôn ngoan về vòng lặp While: Lặp lại dựa trên điều kiện Kiểm tra hiểu biết về vòng lặp While: - Nguy cơ chính khi sử dụng vòng lặp While là gì? - Khi nào bạn sẽ chọn vòng lặp While thay vì vòng lặp For? - Làm thế nào để bạn tránh vòng lặp vô hạn? ### Các lựa chọn thay thế vòng lặp hiện đại JavaScript cung cấp cú pháp vòng lặp hiện đại có thể làm cho mã của bạn dễ đọc hơn và ít lỗi hơn. Vòng lặp For...of (ES6+): Ưu điểm chính của For...of: - Loại bỏ việc quản lý chỉ số và các lỗi tiềm ẩn - Cung cấp quyền truy cập trực tiếp vào các phần tử mảng - Cải thiện khả năng đọc mã và giảm độ phức tạp cú pháp Phương thức forEach: Những điều bạn cần biết về forEach: - Thực thi một hàm cho mỗi phần tử mảng - Cung cấp cả giá trị phần tử và chỉ số làm tham số - Không thể dừng sớm (khác với vòng lặp truyền thống) - Trả về undefined (không tạo mảng mới) ✅ Tại sao bạn chọn vòng lặp For thay vì vòng lặp While? 17K người xem đã có cùng câu hỏi trên StackOverflow, và một số ý kiến có thể thú vị với bạn. ### 🎨 Kiểm tra cú pháp vòng lặp hiện đại: Áp dụng ES6+ Đánh giá hiểu biết về JavaScript hiện đại: - Những ưu điểm của for...of so với vòng lặp For truyền thống là gì? - Khi nào bạn vẫn thích vòng lặp For truyền thống? - Sự khác biệt giữa forEach và map là gì? ## Vòng lặp và Mảng Kết hợp mảng với vòng lặp tạo ra khả năng xử lý dữ liệu mạnh mẽ. Sự kết hợp này là nền tảng cho nhiều nhiệm vụ lập trình, từ hiển thị danh sách đến tính toán thống kê. Xử lý mảng truyền thống: Hãy hiểu từng cách tiếp cận: - Sử dụng thuộc tính độ dài mảng để xác định giới hạn vòng lặp - Truy cập các phần tử theo chỉ số trong vòng lặp For truyền thống - Cung cấp quyền truy cập trực tiếp vào phần tử trong vòng lặp For...of - Xử lý từng phần tử mảng chính xác một lần Ví dụ xử lý dữ liệu thực tế: Đây là cách mã này hoạt động: - Khởi tạo các biến theo dõi cho tổng và giá trị cực đại - Xử lý từng điểm số với một vòng lặp hiệu quả duy nhất - Tích lũy tổng để tính trung bình - Theo dõi giá trị cao nhất và thấp nhất trong quá trình lặp - Tính toán thống kê cuối cùng sau khi hoàn thành vòng lặp ✅ Thử nghiệm lặp qua một mảng do bạn tự tạo trong bảng điều khiển trình duyệt. --- ## Thử thách GitHub Copilot Agent 🚀 Sử dụng chế độ Agent để hoàn thành thử thách sau: Mô tả: Xây dựng một hàm xử lý dữ liệu toàn diện kết hợp mảng và vòng lặp để phân tích một tập dữ liệu và tạo ra những thông tin chi tiết có ý nghĩa. Yêu cầu: Tạo một hàm có tên analyzeGrades nhận một mảng các đối tượng điểm số học sinh (mỗi đối tượng chứa thuộc tính tên và điểm số) và trả về một đối tượng với các thống kê bao gồm điểm cao nhất, điểm thấp nhất, điểm trung bình, số lượng học sinh đạt (điểm >= 70), và một mảng tên học sinh có điểm trên trung bình. Sử dụng ít nhất hai loại vòng lặp khác nhau trong giải pháp của bạn. Tìm hiểu thêm về chế độ agent tại đây. ## 🚀 Thử thách JavaScript cung cấp một số phương thức mảng hiện đại có thể thay thế các vòng lặp truyền thống cho các nhiệm vụ cụ thể. Khám phá forEach, for-of, map, filter, và reduce. Thử thách của bạn: Viết lại ví dụ về điểm số học sinh bằng cách sử dụng ít nhất ba phương thức mảng khác nhau. Hãy chú ý xem mã trở nên sạch sẽ và dễ đọc hơn bao nhiêu với cú pháp JavaScript hiện đại. ## Câu hỏi sau bài học Câu hỏi sau bài học ## Ôn tập & Tự học Các mảng trong JavaScript có nhiều phương thức đi kèm, rất hữu ích cho việc xử lý dữ liệu. Tìm hiểu về các phương thức này và thử một số phương thức (như push, pop, slice và splice) trên một mảng do bạn tạo ra. ## Bài tập Loop an Array --- ## 📊 Tóm tắt công cụ Mảng & Vòng lặp của bạn --- ## 🚀 Lộ trình làm chủ Mảng & Vòng lặp của bạn ### ⚡ Những việc bạn có thể làm trong 5 phút tới - [ ] Tạo một mảng các bộ phim yêu thích của bạn và truy cập các phần tử cụ thể - [ ] Viết một vòng lặp for đếm từ 1 đến 10 - [ ] Thử thách phương thức mảng hiện đại từ bài học - [ ] Thực hành chỉ số mảng trong bảng điều khiển trình duyệt của bạn ### 🎯 Những gì bạn có thể hoàn thành trong giờ tới - [ ] Hoàn thành câu hỏi sau bài học và ôn lại các khái niệm khó - [ ] Xây dựng trình phân tích điểm toàn diện từ thử thách GitHub Copilot - [ ] Tạo một giỏ hàng đơn giản để thêm và xóa các mặt hàng - [ ] Thực hành chuyển đổi giữa các loại vòng lặp khác nhau - [ ] Thử nghiệm với các phương thức mảng như push, pop, slice, và splice ### 📅 Hành trình xử lý dữ liệu trong tuần của bạn - [ ] Hoàn thành bài tập "Loop an Array" với các cải tiến sáng tạo - [ ] Xây dựng ứng dụng danh sách việc cần làm bằng cách sử dụng mảng và vòng lặp - [ ] Tạo một máy tính thống kê đơn giản cho dữ liệu số - [ ] Thực hành với phương thức mảng MDN - [ ] Xây dựng giao diện thư viện ảnh hoặc danh sách phát nhạc - [ ] Khám phá lập trình hàm với map, filter, và reduce ### 🌟 Biến đổi trong tháng của bạn - [ ] Làm chủ các thao tác mảng nâng cao và tối ưu hóa hiệu suất - [ ] Xây dựng bảng điều khiển trực quan hóa dữ liệu hoàn chỉnh - [ ] Đóng góp cho các dự án mã nguồn mở liên quan đến xử lý dữ liệu - [ ] Dạy người khác về mảng và vòng lặp với các ví dụ thực tế - [ ] Tạo thư viện cá nhân gồm các hàm xử lý dữ liệu có thể tái sử dụng - [ ] Khám phá các thuật toán và cấu trúc dữ liệu dựa trên mảng ### 🏆 Kiểm tra cuối cùng về làm chủ xử lý dữ liệu Ăn mừng sự làm chủ mảng và vòng lặp của bạn: - Phép toán mảng nào hữu ích nhất mà bạn đã học được cho các ứng dụng thực tế? - Loại vòng lặp nào khiến bạn cảm thấy tự nhiên nhất và tại sao? - Hiểu về mảng và vòng lặp đã thay đổi cách bạn tổ chức dữ liệu như thế nào? - Nhiệm vụ xử lý dữ liệu phức tạp nào bạn muốn giải quyết tiếp theo? --- Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.

javascript

JavaScript简介

JavaScript是网页的语言。在这四节课中,你将学习它的基础知识。 ### 主题 1. 变量和数据类型 2. 函数和方法 3. 使用JavaScript进行决策 4. 数组和循环 ### 致谢 这些课程由Jasmine Greenaway、Christopher Harrison和Chris Noring倾情编写。 免责声明: 本文档使用AI翻译服务 Co-op Translator 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。

javascript

JavaScript 基础:数据类型

数据类型是 JavaScript 中你在每个程序中都会遇到的基本概念之一。把数据类型想象成古代亚历山大图书管理员使用的归档系统 —— 他们为包含诗歌、数学和历史记录的卷轴设定了特定的存放位置。JavaScript 以类似的方式组织信息,不同类别用于不同类型的数据。 在本课中,我们将探索让 JavaScript 工作的核心数据类型。你将学会如何处理数字、文本、真/假值,并理解为什么为程序选择正确的数据类型至关重要。这些概念起初可能看起来抽象,但通过练习,它们将变成你第二天性。 理解数据类型会让 JavaScript 中的其他内容变得更加清晰。就像建筑师需要了解不同的建筑材料才能建造大教堂一样,这些基础知识将支撑你未来构建的一切。 ## 课前测验 课前测验 本课涵盖了 JavaScript 的基础知识,这种语言为网页提供交互性。 [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") 让我们从变量以及填充变量的数据类型开始吧! ## 变量 变量是编程中的基础构件。就像中世纪炼金术士用于存放不同物质的标记罐子,变量让你存储信息并给它一个描述性的名称,以便以后引用。需要记住某人的年龄?将其存储在名为 age 的变量里。想追踪用户的名字?把它保存在 userName 变量中。 我们将专注于 JavaScript 中创建变量的现代方法。这里学习的技巧代表了语言多年来的发展和编程社区的最佳实践。 创建和 声明 变量的语法是 [关键字] [名称]。它由两部分组成: - 关键字。对可变的变量使用 let,对保持不变的值使用 const。 - 变量名,是你自己选择的描述性名称。 ✅ 关键字 let 是在 ES6 中引入的,赋予变量所谓的 _块作用域_。推荐使用 let 或 const 替代旧的 var 关键字。我们将在后续部分更深入地讲解块作用域。 ### 任务 - 使用变量 1. 声明变量。让我们先创建第一个变量: ```javascript let myVariable; ``` 这样做的效果: - 告诉 JavaScript 创建一个叫做 myVariable 的存储位置 - JavaScript 在内存中为该变量分配空间 - 变量当前没有值(undefined) 2. 赋值。现在给变量赋一个值: ```javascript myVariable = 123; ``` 赋值的工作原理: - = 操作符将值 123 赋给了变量 - 变量现在包含该值,不再是 undefined - 你可以在代码中使用 myVariable 引用这个值 > 注意:本课中 = 表示“赋值操作符”,用于给变量设置值,不表示等号。 3. 聪明做法。实际上,我们可以把这两个步骤合并: ```javascript let myVariable = 123; ``` 这种做法更高效: - 在一条语句中声明变量并赋值 - 这是开发者的标准实践 - 代码更简洁且保持清晰 4. 改变想法。如果想存储不同的数字呢? ```javascript myVariable = 321; ``` 重新赋值的理解: - 变量现在包含 321 而不是 123 - 之前的值被替换 —— 变量一次只存储一个值 - 这种可变性是用 let 声明变量的关键特征 ✅ 试试看!你可以直接在浏览器中写 JavaScript。打开浏览器窗口,进入开发者工具。在控制台提示符下,输入 let myVariable = 123,回车,然后输入 myVariable。会发生什么呢?你将在后续课程中了解更多这些概念。 ### 🧠 变量掌握检测:提升熟练度 来看看你对变量的理解: - 你能解释声明变量和赋值变量的区别吗? - 如果你在声明变量之前使用它,会发生什么? - 在什么情况下你会选择用 let 而不是 const? ## 常量 有时你需要存储在程序执行过程中永远不变的信息。常量就像古希腊欧几里得建立的数学原理 —— 一旦被证明和记录,永远保持不变。 常量的工作方式和变量类似,但有一个重要限制:赋值后不能更改。这种不可变性有助于防止对程序中的关键值发生意外修改。 声明并初始化常量的概念和变量相同,唯一不同的是使用 const 关键字。常量通常用全大写字母声明。 这段代码做了什么: - 创建 一个名为 MY_VARIABLE 的常量,值为 123 - 使用 常量的全大写命名惯例 - 防止 未来对该值的任何更改 常量的两条主要规则: - 必须立即赋值 —— 不允许定义空常量! - 值永远不能更改 —— 任何尝试更改都会导致错误。来看例子: 简单值 - 以下做法是不被允许的: ```javascript const PI = 3; PI = 4; // 不允许 ``` 你需要记住的: - 尝试重新赋值常量会导致错误 - 保护 重要的数值不被意外更改 - 确保 程序中值的一致性 对象引用是被保护的 - 以下做法不被允许: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 不允许 ``` 这些概念的理解: - 防止 用新对象替换整个原对象 - 保护 原始对象的引用 - 保持 对象在内存中的身份 对象值是不被保护的 - 以下做法是允许的: ```javascript const obj = { a: 3 }; obj.a = 5; // 允许 ``` 这里发生了什么: - 修改 对象内部的属性值 - 保持 相同的对象引用 - 表明 对象内容可以改变,但引用保持不变 > 注意,const 保护的是引用不被重新赋值。值本身不是不可变的,尤其是当它是复杂类型如对象时,值可以改变。 ## 数据类型 JavaScript 将信息组织成不同的类别,称为数据类型。这个概念类似于古代学者如何分类知识 —— 亚里士多德区分了不同的推理类型,知道逻辑原则不能统一运用于诗歌、数学和自然哲学。 数据类型很重要,因为不同的操作处理不同种类的信息。就像你不能对一个人的名字进行算术运算,或对数学方程排序一样,JavaScript 需要对每个操作使用合适的数据类型。理解这一点可以避免错误,让代码更可靠。 变量可以存储许多不同类型的值,比如数字和文本。这些不同类型的值统称为数据类型。数据类型是软件开发的重要一环,因为它帮助开发者决定如何编写代码以及软件如何运行。此外,某些数据类型具有独特的特性,能够帮助转换或提取值中的附加信息。 ✅ 数据类型也称为 JavaScript 的原始数据类型,因为它们是语言提供的最低级别数据类型。共有 7 种原始数据类型:string(字符串)、number(数字)、bigint(大整数)、boolean(布尔值)、undefined(未定义)、null(空值)和 symbol(符号)。花点时间想象这些原始类型分别代表什么。什么是 zebra?0 是什么?true 呢? ### 数字 数字是 JavaScript 中最直接的数据类型。无论你操作像 42 这样整数,还是 3.14 这样的小数,或 -5 这样的负数,JavaScript 都统一处理。 还记得我们之前的变量吗?我们存储的 123 实际上是数字类型: 主要特征: - JavaScript 自动识别数字值 - 你可以对这些变量执行数学运算 - 不需要显式声明类型 变量可以存储所有类型的数字,包括小数和负数。数字也可以与算术运算符一起使用,详见下一节。 ### 算术运算符 算术运算符让你在 JavaScript 中执行数学计算。这些运算符遵循数学家们使用了几个世纪的原则 —— 就像代数学符号的发明者花拉子米一样。 运算符的工作方式和传统数学相符:加号表示加法,减号表示减法,等等。 执行算术运算时,可以使用以下几种运算符: ✅ 试试看!在浏览器的控制台尝试一个算术运算,结果有没有让你感到惊讶? ### 🧮 数学技能检测:自信计算 测试你的算术理解: - /(除法)和 %(取余)有什么区别? - 你能预测 10 % 3 的结果吗?(提示:不是 3.33……) - 为什么在编程中取余运算符很有用? ### 字符串 在 JavaScript 中,文本数据由字符串表示。“字符串”一词来自字符按顺序串联的概念,就像中世纪修道院的抄写员将字母连接成词句记录在手稿里。 字符串是网页开发的基础。网站上显示的每段文本 —— 用户名、按钮标签、错误信息、内容 —— 都是字符串数据。理解字符串对创建功能性用户界面至关重要。 字符串是一组字符,放在单引号或双引号之间。 理解这些概念: - 使用 单引号 ' 或 双引号 " 来定义字符串 - 存储 可以包含字母、数字和符号的文本数据 - 将 字符串值赋给变量以供后续使用 - 需要 使用引号以区分文本和变量名 记住写字符串时一定要用引号,否则 JavaScript 会把它当作变量名。 ### 字符串格式化 字符串操作让你可以组合文本元素、插入变量,并创建响应程序状态的动态内容。这种技术让你能够以编程方式构造文本。 常常需要把多个字符串合并 —— 这个过程叫做连接。 要连接两个或多个字符串,或将它们连接在一起,使用 + 运算符。 一步步来看,发生了什么: - 使用 + 运算符合并多个字符串 - 第一个例子中直接连接字符串,中间没有空格 - 在字符串之间添加空格字符 " " 以增加可读性 - 插入逗号等标点符号以创建正确的格式 ✅ 为什么在 JavaScript 中 1 + 1 = 2,但 '1' + '1' = 11?想一想。那 '1' + 1 会怎样? 模板字符串是另一种格式化字符串的方式,不同于引号,使用反引号 ` `。所有非纯文本内容都必须放在占位符 ${ }` 内。这包括任何可能是字符串的变量。 我们来理解每个部分: - 使用反引号 ` `` 替代普通引号来创建模板字符串 - 直接使用 ${} 占位符语法嵌入变量 - 精确保留空格和格式 - 提供一种更简洁的方法来构建包含变量的复杂字符串 你可以用上述任一方法实现你的格式需求,但模板字符串会尊重所有空格和换行。 ✅ 什么时候你会选择使用模板字符串而非普通字符串? ### 🔤 字符串掌握检测:文本操作自信度 评估你的字符串技能: - 你能解释为什么 '1' + '1' 等于 '11' 而不是 2 吗? - 你觉得哪种字符串方法更易读:连接符还是模板字符串? - 如果忘记给字符串加引号,会发生什么? ### 布尔值 布尔值代表最简单的数据形式:它们只能有两个值之一——true 或 false。这种二元逻辑系统可追溯到19世纪数学家乔治·布尔(George Boole)开发的布尔代数。 尽管简单,布尔值对程序逻辑至关重要。它们让代码能基于条件做出决策——比如用户是否已登录,是否点击了按钮,或是否满足某些条件。 布尔值只能是两个值之一:true 或 false。布尔值有助于根据特定条件决定哪些代码行应该运行。在许多情况下,运算符帮助设置布尔值的值,而你也常会看到并写出变量初始化或使用运算符更新其值。 在上例中,我们: - 创建了一个存储布尔值 true 的变量 - 演示了如何存储布尔值 false - 使用了准确的关键字 true 和 false(无需引号) - 准备了这些变量供条件语句使用 ✅ 如果变量计算结果为布尔 true,它可以被认为是“真值”。有趣的是,在 JavaScript 中,除非定义为假值,否则所有值都是“真值”。 ### 🎯 布尔逻辑检测:决策能力 测试你的布尔理解: - 为什么你认为 JavaScript 中有“真值”和“假值”,而不仅仅是 true 和 false? - 你能预测以下哪些是假值吗:0、"0"、[]、"false"? - 布尔值如何在控制程序流程中发挥作用? --- ## 📊 你的数据类型工具包总结 ## GitHub Copilot Agent 挑战 🚀 使用 Agent 模式完成以下挑战: 描述: 创建一个个人信息管理程序,演示本课中学到的所有 JavaScript 数据类型,同时处理实际数据场景。 提示: 构建一个 JavaScript 程序,创建一个用户资料对象,包含:个人姓名(字符串)、年龄(数字)、是否为学生状态(布尔)、喜爱的颜色数组,以及含有街道、城市和邮编属性的地址对象。包括显示资料信息和更新各字段的函数。确保演示字符串连接、模板字符串、年龄的算术操作,以及学生状态的布尔逻辑。 了解更多关于Agent 模式。 ## 🚀 挑战 JavaScript 有一些行为可能让开发者措手不及。这里有一个经典范例:试着在浏览器控制台输入:let age = 1; let Age = 2; age == Age,然后观察结果。它返回 false —— 你能找出原因吗? 这代表了许多值得理解的 JavaScript 行为熟悉这些怪癖将帮助你写出更可靠的代码,更高效地调试问题。 ## 课后测验 课后测验 ## 复习与自学 看看这份 JavaScript 练习列表,尝试其中一个。你学到了什么? ## 作业 数据类型练习 ## 🚀 你的 JavaScript 数据类型掌握时间表 ### ⚡ 接下来 5 分钟你可以做什么 - [ ] 打开浏览器控制台,创建 3 个不同数据类型的变量 - [ ] 尝试挑战题:let age = 1; let Age = 2; age == Age,并找出为什么结果是 false - [ ] 练习用名字和喜欢的数字进行字符串连接 - [ ] 测试将数字加到字符串上会发生什么 ### 🎯 这小时你可以完成什么 - [ ] 完成课后测验并复习任何有疑惑的概念 - [ ] 创建一个简单计算器,实现加减乘除两数运算 - [ ] 使用模板字符串构建简单的姓名格式化器 - [ ] 探索 == 与 === 比较运算符的区别 - [ ] 练习不同数据类型之间的转换 ### 📅 你的一周 JavaScript 基础 - [ ] 自信且富有创造力地完成作业 - [ ] 创建一个包含所有学过数据类型的个人资料对象 - [ ] 练习使用来自 CSS-Tricks 的 JavaScript 练习 - [ ] 构建一个使用布尔逻辑的简单表单验证器 - [ ] 试验数组和对象数据类型(预览后续课程) - [ ] 加入 JavaScript 社区,提出关于数据类型的问题 ### 🌟 你一个月的转变 - [ ] 将数据类型知识融入更大型的编程项目 - [ ] 理解何时以及为何在实际应用中使用每种数据类型 - [ ] 帮助其他初学者理解 JavaScript 基础 - [ ] 构建一个管理不同类型用户数据的小应用 - [ ] 探索高级数据类型概念,如类型强制转换和严格相等 - [ ] 参与开源 JavaScript 项目的文档改进 ### 🧠 最终数据类型掌握检测 庆祝你的 JavaScript 基础: - 哪种数据类型的行为让你最感惊讶? - 你讲解变量与常量的区别给朋友时感觉如何? - 关于 JavaScript 的类型系统你发现的最有趣的事情是什么? - 你能想象用这些基础构建什么实际应用? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免责声明: 本文件使用人工智能翻译服务 Co-op Translator 进行翻译。虽然我们力求准确,但请注意自动翻译可能存在错误或不准确之处。应以原始语言的原版文件为权威来源。对于关键信息,建议寻求专业人工翻译。因使用本翻译而产生的任何误解或误译,我们概不负责。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基础:方法与函数

## 课前测验 课前测验 重复写同样的代码是编程中最常见的挫败感之一。函数解决了这个问题,它让你把代码打包成可重复使用的块。把函数想象成使亨利·福特的装配线革命化的标准化零件——一旦你创建了一个可靠的组件,就可以在任何需要的地方使用它,而不必重新构建。 函数允许你把一段代码打包,这样你就能在整个程序中重复使用它们。你不用到处复制粘贴相同的逻辑,而是创建一个函数,然后在需要时调用它。这种方法让你的代码更有条理,也更容易维护。 在本课中,你将学习如何创建自己的函数、如何传递信息给它们以及如何从中获取有用的结果。你会发现函数和方法的区别,学习现代的语法写法,并看到函数是如何与其他函数协作的。我们将一步步构建这些概念。 [](https://youtube.com/watch?v=XgKsD6Zwvlc "方法与函数") ## 函数 函数是一个自包含的代码块,用来执行特定任务。它封装了你可以在需要时执行的逻辑。 你不用在程序中多次写相同代码,而是把它打包成函数,按需调用。这样你的代码更整洁,也更易更新。想想看,如果你必须修改散落在代码库中二十个不同位置的逻辑,那维护工作会多么复杂。 给函数起一个描述性名字非常重要。一个名字明确的函数可以清晰表达它的目的——当你看到 cancelTimer() 时,你立即知道它是做什么的,就像一个标签清晰的按钮告诉你点击后会发生什么一样。 ## 创建和调用函数 让我们看看如何创建函数。语法遵循固定模式: 我们来拆解一下: - function 关键字告诉 JavaScript “嘿,我正在创建一个函数!” - nameOfFunction 是你给函数起的描述性名字 - 括号 () 是你可以添加参数的位置(我们稍后会讲) - 花括号 {} 包含当你调用函数时执行的实际代码 让我们创建一个简单的问候函数,看看效果: 这个函数会在控制台打印 "Hello, world!"。定义之后,你可以根据需要多次使用它。 要执行(或“调用”)函数,写函数名后接括号。JavaScript 允许你先调用函数后定义,JavaScript 引擎会处理执行顺序。 运行这行代码时,它会执行 displayGreeting 函数里的所有代码,在浏览器控制台显示 "Hello, world!"。你可以反复调用这个函数。 ### 🧠 函数基础检测:构建你的第一个函数 来测试你对基本函数的理解: - 为什么函数定义中要用花括号 {}? - 如果只写 displayGreeting 而不加括号,会发生什么? - 为什么你可能想多次调用同一个函数? ### 函数最佳实践 这里有几个帮助你写出优秀函数的小贴士: - 给函数起清晰、描述明确的名字——未来的你会感谢自己! - 多单词名称使用驼峰式命名(比如用 calculateTotal,而不是 calculate_total) - 每个函数专注做好一件事 ## 给函数传递信息 我们的 displayGreeting 函数很有限——它只能显示 “Hello, world!”。参数让函数更灵活更有用。 参数 就像占位符,每次调用函数时可以传入不同的值。这样同一个函数每次调用可以使用不同的信息。 定义函数时,你在括号里列出参数,多个参数用逗号分隔: 每个参数像个占位符——调用函数时,调用者会提供实际值,填入这些位置。 让我们把问候函数改造一下,能接收一个人的名字: 你会注意到我们使用了反引号 (` `) 和 ${}` 来直接把名字插入消息中——这叫模板字符串,是构建带变量字符串的很方便方式。 现在调用时,我们可以传入任意名字: JavaScript 将字符串 'Christopher' 赋值给参数 name,生成个性化消息 "Hello, Christopher!" ## 默认值 如果我们想让某些参数可选怎么办?这时默认值很有用! 假设我们希望用户能自定义问候语,但如果没指定,就默认用 "Hello"。你可以用等号设置默认值,就像变量赋值一样: 这里,name 仍是必需的,salutation 则有默认的 'Hello',如果调用者不传就用默认值。 这样我们可以用两种方式调用函数: 第一次调用没传问候语,JavaScript 用默认的 "Hello"。第二次调用传了 "Hi",它就用这个自定义值。这种灵活性让函数能适应不同场景。 ### 🎛️ 参数掌握检测:让函数更灵活 考考你对参数的理解: - 参数和实参有什么区别? - 为什么默认值在实际编程中有用? - 如果传入的实参比参数多,会发生什么? ## 返回值 到目前为止我们的函数只是打印消息,但万一你想让函数计算并返回结果呢? 这就用到返回值。函数不仅可以显示内容,还能返回值,你可以把返回值存到变量里,或者用于代码的其他部分。 使用 return 关键字,后面跟你想返回的值: 这里需要注意的是:函数遇到 return 语句,会立即停止执行,并把那个值返回给调用它的人。 来修改一下问候函数,不打印只返回消息: 这个函数不打印消息,而是构造消息并返回给调用方。 要用返回值,我们可以像处理其他值一样,把它存到变量里: 现在 greetingMessage 变量里保存了 "Hello, Christopher",我们可以在代码里任何地方使用——网页中显示,发送邮件,或者传给其他函数。 ### 🔄 返回值检测:拿回结果 评估你对返回值的理解: - 函数里 return 后的代码会怎样? - 为什么返回值通常比只打印更好? - 函数能返回不同类型的值(字符串、数字、布尔)吗? ## 作为参数的函数 函数可以作为参数传递给其他函数。刚开始这可能有点复杂,但这是个强大特性,能实现灵活的编程模式。 这种模式很常见,比如你想说“当某事发生时,执行另一段代码”。比如,“计时结束时执行这段代码”,“用户点击按钮时调用这个函数”。 来看 setTimeout,这是一个内置函数,会等待一段时间再运行代码。你得告诉它跑什么代码——传函数给它就是完美用法! 试试这段代码,3秒后你会看到消息: 注意我们把 displayDone(没有括号)传给 setTimeout。我们不是自己调用它,而是把函数交给 setTimeout,让它3秒后调用。 ### 匿名函数 有时候你只用一次函数,不想给它起名字。想想看——只用一次,为何要额外起一个名字占用代码空间? JavaScript 支持匿名函数——没有名字的函数,你可以直接在需要的地方定义它们。 改写上面计时例子,使用匿名函数: 效果一样,但函数定义直接写在 setTimeout 调用里,不需分开声明函数。 ### 箭头函数 现代 JavaScript 有更简短的函数写法,叫箭头函数。它用 =>(看起来像箭头——你懂的)表示,开发者极其喜欢用。 箭头函数省略了 function 关键字,写起代码更简洁。 这就是用箭头函数写的计时例子: () 里放参数(这里空着),接箭头 =>,最后是花括号里的函数体。功能一样,语法更紧凑。 ### 何时使用哪种写法 什么时候用哪种?一个实用指南是:如果你要多次调用一个函数,给它起名并单独定义;若只用一次,可以考虑匿名函数。箭头函数和传统语法都有效,但箭头函数是现代代码的主流。 ### 🎨 函数风格掌握检测:选择合适的语法 考考你对语法的理解: - 什么时候你更喜欢用箭头函数? - 匿名函数的最大优势是什么? - 你能想到啥场景中有名函数优于匿名函数? --- ## 🚀 挑战 你能用一句话说清函数和方法的区别吗?试试看! ## GitHub Copilot Agent 挑战 🚀 用 Agent 模式完成以下挑战: 描述: 创建一个数学函数工具库,演示本课中涉及的函数概念,包括参数、默认值、返回值和箭头函数。 提示: 创建一个叫 mathUtils.js 的 JavaScript 文件,包含以下函数: 1. 一个 add 函数,接受两个参数,返回它们的和 2. 一个带默认参数值的 multiply 函数(第二个参数默认是1) 3. 一个箭头函数 square,接受一个数字返回它的平方 4. 一个 calculate 函数,接受另一个函数和两个数字作为参数,然后对这两个数字应用该函数 5. 展示对每个函数的调用示例和测试用例 了解更多关于 agent模式 。 ## 课后测验 课后测验 ## 复习与自学 值得多读一些箭头函数的内容,因为它们在代码库中用得越来越多。练习写函数,然后用这种语法改写。 ## 作业 Fun with Functions --- ## 🧰 你的 JavaScript 函数工具包总结 --- ## 🚀 你的 JavaScript 函数掌握时间线 ### ⚡ 接下来 5 分钟你可以做的事 - [ ] 写一个简单函数,返回你最喜欢的数字 - [ ] 创建一个有两个参数的函数,把它们相加 - [ ] 尝试将传统函数转换为箭头函数语法 - [ ] 练习挑战:解释函数和方法之间的区别 ### 🎯 你这小时可以完成的目标 - [ ] 完成课后测验并复习任何令人困惑的概念 - [ ] 构建 GitHub Copilot 挑战中的数学工具库 - [ ] 创建一个使用另一个函数作为参数的函数 - [ ] 练习编写带有默认参数的函数 - [ ] 试验在函数返回值中使用模板字符串 ### 📅 你的一周函数精通计划 - [ ] 富有创造性地完成“函数的乐趣”作业 - [ ] 将你编写的一些重复代码重构为可重用函数 - [ ] 仅使用函数构建一个小型计算器(无全局变量) - [ ] 练习使用数组方法如 map() 和 filter() 的箭头函数 - [ ] 创建一组用于常见任务的实用函数集合 - [ ] 学习高阶函数和函数式编程概念 ### 🌟 你的一月转变计划 - [ ] 掌握高级函数概念,如闭包和作用域 - [ ] 构建一个大量使用函数组合的项目 - [ ] 通过改进函数文档为开源项目做贡献 - [ ] 教别人函数及不同语法风格的知识 - [ ] 探索 JavaScript 中的函数式编程范式 - [ ] 创建一个个人可重用函数库以备将来项目使用 ### 🏆 终极函数大师签到 庆祝你的函数掌握成就: - 到目前为止,你写过的最有用的函数是什么? - 学习函数如何改变了你对代码组织的思考? - 你喜欢哪种函数语法,为什么? - 你会通过写函数解决什么现实世界的问题? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免责声明: 本文件由人工智能翻译服务Co-op Translator翻译完成。虽然我们力求准确,但请注意自动翻译可能包含错误或不准确之处。应以原始语言的文档为权威来源。对于重要信息,建议采用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担任何责任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript基础:做出决策

你有没有想过应用程序是如何做出智能决策的?比如导航系统如何选择最快路线,或者恒温器如何决定何时开启供暖?这就是编程中决策制定的基本概念。 正如查尔斯·巴贝奇的分析机设计为根据条件执行不同的操作序列一样,现代的JavaScript程序也需要根据不同的情况做出选择。分支和决策的能力使得静态代码变成响应型的智能应用程序。 在本课中,你将学习如何在程序中实现条件逻辑。我们将探讨条件语句、比较运算符和逻辑表达式,让你的代码能够评估情况并做出恰当响应。 ## 课前小测 课前小测 做出决策和控制程序流程的能力是编程的基础部分。本节涵盖如何使用布尔值和条件逻辑来控制JavaScript程序的执行路径。 [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## 布尔值简要回顾 在探讨决策制定前,让我们回顾上一节课提到的布尔值。布尔值以数学家乔治·布尔命名,代表两个二进制状态——true 或 false。没有模糊,没有中间状态。 这些二进制值构成了所有计算逻辑的基础。你程序中每个决策最终都归结为一次布尔值判断。 创建布尔变量非常简单: 这创建了两个明确具有布尔值的变量。 ✅ 布尔值以英国数学家、哲学家和逻辑学家乔治·布尔(1815–1864)命名。 ## 比较运算符与布尔值 在实际中,你很少手动设置布尔值。相反,你会通过条件判断生成它们:比如“这个数字大于那个吗?”或者“这些值相等吗?” 比较运算符支持这些判断。它们比较两个值并根据操作数之间的关系返回布尔结果。 ✅ 通过在浏览器控制台里写一些比较语句来检验你的理解。有返回结果让你感到惊讶吗? ### 🧠 比较运算理解测试:布尔逻辑掌握 测试你的比较理解能力: - 为什么一般推荐用 === (严格相等) 而不是 == (宽松相等)? - 你能预测 5 === '5' 返回什么吗?5 == '5' 呢? - !== 和 != 有什么区别? ## If 语句 if 语句就像在你的代码中提出一个问题。“如果这个条件为真,那么就执行这件事。” 这可能是你在JavaScript中做决策时用得最重要的工具。 运作方式如下: 条件放在括号内,如果结果为 true,JavaScript会执行大括号中的代码。如果是 false,JavaScript会跳过这整个代码块。 你经常会用比较运算符来组成这些条件。来看一个实际的例子: 因为 1000 >= 800 计算结果为 true,代码块内的内容得以执行,控制台打印出“Getting a new laptop!”。 ## If..Else 语句 但是如果你想在条件为假时执行不同的操作呢?这时就用到 else —— 就像有备选方案一样。 else 语句让你说“如果这个条件不为真,那就执行另一件事情。” 现在由于 500 >= 800 为 false,JavaScript跳过第一个代码块,转而执行 else 代码块。你会看到控制台打印“Can't afford a new laptop, yet!”。 ✅ 通过运行这段代码和下面代码来测试你的理解。改变 currentMoney 和 laptopPrice 变量的值,观察控制台输出变化。 ### 🎯 If-Else 逻辑检测:分支路径 评估你对条件逻辑的理解: - 如果 currentMoney 正好等于 laptopPrice 会发生什么? - 你能想到一个现实场景,哪里使用if-else逻辑会很有用? - 你如何扩展这个逻辑来处理多个价格区间? ## Switch 语句 有时你需要把一个值和多个选项进行比较。虽然可以串联多个 if..else 语句,但代码会变得难以管理。switch 语句为多个离散值提供了更清晰的结构。 这个概念类似于早期电话交换机中的机械切换系统 — 一个输入值决定执行哪个具体路径。 它的结构如下: - JavaScript只计算表达式一次 - 遍历每个 case 寻找匹配项 - 找到匹配时执行该代码块 - break 使JavaScript停止并退出switch - 如果没有匹配项执行 default 块(如果存在) 在该例中,JavaScript看到 dayNumber 为 2,匹配到 case 2,将 dayName 设置为"Tuesday",然后跳出switch。结果就是控制台打印“Today is Tuesday”。 ✅ 通过运行这段代码和接下来的代码来测试你的理解。改变变量 a 的值,观察控制台输出变化。 ### 🔄 Switch 语句掌握:多选项处理 测试你的switch理解: - 如果忘了写 break 会发生什么? - 你什么时候会选择用 switch 而不是多个 if-else 语句? - 即使你认为涵盖了所有可能,为什么 default 情况仍然有用? ## 逻辑运算符与布尔值 复杂决策通常需要同时评估多个条件。正如布尔代数允许数学家结合逻辑表达式,编程语言也提供了逻辑运算符来连接多个布尔条件。 这些运算符通过组合简单的真/假判断,支持复杂的条件逻辑。 这些运算符让你以有用的方式组合条件: - AND (&&) 表示两个条件都必须为真 - OR (||) 表示至少一个条件为真 - NOT (!) 将真变假,假变真 ## 逻辑运算符的条件与决策 来看一个更现实的例子,演示这些逻辑运算符的用法: 在此示例中:我们计算出20%的折扣价(640),然后判断资金是否足够支付全价或折扣价。由于600未达到折扣价640条件,整个表达式计算结果为false。 ### 🧮 逻辑运算符检测:条件组合 测试你的逻辑运算符理解: - 在表达式 A && B 中,如果 A 为假,B 会被计算吗? - 你能想到什么情况下需要同时使用 &&, ||, ! 三个运算符吗? - !user.isActive 和 user.isActive !== true 有什么区别? ### 取反运算符 有时更容易思考某事“不成立”的情况。比如不问“用户是否登录?”,而是问“用户是否未登录?”。感叹号(!)运算符就帮你翻转逻辑。 ! 运算符就像说“相反的……”,如果条件是 true,! 使它变成 false,反之亦然。 ### 三元表达式 对于简单的条件赋值,JavaScript提供了三元运算符。这种简洁写法允许你在一行中写出条件表达式,在需要根据条件赋值两种情形时特别有用。 它读起来像个问题:“这个条件成立吗?如果是,用这个值。不成立,用那个值。” 下面是更具体的例子: ✅ 花点时间多读几遍这段代码。你理解这些运算如何工作吗? 这句代码相当于:“firstNumber 是否大于 secondNumber?如果是,把 firstNumber 赋给 biggestNumber,否则赋 secondNumber。” 三元运算符是传统 if..else 语句的简写方式: 两种写法结果相同。三元运算符较简洁,而传统的if-else结构在复杂条件下更易读。 --- ## 🚀 挑战 写一个程序,先用逻辑运算符实现,再用三元表达式重写。你更喜欢哪种写法? --- ## GitHub Copilot Agent 挑战 🚀 用Agent模式完成以下挑战: 描述: 创建一个综合评分计算器,演示本课多种决策概念,包括 if-else 语句、switch 语句、逻辑运算符和三元表达式。 提示: 编写一个 JavaScript 程序,输入学生的数字成绩(0-100),根据以下标准确定字母等级: - A:90-100 - B:80-89 - C:70-79 - D:60-69 - F:低于60 要求: 1. 使用 if-else 语句确定字母等级 2. 使用逻辑运算符检查学生是否及格(grade >= 60)且获得荣誉(grade >= 90) 3. 使用 switch 语句为每个成绩等级提供具体反馈 4. 使用三元运算符判断学生是否有资格参加下一门课程(grade >= 70) 5. 包含输入验证以确保分数在 0 到 100 之间 使用多种分数测试你的程序,包括临界值如 59、60、89、90 以及无效输入。 在此处了解更多关于 agent mode 的信息。 ## 课后测验 课后测验 ## 复习与自学 阅读更多关于用户可用的多种运算符,请见 MDN。 浏览 Josh Comeau 精彩的运算符查找! ## 作业 运算符 --- ## 🧠 你的决策工具包总结 --- ## 🚀 你的 JavaScript 决策能力掌握时间线 ### ⚡ 接下来 5 分钟内你能做什么 - [ ] 在浏览器控制台练习比较运算符 - [ ] 编写一个简单的 if-else 语句来检查你的年龄 - [ ] 尝试挑战:用三元运算符重写 if-else - [ ] 测试不同“真值”和“假值”时的表现 ### 🎯 接下来一小时内你能完成的任务 - [ ] 完成课后测验并复习任何困惑的概念 - [ ] 构建 GitHub Copilot 挑战中的综合成绩计算器 - [ ] 创建一个现实场景的简单决策树(例如选择穿什么) - [ ] 练习用逻辑运算符组合多个条件 - [ ] 试验 switch 语句在不同用例中的应用 ### 📅 你的周度逻辑掌握 - [ ] 完成包含创造性示例的运算符作业 - [ ] 使用各种条件结构构建迷你测验应用 - [ ] 创建一个检查多个输入条件的表单验证器 - [ ] 练习 Josh Comeau 的运算符查找练习 - [ ] 重构现有代码以使用更合适的条件结构 - [ ] 研究短路求值和性能影响 ### 🌟 你的月度提升计划 - [ ] 精通复杂嵌套条件且保持代码可读性 - [ ] 构建带有复杂决策逻辑的应用 - [ ] 通过改进现有项目中的条件逻辑参与开源贡献 - [ ] 教授他人不同条件结构及其适用场景 - [ ] 探索函数式编程在条件逻辑中的应用 - [ ] 创建一份条件最佳实践的个人参考指南 ### 🏆 最终决策大师自查 庆祝你的逻辑思维掌握: - 你成功实现过的最复杂的决策逻辑是什么? - 你觉得哪种条件结构最自然,为什么? - 学习逻辑运算符如何改变了你的问题解决方法? - 哪些现实应用会从复杂决策逻辑中获益? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免责声明: 本文件使用AI翻译服务Co-op Translator进行翻译。虽然我们努力确保准确性,但请注意自动翻译可能包含错误或不准确之处。原始语言版本的文件应被视为权威来源。对于重要信息,建议采用专业人工翻译。对于因使用本翻译而产生的任何误解或错误理解,我们不承担任何责任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基础知识:数组和循环

## 课前测验 课前测验 有没有想过网站是如何跟踪购物车商品或者显示你的好友列表的?这就涉及到了数组和循环。数组就像是存放多条信息的数字容器,而循环则让你能高效地处理所有数据,而不需要重复写代码。 这两个概念共同构成了处理程序中信息的基础。你将学会如何从手动编写每一步,转变为创建智能、高效的代码,可以快速处理数百甚至数千个条目。 到本课结束时,你将懂得如何用几行代码完成复杂的数据任务。让我们一起探索这些基本的编程概念。 [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## 数组 把数组想象为数字化的文件柜——不是每个抽屉只存放一份文档,而是可以把多个相关项目组织到一个结构化的容器中。用编程术语来说,数组让你可以把多条信息存储在一个有序的包裹里。 无论你是在构建图片库、管理待办事项,还是统计游戏中的最高分,数组都为数据组织提供了基础。让我们来看它们是如何工作的。 ✅ 数组无处不在!你能想到一个现实生活中的数组例子吗,比如太阳能电池板阵列? ### 创建数组 创建数组非常简单——只需用方括号! 这里发生了什么? 你用这对方括号 [] 创建了一个空容器。把它想象成一个空的书架,它已经准备好放你想存放的任何书籍了。 你还可以一开始就给数组填入初始值: 有趣的点: - 数组里可以同时存储文本、数字甚至布尔值(true/false) - 每个元素用逗号分隔——非常简单! - 数组非常适合将相关信息存放在一起 ### 数组索引 这里有个可能最初让你觉得不寻常的地方:数组的编号是从 0 开始的,而不是从 1 开始。这个以零为基础的索引源于计算机内存的工作方式——这是自 C 语言等早期编程语言以来的惯例。数组中的每个位置都有一个被称为索引的地址号。 ✅ 你是否对数组从零开始编号感到惊讶?在某些编程语言中,索引是从 1 开始的。这里有一段有趣的历史,你可以在 Wikipedia 上阅读。 访问数组元素: 解析这段代码: - 使用 方括号加索引数字来访问元素 - 返回 数组中对应位置存储的值 - 索引 从 0 开始计数,首个元素索引为 0 修改数组元素: 以上操作包括: - 将 索引 4 处的元素从 "Rocky Road" 修改为 "Butter Pecan" - 在 索引 5 添加新元素 "Cookie Dough" - 自动 在添加超出当前边界时扩展数组长度 ### 数组长度和常用方法 数组自带了属性和方法,让处理数据变得更加轻松。 获取数组长度: 要点: - 返回 数组中元素的总数 - 自动更新,元素增加或删除时动态改变 - 提供 动态计数,适用于循环和验证 常用数组方法: 关于这些方法: - 通过 push()(尾部)和 unshift()(开头)添加元素 - 通过 pop()(尾部)和 shift()(开头)删除元素 - 通过 indexOf() 查找元素位置,includes() 检查是否包含 - 返回有用的值,比如删除的元素或元素索引 ✅ 试试吧!在浏览器控制台创建并操作一个你自己的数组。 ### 🧠 数组基础检测:组织你的数据 测试你的数组理解: - 你为什么认为数组是从 0 开始计数而不是从 1? - 如果你尝试访问不存在的索引(比如一个有 5 个元素的数组里访问 arr[100])会怎样? - 你能想到三个现实场景里数组非常有用的地方吗? ## 循环 想象一下狄更斯小说里的惩罚,一个学生要反复在黑板上写同一句话。假如你能简单告诉别人“写这句话 100 遍”,并让它自动完成,那就是循环在代码中的作用。 循环就像一位不知疲倦的助手,可以重复任务而不出错。不论是检查购物车中的每件物品,还是显示相册里的所有照片,循环都能高效地处理重复操作。 JavaScript 提供了多种循环类型。让我们来看看各自的用法及适用场景。 ### For 循环 for 循环就像设置了一个计时器——你知道任务要执行多少次。它非常有序且可预测,非常适合处理数组或需要计数的场合。 For 循环结构: 逐步理解这个过程: - 初始化 计数器变量 i 为 0 - 判断 条件 i < 10,为真时进入循环体 - 执行 代码块 - 执行 循环体后,i++ 使 i 增加 1 - 循环结束 当条件为假(即 i 达到 10) ✅ 在浏览器控制台运行此代码。改变计数器、条件或递增表达式,会发生什么?你能让它倒计时吗? ### 🗓️ For 循环掌握检测:控制重复 评估你的 for 循环理解: - for 循环的三个部分是什么,它们分别做什么? - 怎么让 for 循环倒着遍历数组? - 如果忘记写增量部分(i++)会怎样? ### While 循环 while 循环相当于“持续做这件事直到……”,你不一定知道会执行多少次,但知道什么时候停止。它非常适合用户输入验证,或者在找到想要的数据前不断搜索。 While 循环特征: - 在条件为真时 持续执行 - 需要 手动管理计数变量 - 在每次执行前 判断条件 - 风险 条件永远为真则发生死循环 解析这些例子: - 在循环内 手动管理计数器变量 i - 防止死循环 适当增加计数器 - 展示 用户输入和尝试次数限制实际用例 - 包含 安全机制防止无限循环 ### ♾️ While 循环智慧检测:基于条件的重复 测试你对 while 循环的理解: - 使用 while 循环时最大的风险是什么? - 什么情况下你会选择用 while 循环而非 for 循环? - 如何预防死循环? ### 现代循环替代方案 JavaScript 提供了更现代的循环语法,使代码更易读且减少出错。 For...of 循环(ES6+): for...of 的优势: - 无需 管理索引,避免 off-by-one 错误 - 直接 访问数组元素 - 提升 代码可读性并减少语法复杂度 forEach 方法: 关于 forEach 你需要知道: - 为数组的每个元素 执行函数 - 提供 元素值和索引参数 - 无法 早停(不同于传统循环) - 返回 undefined(不生成新的数组) ✅ 你会选择 for 循环还是 while 循环?17K 人在 StackOverflow 上讨论过这个问题,一些观点可能会引起你的兴趣。 ### 🎨 现代循环语法检测:拥抱 ES6+ 评估你对现代 JavaScript 的理解: - for...of 相比传统 for 循环有哪些优势? - 你什么时候还会偏好传统 for 循环? - forEach 和 map 有什么区别? ## 循环和数组 数组与循环结合能创造强大的数据处理能力。这一搭配几乎是许多编程任务的基础,从显示列表到计算统计数据。 传统数组处理: 理解每种方式: - 通过 数组长度属性确定循环边界 - 传统 for 循环 按索引访问元素 - for...of 循环 直接访问元素值 - 保证 每个数组元素被处理一次 实用数据处理示例: 代码工作原理: - 初始化 总和及极值追踪变量 - 单次循环 高效处理每个成绩 - 累计 总分用于计算平均数 - 追踪 遍历过程中最高和最低分 - 统计 循环结束后计算最终结果 ✅ 在浏览器控制台试着自己创建数组并用循环操作它。 --- ## GitHub Copilot 代理挑战 🚀 使用代理模式完成以下挑战: 描述: 构建一个综合数据处理函数,结合数组和循环对数据集进行分析并生成有意义的洞察。 要求: 创建一个名为 analyzeGrades 的函数,接受包含学生姓名和分数的成绩对象数组,返回包含最高分、最低分、平均分、及格(分数 >= 70)的学生数量,以及分数高于平均分的学生姓名数组的统计对象。解决方案中需使用至少两种不同类型的循环。 想了解更多请访问 代理模式介绍。 ## 🚀 挑战 JavaScript 提供了几种现代数组方法,可以替代特定任务中的传统循环。探索 forEach、for-of、map、filter 和 reduce。 你的挑战: 使用至少三种不同的数组方法重构学生成绩示例。注意使用现代 JavaScript 语法后,代码变得多么简洁和易读。 ## 课后测验 课后测验 ## 复习与自学 JavaScript 中的数组有很多附带方法,非常适合数据操作。阅读这些方法,并在你创建的数组上尝试它们(比如 push、pop、slice 和 splice)。 ## 作业 遍历数组 --- ## 📊 你的数组与循环工具包总结 --- ## 🚀 你的数组与循环精通时间线 ### ⚡ 接下来5分钟你能做什么 - [ ] 创建一个你最喜欢电影的数组,并访问特定元素 - [ ] 编写一个从 1 数到 10 的 for 循环 - [ ] 尝试本节课的现代数组方法挑战 - [ ] 在浏览器控制台练习数组索引 ### 🎯 接下来一小时你能完成的 - [ ] 完成课后测验并复习任何有挑战的概念 - [ ] 构建 GitHub Copilot 挑战中的综合成绩分析器 - [ ] 创建一个可以添加和移除商品的简单购物车 - [ ] 练习不同循环类型之间的转换 - [ ] 试验数组方法如 push、pop、slice 和 splice ### 📅 你的一周数据处理旅程 - [ ] 完成“遍历数组”作业并进行创意增强 - [ ] 使用数组和循环构建一个待办事项应用 - [ ] 创建一个用于数值数据的简单统计计算器 - [ ] 练习 MDN 数组方法 - [ ] 构建照片图库或音乐播放列表界面 - [ ] 探索函数式编程中的 map、filter 和 reduce ### 🌟 你的一月转变 - [ ] 掌握高级数组操作与性能优化 - [ ] 构建完整的数据可视化仪表盘 - [ ] 为涉及数据处理的开源项目做贡献 - [ ] 用实际示例向他人教授数组和循环 - [ ] 创建个人可重用数据处理函数库 - [ ] 探索基于数组的算法和数据结构 ### 🏆 最终数据处理冠军签到 庆祝你的数组和循环掌握成果: - 你学到的最实用的数组操作是什么,适用于真实世界应用? - 哪种循环类型对你来说最自然,为什么? - 理解数组和循环如何改变了你组织数据的方法? - 你接下来想挑战什么复杂的数据处理任务? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免责声明: 本文件由AI翻译服务Co-op Translator翻译而成。虽然我们致力于准确性,但请注意自动翻译可能包含错误或不准确之处。应以原始语言版本的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用本翻译而产生的任何误解或错误解读承担责任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 簡介

JavaScript 是網絡的語言。在這四節課中,你將學習它的基礎知識。 ### 主題 1. 變數和數據類型 2. 函數和方法 3. 使用 JavaScript 作出決策 4. 陣列和迴圈 ### 致謝 這些課程由 Jasmine Greenaway、Christopher Harrison 和 Chris Noring 用 ♥️ 編寫。 免責聲明: 本文件已使用人工智能翻譯服務 Co-op Translator 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

javascript

JavaScript 基礎:資料類型

資料類型是你在每個編寫的 JavaScript 程式中都會遇到的基本概念之一。想像資料類型就像古代亞歷山卓圖書管理員使用的檔案系統——他們有特定的地方放詩歌、數學和歷史記錄的卷軸。JavaScript 用不同類別的資料來組織資訊,類似這種方法。 在本課中,我們將探討讓 JavaScript 運作的核心資料類型。你會學習如何處理數字、文字、真/假值,並了解選擇正確類型為何對你的程式至關重要。這些概念一開始可能看起來抽象,但透過練習,它們將變成你的第二天性。 理解資料類型會讓 JavaScript 其他部分變得更加清晰。正如建築師在建造大教堂之前需要了解不同的建材,這些基礎會支撐你日後所建構的所有東西。 ## 課前測驗 課前測驗 本課涵蓋 JavaScript 的基礎,這是為網頁提供互動性的語言。 [](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") 讓我們先從變數和用來裝載它們的資料類型開始! ## 變數 變數是程式設計中的基本組成元素。就像中世紀煉金術士用來儲存不同物質的標記瓶子,變數讓你能儲存資訊,並給它一個描述性的名稱,方便日後引用。需要記錄某人的年齡嗎?就存入名為 age 的變數。想追蹤使用者名稱?就存在 userName 變數中。 我們會專注於 JavaScript 中建立變數的現代方法。你在這裡學到的技術代表了語言演進多年來程式社群所發展的最佳實踐。 建立並宣告變數的語法是 [關鍵字] [名稱],由兩部分組成: - 關鍵字。使用 let 表示可變變數,或 const 表示不變值。 - 變數名稱,這是你自行選擇的描述性名稱。 ✅ let 是 ES6 引入的關鍵字,賦予你的變數所謂的 _區塊作用域_。建議你用 let 或 const 取代舊的 var 關鍵字。我們將在後續章節更深入講解區塊作用域。 ### 任務 - 使用變數 1. 宣告變數。我們先來建立第一個變數: ```javascript let myVariable; ``` 這樣做的效果: - 這告訴 JavaScript 建立一個名為 myVariable 的儲存空間 - JavaScript 在記憶體中分配空間給此變數 - 變數目前沒有值(undefined) 2. 賦予它一個值。現在給變數放入一個值: ```javascript myVariable = 123; ``` 指派的工作原理: - = 運算子將值 123 指派給變數 - 變數現在包含這個值,不再是 undefined - 你可以在程式中用 myVariable 參考這個值 > 注意:本課中使用的 = 是「指派運算子」,用於設定變數值,並非等號。 3. 智慧地合併步驟。實際上,我們可以將兩步合成一步: ```javascript let myVariable = 123; ``` 此方式較有效率: - 你同時宣告變數並賦值,一行搞定 - 這是開發者的標準作法 - 減少程式碼長度,同時保持清晰易懂 4. 改變值。若想儲存不同的數字怎麼辦? ```javascript myVariable = 321; ``` 了解重新指派: - 變數現在包含 321,取代了之前的 123 - 先前的值被覆蓋——變數一次只存一個值 - 此可變性是用 let 宣告變數的主要特性 ✅ 試試看!你可以直接在瀏覽器中寫 JavaScript。打開瀏覽器開發者工具,進入控制台(console),輸入 let myVariable = 123,按下 Enter,再輸入 myVariable。會發生什麼事情?後續課程還會學到更多這些概念。 ### 🧠 變數掌握檢測:熟悉度測驗 來測試你對變數的理解: - 你能解釋宣告和賦值變數的差別嗎? - 如果你在宣告之前使用變數,會發生什麼? - 什麼情況下會選擇用 let 而不是 const 宣告變數? ## 常數 有時你需要儲存一個在程式執行期間永遠不會改變的資訊。想像常數就像歐幾里得在古希臘建立的數學原則——一旦被證明並記錄下來,它們就固定不變,供未來所有參考。 常數類似於變數,但有一個重要限制:一旦你給它們值,就不能改變。這種不可變性防止程式中關鍵值被意外修改。 宣告和初始化常數的概念與變數相同,除了使用 const 關鍵字。常數通常採用大寫字母命名。 此程式碼做了什麼: - 建立 名為 MY_VARIABLE 的常數,值為 123 - 使用 大寫的命名慣例 - 防止 未來更改該值 常數有兩個主要規則: - 必須立即給它一個值 — 不允許空白常數! - 永遠不能更改該值 — 嘗試改變會導致錯誤。來看範例: 簡單值 - 以下是不允許的: ```javascript const PI = 3; PI = 4; // 不允許 ``` 需要記住的是: - 嘗試 重新指派常數會造成錯誤 - 保護 重要值免於意外變更 - 確保 值在程式中保持一致 物件參考被保護 - 以下是不允許的: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 不允許 ``` 了解這些概念: - 阻止 用新物件取代整個物件 - 保護 原始物件的參考不變 - 維持 記憶體中物件的一致身份 物件內容不被保護 - 以下是允許的: ```javascript const obj = { a: 3 }; obj.a = 5; // 允許 ``` 解析發生了什麼: - 修改 物件內部屬性值 - 保留 相同的物件參考 - 顯示 物件內容可以更改,而參考保持不變 > 注意,const 意味著參考受保護免於重新指派,但該值本身並不 _不可變_,特別是當它是物件等複雜結構時,內容可以更改。 ## 資料類型 JavaScript 將資訊組織成不同類別,稱為資料類型。這個概念類似古代學者分類知識的方式——亞里斯多德區分不同的推理類型,知道邏輯原則不能同樣套用於詩歌、數學和自然哲學。 資料類型很重要,因為不同的運算需對應不同的資訊類型。就像你不能在人的名字上做數學運算或對數學公式做字母排序一樣,JavaScript 也需要適合的資料類型以避免錯誤並提升可靠度。 變數可以存儲許多不同類型的值,比如數字和文字。這些不同類型的值稱為資料類型。資料類型在軟體開發中非常重要,幫助開發者決定如何撰寫程式碼和軟體的運作方式。此外,有些資料類型具有獨特的功能,幫助轉換或提取額外資訊。 ✅ 資料類型亦稱為 JavaScript 原始資料類型,因為它們是語言提供的最低階資料類型。共有 7 種原始類型:string、number、bigint、boolean、undefined、null 與 symbol。花點時間想像這些原始類型各代表什麼。zebra 是什麼?0 呢?true 又是什麼? ### 數字(Numbers) 數字是 JavaScript 最直觀的資料類型。無論你處理的是整數例如 42、小數例如 3.14,或是負數例如 -5,JavaScript 都能統一處理。 還記得前面存入的 123 嗎?那實際上是數字資料類型: 主要特徵: - JavaScript 自動辨識數字值 - 可用變數執行數學運算 - 不需明確宣告資料類型 變數可以存所有類型數字,包括小數和負數。數字也能跟數學運算子搭配使用,後面數學運算子章節會介紹。 ### 數學運算子 數學運算子讓你在 JavaScript 中執行算術計算。這些運算子遵循數學家數百年來的慣例——正如發展代數符號的作家如 Al-Khwarizmi 所使用的符號。 這些運算子跟傳統數學相同:加號作加法,減號作減法,依此類推。 以下是部分可用運算子: ✅ 試試看吧!在瀏覽器控制台中嘗試一個數學運算。結果會不會讓你驚訝? ### 🧮 數學技能檢測:自信計算 測試你對算術的理解: - /(除法)和 %(餘數)有什麼差別? - 你能預測 10 % 3 的值嗎?(提示:不是 3.33…) - 程式中為什麼會需要餘數運算子? ### 字串(Strings) 在 JavaScript 中,文字資料用字串表示。字串一詞來自把多個字元串連起來的概念,就如同中世紀修道院的抄寫員將字母連成詞句一樣。 字串是網頁開發的基礎。網頁上所有顯示的文字——使用者名稱、按鈕標籤、錯誤訊息、內容——都是字串資料。理解字串對於建立功能性使用者介面至關重要。 字串是由位於單引號或雙引號之間的字元組成。 理解這些概念: - 使用 單引號 ' 或雙引號 " 來定義字串 - 儲存 可包含字母、數字及符號的文字資料 - 賦值 給變數以供後續使用 - 需要 引號以區分文字與變數名稱 寫字串時記得使用引號,否則 JavaScript 會把它當成變數名。 ### 字串格式化 字串操作讓你可以結合文字元素、插入變數,並建立能依程式狀態動態變化的內容。此技巧使你能用程式方式組成文字。 常常你需要將多個字串串接起來——這稱為字串串接(concatenation)。 要串接兩個或多個字串,或將它們連接在一起,請使用 + 運算子。 逐步說明,發生了什麼: - 使用 + 運算子結合多個字串 - 直接 將字串連接在一起,第一個範例中不加空格 - 加入 字串間的空格字元 " " 以提升可讀性 - 插入 標點符號如逗號,讓格式正確 ✅ 為什麼在 JavaScript 中 1 + 1 = 2,但 '1' + '1' = 11?想想看。那 '1' + 1 又是什麼呢? 模板字面量是格式化字串的另一種方式,不過不是用引號,而是用反引號。任何非純文字的東西必須放入佔位符 ${} 內,包括可能是字串的變數。 來了解每個部分: - 使用 反引號 ` `` 來建立模板字面量,而非一般引號 - 直接嵌入 變數,使用 ${} 佔位符語法 - 完全保留 空格和格式 - 提供 更乾淨的方式來建立含有變數的複雜字串 你可以用任一方法達到格式需求,但模板字面量會尊重所有空格和斷行。 ✅ 你何時會使用模板字面量而非普通字串? ### 🔤 字串掌握檢測:文字操作信心 評估你的字串技巧: - 你能解釋為什麼 '1' + '1' 是 '11' 而非 2 嗎? - 哪種字串方法你覺得較易閱讀:串接還是模板字面量? - 如果忘記在字串周圍加引號會怎樣? ### 布林值 (Booleans) 布林值代表最簡單的資料型態:它只能有兩個值之一——true 或 false。這個二元邏輯系統可追溯到十九世紀數學家 George Boole 的布林代數。 雖然簡單,布林值對程式邏輯非常重要。它們讓你的程式根據條件做決策——例如使用者是否已登入,按鈕是否被點擊,或者是否符合某些條件。 布林值只能是兩種:true 或 false。布林值有助於決定在特定條件下哪些程式碼應該執行。在多數情況下,運算子會協助設定布林值,你也會經常看到使用運算子來初始化或更新變數值。 以上範例中,我們: - 建立 一個儲存布林值 true 的變數 - 展示 如何儲存布林值 false - 使用 精確的關鍵字 true 和 false (不需要加引號) - 準備 這些變數在條件語句中使用 ✅ 變數若評估結果為布林 true,即可視為「truthy」。有趣的是,在 JavaScript 中,所有值除了被定義為 falsy 外都是 truthy。 ### 🎯 布林邏輯檢測:決策技能 測試你的布林理解: - 你為什麼認為 JavaScript 除了 true 和 false,還有「truthy」和「falsy」值? - 你能預測以下哪項是 falsy 嗎:0、"0"、[]、"false"? - 布林值在控制程式流程方面有什麼用處? --- ## 📊 你的資料型別工具包總結 ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 說明: 建立一個個人資訊管理器,展示你課程中學到的所有 JavaScript 資料型別,並處理實際生活中的資料場景。 命題: 建立一個 JavaScript 程式,創建一個包含以下內容的使用者個人資料物件:姓名 (字串)、年齡 (數字)、是否為學生狀態 (布林值)、最愛顏色陣列,以及含有街道、城市和郵遞區號屬性的地址物件。包括顯示個人資料與更新各欄位的函式。務必展示字串串接、模板字面量、年齡的算術運算、和學生狀態的布林邏輯。 瞭解更多 agent 模式。 ## 🚀 挑戰 JavaScript 有些行為容易讓開發者措手不及。這是一個經典範例:在瀏覽器主控台輸入 let age = 1; let Age = 2; age == Age,並觀察結果。它回傳 false — 你能判斷原因嗎? 這只是眾多 JavaScript 行為之一。熟悉這些特性將幫助你寫出更可靠的程式,並更有效地除錯。 ## 課後測驗 課後測驗 ## 複習與自學 看看這份 JavaScript 練習清單,試試其中一個。你學到了什麼? ## 作業 資料型別練習 ## 🚀 你的 JavaScript 資料型別精通時間表 ### ⚡ 未來 5 分鐘可做到的事 - [ ] 開啟瀏覽器主控台並建立3個不同資料型別的變數 - [ ] 嘗試挑戰:let age = 1; let Age = 2; age == Age,想清楚為什麼結果是 false - [ ] 練習使用你的名字和喜歡的數字進行字串串接 - [ ] 測試將數字加到字串上會發生什麼 ### 🎯 本小時可完成的目標 - [ ] 完成課後測驗並回顧任何困惑的概念 - [ ] 建立一個簡易計算機,能加減乘除兩個數字 - [ ] 使用模板字面量建立簡單的名字格式化程式 - [ ] 探索 == 與 === 比較運算子的差異 - [ ] 練習不同資料型別間的轉換 ### 📅 你這週的 JavaScript 基礎內容 - [ ] 有信心且有創意地完成作業 - [ ] 建立一個包含所有學習過資料型別的個人資料物件 - [ ] 練習 CSS-Tricks 的 JavaScript 練習 - [ ] 使用布林邏輯建立簡單表單驗證器 - [ ] 試玩陣列和物件資料型別(後續課程預告) - [ ] 加入 JavaScript 社群,並詢問關於資料型別的問題 ### 🌟 你的月度轉變計劃 - [ ] 將資料型別知識整合至較大型的程式專案 - [ ] 瞭解何時以及為何在實際應用中使用各種資料型別 - [ ] 幫助其他初學者理解 JavaScript 基礎 - [ ] 建置管理不同用戶資料類型的小型應用 - [ ] 探索進階資料型別概念,如型態強制轉換與嚴格相等 - [ ] 為開源 JavaScript 專案貢獻文件改進 ### 🧠 最終資料型別精通檢測 慶祝你的 JavaScript 基礎: - 哪種資料型別的行為最讓你驚訝? - 你解釋變數與常數的能力有多自在? - 關於 JavaScript 的型別系統,你發現最有趣的是什麼? - 你想像用這些基礎可以建立什麼現實世界的應用? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件係使用人工智能翻譯服務 Co-op Translator 所翻譯。雖然我們致力於準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們不對因使用此翻譯而產生的任何誤解或誤釋承擔責任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:方法與函數

## 課前小測驗 課前小測驗 反覆撰寫相同程式碼是程式設計中最常見的挫折之一。函數解決此問題,讓你可以將程式碼封裝成可重複使用的區塊。你可以將函數視為讓亨利福特的組裝生產線變革性的標準化零件——一旦你建立了可靠的元件,就可以在需要的地方使用它,而無需重新從零開始構建。 函數允許你將程式碼片段打包,並在程式中多次重用。與其到處複製貼上相同邏輯,不如建立函數並在需要時呼叫。這種方法能保持程式碼整潔,也更容易做出更新。 在本課程中,你將學習如何創建自己的函數、將資訊傳遞給函數並取得有用的回傳結果。你將發現函數和方法的差異,學習現代語法用法,並了解函數如何與其他函數搭配使用。我們將一步步建立這些概念。 [](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") ## 函數 函數是一段自包含的程式碼區塊,用來完成特定任務。它封裝你需要執行的邏輯,隨時可以執行。 與其在程式中重複書寫相同的程式碼,不如將它封裝成函數,並在需要時呼叫。此作法讓你的程式碼保持乾淨,也能更輕鬆維護。試想,如果你需要改變散佈於 20 個不同位置的邏輯,會有多困難。 為函數取有描述性的名稱非常重要。命名良好的函數能清楚傳達其目的——看到 cancelTimer() 就馬上知道它的功能,就像標示清楚的按鈕可以告訴你點擊後會發生什麼一樣。 ## 建立與呼叫函數 讓我們看看如何建立函數。語法遵循固定的模式: 拆解說明: - function 關鍵字告訴 JavaScript「嘿,我正在創建一個函數!」 - nameOfFunction 是你為函數取的描述性名稱 - 括號 () 可放入參數(稍後會講) - 花括號 {} 裡包含你在呼叫函數時要執行的程式碼 讓我們來寫個簡單的問候函數,看看範例: 此函數將在控制台列印 "Hello, world!"。定義完成後,你可以重複多次呼叫它。 執行(或「呼叫」)函數的方法是寫函數名稱,加上括號。JavaScript 允許你在呼叫前或後定義函數——它的執行順序會自動處理。 執行此行程式碼,即會執行 displayGreeting 函數內所有程式碼,並在瀏覽器控制台顯示 "Hello, world!"。你可以多次呼叫此函數。 ### 🧠 函數基礎檢測:建立你的第一個函數 讓我們檢查你對基礎函數的理解: - 你能解釋為何在函數定義要使用花括號 {} 嗎? - 如果寫 displayGreeting 而不加括號會怎樣? - 為什麼有時候要多次呼叫同一個函數? ### 函數最佳實踐 以下是寫出優秀函數的小技巧: - 給函數取清晰且描述性名稱——未來的自己會感謝你! - 使用 camelCase 命名多字函數(例如 calculateTotal,而非 calculate_total) - 保持每個函數專注完成一件事 ## 傳遞資訊給函數 我們剛剛的 displayGreeting 函數很有限——它只能對所有人顯示 "Hello, world!"。參數使函數變得更靈活有用。 參數 就像佔位符,每次使用函數時你可填入不同數值。如此一來,同一函數可針對不同資訊運作。 當你定義函數時,將參數列在括號中,多個參數用逗號分隔: 每個參數就像佔位符,當呼叫函數時會提供實際值,填入這些位置。 讓我們改寫問候函數,接受一個名字參數: 注意我們使用反引號(` `)和 ${} 直接將 name` 插入訊息中——這種方式叫做模板字串,是建立帶有變數字串的好工具。 呼叫函數時,我們可以傳入任何名字: JavaScript 將字串 'Christopher' 指派給 name 參數,並建立個人化訊息 "Hello, Christopher!" ## 預設值 如果我們想讓參數可選怎麼辦?這時預設值非常有用! 假設我們想讓使用者能自訂問候語,但若沒指定,就使用 "Hello" 這個備用詞彙。你可用等號設定預設值,就像設定變數一樣: 這裡 name 仍是必填,salutation 如果沒給值則默認為 'Hello'。 現在我們可用兩種方式呼叫這個函數: 第一次呼叫未指定問候詞,JavaScript 使用預設的 "Hello"。第二次呼叫提供自訂的 "Hi"。這種彈性使函數適應不同場景。 ### 🎛️ 參數掌握檢測:讓函數靈活運用 測試你對參數的理解: - 參數與引數有什麼差異? - 為什麼預設值在實務編程中很有用? - 如果傳入比參數多的引數,會發生什麼? ## 回傳值 到目前為止,我們的函數只在控制台輸出訊息,但如果你想讓函數計算結果並回傳呢? 這就是回傳值的用處。函數不只是輸出,也能把值回傳給呼叫它的程式,你可以存進變數或在其他地方使用。 回傳值用 return 關鍵字,後面接你想回傳的內容: 重要一點:當函數執行到 return,會立刻停止並把該值送回呼叫者。 改寫問候函數,讓它回傳訊息而非直接列印: 現在函數不列印,只建立訊息並回傳。 使用回傳值,就像其他值一樣存入變數: greetingMessage 現在包含 "Hello, Christopher",你可用它顯示在網頁、寄信,或者傳給其他函數。 ### 🔄 回傳值檢測:取得結果 評估你對回傳值的理解: - 函數執行到 return 後,後面的程式會怎樣? - 為什麼回傳值比只列印控制台更好? - 函數可以回傳不同型態的值(字串、數字、布林)嗎? ## 函數作為參數傳入函數 函數可以當作參數傳給其他函數。雖然這聽起來複雜,但這是一個強大的特性,可實現靈活程式設計模式。 這種用法非常常見,當你想說「當某事發生,做[另一件事]」時。譬如「計時結束時,執行這段程式碼」或「使用者點按鈕時,呼叫此函數」。 看看 setTimeout,它是內建函數,會等待一段時間後執行程式碼。我們需要告訴它要執行什麼程式碼——這正是傳入函數的好例子! 試試看這段程式碼——3 秒後會看到訊息: 注意我們傳入 displayDone(沒有括號)給 setTimeout。我們不是自己呼叫函數,而是把函數交給 setTimeout,告訴它:「3 秒後呼叫它。」 ### 匿名函數 有時你只需要一個函數做一件事,不想特別命名。想想看——如果只用一次,為什麼要多個名稱搞亂程式碼? JavaScript 允許你創建 匿名函數——沒有名字的函數,直接寫在需要它的地方。 下面是用匿名函數改寫計時例子: 效果相同,但函數直接定義在 setTimeout 裡,省掉了另写一個函數宣告。 ### 箭頭函數 現代 JavaScript 有更精簡寫函數的方法,稱為 箭頭函數。符號是 =>(像個箭頭,你懂的),非常受開發者歡迎。 箭頭函數省略了 function 關鍵字,寫起來更簡潔。 這是我們計時例子改用箭頭函數寫法: () 是放參數的地方(這例子是空的),接著是箭頭 =>,最後是用花括號包住的函數內容。兩者功能相同,但語法更簡潔。 ### 何時使用哪種寫法 什麼時候該用哪種方法呢?實用指南是:若需多次使用函數,給它命名並獨立定義;若只用一次,可考慮匿名函數。箭頭函數和傳統語法都是可行選擇,但箭頭函數已成現代 JavaScript 代碼庫的主流。 ### 🎨 函數風格掌握檢測:挑選適合語法 測試你的語法理解: - 何時你會偏好箭頭函數而非傳統函數語法? - 匿名函數的主要優勢是什麼? - 你能想出命名函數比匿名函數更好的情境嗎? --- ## 🚀 挑戰 你能用一句話說明函數與方法的差異嗎?試試看! ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 說明: 建立一個數學函數的工具庫,示範本課涵蓋的不同函數概念,包括參數、預設值、回傳值與箭頭函數。 提示: 建立一個名為 mathUtils.js 的 JavaScript 檔案,包含以下函數: 1. 一個函數 add,接收兩個參數並回傳它們的和 2. 一個帶有預設參數值的 multiply 函數(第二個參數預設為 1) 3. 一個箭頭函數 square,接收一個數字並回傳其平方 4. 一個函數 calculate,接收另一個函數參數與兩個數字,將函數套用到兩數字上 5. 展示呼叫每個函數的適當測試案例 在此處了解更多有關 agent 模式 。 ## 課後小測驗 課後小測驗 ## 複習與自學 值得多讀一些關於箭頭函數,因為它們越來越多於程式碼中使用。練習編寫一個函數,然後用這語法重寫。 ## 作業 Fun with Functions --- ## 🧰 你的 JavaScript 函數工具箱總結 --- ## 🚀 你的 JavaScript 函數掌握時間軸 ### ⚡ 接下來 5 分鐘你可以做到 - [ ] 寫一個簡單函數回傳你最喜歡的數字 - [ ] 建立一個有兩個參數回傳相加結果的函數 - [ ] 嘗試將傳統函數轉換為箭頭函數語法 - [ ] 練習挑戰:解釋函數與方法的不同 ### 🎯 你今小時可以完成的事 - [ ] 完成課後小測驗並複習任何令人困惑的概念 - [ ] 建立 GitHub Copilot 挑戰中的數學公用程式庫 - [ ] 創建一個使用另一個函數作為參數的函數 - [ ] 練習撰寫帶有預設參數的函數 - [ ] 嘗試函數回傳值中使用模板字串 ### 📅 你為期一週的函數精通計劃 - [ ] 以創意完成「Fun with Functions」作業 - [ ] 將一些你已有的重複程式碼重構成可重用函數 - [ ] 僅使用函數(不使用全局變數)建置一個簡易計算器 - [ ] 練習使用箭頭函數搭配陣列方法如 map() 和 filter() - [ ] 建立一組用於常見任務的工具函數集合 - [ ] 研習高階函數與函數式程式設計觀念 ### 🌟 你為期一個月的轉變規劃 - [ ] 精通進階函數概念如閉包與作用域 - [ ] 建立一個嚴重使用函數組合的專案 - [ ] 透過改進函數文件來貢獻開源 - [ ] 教導他人函數與不同語法風格 - [ ] 探索 JavaScript 的函數式程式設計範式 - [ ] 建立一個個人可重用函數庫以用於未來專案 ### 🏆 最終函數冠軍檢閱 慶祝你對函數的精通: - 到目前為止,哪個函數是你創建得最有用的? - 學習函數如何改變你對程式碼組織的想法? - 你偏好哪種函數語法?為什麼? - 你會寫函數解決什麼真實世界的問題? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件由 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於確保翻譯的準確性,但請注意自動翻譯可能存在錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們對因使用本翻譯而產生的任何誤解或誤譯概不負責。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:作出決策

你有沒有想過應用程式如何作出智慧決策?比如導航系統如何選擇最快路線,或者恆溫器如何決定何時開啟暖氣?這就是程式設計中決策的基本概念。 正如查爾斯·巴貝奇的分析機設計用以根據條件執行不同的操作序列,現代 JavaScript 程式需要根據不同情況做出選擇。這種分支和決策的能力讓靜態程式碼轉變為回應式且智能的應用。 在這堂課中,你將學習如何在程式中實作條件邏輯。我們將探討條件語句、比較運算符和邏輯表達式,使你的程式能評估情況並作出適當回應。 ## 課前測驗 課前測驗 能夠做出決策並控制程式流程是程式設計的基本面向。本節涵蓋如何使用布林值與條件邏輯控制 JavaScript 程式的執行路徑。 [](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") ## 布林值簡短回顧 在探索決策前,讓我們回顧前一課提過的布林值。此值以數學家喬治·布爾命名,代表二元狀態——true 或 false,無模糊空間,沒有中間值。 這些二元值構成所有計算邏輯的基礎。你程式做出的每個決策最終都會被簡化為布林評估。 建立布林變數相當簡單: 此程式建立兩個顯式布林值變數。 ✅ 布林值名稱來自英國數學家、哲學家及邏輯學家喬治·布爾(1815–1864)。 ## 比較運算子與布林值 在實務中,你很少會手動設布林值。相反地,你會透過評估條件來產生它們:「這個數字是否大於那個?」或者「這些值相等嗎?」 比較運算子讓你進行這些評估。它們比較值並根據運算元間的關係回傳布林結果。 ✅ 在瀏覽器主控台動手寫些比較來測試你的理解,有沒有什麼回傳結果讓你感到意外? ### 🧠 比較運算邏輯測驗:理解布林邏輯 測試你對比較的理解: - 你認為為什麼通常偏好使用 ===(嚴格相等)而不是 ==(寬鬆相等)? - 你能預測 5 === '5' 和 5 == '5' 的回傳結果嗎? - !== 與 != 有什麼差異? ## If 語句 if 語句就像在程式碼裡問問題:「如果這個條件成立,就執行這件事。」這應該是你在 JavaScript 中做決策最重要的工具。 它的工作原理如下: 條件放在括號內,如果為 true,JavaScript 就會執行大括號內的程式碼。若為 false,則跳過整個區塊。 你通常會使用比較運算子來建立這些條件。來看看一個實例: 因為 1000 >= 800 評估為 true,所以區塊內的程式碼會執行,控制台顯示 "Getting a new laptop!"。 ## If..Else 語句 但是如果你想讓程式在條件為 false 時做不同的事呢?這時就用到 else——它就像備案。 else 語句讓你說:「如果這個條件不成立,改做這件事。」 因為 500 >= 800 是 false,JavaScript 會跳過第一個區塊,執行 else 區塊。你會在控制台看到 "Can't afford a new laptop, yet!"。 ✅ 在瀏覽器主控台測試這段程式碼以及下方程式碼。透過改變 currentMoney 和 laptopPrice 變數的值,看看控制台輸出有何不同。 ### 🎯 If-Else 邏輯檢核:分支路徑 評估你的條件邏輯理解: - 如果 currentMoney 恰好等於 laptopPrice,程式會怎麼執行? - 你能想到什麼現實情景中 if-else 邏輯特別有用嗎? - 你會如何擴展此邏輯來處理多個價位範圍? ## Switch 語句 有時候你需要將一個值與多個選項比較。雖然可以用多個 if..else 串接,但寫起來會很難管理。switch 語句提供更清晰的結構來處理多個離散值。 這個概念類似早期電話交換機中的機械切換系統——一個輸入值決定執行哪條路徑。 其結構如下: - JavaScript 執行表達式一次 - 搜尋每個 case 以尋找匹配 - 找到匹配時執行該代碼塊 - break 告訴 JavaScript 停止並跳出 switch - 若沒有匹配,執行 default 區塊(若有) 在此範例中,JavaScript 發現 dayNumber 是 2,找到相符的 case 2,設定 dayName 為 "Tuesday",然後跳出 switch。結果?在控制台印出 "Today is Tuesday"。 ✅ 在瀏覽器主控台測試這段程式碼以及下方程式碼。改變變數 a 的值看看控制台印出了什麼。 ### 🔄 Switch 語句掌握:多重選擇 測試你對 switch 理解: - 如果忘了寫 break 會發生什麼事? - 何時你會用 switch 而不是多個 if-else? - 即使你以為已覆蓋所有可能性,為什麼 default 仍然有用? ## 邏輯運算子與布林值 複雜決策通常需要同時評估多個條件。就像布林代數讓數學家能結合邏輯表達式一樣,程式設計提供邏輯運算子來連接多個布林條件。 這些運算子讓你能結合簡單真偽判斷,寫出複雜條件邏輯。 這些運算子讓你用很有用的方式結合條件: - AND (&&) 代表兩個條件都必須成立 - OR (||) 代表至少一個條件成立 - NOT (!) 把真變假,假變真 ## 結合邏輯運算子的條件與決策 我們用一個較實際的範例來看看這些邏輯運算子: 此例中:我們計算 20% 折扣價(640),接著評估是否有足夠資金支付原價或折扣價。因 600 低於 640,條件會是 false 吗?(譯者註:請以原文程式碼檢視詳細結果) ### 🧮 邏輯運算子檢核:結合條件 測試你對邏輯運算子的理解: - 在 A && B 表達式中,如果 A 為假會怎樣?B 還會不會被評估? - 你能想到什麼情況需同時使用三種運算子 (&&, ||, !)? - !user.isActive 與 user.isActive !== true 有什麼差別? ### 否定運算子 有時候反過來思考更容易。比如不是問「使用者有沒有登入?」而是「使用者沒有登入嗎?」驚嘆號 (!) 運算子會幫你反轉邏輯。 ! 運算子就像說「相反的…」——如果是 true,它變 false,反之亦然。 ### 三元運算子 對簡單條件賦值,JavaScript 提供了 三元運算子。這種簡潔語法讓你能在一行寫條件,適合根據條件賦予兩種值之一。 它讀起來像個問題:「這個條件成立嗎?若是,用這個值。否則用那個值。」 下面是一個更具體例子: ✅ 花點時間多讀幾遍這段程式碼。你理解這些運算子是如何運作的嗎? 這行程式碼的意思是:「firstNumber 是否大於 secondNumber?是的話,biggestNumber 等於 firstNumber;否則等於 secondNumber。」 三元運算子其實是這段傳統 if..else 程式碼的簡短寫法: 兩種寫法結果相同。三元運算子簡潔,傳統 if-else 可能在複雜條件下較易讀。 --- ## 🚀 挑戰 先用邏輯運算子寫一段程式,再改寫成三元運算子語法。你偏好使用哪種語法? --- ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 說明: 創建一個完整的成績計算器,展示本課的多種決策概念,包括 if-else 語句、switch 語句、邏輯運算子和三元運算子。 指示: 撰寫 JavaScript 程式,輸入學生分數(0-100),依據以下標準判斷字母等級: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 60 以下 需求: 1. 使用 if-else 語句判斷字母成績 2. 使用邏輯運算子檢查學生是否通過(grade >= 60)且有榮譽(grade >= 90) 3. 使用 switch 陳述式為每個等第提供具體反饋 4. 使用三元運算子判斷學生是否符合下一課程資格(grade >= 70) 5. 包含輸入驗證以確保分數介於 0 到 100 之間 使用各種分數測試你的程式,包括邊界條件如 59、60、89、90 及無效輸入。 在此了解更多有關 agent mode。 ## 課後小測驗 課後小測驗 ## 複習與自學 閱讀更多使用者可用的各種運算子,請見 MDN。 瀏覽 Josh Comeau 精彩的 operator lookup! ## 作業 運算子 --- ## 🧠 你的決策工具箱總結 --- ## 🚀 你的 JavaScript 決策掌握時間表 ### ⚡ 接下來 5 分鐘你可以做的事 - [ ] 在瀏覽器主控台練習比較運算子 - [ ] 撰寫簡單的 if-else 陳述式檢查你的年齡 - [ ] 嘗試挑戰:使用三元運算子改寫 if-else - [ ] 測試不同「真值」與「假值」的行為 ### 🎯 這小時內你能完成的目標 - [ ] 完成課後小測驗並複習不熟悉的概念 - [ ] 建置 GitHub Copilot 挑戰的綜合成績計算機 - [ ] 為真實情境(如穿衣選擇)製作簡單決策樹 - [ ] 練習使用邏輯運算子結合多重條件 - [ ] 嘗試各種用途的 switch 陳述式 ### 📅 一週內的邏輯掌握計畫 - [ ] 完成具創意範例的運算子作業 - [ ] 架設使用多種條件結構的迷你測驗應用 - [ ] 建立能檢查多項輸入條件的表單驗證器 - [ ] 練習 Josh Comeau 的 operator lookup 練習題 - [ ] 重構現有程式碼以使用更合適的條件結構 - [ ] 研讀短路評估與效能影響 ### 🌟 一個月的轉變計劃 - [ ] 精通複雜的巢狀條件並維持程式可讀性 - [ ] 建置具精緻決策邏輯的應用程式 - [ ] 透過改進既有專案的條件邏輯參與開源貢獻 - [ ] 教導他人不同條件結構及使用時機 - [ ] 探索函式化程式設計在條件邏輯中的應用 - [ ] 建立個人條件判斷最佳實務參考指南 ### 🏆 決策大師最終檢閱 慶祝你的邏輯思維精通: - 你成功實作過最複雜的決策邏輯是什麼? - 哪種條件結構對你而言最自然?為什麼? - 學習邏輯運算子如何改變你的問題解決方式? - 哪項現實世界的應用最能受益於精巧的決策邏輯? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件乃使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於確保準確性,但請注意自動翻譯可能存在錯誤或不準確之處。原始語言版本的文件應被視為具權威性的資料來源。對於重要資訊,建議尋求專業人工翻譯。我們不對使用本翻譯所引致的任何誤解或誤釋承擔責任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:陣列與迴圈

## 課前測驗 課前測驗 有沒有想過網站如何追蹤購物車的商品或顯示你的好友清單?這就是陣列與迴圈發揮作用的地方。陣列就像數位容器,可以存放多個資訊項目,而迴圈則讓你有效率地處理所有資料,避免重複撰寫程式碼。 這兩個觀念共同構成了處理程式中資訊的基礎。你將學會如何從手動撰寫每一步,轉變為創造聰明且高效率的程式碼,快速處理上百甚至上千個項目。 學完本課程後,你將能了解如何用少量程式碼完成複雜資料處理任務。讓我們來探索這些重要的程式設計概念。 [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## 陣列 把陣列想像成數位檔案櫃——不像一個抽屜只能放一份文件,你可以在一個結構化的容器中組織多個相關項目。在程式語言中,陣列讓你能把多項資訊集中存放於一個有序的套件。 無論你在建立相片集、管理待辦事項清單,或是追蹤遊戲中的高分,陣列都提供了資料組織的基礎。讓我們看看它們的運作方式。 ✅ 陣列就在我們周遭!你能舉出生活中陣列的例子嗎?例如太陽能電池板陣列? ### 建立陣列 建立陣列非常簡單——只要用中括號! 這裡發生了什麼? 你用中括號 [] 建立了一個空容器。就像一個空的圖書架,準備好放進你想整理的書本。 你也可以直接在建立的時候填入初始值: 有趣的觀察: - 你可以在同一個陣列裡存放文字、數字,甚至是 true/false 值 - 每項目以逗號分隔,非常簡單! - 陣列非常適合把相關資訊整理在一起 ### 陣列索引 這點一開始可能會覺得奇怪:陣列裡的項目編號從 0 開始,而非 1。這種從零開始的編號方式源於電腦記憶體的運作原理,是電腦語言(如 C 語言)早期慣例。陣列中每個位置都有自己的位址編號,稱為索引。 ✅ 陣列從零開始編號會讓你感到驚訝嗎?有些程式語言從 1 開始編號。這背後有有趣故事,你可以在維基百科閱讀了解。 存取陣列元素: 解說: - 使用中括號搭配索引號碼來取得元素 - 回傳該位置上所儲存的值 - 從 0 開始編號,第一個元素索引是 0 修改陣列元素: 上例中,我們: - 將索引 4 處的元素從 "Rocky Road" 改為 "Butter Pecan" - 新增了一個索引 5 的元素 "Cookie Dough" - 新增元素時,陣列長度會自動擴展 ### 陣列長度與常用方法 陣列內建屬性和方法,讓你更輕鬆地操作資料。 取得陣列長度: 重點摘要: - 回傳陣列中元素的總數 - 元素增加或刪除時,長度會自動更新 - 可用於迴圈或驗證元素數量 重要的陣列方法: 這些方法的作用: - push() 往陣列尾端新增元素,unshift() 往陣列前端新增元素 - pop() 從陣列尾端移除元素,shift() 從陣列前端移除元素 - indexOf() 找出元素索引,includes() 檢查元素是否存在 - 回傳相關值,如被移除的元素或索引位置 ✅ 試試看!打開瀏覽器的控制台,創建並操作屬於你自己的陣列。 ### 🧠 陣列基礎檢核:組織你的資料 挑戰你的陣列概念: - 為什麼陣列的計數是從 0 開始,而不是從 1? - 如果你試著存取不存在的索引(像是在五元素陣列中用 arr[100])會發生什麼? - 你能想到三個現實世界中陣列的應用情境嗎? ## 迴圈 想像狄更斯小說中學生懲罰要在黑板上不停抄寫句子。試想你若能簡單指示「把這句話寫 100 次」,然後自動完成。這正是迴圈在程式中的作用。 迴圈就像是勤快又不會疲倦的助手,能無誤地重複執行任務。無論你要檢查購物車每個商品,還是顯示相簿全部照片,迴圈都能有效處理重複動作。 JavaScript 提供多種迴圈形式。讓我們逐一瞭解它們,以及適合何時使用。 ### For 迴圈 for 迴圈就像設定計時器一樣——你確定想執行幾次。它十分有組織且可預期,特別適合操作陣列或計數任務。 For 迴圈結構: 一步步發生什麼: - 初始化計數器變數 i 為 0 - 條件判斷在每次迴圈開始前:i < 10 - 條件為真時執行程式區塊 - 每次迴圈後用 i++ 增加 i 的值 1 - 當條件不成立(i 達 10)時停止 ✅ 在瀏覽器控制台執行此程式。若你更改計數器、條件或增量部分,會有什麼變化?你能控制使它倒數嗎? ### 🗓️ For 迴圈精通檢核:有掌控力的重複 考考你對 for 迴圈的理解: - for 迴圈有哪三個部分?它們分別負責什麼? - 如何反向遍歷陣列? - 忘記寫增量部分 (i++) 會怎樣? ### While 迴圈 while 迴圈就像說「繼續做這件事直到...」——你可能不知道究竟會跑幾次,但知道何時停下。它非常適用向使用者重複要求輸入直到符合條件,或搜尋資料直到找到目標。 While 迴圈特性: - 只要條件為真就會持續執行 - 需要自行管理計數器變數 - 條件判斷在每次迴圈前執行 - 若條件不會成假值,可能造成無限迴圈 看懂這些範例: - 計數器 i 在迴圈內手動遞增 - 避免無限迴圈 - 案例示範 使用者輸入及有限次數嘗試 - 安全機制避免永遠執行的狀況 ### ♾️ While 迴圈智慧檢核:條件驅動的重複 挑戰你對 while 迴圈的理解: - 使用 while 迴圈最大危險是什麼? - 什麼時候會選擇 while 迴圈而非 for 迴圈? - 要怎麼防止無限迴圈? ### 現代迴圈替代寫法 JavaScript 有更現代的迴圈語法,使程式碼更易讀且錯誤率降低。 For...of 迴圈 (ES6+): for...of 的優點: - 免除索引管理和 off-by-one 錯誤 - 直接取得陣列元素 - 提升程式碼清晰度並簡化語法 forEach 方法: forEach 需知: - 對陣列中每個元素執行函式 - 函式參數包含元素值與索引 - 無法中途停止(不像傳統迴圈) - 回傳undefined(不產生新陣列) ✅ 你為什麼會選擇 for 迴圈還是 while 迴圈?在 StackOverflow 上有 1.7 萬人討論這問題,裡面的一些意見可能讓你感興趣。 ### 🎨 現代迴圈語法檢核:擁抱 ES6+ 評估你對現代 JavaScript 的認識: - for...of 比傳統 for 迴圈有什麼優勢? - 什麼時候還是會選擇傳統 for 迴圈? - forEach 和 map 有什麼不同? ## 迴圈與陣列 將陣列與迴圈結合能創造強大的資料處理能力。這組合是許多程式任務的根本,從顯示清單到統計計算都用得到。 傳統陣列處理: 了解各種做法: - 透過陣列長度決定迴圈範圍 - 傳統 for 迴圈使用索引存取元素 - for...of 迴圈直接存取元素 - 每個元素處理一次 實用數據處理範例: 本程式運作方式: - 初始化總和與最大值/最小值追蹤變數 - 以單一高效迴圈處理所有成績 - 累積計算平均所需總分 - 遍歷過程中更新最高與最低分數 - 迴圈結束時計算統計結果 ✅ 在瀏覽器控制台嘗試跑自己的陣列迴圈練習。 --- ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 建立一個綜合資料處理函式,結合陣列與迴圈來分析資料集並產生有意義的洞察。 提示: 建立一個名為 analyzeGrades 的函式,該函式接受一個包含學生分數物件的陣列(每個物件含有 name 和 score 屬性),並回傳一個含有統計資料的物件,包括最高分、最低分、平均分數、及格學生數(分數 >= 70)、和超過平均分數的學生名字陣列。請在解答中至少使用兩種不同的迴圈類型。 詳細了解 agent 模式。 ## 🚀 挑戰 JavaScript 提供了幾個現代陣列方法,可以取代特定任務的傳統循環。探索 forEach、for-of、map、filter 和 reduce。 你的挑戰: 使用至少三種不同的陣列方法重構學生成績範例。注意使用現代 JavaScript 語法後,程式碼變得多麼乾淨且易讀。 ## 課後測驗 課後測驗 ## 複習與自我學習 JavaScript 中的陣列附帶了許多方法,對於資料操作非常有用。閱讀這些方法 並嘗試一些(如 push、pop、slice 和 splice)在你自己創建的陣列上。 ## 作業 循環陣列 --- ## 📊 你的陣列與循環工具總結 --- ## 🚀 你的陣列與循環精通時間軸 ### ⚡ 接下來 5 分鐘可以做什麼 - [ ] 建立你最喜愛電影的陣列並存取特定元素 - [ ] 撰寫一個從 1 數到 10 的 for 迴圈 - [ ] 嘗試課堂上的現代陣列方法挑戰 - [ ] 在瀏覽器控制台練習陣列索引 ### 🎯 這小時能達成的目標 - [ ] 完成課後測驗並複習任何有挑戰的概念 - [ ] 建立 GitHub Copilot 挑戰中的綜合成績分析器 - [ ] 創建一個簡單的購物車,能新增和移除商品 - [ ] 練習不同迴圈類型的轉換 - [ ] 嘗試 push、pop、slice 和 splice 等陣列方法 ### 📅 你一週的資料處理旅程 - [ ] 完成「循環陣列」作業,並加入創意強化 - [ ] 使用陣列和循環建立待辦清單應用程式 - [ ] 創建一個簡單的數據統計計算器 - [ ] 練習 MDN 陣列方法 - [ ] 建立照片集或音樂播放清單介面 - [ ] 探索函式式編程中的 map、filter 和 reduce ### 🌟 你一個月的轉變 - [ ] 精通進階陣列操作與效能優化 - [ ] 建立完整的數據可視化儀表板 - [ ] 參與開源專案中涉及資料處理的貢獻 - [ ] 用實務範例教導他人陣列與循環 - [ ] 創建個人可重複使用的資料處理函式庫 - [ ] 探索基於陣列的演算法和資料結構 ### 🏆 最終資料處理冠軍回顧 慶祝你對陣列和循環的精通: - 你學會的最實用的陣列操作是什麼,對真實世界應用最有幫助? - 哪種迴圈型態你覺得最自然,為什麼? - 理解陣列和循環後,你組織資料的方式有什麼改變? - 下一個你想挑戰的複雜資料處理任務是什麼? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件由 AI 翻譯服務 Co-op Translator 自動翻譯而成。儘管我們盡力確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於關鍵資訊,建議採用專業人工翻譯。我們對因使用本翻譯而引起的任何誤解或誤釋概不負責。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 簡介

JavaScript 是網頁的語言。在這四節課中,你將學習它的基礎知識。 ### 主題 1. 變數與資料型別 2. 函式與方法 3. 使用 JavaScript 做出決策 4. 陣列與迴圈 ### 鳴謝 這些課程由 Jasmine Greenaway、Christopher Harrison 和 Chris Noring 用 ♥️ 編寫。 免責聲明: 本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

javascript

JavaScript 基礎:資料型別

資料型別是 JavaScript 中的基本概念之一,您在每個程式中都會遇到它。可以將資料型別想像成古代亞歷山大圖書館的檔案系統——他們有專門存放詩歌、數學和歷史記錄的地方。JavaScript 以類似的方式組織資訊,為不同類型的資料分配不同的類別。 在本課程中,我們將探討使 JavaScript 運作的核心資料型別。您將學習如何處理數字、文字、真假值,並了解為什麼選擇正確的型別對您的程式至關重要。這些概念起初可能看起來很抽象,但隨著練習,它們會變得自然。 理解資料型別將使 JavaScript 的其他部分更加清晰。就像建築師在建造大教堂之前需要了解不同的建材一樣,這些基礎將支持您未來的所有建設。 ## 課前測驗 課前測驗 本課程涵蓋了 JavaScript 的基礎知識,這是一種為網頁提供互動性的語言。 [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript 中的變數") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript 中的資料型別") 讓我們從變數和填充它們的資料型別開始吧! ## 變數 變數是程式設計中的基本構建塊。就像中世紀的煉金術士用來存放不同物質的標籤罐一樣,變數讓您可以存儲資訊並給它一個描述性名稱,以便稍後引用它。需要記住某人的年齡嗎?將其存儲在名為 age 的變數中。想要追蹤使用者的名字?將其保存在名為 userName 的變數中。 我們將專注於使用 JavaScript 創建變數的現代方法。您在此學到的技術代表了多年來語言的演變以及程式設計社群制定的最佳實踐。 創建和宣告變數的語法如下 [關鍵字] [名稱]。它由以下兩部分組成: - 關鍵字。使用 let 表示可以更改的變數,或使用 const 表示保持不變的值。 - 變數名稱,這是您自己選擇的描述性名稱。 ✅ 關鍵字 let 是在 ES6 中引入的,為您的變數提供所謂的 _區塊作用域_。建議使用 let 或 const 而不是舊的 var 關鍵字。我們將在未來的部分中更深入地探討區塊作用域。 ### 任務 - 使用變數 1. 宣告變數。讓我們從創建第一個變數開始: ```javascript let myVariable; ``` 這完成了什麼: - 這告訴 JavaScript 創建一個名為 myVariable 的存儲位置 - JavaScript 為此變數分配了內存空間 - 該變數目前沒有值(undefined) 2. 賦值。現在讓我們在變數中放入一些內容: ```javascript myVariable = 123; ``` 賦值如何運作: - = 運算符將值 123 賦給我們的變數 - 該變數現在包含此值,而不是未定義 - 您可以在整個程式碼中使用 myVariable 引用此值 > 注意:在本課程中使用 = 表示我們使用了“賦值運算符”,用於為變數設置值。它並不表示相等。 3. 更聰明的方式。事實上,讓我們將這兩個步驟結合起來: ```javascript let myVariable = 123; ``` 這種方法更高效: - 您可以在一條語句中宣告變數並賦值 - 這是開發者的標準做法 - 它在保持清晰的同時減少了程式碼的長度 4. 改變主意。如果我們想存儲另一個數字怎麼辦? ```javascript myVariable = 321; ``` 理解重新賦值: - 該變數現在包含 321 而不是 123 - 之前的值被替換——變數一次只存儲一個值 - 這種可變性是使用 let 宣告的變數的關鍵特性 ✅ 試試看!您可以直接在瀏覽器中編寫 JavaScript。打開瀏覽器窗口並導航到開發者工具。在控制台中,您會找到提示;輸入 let myVariable = 123,按回車,然後輸入 myVariable。會發生什麼?注意,您將在後續課程中了解更多這些概念。 ### 🧠 變數掌握檢查:熟悉變數 讓我們看看您對變數的理解程度: - 您能解釋宣告變數和賦值變數的區別嗎? - 如果您在宣告變數之前嘗試使用它,會發生什麼? - 什麼時候您會選擇使用 let 而不是 const? ## 常數 有時您需要存儲在程式執行期間永遠不應更改的資訊。可以將常數想像成古希臘的歐幾里得建立的數學原理——一旦被證明和記錄,它們就成為未來所有參考的固定值。 常數的運作方式類似於變數,但有一個重要的限制:一旦您為其賦值,就不能更改它的值。這種不可變性有助於防止程式中對關鍵值的意外修改。 常數的宣告和初始化遵循與變數相同的概念,但使用 const 關鍵字。常數通常使用全大寫字母命名。 這段程式碼的作用: - 創建一個名為 MY_VARIABLE 的常數,值為 123 - 使用常數的全大寫命名慣例 - 防止未來對此值的任何更改 常數有兩個主要規則: - 必須立即為其賦值——不允許空常數! - 永遠不能更改該值——如果您嘗試更改,JavaScript 會拋出錯誤。讓我們看看這是什麼意思: 簡單值 - 以下是不允許的: ```javascript const PI = 3; PI = 4; // 不允許 ``` 您需要記住的事情: - 嘗試重新賦值常數會導致錯誤 - 保護重要值免受意外更改 - 確保值在整個程式中保持一致 物件引用受保護 - 以下是不允許的: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 不允許 ``` 理解這些概念: - 防止用新物件替換整個物件 - 保護對原始物件的引用 - 保持物件在內存中的身份 物件值未受保護 - 以下是允許的: ```javascript const obj = { a: 3 }; obj.a = 5; // 允許 ``` 分解發生的事情: - 修改物件內的屬性值 - 保持相同的物件引用 - 展示物件內容可以更改,而引用保持不變 > 注意,const 表示引用受到重新賦值的保護。然而,值並非 _不可變_,尤其是像物件這樣的複雜結構時,值仍然可以改變。 ## 資料型別 JavaScript 將資訊組織成不同的類別,稱為資料型別。這一概念類似於古代學者如何分類知識——亞里士多德區分了不同類型的推理,知道邏輯原則不能統一應用於詩歌、數學和自然哲學。 資料型別很重要,因為不同的操作需要不同類型的資訊。就像您不能對人的名字進行算術運算或對數學方程式進行字母排序一樣,JavaScript 需要每個操作的適當資料型別。理解這一點可以防止錯誤並使您的程式碼更可靠。 變數可以存儲許多不同類型的值,例如數字和文字。這些不同類型的值被稱為資料型別。資料型別是軟體開發的重要組成部分,因為它幫助開發者決定程式碼的編寫方式以及軟體的運行方式。此外,某些資料型別具有獨特的功能,有助於轉換或提取值中的其他資訊。 ✅ 資料型別也被稱為 JavaScript 的基本資料型別,因為它們是語言提供的最低層次資料型別。JavaScript 有 7 種基本資料型別:string、number、bigint、boolean、undefined、null 和 symbol。花點時間想像一下這些基本型別可能代表什麼。什麼是 zebra?0 是什麼?true 又是什麼? ### 數字 數字是 JavaScript 中最簡單的資料型別。無論您是處理像 42 這樣的整數、像 3.14 這樣的小數,還是像 -5 這樣的負數,JavaScript 都能統一處理它們。 還記得我們之前的變數嗎?我們存儲的 123 實際上是一個數字型別: 主要特徵: - JavaScript 自動識別數值 - 您可以使用這些變數進行數學運算 - 不需要明確的型別宣告 變數可以存儲所有類型的數字,包括小數或負數。數字還可以與算術運算符一起使用,這部分內容在下一節中介紹。 ### 算術運算符 算術運算符允許您在 JavaScript 中執行數學計算。這些運算符遵循數學家幾個世紀以來使用的相同原則——與發展代數符號的學者如 Al-Khwarizmi 的作品中出現的符號相同。 這些運算符的工作方式與傳統數學中的預期一致:加號表示加法,減號表示減法,依此類推。 在執行算術功能時可以使用多種類型的運算符,以下列出了一些: ✅ 試試看!在瀏覽器的控制台中嘗試進行算術運算。結果是否讓您感到驚訝? ### 🧮 數學技能檢查:自信計算 測試您的算術理解: - /(除法)和 %(餘數)之間有什麼區別? - 您能預測 10 % 3 的結果嗎?(提示:不是 3.33...) - 為什麼餘數運算符在程式設計中可能很有用? ### 字串 在 JavaScript 中,文字資料以字串表示。“字串”這個術語源於字符按順序串聯在一起的概念,就像中世紀修道院的抄寫員將字母連接起來形成手稿中的單詞和句子一樣。 字串是網頁開發的基礎。網站上顯示的每一段文字——使用者名稱、按鈕標籤、錯誤訊息、內容——都以字串資料的形式處理。理解字串對於創建功能性使用者介面至關重要。 字串是一組位於單引號或雙引號之間的字符。 理解這些概念: - 使用單引號 ' 或雙引號 " 定義字串 - 存儲可以包含字母、數字和符號的文字資料 - 賦值字串值給變數以供稍後使用 - 需要引號以區分文字和變數名稱 記住在編寫字串時使用引號,否則 JavaScript 會假設它是一個變數名稱。 ### 格式化字串 字串操作允許您結合文字元素、合併變數並創建響應程式狀態的動態內容。這項技術使您能夠以程式化的方式構建文字。 通常您需要將多個字串連接在一起——這個過程稱為串接。 要串聯兩個或多個字串,或將它們結合在一起,可以使用 + 運算符。 逐步解析以下內容: - 使用 + 運算符結合多個字串 - 在第一個範例中,直接連接字串,沒有空格 - 在字串之間添加空格字符 " ",以提高可讀性 - 插入標點符號,例如逗號,以創建正確的格式 ✅ 為什麼在 JavaScript 中 1 + 1 = 2,但 '1' + '1' = 11?想一想。那麼 '1' + 1 又會怎麼樣? 模板字串是另一種格式化字串的方法,與其使用引號,不如使用反引號。任何非純文字的內容都必須放在 ${ } 的佔位符中,包括可能是字串的變數。 讓我們理解每個部分: - 使用反引號 ` `` 而不是普通引號來創建模板字串 - 使用 ${} 的佔位符語法直接嵌入變數 - 精確保留空格和格式,與原始內容一致 - 提供了一種更簡潔的方式來使用變數創建複雜的字串 你可以使用任一方法來實現你的格式化目標,但模板字串會保留所有的空格和換行。 ✅ 什麼時候應該使用模板字串而不是普通字串? ### 🔤 字串掌握檢查:文字操作信心 評估你的字串技能: - 你能解釋為什麼 '1' + '1' 等於 '11' 而不是 2 嗎? - 你覺得哪種字串方法更易讀:串聯還是模板字串? - 如果忘記在字串周圍加上引號會發生什麼? ### 布林值 布林值是最簡單的數據形式:它們只能持有兩個值——true 或 false。這種二元邏輯系統可以追溯到19世紀數學家喬治·布爾的布爾代數。 儘管布林值很簡單,但它們對程式邏輯至關重要。它們使你的程式碼能夠根據條件做出決策——例如用戶是否已登錄、按鈕是否被點擊,或者是否滿足某些條件。 布林值只能是兩個值:true 或 false。布林值可以幫助決定在滿足某些條件時應執行哪些程式碼行。在許多情況下,運算符有助於設置布林值,並且你會經常注意到變數被初始化或其值通過運算符進行更新。 在上面的範例中,我們: - 創建了一個存儲布林值 true 的變數 - 展示了如何存儲布林值 false - 使用了精確的關鍵字 true 和 false(不需要引號) - 準備這些變數以供條件語句使用 ✅ 如果一個變數的值被評估為布林值 true,則可以認為該變數是“真值”。有趣的是,在 JavaScript 中,所有值都是真值,除非被定義為假值。 ### 🎯 布林邏輯檢查:決策能力 測試你的布林理解: - 你認為為什麼 JavaScript 除了 true 和 false 之外,還有“真值”和“假值”? - 你能預測以下哪些是假值嗎:0、"0"、[]、"false"? - 布林值如何在控制程式流程中發揮作用? --- ## 📊 你的數據類型工具包摘要 ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 創建一個個人信息管理器,展示你在本課中學到的所有 JavaScript 數據類型,同時處理真實世界的數據場景。 提示: 建立一個 JavaScript 程式,創建一個包含以下內容的用戶資料物件:人的名字(字串)、年齡(數字)、是否是學生的狀態(布林值)、喜愛的顏色(陣列),以及包含街道、城市和郵政編碼屬性的地址物件。包括顯示個人資料信息和更新單個字段的函數。確保展示字串串聯、模板字串、年齡的算術運算,以及學生狀態的布林邏輯。 了解更多 Agent 模式 的信息。 ## 🚀 挑戰 JavaScript 有一些行為可能會讓開發者感到意外。以下是一個經典的例子:嘗試在瀏覽器控制台中輸入:let age = 1; let Age = 2; age == Age,並觀察結果。它返回 false——你能判斷原因嗎? 這是許多值得理解的 JavaScript 行為之一。熟悉這些特性將幫助你編寫更可靠的程式碼並更有效地排除問題。 ## 課後測驗 課後測驗 ## 回顧與自學 查看 這份 JavaScript 練習題列表 並嘗試完成其中一題。你學到了什麼? ## 作業 數據類型練習 ## 🚀 你的 JavaScript 數據類型掌握時間表 ### ⚡ 你可以在接下來的5分鐘內完成的事情 - [ ] 打開瀏覽器控制台,創建3個具有不同數據類型的變數 - [ ] 嘗試挑戰:let age = 1; let Age = 2; age == Age,並找出為什麼它是 false - [ ] 使用你的名字和喜歡的數字練習字串串聯 - [ ] 測試當你將數字加到字串時會發生什麼 ### 🎯 你可以在這一小時內完成的事情 - [ ] 完成課後測驗並回顧任何令人困惑的概念 - [ ] 創建一個迷你計算器,可以進行加、減、乘、除兩個數字 - [ ] 使用模板字串構建一個簡單的名字格式化工具 - [ ] 探索 == 和 === 比較運算符的區別 - [ ] 練習在不同數據類型之間進行轉換 ### 📅 你的為期一周的 JavaScript基礎 - [ ] 自信且有創意地完成作業 - [ ] 使用所學的所有數據類型創建一個個人資料物件 - [ ] 使用 CSS-Tricks 的 JavaScript 練習題 進行練習 - [ ] 使用布林邏輯構建一個簡單的表單驗證器 - [ ] 嘗試使用陣列和物件數據類型(預覽即將到來的課程) - [ ] 加入 JavaScript 社群並就數據類型提出問題 ### 🌟 你的為期一個月的轉變 - [ ] 將數據類型知識整合到更大的程式專案中 - [ ] 理解在真實應用中何時以及為什麼使用每種數據類型 - [ ] 幫助其他初學者理解 JavaScript 基礎 - [ ] 建立一個小型應用程式來管理不同類型的用戶數據 - [ ] 探索進階數據類型概念,例如類型強制和嚴格相等性 - [ ] 通過改進文檔為開源 JavaScript 專案做出貢獻 ### 🧠 最終數據類型掌握檢查 慶祝你的 JavaScript 基礎: - 哪種數據類型的行為最讓你感到驚訝? - 你對向朋友解釋變數與常數的區別有多自信? - 你發現 JavaScript 的類型系統中最有趣的事情是什麼? - 你能想像用這些基礎知識構建哪些真實應用? --- 免責聲明: 本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或誤釋不承擔責任。

javascript

JavaScript 基礎:方法與函數

## 課前測驗 課前測驗 重複撰寫相同的程式碼是程式設計中最常見的挫折之一。函數解決了這個問題,讓你可以將程式碼打包成可重複使用的模組。可以將函數想像成亨利·福特的裝配線中標準化的零件——一旦創建了一個可靠的元件,就可以在需要的地方使用它,而不需要重新從頭開始。 函數允許你將程式碼片段打包,並在程式中重複使用。與其到處複製和貼上相同的邏輯,不如只需創建一次函數,並在需要時調用它。這種方法能讓程式碼更有條理,也更容易進行更新。 在本課程中,你將學習如何創建自己的函數、向函數傳遞資訊並獲得有用的結果。你將了解函數與方法的區別,學習現代語法方法,並了解函數如何與其他函數協作。我們將逐步構建這些概念。 [](https://youtube.com/watch?v=XgKsD6Zwvlc "方法與函數") ## 函數 函數是一個獨立的程式碼區塊,用於執行特定任務。它封裝了邏輯,讓你可以在需要時執行。 與其在程式中多次撰寫相同的程式碼,不如將它打包成一個函數,並在需要時調用它。這種方法能讓程式碼更簡潔,也更容易進行更新。想像一下,如果需要更改分散在程式碼庫中 20 個不同位置的邏輯,維護起來會有多麼困難。 為函數命名時,使用描述性名稱非常重要。一個命名清晰的函數能清楚地表達其用途——例如,看到 cancelTimer() 時,你會立即明白它的作用,就像一個標有明確標籤的按鈕能告訴你點擊後會發生什麼。 ## 創建並調用函數 讓我們來看看如何創建函數。語法遵循一致的模式: 讓我們分解一下: - function 關鍵字告訴 JavaScript「嘿,我正在創建一個函數!」 - nameOfFunction 是你給函數取的描述性名稱 - 括號 () 是你可以添加參數的地方(稍後我們會詳細介紹) - 大括號 {} 包含了調用函數時執行的實際程式碼 讓我們創建一個簡單的問候函數來看看效果: 這個函數會在控制台中打印「Hello, world!」。一旦定義了它,你可以根據需要多次使用它。 要執行(或「調用」)函數,只需寫下函數的名稱,後面加上括號。JavaScript 允許你在調用函數之前或之後定義它——JavaScript 引擎會處理執行順序。 當你運行這行程式碼時,它會執行 displayGreeting 函數中的所有程式碼,並在瀏覽器的控制台中顯示「Hello, world!」。你可以多次調用這個函數。 ### 🧠 函數基礎檢查:構建你的第一個函數 來看看你對基本函數的理解: - 你能解釋為什麼在函數定義中使用大括號 {} 嗎? - 如果你寫 displayGreeting 而不加括號會發生什麼? - 為什麼你可能需要多次調用同一個函數? ### 函數的最佳實踐 以下是一些幫助你撰寫出色函數的提示: - 為你的函數取一個清晰、描述性的名稱——你的未來自己會感謝你! - 使用 駝峰命名法 為多個單詞的名稱命名(例如使用 calculateTotal 而不是 calculate_total) - 讓每個函數專注於做好一件事 ## 向函數傳遞資訊 我們的 displayGreeting 函數有些局限——它只能為所有人顯示「Hello, world!」。參數讓我們可以使函數更靈活和有用。 參數 就像佔位符,你可以在每次使用函數時插入不同的值。這樣,同一個函數可以在每次調用時處理不同的資訊。 在定義函數時,你可以在括號內列出參數,並用逗號分隔多個參數: 每個參數都像是一個佔位符——當有人調用你的函數時,他們會提供實際的值來填充這些位置。 讓我們更新問候函數,使其可以接受某人的名字: 注意我們使用了反引號(` `)和 ${}` 直接將名字插入到訊息中——這叫做模板字面值,它是一種非常方便的方式,可以將變數混合到字串中。 現在當我們調用函數時,可以傳遞任何名字: JavaScript 會將字串 'Christopher' 賦值給 name 參數,並創建個性化訊息「Hello, Christopher!」 ## 預設值 如果我們希望某些參數是可選的該怎麼辦?這時候預設值就派上用場了! 假設我們希望人們能夠自定義問候語,但如果他們沒有指定,我們就使用「Hello」作為備選。你可以通過使用等號來設置預設值,就像設置變數一樣: 在這裡,name 仍然是必需的,但如果沒有人提供其他問候語,salutation 則有一個備選值 'Hello'。 現在我們可以用兩種不同的方式調用這個函數: 在第一次調用中,由於我們沒有指定問候語,JavaScript 使用了預設的「Hello」。在第二次調用中,它使用了我們自定義的「Hi」。這種靈活性使函數能夠適應不同的場景。 ### 🎛️ 參數掌握檢查:讓函數更靈活 測試你對參數的理解: - 參數和引數有什麼區別? - 為什麼預設值在實際程式設計中很有用? - 如果你傳遞的引數比參數多,會發生什麼? ## 返回值 到目前為止,我們的函數只是將訊息打印到控制台,但如果你希望函數計算某些內容並將結果返回給你該怎麼辦? 這就是 返回值 的作用。函數不僅可以顯示某些內容,還可以將一個值返回給你,讓你可以將其存儲在變數中或在程式碼的其他部分使用。 要返回一個值,你可以使用 return 關鍵字,後面跟著你想返回的內容: 這裡有一個重要的點:當函數遇到 return 語句時,它會立即停止執行並將該值返回給調用它的人。 讓我們修改問候函數,使其返回訊息而不是打印: 現在這個函數不再打印問候語,而是創建訊息並將其返回給我們。 要使用返回的值,我們可以像使用其他值一樣將其存儲在變數中: 現在 greetingMessage 包含「Hello, Christopher」,我們可以在程式碼中的任何地方使用它——例如顯示在網頁上、包含在電子郵件中或傳遞給另一個函數。 ### 🔄 返回值檢查:獲取結果 評估你對返回值的理解: - 函數中的 return 語句之後的程式碼會發生什麼? - 為什麼返回值通常比僅僅打印到控制台更好? - 函數是否可以返回不同類型的值(字串、數字、布林值)? ## 函數作為函數的參數 函數可以作為參數傳遞給其他函數。雖然這個概念一開始可能看起來很複雜,但它是一個強大的功能,可以實現靈活的程式設計模式。 這種模式在你想要表達「當某件事發生時,執行另一件事」時非常常見。例如,「當計時器結束時,運行這段程式碼」或「當使用者點擊按鈕時,調用這個函數」。 讓我們來看看 setTimeout,這是一個內建函數,它會等待一定的時間,然後運行一些程式碼。我們需要告訴它要運行什麼程式碼——這正是傳遞函數的完美用例! 試試這段程式碼——3 秒後,你會看到一條訊息: 注意我們將 displayDone(不加括號)傳遞給 setTimeout。我們並沒有自己調用函數——而是將它交給 setTimeout,並說「3 秒後調用它」。 ### 匿名函數 有時你只需要一個函數來完成某件事,並且不想給它命名。想想看——如果你只使用一次函數,為什麼要用額外的名字來讓程式碼變得混亂? JavaScript 允許你創建 匿名函數——即沒有名字的函數,你可以在需要的地方直接定義它。 以下是我們如何使用匿名函數重寫計時器示例: 這實現了相同的結果,但函數直接在 setTimeout 調用中定義,省去了單獨的函數聲明。 ### 簡化箭頭函數 現代 JavaScript 提供了一種更簡短的函數撰寫方式,稱為 箭頭函數。它使用 =>(看起來像箭頭——明白了吧?),並且非常受開發者歡迎。 箭頭函數讓你可以省略 function 關鍵字,撰寫更簡潔的程式碼。 以下是使用箭頭函數的計時器示例: () 是參數的位置(此例中為空),接著是箭頭 =>,最後是大括號中的函數主體。這提供了相同的功能,但語法更簡潔。 ### 何時使用每種策略 什麼時候應該使用哪種方法?一個實用的指導原則是:如果你會多次使用函數,請給它命名並單獨定義。如果它只用於一個特定用途,考慮使用匿名函數。箭頭函數和傳統語法都是有效的選擇,但箭頭函數在現代 JavaScript 程式碼庫中更為常見。 ### 🎨 函數風格掌握檢查:選擇合適的語法 測試你對語法的理解: - 什麼時候你可能更喜歡箭頭函數而不是傳統函數語法? - 匿名函數的主要優勢是什麼? - 你能想到一個命名函數比匿名函數更好的情況嗎? --- ## 🚀 挑戰 你能用一句話說明函數與方法的區別嗎?試試看! ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 創建一個數學函數的工具庫,展示本課程中涵蓋的不同函數概念,包括參數、預設值、返回值和箭頭函數。 提示: 創建一個名為 mathUtils.js 的 JavaScript 文件,其中包含以下函數: 1. 一個函數 add,接受兩個參數並返回它們的和 2. 一個函數 multiply,具有預設參數值(第二個參數預設為 1) 3. 一個箭頭函數 square,接受一個數字並返回它的平方 4. 一個函數 calculate,接受另一個函數作為參數以及兩個數字,然後將該函數應用於這些數字 5. 演示調用每個函數的適當測試案例 了解更多有關 Agent 模式 的資訊。 ## 課後測驗 課後測驗 ## 回顧與自學 值得多了解一下箭頭函數,因為它們在程式碼庫中越來越常用。練習撰寫一個函數,然後用這種語法重寫它。 ## 作業 函數趣味練習 --- ## 🧰 你的 JavaScript 函數工具包摘要 --- ## 🚀 你的 JavaScript 函數掌握時間表 ### ⚡ 你可以在接下來的 5 分鐘內完成的事情 - [ ] 撰寫一個簡單的函數,返回你最喜歡的數字 - [ ] 創建一個帶有兩個參數的函數,將它們相加 - [ ] 嘗試將傳統函數轉換為箭頭函數語法 - [ ] 練習挑戰:解釋函數與方法之間的差異 ### 🎯 這一小時你可以完成的目標 - [ ] 完成課後測驗並複習任何令人困惑的概念 - [ ] 從 GitHub Copilot 挑戰中建立數學工具庫 - [ ] 創建一個使用另一個函數作為參數的函數 - [ ] 練習撰寫具有預設參數的函數 - [ ] 嘗試在函數返回值中使用模板字面值 ### 📅 你的整週函數精通計劃 - [ ] 以創意完成 "Fun with Functions" 作業 - [ ] 將你撰寫的一些重複代碼重構為可重用的函數 - [ ] 使用僅函數(不使用全域變數)建立一個小型計算器 - [ ] 使用像 map() 和 filter() 的陣列方法練習箭頭函數 - [ ] 創建一組常用任務的工具函數集合 - [ ] 學習高階函數和函數式編程概念 ### 🌟 你的整月轉型計劃 - [ ] 精通進階函數概念,例如閉包和作用域 - [ ] 建立一個大量使用函數組合的專案 - [ ] 透過改善函數文件為開源做出貢獻 - [ ] 教授他人有關函數及不同語法風格的知識 - [ ] 探索 JavaScript 中的函數式編程範式 - [ ] 為未來專案創建個人可重用函數庫 ### 🏆 最終函數冠軍檢查 慶祝你的函數精通: - 你目前創建的最有用的函數是什麼? - 學習函數如何改變你對代碼組織的看法? - 你偏好哪種函數語法?為什麼? - 你會用函數解決哪個現實世界的問題? --- 免責聲明: 此文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或誤釋不承擔責任。

javascript

JavaScript 基礎:做出決策

你是否曾經好奇應用程式如何做出聰明的決策?例如導航系統如何選擇最快的路線,或者恆溫器如何決定何時開啟暖氣?這就是程式設計中決策的基本概念。 就像 Charles Babbage 的分析機器被設計用來根據條件執行不同的操作序列一樣,現代的 JavaScript 程式需要根據不同的情況做出選擇。這種分支和做出決策的能力使靜態程式碼轉變為具有回應性和智能的應用程式。 在這堂課中,你將學習如何在程式中實現條件邏輯。我們將探討條件語句、比較運算符和邏輯表達式,這些工具能讓你的程式碼評估情況並做出適當的回應。 ## 課前測驗 課前測驗 做出決策並控制程式流程是程式設計的基本能力。本節將介紹如何使用布林值和條件邏輯來控制 JavaScript 程式的執行路徑。 [](https://youtube.com/watch?v=SxTp8j-fMMY "做出決策") ## 布林值簡短回顧 在探討決策之前,讓我們回顧一下上一堂課中的布林值。以數學家 George Boole 命名的布林值代表二元狀態——true 或 false。沒有模糊地帶,只有明確的結果。 這些二元值構成了所有計算邏輯的基礎。你的程式所做的每一個決策最終都歸結為布林值的評估。 創建布林變數非常簡單: 這段程式碼創建了兩個具有明確布林值的變數。 ✅ 布林值以英國數學家、哲學家和邏輯學家 George Boole (1815–1864) 命名。 ## 比較運算符與布林值 在實際應用中,你很少會手動設置布林值。相反,你會通過評估條件來生成它們,例如:「這個數字是否比那個數字大?」或者「這些值是否相等?」 比較運算符使這些評估成為可能。它們比較值並根據操作數之間的關係返回布林結果。 ✅ 在瀏覽器的控制台中寫一些比較來檢查你的知識。返回的數據是否讓你感到驚訝? ### 🧠 比較邏輯掌握:理解布林邏輯 測試你的比較理解: - 為什麼你認為 ===(嚴格相等)通常比 ==(寬鬆相等)更受推薦? - 你能預測 5 === '5' 的返回值嗎?5 == '5' 又如何? - !== 和 != 有什麼區別? ## If 語句 if 語句就像是在程式中提出問題。「如果這個條件為真,那麼執行這件事。」它可能是你在 JavaScript 中用來做出決策最重要的工具。 以下是它的工作方式: 條件放在括號內,如果條件為 true,JavaScript 就會執行大括號內的程式碼。如果條件為 false,JavaScript 會跳過整個區塊。 你通常會使用比較運算符來創建這些條件。讓我們看看一個實際的例子: 由於 1000 >= 800 的結果為 true,區塊內的程式碼會執行,並在控制台顯示「Getting a new laptop!」。 ## If..Else 語句 但如果你希望程式在條件為假時執行其他操作呢?這就是 else 的作用——它就像一個備案計劃。 else 語句讓你可以說「如果這個條件不為真,那麼執行另一件事。」 現在,由於 500 >= 800 的結果為 false,JavaScript 會跳過第一個區塊並執行 else 區塊。你會在控制台看到「Can't afford a new laptop, yet!」。 ✅ 在瀏覽器控制台中運行這段程式碼來測試你的理解。改變 currentMoney 和 laptopPrice 變數的值,看看返回的 console.log() 有什麼變化。 ### 🎯 If-Else 邏輯檢查:分支路徑 評估你的條件邏輯理解: - 如果 currentMoney 恰好等於 laptopPrice,會發生什麼? - 你能想到一個現實世界中使用 if-else 邏輯的場景嗎? - 你如何擴展這個邏輯來處理多個價格範圍? ## Switch 語句 有時你需要將一個值與多個選項進行比較。雖然你可以鏈接多個 if..else 語句,但這種方法會變得笨重。switch 語句提供了一種更清晰的結構來處理多個離散值。 這個概念類似於早期電話交換機中的機械切換系統——一個輸入值決定執行的特定路徑。 以下是它的結構: - JavaScript 只評估一次表達式 - 它會檢查每個 case 以找到匹配項 - 找到匹配項後,執行該程式碼區塊 - break 告訴 JavaScript 停止並退出 switch - 如果沒有匹配項,則執行 default 區塊(如果有的話) 在這個例子中,JavaScript 發現 dayNumber 是 2,找到匹配的 case 2,將 dayName 設置為「Tuesday」,然後退出 switch。結果是控制台顯示「Today is Tuesday」。 ✅ 在瀏覽器控制台中運行這段程式碼來測試你的理解。改變變數 a 的值,看看返回的 console.log() 有什麼變化。 ### 🔄 Switch 語句掌握:多選項 測試你的 switch 理解: - 如果忘記了 break 語句,會發生什麼? - 什麼情況下你會選擇使用 switch 而不是多個 if-else 語句? - 即使你認為已涵蓋所有可能性,default 區塊為什麼仍然有用? ## 邏輯運算符與布林值 複雜的決策通常需要同時評估多個條件。就像布林代數允許數學家結合邏輯表達式一樣,程式設計提供了邏輯運算符來連接多個布林條件。 這些運算符通過結合簡單的真/假評估來實現複雜的條件邏輯。 這些運算符讓你以有用的方式結合條件: - 與(&&)表示兩個條件都必須為真 - 或(||)表示至少一個條件必須為真 - 非(!)將真翻轉為假(反之亦然) ## 使用邏輯運算符進行條件與決策 讓我們用一個更實際的例子來看看這些邏輯運算符的應用: 在這個例子中:我們計算出 20% 折扣價格(640),然後評估我們的可用資金是否能支付全價或折扣價。由於 600 滿足折扣價 640 的條件,該條件評估為真。 ### 🧮 邏輯運算符檢查:結合條件 測試你的邏輯運算符理解: - 在表達式 A && B 中,如果 A 為假,B 會被評估嗎? - 你能想到一個需要同時使用三個運算符(&&, ||, !)的情況嗎? - !user.isActive 和 user.isActive !== true 有什麼區別? ### 非運算符 有時候,思考某件事「不為真」會更容易。例如,與其問「用戶是否已登入?」你可能想問「用戶是否未登入?」感嘆號(!)運算符可以幫助你翻轉邏輯。 ! 運算符就像在說「相反的...」——如果某件事是 true,! 會使其變為 false,反之亦然。 ### 三元運算符 對於簡單的條件賦值,JavaScript 提供了 三元運算符。這種簡潔的語法允許你在一行中寫出條件表達式,當需要根據條件分配兩個值之一時非常有用。 它讀起來像一個問題:「這個條件為真嗎?如果是,使用這個值。如果不是,使用那個值。」 以下是一個更具體的例子: ✅ 花點時間多讀幾遍這段程式碼。你理解這些運算符的工作方式嗎? 這行程式碼的意思是:「firstNumber 是否大於 secondNumber?如果是,將 firstNumber 放入 biggestNumber。如果不是,將 secondNumber 放入 biggestNumber。」 三元運算符只是傳統 if..else 語句的一種簡化寫法: 兩種方法產生的結果完全相同。三元運算符提供了簡潔性,而傳統的 if-else 結構在處理複雜條件時可能更具可讀性。 --- ## 🚀 挑戰 創建一個程式,先使用邏輯運算符編寫,然後使用三元運算符重寫。你更喜歡哪種語法? --- ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 創建一個全面的成績計算器,展示本課中的多種決策概念,包括 if-else 語句、switch 語句、邏輯運算符和三元運算符。 提示: 編寫一個 JavaScript 程式,接收學生的數字分數(0-100),並根據以下標準確定其字母成績: - A: 90-100 - B: 80-89 - C: 70-79 - D: 60-69 - F: 低於 60 要求: 1. 使用 if-else 語句來確定字母成績 2. 使用邏輯運算符檢查學生是否通過(成績 >= 60)且是否獲得榮譽(成績 >= 90) 3. 使用 switch 語句為每個字母成績提供具體反饋 4. 使用三元運算符判斷學生是否有資格參加下一門課程(成績 >= 70) 5. 包含輸入驗證以確保分數在 0 到 100 之間 用各種分數測試你的程式,包括邊界情況,例如 59、60、89、90,以及無效輸入。 了解更多關於 agent mode 的資訊。 ## 課後測驗 課後測驗 ## 回顧與自學 閱讀更多關於使用者可用的多種運算符 在 MDN。 瀏覽 Josh Comeau 的精彩 運算符查詢工具! ## 作業 運算符 --- ## 🧠 你的決策工具箱摘要 --- ## 🚀 你的 JavaScript 決策掌握時間表 ### ⚡ 你可以在接下來的 5 分鐘內完成的事情 - [ ] 在瀏覽器控制台練習比較運算符 - [ ] 寫一個簡單的 if-else 語句來檢查你的年齡 - [ ] 嘗試挑戰:使用三元運算符重寫 if-else - [ ] 測試不同的 "truthy" 和 "falsy" 值會發生什麼 ### 🎯 你可以在這一小時內完成的事情 - [ ] 完成課後測驗並回顧任何令人困惑的概念 - [ ] 從 GitHub Copilot 挑戰中建立全面的成績計算器 - [ ] 為一個真實場景(例如選擇穿什麼)創建一個簡單的決策樹 - [ ] 練習使用邏輯運算符結合多個條件 - [ ] 為不同的使用情況嘗試使用 switch 語句 ### 📅 你的週期邏輯掌握計劃 - [ ] 使用創意範例完成運算符作業 - [ ] 使用各種條件結構建立一個迷你測驗應用程式 - [ ] 創建一個表單驗證器,檢查多個輸入條件 - [ ] 練習 Josh Comeau 的 運算符查詢工具 練習 - [ ] 重構現有程式碼以使用更合適的條件結構 - [ ] 學習短路評估及其性能影響 ### 🌟 你的月度轉型計劃 - [ ] 掌握複雜的嵌套條件並保持程式碼的可讀性 - [ ] 建立一個具有複雜決策邏輯的應用程式 - [ ] 通過改進現有專案中的條件邏輯來為開源做出貢獻 - [ ] 教授其他人不同的條件結構以及何時使用它們 - [ ] 探索函數式程式設計方法來處理條件邏輯 - [ ] 為條件最佳實踐創建個人參考指南 ### 🏆 最終決策冠軍檢查 慶祝你的邏輯思維掌握: - 你成功實現的最複雜的決策邏輯是什麼? - 哪種條件結構對你來說最自然?為什麼? - 學習邏輯運算符如何改變你的問題解決方法? - 哪個真實應用程式會受益於複雜的決策邏輯? --- 免責聲明: 本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

javascript

JavaScript 基礎:陣列與迴圈

## 課前測驗 課前測驗 你是否曾經好奇網站如何追蹤購物車中的商品或顯示好友列表?這就是陣列和迴圈的用途。陣列就像數位容器,可以存放多個資訊,而迴圈則能有效地處理這些數據,避免重複的程式碼。 這兩個概念結合起來,形成了程式中處理資訊的基礎。你將學會如何從手動逐步撰寫每個步驟,轉變為創建能快速處理數百甚至數千項目資料的智能高效程式碼。 在本課程結束時,你將了解如何僅用幾行程式碼完成複雜的數據任務。讓我們一起探索這些重要的程式設計概念吧。 [](https://youtube.com/watch?v=1U4qTyq02Xw "陣列") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "迴圈") ## 陣列 把陣列想像成數位檔案櫃——與其每個抽屜只存放一份文件,你可以在一個結構化的容器中組織多個相關項目。在程式設計中,陣列讓你能夠在一個有組織的包裝中存放多個資訊。 無論你是在建立相片庫、管理待辦事項清單,還是追蹤遊戲中的高分,陣列都是數據組織的基礎。讓我們來看看它是如何運作的。 ✅ 陣列無處不在!你能想到一個現實生活中的陣列例子嗎,例如太陽能板陣列? ### 建立陣列 建立陣列非常簡單——只需使用方括號! 這裡發生了什麼? 你剛剛使用方括號 [] 創建了一個空的容器。把它想像成一個空的圖書館書架——它已準備好存放你想要組織的書籍。 你也可以從一開始就為你的陣列填入初始值: 值得注意的酷事: - 你可以在同一個陣列中存放文字、數字,甚至是 true/false 值 - 只需用逗號分隔每個項目——簡單! - 陣列非常適合將相關資訊組織在一起 ### 陣列索引 有件事可能一開始會讓人感到不習慣:陣列的項目編號是從 0 開始,而不是 1。這種基於零的索引源於電腦記憶體的運作方式——自從像 C 這樣的早期程式語言開始,這就成為了一種程式設計慣例。陣列中的每個位置都有自己的地址編號,稱為 索引。 ✅ 陣列從零索引開始是否讓你感到驚訝?在某些程式語言中,索引是從 1 開始的。這背後有一段有趣的歷史,你可以在 維基百科 上閱讀。 存取陣列元素: 這裡發生了什麼? - 使用 方括號表示法和索引號來存取元素 - 返回 陣列中該特定位置存放的值 - 從 0 開始計數,第一個元素的索引為 0 修改陣列元素: 在上面的例子中,我們: - 修改 索引 4 的元素,從 "洛基路" 改為 "奶油胡桃" - 新增 一個新元素 "餅乾麵團" 到索引 5 - 自動擴展 陣列長度,當新增超出目前範圍的元素時 ### 陣列長度與常用方法 陣列附帶內建的屬性和方法,使得處理數據更加簡單。 尋找陣列長度: 需要記住的重點: - 返回 陣列中的元素總數 - 自動更新 當元素被新增或移除時 - 提供 用於迴圈和驗證的動態計數 重要的陣列方法: 理解這些方法: - 使用 push()(尾部)和 unshift()(開頭)新增元素 - 使用 pop()(尾部)和 shift()(開頭)移除元素 - 使用 indexOf() 定位元素並用 includes() 檢查是否存在 - 返回 有用的值,例如移除的元素或位置索引 ✅ 自己試試看!使用瀏覽器的控制台創建並操作一個你自己的陣列。 ### 🧠 陣列基礎檢查:組織你的數據 測試你的陣列理解: - 你認為為什麼陣列從 0 開始計數而不是 1? - 如果你嘗試存取不存在的索引(例如在 5 個元素的陣列中使用 arr[100]),會發生什麼? - 你能想到三個現實生活中使用陣列的場景嗎? ## 迴圈 想像一下查爾斯·狄更斯小說中學生被懲罰時,必須在石板上重複寫句子。如果你能簡單地指示某人「把這句話寫 100 次」,並讓它自動完成,那就是迴圈對程式碼的作用。 迴圈就像擁有一個不知疲倦的助手,可以無誤地重複執行任務。無論你需要檢查購物車中的每個商品,還是顯示相簿中的所有照片,迴圈都能高效地處理重複的工作。 JavaScript 提供了幾種迴圈類型供你選擇。讓我們來看看每一種迴圈,並了解它們的使用時機。 ### For 迴圈 for 迴圈就像設置一個計時器——你清楚地知道自己希望某件事發生的次數。它非常有條理且可預測,這使得它在處理陣列或需要計數時非常合適。 For 迴圈結構: 逐步解析發生了什麼: - 初始化 計數器變數 i,初始值為 0 - 檢查 條件 i < 10,在每次迴圈執行前 - 執行 條件為真時的程式碼區塊 - 遞增 每次迴圈後將 i 加 1 - 停止 當條件變為假(當 i 達到 10 時) ✅ 在瀏覽器控制台中執行此程式碼。當你對計數器、條件或迴圈表達式進行小改動時會發生什麼?你能讓它倒著運行,創建倒數嗎? ### 🗓️ For 迴圈掌握檢查:受控重複 評估你的 for 迴圈理解: - For 迴圈的三個部分是什麼?每個部分的作用是什麼? - 你如何反向迴圈遍歷一個陣列? - 如果你忘記了遞增部分(i++),會發生什麼? ### While 迴圈 while 迴圈就像在說「一直做這件事直到...」——你可能不知道它會執行多少次,但你知道什麼時候停止。它非常適合用於像是要求使用者輸入直到他們給出正確答案,或者在數據中搜尋直到找到所需內容。 While 迴圈特性: - 持續執行 只要條件為真 - 需要 手動管理任何計數器變數 - 在每次迴圈前檢查 條件 - 可能有風險 如果條件永遠不為假,可能導致無限迴圈 理解這些範例: - 手動管理 迴圈內的計數器變數 i - 遞增 計數器以防止無限迴圈 - 展示 實際應用場景,例如用戶輸入和嘗試次數限制 - 包含 防止無限執行的安全機制 ### ♾️ While 迴圈智慧檢查:基於條件的重複 測試你的 while 迴圈理解: - 使用 while 迴圈的主要風險是什麼? - 什麼情況下你會選擇使用 while 迴圈而不是 for 迴圈? - 你如何防止無限迴圈? ### 現代迴圈替代方案 JavaScript 提供了現代迴圈語法,使你的程式碼更易讀且更少出錯。 For...of 迴圈(ES6+): For...of 的主要優勢: - 消除 索引管理和潛在的越界錯誤 - 直接提供 陣列元素的存取 - 提升 程式碼可讀性並減少語法複雜性 forEach 方法: 關於 forEach 的重點: - 執行 每個陣列元素的函數 - 提供 元素值和索引作為參數 - 無法 提前停止(與傳統迴圈不同) - 返回 undefined(不會創建新陣列) ✅ 為什麼你會選擇 for 迴圈而不是 while 迴圈?17K 名觀眾在 StackOverflow 上有相同的問題,一些意見可能 對你有幫助。 ### 🎨 現代迴圈語法檢查:擁抱 ES6+ 評估你的現代 JavaScript 理解: - for...of 相較於傳統 for 迴圈的優勢是什麼? - 什麼情況下你仍然會偏好使用傳統 for 迴圈? - forEach 和 map 有什麼不同? ## 迴圈與陣列 將陣列與迴圈結合使用可以創造強大的數據處理能力。這種組合是許多程式任務的基礎,從顯示列表到計算統計數據。 傳統陣列處理: 讓我們理解每種方法: - 使用 陣列長度屬性來確定迴圈邊界 - 透過索引存取 傳統 for 迴圈中的元素 - 直接存取 for...of 迴圈中的元素 - 精確處理 每個陣列元素一次 實際數據處理範例: 這段程式碼的運作方式: - 初始化 用於追蹤的變數,例如總和和極值 - 使用 單一高效迴圈處理每個分數 - 累積 總分以計算平均值 - 追蹤 迴圈期間的最高和最低值 - 在迴圈完成後計算 最終統計數據 ✅ 在瀏覽器的控制台中嘗試迴圈遍歷你自己創建的陣列。 --- ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 建立一個綜合數據處理函數,結合陣列和迴圈分析數據集並生成有意義的洞察。 提示: 創建一個名為 analyzeGrades 的函數,該函數接收一個包含學生成績物件的陣列(每個物件包含 name 和 score 屬性),並返回一個包含統計數據的物件,包括最高分、最低分、平均分、通過人數(分數 >= 70),以及一個分數高於平均分的學生姓名陣列。在解決方案中至少使用兩種不同的迴圈類型。 了解更多有關 agent 模式 的資訊。 ## 🚀 挑戰 JavaScript 提供了幾個現代化的陣列方法,可以用來取代傳統的迴圈來完成特定任務。探索 forEach、for-of、map、filter 和 reduce。 你的挑戰: 使用至少三種不同的陣列方法重構學生成績的範例。注意,使用現代 JavaScript 語法後,程式碼會變得更簡潔、更易讀。 ## 課後測驗 課後測驗 ## 回顧與自學 JavaScript 中的陣列附帶許多非常有用的操作方法,適合用來進行資料處理。深入了解這些方法,並嘗試在你自己建立的陣列上使用一些方法(例如 push、pop、slice 和 splice)。 ## 作業 迴圈處理陣列 --- ## 📊 你的陣列與迴圈工具包摘要 --- ## 🚀 你的陣列與迴圈精通時間表 ### ⚡ 接下來 5 分鐘內可以完成的事 - [ ] 建立一個包含你最喜愛電影的陣列並存取特定元素 - [ ] 撰寫一個從 1 數到 10 的 for 迴圈 - [ ] 嘗試課程中的現代陣列方法挑戰 - [ ] 在瀏覽器主控台練習陣列索引 ### 🎯 接下來 1 小時內可以完成的事 - [ ] 完成課後測驗並回顧任何有挑戰性的概念 - [ ] 完成 GitHub Copilot 挑戰中的綜合成績分析器 - [ ] 建立一個簡單的購物車功能,能新增和移除商品 - [ ] 練習不同迴圈類型的轉換 - [ ] 嘗試使用陣列方法,例如 push、pop、slice 和 splice ### 📅 一週的資料處理旅程 - [ ] 完成「迴圈處理陣列」作業並進行創意改進 - [ ] 使用陣列和迴圈建立一個待辦事項應用程式 - [ ] 建立一個簡單的數據統計計算器 - [ ] 練習使用 MDN 陣列方法 - [ ] 建立一個相片集或音樂播放清單介面 - [ ] 探索使用 map、filter 和 reduce 進行函數式程式設計 ### 🌟 一個月的轉變 - [ ] 精通進階陣列操作與效能優化 - [ ] 建立完整的數據視覺化儀表板 - [ ] 參與涉及資料處理的開源專案 - [ ] 用實際範例教導他人陣列與迴圈的使用 - [ ] 建立個人可重複使用的資料處理函數庫 - [ ] 探索基於陣列的演算法與資料結構 ### 🏆 最終資料處理冠軍檢查 慶祝你對陣列與迴圈的精通: - 你學到的最有用的陣列操作是什麼?它如何應用於現實世界? - 哪種類型的迴圈對你來說最自然?為什麼? - 理解陣列與迴圈如何改變你組織資料的方式? - 你接下來想挑戰什麼複雜的資料處理任務? --- 免責聲明: 此文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或誤釋不承擔責任。

javascript

JavaScript 簡介

JavaScript 是網頁的語言。在這四節課中,你將學習它的基礎知識。 ### 主題 1. 變數與資料型別 2. 函數與方法 3. 使用 JavaScript 做出決策 4. 陣列與迴圈 ### 致謝 這些課程由 Jasmine Greenaway、Christopher Harrison 和 Chris Noring 用 ♥️ 撰寫。 免責聲明: 本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

javascript

JavaScript 基礎:資料型別

資料型別是 JavaScript 中的基本概念之一,您在每個撰寫的程式中都會遇到它。可以將資料型別想像成亞歷山卓圖書館古代圖書館員使用的歸檔系統——他們有特定的地方放置包含詩歌、數學和歷史記錄的捲軸。JavaScript 以類似的方式組織資訊,為不同種類的資料設立不同的類別。 在本課程中,我們將探討使 JavaScript 運作的核心資料型別。您將學習如何處理數字、文字、真假值,以及了解為什麼選擇正確的型別對您的程式至關重要。這些概念起初可能看起來抽象,但透過練習,它們將成為您的第二天性。 理解資料型別會讓 JavaScript 的其他部分更清晰。正如建築師需要了解不同的建築材料,才能建造一座大教堂,這些基礎知識將支持您將來的每一個建設。 ## 課前測驗 課前測驗 本課程涵蓋 JavaScript 的基本知識,JavaScript 是提供網頁互動功能的語言。 [](https://youtube.com/watch?v=JNIXfGiDWM8 "JavaScript 中的變數") [](https://youtube.com/watch?v=AWfA95eLdq8 "JavaScript 中的資料型別") 讓我們從變數和填充它們的資料型別開始吧! ## 變數 變數是程式設計中的基本建構塊。就像中世紀煉金術士用來存放不同物質的標籤罐,變數讓您能儲存資訊,並賦予具描述性的名稱,以便後續參考。需要記住某人的年齡嗎?將它存放在名為 age 的變數中。想追蹤使用者名稱?把它放在名為 userName 的變數中。 我們將專注於 JavaScript 中建立變數的現代方法。您在這裡學到的技術是多年語言演變及程式社群最佳實踐的結晶。 建立和宣告變數的語法為 [關鍵字] [名稱],由兩部分組成: - 關鍵字。使用 let 表示可以變更的變數,或 const 表示不會改變的值。 - 變數名稱,由您自行選擇的具描述性名稱。 ✅ let 關鍵字於 ES6 中引入,賦予變數所謂的 _區塊作用域_。建議使用 let 或 const 替代舊的 var 關鍵字。我們會在後續章節更深入探討區塊作用域。 ### 任務 - 操作變數 1. 宣告一個變數。讓我們從建立第一個變數開始: ```javascript let myVariable; ``` 這段程式的意義: - 這告訴 JavaScript 建立一個名為 myVariable 的儲存空間 - JavaScript 為此變數在記憶體中分配空間 - 該變數目前沒有值(undefined) 2. 賦值給它。現在讓我們將內容放入變數中: ```javascript myVariable = 123; ``` 賦值的運作方式: - = 運算子將 123 指派給我們的變數 - 變數現在包含這個值,不再是未定義 - 您可以在程式中以 myVariable 參考此值 > 注意:本課程中 = 的用法是「指派運算子」,用於設定變數的值,而非代表相等。 3. 聰明地操作。實際上,我們可以將這兩個步驟合併: ```javascript let myVariable = 123; ``` 這種方式更有效率: - 您同時宣告變數並賦值於一個語句中 - 這是開發者的標準作法 - 縮短程式碼長度,同時保持清晰度 4. 改變想法。如果想儲存不同的數字怎麼辦? ```javascript myVariable = 321; ``` 理解重新賦值: - 變數現在包含 321,取代了 123 - 先前的值被覆蓋—變數一次只能存一個值 - 這種可變性是使用 let 宣告的關鍵特性 ✅ 試試看!您可以直接在瀏覽器中撰寫 JavaScript。打開瀏覽器並進入開發者工具。在主控台中,輸入 let myVariable = 123,按下 Enter,接著輸入 myVariable。結果是什麼?注意,您會在後續課程中進一步學習這些概念。 ### 🧠 變數掌握檢測:養成熟練感 來看看您對變數的理解程度: - 您能解釋宣告和賦值變數的差別嗎? - 如果嘗試在宣告之前使用變數會發生什麼? - 什麼時候會選用 let 代替 const? ## 常數 有時您需要儲存執行期間絕對不會改變的資訊。想像常數就像古希臘歐幾里得制定的數學原理——一旦被證明與記載,將固定不變成為永遠參考的標準。 常數與變數相似,但有個重要限制:一旦賦值,值就不能被更改。這種不可變性有助於避免程式中重要值的意外修改。 宣告與初始化常數與變數的概念相同,但使用 const 關鍵字。常數通常以全大寫字母命名。 此段程式做了什麼: - 建立名為 MY_VARIABLE 的常數,值為 123 - 採用常數的全大寫命名慣例 - 防止未來對該值的任何修改 常數有兩大規則: - 必須立刻賦值——不允許空的常數! - 值不能更改——若嘗試更改,JavaScript 會報錯。看看範例: 簡單值 - 以下寫法不被允許: ```javascript const PI = 3; PI = 4; // 不被允許 ``` 要記得: - 嘗試重新指派常數會發生錯誤 - 保護重要值不被意外更動 - 確保整個程式中數值保持一致 物件參考不可變 - 以下寫法也不被允許: ```javascript const obj = { a: 3 }; obj = { b: 5 } // 不被允許 ``` 這裡的概念是: - 防止整個物件被替換成另一個新物件 - 保護原始物件的參考 - 維持記憶體中物件的唯一身份 物件的內容值可變 - 以下寫法是被允許的: ```javascript const obj = { a: 3 }; obj.a = 5; // 被允許 ``` 說明發生了什麼: - 更改物件內屬性的值 - 保留相同的物件參考 - 展示物件的內容可變,但參考不可變 > 注意,const 是指參考不可被重新指定。但是值不一定是「不可變」的,特別是在複雜結構如物件的情況。 ## 資料型別 JavaScript 將資訊分門別類,稱為資料型別。這個概念類似古代學者歸納知識的方法——亞里斯多德區分不同推理類型,知道邏輯原則不能一視同仁地套用於詩歌、數學和自然哲學。 資料型別很重要,因為不同運算適用於不同類型的資訊。就如同您無法對人名進行算術運算,或對數學方程式排序,JavaScript 也需要適合每個運算的資料型別。理解這點可避免錯誤並讓程式更穩健。 變數可以存放多種不同類型的值,例如數字與文字。這些不同的值類型稱為資料型別。資料型別是軟體開發的重要部分,它幫助開發者決定程式如何撰寫以及軟體如何執行。此外,某些資料型別具有獨特特性,能幫助轉換或擷取值中的額外資訊。 ✅ 資料型別亦稱為 JavaScript 原始資料型別,因為它們是語言提供的最基礎的資料型別。共有七種原始型別:string、number、bigint、boolean、undefined、null 與 symbol。花點時間想像這些原始型別代表什麼。zebra 是什麼?0 呢?true 是什麼? ### 數字 數字是 JavaScript 中最直觀的資料型別。不論是整數如 42、帶小數點的 3.14,或是負數如 -5,JavaScript 都以統一方式處理。 還記得先前的變數嗎?我們儲存的 123 實際上是數字型別: 主要特性: - JavaScript 會自動識別數值 - 您可用這些變數做數學運算 - 不需要明確宣告型別 變數能儲存所有類型的數字,包括小數和負數。數字也可以搭配算術運算子使用,下一節會介紹此主題。 ### 算術運算子 算術運算子允許您在 JavaScript 中進行數學計算。這些運算符與數學家世世代代使用的符號相同——類似阿爾花剌子密發展代數符號的方式。 這些運算符的運作方式與傳統算術一致:+ 表加法,- 表減法,以此類推。 以下是幾種常見的算術運算子: ✅ 試試看!在瀏覽器主控台試做一個算術運算。結果讓您驚訝嗎? ### 🧮 數學技能檢測:自信計算 測試您的算術理解: - /(除法)與 %(餘數)的差異是什麼? - 您能預測 10 % 3 等於多少嗎?(提示:不是 3.33...) - 餘數運算子在程式設計中可能有什麼用途? ### 字串 在 JavaScript 中,文字資料用字串表示。字串這個詞源自將字元串連的概念,就像中世紀修道院抄寫員將字母串連成詞句和句子一樣。 字串是網頁開發的基礎。網站上顯示的每一段文字——使用者名稱、按鈕標籤、錯誤訊息、內容——都以字串形式處理。理解字串是建立功能性使用者介面的關鍵。 字串是套在單引號或雙引號之間的一組字元。 理解這些概念: - 使用單引號 ' 或雙引號 " 定義字串 - 儲存可包含字母、數字與符號的文字資料 - 賦值字串給變數以便後續使用 - 需要用引號區別字串與變數名稱 記得在撰寫字串時使用引號,否則 JavaScript 會把它當成變數名。 ### 字串格式化 字串操作讓您合併文字、結合變數,並創造會隨程式狀態變化的動態內容。此技巧使您能以程式化方式建構文字。 常常需要將多個字串串接在一起——這個過程稱為連接(concatenation)。 要串接兩個或多個字串,或將它們連接在一起,使用 + 運算子。 一步步來,以下是發生了什麼事情: - 使用 + 運算子將多個字串 結合 - 直接 將字串連接在一起,第一個範例沒有空格 - 在字串間加入 空白字元 " " 以增進可讀性 - 插入 標點符號如逗號,來創造適當的格式 ✅ 為什麼在 JavaScript 之中 1 + 1 = 2,但是 '1' + '1' = 11 呢?想一想。那 '1' + 1 呢? 範本字串是另一種格式化字串的方法,只是用的是反引號(backtick)而非引號。任何不是純文字的內容必須放在 ${ } 佔位符裡面。這包括任何可能是字串的變數。 讓我們理解各個部分: - 使用 反引號 ` `` 代替一般引號來建立範本字串 - 直接嵌入 變數,利用 ${} 佔位符語法 - 保持 空格和格式與原文一致 - 提供 一種更乾淨的方式來建立包含變數的複雜字串 你可以使用任一方式達成格式化目的,但範本字串會尊重所有空格和換行。 ✅ 何時會使用範本字串而非普通字串? ### 🔤 字串熟練度檢查:文字操作信心 評估你的字串技能: - 你能解釋為什麼 '1' + '1' 等於 '11' 而不是 2 嗎? - 你覺得哪種字串方法較具可讀性:串接還是範本字串? - 如果忘記在字串周圍加引號會發生什麼事情? ### 布林值 布林值代表最簡單的資料形式:它只能有兩種值之一 —— true 或 false。這個二元邏輯系統可追溯自 19 世紀數學家 George Boole 的布林代數。 儘管它們很簡單,布林值對於程式邏輯至關重要。它們讓程式能根據條件做出決策——用戶是否登入、按鈕是否被點擊、或是否符合某些條件。 布林值只能是 true 或 false。布林值可以協助判斷當特定條件成立時,哪些程式碼行應該執行。許多情況下,運算子協助設定布林值的內容,你也會常見到變數被初始化或其值透過運算子被更新。 如上所示,我們: - 建立 一個變數來儲存布林值 true - 示範 如何儲存布林值 false - 使用 正確的關鍵字 true 和 false(不需要引號) - 準備 這些變數以供條件判斷使用 ✅ 如果變數評估為布林 true,就可視為“truthy”。有趣的是,在 JavaScript 中,所有值都是 truthy,除非被定義為 falsy。 ### 🎯 布林邏輯檢查:決策能力 測試你的布林理解: - 你認為為什麼 JavaScript 除了 true 和 false 外,還有 "truthy" 和 "falsy" 的概念? - 你能判斷以下哪個是假值 (falsy) 嗎:0、"0"、[]、"false"? - 布林值如何幫助控制程式流程? --- ## 📊 你的資料型別工具包總結 ## GitHub Copilot Agent 挑戰 🚀 利用 Agent 模式完成以下挑戰: 描述: 創建一個個人資訊管理器,展現本課程中學到的所有 JavaScript 資料型別,同時處理真實世界的資料場景。 提示: 建立一個 JavaScript 程式,創建一個使用者資料物件,包含:姓名(字串)、年齡(數字)、是否為學生(布林值)、喜愛顏色陣列,以及含有街道、城市和郵遞區號的地址物件。包含函式來顯示個人資料資訊及更新各欄位。確保示範字串串接、範本字串、使用年齡進行的算術運算,以及學生狀態的布林邏輯。 想了解更多 agent mode。 ## 🚀 挑戰 JavaScript 有些行為會讓開發者措手不及。以下是經典範例:試著在瀏覽器主控台輸入:let age = 1; let Age = 2; age == Age 並觀察結果。它回傳 false — 你能判斷為什麼嗎? 這代表許多值得瞭解的 JavaScript 行為之一。熟悉這些細節有助於你寫出更穩健的程式碼,並更有效地除錯。 ## 課後小測驗 課後小測驗 ## 複習與自學 看看這份 JavaScript 練習清單並嘗試其中一項。你學到了什麼? ## 作業 資料型別練習 ## 🚀 你的 JavaScript 資料型別精通時間線 ### ⚡ 接下來 5 分鐘你可以做什麼 - [ ] 打開瀏覽器主控台,建立三個不同資料型別的變數 - [ ] 嘗試挑戰:let age = 1; let Age = 2; age == Age,並搞懂為什麼會是 false - [ ] 練習用你的名字和愛好數字做字串串接 - [ ] 試試看數字和字串相加時會發生什麼 ### 🎯 接下來一小時你可以完成什麼 - [ ] 完成課後小測驗並複習任何不清楚的概念 - [ ] 建立一個迷你計算機,能做加減乘除兩數運算 - [ ] 用範本字串建立一個簡單的姓名格式化程式 - [ ] 探索 == 與 === 比較運算子之間的差異 - [ ] 練習不同資料型別的互轉 ### 📅 你的一週 JavaScript 基礎 - [ ] 帶著自信和創意完成作業 - [ ] 建立個人資料物件,使用全部學到的資料型別 - [ ] 練習 CSS-Tricks 的 JavaScript 練習題 - [ ] 用布林邏輯建立簡單的表單驗證器 - [ ] 嘗試陣列和物件資料型別(下一課預告) - [ ] 加入 JavaScript 社群並詢問關於資料型別的問題 ### 🌟 你的一個月轉變 - [ ] 將資料型別知識整合到大型程式專案裡 - [ ] 理解在實務中何時、為什麼使用每個資料型別 - [ ] 幫助其他初學者理解 JavaScript 基礎 - [ ] 建立一個管理不同類型使用者資料的小型應用程式 - [ ] 探索進階資料型別概念,如型別強制轉換與嚴格相等 - [ ] 透過文件改善,為開源 JavaScript 專案做出貢獻 ### 🧠 終極資料型別精通檢視 慶祝你的 JavaScript 基礎: - 哪種資料型別的行為讓你最感意外? - 你對於向朋友講解變數與常數的舒服程度如何? - 在 JavaScript 的型別系統裡,你發現最有趣的事情是什麼? - 你能想像用這些基本概念打造哪種實際應用程式? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議採用專業人工翻譯。對於因使用本翻譯而產生的任何誤解或誤譯,我們概不負責。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:方法與函式

## 課前小測驗 課前小測驗 重複寫同樣的程式碼是程式設計中最常見的挫折之一。函式解決這個問題,讓你可以把程式碼包裝成可重複使用的區塊。可以把函式想像成亨利·福特裝配線中標準化的零件——一旦你建立了可靠的組件,就可以在需要時使用它,而不用重新打造。 函式讓你把程式碼片段打包,方便在整個程式中重複使用。不用到處複製貼上相同的邏輯,你只需建立一次函式,然後隨時呼叫。這種做法讓你的程式碼保持整潔,也讓更新變得輕鬆許多。 在本課中,你將學習如何建立自己的函式、傳遞資訊給它們,並獲取有用的結果。你會理解函式和方法的差異、學習現代語法方式,並看到函式如何與其他函式協作。我們將一步步建立這些概念。 [](https://youtube.com/watch?v=XgKsD6Zwvlc "方法與函式") ## 函式 函式是獨立的程式碼區塊,用來完成特定任務。它封裝了邏輯,使你能夠在需要時執行。 與其在程式中重複寫相同的程式碼,不如打包成函式,並在需要時呼叫該函式。這讓你的程式碼保持乾淨,也讓維護更容易。想像如果你需要修改散布在 20 個不同位置的邏輯會有多麻煩。 為你的函式取具描述性的名稱非常重要。一個命名良好的函式能清楚傳達它的用途——當你看到 cancelTimer() 時,你立刻明白它的功能,就像明確標示的按鈕讓你一看就知道按下後會發生什麼事。 ## 創建與呼叫函式 讓我們來看看如何創建函式。語法遵循固定模式: 來拆解一下: - function 關鍵字告訴 JavaScript「嘿,我要建立函式了!」 - nameOfFunction 是你給函式取的描述性名稱 - 括號 () 中可以加入參數(我們稍後會說明) - 大括號 {} 包含呼叫函式時會執行的實際程式碼 我們來寫一個簡單的問候函式,看它如何運作: 這個函式會在控制台印出「Hello, world!」。一旦定義完成,你就可以隨時呼叫它。 要執行(或「呼叫」)函式,寫函式名稱後跟括號即可。JavaScript 允許你在呼叫函式前或後定義函式,JavaScript 引擎會負責處理執行順序。 執行這行後,函式內的所有程式碼會執行,並在瀏覽器的控制台中顯示「Hello, world!」。你可以重複呼叫這個函式。 ### 🧠 函式基礎檢測:建立你的第一個函式 來測試你對基本函式的理解: - 為什麼函式定義中使用大括號 {}? - 如果你寫成 displayGreeting 而沒有括號會發生什麼事? - 為什麼你會想多次呼叫同一個函式? ### 函式最佳實踐 以下幾點可以幫助你撰寫優秀的函式: - 為函式取清楚且具描述性的名稱——未來的你會感謝自己! - 多字名稱使用 駝峰式命名(如 calculateTotal,而不是 calculate_total) - 保持每個函式專注做好一件事 ## 傳遞資訊給函式 我們之前的 displayGreeting 函式很有限——它只能印出「Hello, world!」。參數讓函式更靈活、更有用。 參數 就像佔位符,每次你呼叫函式時可以放入不同的值。這樣同一個函式就可以在每次呼叫時根據不同資訊執行。 你在定義函式時,在括號內列出參數,多個參數以逗號分隔: 每個參數就像佔位符——呼叫函式時,使用者會提供實際的值替代這些位置。 我們來改寫問候函式,讓它接受名字參數: 注意我們用反引號(` `)和 ${}` 直接把名字代入訊息——這叫做模板字串,是混合變數建立字串的方便方式。 現在呼叫函式時,可以傳入任意名字: JavaScript 會把字串 'Christopher' 指派給 name 參數,並產生個人化訊息「Hello, Christopher!」。 ## 預設值 如果我們要讓某些參數可選怎麼辦?這時就用預設值! 假設我們想讓人可以自訂問候詞,但如果不指定,我們就用「Hello」作為預設。你可以用等號設定預設值,就像給變數設定: 這裡 name 仍是必須的,但 salutation 有預設值 'Hello',如果沒提供別的問候詞就用它。 現在我們可以用兩種不同方式呼叫函式: 第一次呼叫,因為沒有指定問候詞,JavaScript 就用預設「Hello」。第二次呼叫則用我們自訂的「Hi」。這種彈性讓函式適用於多種場景。 ### 🎛️ 參數熟練度檢測:讓函式更彈性 測試你對參數的理解: - 參數(parameter)和引數(argument)有什麼差別? - 為什麼預設值在實務編程中很有用? - 如果傳入的引數比參數多,會發生什麼事? ## 回傳值 迄今為止,我們的函式只是印出訊息,但如果你想要函式計算並回傳結果呢? 這時用到 回傳值。函式不只是顯示東西,可以把值「交還」給呼叫者,讓你存到變數或用於程式其他地方。 要回傳值,用 return 關鍵字,後面接你想回傳的東西: 重要的是:函式遇到 return 陳述句會立刻停止執行,並把該值返還給呼叫它的地方。 讓我們修改問候函式,讓它回傳訊息,而不是印出: 現在函式不是印出問候語,而是建立訊息並回傳給我們。 要使用回傳值,我們可以把它存到變數裡,就像任何其他值: greetingMessage 現在包含「Hello, Christopher」,我們可以任意在程式碼中使用——顯示在網頁上、放入電子郵件,或傳給其他函式。 ### 🔄 回傳值檢測:取得結果 評估你對回傳值的理解: - 函式中 return 之後的程式碼會發生什麼? - 為什麼回傳值通常比直接印到控制台更好? - 函式能回傳不同類型的值嗎(字串、數字、布林)? ## 函式作為其他函式的參數 函式也可以作為參數傳給其它函式。這個概念乍看很複雜,但它是靈活程式編寫的重要特性。 這種模式很常用於「當某事發生時,做這個事」。如「計時器結束時,執行這段程式碼」或「使用者按鈕點擊時,呼叫此函式。」 來看內建的 setTimeout 函式,它會等待一段時間,然後執行某段程式碼。得告訴它要執行什麼程式碼——這時傳入函式就是很好的用法! 試試這段程式碼——3 秒後,你會看到訊息: 注意我們把 displayDone(沒加括號)傳給 setTimeout。我們不是自己呼叫函式,而是交給 setTimeout,告訴它「3 秒後呼叫這個函式」。 ### 匿名函式 有時候你只需要一個函式做特定事,不想給它名字。想想看——如果你只用一次函式,幹嘛讓程式碼多個名稱? JavaScript 允許你建立 匿名函式——沒有名字、直接在需要地方定義的函式。 我們用匿名函式改寫計時器範例: 結果一樣,但函式直接寫在 setTimeout 內,免去額外的函式宣告。 ### 箭頭函式 現代 JavaScript 有更短的函式寫法,叫做 箭頭函式。它用 => (看起來像箭頭)且深受開發者喜愛。 箭頭函式省去了 function 關鍵字,可寫出更簡潔的程式碼。 這是用箭頭函式改寫的計時器範例: () 是參數(此例為空),然後是箭頭 =>,最後是用大括號包裹的函式主體。這給你一樣功能,但語法更精簡。 ### 何時使用各種寫法 應該何時用哪種方式?實務建議:如果會多次使用函式,給它命名並獨立定義;如果只用一次,考慮匿名函式。箭頭函式和傳統函式語法都行,不過現代 JavaScript 廣泛使用箭頭函式。 ### 🎨 函式風格熟練度檢測:選擇合適的語法 測驗你對語法的了解: - 什麼時候你會偏好箭頭函式而非傳統函式語法? - 匿名函式的主要優點是什麼? - 你能想到哪種情況下命名函式比匿名函式好? --- ## 🚀 挑戰 請試著用一句話說明函式與方法的差異? ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成以下挑戰: 描述: 建立一個數學函式工具庫,示範本課涵蓋的函式概念,包括參數、預設值、回傳值與箭頭函式。 提示: 建立一個名為 mathUtils.js 的 JavaScript 檔案,包含下列函式: 1. 一個有兩個參數,回傳兩者和的函式 add 2. 一個帶有預設參數值的函式 multiply(第二個參數預設為 1) 3. 一個箭頭函式 square,接受一個數字並回傳平方 4. 一個函式 calculate,接受另一個函式及兩個數字參數,並將該函式應用於兩數上 5. 展示各函式的適當測試案例呼叫 了解更多 Agent 模式。 ## 課後小測驗 課後小測驗 ## 複習與自學 值得多讀一些關於 箭頭函式 的資料,因為它們越來越多用於程式碼庫。練習寫一個函式,然後用這種語法重寫一遍。 ## 作業 函式樂趣 --- ## 🧰 你的 JavaScript 函式工具包摘要 --- ## 🚀 你的 JavaScript 函式掌握時間軸 ### ⚡ 接下來五分鐘你能做的事 - [ ] 寫一個簡單函式回傳你最喜歡的數字 - [ ] 建立一個有兩個參數的函式,將二者相加 - [ ] 嘗試將傳統函式轉換為箭頭函式語法 - [ ] 練習本挑戰:解釋函式與方法之間的差異 ### 🎯 你這小時內可以完成的事項 - [ ] 完成課後測驗並複習任何令人困惑的概念 - [ ] 建構 GitHub Copilot 挑戰中的數學工具庫 - [ ] 創建一個使用另一個函式作為參數的函式 - [ ] 練習撰寫具有預設參數的函式 - [ ] 嘗試在函式回傳值中使用模板字串 ### 📅 你為期一週的函式精通計畫 - [ ] 創意完成「函式樂趣」作業 - [ ] 將寫過的重複程式碼重構成可重複使用的函式 - [ ] 僅使用函式來建構一個小型計算機(不使用全域變數) - [ ] 練習使用箭頭函式搭配陣列方法如 map() 和 filter() - [ ] 建立一組常用任務的工具函式集合 - [ ] 研究高階函式與函式式程式設計概念 ### 🌟 你為期一個月的蛻變計畫 - [ ] 精通進階函式概念,如閉包與作用域 - [ ] 建構一個大量使用函式組合的專案 - [ ] 透過改進函式文件來貢獻開源專案 - [ ] 教導他人函式及不同語法風格 - [ ] 探索 JavaScript 中的函式式程式設計範式 - [ ] 建立個人可重用函式庫供未來專案使用 ### 🏆 最終函式冠軍檢視 慶祝你的函式精通: - 到目前為止你創建的最有用函式是什麼? - 學習函式後,你對程式碼組織的思考方式有何改變? - 你偏好哪種函式語法?為什麼? - 你會透過撰寫函式解決什麼現實世界的問題? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件係使用AI翻譯服務Co-op Translator進行翻譯。雖然我們力求準確,但請注意自動翻譯可能存在錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤讀承擔責任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:做出決策

你是否曾好奇應用程式如何做出聰明的決定?例如導航系統如何選擇最快路線,或者恆溫器如何決定何時開啟暖氣?這是程式設計中決策制定的基本概念。 正如查爾斯·巴貝奇的分析機設計用於根據條件執行不同的運算序列,現代 JavaScript 程式也需要根據不同情況做出選擇。這種分支與決策的能力,將靜態代碼轉變為具回應性的智慧型應用程式。 在本課程中,你將學會如何在程式中實作條件邏輯。 我們將探討條件語句、比較運算子和邏輯表達式,讓程式可以評估情況並適當回應。 ## 課前小測 課前小測 做出決策並控制程式流程的能力是程式撰寫的基本面向。這個章節涵蓋如何使用布林值和條件邏輯控制 JavaScript 程式的執行路徑。 [](https://youtube.com/watch?v=SxTp8j-fMMY "做出決策") ## 布林值簡介回顧 在探討決策之前,讓我們回顧先前課程中的布林值。這個名稱來自數學家喬治·布爾 (George Boole),表示二元狀態——true 或 false。沒有模糊地帶,沒有中間值。 這些二元值是所有計算邏輯的基礎。程式所做的每個決策,最終都歸結於布林評估。 建立布林變數非常簡單: 這樣會建立兩個具有明確布林值的變數。 ✅ 布林值是以英國數學家、哲學家與邏輯學家喬治·布爾 (1815–1864) 的名字命名。 ## 比較運算子與布林值 實務上,你很少會手動設置布林值。你會透過評估條件來生成它們:「這個數字是否大於那個?」或是「這些值是否相等?」 比較運算子可用來進行這些評估。它們比較數值,並根據運算元之間的關係回傳布林結果。 ✅ 透過在瀏覽器的主控台撰寫一些比較運算,檢驗你的理解。有回傳結果讓你感到意外嗎? ### 🧠 比較運算理解測試:掌握布林邏輯 測試你的比較知識: - 為什麼普遍推薦使用 ===(嚴格相等)而非 ==(寬鬆相等)? - 你能預測 5 === '5' 會回傳什麼嗎?5 == '5' 呢? - !== 與 != 的差別是什麼? ## If 陳述式 if 陳述式就像向程式問問題。「如果這個條件為真,那就執行這件事。」這很可能是你在 JavaScript 中做決策時最重要的工具。 運作方式如下: 條件放在括號中,如果結果是 true,JavaScript 就會執行大括號裡的程式碼;若是 false,JavaScript 則會跳過整個區塊。 你經常會使用比較運算子來建立條件,讓我們來看個實例: 因為 1000 >= 800 評估結果為 true,區塊裡的程式執行,在主控台顯示「Getting a new laptop!」。 ## If..Else 陳述式 那麼,如果你希望條件是 false 時執行不同的程式呢?這就是 else 的用武之地,有點像預備方案。 else 陳述式讓你可以這麼說:「如果這個條件不成立,那就執行另外這件事。」 現在因為 500 >= 800 是 false,JavaScript 就會跳過第一個區塊,執行 else 裡的程式碼。你會在主控台看到「Can't afford a new laptop, yet!」。 ✅ 透過在瀏覽器主控台執行這段程式與以下程式,驗證你是否理解此行為。改變 currentMoney 和 laptopPrice 變數的值,看看 console.log() 顯示結果如何變化。 ### 🎯 If-Else 邏輯檢視:分支路徑 評估你的條件邏輯理解: - 如果 currentMoney 等於剛好等於 laptopPrice,會發生什麼事? - 你能想到實際情境中何時會用到 if-else 邏輯嗎? - 你會如何擴充程式以處理多個價格區間? ## Switch 陳述式 有時你需要將一個值與多個選項做比較。雖然可以串接多個 if..else,但是這樣寫起來非常繁瑣。switch 陳述式提供了更清晰的結構來處理多個離散值。 該概念類似早期電話交換機的機械切換系統——一個輸入值決定執行的特定路徑。 結構如下: - JavaScript 先評估表達式一次 - 逐一檢查每個 case 是否匹配 - 找到匹配時,執行該區塊程式碼 - break 告訴 JavaScript 停止並離開 switch - 若沒有任何 case 匹配,執行 default 區塊(如果有的話) 在此例中,JavaScript 看到 dayNumber 為 2,找到對應的 case 2,將 dayName 設為「Tuesday」,然後跳出 switch。結果是「Today is Tuesday」被輸出到主控台。 ✅ 透過在瀏覽器主控台執行這段程式與以下程式,驗證你是否理解,改變變數 a 的值看看 console.log() 顯示結果。 ### 🔄 Switch 陳述式精通:多選項 測試你對 switch 的認識: - 忘記撰寫 break 會怎麼樣? - 什麼時候你會用 switch 而不是多個 if-else? - 為什麼 default 案例即使你認為已涵蓋所有可能,也很有用? ## 邏輯運算子與布林值 複雜決策通常需要同時評估多個條件。正如布林代數協助數學家結合邏輯表達式,程式設計語言提供邏輯運算子來串接多個布林條件。 這些運算子讓你能將簡單的真/假評估組合成複雜的條件邏輯。 這些運算子讓你可以以實用的方式結合條件: - AND (&&) 表示兩條件都必須為真 - OR (||) 表示至少一條件為真 - NOT (!) 將真變假(反之亦然) ## 使用邏輯運算子做條件和決策 用更實際的範例看看邏輯運算子的運作: 在此範例中:我們計算 20% 折扣後的價格(640),接著評估我們是否有足夠的資金支付全額或折扣價。600 沒有達到折扣價 640 閥值,因此條件評估結果是 false。 ### 🧮 邏輯運算子檢視:結合條件 測試你的邏輯運算子理解: - 在表達式 A && B 中,若 A 為假,B 會被執行嗎? - 你能想到什麼情況需要同時用到三個運算子(&&、||、!)嗎? - !user.isActive 和 user.isActive !== true 有何不同? ### 否定運算子 有時比較容易思考「某件事不成立的狀態」。譬如不是問「使用者是否已登入?」而是問「使用者是否尚未登入?」感嘆號(!)運算子便可幫你反轉邏輯。 ! 運算子就像說「相反的...」— 若為真,! 使其為假,反之亦然。 ### 三元運算式 針對簡單條件賦值,JavaScript 提供了三元運算子。這精簡的語法可以在一行內寫出條件表達式,在你需要根據條件賦予兩個值中其中一個時非常方便。 它的語意像個問題:「條件成立嗎?如果是,使用這個值。若否,使用那個值。」 下面是比較實際的範例: ✅ 花點時間多讀幾遍這段程式,了解運算子如何運作。 這行的意義在說:「firstNumber 是否大於 secondNumber?如果成立,將 firstNumber 指派給 biggestNumber,否則將 secondNumber 指派給 biggestNumber。」 三元運算子是傳統 if..else 陳述式的簡寫: 兩者結果相同。三元運算子比較簡潔,而傳統if-else結構在條件複雜時可能較易讀。 --- ## 🚀 挑戰 創建一段程式,先用邏輯運算子撰寫,再用三元運算式改寫。你偏好哪種語法? --- ## GitHub Copilot 代理人挑戰 🚀 使用代理人模式完成以下挑戰: 描述: 創建一個完整的成績計算器,展現本課涵蓋的多個決策概念,包括 if-else 陳述式、switch 陳述式、邏輯運算子和三元運算式。 提示: 撰寫一個 JavaScript 程式,輸入學生的數值成績(0-100),並依據以下標準判定其等第: - A:90-100 - B:80-89 - C:70-79 - D:60-69 - F:60 以下 需求: 1. 使用 if-else 陳述式來判斷等第 2. 使用邏輯運算子檢查學生是否及格(grade >= 60)且有榮譽(grade >= 90) 3. 使用 switch 陳述式提供每個字母等級的具體反饋 4. 使用三元運算子判斷學生是否有資格參加下一門課程(grade >= 70) 5. 包含輸入驗證以確保成績介於 0 至 100 之間 使用包含邊界值如 59、60、89、90 以及無效輸入的各種分數測試您的程式。 在此處了解更多關於 agent mode 的資訊。 ## 課後小測驗 課後小測驗 ## 複習與自學 閱讀更多關於使用者可用的各種運算子,請見 MDN。 瀏覽 Josh Comeau 精彩的 operator lookup! ## 作業 運算子 --- ## 🧠 您的決策工具包摘要 --- ## 🚀 您的 JavaScript 決策精通時間表 ### ⚡ 接下來 5 分鐘您可以做的事 - [ ] 在瀏覽器主控台練習比較運算子 - [ ] 撰寫一個簡單的 if-else 陳述式檢查您的年齡 - [ ] 嘗試挑戰:使用三元運算子重寫 if-else - [ ] 測試不同「真值」及「假值」的結果 ### 🎯 本小時內您可以完成的目標 - [ ] 完成課後測驗並複習任何令人困惑的概念 - [ ] 從 GitHub Copilot 挑戰建立綜合計分計算器 - [ ] 為真實情境(如選擇穿著)建立簡單決策樹 - [ ] 練習結合多重條件與邏輯運算子 - [ ] 嘗試針對不同使用場景使用 switch 陳述式 ### 📅 您本週的邏輯精通路徑 - [ ] 利用創意範例完成運算子作業 - [ ] 建立使用多種條件結構的迷你測驗應用程式 - [ ] 建立可檢查多重輸入條件的表單驗證器 - [ ] 練習 Josh Comeau 的 operator lookup 練習題 - [ ] 重構既有程式碼使之使用更合適的條件結構 - [ ] 研究短路評估與效能影響 ### 🌟 您本月的轉型目標 - [ ] 精通複雜巢狀條件並維持程式碼可讀性 - [ ] 建立具高度決策邏輯的應用程式 - [ ] 透過改進既有專案的條件邏輯對開源做出貢獻 - [ ] 教導他人不同條件結構及使用時機 - [ ] 探索函式式程式設計方法於條件邏輯 - [ ] 建立個人條件式最佳實踐參考指南 ### 🏆 最終決策大師檢視 慶祝您的邏輯思考精通: - 您成功實作過最複雜的決策邏輯是什麼? - 哪種條件結構對您來說最自然?為什麼? - 學習邏輯運算子如何改變了您的問題解決方式? - 哪種真實世界應用會因此受益於複雜的決策邏輯? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件透過 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件以其母語版本為權威依據。對於重要資訊,建議採用專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤釋負責。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

JavaScript 基礎:陣列與迴圈

## 課前測驗 課前測驗 你是否曾好奇網站如何追蹤購物車的商品或顯示你的好友列表?這正是陣列與迴圈派上用場的地方。陣列就像數位容器,可以容納多筆資訊;而迴圈則讓你有效率地處理這些資料,無需重複寫出相同的程式碼。 這兩個概念合起來構成了你程式處理資訊的基礎。你將學會如何從手動寫出每個步驟,進化到寫出智慧且高效率的程式碼,能快速處理數百甚至數千個項目。 在本課程結束時,你將明白如何用幾行程式碼完成複雜的資料工作。讓我們一起探索這些程式設計的必備概念。 [](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") ## 陣列 把陣列想像成數位檔案櫃 — 不是每個抽屜放一份文件,而是在一個結構化的容器中組織多個相關項目。用程式語言來說,陣列讓你能將多筆資訊存放在一個有序的整合包中。 無論你是在建立相片集、管理待辦清單,或追蹤遊戲高分,陣列都提供了資料組織的基礎。讓我們看看陣列的運作方式。 ✅ 陣列就在你身邊!你能想到一個真實生活中的陣列例子嗎,例如太陽能板陣列? ### 建立陣列 建立陣列超簡單 — 用中括號就搞定! 這裡發生了什麼? 你剛用中括號 [] 建立了一個空的容器,就像一個空的圖書架,可以放你想整理的任何書籍。 你也可以從一開始就填入初始值: 注意事項: - 你可以在同一陣列中存放文字、數字甚至真假值 - 用逗號分隔每個項目 — 超簡單! - 陣列非常適合將相關資訊放在一起 ### 陣列索引 這裡有件事一開始可能覺得奇怪:陣列的索引從 0 開始,而不是 1。這種從零開始的索引源自電腦記憶體的運作方式 — 這是從像 C 語言這樣早期程式語言開始的慣例。陣列中每個位置都有一個稱作 索引 的地址號。 ✅ 陣列從索引 0 開始讓你驚訝嗎?在有些程式語言裡索引是從 1 開始。這背後有段有趣的歷史,你可以在 維基百科 詳細閱讀。 存取陣列元素: 拆解下面的流程: - 用 中括號加索引存取元素 - 回傳 該位置存放的值 - 從 0 開始計數,第一個元素索引就是 0 修改陣列元素: 上述程式碼說明: - 將 索引為 4 的元素從 "Rocky Road" 改為 "Butter Pecan" - 新增 索引為 5 的元素 "Cookie Dough" - 陣列長度 自動擴充以容納新加入的元素 ### 陣列長度與常用方法 陣列附帶內建屬性與方法,可以讓資料操作更簡單。 取得陣列長度: 重點提醒: - 回傳 陣列中元素總數 - 會隨 新增或移除元素自動更新 - 用於 迴圈與驗證時提供動態計數 常用陣列方法: 理解這些方法: - 用 push()(尾部)與 unshift()(頭部)新增元素 - 用 pop()(尾部)與 shift()(頭部)移除元素 - 用 indexOf() 查找元素,用 includes() 檢查是否存在 - 提供移除元素或索引位置等有用資訊 ✅ 自己試試看!在瀏覽器的主控台建立並操作你自己的陣列。 ### 🧠 陣列基礎檢測:資料組織 考考你對陣列的理解: - 你覺得陣列為何從 0 開始計數,而不是 1? - 如果嘗試存取不存在的索引(例如在 5 個元素的陣列中存取 arr[100])會怎樣? - 你能想到三個現實生活中會用到陣列的場景嗎? ## 迴圈 把迴圈想像成在查爾斯‧狄更斯小說中寫字懲罰的場景,學生得反覆在石板上抄寫字句。想像你可以簡單下指令「寫這句話 100 次」,程式就能自動完成。迴圈就是為你的程式碼做到這點。 迴圈就像有位不知疲倦的助理,可以無誤重複工作。無論你需要檢查購物車每個項目、或是顯示相簿中所有照片,迴圈都能有效率地處理重複動作。 JavaScript 提供多種迴圈供選擇。讓我們逐一檢視,並了解何時使用。 ### For 迴圈 for 迴圈就像設定計時器 — 你知道確切次數要讓事情發生。結構清楚且可預測,最適合操作陣列或需要計數的場合。 For 迴圈結構: 逐步說明: - 在一開始 初始化計數器 i 為 0 - 每次 執行前檢查條件 i < 10 - 當條件為真時 執行區塊程式 - 每次迴圈後 執行 i++ 使 i 加 1 - 當條件變假時(i 達 10)停止迴圈 ✅ 在瀏覽器主控台執行此程式碼。修改計數器、條件或遞增表達式會怎樣?能讓它倒數運作,變成倒數計時嗎? ### 🗓️ For 迴圈精熟檢測:可控重複 評估你對 for 迴圈的理解: - for 迴圈的三個部分是什麼?每個的功能為何? - 如何讓迴圈從陣列尾端往前執行? - 如果忘記遞增部分 (i++) 會發生什麼? ### While 迴圈 while 迴圈就像說「持續做這件事直到...」— 你或許不知道會執行多少次,但知道何時停止。很適合問使用者輸入直到得到想要的資料,或搜尋資料直到找到目標。 While 迴圈特色: - 只要條件為真 就繼續執行 - 需手動管理 計數器變數 - 每次迭代前 先檢查條件 - 若條件永遠真 有無限迴圈風險 解讀範例: - 手動管理 迴圈內的計數器 i - 遞增 計數器避免無限迴圈 - 展示 透過使用者輸入與嘗試限制的實際用法 - 內建 防止無限執行的安全機制 ### ♾️ While 迴圈智慧檢測:基於條件的重複 測試你對 while 迴圈的了解: - 使用 while 迴圈時主要風險是什麼? - 何時會選擇 while 迴圈而非 for 迴圈? - 如何避免無限迴圈? ### 現代迴圈替代方案 JavaScript 提供現代迴圈語法,使程式碼更易讀且降低錯誤。 For...of 迴圈 (ES6+): for...of 的主要優點: - 免除 索引管理,減少 off-by-one 錯誤 - 直接取得 陣列元素 - 提升 程式碼可讀性,降低語法複雜度 forEach 方法: 關於 forEach 的重點: - 為陣列每個元素 執行一段函式 - 提供 元素值與索引作為參數 - 無法提前停止(不同於傳統迴圈) - 回傳 undefined(不會產生新陣列) ✅ 為何會選擇 for 迴圈而非 while 迴圈?在 StackOverflow 上有 1.7 萬人討論這話題,部分意見你可能會覺得有趣 觀看討論。 ### 🎨 現代迴圈語法檢測:擁抱 ES6+ 評估你對現代 JavaScript 的掌握度: - for...of 相較於傳統 for 迴圈有什麼優點? - 在什麼時候你仍會偏好用傳統 for 迴圈? - forEach 與 map 有什麼差異? ## 迴圈與陣列 陣列與迴圈結合可創造強大的資料處理能力。這對許多程式任務至關重要,從顯示清單到計算統計數據。 傳統陣列處理: 理解不同方法: - 用陣列長度屬性決定迴圈界限 - 傳統 for 迴圈用索引存取元素 - for...of 迴圈直接取得元素 - 每個元素只處理一次 實務資料處理範例: 程式碼運作說明: - 初始化統計變數,用於加總與極值追蹤 - 高效地遍歷每一個成績 - 累積成績總和計算平均 - 迴圈中同時記錄最高與最低分 - 迴圈結束時計算出最終統計數據 ✅ 在瀏覽器主控台用自己建立的陣列練習迴圈處理。 --- ## GitHub Copilot Agent 挑戰 🚀 使用 Agent 模式完成下列挑戰: 說明: 建立一個結合陣列與迴圈的綜合資料處理函式,分析資料集並產生有意義的洞察。 提示: 建立一個名為 analyzeGrades 的函式,接受一個學生成績物件陣列(每個物件包含姓名與分數屬性),返回一個統計物件,包含最高分、最低分、平均分、及格人數(分數 >= 70)和高於平均分的學生姓名陣列。你的解決方案中至少要使用兩種不同的迴圈類型。 在此了解更多關於 Agent 模式。 ## 🚀 挑戰 JavaScript 提供了幾個現代陣列方法,可以取代特定任務的傳統迴圈。探索 forEach、for-of、map、filter 和 reduce。 你的挑戰: 使用至少三種不同的陣列方法重構學生分數範例。注意隨著現代 JavaScript 語法,程式碼變得更加精簡且易讀。 ## 課後小考 課後小考 ## 複習與自學 JavaScript 的陣列附帶許多方法,在資料操作上非常有用。閱讀這些方法 並嘗試在你自己建立的陣列上使用它們(例如 push、pop、slice 和 splice)。 ## 作業 陣列迴圈 --- ## 📊 你的陣列與迴圈工具總結 --- ## 🚀 你的陣列與迴圈精通時間表 ### ⚡ 接下來 5 分鐘你可以做的事 - [ ] 建立你最喜愛電影的陣列並存取特定元素 - [ ] 寫一個從 1 數到 10 的 for 迴圈 - [ ] 嘗試課程中的現代陣列方法挑戰 - [ ] 在瀏覽器主控台練習陣列索引 ### 🎯 這一小時內你可以完成的目標 - [ ] 完成課後小考,複習挑戰性的概念 - [ ] 建立來自 GitHub Copilot 挑戰的完整成績分析器 - [ ] 建立一個簡單的購物車,能新增和移除商品 - [ ] 練習不同迴圈類型間的轉換 - [ ] 嘗試使用 push、pop、slice 和 splice 等陣列方法 ### 📅 你這週的資料處理旅程 - [ ] 完成「陣列迴圈」作業並加入創意改良 - [ ] 使用陣列與迴圈建立待辦事項清單應用程式 - [ ] 建立一個簡單的數據統計計算器 - [ ] 練習使用 MDN 陣列方法 - [ ] 建立圖片庫或音樂播放清單介面 - [ ] 探索使用 map、filter 和 reduce 的函式式程式設計 ### 🌟 你這月的變革 - [ ] 精通高級陣列操作與效能優化 - [ ] 建立完整的資料視覺化儀表板 - [ ] 參與開源數據處理專案 - [ ] 用實際範例教導他人陣列與迴圈 - [ ] 建立可重用的個人資料處理函式庫 - [ ] 探索以陣列建構的演算法與資料結構 ### 🏆 終極資料處理冠軍自我檢測 慶祝你對陣列與迴圈的精通: - 你學到的陣列操作中,哪項對真實世界應用最有用? - 哪種迴圈類型你覺得最自然?為什麼? - 理解陣列與迴圈後,你對組織資料的思考有何改變? - 你接下來想挑戰什麼複雜的資料處理任務? --- <!-- CO-OP TRANSLATOR DISCLAIMER START --> 免責聲明: 本文件由 AI 翻譯服務 Co-op Translator 翻譯而成。雖然我們致力於確保翻譯的準確性,但請注意自動翻譯可能包含錯誤或不精確之處。原文文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤用承擔責任。 <!-- CO-OP TRANSLATOR DISCLAIMER END -->

javascript

An Introduction to JavaScript

Let's see what's so special about JavaScript, what we can achieve with it, and what other technologies play well with it. ## What is JavaScript? JavaScript was initially created to "make web pages alive". The programs in this language are called scripts. They can be written right in a web page's HTML and run automatically as the page loads. Scripts are provided and executed as plain text. They don't need special preparation or compilation to run. In this aspect, JavaScript is very different from another language called Java). Today, JavaScript can execute not only in the browser, but also on the server, or actually on any device that has a special program called the JavaScript engine. The browser has an embedded engine sometimes called a "JavaScript virtual machine". Different engines have different "codenames". For example: - V8) -- in Chrome, Opera and Edge. - SpiderMonkey -- in Firefox. - ...There are other codenames like "Chakra" for IE, "JavaScriptCore", "Nitro" and "SquirrelFish" for Safari, etc. The terms above are good to remember because they are used in developer articles on the internet. We'll use them too. For instance, if "a feature X is supported by V8", then it probably works in Chrome, Opera and Edge. ## What can in-browser JavaScript do? Modern JavaScript is a "safe" programming language. It does not provide low-level access to memory or the CPU, because it was initially created for browsers which do not require it. JavaScript's capabilities greatly depend on the environment it's running in. For instance, Node.js supports functions that allow JavaScript to read/write arbitrary files, perform network requests, etc. In-browser JavaScript can do everything related to webpage manipulation, interaction with the user, and the webserver. For instance, in-browser JavaScript is able to: - Add new HTML to the page, change the existing content, modify styles. - React to user actions, run on mouse clicks, pointer movements, key presses. - Send requests over the network to remote servers, download and upload files (so-called AJAX) and COMET) technologies). - Get and set cookies, ask questions to the visitor, show messages. - Remember the data on the client-side ("local storage"). ## What CAN'T in-browser JavaScript do? JavaScript's abilities in the browser are limited to protect the user's safety. The aim is to prevent an evil webpage from accessing private information or harming the user's data. Examples of such restrictions include: - JavaScript on a webpage may not read/write arbitrary files on the hard disk, copy them or execute programs. It has no direct access to OS functions. Modern browsers allow it to work with files, but the access is limited and only provided if the user does certain actions, like "dropping" a file into a browser window or selecting it via an <input> tag. There are ways to interact with the camera/microphone and other devices, but they require a user's explicit permission. So a JavaScript-enabled page may not sneakily enable a web-camera, observe the surroundings and send the information to the NSA. - Different tabs/windows generally do not know about each other. Sometimes they do, for example when one window uses JavaScript to open the other one. But even in this case, JavaScript from one page may not access the other page if they come from different sites (from a different domain, protocol or port). This is called the "Same Origin Policy". To work around that, both pages must agree for data exchange and must contain special JavaScript code that handles it. We'll cover that in the tutorial. This limitation is, again, for the user's safety. A page from http://anysite.com which a user has opened must not be able to access another browser tab with the URL http://gmail.com, for example, and steal information from there. - JavaScript can easily communicate over the net to the server where the current page came from. But its ability to receive data from other sites/domains is severely limited. Though possible, it requires explicit agreement (expressed in HTTP headers) from the remote side. Once again, that's a safety limitation. Such limitations do not exist if JavaScript is used outside of the browser, for example on a server. Modern browsers also allow plugins/extensions which may ask for extended permissions. ## What makes JavaScript unique? There are at least three great things about JavaScript: JavaScript is the only browser technology that combines these three things. That's what makes JavaScript unique. That's why it's the most widespread tool for creating browser interfaces. That said, JavaScript can be used to create servers, mobile applications, etc. ## Languages "over" JavaScript The syntax of JavaScript does not suit everyone's needs. Different people want different features. That's to be expected, because projects and requirements are different for everyone. So, recently a plethora of new languages appeared, which are transpiled (converted) to JavaScript before they run in the browser. Modern tools make the transpilation very fast and transparent, actually allowing developers to code in another language and auto-converting it "under the hood". Examples of such languages: - CoffeeScript is "syntactic sugar" for JavaScript. It introduces shorter syntax, allowing us to write clearer and more precise code. Usually, Ruby devs like it. - TypeScript is concentrated on adding "strict data typing" to simplify the development and support of complex systems. It is developed by Microsoft. - Flow also adds data typing, but in a different way. Developed by Facebook. - Dart is a standalone language that has its own engine that runs in non-browser environments (like mobile apps), but also can be transpiled to JavaScript. Developed by Google. - Brython is a Python transpiler to JavaScript that enables the writing of applications in pure Python without JavaScript. - Kotlin is a modern, concise and safe programming language that can target the browser or Node. There are more. Of course, even if we use one of these transpiled languages, we should also know JavaScript to really understand what we're doing. ## Summary - JavaScript was initially created as a browser-only language, but it is now used in many other environments as well. - Today, JavaScript has a unique position as the most widely-adopted browser language, fully integrated with HTML/CSS. - There are many languages that get "transpiled" to JavaScript and provide certain features. It is recommended to take a look at them, at least briefly, after mastering JavaScript.

javascript

Manuals and specifications

This book is a tutorial. It aims to help you gradually learn the language. But once you're familiar with the basics, you'll need other resources. ## Specification The ECMA-262 specification contains the most in-depth, detailed and formalized information about JavaScript. It defines the language. But being that formalized, it's difficult to understand at first. So if you need the most trustworthy source of information about the language details, the specification is the right place. But it's not for everyday use. A new specification version is released every year. Between these releases, the latest specification draft is at <https://tc39.es/ecma262/>. To read about new bleeding-edge features, including those that are "almost standard" (so-called "stage 3"), see proposals at <https://github.com/tc39/proposals>. Also, if you're developing for the browser, then there are other specifications covered in the second part of the tutorial. ## Manuals - MDN (Mozilla) JavaScript Reference is the main manual with examples and other information. It's great to get in-depth information about individual language functions, methods etc. You can find it at <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>. Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. <https://google.com/search?q=MDN+parseInt> to search for the parseInt function. ## Compatibility tables JavaScript is a developing language, new features get added regularly. To see their support among browser-based and other engines, see: - <https://caniuse.com> - per-feature tables of support, e.g. to see which engines support modern cryptography functions: <https://caniuse.com/#feat=cryptography>. - <https://kangax.github.io/compat-table> - a table with language features and engines that support those or don't support. All these resources are useful in real-life development, as they contain valuable information about language details, their support, etc. Please remember them (or this page) for the cases when you need in-depth information about a particular feature.

web,development

Code editors

A code editor is the place where programmers spend most of their time. There are two main types of code editors: IDEs and lightweight editors. Many people use one tool of each type. ## IDE The term IDE (Integrated Development Environment) refers to a powerful editor with many features that usually operates on a "whole project." As the name suggests, it's not just an editor, but a full-scale "development environment." An IDE loads the project (which can be many files), allows navigation between files, provides autocompletion based on the whole project (not just the open file), and integrates with a version management system (like git), a testing environment, and other "project-level" stuff. If you haven't selected an IDE yet, consider the following options: - Visual Studio Code (cross-platform, free). - WebStorm (cross-platform, paid). For Windows, there's also "Visual Studio", not to be confused with "Visual Studio Code". "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. It's also good at JavaScript. There's also a free version Visual Studio Community. Many IDEs are paid, but have a trial period. Their cost is usually negligible compared to a qualified developer's salary, so just choose the best one for you. ## Lightweight editors "Lightweight editors" are not as powerful as IDEs, but they're fast, elegant and simple. They are mainly used to open and edit a file instantly. The main difference between a "lightweight editor" and an "IDE" is that an IDE works on a project-level, so it loads much more data on start, analyzes the project structure if needed and so on. A lightweight editor is much faster if we need only one file. In practice, lightweight editors may have a lot of plugins including directory-level syntax analyzers and autocompleters, so there's no strict border between a lightweight editor and an IDE. There are many options, for instance: - Sublime Text (cross-platform, shareware). - Notepad++ (Windows, free). - Vim and Emacs are also cool if you know how to use them. ## Let's not argue The editors in the lists above are those that either I or my friends whom I consider good developers have been using for a long time and are happy with. There are other great editors in our big world. Please choose the one you like the most. The choice of an editor, like any other tool, is individual and depends on your projects, habits, and personal preferences. The author's personal opinion: - I'd use Visual Studio Code if I develop mostly frontend. - Otherwise, if it's mostly another language/platform and partially frontend, then consider other editors, such as XCode (Mac), Visual Studio (Windows) or Jetbrains family (Webstorm, PHPStorm, RubyMine etc, depending on the language).

web,development

Developer console

Code is prone to errors. You will quite likely make errors... Oh, what am I talking about? You are absolutely going to make errors, at least if you're a human, not a robot). But in the browser, users don't see errors by default. So, if something goes wrong in the script, we won't see what's broken and can't fix it. To see errors and get a lot of other useful information about scripts, "developer tools" have been embedded in browsers. Most developers lean towards Chrome or Firefox for development because those browsers have the best developer tools. Other browsers also provide developer tools, sometimes with special features, but are usually playing "catch-up" to Chrome or Firefox. So most developers have a "favorite" browser and switch to others if a problem is browser-specific. Developer tools are potent; they have many features. To start, we'll learn how to open them, look at errors, and run JavaScript commands. ## Google Chrome Open the page bug.html. There's an error in the JavaScript code on it. It's hidden from a regular visitor's eyes, so let's open developer tools to see it. Press key:F12 or, if you're on Mac, then key:Cmd+Opt+J. The developer tools will open on the Console tab by default. It looks somewhat like this: The exact look of developer tools depends on your version of Chrome. It changes from time to time but should be similar. - Here we can see the red-colored error message. In this case, the script contains an unknown "lalala" command. - On the right, there is a clickable link to the source bug.html:12 with the line number where the error has occurred. Below the error message, there is a blue > symbol. It marks a "command line" where we can type JavaScript commands. Press key:Enter to run them. Now we can see errors, and that's enough for a start. We'll come back to developer tools later and cover debugging more in-depth in the chapter <info:debugging-chrome>. ## Firefox, Edge, and others Most other browsers use key:F12 to open developer tools. The look & feel of them is quite similar. Once you know how to use one of these tools (you can start with Chrome), you can easily switch to another. ## Safari Safari (Mac browser, not supported by Windows/Linux) is a little bit special here. We need to enable the "Develop menu" first. Open Settings and go to the "Advanced" pane. There's a checkbox at the bottom: Now key:Cmd+Opt+C can toggle the console. Also, note that the new top menu item named "Develop" has appeared. It has many commands and options. ## Summary - Developer tools allow us to see errors, run commands, examine variables, and much more. - They can be opened with key:F12 for most browsers on Windows. Chrome for Mac needs key:Cmd+Opt+J, Safari: key:Cmd+Opt+C (need to enable first). Now we have the environment ready. In the next section, we'll get down to JavaScript.

web,development

Hello, world!

This part of the tutorial is about core JavaScript, the language itself. But we need a working environment to run our scripts and, since this book is online, the browser is a good choice. We'll keep the amount of browser-specific commands (like alert) to a minimum so that you don't spend time on them if you plan to concentrate on another environment (like Node.js). We'll focus on JavaScript in the browser in the next part of the tutorial. So first, let's see how we attach a script to a webpage. For server-side environments (like Node.js), you can execute the script with a command like "node my.js". ## The "script" tag JavaScript programs can be inserted almost anywhere into an HTML document using the <script> tag. For instance: The <script> tag contains JavaScript code which is automatically executed when the browser processes the tag. ## Modern markup The <script> tag has a few attributes that are rarely used nowadays but can still be found in old code: The type attribute: <code>&lt;script <u>type</u>=...&gt;</code> : The old HTML standard, HTML4, required a script to have a type. Usually it was type="text/javascript". It's not required anymore. Also, the modern HTML standard totally changed the meaning of this attribute. Now, it can be used for JavaScript modules. But that's an advanced topic, we'll talk about modules in another part of the tutorial. The language attribute: <code>&lt;script <u>language</u>=...&gt;</code> : This attribute was meant to show the language of the script. This attribute no longer makes sense because JavaScript is the default language. There is no need to use it. Comments before and after scripts. : In really ancient books and guides, you may find comments inside <script> tags, like this: ```html no-beautify <script type="text/javascript"><!-- ... //--></script> ``` This trick isn't used in modern JavaScript. These comments hide JavaScript code from old browsers that didn't know how to process the <script> tag. Since browsers released in the last 15 years don't have this issue, this kind of comment can help you identify really old code. ## External scripts If we have a lot of JavaScript code, we can put it into a separate file. Script files are attached to HTML with the src attribute: Here, /path/to/script.js is an absolute path to the script from the site root. One can also provide a relative path from the current page. For instance, src="script.js", just like src="./script.js", would mean a file "script.js" in the current folder. We can give a full URL as well. For instance: To attach several scripts, use multiple tags: <script !src/!="file.js"> alert(1); // the content is ignored, because src is set </script> <script src="file.js"></script> <script> alert(1); </script> ## Summary - We can use a <script> tag to add JavaScript code to a page. - The type and language attributes are not required. - A script in an external file can be inserted with <script src="path/to/script.js"></script>. There is much more to learn about browser scripts and their interaction with the webpage. But let's keep in mind that this part of the tutorial is devoted to the JavaScript language, so we shouldn't distract ourselves with browser-specific implementations of it. We'll be using the browser as a way to run JavaScript, which is very convenient for online reading, but only one of many.

web,development

Code structure

The first thing we'll study is the building blocks of code. ## Statements Statements are syntax constructs and commands that perform actions. We've already seen a statement, alert('Hello, world!'), which shows the message "Hello, world!". We can have as many statements in our code as we want. Statements can be separated with a semicolon. For example, here we split "Hello World" into two alerts: Usually, statements are written on separate lines to make the code more readable: ## Semicolons [#semicolon] A semicolon may be omitted in most cases when a line break exists. This would also work: Here, JavaScript interprets the line break as an "implicit" semicolon. This is called an automatic semicolon insertion. In most cases, a newline implies a semicolon. But "in most cases" does not mean "always"! There are cases when a newline does not mean a semicolon. For example: The code outputs 6 because JavaScript does not insert semicolons here. It is intuitively obvious that if the line ends with a plus "+", then it is an "incomplete expression", so a semicolon there would be incorrect. And in this case, that works as intended. But there are situations where JavaScript "fails" to assume a semicolon where it is really needed. Errors which occur in such cases are quite hard to find and fix. alert("Hello"); [1, 2].forEach(alert); alert("Hello") [1, 2].forEach(alert); alert("Hello")[1, 2].forEach(alert); We recommend putting semicolons between statements even if they are separated by newlines. This rule is widely adopted by the community. Let's note once again -- it is possible to leave out semicolons most of the time. But it's safer -- especially for a beginner -- to use them. ## Comments [#code-comments] As time goes on, programs become more and more complex. It becomes necessary to add comments which describe what the code does and why. Comments can be put into any place of a script. They don't affect its execution because the engine simply ignores them. One-line comments start with two forward slash characters //. The rest of the line is a comment. It may occupy a full line of its own or follow a statement. Like here: Multiline comments start with a forward slash and an asterisk <code>/&#42;</code> and end with an asterisk and a forward slash <code>&#42;/</code>. Like this: The content of comments is ignored, so if we put code inside <code>/&#42; ... &#42;/</code>, it won't execute. Sometimes it can be handy to temporarily disable a part of code: / nested comment ?!? / alert( 'World' ); Please, don't hesitate to comment your code. Comments increase the overall code footprint, but that's not a problem at all. There are many tools which minify code before publishing to a production server. They remove comments, so they don't appear in the working scripts. Therefore, comments do not have negative effects on production at all. Later in the tutorial there will be a chapter <info:code-quality> that also explains how to write better comments.

web,development

The modern mode, "use strict"

For a long time, JavaScript evolved without compatibility issues. New features were added to the language while old functionality didn't change. That had the benefit of never breaking existing code. But the downside was that any mistake or an imperfect decision made by JavaScript's creators got stuck in the language forever. This was the case until 2009 when ECMAScript 5 (ES5) appeared. It added new features to the language and modified some of the existing ones. To keep the old code working, most such modifications are off by default. You need to explicitly enable them with a special directive: "use strict". ## "use strict" The directive looks like a string: "use strict" or 'use strict'. When it is located at the top of a script, the whole script works the "modern" way. For example: Quite soon we're going to learn functions (a way to group commands), so let's note in advance that "use strict" can be put at the beginning of a function. Doing that enables strict mode in that function only. But usually people use it for the whole script. alert("some code"); // "use strict" below is ignored--it must be at the top "use strict"; // strict mode is not activated ## Browser console When you use a developer console to run code, please note that it doesn't use strict by default. Sometimes, when use strict makes a difference, you'll get incorrect results. So, how to actually use strict in the console? First, you can try to press key:Shift+Enter to input multiple lines, and put use strict on top, like this: It works in most browsers, namely Firefox and Chrome. If it doesn't, e.g. in an old browser, there's an ugly, but reliable way to ensure use strict. Put it inside this kind of wrapper: ## Should we "use strict"? The question may sound obvious, but it's not so. One could recommend to start scripts with "use strict"... But you know what's cool? Modern JavaScript supports "classes" and "modules" - advanced language structures (we'll surely get to them), that enable use strict automatically. So we don't need to add the "use strict" directive, if we use them. So, for now "use strict"; is a welcome guest at the top of your scripts. Later, when your code is all in classes and modules, you may omit it. As of now, we've got to know about use strict in general. In the next chapters, as we learn language features, we'll see the differences between the strict and old modes. Luckily, there aren't many and they actually make our lives better. All examples in this tutorial assume strict mode unless (very rarely) specified otherwise.

web,development

Variables

Most of the time, a JavaScript application needs to work with information. Here are two examples: 1. An online shop -- the information might include goods being sold and a shopping cart. 2. A chat application -- the information might include users, messages, and much more. Variables are used to store this information. ## A variable A variable) is a "named storage" for data. We can use variables to store goodies, visitors, and other data. To create a variable in JavaScript, use the let keyword. The statement below creates (in other words: declares) a variable with the name "message": Now, we can put some data into it by using the assignment operator =: The string is now saved into the memory area associated with the variable. We can access it using the variable name: To be concise, we can combine the variable declaration and assignment into a single line: We can also declare multiple variables in one line: That might seem shorter, but we don't recommend it. For the sake of better readability, please use a single line per variable. The multiline variant is a bit longer, but easier to read: Some people also define multiple variables in this multiline style: ...Or even in the "comma-first" style: Technically, all these variants do the same thing. So, it's a matter of personal taste and aesthetics. !var/! message = 'Hello'; ## A real-life analogy We can easily grasp the concept of a "variable" if we imagine it as a "box" for data, with a uniquely-named sticker on it. For instance, the variable message can be imagined as a box labelled "message" with the value "Hello!" in it: We can put any value in the box. We can also change it as many times as we want: When the value is changed, the old data is removed from the variable: We can also declare two variables and copy data from one into the other. let message = "This"; // repeated 'let' leads to an error let message = "That"; // SyntaxError: 'message' has already been declared ## Variable naming [#variable-naming] There are two limitations on variable names in JavaScript: 1. The name must contain only letters, digits, or the symbols $ and _. 2. The first character must not be a digit. Examples of valid names: When the name contains multiple words, camelCase is commonly used. That is: words go one after another, with each word except the first starting with a capital letter: myVeryLongName. What's interesting -- the dollar sign '$' and the underscore '_' can also be used in names. They are regular symbols, just like letters, without any special meaning. These names are valid: Examples of incorrect variable names: let имя = '...'; let 我 = '...'; let let = 5; // can't name a variable "let", error! let return = 5; // also can't name it "return", error! // note: no "use strict" in this example num = 5; // the variable "num" is created if it didn't exist alert(num); // 5 "use strict"; num = 5; // error: num is not defined ## Constants To declare a constant (unchanging) variable, use const instead of let: Variables declared using const are called "constants". They cannot be reassigned. An attempt to do so would cause an error: When a programmer is sure that a variable will never change, they can declare it with const to guarantee and communicate that fact to everyone. ### Uppercase constants There is a widespread practice to use constants as aliases for difficult-to-remember values that are known before execution. Such constants are named using capital letters and underscores. For instance, let's make constants for colors in so-called "web" (hexadecimal) format: Benefits: - COLOR_ORANGE is much easier to remember than "#FF7F00". - It is much easier to mistype "#FF7F00" than COLOR_ORANGE. - When reading the code, COLOR_ORANGE is much more meaningful than #FF7F00. When should we use capitals for a constant and when should we name it normally? Let's make that clear. Being a "constant" just means that a variable's value never changes. But some constants are known before execution (like a hexadecimal value for red) and some constants are calculated in run-time, during the execution, but do not change after their initial assignment. For instance: The value of pageLoadTime is not known before the page load, so it's named normally. But it's still a constant because it doesn't change after the assignment. In other words, capital-named constants are only used as aliases for "hard-coded" values. ## Name things right Talking about variables, there's one more extremely important thing. A variable name should have a clean, obvious meaning, describing the data that it stores. Variable naming is one of the most important and complex skills in programming. A glance at variable names can reveal which code was written by a beginner versus an experienced developer. In a real project, most of the time is spent modifying and extending an existing code base rather than writing something completely separate from scratch. When we return to some code after doing something else for a while, it's much easier to find information that is well-labelled. Or, in other words, when the variables have good names. Please spend time thinking about the right name for a variable before declaring it. Doing so will repay you handsomely. Some good-to-follow rules are: - Use human-readable names like userName or shoppingCart. - Stay away from abbreviations or short names like a, b, and c, unless you know what you're doing. - Make names maximally descriptive and concise. Examples of bad names are data and value. Such names say nothing. It's only okay to use them if the context of the code makes it exceptionally obvious which data or value the variable is referencing. - Agree on terms within your team and in your mind. If a site visitor is called a "user" then we should name related variables currentUser or newUser instead of currentVisitor or newManInTown. Sounds simple? Indeed it is, but creating descriptive and concise variable names in practice is not. Go for it. ## Summary We can declare variables to store data by using the var, let, or const keywords. - let -- is a modern variable declaration. - var -- is an old-school variable declaration. Normally we don't use it at all, but we'll cover subtle differences from let in the chapter <info:var>, just in case you need them. - const -- is like let, but the value of the variable can't be changed. Variables should be named in a way that allows us to easily understand what's inside them.

variable

Data types

A value in JavaScript is always of a certain type. For example, a string or a number. There are eight basic data types in JavaScript. Here, we'll cover them in general and in the next chapters we'll talk about each of them in detail. We can put any type in a variable. For example, a variable can at one moment be a string and then store a number: Programming languages that allow such things, such as JavaScript, are called "dynamically typed", meaning that there exist data types, but variables are not bound to any of them. ## Number The number type represents both integer and floating point numbers. There are many operations for numbers, e.g. multiplication *, division /, addition +, subtraction -, and so on. Besides regular numbers, there are so-called "special numeric values" which also belong to this data type: Infinity, -Infinity and NaN. - Infinity represents the mathematical Infinity ∞. It is a special value that's greater than any number. We can get it as a result of division by zero: ```js run alert( 1 / 0 ); // Infinity ``` Or just reference it directly: ```js run alert( Infinity ); // Infinity ``` - NaN represents a computational error. It is a result of an incorrect or an undefined mathematical operation, for instance: ```js run alert( "not a number" / 2 ); // NaN, such division is erroneous ``` NaN is sticky. Any further mathematical operation on NaN returns NaN: ```js run alert( NaN + 1 ); // NaN alert( 3 * NaN ); // NaN alert( "not a number" / 2 - 1 ); // NaN ``` So, if there's a NaN somewhere in a mathematical expression, it propagates to the whole result (there's only one exception to that: NaN ** 0 is 1). Special numeric values formally belong to the "number" type. Of course they are not numbers in the common sense of this word. We'll see more about working with numbers in the chapter <info:number>. ## BigInt [#bigint-type] In JavaScript, the "number" type cannot safely represent integer values larger than <code>(2<sup>53</sup>-1)</code> (that's 9007199254740991), or less than <code>-(2<sup>53</sup>-1)</code> for negatives. To be really precise, the "number" type can store larger integers (up to <code>1.7976931348623157 * 10<sup>308</sup></code>), but outside of the safe integer range <code>±(2<sup>53</sup>-1)</code> there'll be a precision error, because not all digits fit into the fixed 64-bit storage. So an "approximate" value may be stored. For example, these two numbers (right above the safe range) are the same: So to say, all odd integers greater than <code>(2<sup>53</sup>-1)</code> can't be stored at all in the "number" type. For most purposes <code>±(2<sup>53</sup>-1)</code> range is quite enough, but sometimes we need the entire range of really big integers, e.g. for cryptography or microsecond-precision timestamps. BigInt type was recently added to the language to represent integers of arbitrary length. A BigInt value is created by appending n to the end of an integer: As BigInt numbers are rarely needed, we don't cover them here, but devoted them a separate chapter <info:bigint>. Read it when you need such big numbers. ## String A string in JavaScript must be surrounded by quotes. In JavaScript, there are 3 types of quotes. 1. Double quotes: "Hello". 2. Single quotes: 'Hello'. 3. Backticks: <code>&#96;Hello&#96;</code>. Double and single quotes are "simple" quotes. There's practically no difference between them in JavaScript. Backticks are "extended functionality" quotes. They allow us to embed variables and expressions into a string by wrapping them in ${…}, for example: The expression inside ${…} is evaluated and the result becomes a part of the string. We can put anything in there: a variable like name or an arithmetical expression like 1 + 2 or something more complex. Please note that this can only be done in backticks. Other quotes don't have this embedding functionality! We'll cover strings more thoroughly in the chapter <info:string>. ## Boolean (logical type) The boolean type has only two values: true and false. This type is commonly used to store yes/no values: true means "yes, correct", and false means "no, incorrect". For instance: Boolean values also come as a result of comparisons: We'll cover booleans more deeply in the chapter <info:logical-operators>. ## The "null" value The special null value does not belong to any of the types described above. It forms a separate type of its own which contains only the null value: In JavaScript, null is not a "reference to a non-existing object" or a "null pointer" like in some other languages. It's just a special value which represents "nothing", "empty" or "value unknown". The code above states that age is unknown. ## The "undefined" value The special value undefined also stands apart. It makes a type of its own, just like null. The meaning of undefined is "value is not assigned". If a variable is declared, but not assigned, then its value is undefined: Technically, it is possible to explicitly assign undefined to a variable: ...But we don't recommend doing that. Normally, one uses null to assign an "empty" or "unknown" value to a variable, while undefined is reserved as a default initial value for unassigned things. ## Objects and Symbols The object type is special. All other types are called "primitive" because their values can contain only a single thing (be it a string or a number or whatever). In contrast, objects are used to store collections of data and more complex entities. Being that important, objects deserve a special treatment. We'll deal with them later in the chapter <info:object>, after we learn more about primitives. The symbol type is used to create unique identifiers for objects. We have to mention it here for the sake of completeness, but also postpone the details till we know objects. ## The typeof operator [#type-typeof] The typeof operator returns the type of the operand. It's useful when we want to process values of different types differently or just want to do a quick check. A call to typeof x returns a string with the type name: The last three lines may need additional explanation: 1. Math is a built-in object that provides mathematical operations. We will learn it in the chapter <info:number>. Here, it serves just as an example of an object. 2. The result of typeof null is "object". That's an officially recognized error in typeof, coming from very early days of JavaScript and kept for compatibility. Definitely, null is not an object. It is a special value with a separate type of its own. The behavior of typeof is wrong here. 3. The result of typeof alert is "function", because alert is a function. We'll study functions in the next chapters where we'll also see that there's no special "function" type in JavaScript. Functions belong to the object type. But typeof treats them differently, returning "function". That also comes from the early days of JavaScript. Technically, such behavior isn't correct, but can be convenient in practice. ## Summary There are 8 basic data types in JavaScript. - Seven primitive data types: - number for numbers of any kind: integer or floating-point, integers are limited by <code>±(2<sup>53</sup>-1)</code>. - bigint for integer numbers of arbitrary length. - string for strings. A string may have zero or more characters, there's no separate single-character type. - boolean for true/false. - null for unknown values -- a standalone type that has a single value null. - undefined for unassigned values -- a standalone type that has a single value undefined. - symbol for unique identifiers. - And one non-primitive data type: - object for more complex data structures. The typeof operator allows us to see which type is stored in a variable. - Usually used as typeof x, but typeof(x) is also possible. - Returns a string with the name of the type, like "string". - For null returns "object" -- this is an error in the language, it's not actually an object. In the next chapters, we'll concentrate on primitive values and once we're familiar with them, we'll move on to objects.

data

Interaction: alert, prompt, confirm

As we'll be using the browser as our demo environment, let's see a couple of functions to interact with the user: alert, prompt and confirm. ## alert This one we've seen already. It shows a message and waits for the user to press "OK". For example: The mini-window with the message is called a modal window. The word "modal" means that the visitor can't interact with the rest of the page, press other buttons, etc, until they have dealt with the window. In this case -- until they press "OK". ## prompt The function prompt accepts two arguments: It shows a modal window with a text message, an input field for the visitor, and the buttons OK/Cancel. title : The text to show the visitor. default : An optional second parameter, the initial value for the input field. The visitor can type something in the prompt input field and press OK. Then we get that text in the result. Or they can cancel the input by pressing Cancel or hitting the key:Esc key, then we get null as the result. The call to prompt returns the text from the input field or null if the input was canceled. For instance: let test = prompt("Test"); let test = prompt("Test", ''); // <-- for IE ## confirm The syntax: The function confirm shows a modal window with a question and two buttons: OK and Cancel. The result is true if OK is pressed and false otherwise. For example: ## Summary We covered 3 browser-specific functions to interact with visitors: alert : shows a message. prompt : shows a message asking the user to input text. It returns the text or, if Cancel button or key:Esc is clicked, null. confirm : shows a message and waits for the user to press "OK" or "Cancel". It returns true for OK and false for Cancel/key:Esc. All these methods are modal: they pause script execution and don't allow the visitor to interact with the rest of the page until the window has been dismissed. There are two limitations shared by all the methods above: 1. The exact location of the modal window is determined by the browser. Usually, it's in the center. 2. The exact look of the window also depends on the browser. We can't modify it. That is the price for simplicity. There are other ways to show nicer windows and richer interaction with the visitor, but if "bells and whistles" do not matter much, these methods work just fine.

web,development

Type Conversions

Most of the time, operators and functions automatically convert the values given to them to the right type. For example, alert automatically converts any value to a string to show it. Mathematical operations convert values to numbers. There are also cases when we need to explicitly convert a value to the expected type. ## String Conversion String conversion happens when we need the string form of a value. For example, alert(value) does it to show the value. We can also call the String(value) function to convert a value to a string: String conversion is mostly obvious. A false becomes "false", null becomes "null", etc. ## Numeric Conversion Numeric conversion in mathematical functions and expressions happens automatically. For example, when division / is applied to non-numbers: We can use the Number(value) function to explicitly convert a value to a number: Explicit conversion is usually required when we read a value from a string-based source like a text form but expect a number to be entered. If the string is not a valid number, the result of such a conversion is NaN. For instance: Numeric conversion rules: Examples: Please note that null and undefined behave differently here: null becomes zero while undefined becomes NaN. Most mathematical operators also perform such conversion, we'll see that in the next chapter. ## Boolean Conversion Boolean conversion is the simplest one. It happens in logical operations (later we'll meet condition tests and other similar things) but can also be performed explicitly with a call to Boolean(value). The conversion rule: - Values that are intuitively "empty", like 0, an empty string, null, undefined, and NaN, become false. - Other values become true. For instance: alert( Boolean("0") ); // true alert( Boolean(" ") ); // spaces, also true (any non-empty string is true) ## Summary The three most widely used type conversions are to string, to number, and to boolean. String Conversion -- Occurs when we output something. Can be performed with String(value). The conversion to string is usually obvious for primitive values. Numeric Conversion -- Occurs in math operations. Can be performed with Number(value). The conversion follows the rules: Boolean Conversion -- Occurs in logical operations. Can be performed with Boolean(value). Follows the rules: Most of these rules are easy to understand and memorize. The notable exceptions where people usually make mistakes are: - undefined is NaN as a number, not 0. - "0" and space-only strings like " " are true as a boolean. Objects aren't covered here. We'll return to them later in the chapter <info:object-toprimitive> that is devoted exclusively to objects after we learn more basic things about JavaScript.

web,development

Basic operators, maths

We know many operators from school. They are things like addition +, multiplication *, subtraction -, and so on. In this chapter, we’ll start with simple operators, then concentrate on JavaScript-specific aspects, not covered by school arithmetic. ## Terms: "unary", "binary", "operand" Before we move on, let's grasp some common terminology. - An operand -- is what operators are applied to. For instance, in the multiplication of 5 * 2 there are two operands: the left operand is 5 and the right operand is 2. Sometimes, people call these "arguments" instead of "operands". - An operator is unary if it has a single operand. For example, the unary negation - reverses the sign of a number: ```js run let x = 1; x = -x; alert( x ); // -1, unary negation was applied ``` - An operator is binary if it has two operands. The same minus exists in binary form as well: ```js run no-beautify let x = 1, y = 3; alert( y - x ); // 2, binary minus subtracts values ``` Formally, in the examples above we have two different operators that share the same symbol: the negation operator, a unary operator that reverses the sign, and the subtraction operator, a binary operator that subtracts one number from another. ## Maths The following math operations are supported: - Addition +, - Subtraction -, - Multiplication *, - Division /, - Remainder %, - Exponentiation **. The first four are straightforward, while % and ** need a few words about them. ### Remainder % The remainder operator %, despite its appearance, is not related to percents. The result of a % b is the remainder of the integer division of a by b. For instance: ### Exponentiation ** The exponentiation operator a ** b raises a to the power of b. In school maths, we write that as a<sup>b</sup>. For instance: Just like in maths, the exponentiation operator is defined for non-integer numbers as well. For example, a square root is an exponentiation by ½: ## String concatenation with binary + Let's meet the features of JavaScript operators that are beyond school arithmetics. Usually, the plus operator + sums numbers. But, if the binary + is applied to strings, it merges (concatenates) them: Note that if any of the operands is a string, then the other one is converted to a string too. For example: See, it doesn't matter whether the first operand is a string or the second one. Here's a more complex example: Here, operators work one after another. The first + sums two numbers, so it returns 4, then the next + adds the string 1 to it, so it's like 4 + '1' = '41'. Here, the first operand is a string, the compiler treats the other two operands as strings too. The 2 gets concatenated to '1', so it's like '1' + 2 = "12" and "12" + 2 = "122". The binary + is the only operator that supports strings in such a way. Other arithmetic operators work only with numbers and always convert their operands to numbers. Here's the demo for subtraction and division: ## Numeric conversion, unary + The plus + exists in two forms: the binary form that we used above and the unary form. The unary plus or, in other words, the plus operator + applied to a single value, doesn't do anything to numbers. But if the operand is not a number, the unary plus converts it into a number. For example: It actually does the same thing as Number(...), but is shorter. The need to convert strings to numbers arises very often. For example, if we are getting values from HTML form fields, they are usually strings. What if we want to sum them? The binary plus would add them as strings: If we want to treat them as numbers, we need to convert and then sum them: From a mathematician's standpoint, the abundance of pluses may seem strange. But from a programmer's standpoint, there's nothing special: unary pluses are applied first, they convert strings to numbers, and then the binary plus sums them up. Why are unary pluses applied to values before the binary ones? As we're going to see, that's because of their higher precedence. ## Operator precedence If an expression has more than one operator, the execution order is defined by their precedence, or, in other words, the default priority order of operators. From school, we all know that the multiplication in the expression 1 + 2 2 should be calculated before the addition. That's exactly the precedence thing. The multiplication is said to have a higher precedence* than the addition. Parentheses override any precedence, so if we're not satisfied with the default order, we can use them to change it. For example, write (1 + 2) * 2. There are many operators in JavaScript. Every operator has a corresponding precedence number. The one with the larger number executes first. If the precedence is the same, the execution order is from left to right. Here's an extract from the precedence table (you don't need to remember this, but note that unary operators are higher than corresponding binary ones): As we can see, the "unary plus" has a priority of 14 which is higher than the 11 of "addition" (binary plus). That's why, in the expression "+apples + +oranges", unary pluses work before the addition. ## Assignment Let's note that an assignment = is also an operator. It is listed in the precedence table with the very low priority of 2. That's why, when we assign a variable, like x = 2 * 2 + 1, the calculations are done first and then the = is evaluated, storing the result in x. ### Assignment = returns a value The fact of = being an operator, not a "magical" language construct has an interesting implication. All operators in JavaScript return a value. That's obvious for + and -, but also true for =. The call x = value writes the value into x and then returns it. Here's a demo that uses an assignment as part of a more complex expression: In the example above, the result of expression (a = b + 1) is the value which was assigned to a (that is 3). It is then used for further evaluations. Funny code, isn't it? We should understand how it works, because sometimes we see it in JavaScript libraries. Although, please don't write the code like that. Such tricks definitely don't make code clearer or readable. ### Chaining assignments Another interesting feature is the ability to chain assignments: Chained assignments evaluate from right to left. First, the rightmost expression 2 + 2 is evaluated and then assigned to the variables on the left: c, b and a. At the end, all the variables share a single value. Once again, for the purposes of readability it's better to split such code into a few lines: That's easier to read, especially when eye-scanning the code fast. ## Modify-in-place We often need to apply an operator to a variable and store the new result in that same variable. For example: This notation can be shortened using the operators += and *=: Short "modify-and-assign" operators exist for all arithmetical and bitwise operators: /=, -=, etc. Such operators have the same precedence as a normal assignment, so they run after most other calculations: ## Increment/decrement <!-- Can't use -- in title, because the built-in parser turns it into a 'long dash' – --> Increasing or decreasing a number by one is among the most common numerical operations. So, there are special operators for it: - Increment ++ increases a variable by 1: ```js run no-beautify let counter = 2; counter++; // works the same as counter = counter + 1, but is shorter alert( counter ); // 3 ``` - Decrement -- decreases a variable by 1: ```js run no-beautify let counter = 2; counter--; // works the same as counter = counter - 1, but is shorter alert( counter ); // 1 ``` The operators ++ and -- can be placed either before or after a variable. - When the operator goes after the variable, it is in "postfix form": counter++. - The "prefix form" is when the operator goes before the variable: ++counter. Both of these statements do the same thing: increase counter by 1. Is there any difference? Yes, but we can only see it if we use the returned value of ++/--. Let's clarify. As we know, all operators return a value. Increment/decrement is no exception. The prefix form returns the new value while the postfix form returns the old value (prior to increment/decrement). To see the difference, here's an example: In the line (), the prefix* form ++counter increments counter and returns the new value, 2. So, the alert shows 2. Now, let's use the postfix form: In the line (), the postfix form counter++ also increments counter but returns the old* value (prior to increment). So, the alert shows 1. To summarize: - If the result of increment/decrement is not used, there is no difference in which form to use: ```js run let counter = 0; counter++; ++counter; alert( counter ); // 2, the lines above did the same ``` - If we'd like to increase a value and immediately use the result of the operator, we need the prefix form: ```js run let counter = 0; alert( ++counter ); // 1 ``` - If we'd like to increment a value but use its previous value, we need the postfix form: ```js run let counter = 0; alert( counter++ ); // 0 ``` let counter = 1; alert( 2 * ++counter ); // 4 let counter = 1; alert( 2 * counter++ ); // 2, because counter++ returns the "old" value let counter = 1; alert( 2 * counter ); counter++; ## Bitwise operators Bitwise operators treat arguments as 32-bit integer numbers and work on the level of their binary representation. These operators are not JavaScript-specific. They are supported in most programming languages. The list of operators: - AND ( & ) - OR ( | ) - XOR ( ^ ) - NOT ( ~ ) - LEFT SHIFT ( << ) - RIGHT SHIFT ( >> ) - ZERO-FILL RIGHT SHIFT ( >>> ) These operators are used very rarely, when we need to fiddle with numbers on the very lowest (bitwise) level. We won't need these operators any time soon, as web development has little use of them, but in some special areas, such as cryptography, they are useful. You can read the Bitwise Operators chapter on MDN when a need arises. ## Comma The comma operator , is one of the rarest and most unusual operators. Sometimes, it's used to write shorter code, so we need to know it in order to understand what's going on. The comma operator allows us to evaluate several expressions, dividing them with a comma ,. Each of them is evaluated but only the result of the last one is returned. For example: Here, the first expression 1 + 2 is evaluated and its result is thrown away. Then, 3 + 4 is evaluated and returned as the result. Why do we need an operator that throws away everything except the last expression? Sometimes, people use it in more complex constructs to put several actions in one line. For example: Such tricks are used in many JavaScript frameworks. That's why we're mentioning them. But usually they don't improve code readability so we should think well before using them.

web,development

Comparisons

We know many comparison operators from maths. In JavaScript they are written like this: - Greater/less than: <code>a &gt; b</code>, <code>a &lt; b</code>. - Greater/less than or equals: <code>a &gt;= b</code>, <code>a &lt;= b</code>. - Equals: a == b, please note the double equality sign == means the equality test, while a single one a = b means an assignment. - Not equals: In maths the notation is <code>&ne;</code>, but in JavaScript it's written as <code>a != b</code>. In this article we'll learn more about different types of comparisons, how JavaScript makes them, including important peculiarities. At the end you'll find a good recipe to avoid "JavaScript quirks"-related issues. ## Boolean is the result All comparison operators return a boolean value: - true -- means "yes", "correct" or "the truth". - false -- means "no", "wrong" or "not the truth". For example: A comparison result can be assigned to a variable, just like any value: ## String comparison To see whether a string is greater than another, JavaScript uses the so-called "dictionary" or "lexicographical" order. In other words, strings are compared letter-by-letter. For example: The algorithm to compare two strings is simple: 1. Compare the first character of both strings. 2. If the first character from the first string is greater (or less) than the other string's, then the first string is greater (or less) than the second. We're done. 3. Otherwise, if both strings' first characters are the same, compare the second characters the same way. 4. Repeat until the end of either string. 5. If both strings end at the same length, then they are equal. Otherwise, the longer string is greater. In the first example above, the comparison 'Z' > 'A' gets to a result at the first step. The second comparison 'Glow' and 'Glee' needs more steps as strings are compared character-by-character: 1. G is the same as G. 2. l is the same as l. 3. o is greater than e. Stop here. The first string is greater. ## Comparison of different types When comparing values of different types, JavaScript converts the values to numbers. For example: For boolean values, true becomes 1 and false becomes 0. For example: let a = 0; alert( Boolean(a) ); // false let b = "0"; alert( Boolean(b) ); // true alert(a == b); // true! ## Strict equality A regular equality check == has a problem. It cannot differentiate 0 from false: The same thing happens with an empty string: This happens because operands of different types are converted to numbers by the equality operator ==. An empty string, just like false, becomes a zero. What to do if we'd like to differentiate 0 from false? A strict equality operator === checks the equality without type conversion. In other words, if a and b are of different types, then a === b immediately returns false without an attempt to convert them. Let's try it: There is also a "strict non-equality" operator !== analogous to !=. The strict equality operator is a bit longer to write, but makes it obvious what's going on and leaves less room for errors. ## Comparison with null and undefined There's a non-intuitive behavior when null or undefined are compared to other values. For a strict equality check === : These values are different, because each of them is a different type. ```js run alert( null === undefined ); // false ``` For a non-strict check == : There's a special rule. These two are a "sweet couple": they equal each other (in the sense of ==), but not any other value. ```js run alert( null == undefined ); // true ``` For maths and other comparisons < > <= >= : null/undefined are converted to numbers: null becomes 0, while undefined becomes NaN. Now let's see some funny things that happen when we apply these rules. And, what's more important, how to not fall into a trap with them. ### Strange result: null vs 0 Let's compare null with a zero: Mathematically, that's strange. The last result states that "null is greater than or equal to zero", so in one of the comparisons above it must be true, but they are both false. The reason is that an equality check == and comparisons > < >= <= work differently. Comparisons convert null to a number, treating it as 0. That's why (3) null >= 0 is true and (1) null > 0 is false. On the other hand, the equality check == for undefined and null is defined such that, without any conversions, they equal each other and don't equal anything else. That's why (2) null == 0 is false. ### An incomparable undefined The value undefined shouldn't be compared to other values: Why does it dislike zero so much? Always false! We get these results because: - Comparisons (1) and (2) return false because undefined gets converted to NaN and NaN is a special numeric value which returns false for all comparisons. - The equality check (3) returns false because undefined only equals null, undefined, and no other value. ### Avoid problems Why did we go over these examples? Should we remember these peculiarities all the time? Well, not really. Actually, these tricky things will gradually become familiar over time, but there's a solid way to avoid problems with them: - Treat any comparison with undefined/null except the strict equality === with exceptional care. - Don't use comparisons >= > < <= with a variable which may be null/undefined, unless you're really sure of what you're doing. If a variable can have these values, check for them separately. ## Summary - Comparison operators return a boolean value. - Strings are compared letter-by-letter in the "dictionary" order. - When values of different types are compared, they get converted to numbers (with the exclusion of a strict equality check). - The values null and undefined are equal == to themselves and each other, but do not equal any other value. - Be careful when using comparisons like > or < with variables that can occasionally be null/undefined. Checking for null/undefined separately is a good idea.

web,development

Conditional branching: if, '?'

Sometimes, we need to perform different actions based on different conditions. To do that, we can use the if statement and the conditional operator ?, that's also called a "question mark" operator. ## The "if" statement The if(...) statement evaluates a condition in parentheses and, if the result is true, executes a block of code. For example: In the example above, the condition is a simple equality check (year == 2015), but it can be much more complex. If we want to execute more than one statement, we have to wrap our code block inside curly braces: We recommend wrapping your code block with curly braces {} every time you use an if statement, even if there is only one statement to execute. Doing so improves readability. ## Boolean conversion The if (…) statement evaluates the expression in its parentheses and converts the result to a boolean. Let's recall the conversion rules from the chapter <info:type-conversions>: - A number 0, an empty string "", null, undefined, and NaN all become false. Because of that they are called "falsy" values. - Other values become true, so they are called "truthy". So, the code under this condition would never execute: ...and inside this condition -- it always will: We can also pass a pre-evaluated boolean value to if, like this: ## The "else" clause The if statement may contain an optional else block. It executes when the condition is falsy. For example: ## Several conditions: "else if" Sometimes, we'd like to test several variants of a condition. The else if clause lets us do that. For example: In the code above, JavaScript first checks year < 2015. If that is falsy, it goes to the next condition year > 2015. If that is also falsy, it shows the last alert. There can be more else if blocks. The final else is optional. ## Conditional operator '?' Sometimes, we need to assign a variable depending on a condition. For instance: The so-called "conditional" or "question mark" operator lets us do that in a shorter and simpler way. The operator is represented by a question mark ?. Sometimes it's called "ternary", because the operator has three operands. It is actually the one and only operator in JavaScript which has that many. The syntax is: The condition is evaluated: if it's truthy then value1 is returned, otherwise -- value2. For example: Technically, we can omit the parentheses around age > 18. The question mark operator has a low precedence, so it executes after the comparison >. This example will do the same thing as the previous one: But parentheses make the code more readable, so we recommend using them. // the same let accessAllowed = age > 18; ## Multiple '?' A sequence of question mark operators ? can return a value that depends on more than one condition. For instance: It may be difficult at first to grasp what's going on. But after a closer look, we can see that it's just an ordinary sequence of tests: 1. The first question mark checks whether age < 3. 2. If true -- it returns 'Hi, baby!'. Otherwise, it continues to the expression after the colon ":", checking age < 18. 3. If that's true -- it returns 'Hello!'. Otherwise, it continues to the expression after the next colon ":", checking age < 100. 4. If that's true -- it returns 'Greetings!'. Otherwise, it continues to the expression after the last colon ":", returning 'What an unusual age!'. Here's how this looks using if..else: ## Non-traditional use of '?' Sometimes the question mark ? is used as a replacement for if: Depending on the condition company == 'Netscape', either the first or the second expression after the ? gets executed and shows an alert. We don't assign a result to a variable here. Instead, we execute different code depending on the condition. It's not recommended to use the question mark operator in this way. The notation is shorter than the equivalent if statement, which appeals to some programmers. But it is less readable. Here is the same code using if for comparison: Our eyes scan the code vertically. Code blocks which span several lines are easier to understand than a long, horizontal instruction set. The purpose of the question mark operator ? is to return one value or another depending on its condition. Please use it for exactly that. Use if when you need to execute different branches of code.

web,development

Logical operators

There are four logical operators in JavaScript: || (OR), && (AND), ! (NOT), ?? (Nullish Coalescing). Here we cover the first three, the ?? operator is in the next article. Although they are called "logical", they can be applied to values of any type, not only boolean. Their result can also be of any type. Let's see the details. ## || (OR) The "OR" operator is represented with two vertical line symbols: In classical programming, the logical OR is meant to manipulate boolean values only. If any of its arguments are true, it returns true, otherwise it returns false. In JavaScript, the operator is a little bit trickier and more powerful. But first, let's see what happens with boolean values. There are four possible logical combinations: As we can see, the result is always true except for the case when both operands are false. If an operand is not a boolean, it's converted to a boolean for the evaluation. For instance, the number 1 is treated as true, the number 0 as false: Most of the time, OR || is used in an if statement to test if any of the given conditions is true. For example: We can pass more conditions: ## OR "||" finds the first truthy value [#or-finds-the-first-truthy-value] The logic described above is somewhat classical. Now, let's bring in the "extra" features of JavaScript. The extended algorithm works as follows. Given multiple OR'ed values: The OR || operator does the following: - Evaluates operands from left to right. - For each operand, converts it to boolean. If the result is true, stops and returns the original value of that operand. - If all operands have been evaluated (i.e. all were false), returns the last operand. A value is returned in its original form, without the conversion. In other words, a chain of OR || returns the first truthy value or the last one if no truthy value is found. For instance: This leads to some interesting usage compared to a "pure, classical, boolean-only OR". 1. Getting the first truthy value from a list of variables or expressions. For instance, we have firstName, lastName and nickName variables, all optional (i.e. can be undefined or have falsy values). Let's use OR || to choose the one that has the data and show it (or "Anonymous" if nothing set): ```js run let firstName = ""; let lastName = ""; let nickName = "SuperCoder"; alert( firstName || lastName || nickName || "Anonymous"); // SuperCoder ``` If all variables were falsy, "Anonymous" would show up. 2. Short-circuit evaluation. Another feature of OR || operator is the so-called "short-circuit" evaluation. It means that || processes its arguments until the first truthy value is reached, and then the value is returned immediately, without even touching the other argument. The importance of this feature becomes obvious if an operand isn't just a value, but an expression with a side effect, such as a variable assignment or a function call. In the example below, only the second message is printed: ```js run no-beautify !true/! || alert("not printed"); !false/! || alert("printed"); ``` In the first line, the OR || operator stops the evaluation immediately upon seeing true, so the alert isn't run. Sometimes, people use this feature to execute commands only if the condition on the left part is falsy. ## && (AND) The AND operator is represented with two ampersands &&: In classical programming, AND returns true if both operands are truthy and false otherwise: An example with if: Just as with OR, any value is allowed as an operand of AND: ## AND "&&" finds the first falsy value Given multiple AND'ed values: The AND && operator does the following: - Evaluates operands from left to right. - For each operand, converts it to a boolean. If the result is false, stops and returns the original value of that operand. - If all operands have been evaluated (i.e. all were truthy), returns the last operand. In other words, AND returns the first falsy value or the last value if none were found. The rules above are similar to OR. The difference is that AND returns the first falsy value while OR returns the first truthy one. Examples: We can also pass several values in a row. See how the first falsy one is returned: When all values are truthy, the last value is returned: let x = 1; (x > 0) && alert( 'Greater than zero!' ); let x = 1; if (x > 0) alert( 'Greater than zero!' ); ## ! (NOT) The boolean NOT operator is represented with an exclamation sign !. The syntax is pretty simple: The operator accepts a single argument and does the following: 1. Converts the operand to boolean type: true/false. 2. Returns the inverse value. For instance: A double NOT !! is sometimes used for converting a value to boolean type: That is, the first NOT converts the value to boolean and returns the inverse, and the second NOT inverses it again. In the end, we have a plain value-to-boolean conversion. There's a little more verbose way to do the same thing -- a built-in Boolean function: The precedence of NOT ! is the highest of all logical operators, so it always executes first, before && or ||.

web,development

Nullish coalescing operator '??'

[recent browser="new"] The nullish coalescing operator is written as two question marks ??. As it treats null and undefined similarly, we'll use a special term here, in this article. For brevity, we'll say that a value is "defined" when it's neither null nor undefined. The result of a ?? b is: - if a is defined, then a, - if a isn't defined, then b. In other words, ?? returns the first argument if it's not null/undefined. Otherwise, the second one. The nullish coalescing operator isn't anything completely new. It's just a nice syntax to get the first "defined" value of the two. We can rewrite result = a ?? b using the operators that we already know, like this: Now it should be absolutely clear what ?? does. Let's see where it helps. The common use case for ?? is to provide a default value. For example, here we show user if its value isn't null/undefined, otherwise Anonymous: Here's the example with user assigned to a name: We can also use a sequence of ?? to select the first value from a list that isn't null/undefined. Let's say we have a user's data in variables firstName, lastName or nickName. All of them may be not defined, if the user decided not to fill in the corresponding values. We'd like to display the user name using one of these variables, or show "Anonymous" if all of them are null/undefined. Let's use the ?? operator for that: ## Comparison with || The OR || operator can be used in the same way as ??, as it was described in the previous chapter. For example, in the code above we could replace ?? with || and still get the same result: Historically, the OR || operator was there first. It's been there since the beginning of JavaScript, so developers were using it for such purposes for a long time. On the other hand, the nullish coalescing operator ?? was added to JavaScript only recently, and the reason for that was that people weren't quite happy with ||. The important difference between them is that: - || returns the first truthy value. - ?? returns the first defined value. In other words, || doesn't distinguish between false, 0, an empty string "" and null/undefined. They are all the same -- falsy values. If any of these is the first argument of ||, then we'll get the second argument as the result. In practice though, we may want to use default value only when the variable is null/undefined. That is, when the value is really unknown/not set. For example, consider this: - The height || 100 checks height for being a falsy value, and it's 0, falsy indeed. - so the result of || is the second argument, 100. - The height ?? 100 checks height for being null/undefined, and it's not, - so the result is height "as is", that is 0. In practice, the zero height is often a valid value, that shouldn't be replaced with the default. So ?? does just the right thing. ## Precedence The precedence of the ?? operator is the same as ||. They both equal 3 in the MDN table. That means that, just like ||, the nullish coalescing operator ?? is evaluated before = and ?, but after most other operations, such as +, *. So we may need to add parentheses in expressions like this: Otherwise, if we omit parentheses, then as * has the higher precedence than ??, it would execute first, leading to incorrect results. ### Using ?? with && or || Due to safety reasons, JavaScript forbids using ?? together with && and || operators, unless the precedence is explicitly specified with parentheses. The code below triggers a syntax error: The limitation is surely debatable, it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch from || to ??. Use explicit parentheses to work around it: ## Summary - The nullish coalescing operator ?? provides a short way to choose the first "defined" value from a list. It's used to assign default values to variables: ```js // set height=100, if height is null or undefined height = height ?? 100; ``` - The operator ?? has a very low precedence, only a bit higher than ? and =, so consider adding parentheses when using it in an expression. - It's forbidden to use it with || or && without explicit parentheses.

web,development

Loops: while and for

We often need to repeat actions. For example, outputting goods from a list one after another or just running the same code for each number from 1 to 10. Loops are a way to repeat the same code multiple times. ## The "while" loop The while loop has the following syntax: While the condition is truthy, the code from the loop body is executed. For instance, the loop below outputs i while i < 3: A single execution of the loop body is called an iteration. The loop in the example above makes three iterations. If i++ was missing from the example above, the loop would repeat (in theory) forever. In practice, the browser provides ways to stop such loops, and in server-side JavaScript, we can kill the process. Any expression or variable can be a loop condition, not just comparisons: the condition is evaluated and converted to a boolean by while. For instance, a shorter way to write while (i != 0) is while (i): let i = 3; while (i) alert(i--); ## The "do..while" loop The condition check can be moved below the loop body using the do..while syntax: The loop will first execute the body, then check the condition, and, while it's truthy, execute it again and again. For example: This form of syntax should only be used when you want the body of the loop to execute at least once regardless of the condition being truthy. Usually, the other form is preferred: while(…) {…}. ## The "for" loop The for loop is more complex, but it's also the most commonly used loop. It looks like this: Let's learn the meaning of these parts by example. The loop below runs alert(i) for i from 0 up to (but not including) 3: Let's examine the for statement part-by-part: The general loop algorithm works like this: That is, begin executes once, and then it iterates: after each condition test, body and step are executed. If you are new to loops, it could help to go back to the example and reproduce how it runs step-by-step on a piece of paper. Here's exactly what happens in our case: for (!let/! i = 0; i < 3; i++) { alert(i); // 0, 1, 2 alert(i); // error, no such variable let i = 0; for (i = 0; i < 3; i++) { // use an existing variable alert(i); // 0, 1, 2 alert(i); // 3, visible, because declared outside of the loop ### Skipping parts Any part of for can be skipped. For example, we can omit begin if we don't need to do anything at the loop start. Like here: We can also remove the step part: This makes the loop identical to while (i < 3). We can actually remove everything, creating an infinite loop: Please note that the two for semicolons ; must be present. Otherwise, there would be a syntax error. ## Breaking the loop Normally, a loop exits when its condition becomes falsy. But we can force the exit at any time using the special break directive. For example, the loop below asks the user for a series of numbers, "breaking" when no number is entered: The break directive is activated at the line (*) if the user enters an empty line or cancels the input. It stops the loop immediately, passing control to the first line after the loop. Namely, alert. The combination "infinite loop + break as needed" is great for situations when a loop's condition must be checked not in the beginning or end of the loop, but in the middle or even in several places of its body. ## Continue to the next iteration [#continue] The continue directive is a "lighter version" of break. It doesn't stop the whole loop. Instead, it stops the current iteration and forces the loop to start a new one (if the condition allows). We can use it if we're done with the current iteration and would like to move on to the next one. The loop below uses continue to output only odd values: For even values of i, the continue directive stops executing the body and passes control to the next iteration of for (with the next number). So the alert is only called for odd values. for (let i = 0; i < 10; i++) { if (i % 2) { alert( i ); if (i > 5) { alert(i); } else { continue; (i > 5) ? alert(i) : !continue/!; // continue isn't allowed here ## Labels for break/continue Sometimes we need to break out from multiple nested loops at once. For example, in the code below we loop over i and j, prompting for the coordinates (i, j) from (0,0) to (2,2): We need a way to stop the process if the user cancels the input. The ordinary break after input would only break the inner loop. That's not sufficient -- labels, come to the rescue! A label is an identifier with a colon before a loop: The break <labelName> statement in the loop below breaks out to the label: In the code above, break outer looks upwards for the label named outer and breaks out of that loop. So the control goes straight from (*) to alert('Done!'). We can also move the label onto a separate line: The continue directive can also be used with a label. In this case, code execution jumps to the next iteration of the labeled loop. break label; // jump to the label below (doesn't work) label: for (...) label: { // ... break label; // works // ... ## Summary We covered 3 types of loops: - while -- The condition is checked before each iteration. - do..while -- The condition is checked after each iteration. - for (;;) -- The condition is checked before each iteration, additional settings available. To make an "infinite" loop, usually the while(true) construct is used. Such a loop, just like any other, can be stopped with the break directive. If we don't want to do anything in the current iteration and would like to forward to the next one, we can use the continue directive. break/continue support labels before the loop. A label is the only way for break/continue to escape a nested loop to go to an outer one.

loop

The "switch" statement

A switch statement can replace multiple if checks. It gives a more descriptive way to compare a value with multiple variants. ## The syntax The switch has one or more case blocks and an optional default. It looks like this: - The value of x is checked for a strict equality to the value from the first case (that is, value1) then to the second (value2) and so on. - If the equality is found, switch starts to execute the code starting from the corresponding case, until the nearest break (or until the end of switch). - If no case is matched then the default code is executed (if it exists). ## An example An example of switch (the executed code is highlighted): Here the switch starts to compare a from the first case variant that is 3. The match fails. Then 4. That's a match, so the execution starts from case 4 until the nearest break. If there is no break then the execution continues with the next case without any checks. An example without break: In the example above we'll see sequential execution of three alerts: let a = "1"; let b = 0; switch (+a) { case b + 1: alert("this runs, because +a is 1, exactly equals b+1"); break; default: alert("this doesn't run"); ## Grouping of "case" Several variants of case which share the same code can be grouped. For example, if we want the same code to run for case 3 and case 5: Now both 3 and 5 show the same message. The ability to "group" cases is a side effect of how switch/case works without break. Here the execution of case 3 starts from the line (*) and goes through case 5, because there's no break. ## Type matters Let's emphasize that the equality check is always strict. The values must be of the same type to match. For example, let's consider the code: 1. For 0, 1, the first alert runs. 2. For 2 the second alert runs. 3. But for 3, the result of the prompt is a string "3", which is not strictly equal === to the number 3. So we've got a dead code in case 3! The default variant will execute.

state

Functions

Quite often we need to perform a similar action in many places of the script. For example, we need to show a nice-looking message when a visitor logs in, logs out and maybe somewhere else. Functions are the main "building blocks" of the program. They allow the code to be called many times without repetition. We've already seen examples of built-in functions, like alert(message), prompt(message, default) and confirm(question). But we can create functions of our own as well. ## Function Declaration To create a function we can use a function declaration. It looks like this: The function keyword goes first, then goes the name of the function, then a list of parameters between the parentheses (comma-separated, empty in the example above, we'll see examples later) and finally the code of the function, also named "the function body", between curly braces. Our new function can be called by its name: showMessage(). For instance: The call showMessage() executes the code of the function. Here we will see the message two times. This example clearly demonstrates one of the main purposes of functions: to avoid code duplication. If we ever need to change the message or the way it is shown, it's enough to modify the code in one place: the function which outputs it. ## Local variables A variable declared inside a function is only visible inside that function. For example: ## Outer variables A function can access an outer variable as well, for example: The function has full access to the outer variable. It can modify it as well. For instance: The outer variable is only used if there's no local one. If a same-named variable is declared inside the function then it shadows the outer one. For instance, in the code below the function uses the local userName. The outer one is ignored: ## Parameters We can pass arbitrary data to functions using parameters. In the example below, the function has two parameters: from and text. When the function is called in lines () and (*), the given values are copied to local variables from and text. Then the function uses them. Here's one more example: we have a variable from and pass it to the function. Please note: the function changes from, but the change is not seen outside, because a function always gets a copy of the value: When a value is passed as a function parameter, it's also called an argument. In other words, to put these terms straight: - A parameter is the variable listed inside the parentheses in the function declaration (it's a declaration time term). - An argument is the value that is passed to the function when it is called (it's a call time term). We declare functions listing their parameters, then call them passing arguments. In the example above, one might say: "the function showMessage is declared with two parameters, then called with two arguments: from and "Hello"". ## Default values If a function is called, but an argument is not provided, then the corresponding value becomes undefined. For instance, the aforementioned function showMessage(from, text) can be called with a single argument: That's not an error. Such a call would output "Ann: undefined". As the value for text isn't passed, it becomes undefined. We can specify the so-called "default" (to use if omitted) value for a parameter in the function declaration, using =: Now if the text parameter is not passed, it will get the value "no text given". The default value also jumps in if the parameter exists, but strictly equals undefined, like this: Here "no text given" is a string, but it can be a more complex expression, which is only evaluated and assigned if the parameter is missing. So, this is also possible: function showMessage(from, text) { if (text === undefined) { text = 'no text given'; alert( from + ": " + text ); function showMessage(from, text) { // If the value of text is falsy, assign the default value // this assumes that text == "" is the same as no text at all text = text || 'no text given'; ... ### Alternative default parameters Sometimes it makes sense to assign default values for parameters at a later stage after the function declaration. We can check if the parameter is passed during the function execution, by comparing it with undefined: ...Or we could use the || operator: Modern JavaScript engines support the nullish coalescing operator ??, it's better when most falsy values, such as 0, should be considered "normal": ## Returning a value A function can return a value back into the calling code as the result. The simplest example would be a function that sums two values: The directive return can be in any place of the function. When the execution reaches it, the function stops, and the value is returned to the calling code (assigned to result above). There may be many occurrences of return in a single function. For instance: It is possible to use return without a value. That causes the function to exit immediately. For example: In the code above, if checkAge(age) returns false, then showMovie won't proceed to the alert. function doNothing() { / empty / } alert( doNothing() === undefined ); // true function doNothing() { return; alert( doNothing() === undefined ); // true return (some + long + expression + or + whatever * f(a) + f(b)) return!;/! (some + long + expression + or + whatever * f(a) + f(b)) return ( some + long + expression + or + whatever * f(a) + f(b) ## Naming a function [#function-naming] Functions are actions. So their name is usually a verb. It should be brief, as accurate as possible and describe what the function does, so that someone reading the code gets an indication of what the function does. It is a widespread practice to start a function with a verbal prefix which vaguely describes the action. There must be an agreement within the team on the meaning of the prefixes. For instance, functions that start with "show" usually show something. Function starting with... - "get…" -- return a value, - "calc…" -- calculate something, - "create…" -- create something, - "check…" -- check something and return a boolean, etc. Examples of such names: With prefixes in place, a glance at a function name gives an understanding what kind of work it does and what kind of value it returns. ## Functions == Comments Functions should be short and do exactly one thing. If that thing is big, maybe it's worth it to split the function into a few smaller functions. Sometimes following this rule may not be that easy, but it's definitely a good thing. A separate function is not only easier to test and debug -- its very existence is a great comment! For instance, compare the two functions showPrimes(n) below. Each one outputs prime numbers up to n. The first variant uses a label: The second variant uses an additional function isPrime(n) to test for primality: The second variant is easier to understand, isn't it? Instead of the code piece we see a name of the action (isPrime). Sometimes people refer to such code as self-describing. So, functions can be created even if we don't intend to reuse them. They structure the code and make it readable. ## Summary A function declaration looks like this: - Values passed to a function as parameters are copied to its local variables. - A function may access outer variables. But it works only from inside out. The code outside of the function doesn't see its local variables. - A function can return a value. If it doesn't, then its result is undefined. To make the code clean and easy to understand, it's recommended to use mainly local variables and parameters in the function, not outer variables. It is always easier to understand a function which gets parameters, works with them and returns a result than a function which gets no parameters, but modifies outer variables as a side effect. Function naming: - A name should clearly describe what the function does. When we see a function call in the code, a good name instantly gives us an understanding what it does and returns. - A function is an action, so function names are usually verbal. - There exist many well-known function prefixes like create…, show…, get…, check… and so on. Use them to hint what a function does. Functions are the main building blocks of scripts. Now we've covered the basics, so we actually can start creating and using them. But that's only the beginning of the path. We are going to return to them many times, going more deeply into their advanced features.

function

Function expressions

In JavaScript, a function is not a "magical language structure", but a special kind of value. The syntax that we used before is called a Function Declaration: There is another syntax for creating a function that is called a Function Expression. It allows us to create a new function in the middle of any expression. For example: Here we can see a variable sayHi getting a value, the new function, created as function() { alert("Hello"); }. As the function creation happens in the context of the assignment expression (to the right side of =), this is a Function Expression. Please note, there's no name after the function keyword. Omitting a name is allowed for Function Expressions. Here we immediately assign it to the variable, so the meaning of these code samples is the same: "create a function and put it into the variable sayHi". In more advanced situations, that we'll come across later, a function may be created and immediately called or scheduled for a later execution, not stored anywhere, thus remaining anonymous. ## Function is a value Let's reiterate: no matter how the function is created, a function is a value. Both examples above store a function in the sayHi variable. We can even print out that value using alert: Please note that the last line does not run the function, because there are no parentheses after sayHi. There are programming languages where any mention of a function name causes its execution, but JavaScript is not like that. In JavaScript, a function is a value, so we can deal with it as a value. The code above shows its string representation, which is the source code. Surely, a function is a special value, in the sense that we can call it like sayHi(). But it's still a value. So we can work with it like with other kinds of values. We can copy a function to another variable: Here's what happens above in detail: 1. The Function Declaration (1) creates the function and puts it into the variable named sayHi. 2. Line (2) copies it into the variable func. Please note again: there are no parentheses after sayHi. If there were, then func = sayHi() would write the result of the call sayHi() into func, not the function sayHi itself. 3. Now the function can be called as both sayHi() and func(). We could also have used a Function Expression to declare sayHi, in the first line: Everything would work the same. function sayHi() { // ... let sayHi = function() { // ... }!;/! ## Callback functions Let's look at more examples of passing functions as values and using function expressions. We'll write a function ask(question, yes, no) with three parameters: question : Text of the question yes : Function to run if the answer is "Yes" : Function to run if the answer is "No" The function should ask the question and, depending on the user's answer, call yes() or no(): In practice, such functions are quite useful. The major difference between a real-life ask and the example above is that real-life functions use more complex ways to interact with the user than a simple confirm. In the browser, such functions usually draw a nice-looking question window. But that's another story. *The arguments showOk and showCancel of ask are called callback functions or just callbacks.* The idea is that we pass a function and expect it to be "called back" later if necessary. In our case, showOk becomes the callback for "yes" answer, and showCancel for "no" answer. We can use Function Expressions to write an equivalent, shorter function: Here, functions are declared right inside the ask(...) call. They have no name, and so are called anonymous. Such functions are not accessible outside of ask (because they are not assigned to variables), but that's just what we want here. Such code appears in our scripts very naturally, it's in the spirit of JavaScript. ## Function Expression vs Function Declaration Let's formulate the key differences between Function Declarations and Expressions. First, the syntax: how to differentiate between them in the code. - Function Declaration: a function, declared as a separate statement, in the main code flow: ```js // Function Declaration function sum(a, b) { return a + b; ``` - Function Expression: a function, created inside an expression or inside another syntax construct. Here, the function is created on the right side of the "assignment expression" =: ```js // Function Expression let sum = function(a, b) { return a + b; ``` The more subtle difference is when a function is created by the JavaScript engine. A Function Expression is created when the execution reaches it and is usable only from that moment. Once the execution flow passes to the right side of the assignment let sum = function… -- here we go, the function is created and can be used (assigned, called, etc. ) from now on. Function Declarations are different. A Function Declaration can be called earlier than it is defined. For example, a global Function Declaration is visible in the whole script, no matter where it is. That's due to internal algorithms. When JavaScript prepares to run the script, it first looks for global Function Declarations in it and creates the functions. We can think of it as an "initialization stage". And after all Function Declarations are processed, the code is executed. So it has access to these functions. For example, this works: The Function Declaration sayHi is created when JavaScript is preparing to start the script and is visible everywhere in it. ...If it were a Function Expression, then it wouldn't work: Function Expressions are created when the execution reaches them. That would happen only in the line (*). Too late. Another special feature of Function Declarations is their block scope. In strict mode, when a Function Declaration is within a code block, it's visible everywhere inside that block. But not outside of it. For instance, let's imagine that we need to declare a function welcome() depending on the age variable that we get during runtime. And then we plan to use it some time later. If we use Function Declaration, it won't work as intended: That's because a Function Declaration is only visible inside the code block in which it resides. Here's another example: What can we do to make welcome visible outside of if? The correct approach would be to use a Function Expression and assign welcome to the variable that is declared outside of if and has the proper visibility. This code works as intended: Or we could simplify it even further using a question mark operator ?: ## Summary - Functions are values. They can be assigned, copied or declared in any place of the code. - If the function is declared as a separate statement in the main code flow, that's called a "Function Declaration". - If the function is created as a part of an expression, it's called a "Function Expression". - Function Declarations are processed before the code block is executed. They are visible everywhere in the block. - Function Expressions are created when the execution flow reaches them. In most cases when we need to declare a function, a Function Declaration is preferable, because it is visible prior to the declaration itself. That gives us more flexibility in code organization, and is usually more readable. So we should use a Function Expression only when a Function Declaration is not fit for the task. We've seen a couple of examples of that in this chapter, and will see more in the future.

function

Arrow functions, the basics

There's another very simple and concise syntax for creating functions, that's often better than Function Expressions. It's called "arrow functions", because it looks like this: This creates a function func that accepts arguments arg1..argN, then evaluates the expression on the right side with their use and returns its result. In other words, it's the shorter version of: Let's see a concrete example: As you can see, (a, b) => a + b means a function that accepts two arguments named a and b. Upon the execution, it evaluates the expression a + b and returns the result. - If we have only one argument, then parentheses around parameters can be omitted, making that even shorter. For example: ```js run let double = n => n * 2; // roughly the same as: let double = function(n) { return n * 2 } alert( double(3) ); // 6 ``` - If there are no arguments, parentheses are empty, but they must be present: ```js run let sayHi = () => alert("Hello!"); sayHi(); ``` Arrow functions can be used in the same way as Function Expressions. For instance, to dynamically create a function: Arrow functions may appear unfamiliar and not very readable at first, but that quickly changes as the eyes get used to the structure. They are very convenient for simple one-line actions, when we're just too lazy to write many words. ## Multiline arrow functions The arrow functions that we've seen so far were very simple. They took arguments from the left of =>, evaluated and returned the right-side expression with them. Sometimes we need a more complex function, with multiple expressions and statements. In that case, we can enclose them in curly braces. The major difference is that curly braces require a return within them to return a value (just like a regular function does). Like this: ## Summary Arrow functions are handy for simple actions, especially for one-liners. They come in two flavors: 1. Without curly braces: (...args) => expression -- the right side is an expression: the function evaluates it and returns the result. Parentheses can be omitted, if there's only a single argument, e.g. n => n*2. 2. With curly braces: (...args) => { body } -- brackets allow us to write multiple statements inside the function, but we need an explicit return to return something.

function

JavaScript specials

This chapter briefly recaps the features of JavaScript that we've learned by now, paying special attention to subtle moments. ## Code structure Statements are delimited with a semicolon: Usually, a line-break is also treated as a delimiter, so that would also work: That's called "automatic semicolon insertion". Sometimes it doesn't work, for instance: Most codestyle guides agree that we should put a semicolon after each statement. Semicolons are not required after code blocks {...} and syntax constructs with them like loops: ...But even if we can put an "extra" semicolon somewhere, that's not an error. It will be ignored. More in: <info:structure>. ## Strict mode To fully enable all features of modern JavaScript, we should start scripts with "use strict". The directive must be at the top of a script or at the beginning of a function body. Without "use strict", everything still works, but some features behave in the old-fashioned, "compatible" way. We'd generally prefer the modern behavior. Some modern features of the language (like classes that we'll study in the future) enable strict mode implicitly. More in: <info:strict-mode>. ## Variables Can be declared using: - let - const (constant, can't be changed) - var (old-style, will see later) A variable name can include: - Letters and digits, but the first character may not be a digit. - Characters $ and _ are normal, on par with letters. - Non-Latin alphabets and hieroglyphs are also allowed, but commonly not used. Variables are dynamically typed. They can store any value: There are 8 data types: - number for both floating-point and integer numbers, - bigint for integer numbers of arbitrary length, - string for strings, - boolean for logical values: true/false, - null -- a type with a single value null, meaning "empty" or "does not exist", - undefined -- a type with a single value undefined, meaning "not assigned", - object and symbol -- for complex data structures and unique identifiers, we haven't learnt them yet. The typeof operator returns the type for a value, with two exceptions: More in: <info:variables> and <info:types>. ## Interaction We're using a browser as a working environment, so basic UI functions will be: [prompt(question, [default])](https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt) : Ask a question, and return either what the visitor entered or null if they clicked "cancel". confirm(question) : Ask a question and suggest to choose between Ok and Cancel. The choice is returned as true/false. alert(message) : Output a message. All these functions are modal, they pause the code execution and prevent the visitor from interacting with the page until they answer. For instance: More in: <info:alert-prompt-confirm>. ## Operators JavaScript supports the following operators: Arithmetical : Regular: + - /, also % for the remainder and * for power of a number. The binary plus + concatenates strings. And if any of the operands is a string, the other one is converted to string too: ```js run alert( '1' + 2 ); // '12', string alert( 1 + '2' ); // '12', string ``` Assignments : There is a simple assignment: a = b and combined ones like a *= 2. Bitwise : Bitwise operators work with 32-bit integers at the lowest, bit-level: see the docs when they are needed. Conditional : The only operator with three parameters: cond ? resultA : resultB. If cond is truthy, returns resultA, otherwise resultB. Logical operators : Logical AND && and OR || perform short-circuit evaluation and then return the value where it stopped (not necessary true/false). Logical NOT ! converts the operand to boolean type and returns the inverse value. Nullish coalescing operator : The ?? operator provides a way to choose a defined value from a list of variables. The result of a ?? b is a unless it's null/undefined, then b. Comparisons : Equality check == for values of different types converts them to a number (except null and undefined that equal each other and nothing else), so these are equal: ```js run alert( 0 == false ); // true alert( 0 == '' ); // true ``` Other comparisons convert to a number as well. The strict equality operator === doesn't do the conversion: different types always mean different values for it. Values null and undefined are special: they equal == each other and don't equal anything else. Greater/less comparisons compare strings character-by-character, other types are converted to a number. Other operators : There are few others, like a comma operator. More in: <info:operators>, <info:comparison>, <info:logical-operators>, <info:nullish-coalescing-operator>. ## Loops - We covered 3 types of loops: ```js // 1 while (condition) { ... // 2 do { ... } while (condition); // 3 for(let i = 0; i < 10; i++) { ... ``` - The variable declared in for(let...) loop is visible only inside the loop. But we can also omit let and reuse an existing variable. - Directives break/continue allow to exit the whole loop/current iteration. Use labels to break nested loops. Details in: <info:while-for>. Later we'll study more types of loops to deal with objects. ## The "switch" construct The "switch" construct can replace multiple if checks. It uses === (strict equality) for comparisons. For instance: Details in: <info:switch>. ## Functions We covered three ways to create a function in JavaScript: 1. Function Declaration: the function in the main code flow ```js function sum(a, b) { let result = a + b; return result; ``` 2. Function Expression: the function in the context of an expression ```js let sum = function(a, b) { let result = a + b; return result; ``` 3. Arrow functions: ```js // expression on the right side let sum = (a, b) => a + b; // or multi-line syntax with { ... }, need return here: let sum = (a, b) => { // ... return a + b; // without arguments let sayHi = () => alert("Hello"); // with a single argument let double = n => n * 2; ``` - Functions may have local variables: those declared inside its body or its parameter list. Such variables are only visible inside the function. - Parameters can have default values: function sum(a = 1, b = 2) {...}. - Functions always return something. If there's no return statement, then the result is undefined. Details: see <info:function-basics>, <info:arrow-functions-basics>. ## More to come That was a brief list of JavaScript features. As of now we've studied only basics. Further in the tutorial you'll find more specials and advanced features of JavaScript.

javascript

Debugging in the browser

Before writing more complex code, let's talk about debugging. Debugging is the process of finding and fixing errors within a script. All modern browsers and most other environments support debugging tools -- a special UI in developer tools that makes debugging much easier. It also allows to trace the code step by step to see what exactly is going on. We'll be using Chrome here, because it has enough features, most other browsers have a similar process. ## The "Sources" panel Your Chrome version may look a little bit different, but it still should be obvious what's there. - Open the example page in Chrome. - Turn on developer tools with key:F12 (Mac: key:Cmd+Opt+I). - Select the Sources panel. Here's what you should see if you are doing it for the first time: The toggler button <span class="devtools" style="background-position:-172px -98px"></span> opens the tab with files. Let's click it and select hello.js in the tree view. Here's what should show up: The Sources panel has 3 parts: 1. The File Navigator pane lists HTML, JavaScript, CSS and other files, including images that are attached to the page. Chrome extensions may appear here too. 2. The Code Editor pane shows the source code. 3. The JavaScript Debugging pane is for debugging, we'll explore it soon. Now you could click the same toggler <span class="devtools" style="background-position:-172px -122px"></span> again to hide the resources list and give the code some space. ## Console If we press key:Esc, then a console opens below. We can type commands there and press key:Enter to execute. After a statement is executed, its result is shown below. For example, here 1+2 results in 3, while the function call hello("debugger") returns nothing, so the result is undefined: ## Breakpoints Let's examine what's going on within the code of the example page. In hello.js, click at line number 4. Yes, right on the 4 digit, not on the code. Congratulations! You've set a breakpoint. Please also click on the number for line 8. It should look like this (blue is where you should click): A breakpoint is a point of code where the debugger will automatically pause the JavaScript execution. While the code is paused, we can examine current variables, execute commands in the console etc. In other words, we can debug it. We can always find a list of breakpoints in the right panel. That's useful when we have many breakpoints in various files. It allows us to: - Quickly jump to the breakpoint in the code (by clicking on it in the right panel). - Temporarily disable the breakpoint by unchecking it. - Remove the breakpoint by right-clicking and selecting Remove. - ...And so on. ## The command "debugger" We can also pause the code by using the debugger command in it, like this: Such command works only when the development tools are open, otherwise the browser ignores it. ## Pause and look around In our example, hello() is called during the page load, so the easiest way to activate the debugger (after we've set the breakpoints) is to reload the page. So let's press key:F5 (Windows, Linux) or key:Cmd+R (Mac). As the breakpoint is set, the execution pauses at the 4th line: Please open the informational dropdowns to the right (labeled with arrows). They allow you to examine the current code state: 1. Watch -- shows current values for any expressions. You can click the plus + and input an expression. The debugger will show its value, automatically recalculating it in the process of execution. 2. Call Stack -- shows the nested calls chain. At the current moment the debugger is inside hello() call, called by a script in index.html (no function there, so it's called "anonymous"). If you click on a stack item (e.g. "anonymous"), the debugger jumps to the corresponding code, and all its variables can be examined as well. 3. Scope -- current variables. Local shows local function variables. You can also see their values highlighted right over the source. Global has global variables (out of any functions). There's also this keyword there that we didn't study yet, but we'll do that soon. ## Tracing the execution Now it's time to trace the script. There are buttons for it at the top of the right panel. Let's engage them. <!-- https://github.com/ChromeDevTools/devtools-frontend/blob/master/front_end/Images/src/largeIcons.svg --> <span class="devtools" style="background-position:-146px -168px"></span> -- "Resume": continue the execution, hotkey key:F8. : Resumes the execution. If there are no additional breakpoints, then the execution just continues and the debugger loses control. Here's what we can see after a click on it: The execution has resumed, reached another breakpoint inside say() and paused there. Take a look at the "Call Stack" at the right. It has increased by one more call. We're inside say() now. <span class="devtools" style="background-position:-200px -190px"></span> -- "Step": run the next command, hotkey key:F9. : Run the next statement. If we click it now, alert will be shown. Clicking this again and again will step through all script statements one by one. <span class="devtools" style="background-position:-62px -192px"></span> -- "Step over": run the next command, but don't go into a function, hotkey key:F10. : Similar to the previous "Step" command, but behaves differently if the next statement is a function call (not a built-in, like alert, but a function of our own). If we compare them, the "Step" command goes into a nested function call and pauses the execution at its first line, while "Step over" executes the nested function call invisibly to us, skipping the function internals. The execution is then paused immediately after that function call. That's good if we're not interested to see what happens inside the function call. <span class="devtools" style="background-position:-4px -194px"></span> -- "Step into", hotkey key:F11. : That's similar to "Step", but behaves differently in case of asynchronous function calls. If you're only starting to learn JavaScript, then you can ignore the difference, as we don't have asynchronous calls yet. For the future, just note that "Step" command ignores async actions, such as setTimeout (scheduled function call), that execute later. The "Step into" goes into their code, waiting for them if necessary. See DevTools manual for more details. <span class="devtools" style="background-position:-32px -194px"></span> -- "Step out": continue the execution till the end of the current function, hotkey key:Shift+F11. : Continue the execution and stop it at the very last line of the current function. That's handy when we accidentally entered a nested call using <span class="devtools" style="background-position:-200px -190px"></span>, but it does not interest us, and we want to continue to its end as soon as possible. <span class="devtools" style="background-position:-61px -74px"></span> -- enable/disable all breakpoints. : That button does not move the execution. Just a mass on/off for breakpoints. <span class="devtools" style="background-position:-90px -146px"></span> -- enable/disable automatic pause in case of an error. : When enabled, if the developer tools is open, an error during the script execution automatically pauses it. Then we can analyze variables in the debugger to see what went wrong. So if our script dies with an error, we can open debugger, enable this option and reload the page to see where it dies and what's the context at that moment. ## Logging To output something to console from our code, there's console.log function. For instance, this outputs values from 0 to 4 to console: Regular users don't see that output, it is in the console. To see it, either open the Console panel of developer tools or press key:Esc while in another panel: that opens the console at the bottom. If we have enough logging in our code, then we can see what's going on from the records, without the debugger. ## Summary As we can see, there are three main ways to pause a script: 1. A breakpoint. 2. The debugger statements. 3. An error (if dev tools are open and the button <span class="devtools" style="background-position:-90px -146px"></span> is "on"). When paused, we can debug: examine variables and trace the code to see where the execution goes wrong. There are many more options in developer tools than covered here. The full manual is at <https://developers.google.com/web/tools/chrome-devtools>. The information from this chapter is enough to begin debugging, but later, especially if you do a lot of browser stuff, please go there and look through more advanced capabilities of developer tools. Oh, and also you can click at various places of dev tools and just see what's showing up. That's probably the fastest route to learn dev tools. Don't forget about the right click and context menus!

web,development

Coding Style

Our code must be as clean and easy to read as possible. That is actually the art of programming -- to take a complex task and code it in a way that is both correct and human-readable. A good code style greatly assists in that. ## Syntax Here is a cheat sheet with some suggested rules (see below for more details): <!-- --> Now let's discuss the rules and reasons for them in detail. ### Curly Braces In most JavaScript projects curly braces are written in "Egyptian" style with the opening brace on the same line as the corresponding keyword -- not on a new line. There should also be a space before the opening bracket, like this: A single-line construct, such as if (condition) doSomething(), is an important edge case. Should we use braces at all? Here are the annotated variants so you can judge their readability for yourself: 1. 😠 Beginners sometimes do that. Bad! Curly braces are not needed: ```js if (n < 0) !{/!alert(Power ${n} is not supported);!}/! ``` 2. 😠 Split to a separate line without braces. Never do that, easy to make an error when adding new lines: ```js if (n < 0) alert(Power ${n} is not supported); ``` 3. 😏 One line without braces - acceptable, if it's short: ```js if (n < 0) alert(Power ${n} is not supported); ``` 4. 😃 The best variant: ```js if (n < 0) { alert(Power ${n} is not supported); ``` For a very brief code, one line is allowed, e.g. if (cond) return null. But a code block (the last variant) is usually more readable. ### Line Length No one likes to read a long horizontal line of code. It's best practice to split them. For example: And, for if statements: The maximum line length should be agreed upon at the team-level. It's usually 80 or 120 characters. ### Indents There are two types of indents: - Horizontal indents: 2 or 4 spaces. A horizontal indentation is made using either 2 or 4 spaces or the horizontal tab symbol (key key:Tab). Which one to choose is an old holy war. Spaces are more common nowadays. One advantage of spaces over tabs is that spaces allow more flexible configurations of indents than the tab symbol. For instance, we can align the parameters with the opening bracket, like this: ```js no-beautify show(parameters, aligned, // 5 spaces padding at the left one, after, another ) { // ... ``` - Vertical indents: empty lines for splitting code into logical blocks. Even a single function can often be divided into logical blocks. In the example below, the initialization of variables, the main loop and returning the result are split vertically: ```js function pow(x, n) { let result = 1; // <-- for (let i = 0; i < n; i++) { result *= x; // <-- return result; ``` Insert an extra newline where it helps to make the code more readable. There should not be more than nine lines of code without a vertical indentation. ### Semicolons A semicolon should be present after each statement, even if it could possibly be skipped. There are languages where a semicolon is truly optional and it is rarely used. In JavaScript, though, there are cases where a line break is not interpreted as a semicolon, leaving the code vulnerable to errors. See more about that in the chapter <info:structure#semicolon>. If you're an experienced JavaScript programmer, you may choose a no-semicolon code style like StandardJS. Otherwise, it's best to use semicolons to avoid possible pitfalls. The majority of developers put semicolons. ### Nesting Levels Try to avoid nesting code too many levels deep. For example, in the loop, it's sometimes a good idea to use the continue directive to avoid extra nesting. For example, instead of adding a nested if conditional like this: We can write: A similar thing can be done with if/else and return. For example, two constructs below are identical. Option 1: Option 2: The second one is more readable because the "special case" of n < 0 is handled early on. Once the check is done we can move on to the "main" code flow without the need for additional nesting. ## Function Placement If you are writing several "helper" functions and the code that uses them, there are three ways to organize the functions. 1. Declare the functions above the code that uses them: ```js // !function declarations/! function createElement() { ... function setHandler(elem) { ... function walkAround() { ... // !the code which uses them/! let elem = createElement(); setHandler(elem); walkAround(); ``` 2. Code first, then functions ```js // !the code which uses the functions/! let elem = createElement(); setHandler(elem); walkAround(); // --- !helper functions/! --- function createElement() { ... function setHandler(elem) { ... function walkAround() { ... ``` 3. Mixed: a function is declared where it's first used. Most of time, the second variant is preferred. That's because when reading code, we first want to know what it does. If the code goes first, then it becomes clear from the start. Then, maybe we won't need to read the functions at all, especially if their names are descriptive of what they actually do. ## Style Guides A style guide contains general rules about "how to write" code, e.g. which quotes to use, how many spaces to indent, the maximal line length, etc. A lot of minor things. When all members of a team use the same style guide, the code looks uniform, regardless of which team member wrote it. Of course, a team can always write their own style guide, but usually there's no need to. There are many existing guides to choose from. Some popular choices: - Google JavaScript Style Guide - Airbnb JavaScript Style Guide - Idiomatic.JS - StandardJS - (plus many more) If you're a novice developer, start with the cheat sheet at the beginning of this chapter. Then you can browse other style guides to pick up more ideas and decide which one you like best. ## Automated Linters Linters are tools that can automatically check the style of your code and make improving suggestions. The great thing about them is that style-checking can also find some bugs, like typos in variable or function names. Because of this feature, using a linter is recommended even if you don't want to stick to one particular "code style". Here are some well-known linting tools: - JSLint -- one of the first linters. - JSHint -- more settings than JSLint. - ESLint -- probably the newest one. All of them can do the job. The author uses ESLint. Most linters are integrated with many popular editors: just enable the plugin in the editor and configure the style. For instance, for ESLint you should do the following: 1. Install Node.js. 2. Install ESLint with the command npm install -g eslint (npm is a JavaScript package installer). 3. Create a config file named .eslintrc in the root of your JavaScript project (in the folder that contains all your files). 4. Install/enable the plugin for your editor that integrates with ESLint. The majority of editors have one. Here's an example of an .eslintrc file: Here the directive "extends" denotes that the configuration is based on the "eslint:recommended" set of settings. After that, we specify our own. It is also possible to download style rule sets from the web and extend them instead. See <https://eslint.org/docs/user-guide/getting-started> for more details about installation. Also certain IDEs have built-in linting, which is convenient but not as customizable as ESLint. ## Summary All syntax rules described in this chapter (and in the style guides referenced) aim to increase the readability of your code. All of them are debatable. When we think about writing "better" code, the questions we should ask ourselves are: "What makes the code more readable and easier to understand?" and "What can help us avoid errors?" These are the main things to keep in mind when choosing and debating code styles. Reading popular style guides will allow you to keep up to date with the latest ideas about code style trends and best practices.

web,development

Comments

As we know from the chapter <info:structure>, comments can be single-line: starting with // and multiline: / ... /. We normally use them to describe how and why the code works. At first sight, commenting might be obvious, but novices in programming often use them wrongly. ## Bad comments Novices tend to use comments to explain "what is going on in the code". Like this: But in good code, the amount of such "explanatory" comments should be minimal. Seriously, the code should be easy to understand without them. There's a great rule about that: "if the code is so unclear that it requires a comment, then maybe it should be rewritten instead". ### Recipe: factor out functions Sometimes it's beneficial to replace a code piece with a function, like here: The better variant, with a factored out function isPrime: Now we can understand the code easily. The function itself becomes the comment. Such code is called self-descriptive. ### Recipe: create functions And if we have a long "code sheet" like this: Then it might be a better variant to refactor it into functions like: Once again, functions themselves tell what's going on. There's nothing to comment. And also the code structure is better when split. It's clear what every function does, what it takes and what it returns. In reality, we can't totally avoid "explanatory" comments. There are complex algorithms. And there are smart "tweaks" for purposes of optimization. But generally we should try to keep the code simple and self-descriptive. ## Good comments So, explanatory comments are usually bad. Which comments are good? Describe the architecture : Provide a high-level overview of components, how they interact, what's the control flow in various situations... In short -- the bird's eye view of the code. There's a special language UML to build high-level architecture diagrams explaining the code. Definitely worth studying. Document function parameters and usage : There's a special syntax JSDoc to document a function: usage, parameters, returned value. For instance: Such comments allow us to understand the purpose of the function and use it the right way without looking in its code. By the way, many editors like WebStorm can understand them as well and use them to provide autocomplete and some automatic code-checking. Also, there are tools like JSDoc 3 that can generate HTML-documentation from the comments. You can read more information about JSDoc at <https://jsdoc.app>. Why is the task solved this way? : What's written is important. But what's not written may be even more important to understand what's going on. Why is the task solved exactly this way? The code gives no answer. If there are many ways to solve the task, why this one? Especially when it's not the most obvious one. Without such comments the following situation is possible: 1. You (or your colleague) open the code written some time ago, and see that it's "suboptimal". 2. You think: "How stupid I was then, and how much smarter I'm now", and rewrite using the "more obvious and correct" variant. 3. ...The urge to rewrite was good. But in the process you see that the "more obvious" solution is actually lacking. You even dimly remember why, because you already tried it long ago. You revert to the correct variant, but the time was wasted. Comments that explain the solution are very important. They help to continue development the right way. Any subtle features of the code? Where they are used? : If the code has anything subtle and counter-intuitive, it's definitely worth commenting. ## Summary An important sign of a good developer is comments: their presence and even their absence. Good comments allow us to maintain the code well, come back to it after a delay and use it more effectively. Comment this: - Overall architecture, high-level view. - Function usage. - Important solutions, especially when not immediately obvious. Avoid comments: - That tell "how code works" and "what it does". - Put them in only if it's impossible to make the code so simple and self-descriptive that it doesn't require them. Comments are also used for auto-documenting tools like JSDoc3: they read them and generate HTML-docs (or docs in another format).

web,development

Ninja code

Programmer ninjas of the past used these tricks to sharpen the mind of code maintainers. Code review gurus look for them in test tasks. Novice developers sometimes use them even better than programmer ninjas. Read them carefully and find out who you are -- a ninja, a novice, or maybe a code reviewer? ## Brevity is the soul of wit Make the code as short as possible. Show how smart you are. Let subtle language features guide you. For instance, take a look at this ternary operator '?': Cool, right? If you write like that, a developer who comes across this line and tries to understand what is the value of i is going to have a merry time. Then come to you, seeking for an answer. Tell them that shorter is always better. Initiate them into the paths of ninja. ## One-letter variables Another way to code shorter is to use single-letter variable names everywhere. Like a, b or c. A short variable disappears in the code like a real ninja in the forest. No one will be able to find it using "search" of the editor. And even if someone does, they won't be able to "decipher" what the name a or b means. ...But there's an exception. A real ninja will never use i as the counter in a "for" loop. Anywhere, but not here. Look around, there are many more exotic letters. For instance, x or y. An exotic variable as a loop counter is especially cool if the loop body takes 1-2 pages (make it longer if you can). Then if someone looks deep inside the loop, they won't be able to quickly figure out that the variable named x is the loop counter. ## Use abbreviations If the team rules forbid the use of one-letter and vague names -- shorten them, make abbreviations. Like this: - list -> lst. - userAgent -> ua. - browser -> brsr. - ...etc Only the one with truly good intuition will be able to understand such names. Try to shorten everything. Only a worthy person should be able to uphold the development of your code. ## Soar high. Be abstract. While choosing a name try to use the most abstract word. Like obj, data, value, item, elem and so on. - The ideal name for a variable is data. Use it everywhere you can. Indeed, every variable holds data, right? ...But what to do if data is already taken? Try value, it's also universal. After all, a variable eventually gets a value. - Name a variable by its type: str, num... Give them a try. A young initiate may wonder -- are such names really useful for a ninja? Indeed, they are! Sure, the variable name still means something. It says what's inside the variable: a string, a number or something else. But when an outsider tries to understand the code, they'll be surprised to see that there's actually no information at all! And will ultimately fail to alter your well-thought code. The value type is easy to find out by debugging. But what's the meaning of the variable? Which string/number does it store? There's just no way to figure out without a good meditation! - ...But what if there are no more such names? Just add a number: data1, item2, elem5... ## Attention test Only a truly attentive programmer should be able to understand your code. But how to check that? One of the ways -- use similar variable names, like date and data. Mix them where you can. A quick read of such code becomes impossible. And when there's a typo... Ummm... We're stuck for long, time to drink tea. ## Smart synonyms Using similar names for same things makes life more interesting and shows your creativity to the public. For instance, consider function prefixes. If a function shows a message on the screen -- start it with display…, like displayMessage. And then if another function shows on the screen something else, like a user name, start it with show… (like showName). Insinuate that there's a subtle difference between such functions, while there is none. Make a pact with fellow ninjas of the team: if John starts "showing" functions with display... in his code, then Peter could use render.., and Ann -- paint.... Note how much more interesting and diverse the code became. ...And now the hat trick! For two functions with important differences -- use the same prefix! For instance, the function printPage(page) will use a printer. And the function printText(text) will put the text on-screen. Let an unfamiliar reader think well over similarly named function printMessage: "Where does it put the message? To a printer or on the screen?". To make it really shine, printMessage(message) should output it in the new window! ## Reuse names Add a new variable only when absolutely necessary. Instead, reuse existing names. Just write new values into them. In a function try to use only variables passed as parameters. That would make it really hard to identify what's exactly in the variable now. And also where it comes from. The purpose is to develop the intuition and memory of a person reading the code. A person with weak intuition would have to analyze the code line-by-line and track the changes through every code branch. An advanced variant of the approach is to covertly (!) replace the value with something alike in the middle of a loop or a function. For instance: A fellow programmer who wants to work with elem in the second half of the function will be surprised... Only during the debugging, after examining the code they will find out that they're working with a clone! Seen in code regularly. Deadly effective even against an experienced ninja. ## Underscores for fun Put underscores _ and __ before variable names. Like _name or __value. It would be great if only you knew their meaning. Or, better, add them just for fun, without particular meaning at all. Or different meanings in different places. You kill two rabbits with one shot. First, the code becomes longer and less readable, and the second, a fellow developer may spend a long time trying to figure out what the underscores mean. A smart ninja puts underscores at one spot of code and evades them at other places. That makes the code even more fragile and increases the probability of future errors. ## Show your love Let everyone see how magnificent your entities are! Names like superElement, megaFrame and niceItem will definitely enlighten a reader. Indeed, from one hand, something is written: super.., mega.., nice.. But from the other hand -- that brings no details. A reader may decide to look for a hidden meaning and meditate for an hour or two of their paid working time. ## Overlap outer variables Use same names for variables inside and outside a function. As simple. No efforts to invent new names. A programmer who jumps inside the render will probably fail to notice that there's a local user shadowing the outer one. Then they'll try to work with user assuming that it's the external variable, the result of authenticateUser()... The trap is sprung! Hello, debugger... ## Side-effects everywhere! There are functions that look like they don't change anything. Like isReady(), checkPermission(), findTags()... They are assumed to carry out calculations, find and return the data, without changing anything outside of them. In other words, without "side-effects". A really beautiful trick is to add a "useful" action to them, besides the main task. An expression of dazed surprise on the face of your colleague when they see a function named is.., check.. or find... changing something -- will definitely broaden your boundaries of reason. Another way to surprise is to return a non-standard result. Show your original thinking! Let the call of checkPermission return not true/false, but a complex object with the results of the check. Those developers who try to write if (checkPermission(..)), will wonder why it doesn't work. Tell them: "Read the docs!". And give this article. ## Powerful functions! Don't limit the function by what's written in its name. Be broader. For instance, a function validateEmail(email) could (besides checking the email for correctness) show an error message and ask to re-enter the email. Additional actions should not be obvious from the function name. A true ninja coder will make them not obvious from the code as well. Joining several actions into one protects your code from reuse. Imagine, another developer wants only to check the email, and not output any message. Your function validateEmail(email) that does both will not suit them. So they won't break your meditation by asking anything about it. ## Summary All "pieces of advice" above are from the real code... Sometimes, written by experienced developers. Maybe even more experienced than you are ;) - Follow some of them, and your code will become full of surprises. - Follow many of them, and your code will become truly yours, no one would want to change it. - Follow all, and your code will become a valuable lesson for young developers looking for enlightenment.

web,development

Automated testing with Mocha

Automated testing will be used in further tasks, and it's also widely used in real projects. ## Why do we need tests? When we write a function, we can usually imagine what it should do: which parameters give which results. During development, we can check the function by running it and comparing the outcome with the expected one. For instance, we can do it in the console. If something is wrong -- then we fix the code, run again, check the result -- and so on till it works. But such manual "re-runs" are imperfect. When testing a code by manual re-runs, it's easy to miss something. For instance, we're creating a function f. Wrote some code, testing: f(1) works, but f(2) doesn't work. We fix the code and now f(2) works. Looks complete? But we forgot to re-test f(1). That may lead to an error. That's very typical. When we develop something, we keep a lot of possible use cases in mind. But it's hard to expect a programmer to check all of them manually after every change. So it becomes easy to fix one thing and break another one. Automated testing means that tests are written separately, in addition to the code. They run our functions in various ways and compare results with the expected. ## Behavior Driven Development (BDD) Let's start with a technique named Behavior Driven Development or, in short, BDD. BDD is three things in one: tests AND documentation AND examples. To understand BDD, we'll examine a practical case of development. ## Development of "pow": the spec Let's say we want to make a function pow(x, n) that raises x to an integer power n. We assume that n≥0. That task is just an example: there's the ** operator in JavaScript that can do that, but here we concentrate on the development flow that can be applied to more complex tasks as well. Before creating the code of pow, we can imagine what the function should do and describe it. Such description is called a specification or, in short, a spec, and contains descriptions of use cases together with tests for them, like this: A spec has three main building blocks that you can see above: describe("title", function() { ... }) : What functionality we're describing? In our case we're describing the function pow. Used to group "workers" -- the it blocks. it("use case description", function() { ... }) : In the title of it we in a human-readable way describe the particular use case, and the second argument is a function that tests it. assert.equal(value1, value2) : The code inside it block, if the implementation is correct, should execute without errors. Functions assert.* are used to check whether pow works as expected. Right here we're using one of them -- assert.equal, it compares arguments and yields an error if they are not equal. Here it checks that the result of pow(2, 3) equals 8. There are other types of comparisons and checks, that we'll add later. The specification can be executed, and it will run the test specified in it block. We'll see that later. ## The development flow The flow of development usually looks like this: 1. An initial spec is written, with tests for the most basic functionality. 2. An initial implementation is created. 3. To check whether it works, we run the testing framework Mocha (more details soon) that runs the spec. While the functionality is not complete, errors are displayed. We make corrections until everything works. 4. Now we have a working initial implementation with tests. 5. We add more use cases to the spec, probably not yet supported by the implementations. Tests start to fail. 6. Go to 3, update the implementation till tests give no errors. 7. Repeat steps 3-6 till the functionality is ready. So, the development is iterative. We write the spec, implement it, make sure tests pass, then write more tests, make sure they work etc. At the end we have both a working implementation and tests for it. Let's see this development flow in our practical case. The first step is already complete: we have an initial spec for pow. Now, before making the implementation, let's use a few JavaScript libraries to run the tests, just to see that they are working (they will all fail). ## The spec in action Here in the tutorial we'll be using the following JavaScript libraries for tests: - Mocha -- the core framework: it provides common testing functions including describe and it and the main function that runs tests. - Chai -- the library with many assertions. It allows to use a lot of different assertions, for now we need only assert.equal. - Sinon -- a library to spy over functions, emulate built-in functions and more, we'll need it much later. These libraries are suitable for both in-browser and server-side testing. Here we'll consider the browser variant. The full HTML page with these frameworks and pow spec: The page can be divided into five parts: 1. The <head> -- add third-party libraries and styles for tests. 2. The <script> with the function to test, in our case -- with the code for pow. 3. The tests -- in our case an external script test.js that has describe("pow", ...) from above. 4. The HTML element <div id="mocha"> will be used by Mocha to output results. 5. The tests are started by the command mocha.run(). The result: [iframe height=250 src="pow-1" border=1 edit] As of now, the test fails, there's an error. That's logical: we have an empty function code in pow, so pow(2,3) returns undefined instead of 8. For the future, let's note that there are more high-level test-runners, like karma and others, that make it easy to autorun many different tests. ## Initial implementation Let's make a simple implementation of pow, for tests to pass: Wow, now it works! [iframe height=250 src="pow-min" border=1 edit] ## Improving the spec What we've done is definitely a cheat. The function does not work: an attempt to calculate pow(3,4) would give an incorrect result, but tests pass. ...But the situation is quite typical, it happens in practice. Tests pass, but the function works wrong. Our spec is imperfect. We need to add more use cases to it. Let's add one more test to check that pow(3, 4) = 81. We can select one of two ways to organize the test here: 1. The first variant -- add one more assert into the same it: ```js describe("pow", function() { it("raises to n-th power", function() { assert.equal(pow(2, 3), 8); assert.equal(pow(3, 4), 81); }); }); ``` 2. The second -- make two tests: ```js describe("pow", function() { it("2 raised to power 3 is 8", function() { assert.equal(pow(2, 3), 8); }); it("3 raised to power 4 is 81", function() { assert.equal(pow(3, 4), 81); }); }); ``` The principal difference is that when assert triggers an error, the it block immediately terminates. So, in the first variant if the first assert fails, then we'll never see the result of the second assert. Making tests separate is useful to get more information about what's going on, so the second variant is better. And besides that, there's one more rule that's good to follow. One test checks one thing. If we look at the test and see two independent checks in it, it's better to split it into two simpler ones. So let's continue with the second variant. The result: [iframe height=250 src="pow-2" edit border="1"] As we could expect, the second test failed. Sure, our function always returns 8, while the assert expects 81. ## Improving the implementation Let's write something more real for tests to pass: To be sure that the function works well, let's test it for more values. Instead of writing it blocks manually, we can generate them in for: The result: [iframe height=250 src="pow-3" edit border="1"] ## Nested describe We're going to add even more tests. But before that let's note that the helper function makeTest and for should be grouped together. We won't need makeTest in other tests, it's needed only in for: their common task is to check how pow raises into the given power. Grouping is done with a nested describe: The nested describe defines a new "subgroup" of tests. In the output we can see the titled indentation: [iframe height=250 src="pow-4" edit border="1"] In the future we can add more it and describe on the top level with helper functions of their own, they won't see makeTest. describe("test", function() { before(() => alert("Testing started – before all tests")); after(() => alert("Testing finished – after all tests")); beforeEach(() => alert("Before a test – enter a test")); afterEach(() => alert("After a test – exit a test")); it('test 1', () => alert(1)); it('test 2', () => alert(2)); }); Testing started – before all tests (before) Before a test – enter a test (beforeEach) After a test – exit a test (afterEach) Before a test – enter a test (beforeEach) After a test – exit a test (afterEach) Testing finished – after all tests (after) ## Extending the spec The basic functionality of pow is complete. The first iteration of the development is done. When we're done celebrating and drinking champagne -- let's go on and improve it. As it was said, the function pow(x, n) is meant to work with positive integer values n. To indicate a mathematical error, JavaScript functions usually return NaN. Let's do the same for invalid values of n. Let's first add the behavior to the spec(!): The result with new tests: [iframe height=530 src="pow-nan" edit border="1"] The newly added tests fail, because our implementation does not support them. That's how BDD is done: first we write failing tests, and then make an implementation for them. So we should add a couple of lines to pow: Now it works, all tests pass: [iframe height=300 src="pow-full" edit border="1"] [edit src="pow-full" title="Open the full final example in the sandbox."] ## Summary In BDD, the spec goes first, followed by implementation. At the end we have both the spec and the code. The spec can be used in three ways: 1. As Tests - they guarantee that the code works correctly. 2. As Docs -- the titles of describe and it tell what the function does. 3. As Examples -- the tests are actually working examples showing how a function can be used. With the spec, we can safely improve, change, even rewrite the function from scratch and make sure it still works right. That's especially important in large projects when a function is used in many places. When we change such a function, there's just no way to manually check if every place that uses it still works right. Without tests, people have two ways: 1. To perform the change, no matter what. And then our users meet bugs, as we probably fail to check something manually. 2. Or, if the punishment for errors is harsh, as there are no tests, people become afraid to modify such functions, and then the code becomes outdated, no one wants to get into it. Not good for development. Automatic testing helps to avoid these problems! If the project is covered with tests, there's just no such problem. After any changes, we can run tests and see a lot of checks made in a matter of seconds. Besides, a well-tested code has better architecture. Naturally, that's because auto-tested code is easier to modify and improve. But there's also another reason. To write tests, the code should be organized in such a way that every function has a clearly described task, well-defined input and output. That means a good architecture from the beginning. In real life that's sometimes not that easy. Sometimes it's difficult to write a spec before the actual code, because it's not yet clear how it should behave. But in general writing tests makes development faster and more stable. Later in the tutorial you will meet many tasks with tests baked-in. So you'll see more practical examples. Writing tests requires good JavaScript knowledge. But we're just starting to learn it. So, to settle down everything, as of now you're not required to write tests, but you should already be able to read them even if they are a little bit more complex than in this chapter.

web,development

Polyfills and transpilers

The JavaScript language steadily evolves. New proposals to the language appear regularly, they are analyzed and, if considered worthy, are appended to the list at <https://tc39.github.io/ecma262/> and then progress to the specification. Teams behind JavaScript engines have their own ideas about what to implement first. They may decide to implement proposals that are in draft and postpone things that are already in the spec, because they are less interesting or just harder to do. So it's quite common for an engine to implement only part of the standard. A good page to see the current state of support for language features is <https://compat-table.github.io/compat-table/es6/> (it's big, we have a lot to study yet). As programmers, we'd like to use most recent features. The more good stuff - the better! On the other hand, how to make our modern code work on older engines that don't understand recent features yet? There are two tools for that: 1. Transpilers. 2. Polyfills. Here, in this chapter, our purpose is to get the gist of how they work, and their place in web development. ## Transpilers A transpiler is a special piece of software that translates source code to another source code. It can parse ("read and understand") modern code and rewrite it using older syntax constructs, so that it'll also work in outdated engines. E.g. JavaScript before year 2020 didn't have the "nullish coalescing operator" ??. So, if a visitor uses an outdated browser, it may fail to understand the code like height = height ?? 100. A transpiler would analyze our code and rewrite height ?? 100 into (height !== undefined && height !== null) ? height : 100. Now the rewritten code is suitable for older JavaScript engines. Usually, a developer runs the transpiler on their own computer, and then deploys the transpiled code to the server. Speaking of names, Babel is one of the most prominent transpilers out there. Modern project build systems, such as webpack, provide a means to run a transpiler automatically on every code change, so it's very easy to integrate into the development process. ## Polyfills New language features may include not only syntax constructs and operators, but also built-in functions. For example, Math.trunc(n) is a function that "cuts off" the decimal part of a number, e.g Math.trunc(1.23) returns 1. In some (very outdated) JavaScript engines, there's no Math.trunc, so such code will fail. As we're talking about new functions, not syntax changes, there's no need to transpile anything here. We just need to declare the missing function. A script that updates/adds new functions is called "polyfill". It "fills in" the gap and adds missing implementations. For this particular case, the polyfill for Math.trunc is a script that implements it, like this: JavaScript is a highly dynamic language. Scripts may add/modify any function, even built-in ones. One interesting polyfill library is core-js, which supports a wide range of features and allows you to include only the ones you need. ## Summary In this chapter we'd like to motivate you to study modern and even "bleeding-edge" language features, even if they aren't yet well-supported by JavaScript engines. Just don't forget to use a transpiler (if using modern syntax or operators) and polyfills (to add functions that may be missing). They'll ensure that the code works. For example, later when you're familiar with JavaScript, you can setup a code build system based on webpack with the babel-loader plugin. Good resources that show the current state of support for various features: - <https://compat-table.github.io/compat-table/es6/> - for pure JavaScript. - <https://caniuse.com/> - for browser-related functions. P.S. Google Chrome is usually the most up-to-date with language features, try it if a tutorial demo fails. Most tutorial demos work with any modern browser though.

web,development

Objects

As we know from the chapter <info:types>, there are eight data types in JavaScript. Seven of them are called "primitive", because their values contain only a single thing (be it a string or a number or whatever). In contrast, objects are used to store keyed collections of various data and more complex entities. In JavaScript, objects penetrate almost every aspect of the language. So we must understand them first before going in-depth anywhere else. An object can be created with curly braces {…} with an optional list of properties. A property is a "key: value" pair, where key is a string (also called a "property name"), and value can be anything. We can imagine an object as a cabinet with signed files. Every piece of data is stored in its file by the key. It's easy to find a file by its name or add/remove a file. An empty object ("empty cabinet") can be created using one of two syntaxes: Usually, the curly braces {...} are used. That declaration is called an object literal. ## Literals and properties We can immediately put some properties into {...} as "key: value" pairs: A property has a key (also known as "name" or "identifier") before the colon ":" and a value to the right of it. In the user object, there are two properties: 1. The first property has the name "name" and the value "John". 2. The second one has the name "age" and the value 30. The resulting user object can be imagined as a cabinet with two signed files labeled "name" and "age". We can add, remove and read files from it at any time. Property values are accessible using the dot notation: The value can be of any type. Let's add a boolean one: To remove a property, we can use the delete operator: We can also use multiword property names, but then they must be quoted: The last property in the list may end with a comma: That is called a "trailing" or "hanging" comma. Makes it easier to add/remove/move around properties, because all lines become alike. ## Square brackets For multiword properties, the dot access doesn't work: JavaScript doesn't understand that. It thinks that we address user.likes, and then gives a syntax error when comes across unexpected birds. The dot requires the key to be a valid variable identifier. That implies: contains no spaces, doesn't start with a digit and doesn't include special characters ($ and _ are allowed). There's an alternative "square bracket notation" that works with any string: Now everything is fine. Please note that the string inside the brackets is properly quoted (any type of quotes will do). Square brackets also provide a way to obtain the property name as the result of any expression -- as opposed to a literal string -- like from a variable as follows: Here, the variable key may be calculated at run-time or depend on the user input. And then we use it to access the property. That gives us a great deal of flexibility. For instance: The dot notation cannot be used in a similar way: ### Computed properties We can use square brackets in an object literal, when creating an object. That's called computed properties. For instance: The meaning of a computed property is simple: [fruit] means that the property name should be taken from fruit. So, if a visitor enters "apple", bag will become {apple: 5}. Essentially, that works the same as: ...But looks nicer. We can use more complex expressions inside square brackets: Square brackets are much more powerful than dot notation. They allow any property names and variables. But they are also more cumbersome to write. So most of the time, when property names are known and simple, the dot is used. And if we need something more complex, then we switch to square brackets. ## Property value shorthand In real code, we often use existing variables as values for property names. For instance: In the example above, properties have the same names as variables. The use-case of making a property from a variable is so common, that there's a special property value shorthand to make it shorter. Instead of name:name we can just write name, like this: We can use both normal properties and shorthands in the same object: ## Property names limitations As we already know, a variable cannot have a name equal to one of the language-reserved words like "for", "let", "return" etc. But for an object property, there's no such restriction: In short, there are no limitations on property names. They can be any strings or symbols (a special type for identifiers, to be covered later). Other types are automatically converted to strings. For instance, a number 0 becomes a string "0" when used as a property key: There's a minor gotcha with a special property named __proto__. We can't set it to a non-object value: As we see from the code, the assignment to a primitive 5 is ignored. We'll cover the special nature of __proto__ in subsequent chapters, and suggest the ways to fix such behavior. ## Property existence test, "in" operator A notable feature of objects in JavaScript, compared to many other languages, is that it's possible to access any property. There will be no error if the property doesn't exist! Reading a non-existing property just returns undefined. So we can easily test whether the property exists: There's also a special operator "in" for that. The syntax is: For instance: Please note that on the left side of in there must be a property name. That's usually a quoted string. If we omit quotes, that means a variable should contain the actual name to be tested. For instance: Why does the in operator exist? Isn't it enough to compare against undefined? Well, most of the time the comparison with undefined works fine. But there's a special case when it fails, but "in" works correctly. It's when an object property exists, but stores undefined: In the code above, the property obj.test technically exists. So the in operator works right. Situations like this happen very rarely, because undefined should not be explicitly assigned. We mostly use null for "unknown" or "empty" values. So the in operator is an exotic guest in the code. ## The "for..in" loop [#forin] To walk over all keys of an object, there exists a special form of the loop: for..in. This is a completely different thing from the for(;;) construct that we studied before. The syntax: For instance, let's output all properties of user: Note that all "for" constructs allow us to declare the looping variable inside the loop, like let key here. Also, we could use another variable name here instead of key. For instance, "for (let prop in obj)" is also widely used. ### Ordered like an object Are objects ordered? In other words, if we loop over an object, do we get all properties in the same order they were added? Can we rely on this? The short answer is: "ordered in a special fashion": integer properties are sorted, others appear in creation order. The details follow. As an example, let's consider an object with the phone codes: The object may be used to suggest a list of options to the user. If we're making a site mainly for a German audience then we probably want 49 to be the first. But if we run the code, we see a totally different picture: - USA (1) goes first - then Switzerland (41) and so on. The phone codes go in the ascending sorted order, because they are integers. So we see 1, 41, 44, 49. // Number(...) explicitly converts to a number // Math.trunc is a built-in function that removes the decimal part alert( String(Math.trunc(Number("49"))) ); // "49", same, integer property alert( String(Math.trunc(Number("+49"))) ); // "49", not same "+49" ⇒ not integer property alert( String(Math.trunc(Number("1.2"))) ); // "1", not same "1.2" ⇒ not integer property ...On the other hand, if the keys are non-integer, then they are listed in the creation order, for instance: So, to fix the issue with the phone codes, we can "cheat" by making the codes non-integer. Adding a plus "+" sign before each code is enough. Like this: Now it works as intended. ## Summary Objects are associative arrays with several special features. They store properties (key-value pairs), where: - Property keys must be strings or symbols (usually strings). - Values can be of any type. To access a property, we can use: - The dot notation: obj.property. - Square brackets notation obj["property"]. Square brackets allow taking the key from a variable, like obj[varWithKey]. Additional operators: - To delete a property: delete obj.prop. - To check if a property with the given key exists: "key" in obj. - To iterate over an object: for (let key in obj) loop. What we've studied in this chapter is called a "plain object", or just Object. There are many other kinds of objects in JavaScript: - Array to store ordered data collections, - Date to store the information about the date and time, - Error to store the information about an error. - ...And so on. They have their special features that we'll study later. Sometimes people say something like "Array type" or "Date type", but formally they are not types of their own, but belong to a single "object" data type. And they extend it in various ways. Objects in JavaScript are very powerful. Here we've just scratched the surface of a topic that is really huge. We'll be closely working with objects and learning more about them in further parts of the tutorial.

object

Object references and copying

One of the fundamental differences of objects versus primitives is that objects are stored and copied "by reference", whereas primitive values: strings, numbers, booleans, etc -- are always copied "as a whole value". That's easy to understand if we look a bit under the hood of what happens when we copy a value. Let's start with a primitive, such as a string. Here we put a copy of message into phrase: As a result we have two independent variables, each one storing the string "Hello!". Quite an obvious result, right? Objects are not like that. A variable assigned to an object stores not the object itself, but its "address in memory" -- in other words "a reference" to it. Let's look at an example of such a variable: And here's how it's actually stored in memory: The object is stored somewhere in memory (at the right of the picture), while the user variable (at the left) has a "reference" to it. We may think of an object variable, such as user, like a sheet of paper with the address of the object on it. When we perform actions with the object, e.g. take a property user.name, the JavaScript engine looks at what's at that address and performs the operation on the actual object. Now here's why it's important. When an object variable is copied, the reference is copied, but the object itself is not duplicated. For instance: Now we have two variables, each storing a reference to the same object: As you can see, there's still one object, but now with two variables that reference it. We can use either variable to access the object and modify its contents: It's as if we had a cabinet with two keys and used one of them (admin) to get into it and make changes. Then, if we later use another key (user), we are still opening the same cabinet and can access the changed contents. ## Comparison by reference Two objects are equal only if they are the same object. For instance, here a and b reference the same object, thus they are equal: And here two independent objects are not equal, even though they look alike (both are empty): For comparisons like obj1 > obj2 or for a comparison against a primitive obj == 5, objects are converted to primitives. We'll study how object conversions work very soon, but to tell the truth, such comparisons are needed very rarely -- usually they appear as a result of a programming mistake. const user = { name: "John" user.name = "Pete"; // (*) alert(user.name); // Pete ## Cloning and merging, Object.assign [#cloning-and-merging-object-assign] So, copying an object variable creates one more reference to the same object. But what if we need to duplicate an object? We can create a new object and replicate the structure of the existing one, by iterating over its properties and copying them on the primitive level. Like this: We can also use the method Object.assign. The syntax is: - The first argument dest is a target object. - Further arguments is a list of source objects. It copies the properties of all source objects into the target dest, and then returns it as the result. For example, we have user object, let's add a couple of permissions to it: If the copied property name already exists, it gets overwritten: We also can use Object.assign to perform a simple object cloning: Here it copies all properties of user into the empty object and returns it. There are also other methods of cloning an object, e.g. using the spread syntax clone = {...user}, covered later in the tutorial. ## Nested cloning Until now we assumed that all properties of user are primitive. But properties can be references to other objects. Like this: Now it's not enough to copy clone.sizes = user.sizes, because user.sizes is an object, and will be copied by reference, so clone and user will share the same sizes: To fix that and make user and clone truly separate objects, we should use a cloning loop that examines each value of user[key] and, if it's an object, then replicate its structure as well. That is called a "deep cloning" or "structured cloning". There's structuredClone method that implements deep cloning. ### structuredClone The call structuredClone(object) clones the object with all nested properties. Here's how we can use it in our example: The structuredClone method can clone most data types, such as objects, arrays, primitive values. It also supports circular references, when an object property references the object itself (directly or via a chain or references). For instance: As you can see, clone.me references the clone, not the user! So the circular reference was cloned correctly as well. Although, there are cases when structuredClone fails. For instance, when an object has a function property: Function properties aren't supported. To handle such complex cases we may need to use a combination of cloning methods, write custom code or, to not reinvent the wheel, take an existing implementation, for instance _.cloneDeep(obj) from the JavaScript library lodash. ## Summary Objects are assigned and copied by reference. In other words, a variable stores not the "object value", but a "reference" (address in memory) for the value. So copying such a variable or passing it as a function argument copies that reference, not the object itself. All operations via copied references (like adding/removing properties) are performed on the same single object. To make a "real copy" (a clone) we can use Object.assign for the so-called "shallow copy" (nested objects are copied by reference) or a "deep cloning" function structuredClone or use a custom cloning implementation, such as _.cloneDeep(obj).

object

Garbage collection

Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions... All that takes memory. What happens when something is not needed any more? How does the JavaScript engine discover it and clean it up? ## Reachability The main concept of memory management in JavaScript is reachability. Simply put, "reachable" values are those that are accessible or usable somehow. They are guaranteed to be stored in memory. 1. There's a base set of inherently reachable values, that cannot be deleted for obvious reasons. For instance: - The currently executing function, its local variables and parameters. - Other functions on the current chain of nested calls, their local variables and parameters. - Global variables. - (there are some other, internal ones as well) These values are called roots. 2. Any other value is considered reachable if it's reachable from a root by a reference or by a chain of references. For instance, if there's an object in a global variable, and that object has a property referencing another object, that object is considered reachable. And those that it references are also reachable. Detailed examples to follow. There's a background process in the JavaScript engine that is called garbage collector). It monitors all objects and removes those that have become unreachable. ## A simple example Here's the simplest example: Here the arrow depicts an object reference. The global variable "user" references the object {name: "John"} (we'll call it John for brevity). The "name" property of John stores a primitive, so it's painted inside the object. If the value of user is overwritten, the reference is lost: Now John becomes unreachable. There's no way to access it, no references to it. Garbage collector will junk the data and free the memory. ## Two references Now let's imagine we copied the reference from user to admin: Now if we do the same: ...Then the object is still reachable via admin global variable, so it must stay in memory. If we overwrite admin too, then it can be removed. ## Interlinked objects Now a more complex example. The family: Function marry "marries" two objects by giving them references to each other and returns a new object that contains them both. The resulting memory structure: As of now, all objects are reachable. Now let's remove two references: It's not enough to delete only one of these two references, because all objects would still be reachable. But if we delete both, then we can see that John has no incoming reference any more: Outgoing references do not matter. Only incoming ones can make an object reachable. So, John is now unreachable and will be removed from the memory with all its data that also became unaccessible. After garbage collection: ## Unreachable island It is possible that the whole island of interlinked objects becomes unreachable and is removed from the memory. The source object is the same as above. Then: The in-memory picture becomes: This example demonstrates how important the concept of reachability is. It's obvious that John and Ann are still linked, both have incoming references. But that's not enough. The former "family" object has been unlinked from the root, there's no reference to it any more, so the whole island becomes unreachable and will be removed. ## Internal algorithms The basic garbage collection algorithm is called "mark-and-sweep". The following "garbage collection" steps are regularly performed: - The garbage collector takes roots and "marks" (remembers) them. - Then it visits and "marks" all references from them. - Then it visits marked objects and marks their references. All visited objects are remembered, so as not to visit the same object twice in the future. - ...And so on until every reachable (from the roots) references are visited. - All objects except marked ones are removed. For instance, let our object structure look like this: We can clearly see an "unreachable island" to the right side. Now let's see how "mark-and-sweep" garbage collector deals with it. The first step marks the roots: Then we follow their references and mark referenced objects: ...And continue to follow further references, while possible: Now the objects that could not be visited in the process are considered unreachable and will be removed: We can also imagine the process as spilling a huge bucket of paint from the roots, that flows through all references and marks all reachable objects. The unmarked ones are then removed. That's the concept of how garbage collection works. JavaScript engines apply many optimizations to make it run faster and not introduce any delays into the code execution. Some of the optimizations: - Generational collection -- objects are split into two sets: "new ones" and "old ones". In typical code, many objects have a short life span: they appear, do their job and die fast, so it makes sense to track new objects and clear the memory from them if that's the case. Those that survive for long enough, become "old" and are examined less often. - Incremental collection -- if there are many objects, and we try to walk and mark the whole object set at once, it may take some time and introduce visible delays in the execution. So the engine splits the whole set of existing objects into multiple parts. And then clear these parts one after another. There are many small garbage collections instead of a total one. That requires some extra bookkeeping between them to track changes, but we get many tiny delays instead of a big one. - Idle-time collection -- the garbage collector tries to run only while the CPU is idle, to reduce the possible effect on the execution. There exist other optimizations and flavours of garbage collection algorithms. As much as I'd like to describe them here, I have to hold off, because different engines implement different tweaks and techniques. And, what's even more important, things change as engines develop, so studying deeper "in advance", without a real need is probably not worth that. Unless, of course, it is a matter of pure interest, then there will be some links for you below. ## Summary The main things to know: - Garbage collection is performed automatically. We cannot force or prevent it. - Objects are retained in memory while they are reachable. - Being referenced is not the same as being reachable (from a root): a pack of interlinked objects can become unreachable as a whole, as we've seen in the example above. Modern engines implement advanced algorithms of garbage collection. A general book "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) covers some of them. If you are familiar with low-level programming, more detailed information about V8's garbage collector is in the article A tour of V8: Garbage Collection. The V8 blog also publishes articles about changes in memory management from time to time. Naturally, to learn more about garbage collection, you'd better prepare by learning about V8 internals in general and read the blog of Vyacheslav Egorov who worked as one of the V8 engineers. I'm saying: "V8", because it is best covered by articles on the internet. For other engines, many approaches are similar, but garbage collection differs in many aspects. In-depth knowledge of engines is good when you need low-level optimizations. It would be wise to plan that as the next step after you're familiar with the language.

web,development

Object methods, "this"

Objects are usually created to represent entities of the real world, like users, orders and so on: And, in the real world, a user can act: select something from the shopping cart, login, logout etc. Actions are represented in JavaScript by functions in properties. ## Method examples For a start, let's teach the user to say hello: Here we've just used a Function Expression to create a function and assign it to the property user.sayHi of the object. Then we can call it as user.sayHi(). The user can now speak! A function that is a property of an object is called its method. So, here we've got a method sayHi of the object user. Of course, we could use a pre-declared function as a method, like this: ### Method shorthand There exists a shorter syntax for methods in an object literal: As demonstrated, we can omit "function" and just write sayHi(). To tell the truth, the notations are not fully identical. There are subtle differences related to object inheritance (to be covered later), but for now they do not matter. In almost all cases, the shorter syntax is preferred. ## "this" in methods It's common that an object method needs to access the information stored in the object to do its job. For instance, the code inside user.sayHi() may need the name of the user. To access the object, a method can use the this keyword. The value of this is the object "before dot", the one used to call the method. For instance: Here during the execution of user.sayHi(), the value of this will be user. Technically, it's also possible to access the object without this, by referencing it via the outer variable: ...But such code is unreliable. If we decide to copy user to another variable, e.g. admin = user and overwrite user with something else, then it will access the wrong object. That's demonstrated below: If we used this.name instead of user.name inside the alert, then the code would work. ## "this" is not bound In JavaScript, keyword this behaves unlike most other programming languages. It can be used in any function, even if it's not a method of an object. There's no syntax error in the following example: The value of this is evaluated during the run-time, depending on the context. For instance, here the same function is assigned to two different objects and has different "this" in the calls: The rule is simple: if obj.f() is called, then this is obj during the call of f. So it's either user or admin in the example above. function sayHi() { alert(this); sayHi(); // undefined ## Arrow functions have no "this" Arrow functions are special: they don't have their "own" this. If we reference this from such a function, it's taken from the outer "normal" function. For instance, here arrow() uses this from the outer user.sayHi() method: That's a special feature of arrow functions, it's useful when we actually do not want to have a separate this, but rather to take it from the outer context. Later in the chapter <info:arrow-functions> we'll go more deeply into arrow functions. ## Summary - Functions that are stored in object properties are called "methods". - Methods allow objects to "act" like object.doSomething(). - Methods can reference the object as this. The value of this is defined at run-time. - When a function is declared, it may use this, but that this has no value until the function is called. - A function can be copied between objects. - When a function is called in the "method" syntax: object.method(), the value of this during the call is object. Please note that arrow functions are special: they have no this. When this is accessed inside an arrow function, it is taken from outside.

object

Constructor, operator "new"

The regular {...} syntax allows us to create one object. But often we need to create many similar objects, like multiple users or menu items and so on. That can be done using constructor functions and the "new" operator. ## Constructor function Constructor functions technically are regular functions. There are two conventions though: 1. They are named with capital letter first. 2. They should be executed only with "new" operator. For instance: When a function is executed with new, it does the following steps: 1. A new empty object is created and assigned to this. 2. The function body executes. Usually it modifies this, adds new properties to it. 3. The value of this is returned. In other words, new User(...) does something like: So let user = new User("Jack") gives the same result as: Now if we want to create other users, we can call new User("Ann"), new User("Alice") and so on. Much shorter than using literals every time, and also easy to read. That's the main purpose of constructors -- to implement reusable object creation code. Let's note once again -- technically, any function (except arrow functions, as they don't have this) can be used as a constructor. It can be run with new, and it will execute the algorithm above. The "capital letter first" is a common agreement, to make it clear that a function is to be run with new. // create a function and immediately call it with new let user = new function() { this.name = "John"; this.isAdmin = false; // ...other code for user creation // maybe complex logic and statements // local variables etc ## Constructor mode test: new.target Inside a function, we can check whether it was called with new or without it, using a special new.target property. It is undefined for regular calls and equals the function if called with new: That can be used inside the function to know whether it was called with new, "in constructor mode", or without it, "in regular mode". We can also make both new and regular calls to do the same, like this: This approach is sometimes used in libraries to make the syntax more flexible. So that people may call the function with or without new, and it still works. Probably not a good thing to use everywhere though, because omitting new makes it a bit less obvious what's going on. With new we all know that the new object is being created. ## Return from constructors Usually, constructors do not have a return statement. Their task is to write all necessary stuff into this, and it automatically becomes the result. But if there is a return statement, then the rule is simple: - If return is called with an object, then the object is returned instead of this. - If return is called with a primitive, it's ignored. In other words, return with an object returns that object, in all other cases this is returned. For instance, here return overrides this by returning an object: And here's an example with an empty return (or we could place a primitive after it, doesn't matter): Usually constructors don't have a return statement. Here we mention the special behavior with returning objects mainly for the sake of completeness. let user = new User; // <-- no parentheses // same as let user = new User(); ## Methods in constructor Using constructor functions to create objects gives a great deal of flexibility. The constructor function may have parameters that define how to construct the object, and what to put in it. Of course, we can add to this not only properties, but methods as well. For instance, new User(name) below creates an object with the given name and the method sayHi: To create complex objects, there's a more advanced syntax, classes, that we'll cover later. ## Summary - Constructor functions or, briefly, constructors, are regular functions, but there's a common agreement to name them with capital letter first. - Constructor functions should only be called using new. Such a call implies a creation of empty this at the start and returning the populated one at the end. We can use constructor functions to make multiple similar objects. JavaScript provides constructor functions for many built-in language objects: like Date for dates, Set for sets and others that we plan to study.

web,development

Optional chaining '?.'

[recent browser="new"] The optional chaining ?. is a safe way to access nested object properties, even if an intermediate property doesn't exist. ## The "non-existing property" problem If you've just started to read the tutorial and learn JavaScript, maybe the problem hasn't touched you yet, but it's quite common. As an example, let's say we have user objects that hold the information about our users. Most of our users have addresses in user.address property, with the street user.address.street, but some did not provide them. In such case, when we attempt to get user.address.street, and the user happens to be without an address, we get an error: That's the expected result. JavaScript works like this. As user.address is undefined, an attempt to get user.address.street fails with an error. In many practical cases we'd prefer to get undefined instead of an error here (meaning "no street"). ...and another example. In Web development, we can get an object that corresponds to a web page element using a special method call, such as document.querySelector('.elem'), and it returns null when there's no such element. Once again, if the element doesn't exist, we'll get an error accessing .innerHTML property of null. And in some cases, when the absence of the element is normal, we'd like to avoid the error and just accept html = null as the result. How can we do this? The obvious solution would be to check the value using if or the conditional operator ?, before accessing its property, like this: It works, there's no error... But it's quite inelegant. As you can see, the "user.address" appears twice in the code. Here's how the same would look for document.querySelector: We can see that the element search document.querySelector('.elem') is actually called twice here. Not good. For more deeply nested properties, it becomes even uglier, as more repetitions are required. E.g. let's get user.address.street.name in a similar fashion. That's just awful, one may even have problems understanding such code. There's a little better way to write it, using the && operator: AND'ing the whole path to the property ensures that all components exist (if not, the evaluation stops), but also isn't ideal. As you can see, property names are still duplicated in the code. E.g. in the code above, user.address appears three times. That's why the optional chaining ?. was added to the language. To solve this problem once and for all! ## Optional chaining The optional chaining ?. stops the evaluation if the value before ?. is undefined or null and returns undefined. Further in this article, for brevity, we'll be saying that something "exists" if it's not null and not undefined. In other words, value?.prop: - works as value.prop, if value exists, - otherwise (when value is undefined/null) it returns undefined. Here's the safe way to access user.address.street using ?.: The code is short and clean, there's no duplication at all. Here's an example with document.querySelector: Reading the address with user?.address works even if user object doesn't exist: Please note: the ?. syntax makes optional the value before it, but not any further. E.g. in user?.address.street.name the ?. allows user to safely be null/undefined (and returns undefined in that case), but that's only for user. Further properties are accessed in a regular way. If we want some of them to be optional, then we'll need to replace more . with ?.. // ReferenceError: user is not defined user?.address; ## Short-circuiting As it was said before, the ?. immediately stops ("short-circuits") the evaluation if the left part doesn't exist. So, if there are any further function calls or operations to the right of ?., they won't be made. For instance: ## Other variants: ?.(), ?.[] The optional chaining ?. is not an operator, but a special syntax construct, that also works with functions and square brackets. For example, ?.() is used to call a function that may not exist. In the code below, some of our users have admin method, and some don't: Here, in both lines we first use the dot (userAdmin.admin) to get admin property, because we assume that the user object exists, so it's safe read from it. Then ?.() checks the left part: if the admin function exists, then it runs (that's so for userAdmin). Otherwise (for userGuest) the evaluation stops without errors. The ?.[] syntax also works, if we'd like to use brackets [] to access properties instead of dot .. Similar to previous cases, it allows to safely read a property from an object that may not exist. Also we can use ?. with delete: let user = null; user?.name = "John"; // Error, doesn't work // because it evaluates to: undefined = "John" ## Summary The optional chaining ?. syntax has three forms: 1. obj?.prop -- returns obj.prop if obj exists, otherwise undefined. 2. obj?.[prop] -- returns obj[prop] if obj exists, otherwise undefined. 3. obj.method?.() -- calls obj.method() if obj.method exists, otherwise returns undefined. As we can see, all of them are straightforward and simple to use. The ?. checks the left part for null/undefined and allows the evaluation to proceed if it's not so. A chain of ?. allows to safely access nested properties. Still, we should apply ?. carefully, only where it's acceptable, according to our code logic, that the left part doesn't exist. So that it won't hide programming errors from us, if they occur.

web,development

Symbol type

By specification, only two primitive types may serve as object property keys: - string type, or - symbol type. Otherwise, if one uses another type, such as number, it's autoconverted to string. So that obj[1] is the same as obj["1"], and obj[true] is the same as obj["true"]. Until now we've been using only strings. Now let's explore symbols, see what they can do for us. ## Symbols A "symbol" represents a unique identifier. A value of this type can be created using Symbol(): Upon creation, we can give symbols a description (also called a symbol name), mostly useful for debugging purposes: Symbols are guaranteed to be unique. Even if we create many symbols with exactly the same description, they are different values. The description is just a label that doesn't affect anything. For instance, here are two symbols with the same description -- they are not equal: If you are familiar with Ruby or another language that also has some sort of "symbols" -- please don't be misguided. JavaScript symbols are different. So, to summarize, a symbol is a "primitive unique value" with an optional description. Let's see where we can use them. let id = Symbol("id"); alert(id); // TypeError: Cannot convert a Symbol value to a string let id = Symbol("id"); alert(id.toString()); // Symbol(id), now it works let id = Symbol("id"); alert(id.description); // id ## "Hidden" properties Symbols allow us to create "hidden" properties of an object, that no other part of code can accidentally access or overwrite. For instance, if we're working with user objects, that belong to a third-party code. We'd like to add identifiers to them. Let's use a symbol key for it: What's the benefit of using Symbol("id") over a string "id"? As user objects belong to another codebase, it's unsafe to add fields to them, since we might affect pre-defined behavior in that other codebase. However, symbols cannot be accessed accidentally. The third-party code won't be aware of newly defined symbols, so it's safe to add symbols to the user objects. Also, imagine that another script wants to have its own identifier inside user, for its own purposes. Then that script can create its own Symbol("id"), like this: There will be no conflict between our and their identifiers, because symbols are always different, even if they have the same name. ...But if we used a string "id" instead of a symbol for the same purpose, then there would be a conflict: ### Symbols in an object literal If we want to use a symbol in an object literal {...}, we need square brackets around it. Like this: That's because we need the value from the variable id as the key, not the string "id". ### Symbols are skipped by for..in Symbolic properties do not participate in for..in loop. For instance: Object.keys(user) also ignores them. That's a part of the general "hiding symbolic properties" principle. If another script or a library loops over our object, it won't unexpectedly access a symbolic property. In contrast, Object.assign copies both string and symbol properties: There's no paradox here. That's by design. The idea is that when we clone an object or merge objects, we usually want all properties to be copied (including symbols like id). ## Global symbols As we've seen, usually all symbols are different, even if they have the same name. But sometimes we want same-named symbols to be same entities. For instance, different parts of our application want to access symbol "id" meaning exactly the same property. To achieve that, there exists a global symbol registry. We can create symbols in it and access them later, and it guarantees that repeated accesses by the same name return exactly the same symbol. In order to read (create if absent) a symbol from the registry, use Symbol.for(key). That call checks the global registry, and if there's a symbol described as key, then returns it, otherwise creates a new symbol Symbol(key) and stores it in the registry by the given key. For instance: Symbols inside the registry are called global symbols. If we want an application-wide symbol, accessible everywhere in the code -- that's what they are for. ### Symbol.keyFor We have seen that for global symbols, Symbol.for(key) returns a symbol by name. To do the opposite -- return a name by global symbol -- we can use: Symbol.keyFor(sym): For instance: The Symbol.keyFor internally uses the global symbol registry to look up the key for the symbol. So it doesn't work for non-global symbols. If the symbol is not global, it won't be able to find it and returns undefined. That said, all symbols have the description property. For instance: ## System symbols There exist many "system" symbols that JavaScript uses internally, and we can use them to fine-tune various aspects of our objects. They are listed in the specification in the Well-known symbols table: - Symbol.hasInstance - Symbol.isConcatSpreadable - Symbol.iterator - Symbol.toPrimitive - ...and so on. For instance, Symbol.toPrimitive allows us to describe object to primitive conversion. We'll see its use very soon. Other symbols will also become familiar when we study the corresponding language features. ## Summary Symbol is a primitive type for unique identifiers. Symbols are created with Symbol() call with an optional description (name). Symbols are always different values, even if they have the same name. If we want same-named symbols to be equal, then we should use the global registry: Symbol.for(key) returns (creates if needed) a global symbol with key as the name. Multiple calls of Symbol.for with the same key return exactly the same symbol. Symbols have two main use cases: 1. "Hidden" object properties. If we want to add a property into an object that "belongs" to another script or a library, we can create a symbol and use it as a property key. A symbolic property does not appear in for..in, so it won't be accidentally processed together with other properties. Also it won't be accessed directly, because another script does not have our symbol. So the property will be protected from accidental use or overwrite. So we can "covertly" hide something into objects that we need, but others should not see, using symbolic properties. 2. There are many system symbols used by JavaScript which are accessible as Symbol.*. We can use them to alter some built-in behaviors. For instance, later in the tutorial we'll use Symbol.iterator for iterables, Symbol.toPrimitive to setup object-to-primitive conversion and so on. Technically, symbols are not 100% hidden. There is a built-in method Object.getOwnPropertySymbols(obj) that allows us to get all symbols. Also there is a method named Reflect.ownKeys(obj) that returns all keys of an object including symbolic ones. But most libraries, built-in functions and syntax constructs don't use these methods.

web,development

Object to primitive conversion

What happens when objects are added obj1 + obj2, subtracted obj1 - obj2 or printed using alert(obj)? JavaScript doesn't allow you to customize how operators work on objects. Unlike some other programming languages, such as Ruby or C++, we can't implement a special object method to handle addition (or other operators). In case of such operations, objects are auto-converted to primitives, and then the operation is carried out over these primitives and results in a primitive value. That's an important limitation: the result of obj1 + obj2 (or another math operation) can't be another object! E.g. we can't make objects representing vectors or matrices (or achievements or whatever), add them and expect a "summed" object as the result. Such architectural feats are automatically "off the board". So, because we can't technically do much here, there's no maths with objects in real projects. When it happens, with rare exceptions, it's because of a coding mistake. In this chapter we'll cover how an object converts to primitive and how to customize it. We have two purposes: 1. It will allow us to understand what's going on in case of coding mistakes, when such an operation happened accidentally. 2. There are exceptions, where such operations are possible and look good. E.g. subtracting or comparing dates (Date objects). We'll come across them later. ## Conversion rules In the chapter <info:type-conversions> we've seen the rules for numeric, string and boolean conversions of primitives. But we left a gap for objects. Now, as we know about methods and symbols it becomes possible to fill it. 1. There's no conversion to boolean. All objects are true in a boolean context, as simple as that. There exist only numeric and string conversions. 2. The numeric conversion happens when we subtract objects or apply mathematical functions. For instance, Date objects (to be covered in the chapter <info:date>) can be subtracted, and the result of date1 - date2 is the time difference between two dates. 3. As for the string conversion -- it usually happens when we output an object with alert(obj) and in similar contexts. We can implement string and numeric conversion by ourselves, using special object methods. Now let's get into technical details, because it's the only way to cover the topic in-depth. ## Hints How does JavaScript decide which conversion to apply? There are three variants of type conversion, that happen in various situations. They're called "hints", as described in the specification: "string" : For an object-to-string conversion, when we're doing an operation on an object that expects a string, like alert: ```js // output alert(obj); // using object as a property key anotherObj[obj] = 123; ``` "number" : For an object-to-number conversion, like when we're doing maths: ```js // explicit conversion let num = Number(obj); // maths (except binary plus) let n = +obj; // unary plus let delta = date1 - date2; // less/greater comparison let greater = user1 > user2; ``` Most built-in mathematical functions also include such conversion. "default" : Occurs in rare cases when the operator is "not sure" what type to expect. For instance, binary plus + can work both with strings (concatenates them) and numbers (adds them). So if a binary plus gets an object as an argument, it uses the "default" hint to convert it. Also, if an object is compared using == with a string, number or a symbol, it's also unclear which conversion should be done, so the "default" hint is used. ```js // binary plus uses the "default" hint let total = obj1 + obj2; // obj == number uses the "default" hint if (user == 1) { ... }; ``` The greater and less comparison operators, such as < >, can work with both strings and numbers too. Still, they use the "number" hint, not "default". That's for historical reasons. In practice though, things are a bit simpler. All built-in objects except for one case (Date object, we'll learn it later) implement "default" conversion the same way as "number". And we probably should do the same. Still, it's important to know about all 3 hints, soon we'll see why. To do the conversion, JavaScript tries to find and call three object methods: 1. Call objSymbol.toPrimitive - the method with the symbolic key Symbol.toPrimitive (system symbol), if such method exists, 2. Otherwise if hint is "string" - try calling obj.toString() or obj.valueOf(), whatever exists. 3. Otherwise if hint is "number" or "default" - try calling obj.valueOf() or obj.toString(), whatever exists. ## Symbol.toPrimitive Let's start from the first method. There's a built-in symbol named Symbol.toPrimitive that should be used to name the conversion method, like this: If the method Symbol.toPrimitive exists, it's used for all hints, and no more methods are needed. For instance, here user object implements it: As we can see from the code, user becomes a self-descriptive string or a money amount, depending on the conversion. The single method user[Symbol.toPrimitive] handles all conversion cases. ## toString/valueOf If there's no Symbol.toPrimitive then JavaScript tries to find methods toString and valueOf: - For the "string" hint: call toString method, and if it doesn't exist or if it returns an object instead of a primitive value, then call valueOf (so toString has the priority for string conversions). - For other hints: call valueOf, and if it doesn't exist or if it returns an object instead of a primitive value, then call toString (so valueOf has the priority for maths). Methods toString and valueOf come from ancient times. They are not symbols (symbols did not exist that long ago), but rather "regular" string-named methods. They provide an alternative "old-style" way to implement the conversion. These methods must return a primitive value. If toString or valueOf returns an object, then it's ignored (same as if there were no method). By default, a plain object has following toString and valueOf methods: - The toString method returns a string "[object Object]". - The valueOf method returns the object itself. Here's the demo: So if we try to use an object as a string, like in an alert or so, then by default we see [object Object]. The default valueOf is mentioned here only for the sake of completeness, to avoid any confusion. As you can see, it returns the object itself, and so is ignored. Don't ask me why, that's for historical reasons. So we can assume it doesn't exist. Let's implement these methods to customize the conversion. For instance, here user does the same as above using a combination of toString and valueOf instead of Symbol.toPrimitive: As we can see, the behavior is the same as the previous example with Symbol.toPrimitive. Often we want a single "catch-all" place to handle all primitive conversions. In this case, we can implement toString only, like this: In the absence of Symbol.toPrimitive and valueOf, toString will handle all primitive conversions. ### A conversion can return any primitive type The important thing to know about all primitive-conversion methods is that they do not necessarily return the "hinted" primitive. There is no control whether toString returns exactly a string, or whether Symbol.toPrimitive method returns a number for the hint "number". The only mandatory thing: these methods must return a primitive, not an object. ## Further conversions As we know already, many operators and functions perform type conversions, e.g. multiplication * converts operands to numbers. If we pass an object as an argument, then there are two stages of calculations: 1. The object is converted to a primitive (using the rules described above). 2. If necessary for further calculations, the resulting primitive is also converted. For instance: 1. The multiplication obj * 2 first converts the object to primitive (that's a string "2"). 2. Then "2" 2 becomes 2 2 (the string is converted to number). Binary plus will concatenate strings in the same situation, as it gladly accepts a string: ## Summary The object-to-primitive conversion is called automatically by many built-in functions and operators that expect a primitive as a value. There are 3 types (hints) of it: - "string" (for alert and other operations that need a string) - "number" (for maths) - "default" (few operators, usually objects implement it the same way as "number") The specification describes explicitly which operator uses which hint. The conversion algorithm is: 1. Call objSymbol.toPrimitive if the method exists, 2. Otherwise if hint is "string" - try calling obj.toString() or obj.valueOf(), whatever exists. 3. Otherwise if hint is "number" or "default" - try calling obj.valueOf() or obj.toString(), whatever exists. All these methods must return a primitive to work (if defined). In practice, it's often enough to implement only obj.toString() as a "catch-all" method for string conversions that should return a "human-readable" representation of an object, for logging or debugging purposes.

object

Methods of primitives

JavaScript allows us to work with primitives (strings, numbers, etc.) as if they were objects. They also provide methods to call as such. We will study those soon, but first we'll see how it works because, of course, primitives are not objects (and here we will make it even clearer). Let's look at the key distinctions between primitives and objects. A primitive - Is a value of a primitive type. - There are 7 primitive types: string, number, bigint, boolean, symbol, null and undefined. An object - Is capable of storing multiple values as properties. - Can be created with {}, for instance: {name: "John", age: 30}. There are other kinds of objects in JavaScript: functions, for example, are objects. One of the best things about objects is that we can store a function as one of its properties. So here we've made an object john with the method sayHi. Many built-in objects already exist, such as those that work with dates, errors, HTML elements, etc. They have different properties and methods. But, these features come with a cost! Objects are "heavier" than primitives. They require additional resources to support the internal machinery. ## A primitive as an object Here's the paradox faced by the creator of JavaScript: - There are many things one would want to do with a primitive, like a string or a number. It would be great to access them using methods. - Primitives must be as fast and lightweight as possible. The solution looks a little bit awkward, but here it is: 1. Primitives are still primitive. A single value, as desired. 2. The language allows access to methods and properties of strings, numbers, booleans and symbols. 3. In order for that to work, a special "object wrapper" that provides the extra functionality is created, and then is destroyed. The "object wrappers" are different for each primitive type and are called: String, Number, Boolean, Symbol and BigInt. Thus, they provide different sets of methods. For instance, there exists a string method str.toUpperCase() that returns a capitalized str. Here's how it works: Simple, right? Here's what actually happens in str.toUpperCase(): 1. The string str is a primitive. So in the moment of accessing its property, a special object is created that knows the value of the string, and has useful methods, like toUpperCase(). 2. That method runs and returns a new string (shown by alert). 3. The special object is destroyed, leaving the primitive str alone. So primitives can provide methods, but they still remain lightweight. The JavaScript engine highly optimizes this process. It may even skip the creation of the extra object at all. But it must still adhere to the specification and behave as if it creates one. A number has methods of its own, for instance, toFixed(n) rounds the number to the given precision: We'll see more specific methods in chapters <info:number> and <info:string>. alert( typeof 0 ); // "number" alert( typeof new Number(0) ); // "object"! let zero = new Number(0); if (zero) { // zero is true, because it's an object alert( "zero is truthy!?!" ); let num = Number("123"); // convert a string to number alert(null.test); // error

web,development

Numbers

In modern JavaScript, there are two types of numbers: 1. Regular numbers in JavaScript are stored in 64-bit format IEEE-754, also known as "double precision floating point numbers". These are numbers that we're using most of the time, and we'll talk about them in this chapter. 2. BigInt numbers represent integers of arbitrary length. They are sometimes needed because a regular integer number can't safely exceed <code>(2<sup>53</sup>-1)</code> or be less than <code>-(2<sup>53</sup>-1)</code>, as we mentioned earlier in the chapter <info:types>. As bigints are used in a few special areas, we devote them to a special chapter <info:bigint>. So here we'll talk about regular numbers. Let's expand our knowledge of them. ## More ways to write a number Imagine we need to write 1 billion. The obvious way is: We also can use underscore _ as the separator: Here the underscore _ plays the role of the "syntactic sugar", it makes the number more readable. The JavaScript engine simply ignores _ between digits, so it's exactly the same one billion as above. In real life though, we try to avoid writing long sequences of zeroes. We're too lazy for that. We'll try to write something like "1bn" for a billion or "7.3bn" for 7 billion 300 million. The same is true for most large numbers. In JavaScript, we can shorten a number by appending the letter "e" to it and specifying the zeroes count: In other words, e multiplies the number by 1 with the given zeroes count. Now let's write something very small. Say, 1 microsecond (one-millionth of a second): Just like before, using "e" can help. If we'd like to avoid writing the zeroes explicitly, we could write the same as: If we count the zeroes in 0.000001, there are 6 of them. So naturally it's 1e-6. In other words, a negative number after "e" means a division by 1 with the given number of zeroes: ### Hex, binary and octal numbers Hexadecimal numbers are widely used in JavaScript to represent colors, encode characters, and for many other things. So naturally, there exists a shorter way to write them: 0x and then the number. For instance: Binary and octal numeral systems are rarely used, but also supported using the 0b and 0o prefixes: There are only 3 numeral systems with such support. For other numeral systems, we should use the function parseInt (which we will see later in this chapter). ## toString(base) The method num.toString(base) returns a string representation of num in the numeral system with the given base. For example: The base can vary from 2 to 36. By default, it's 10. Common use cases for this are: - base=16 is used for hex colors, character encodings etc, digits can be 0..9 or A..F. - base=2 is mostly for debugging bitwise operations, digits can be 0 or 1. - base=36 is the maximum, digits can be 0..9 or A..Z. The whole Latin alphabet is used to represent a number. A funny, but useful case for 36 is when we need to turn a long numeric identifier into something shorter, for example, to make a short url. Can simply represent it in the numeral system with base 36: ```js run alert( 123456..toString(36) ); // 2n9c ``` ## Rounding One of the most used operations when working with numbers is rounding. There are several built-in functions for rounding: Math.floor : Rounds down: 3.1 becomes 3, and -1.1 becomes -2. Math.ceil : Rounds up: 3.1 becomes 4, and -1.1 becomes -1. Math.round : Rounds to the nearest integer: 3.1 becomes 3, 3.6 becomes 4. In the middle cases 3.5 rounds up to 4, and -3.5 rounds up to -3. Math.trunc (not supported by Internet Explorer) : Removes anything after the decimal point without rounding: 3.1 becomes 3, -1.1 becomes -1. Here's the table to summarize the differences between them: These functions cover all of the possible ways to deal with the decimal part of a number. But what if we'd like to round the number to n-th digit after the decimal? For instance, we have 1.2345 and want to round it to 2 digits, getting only 1.23. There are two ways to do so: 1. Multiply-and-divide. For example, to round the number to the 2nd digit after the decimal, we can multiply the number by 100, call the rounding function and then divide it back. ```js run let num = 1.23456; alert( Math.round(num * 100) / 100 ); // 1.23456 -> 123.456 -> 123 -> 1.23 ``` 2. The method toFixed(n) rounds the number to n digits after the point and returns a string representation of the result. ```js run let num = 12.34; alert( num.toFixed(1) ); // "12.3" ``` This rounds up or down to the nearest value, similar to Math.round: ```js run let num = 12.36; alert( num.toFixed(1) ); // "12.4" ``` Please note that the result of toFixed is a string. If the decimal part is shorter than required, zeroes are appended to the end: ```js run let num = 12.34; alert( num.toFixed(5) ); // "12.34000", added zeroes to make exactly 5 digits ``` We can convert it to a number using the unary plus or a Number() call, e.g. write +num.toFixed(5). ## Imprecise calculations Internally, a number is represented in 64-bit format IEEE-754, so there are exactly 64 bits to store a number: 52 of them are used to store the digits, 11 of them store the position of the decimal point, and 1 bit is for the sign. If a number is really huge, it may overflow the 64-bit storage and become a special numeric value Infinity: What may be a little less obvious, but happens quite often, is the loss of precision. Consider this (falsy!) equality test: That's right, if we check whether the sum of 0.1 and 0.2 is 0.3, we get false. Strange! What is it then if not 0.3? Ouch! Imagine you're making an e-shopping site and the visitor puts $0.10 and $0.20 goods into their cart. The order total will be $0.30000000000000004. That would surprise anyone. But why does this happen? A number is stored in memory in its binary form, a sequence of bits - ones and zeroes. But fractions like 0.1, 0.2 that look simple in the decimal numeric system are actually unending fractions in their binary form. What is 0.1? It is one divided by ten 1/10, one-tenth. In the decimal numeral system, such numbers are easily representable. Compare it to one-third: 1/3. It becomes an endless fraction 0.33333(3). So, division by powers 10 is guaranteed to work well in the decimal system, but division by 3 is not. For the same reason, in the binary numeral system, the division by powers of 2 is guaranteed to work, but 1/10 becomes an endless binary fraction. There's just no way to store exactly 0.1 or exactly 0.2 using the binary system, just like there is no way to store one-third as a decimal fraction. The numeric format IEEE-754 solves this by rounding to the nearest possible number. These rounding rules normally don't allow us to see that "tiny precision loss", but it exists. We can see this in action: And when we sum two numbers, their "precision losses" add up. That's why 0.1 + 0.2 is not exactly 0.3. Can we work around the problem? Sure, the most reliable method is to round the result with the help of a method toFixed(n): Please note that toFixed always returns a string. It ensures that it has 2 digits after the decimal point. That's actually convenient if we have an e-shopping and need to show $0.30. For other cases, we can use the unary plus to coerce it into a number: We also can temporarily multiply the numbers by 100 (or a bigger number) to turn them into integers, do the maths, and then divide back. Then, as we're doing maths with integers, the error somewhat decreases, but we still get it on division: So, the multiply/divide approach reduces the error, but doesn't remove it totally. Sometimes we could try to evade fractions at all. Like if we're dealing with a shop, then we can store prices in cents instead of dollars. But what if we apply a discount of 30%? In practice, totally evading fractions is rarely possible. Just round them to cut "tails" when needed. // Hello! I'm a self-increasing number! alert( 9999999999999999 ); // shows 10000000000000000 ## Tests: isFinite and isNaN Remember these two special numeric values? - Infinity (and -Infinity) is a special numeric value that is greater (less) than anything. - NaN represents an error. They belong to the type number, but are not "normal" numbers, so there are special functions to check for them: - isNaN(value) converts its argument to a number and then tests it for being NaN: ```js run alert( isNaN(NaN) ); // true alert( isNaN("str") ); // true ``` But do we need this function? Can't we just use the comparison === NaN? Unfortunately not. The value NaN is unique in that it does not equal anything, including itself: ```js run alert( NaN === NaN ); // false ``` - isFinite(value) converts its argument to a number and returns true if it's a regular number, not NaN/Infinity/-Infinity: ```js run alert( isFinite("15") ); // true alert( isFinite("str") ); // false, because a special value: NaN alert( isFinite(Infinity) ); // false, because a special value: Infinity ``` Sometimes isFinite is used to validate whether a string value is a regular number: Please note that an empty or a space-only string is treated as 0 in all numeric functions including isFinite. ## parseInt and parseFloat Numeric conversion using a plus + or Number() is strict. If a value is not exactly a number, it fails: The sole exception is spaces at the beginning or at the end of the string, as they are ignored. But in real life, we often have values in units, like "100px" or "12pt" in CSS. Also in many countries, the currency symbol goes after the amount, so we have "19€" and would like to extract a numeric value out of that. That's what parseInt and parseFloat are for. They "read" a number from a string until they can't. In case of an error, the gathered number is returned. The function parseInt returns an integer, whilst parseFloat will return a floating-point number: There are situations when parseInt/parseFloat will return NaN. It happens when no digits could be read: alert( parseInt('0xff', 16) ); // 255 alert( parseInt('ff', 16) ); // 255, without 0x also works alert( parseInt('2n9c', 36) ); // 123456 ## Other math functions JavaScript has a built-in Math object which contains a small library of mathematical functions and constants. A few examples: Math.random() : Returns a random number from 0 to 1 (not including 1). ```js run alert( Math.random() ); // 0.1234567894322 alert( Math.random() ); // 0.5435252343232 alert( Math.random() ); // ... (any random numbers) ``` Math.max(a, b, c...) and Math.min(a, b, c...) : Returns the greatest and smallest from the arbitrary number of arguments. ```js run alert( Math.max(3, 5, -10, 0, 1) ); // 5 alert( Math.min(1, 2) ); // 1 ``` Math.pow(n, power) : Returns n raised to the given power. ```js run alert( Math.pow(2, 10) ); // 2 in power 10 = 1024 ``` There are more functions and constants in Math object, including trigonometry, which you can find in the docs for the Math object. ## Summary To write numbers with many zeroes: - Append "e" with the zeroes count to the number. Like: 123e6 is the same as 123 with 6 zeroes 123000000. - A negative number after "e" causes the number to be divided by 1 with given zeroes. E.g. 123e-6 means 0.000123 (123 millionths). For different numeral systems: - Can write numbers directly in hex (0x), octal (0o) and binary (0b) systems. - parseInt(str, base) parses the string str into an integer in numeral system with given base, 2 ≤ base ≤ 36. - num.toString(base) converts a number to a string in the numeral system with the given base. For regular number tests: - isNaN(value) converts its argument to a number and then tests it for being NaN - Number.isNaN(value) checks whether its argument belongs to the number type, and if so, tests it for being NaN - isFinite(value) converts its argument to a number and then tests it for not being NaN/Infinity/-Infinity - Number.isFinite(value) checks whether its argument belongs to the number type, and if so, tests it for not being NaN/Infinity/-Infinity For converting values like 12pt and 100px to a number: - Use parseInt/parseFloat for the "soft" conversion, which reads a number from a string and then returns the value they could read before the error. For fractions: - Round using Math.floor, Math.ceil, Math.trunc, Math.round or num.toFixed(precision). - Make sure to remember there's a loss of precision when working with fractions. More mathematical functions: - See the Math object when you need them. The library is very small but can cover basic needs.

number

Strings

In JavaScript, the textual data is stored as strings. There is no separate type for a single character. The internal format for strings is always UTF-16, it is not tied to the page encoding. ## Quotes Let's recall the kinds of quotes. Strings can be enclosed within either single quotes, double quotes or backticks: Single and double quotes are essentially the same. Backticks, however, allow us to embed any expression into the string, by wrapping it in ${…}: Another advantage of using backticks is that they allow a string to span multiple lines: Looks natural, right? But single or double quotes do not work this way. If we use them and try to use multiple lines, there'll be an error: Single and double quotes come from ancient times of language creation, when the need for multiline strings was not taken into account. Backticks appeared much later and thus are more versatile. Backticks also allow us to specify a "template function" before the first backtick. The syntax is: <code>func&#96;string&#96;</code>. The function func is called automatically, receives the string and embedded expressions and can process them. This feature is called "tagged templates", it's rarely seen, but you can read about it in the MDN: Template literals. ## Special characters It is still possible to create multiline strings with single and double quotes by using a so-called "newline character", written as \ , which denotes a line break: As a simpler example, these two lines are equal, just written differently: There are other, less common special characters: As you can see, all special characters start with a backslash character \. It is also called an "escape character". Because it's so special, if we need to show an actual backslash \ within the string, we need to double it: So-called "escaped" quotes \', \", <code>\\`</code> are used to insert a quote into the same-quoted string. For instance: As you can see, we have to prepend the inner quote by the backslash \', because otherwise it would indicate the string end. Of course, only the quotes that are the same as the enclosing ones need to be escaped. So, as a more elegant solution, we could switch to double quotes or backticks instead: Besides these special characters, there's also a special notation for Unicode codes \u…, it's rarely used and is covered in the optional chapter about Unicode. ## String length The length property has the string length: Note that \ is a single "special" character, so the length is indeed 3. ## Accessing characters To get a character at position pos, use square brackets [pos] or call the method str.at(pos). The first character starts from the zero position: As you can see, the .at(pos) method has a benefit of allowing negative position. If pos is negative, then it's counted from the end of the string. So .at(-1) means the last character, and .at(-2) is the one before it, etc. The square brackets always return undefined for negative indexes, for instance: We can also iterate over characters using for..of: ## Strings are immutable Strings can't be changed in JavaScript. It is impossible to change a character. Let's try it to show that it doesn't work: The usual workaround is to create a whole new string and assign it to str instead of the old one. For instance: In the following sections we'll see more examples of this. ## Changing the case Methods toLowerCase() and toUpperCase() change the case: Or, if we want a single character lowercased: ## Searching for a substring There are multiple ways to look for a substring within a string. ### str.indexOf The first method is str.indexOf(substr, pos). It looks for the substr in str, starting from the given position pos, and returns the position where the match was found or -1 if nothing can be found. For instance: The optional second parameter allows us to start searching from a given position. For instance, the first occurrence of "id" is at position 1. To look for the next occurrence, let's start the search from position 2: If we're interested in all occurrences, we can run indexOf in a loop. Every new call is made with the position after the previous match: The same algorithm can be layed out shorter: There is a slight inconvenience with indexOf in the if test. We can't put it in the if like this: The alert in the example above doesn't show because str.indexOf("Widget") returns 0 (meaning that it found the match at the starting position). Right, but if considers 0 to be false. So, we should actually check for -1, like this: ### includes, startsWith, endsWith The more modern method str.includes(substr, pos) returns true/false depending on whether str contains substr within. It's the right choice if we need to test for the match, but don't need its position: The optional second argument of str.includes is the position to start searching from: The methods str.startsWith and str.endsWith do exactly what they say: ## Getting a substring There are 3 methods in JavaScript to get a substring: substring, substr and slice. str.slice(start [, end]) : Returns the part of the string from start to (but not including) end. For instance: ```js run let str = "stringify"; alert( str.slice(0, 5) ); // 'strin', the substring from 0 to 5 (not including 5) alert( str.slice(0, 1) ); // 's', from 0 to 1, but not including 1, so only character at 0 ``` If there is no second argument, then slice goes till the end of the string: ```js run let str = "st!ringify/!"; alert( str.slice(2) ); // 'ringify', from the 2nd position till the end ``` Negative values for start/end are also possible. They mean the position is counted from the string end: ```js run let str = "strin!gif/!y"; // start at the 4th position from the right, end at the 1st from the right alert( str.slice(-4, -1) ); // 'gif' ``` str.substring(start [, end]) : Returns the part of the string between start and end (not including end). This is almost the same as slice, but it allows start to be greater than end (in this case it simply swaps start and end values). For instance: ```js run let str = "st!ring/!ify"; // these are same for substring alert( str.substring(2, 6) ); // "ring" alert( str.substring(6, 2) ); // "ring" // ...but not for slice: alert( str.slice(2, 6) ); // "ring" (the same) alert( str.slice(6, 2) ); // "" (an empty string) ``` Negative arguments are (unlike slice) not supported, they are treated as 0. str.substr(start [, length]) : Returns the part of the string from start, with the given length. In contrast with the previous methods, this one allows us to specify the length instead of the ending position: ```js run let str = "st!ring/!ify"; alert( str.substr(2, 4) ); // 'ring', from the 2nd position get 4 characters ``` The first argument may be negative, to count from the end: ```js run let str = "strin!gi/!fy"; alert( str.substr(-4, 2) ); // 'gi', from the 4th position get 2 characters ``` This method resides in the Annex B of the language specification. It means that only browser-hosted Javascript engines should support it, and it's not recommended to use it. In practice, it's supported everywhere. Let's recap these methods to avoid any confusion: ## Comparing strings As we know from the chapter <info:comparison>, strings are compared character-by-character in alphabetical order. Although, there are some oddities. 1. A lowercase letter is always greater than the uppercase: ```js run alert( 'a' > 'Z' ); // true ``` 2. Letters with diacritical marks are "out of order": ```js run alert( 'Österreich' > 'Zealand' ); // true ``` This may lead to strange results if we sort these country names. Usually people would expect Zealand to come after Österreich in the list. To understand what happens, we should be aware that strings in Javascript are encoded using UTF-16. That is: each character has a corresponding numeric code. There are special methods that allow to get the character for the code and back: str.codePointAt(pos) : Returns a decimal number representing the code for the character at position pos: ```js run // different case letters have different codes alert( "Z".codePointAt(0) ); // 90 alert( "z".codePointAt(0) ); // 122 alert( "z".codePointAt(0).toString(16) ); // 7a (if we need a hexadecimal value) ``` String.fromCodePoint(code) : Creates a character by its numeric code ```js run alert( String.fromCodePoint(90) ); // Z alert( String.fromCodePoint(0x5a) ); // Z (we can also use a hex value as an argument) ``` Now let's see the characters with codes 65..220 (the latin alphabet and a little bit extra) by making a string of them: See? Capital characters go first, then a few special ones, then lowercase characters, and Ö near the end of the output. Now it becomes obvious why a > Z. The characters are compared by their numeric code. The greater code means that the character is greater. The code for a (97) is greater than the code for Z (90). - All lowercase letters go after uppercase letters because their codes are greater. - Some letters like Ö stand apart from the main alphabet. Here, its code is greater than anything from a to z. ### Correct comparisons [#correct-comparisons] The "right" algorithm to do string comparisons is more complex than it may seem, because alphabets are different for different languages. So, the browser needs to know the language to compare. Luckily, modern browsers support the internationalization standard ECMA-402. It provides a special method to compare strings in different languages, following their rules. The call str.localeCompare(str2) returns an integer indicating whether str is less, equal or greater than str2 according to the language rules: - Returns a negative number if str is less than str2. - Returns a positive number if str is greater than str2. - Returns 0 if they are equivalent. For instance: This method actually has two additional arguments specified in the documentation, which allows it to specify the language (by default taken from the environment, letter order depends on the language) and setup additional rules like case sensitivity or should "a" and "á" be treated as the same etc. ## Summary - There are 3 types of quotes. Backticks allow a string to span multiple lines and embed expressions ${…}. - We can use special characters, such as a line break \ . - To get a character, use: [] or at method. - To get a substring, use: slice or substring. - To lowercase/uppercase a string, use: toLowerCase/toUpperCase. - To look for a substring, use: indexOf, or includes/startsWith/endsWith for simple checks. - To compare strings according to the language, use: localeCompare, otherwise they are compared by character codes. There are several other helpful methods in strings: - str.trim() -- removes ("trims") spaces from the beginning and end of the string. - str.repeat(n) -- repeats the string n times. - ...and more to be found in the manual. Strings also have methods for doing search/replace with regular expressions. But that's big topic, so it's explained in a separate tutorial section <info:regular-expressions>. Also, as of now it's important to know that strings are based on Unicode encoding, and hence there're issues with comparisons. There's more about Unicode in the chapter <info:unicode>.

string

Arrays

Objects allow you to store keyed collections of values. That's fine. But quite often we find that we need an ordered collection, where we have a 1st, a 2nd, a 3rd element and so on. For example, we need that to store a list of something: users, goods, HTML elements etc. It is not convenient to use an object here, because it provides no methods to manage the order of elements. We can’t insert a new property “between” the existing ones. Objects are just not meant for such use. There exists a special data structure named Array, to store ordered collections. ## Declaration There are two syntaxes for creating an empty array: Almost all the time, the second syntax is used. We can supply initial elements in the brackets: Array elements are numbered, starting with zero. We can get an element by its number in square brackets: We can replace an element: ...Or add a new one to the array: The total count of the elements in the array is its length: We can also use alert to show the whole array. An array can store elements of any type. For instance: let fruits = [ "Apple", "Orange", "Plum"!,/! ## Get last elements with "at" [recent browser="new"] Let's say we want the last element of the array. Some programming languages allow the use of negative indexes for the same purpose, like fruits[-1]. However, in JavaScript it won't work. The result will be undefined, because the index in square brackets is treated literally. We can explicitly calculate the last element index and then access it: fruits[fruits.length - 1]. A bit cumbersome, isn't it? We need to write the variable name twice. Luckily, there's a shorter syntax: fruits.at(-1): In other words, arr.at(i): - is exactly the same as arr[i], if i >= 0. - for negative values of i, it steps back from the end of the array. ## Methods pop/push, shift/unshift A queue) is one of the most common uses of an array. In computer science, this means an ordered collection of elements which supports two operations: - push appends an element to the end. - shift get an element from the beginning, advancing the queue, so that the 2nd element becomes the 1st. Arrays support both operations. In practice we need it very often. For example, a queue of messages that need to be shown on-screen. There's another use case for arrays -- the data structure named stack). It supports two operations: - push adds an element to the end. - pop takes an element from the end. So new elements are added or taken always from the "end". A stack is usually illustrated as a pack of cards: new cards are added to the top or taken from the top: For stacks, the latest pushed item is received first, that's also called LIFO (Last-In-First-Out) principle. For queues, we have FIFO (First-In-First-Out). Arrays in JavaScript can work both as a queue and as a stack. They allow you to add/remove elements, both to/from the beginning or the end. In computer science, the data structure that allows this, is called deque. Methods that work with the end of the array: pop : Extracts the last element of the array and returns it: ```js run let fruits = ["Apple", "Orange", "Pear"]; alert( fruits.pop() ); // remove "Pear" and alert it alert( fruits ); // Apple, Orange ``` Both fruits.pop() and fruits.at(-1) return the last element of the array, but fruits.pop() also modifies the array by removing it. push : Append the element to the end of the array: ```js run let fruits = ["Apple", "Orange"]; fruits.push("Pear"); alert( fruits ); // Apple, Orange, Pear ``` The call fruits.push(...) is equal to fruits[fruits.length] = .... Methods that work with the beginning of the array: shift : Extracts the first element of the array and returns it: ```js run let fruits = ["Apple", "Orange", "Pear"]; alert( fruits.shift() ); // remove Apple and alert it alert( fruits ); // Orange, Pear ``` unshift : Add the element to the beginning of the array: ```js run let fruits = ["Orange", "Pear"]; fruits.unshift('Apple'); alert( fruits ); // Apple, Orange, Pear ``` Methods push and unshift can add multiple elements at once: ## Internals An array is a special kind of object. The square brackets used to access a property arr[0] actually come from the object syntax. That's essentially the same as obj[key], where arr is the object, while numbers are used as keys. They extend objects providing special methods to work with ordered collections of data and also the length property. But at the core it's still an object. Remember, there are only eight basic data types in JavaScript (see the Data types chapter for more info). Array is an object and thus behaves like an object. For instance, it is copied by reference: ...But what makes arrays really special is their internal representation. The engine tries to store its elements in the contiguous memory area, one after another, just as depicted on the illustrations in this chapter, and there are other optimizations as well, to make arrays work really fast. But they all break if we quit working with an array as with an "ordered collection" and start working with it as if it were a regular object. For instance, technically we can do this: That's possible, because arrays are objects at their base. We can add any properties to them. But the engine will see that we're working with the array as with a regular object. Array-specific optimizations are not suited for such cases and will be turned off, their benefits disappear. The ways to misuse an array: - Add a non-numeric property like arr.test = 5. - Make holes, like: add arr[0] and then arr[1000] (and nothing between them). - Fill the array in the reverse order, like arr[1000], arr[999] and so on. Please think of arrays as special structures to work with the ordered data. They provide special methods for that. Arrays are carefully tuned inside JavaScript engines to work with contiguous ordered data, please use them this way. And if you need arbitrary keys, chances are high that you actually require a regular object {}. ## Performance Methods push/pop run fast, while shift/unshift are slow. Why is it faster to work with the end of an array than with its beginning? Let's see what happens during the execution: It's not enough to take and remove the element with the index 0. Other elements need to be renumbered as well. The shift operation must do 3 things: 1. Remove the element with the index 0. 2. Move all elements to the left, renumber them from the index 1 to 0, from 2 to 1 and so on. 3. Update the length property. The more elements in the array, the more time to move them, more in-memory operations. The similar thing happens with unshift: to add an element to the beginning of the array, we need first to move existing elements to the right, increasing their indexes. And what's with push/pop? They do not need to move anything. To extract an element from the end, the pop method cleans the index and shortens length. The actions for the pop operation: The pop method does not need to move anything, because other elements keep their indexes. That's why it's blazingly fast. The similar thing with the push method. ## Loops One of the oldest ways to cycle array items is the for loop over indexes: But for arrays there is another form of loop, for..of: The for..of doesn't give access to the number of the current element, just its value, but in most cases that's enough. And it's shorter. Technically, because arrays are objects, it is also possible to use for..in: But that's actually a bad idea. There are potential problems with it: 1. The loop for..in iterates over all properties, not only the numeric ones. There are so-called "array-like" objects in the browser and in other environments, that look like arrays. That is, they have length and indexes properties, but they may also have other non-numeric properties and methods, which we usually don't need. The for..in loop will list them though. So if we need to work with array-like objects, then these "extra" properties can become a problem. 2. The for..in loop is optimized for generic objects, not arrays, and thus is 10-100 times slower. Of course, it's still very fast. The speedup may only matter in bottlenecks. But still we should be aware of the difference. Generally, we shouldn't use for..in for arrays. ## A word about "length" The length property automatically updates when we modify the array. To be precise, it is actually not the count of values in the array, but the greatest numeric index plus one. For instance, a single element with a large index gives a big length: Note that we usually don't use arrays like that. Another interesting thing about the length property is that it's writable. If we increase it manually, nothing interesting happens. But if we decrease it, the array is truncated. The process is irreversible, here's the example: So, the simplest way to clear the array is: arr.length = 0;. ## new Array() [#new-array] There is one more syntax to create an array: It's rarely used, because square brackets [] are shorter. Also, there's a tricky feature with it. If new Array is called with a single argument which is a number, then it creates an array without items, but with the given length. Let's see how one can shoot themselves in the foot: To avoid such surprises, we usually use square brackets, unless we really know what we're doing. ## Multidimensional arrays Arrays can have items that are also arrays. We can use it for multidimensional arrays, for example to store matrices: ## toString Arrays have their own implementation of toString method that returns a comma-separated list of elements. For instance: Also, let's try this: Arrays do not have Symbol.toPrimitive, neither a viable valueOf, they implement only toString conversion, so here [] becomes an empty string, [1] becomes "1" and [1,2] becomes "1,2". When the binary plus "+" operator adds something to a string, it converts it to a string as well, so the next step looks like this: ## Don't compare arrays with == Arrays in JavaScript, unlike some other programming languages, shouldn't be compared with operator ==. This operator has no special treatment for arrays, it works with them as with any objects. Let's recall the rules: - Two objects are equal == only if they're references to the same object. - If one of the arguments of == is an object, and the other one is a primitive, then the object gets converted to primitive, as explained in the chapter <info:object-toprimitive>. - ...With an exception of null and undefined that equal == each other and nothing else. The strict comparison === is even simpler, as it doesn't convert types. So, if we compare arrays with ==, they are never the same, unless we compare two variables that reference exactly the same array. For example: These arrays are technically different objects. So they aren't equal. The == operator doesn't do item-by-item comparison. Comparison with primitives may give seemingly strange results as well: Here, in both cases, we compare a primitive with an array object. So the array [] gets converted to primitive for the purpose of comparison and becomes an empty string ''. Then the comparison process goes on with the primitives, as described in the chapter <info:type-conversions>: So, how to compare arrays? That's simple: don't use the == operator. Instead, compare them item-by-item in a loop or using iteration methods explained in the next chapter. ## Summary Array is a special kind of object, suited to storing and managing ordered data items. The declaration: The call to new Array(number) creates an array with the given length, but without elements. - The length property is the array length or, to be precise, its last numeric index plus one. It is auto-adjusted by array methods. - If we shorten length manually, the array is truncated. Getting the elements: - we can get element by its index, like arr[0] - also we can use at(i) method that allows negative indexes. For negative values of i, it steps back from the end of the array. If i >= 0, it works same as arr[i]. We can use an array as a deque with the following operations: - push(...items) adds items to the end. - pop() removes the element from the end and returns it. - shift() removes the element from the beginning and returns it. - unshift(...items) adds items to the beginning. To loop over the elements of the array: - for (let i=0; i<arr.length; i++) -- works fastest, old-browser-compatible. - for (let item of arr) -- the modern syntax for items only, - for (let i in arr) -- never use. To compare arrays, don't use the == operator (as well as >, < and others), as they have no special treatment for arrays. They handle them as any objects, and it's not what we usually want. Instead you can use for..of loop to compare arrays item-by-item. We will continue with arrays and study more methods to add, remove, extract elements and sort arrays in the next chapter <info:array-methods>.

array

Array methods

Arrays provide a lot of methods. To make things easier, in this chapter, they are split into groups. ## Add/remove items We already know methods that add and remove items from the beginning or the end: - arr.push(...items) -- adds items to the end, - arr.pop() -- extracts an item from the end, - arr.shift() -- extracts an item from the beginning, - arr.unshift(...items) -- adds items to the beginning. Here are a few others. ### splice How to delete an element from the array? The arrays are objects, so we can try to use delete: The element was removed, but the array still has 3 elements, we can see that arr.length == 3. That's natural, because delete obj.key removes a value by the key. It's all it does. Fine for objects. But for arrays we usually want the rest of the elements to shift and occupy the freed place. We expect to have a shorter array now. So, special methods should be used. The arr.splice method is a Swiss army knife for arrays. It can do everything: insert, remove and replace elements. The syntax is: It modifies arr starting from the index start: removes deleteCount elements and then inserts elem1, ..., elemN at their place. Returns the array of removed elements. This method is easy to grasp by examples. Let's start with the deletion: Easy, right? Starting from the index 1 it removed 1 element. In the next example, we remove 3 elements and replace them with the other two: Here we can see that splice returns the array of removed elements: The splice method is also able to insert the elements without any removals. For that, we need to set deleteCount to 0: let arr = [1, 2, 5]; // from index -1 (one step from the end) // delete 0 elements, // then insert 3 and 4 arr.splice(-1, 0, 3, 4); alert( arr ); // 1,2,3,4,5 ### slice The method arr.slice is much simpler than the similar-looking arr.splice. The syntax is: It returns a new array copying to it all items from index start to end (not including end). Both start and end can be negative, in that case position from array end is assumed. It's similar to a string method str.slice, but instead of substrings, it makes subarrays. For instance: We can also call it without arguments: arr.slice() creates a copy of arr. That's often used to obtain a copy for further transformations that should not affect the original array. ### concat The method arr.concat creates a new array that includes values from other arrays and additional items. The syntax is: It accepts any number of arguments -- either arrays or values. The result is a new array containing items from arr, then arg1, arg2 etc. If an argument argN is an array, then all its elements are copied. Otherwise, the argument itself is copied. For instance: Normally, it only copies elements from arrays. Other objects, even if they look like arrays, are added as a whole: ...But if an array-like object has a special Symbol.isConcatSpreadable property, then it's treated as an array by concat: its elements are added instead: ## Iterate: forEach The arr.forEach method allows to run a function for every element of the array. The syntax: For instance, this shows each element of the array: And this code is more elaborate about their positions in the target array: The result of the function (if it returns any) is thrown away and ignored. ## Searching in array Now let's cover methods that search in an array. ### indexOf/lastIndexOf and includes The methods arr.indexOf and arr.includes have the similar syntax and do essentially the same as their string counterparts, but operate on items instead of characters: - arr.indexOf(item, from) -- looks for item starting from index from, and returns the index where it was found, otherwise -1. - arr.includes(item, from) -- looks for item starting from index from, returns true if found. Usually, these methods are used with only one argument: the item to search. By default, the search is from the beginning. For instance: Please note that indexOf uses the strict equality === for comparison. So, if we look for false, it finds exactly false and not the zero. If we want to check if item exists in the array and don't need the index, then arr.includes is preferred. The method arr.lastIndexOf is the same as indexOf, but looks for from right to left. const arr = [NaN]; alert( arr.indexOf(NaN) ); // -1 (wrong, should be 0) alert( arr.includes(NaN) );// true (correct) ### find and findIndex/findLastIndex Imagine we have an array of objects. How do we find an object with a specific condition? Here the arr.find(fn) method comes in handy. The syntax is: The function is called for elements of the array, one after another: - item is the element. - index is its index. - array is the array itself. If it returns true, the search is stopped, the item is returned. If nothing is found, undefined is returned. For example, we have an array of users, each with the fields id and name. Let's find the one with id == 1: In real life, arrays of objects are a common thing, so the find method is very useful. Note that in the example we provide to find the function item => item.id == 1 with one argument. That's typical, other arguments of this function are rarely used. The arr.findIndex method has the same syntax but returns the index where the element was found instead of the element itself. The value of -1 is returned if nothing is found. The arr.findLastIndex method is like findIndex, but searches from right to left, similar to lastIndexOf. Here's an example: ### filter The find method looks for a single (first) element that makes the function return true. If there may be many, we can use arr.filter(fn). The syntax is similar to find, but filter returns an array of all matching elements: For instance: ## Transform an array Let's move on to methods that transform and reorder an array. ### map The arr.map method is one of the most useful and often used. It calls the function for each element of the array and returns the array of results. The syntax is: For instance, here we transform each element into its length: ### sort(fn) The call to arr.sort() sorts the array in place, changing its element order. It also returns the sorted array, but the returned value is usually ignored, as arr itself is modified. For instance: Did you notice anything strange in the outcome? The order became 1, 15, 2. Incorrect. But why? The items are sorted as strings by default. Literally, all elements are converted to strings for comparisons. For strings, lexicographic ordering is applied and indeed "2" > "15". To use our own sorting order, we need to supply a function as the argument of arr.sort(). The function should compare two arbitrary values and return: For instance, to sort as numbers: Now it works as intended. Let's step aside and think about what's happening. The arr can be an array of anything, right? It may contain numbers or strings or objects or whatever. We have a set of some items. To sort it, we need an ordering function that knows how to compare its elements. The default is a string order. The arr.sort(fn) method implements a generic sorting algorithm. We don't need to care how it internally works (an optimized quicksort or Timsort most of the time). It will walk the array, compare its elements using the provided function and reorder them, all we need is to provide the fn which does the comparison. By the way, if we ever want to know which elements are compared -- nothing prevents us from alerting them: The algorithm may compare an element with multiple others in the process, but it tries to make as few comparisons as possible. let arr = [ 1, 2, 15 ]; arr.sort(function(a, b) { return a - b; }); alert(arr); // !1, 2, 15/! arr.sort( (a, b) => a - b ); let countries = ['Österreich', 'Andorra', 'Vietnam']; alert( countries.sort( (a, b) => a > b ? 1 : -1) ); // Andorra, Vietnam, Österreich (wrong) alert( countries.sort( (a, b) => a.localeCompare(b) ) ); // Andorra,Österreich,Vietnam (correct!) ### reverse The method arr.reverse reverses the order of elements in arr. For instance: It also returns the array arr after the reversal. ### split and join Here's the situation from real life. We are writing a messaging app, and the person enters the comma-delimited list of receivers: John, Pete, Mary. But for us an array of names would be much more comfortable than a single string. How to get it? The str.split(delim) method does exactly that. It splits the string into an array by the given delimiter delim. In the example below, we split by a comma followed by a space: The split method has an optional second numeric argument -- a limit on the array length. If it is provided, then the extra elements are ignored. In practice it is rarely used though: let str = "test"; alert( str.split('') ); // t,e,s,t The call arr.join(glue) does the reverse to split. It creates a string of arr items joined by glue between them. For instance: ### reduce/reduceRight When we need to iterate over an array -- we can use forEach, for or for..of. When we need to iterate and return the data for each element -- we can use map. The methods arr.reduce and arr.reduceRight also belong to that breed, but are a little bit more intricate. They are used to calculate a single value based on the array. The syntax is: The function is applied to all array elements one after another and "carries on" its result to the next call. Arguments: - accumulator -- is the result of the previous function call, equals initial the first time (if initial is provided). - item -- is the current array item. - index -- is its position. - array -- is the array. As the function is applied, the result of the previous function call is passed to the next one as the first argument. So, the first argument is essentially the accumulator that stores the combined result of all previous executions. And at the end, it becomes the result of reduce. Sounds complicated? The easiest way to grasp that is by example. Here we get a sum of an array in one line: The function passed to reduce uses only 2 arguments, that's typically enough. Let's see the details of what's going on. 1. On the first run, sum is the initial value (the last argument of reduce), equals 0, and current is the first array element, equals 1. So the function result is 1. 2. On the second run, sum = 1, we add the second array element (2) to it and return. 3. On the 3rd run, sum = 3 and we add one more element to it, and so on... The calculation flow: Or in the form of a table, where each row represents a function call on the next array element: Here we can clearly see how the result of the previous call becomes the first argument of the next one. We also can omit the initial value: The result is the same. That's because if there's no initial, then reduce takes the first element of the array as the initial value and starts the iteration from the 2nd element. The calculation table is the same as above, minus the first row. But such use requires an extreme care. If the array is empty, then reduce call without initial value gives an error. Here's an example: So it's advised to always specify the initial value. The method arr.reduceRight does the same but goes from right to left. ## Array.isArray Arrays do not form a separate language type. They are based on objects. So typeof does not help to distinguish a plain object from an array: ...But arrays are used so often that there's a special method for that: Array.isArray(value). It returns true if the value is an array, and false otherwise. ## Most methods support "thisArg" Almost all array methods that call functions -- like find, filter, map, with a notable exception of sort, accept an optional additional parameter thisArg. That parameter is not explained in the sections above, because it's rarely used. But for completeness, we have to cover it. Here's the full syntax of these methods: The value of thisArg parameter becomes this for func. For example, here we use a method of army object as a filter, and thisArg passes the context: If in the example above we used users.filter(army.canJoin), then army.canJoin would be called as a standalone function, with this=undefined, thus leading to an instant error. A call to users.filter(army.canJoin, army) can be replaced with users.filter(user => army.canJoin(user)), that does the same. The latter is used more often, as it's a bit easier to understand for most people. ## Summary A cheat sheet of array methods: - To add/remove elements: - push(...items) -- adds items to the end, - pop() -- extracts an item from the end, - shift() -- extracts an item from the beginning, - unshift(...items) -- adds items to the beginning. - splice(pos, deleteCount, ...items) -- at index pos deletes deleteCount elements and inserts items. - slice(start, end) -- creates a new array, copies elements from index start till end (not inclusive) into it. - concat(...items) -- returns a new array: copies all members of the current one and adds items to it. If any of items is an array, then its elements are taken. - To search among elements: - indexOf/lastIndexOf(item, pos) -- look for item starting from position pos, and return the index or -1 if not found. - includes(value) -- returns true if the array has value, otherwise false. - find/filter(func) -- filter elements through the function, return first/all values that make it return true. - findIndex is like find, but returns the index instead of a value. - To iterate over elements: - forEach(func) -- calls func for every element, does not return anything. - To transform the array: - map(func) -- creates a new array from results of calling func for every element. - sort(func) -- sorts the array in-place, then returns it. - reverse() -- reverses the array in-place, then returns it. - split/join -- convert a string to array and back. - reduce/reduceRight(func, initial) -- calculate a single value over the array by calling func for each element and passing an intermediate result between the calls. - Additionally: - Array.isArray(value) checks value for being an array, if so returns true, otherwise false. Please note that methods sort, reverse and splice modify the array itself. These methods are the most used ones, they cover 99% of use cases. But there are few others: - arr.some(fn)/arr.every(fn) check the array. The function fn is called on each element of the array similar to map. If any/all results are true, returns true, otherwise false. These methods behave sort of like || and && operators: if fn returns a truthy value, arr.some() immediately returns true and stops iterating over the rest of items; if fn returns a falsy value, arr.every() immediately returns false and stops iterating over the rest of items as well. We can use every to compare arrays: ```js run function arraysEqual(arr1, arr2) { return arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]); alert( arraysEqual([1, 2], [1, 2])); // true ``` - arr.fill(value, start, end) -- fills the array with repeating value from index start to end. - arr.copyWithin(target, start, end) -- copies its elements from position start till position end into itself, at position target (overwrites existing). - arr.flat(depth)/arr.flatMap(fn) create a new flat array from a multidimensional array. For the full list, see the manual. At first sight, it may seem that there are so many methods, quite difficult to remember. But actually, that's much easier. Look through the cheat sheet just to be aware of them. Then solve the tasks of this chapter to practice, so that you have experience with array methods. Afterwards whenever you need to do something with an array, and you don't know how -- come here, look at the cheat sheet and find the right method. Examples will help you to write it correctly. Soon you'll automatically remember the methods, without specific efforts from your side.

array

Iterables

Iterable objects are a generalization of arrays. That's a concept that allows us to make any object useable in a for..of loop. Of course, Arrays are iterable. But there are many other built-in objects, that are iterable as well. For instance, strings are also iterable. If an object isn't technically an array, but represents a collection (list, set) of something, then for..of is a great syntax to loop over it, so let's see how to make it work. ## Symbol.iterator We can easily grasp the concept of iterables by making one of our own. For instance, we have an object that is not an array, but looks suitable for for..of. Like a range object that represents an interval of numbers: To make the range object iterable (and thus let for..of work) we need to add a method to the object named Symbol.iterator (a special built-in symbol just for that). 1. When for..of starts, it calls that method once (or errors if not found). The method must return an iterator -- an object with the method next. 2. Onward, for..of works only with that returned object. 3. When for..of wants the next value, it calls next() on that object. 4. The result of next() must have the form {done: Boolean, value: any}, where done=true means that the loop is finished, otherwise value is the next value. Here's the full implementation for range with remarks: Please note the core feature of iterables: separation of concerns. - The range itself does not have the next() method. - Instead, another object, a so-called "iterator" is created by the call to range[Symbol.iterator](), and its next() generates values for the iteration. So, the iterator object is separate from the object it iterates over. Technically, we may merge them and use range itself as the iterator to make the code simpler. Like this: Now range[Symbol.iterator]() returns the range object itself: it has the necessary next() method and remembers the current iteration progress in this.current. Shorter? Yes. And sometimes that's fine too. The downside is that now it's impossible to have two for..of loops running over the object simultaneously: they'll share the iteration state, because there's only one iterator -- the object itself. But two parallel for-ofs is a rare thing, even in async scenarios. ## String is iterable Arrays and strings are most widely used built-in iterables. For a string, for..of loops over its characters: And it works correctly with surrogate pairs! ## Calling an iterator explicitly For deeper understanding, let's see how to use an iterator explicitly. We'll iterate over a string in exactly the same way as for..of, but with direct calls. This code creates a string iterator and gets values from it "manually": That is rarely needed, but gives us more control over the process than for..of. For instance, we can split the iteration process: iterate a bit, then stop, do something else, and then resume later. ## Iterables and array-likes [#array-like] Two official terms look similar, but are very different. Please make sure you understand them well to avoid the confusion. - Iterables are objects that implement the Symbol.iterator method, as described above. - Array-likes are objects that have indexes and length, so they look like arrays. When we use JavaScript for practical tasks in a browser or any other environment, we may meet objects that are iterables or array-likes, or both. For instance, strings are both iterable (for..of works on them) and array-like (they have numeric indexes and length). But an iterable may not be array-like. And vice versa an array-like may not be iterable. For example, the range in the example above is iterable, but not array-like, because it does not have indexed properties and length. And here's the object that is array-like, but not iterable: Both iterables and array-likes are usually not arrays, they don't have push, pop etc. That's rather inconvenient if we have such an object and want to work with it as with an array. E.g. we would like to work with range using array methods. How to achieve that? ## Array.from There's a universal method Array.from that takes an iterable or array-like value and makes a "real" Array from it. Then we can call array methods on it. For instance: Array.from at the line (*) takes the object, examines it for being an iterable or array-like, then makes a new array and copies all items to it. The same happens for an iterable: The full syntax for Array.from also allows us to provide an optional "mapping" function: The optional second argument mapFn can be a function that will be applied to each element before adding it to the array, and thisArg allows us to set this for it. For instance: Here we use Array.from to turn a string into an array of characters: Unlike str.split, it relies on the iterable nature of the string and so, just like for..of, correctly works with surrogate pairs. Technically here it does the same as: ...But it is shorter. We can even build surrogate-aware slice on it: ## Summary Objects that can be used in for..of are called iterable. - Technically, iterables must implement the method named Symbol.iterator. - The result of obj[Symbol.iterator]() is called an iterator. It handles further iteration process. - An iterator must have the method named next() that returns an object {done: Boolean, value: any}, here done:true denotes the end of the iteration process, otherwise the value is the next value. - The Symbol.iterator method is called automatically by for..of, but we also can do it directly. - Built-in iterables like strings or arrays, also implement Symbol.iterator. - String iterator knows about surrogate pairs. Objects that have indexed properties and length are called array-like. Such objects may also have other properties and methods, but lack the built-in methods of arrays. If we look inside the specification -- we'll see that most built-in methods assume that they work with iterables or array-likes instead of "real" arrays, because that's more abstract. Array.from(obj[, mapFn, thisArg]) makes a real Array from an iterable or array-like obj, and we can then use array methods on it. The optional arguments mapFn and thisArg allow us to apply a function to each item.

web,development

Map and Set

Till now, we've learned about the following complex data structures: - Objects are used for storing keyed collections. - Arrays are used for storing ordered collections. But that's not enough for real life. That's why Map and Set also exist. ## Map Map is a collection of keyed data items, just like an Object. But the main difference is that Map allows keys of any type. Methods and properties are: - new Map() -- creates the map. - map.set(key, value) -- stores the value by the key. - map.get(key) -- returns the value by the key, undefined if key doesn't exist in map. - map.has(key) -- returns true if the key exists, false otherwise. - map.delete(key) -- removes the element (the key/value pair) by the key. - map.clear() -- removes everything from the map. - map.size -- returns the current element count. For instance: As we can see, unlike objects, keys are not converted to strings. Any type of key is possible. Map can also use objects as keys. For instance: Using objects as keys is one of the most notable and important Map features. The same does not count for Object. String as a key in Object is fine, but we can't use another Object as a key in Object. Let's try: As visitsCountObj is an object, it converts all Object keys, such as john and ben above, to same string "[object Object]". Definitely not what we want. map.set('1', 'str1') .set(1, 'num1') .set(true, 'bool1'); ## Iteration over Map For looping over a map, there are 3 methods: - map.keys() -- returns an iterable for keys, - map.values() -- returns an iterable for values, - map.entries() -- returns an iterable for entries [key, value], it's used by default in for..of. For instance: Besides that, Map has a built-in forEach method, similar to Array: ## Object.entries: Map from Object When a Map is created, we can pass an array (or another iterable) with key/value pairs for initialization, like this: If we have a plain object, and we'd like to create a Map from it, then we can use built-in method Object.entries(obj) that returns an array of key/value pairs for an object exactly in that format. So we can create a map from an object like this: Here, Object.entries returns the array of key/value pairs: [ ["name","John"], ["age", 30] ]. That's what Map needs. ## Object.fromEntries: Object from Map We've just seen how to create Map from a plain object with Object.entries(obj). There's Object.fromEntries method that does the reverse: given an array of [key, value] pairs, it creates an object from them: We can use Object.fromEntries to get a plain object from Map. E.g. we store the data in a Map, but we need to pass it to a 3rd-party code that expects a plain object. Here we go: A call to map.entries() returns an iterable of key/value pairs, exactly in the right format for Object.fromEntries. We could also make line (*) shorter: That's the same, because Object.fromEntries expects an iterable object as the argument. Not necessarily an array. And the standard iteration for map returns same key/value pairs as map.entries(). So we get a plain object with same key/values as the map. ## Set A Set is a special type collection - "set of values" (without keys), where each value may occur only once. Its main methods are: - [new Set([iterable])](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set) -- creates the set, and if an iterable object is provided (usually an array), copies values from it into the set. - set.add(value) -- adds a value, returns the set itself. - set.delete(value) -- removes the value, returns true if value existed at the moment of the call, otherwise false. - set.has(value) -- returns true if the value exists in the set, otherwise false. - set.clear() -- removes everything from the set. - set.size -- is the elements count. The main feature is that repeated calls of set.add(value) with the same value don't do anything. That's the reason why each value appears in a Set only once. For example, we have visitors coming, and we'd like to remember everyone. But repeated visits should not lead to duplicates. A visitor must be "counted" only once. Set is just the right thing for that: The alternative to Set could be an array of users, and the code to check for duplicates on every insertion using arr.find. But the performance would be much worse, because this method walks through the whole array checking every element. Set is much better optimized internally for uniqueness checks. ## Iteration over Set We can loop over a set either with for..of or using forEach: Note the funny thing. The callback function passed in forEach has 3 arguments: a value, then the same value valueAgain, and then the target object. Indeed, the same value appears in the arguments twice. That's for compatibility with Map where the callback passed forEach has three arguments. Looks a bit strange, for sure. But this may help to replace Map with Set in certain cases with ease, and vice versa. The same methods Map has for iterators are also supported: - set.keys() -- returns an iterable object for values, - set.values() -- same as set.keys(), for compatibility with Map, - set.entries() -- returns an iterable object for entries [value, value], exists for compatibility with Map. ## Summary Map -- is a collection of keyed values. Methods and properties: - [new Map([iterable])](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/Map) -- creates the map, with optional iterable (e.g. array) of [key,value] pairs for initialization. - map.set(key, value) -- stores the value by the key, returns the map itself. - map.get(key) -- returns the value by the key, undefined if key doesn't exist in map. - map.has(key) -- returns true if the key exists, false otherwise. - map.delete(key) -- removes the element by the key, returns true if key existed at the moment of the call, otherwise false. - map.clear() -- removes everything from the map. - map.size -- returns the current element count. The differences from a regular Object: - Any keys, objects can be keys. - Additional convenient methods, the size property. Set -- is a collection of unique values. Methods and properties: - [new Set([iterable])](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set) -- creates the set, with optional iterable (e.g. array) of values for initialization. - set.add(value) -- adds a value (does nothing if value exists), returns the set itself. - set.delete(value) -- removes the value, returns true if value existed at the moment of the call, otherwise false. - set.has(value) -- returns true if the value exists in the set, otherwise false. - set.clear() -- removes everything from the set. - set.size -- is the elements count. Iteration over Map and Set is always in the insertion order, so we can't say that these collections are unordered, but we can't reorder elements or directly get an element by its number.

web,development

WeakMap and WeakSet

As we know from the chapter <info:garbage-collection>, JavaScript engine keeps a value in memory while it is "reachable" and can potentially be used. For instance: Usually, properties of an object or elements of an array or another data structure are considered reachable and kept in memory while that data structure is in memory. For instance, if we put an object into an array, then while the array is alive, the object will be alive as well, even if there are no other references to it. Like this: Similar to that, if we use an object as the key in a regular Map, then while the Map exists, that object exists as well. It occupies memory and may not be garbage collected. For instance: WeakMap is fundamentally different in this aspect. It doesn't prevent garbage-collection of key objects. Let's see what it means on examples. ## WeakMap The first difference between Map and WeakMap is that keys must be objects, not primitive values: Now, if we use an object as the key in it, and there are no other references to that object -- it will be removed from memory (and from the map) automatically. Compare it with the regular Map example above. Now if john only exists as the key of WeakMap -- it will be automatically deleted from the map (and memory). WeakMap does not support iteration and methods keys(), values(), entries(), so there's no way to get all keys or values from it. WeakMap has only the following methods: - weakMap.set(key, value) - weakMap.get(key) - weakMap.delete(key) - weakMap.has(key) Why such a limitation? That's for technical reasons. If an object has lost all other references (like john in the code above), then it is to be garbage-collected automatically. But technically it's not exactly specified when the cleanup happens. The JavaScript engine decides that. It may choose to perform the memory cleanup immediately or to wait and do the cleaning later when more deletions happen. So, technically, the current element count of a WeakMap is not known. The engine may have cleaned it up or not, or did it partially. For that reason, methods that access all keys/values are not supported. Now, where do we need such a data structure? ## Use case: additional data The main area of application for WeakMap is an additional data storage. If we're working with an object that "belongs" to another code, maybe even a third-party library, and would like to store some data associated with it, that should only exist while the object is alive - then WeakMap is exactly what's needed. We put the data to a WeakMap, using the object as the key, and when the object is garbage collected, that data will automatically disappear as well. Let's look at an example. For instance, we have code that keeps a visit count for users. The information is stored in a map: a user object is the key and the visit count is the value. When a user leaves (its object gets garbage collected), we don't want to store their visit count anymore. Here's an example of a counting function with Map: And here's another part of the code, maybe another file using it: Now, john object should be garbage collected, but remains in memory, as it's a key in visitsCountMap. We need to clean visitsCountMap when we remove users, otherwise it will grow in memory indefinitely. Such cleaning can become a tedious task in complex architectures. We can avoid it by switching to WeakMap instead: Now we don't have to clean visitsCountMap. After john object becomes unreachable, by all means except as a key of WeakMap, it gets removed from memory, along with the information by that key from WeakMap. ## Use case: caching Another common example is caching. We can store ("cache") results from a function, so that future calls on the same object can reuse it. To achieve that, we can use Map (not optimal scenario): For multiple calls of process(obj) with the same object, it only calculates the result the first time, and then just takes it from cache. The downside is that we need to clean cache when the object is not needed any more. If we replace Map with WeakMap, then this problem disappears. The cached result will be removed from memory automatically after the object gets garbage collected. ## WeakSet WeakSet behaves similarly: - It is analogous to Set, but we may only add objects to WeakSet (not primitives). - An object exists in the set while it is reachable from somewhere else. - Like Set, it supports add, has and delete, but not size, keys() and no iterations. Being "weak", it also serves as additional storage. But not for arbitrary data, rather for "yes/no" facts. A membership in WeakSet may mean something about the object. For instance, we can add users to WeakSet to keep track of those who visited our site: The most notable limitation of WeakMap and WeakSet is the absence of iterations, and the inability to get all current content. That may appear inconvenient, but does not prevent WeakMap/WeakSet from doing their main job -- be an "additional" storage of data for objects which are stored/managed at another place. ## Summary WeakMap is Map-like collection that allows only objects as keys and removes them together with associated value once they become inaccessible by other means. WeakSet is Set-like collection that stores only objects and removes them once they become inaccessible by other means. Their main advantages are that they have weak reference to objects, so they can easily be removed by garbage collector. That comes at the cost of not having support for clear, size, keys, values... WeakMap and WeakSet are used as "secondary" data structures in addition to the "primary" object storage. Once the object is removed from the primary storage, if it is only found as the key of WeakMap or in a WeakSet, it will be cleaned up automatically.

web,development

Object.keys, values, entries

Let's step away from the individual data structures and talk about the iterations over them. In the previous chapter we saw methods map.keys(), map.values(), map.entries(). These methods are generic, there is a common agreement to use them for data structures. If we ever create a data structure of our own, we should implement them too. They are supported for: - Map - Set - Array Plain objects also support similar methods, but the syntax is a bit different. ## Object.keys, values, entries For plain objects, the following methods are available: - Object.keys(obj) -- returns an array of keys. - Object.values(obj) -- returns an array of values. - Object.entries(obj) -- returns an array of [key, value] pairs. Please note the distinctions (compared to map for example): The first difference is that we have to call Object.keys(obj), and not obj.keys(). Why so? The main reason is flexibility. Remember, objects are a base of all complex structures in JavaScript. So we may have an object of our own like data that implements its own data.values() method. And we still can call Object.values(data) on it. The second difference is that Object.* methods return "real" array objects, not just an iterable. That's mainly for historical reasons. For instance: - Object.keys(user) = ["name", "age"] - Object.values(user) = ["John", 30] - Object.entries(user) = [ ["name","John"], ["age",30] ] Here's an example of using Object.values to loop over property values: ## Transforming objects Objects lack many methods that exist for arrays, e.g. map, filter and others. If we'd like to apply them, then we can use Object.entries followed by Object.fromEntries: 1. Use Object.entries(obj) to get an array of key/value pairs from obj. 2. Use array methods on that array, e.g. map, to transform these key/value pairs. 3. Use Object.fromEntries(array) on the resulting array to turn it back into an object. For example, we have an object with prices, and would like to double them: It may look difficult at first sight, but becomes easy to understand after you use it once or twice. We can make powerful chains of transforms this way.

object

Destructuring assignment

The two most used data structures in JavaScript are Object and Array. - Objects allow us to create a single entity that stores data items by key. - Arrays allow us to gather data items into an ordered list. However, when we pass these to a function, we may not need all of it. The function might only require certain elements or properties. Destructuring assignment is a special syntax that allows us to "unpack" arrays or objects into a bunch of variables, as sometimes that's more convenient. Destructuring also works well with complex functions that have a lot of parameters, default values, and so on. Soon we'll see that. ## Array destructuring Here's an example of how an array is destructured into variables: Now we can work with variables instead of array members. It looks great when combined with split or other array-returning methods: As you can see, the syntax is simple. There are several peculiar details though. Let's see more examples to understand it better. // let [firstName, surname] = arr; let firstName = arr[0]; let surname = arr[1]; // second element is not needed let [firstName, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; alert( title ); // Consul let [a, b, c] = "abc"; // ["a", "b", "c"] let [one, two, three] = new Set([1, 2, 3]); let user = {}; [user.name, user.surname] = "John Smith".split(' '); alert(user.name); // John alert(user.surname); // Smith let user = { name: "John", age: 30 // loop over the keys-and-values for (let [key, value] of Object.entries(user)) { alert(${key}:${value}); // name:John, then age:30 let user = new Map(); user.set("name", "John"); user.set("age", "30"); // Map iterates as [key, value] pairs, very convenient for destructuring for (let [key, value] of user) { alert(${key}:${value}); // name:John, then age:30 let guest = "Jane"; let admin = "Pete"; // Let's swap the values: make guest=Pete, admin=Jane [guest, admin] = [admin, guest]; alert(${guest} ${admin}); // Pete Jane (successfully swapped!) ### The rest '...' Usually, if the array is longer than the list at the left, the "extra" items are omitted. For example, here only two items are taken, and the rest is just ignored: If we'd like also to gather all that follows -- we can add one more parameter that gets "the rest" using three dots "...": The value of rest is the array of the remaining array elements. We can use any other variable name in place of rest, just make sure it has three dots before it and goes last in the destructuring assignment. ### Default values If the array is shorter than the list of variables on the left, there will be no errors. Absent values are considered undefined: If we want a "default" value to replace the missing one, we can provide it using =: Default values can be more complex expressions or even function calls. They are evaluated only if the value is not provided. For instance, here we use the prompt function for two defaults: Please note: the prompt will run only for the missing value (surname). ## Object destructuring The destructuring assignment also works with objects. The basic syntax is: We should have an existing object on the right side, that we want to split into variables. The left side contains an object-like "pattern" for corresponding properties. In the simplest case, that's a list of variable names in {...}. For instance: Properties options.title, options.width and options.height are assigned to the corresponding variables. The order does not matter. This works too: The pattern on the left side may be more complex and specify the mapping between properties and variables. If we want to assign a property to a variable with another name, for instance, make options.width go into the variable named w, then we can set the variable name using a colon: The colon shows "what : goes where". In the example above the property width goes to w, property height goes to h, and title is assigned to the same name. For potentially missing properties we can set default values using "=", like this: Just like with arrays or function parameters, default values can be any expressions or even function calls. They will be evaluated if the value is not provided. In the code below prompt asks for width, but not for title: We also can combine both the colon and equality: If we have a complex object with many properties, we can extract only what we need: ### The rest pattern "..." What if the object has more properties than we have variables? Can we take some and then assign the "rest" somewhere? We can use the rest pattern, just like we did with arrays. It's not supported by some older browsers (IE, use Babel to polyfill it), but works in modern ones. It looks like this: let title, width, height; // error in this line {title, width, height} = {title: "Menu", width: 200, height: 100}; // a code block let message = "Hello"; // ... alert( message ); let title, width, height; // okay now !(/!{title, width, height} = {title: "Menu", width: 200, height: 100}!)/!; alert( title ); // Menu ## Nested destructuring If an object or an array contains other nested objects and arrays, we can use more complex left-side patterns to extract deeper portions. In the code below options has another object in the property size and an array in the property items. The pattern on the left side of the assignment has the same structure to extract values from them: All properties of options object except extra which is absent in the left part, are assigned to corresponding variables: Finally, we have width, height, item1, item2 and title from the default value. Note that there are no variables for size and items, as we take their content instead. ## Smart function parameters There are times when a function has many parameters, most of which are optional. That's especially true for user interfaces. Imagine a function that creates a menu. It may have a width, a height, a title, an item list and so on. Here's a bad way to write such a function: In real-life, the problem is how to remember the order of arguments. Usually, IDEs try to help us, especially if the code is well-documented, but still... Another problem is how to call a function when most parameters are ok by default. Like this? That's ugly. And becomes unreadable when we deal with more parameters. Destructuring comes to the rescue! We can pass parameters as an object, and the function immediately destructurizes them into variables: We can also use more complex destructuring with nested objects and colon mappings: The full syntax is the same as for a destructuring assignment: Then, for an object of parameters, there will be a variable varName for the property incomingProperty, with defaultValue by default. Please note that such destructuring assumes that showMenu() does have an argument. If we want all values by default, then we should specify an empty object: We can fix this by making {} the default value for the whole object of parameters: In the code above, the whole arguments object is {} by default, so there's always something to destructurize. ## Summary - Destructuring assignment allows for instantly mapping an object or array onto many variables. - The full object syntax: ```js let {prop : varName = defaultValue, ...rest} = object ``` This means that property prop should go into the variable varName and, if no such property exists, then the default value should be used. Object properties that have no mapping are copied to the rest object. - The full array syntax: ```js let [item1 = defaultValue, item2, ...rest] = array ``` The first item goes to item1; the second goes into item2, and all the rest makes the array rest. - It's possible to extract data from nested arrays/objects, for that the left side must have the same structure as the right one.

web,development

Date and time

Let's meet a new built-in object: Date. It stores the date, time and provides methods for date/time management. For instance, we can use it to store creation/modification times, to measure time, or just to print out the current date. ## Creation To create a new Date object call new Date() with one of the following arguments: new Date() : Without arguments -- create a Date object for the current date and time: ```js run let now = new Date(); alert( now ); // shows current date/time ``` new Date(milliseconds) : Create a Date object with the time equal to number of milliseconds (1/1000 of a second) passed after the Jan 1st of 1970 UTC+0. ```js run // 0 means 01.01.1970 UTC+0 let Jan01_1970 = new Date(0); alert( Jan01_1970 ); // now add 24 hours, get 02.01.1970 UTC+0 let Jan02_1970 = new Date(24 3600 1000); alert( Jan02_1970 ); ``` An integer number representing the number of milliseconds that has passed since the beginning of 1970 is called a timestamp. It's a lightweight numeric representation of a date. We can always create a date from a timestamp using new Date(timestamp) and convert the existing Date object to a timestamp using the date.getTime() method (see below). Dates before 01.01.1970 have negative timestamps, e.g.: ```js run // 31 Dec 1969 let Dec31_1969 = new Date(-24 3600 1000); alert( Dec31_1969 ); ``` new Date(datestring) : If there is a single argument, and it's a string, then it is parsed automatically. The algorithm is the same as Date.parse uses, we'll cover it later. ```js run let date = new Date("2017-01-26"); alert(date); // The time is not set, so it's assumed to be midnight GMT and // is adjusted according to the timezone the code is run in // So the result could be // Thu Jan 26 2017 11:00:00 GMT+1100 (Australian Eastern Daylight Time) // or // Wed Jan 25 2017 16:00:00 GMT-0800 (Pacific Standard Time) ``` new Date(year, month, date, hours, minutes, seconds, ms) : Create the date with the given components in the local time zone. Only the first two arguments are obligatory. - The year should have 4 digits. For compatibility, 2 digits are also accepted and considered 19xx, e.g. 98 is the same as 1998 here, but always using 4 digits is strongly encouraged. - The month count starts with 0 (Jan), up to 11 (Dec). - The date parameter is actually the day of month, if absent then 1 is assumed. - If hours/minutes/seconds/ms is absent, they are assumed to be equal 0. For instance: ```js new Date(2011, 0, 1, 0, 0, 0, 0); // 1 Jan 2011, 00:00:00 new Date(2011, 0, 1); // the same, hours etc are 0 by default ``` The maximal precision is 1 ms (1/1000 sec): ```js run let date = new Date(2011, 0, 1, 2, 3, 4, 567); alert( date ); // 1.01.2011, 02:03:04.567 ``` ## Access date components There are methods to access the year, month and so on from the Date object: getFullYear() : Get the year (4 digits) getMonth() : Get the month, from 0 to 11. getDate() : Get the day of month, from 1 to 31, the name of the method does look a little bit strange. getHours(), getMinutes(), getSeconds(), getMilliseconds() : Get the corresponding time components. Additionally, we can get a day of week: getDay() : Get the day of week, from 0 (Sunday) to 6 (Saturday). The first day is always Sunday, in some countries that's not so, but can't be changed. All the methods above return the components relative to the local time zone. There are also their UTC-counterparts, that return day, month, year and so on for the time zone UTC+0: getUTCFullYear(), getUTCMonth(), getUTCDay(). Just insert the "UTC" right after "get". If your local time zone is shifted relative to UTC, then the code below shows different hours: Besides the given methods, there are two special ones that do not have a UTC-variant: getTime() : Returns the timestamp for the date -- a number of milliseconds passed from the January 1st of 1970 UTC+0. getTimezoneOffset() : Returns the difference between UTC and the local time zone, in minutes: ```js run // if you are in timezone UTC-1, outputs 60 // if you are in timezone UTC+3, outputs -180 alert( new Date().getTimezoneOffset() ); ``` ## Setting date components The following methods allow to set date/time components: - [setFullYear(year, [month], [date])](mdn:js/Date/setFullYear) - [setMonth(month, [date])](mdn:js/Date/setMonth) - setDate(date) - [setHours(hour, [min], [sec], [ms])](mdn:js/Date/setHours) - [setMinutes(min, [sec], [ms])](mdn:js/Date/setMinutes) - [setSeconds(sec, [ms])](mdn:js/Date/setSeconds) - setMilliseconds(ms) - setTime(milliseconds) (sets the whole date by milliseconds since 01.01.1970 UTC) Every one of them except setTime() has a UTC-variant, for instance: setUTCHours(). As we can see, some methods can set multiple components at once, for example setHours. The components that are not mentioned are not modified. For instance: ## Autocorrection The autocorrection is a very handy feature of Date objects. We can set out-of-range values, and it will auto-adjust itself. For instance: Out-of-range date components are distributed automatically. Let's say we need to increase the date "28 Feb 2016" by 2 days. It may be "2 Mar" or "1 Mar" in case of a leap-year. We don't need to think about it. Just add 2 days. The Date object will do the rest: That feature is often used to get the date after the given period of time. For instance, let's get the date for "70 seconds after now": We can also set zero or even negative values. For example: ## Date to number, date diff When a Date object is converted to number, it becomes the timestamp same as date.getTime(): The important side effect: dates can be subtracted, the result is their difference in ms. That can be used for time measurements: ## Date.now() If we only want to measure time, we don't need the Date object. There's a special method Date.now() that returns the current timestamp. It is semantically equivalent to new Date().getTime(), but it doesn't create an intermediate Date object. So it's faster and doesn't put pressure on garbage collection. It is used mostly for convenience or when performance matters, like in games in JavaScript or other specialized applications. So this is probably better: ## Benchmarking If we want a reliable benchmark of CPU-hungry function, we should be careful. For instance, let's measure two functions that calculate the difference between two dates: which one is faster? Such performance measurements are often called "benchmarks". These two do exactly the same thing, but one of them uses an explicit date.getTime() to get the date in ms, and the other one relies on a date-to-number transform. Their result is always the same. So, which one is faster? The first idea may be to run them many times in a row and measure the time difference. For our case, functions are very simple, so we have to do it at least 100000 times. Let's measure: Wow! Using getTime() is so much faster! That's because there's no type conversion, it is much easier for engines to optimize. Okay, we have something. But that's not a good benchmark yet. Imagine that at the time of running bench(diffSubtract) CPU was doing something in parallel, and it was taking resources. And by the time of running bench(diffGetTime) that work has finished. A pretty real scenario for a modern multi-process OS. As a result, the first benchmark will have less CPU resources than the second. That may lead to wrong results. For more reliable benchmarking, the whole pack of benchmarks should be rerun multiple times. For example, like this: Modern JavaScript engines start applying advanced optimizations only to "hot code" that executes many times (no need to optimize rarely executed things). So, in the example above, first executions are not well-optimized. We may want to add a heat-up run: ## Date.parse from a string The method Date.parse(str) can read a date from a string. The string format should be: YYYY-MM-DDTHH:mm:ss.sssZ, where: - YYYY-MM-DD -- is the date: year-month-day. - The character "T" is used as the delimiter. - HH:mm:ss.sss -- is the time: hours, minutes, seconds and milliseconds. - The optional 'Z' part denotes the time zone in the format +-hh:mm. A single letter Z would mean UTC+0. Shorter variants are also possible, like YYYY-MM-DD or YYYY-MM or even YYYY. The call to Date.parse(str) parses the string in the given format and returns the timestamp (number of milliseconds from 1 Jan 1970 UTC+0). If the format is invalid, returns NaN. For instance: We can instantly create a new Date object from the timestamp: ## Summary - Date and time in JavaScript are represented with the Date object. We can't create "only date" or "only time": Date objects always carry both. - Months are counted from zero (yes, January is a zero month). - Days of week in getDay() are also counted from zero (that's Sunday). - Date auto-corrects itself when out-of-range components are set. Good for adding/subtracting days/months/hours. - Dates can be subtracted, giving their difference in milliseconds. That's because a Date becomes the timestamp when converted to a number. - Use Date.now() to get the current timestamp fast. Note that unlike many other systems, timestamps in JavaScript are in milliseconds, not in seconds. Sometimes we need more precise time measurements. JavaScript itself does not have a way to measure time in microseconds (1 millionth of a second), but most environments provide it. For instance, browser has performance.now() that gives the number of milliseconds from the start of page loading with microsecond precision (3 digits after the point): Node.js has microtime module and other ways. Technically, almost any device and environment allows to get more precision, it's just not in Date.

web,development

JSON methods, toJSON

Let's say we have a complex object, and we'd like to convert it into a string, to send it over a network, or just to output it for logging purposes. Naturally, such a string should include all important properties. We could implement the conversion like this: ...But in the process of development, new properties are added, old properties are renamed and removed. Updating such toString every time can become a pain. We could try to loop over properties in it, but what if the object is complex and has nested objects in properties? We'd need to implement their conversion as well. Luckily, there's no need to write the code to handle all this. The task has been solved already. ## JSON.stringify The JSON (JavaScript Object Notation) is a general format to represent values and objects. It is described as in RFC 4627 standard. Initially it was made for JavaScript, but many other languages have libraries to handle it as well. So it's easy to use JSON for data exchange when the client uses JavaScript and the server is written on Ruby/PHP/Java/Whatever. JavaScript provides methods: - JSON.stringify to convert objects into JSON. - JSON.parse to convert JSON back into an object. For instance, here we JSON.stringify a student: The method JSON.stringify(student) takes the object and converts it into a string. The resulting json string is called a JSON-encoded or serialized or stringified or marshalled object. We are ready to send it over the wire or put into a plain data store. Please note that a JSON-encoded object has several important differences from the object literal: - Strings use double quotes. No single quotes or backticks in JSON. So 'John' becomes "John". - Object property names are double-quoted also. That's obligatory. So age:30 becomes "age":30. JSON.stringify can be applied to primitives as well. JSON supports following data types: - Objects { ... } - Arrays [ ... ] - Primitives: - strings, - numbers, - boolean values true/false, - null. For instance: JSON is data-only language-independent specification, so some JavaScript-specific object properties are skipped by JSON.stringify. Namely: - Function properties (methods). - Symbolic keys and values. - Properties that store undefined. Usually that's fine. If that's not what we want, then soon we'll see how to customize the process. The great thing is that nested objects are supported and converted automatically. For instance: The important limitation: there must be no circular references. For instance: Here, the conversion fails, because of circular reference: room.occupiedBy references meetup, and meetup.place references room: ## Excluding and transforming: replacer The full syntax of JSON.stringify is: value : A value to encode. replacer : Array of properties to encode or a mapping function function(key, value). space : Amount of space to use for formatting Most of the time, JSON.stringify is used with the first argument only. But if we need to fine-tune the replacement process, like to filter out circular references, we can use the second argument of JSON.stringify. If we pass an array of properties to it, only these properties will be encoded. For instance: Here we are probably too strict. The property list is applied to the whole object structure. So the objects in participants are empty, because name is not in the list. Let's include in the list every property except room.occupiedBy that would cause the circular reference: Now everything except occupiedBy is serialized. But the list of properties is quite long. Fortunately, we can use a function instead of an array as the replacer. The function will be called for every (key, value) pair and should return the "replaced" value, which will be used instead of the original one. Or undefined if the value is to be skipped. In our case, we can return value "as is" for everything except occupiedBy. To ignore occupiedBy, the code below returns undefined: Please note that replacer function gets every key/value pair including nested objects and array items. It is applied recursively. The value of this inside replacer is the object that contains the current property. The first call is special. It is made using a special "wrapper object": {"": meetup}. In other words, the first (key, value) pair has an empty key, and the value is the target object as a whole. That's why the first line is ":[object Object]" in the example above. The idea is to provide as much power for replacer as possible: it has a chance to analyze and replace/skip even the whole object if necessary. ## Formatting: space The third argument of JSON.stringify(value, replacer, space) is the number of spaces to use for pretty formatting. Previously, all stringified objects had no indents and extra spaces. That's fine if we want to send an object over a network. The space argument is used exclusively for a nice output. Here space = 2 tells JavaScript to show nested objects on multiple lines, with indentation of 2 spaces inside an object: The third argument can also be a string. In this case, the string is used for indentation instead of a number of spaces. The space parameter is used solely for logging and nice-output purposes. ## Custom "toJSON" Like toString for string conversion, an object may provide method toJSON for to-JSON conversion. JSON.stringify automatically calls it if available. For instance: Here we can see that date (1) became a string. That's because all dates have a built-in toJSON method which returns such kind of string. Now let's add a custom toJSON for our object room (2): As we can see, toJSON is used both for the direct call JSON.stringify(room) and when room is nested in another encoded object. ## JSON.parse To decode a JSON-string, we need another method named JSON.parse. The syntax: str : JSON-string to parse. reviver : Optional function(key,value) that will be called for each (key, value) pair and can transform the value. For instance: Or for nested objects: The JSON may be as complex as necessary, objects and arrays can include other objects and arrays. But they must obey the same JSON format. Here are typical mistakes in hand-written JSON (sometimes we have to write it for debugging purposes): Besides, JSON does not support comments. Adding a comment to JSON makes it invalid. There's another format named JSON5, which allows unquoted keys, comments etc. But this is a standalone library, not in the specification of the language. The regular JSON is that strict not because its developers are lazy, but to allow easy, reliable and very fast implementations of the parsing algorithm. ## Using reviver Imagine, we got a stringified meetup object from the server. It looks like this: ...And now we need to deserialize it, to turn back into JavaScript object. Let's do it by calling JSON.parse: Whoops! An error! The value of meetup.date is a string, not a Date object. How could JSON.parse know that it should transform that string into a Date? Let's pass to JSON.parse the reviving function as the second argument, that returns all values "as is", but date will become a Date: By the way, that works for nested objects as well: ## Summary - JSON is a data format that has its own independent standard and libraries for most programming languages. - JSON supports plain objects, arrays, strings, numbers, booleans, and null. - JavaScript provides methods JSON.stringify to serialize into JSON and JSON.parse to read from JSON. - Both methods support transformer functions for smart reading/writing. - If an object has toJSON, then it is called by JSON.stringify.

json

Recursion and stack

Let's return to functions and study them more in-depth. Our first topic will be recursion. If you are not new to programming, then it is probably familiar and you could skip this chapter. Recursion is a programming pattern that is useful in situations when a task can be naturally split into several tasks of the same kind, but simpler. Or when a task can be simplified into an easy action plus a simpler variant of the same task. Or, as we'll see soon, to deal with certain data structures. When a function solves a task, in the process it can call many other functions. A partial case of this is when a function calls itself. That's called recursion. ## Two ways of thinking For something simple to start with -- let's write a function pow(x, n) that raises x to a natural power of n. In other words, multiplies x by itself n times. There are two ways to implement it. 1. Iterative thinking: the for loop: ```js run function pow(x, n) { let result = 1; // multiply result by x n times in the loop for (let i = 0; i < n; i++) { result *= x; return result; alert( pow(2, 3) ); // 8 ``` 2. Recursive thinking: simplify the task and call self: ```js run function pow(x, n) { if (n == 1) { return x; } else { return x * pow(x, n - 1); alert( pow(2, 3) ); // 8 ``` Please note how the recursive variant is fundamentally different. When pow(x, n) is called, the execution splits into two branches: 1. If n == 1, then everything is trivial. It is called the base of recursion, because it immediately produces the obvious result: pow(x, 1) equals x. 2. Otherwise, we can represent pow(x, n) as x pow(x, n - 1). In maths, one would write <code>x<sup>n</sup> = x x<sup>n-1</sup></code>. This is called a recursive step: we transform the task into a simpler action (multiplication by x) and a simpler call of the same task (pow with lower n). Next steps simplify it further and further until n reaches 1. We can also say that pow recursively calls itself till n == 1. For example, to calculate pow(2, 4) the recursive variant does these steps: 1. pow(2, 4) = 2 * pow(2, 3) 2. pow(2, 3) = 2 * pow(2, 2) 3. pow(2, 2) = 2 * pow(2, 1) 4. pow(2, 1) = 2 So, the recursion reduces a function call to a simpler one, and then -- to even more simpler, and so on, until the result becomes obvious. function pow(x, n) { return (n == 1) ? x : (x * pow(x, n - 1)); The maximal number of nested calls (including the first one) is called recursion depth. In our case, it will be exactly n. The maximal recursion depth is limited by JavaScript engine. We can rely on it being 10000, some engines allow more, but 100000 is probably out of limit for the majority of them. There are automatic optimizations that help alleviate this ("tail calls optimizations"), but they are not yet supported everywhere and work only in simple cases. That limits the application of recursion, but it still remains very wide. There are many tasks where recursive way of thinking gives simpler code, easier to maintain. ## The execution context and stack Now let's examine how recursive calls work. For that we'll look under the hood of functions. The information about the process of execution of a running function is stored in its execution context. The execution context is an internal data structure that contains details about the execution of a function: where the control flow is now, the current variables, the value of this (we don't use it here) and few other internal details. One function call has exactly one execution context associated with it. When a function makes a nested call, the following happens: - The current function is paused. - The execution context associated with it is remembered in a special data structure called execution context stack. - The nested call executes. - After it ends, the old execution context is retrieved from the stack, and the outer function is resumed from where it stopped. Let's see what happens during the pow(2, 3) call. ### pow(2, 3) In the beginning of the call pow(2, 3) the execution context will store variables: x = 2, n = 3, the execution flow is at line 1 of the function. We can sketch it as: <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 1 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> That's when the function starts to execute. The condition n == 1 is falsy, so the flow continues into the second branch of if: The variables are same, but the line changes, so the context is now: <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 5 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> To calculate x * pow(x, n - 1), we need to make a subcall of pow with new arguments pow(2, 2). ### pow(2, 2) To do a nested call, JavaScript remembers the current execution context in the execution context stack. Here we call the same function pow, but it absolutely doesn't matter. The process is the same for all functions: 1. The current context is "remembered" on top of the stack. 2. The new context is created for the subcall. 3. When the subcall is finished -- the previous context is popped from the stack, and its execution continues. Here's the context stack when we entered the subcall pow(2, 2): <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 2, at line 1 }</span> <span class="function-execution-context-call">pow(2, 2)</span> </li> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 5 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> The new current execution context is on top (and bold), and previous remembered contexts are below. When we finish the subcall -- it is easy to resume the previous context, because it keeps both variables and the exact place of the code where it stopped. ### pow(2, 1) The process repeats: a new subcall is made at line 5, now with arguments x=2, n=1. A new execution context is created, the previous one is pushed on top of the stack: <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 1, at line 1 }</span> <span class="function-execution-context-call">pow(2, 1)</span> </li> <li> <span class="function-execution-context">Context: { x: 2, n: 2, at line 5 }</span> <span class="function-execution-context-call">pow(2, 2)</span> </li> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 5 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> There are 2 old contexts now and 1 currently running for pow(2, 1). ### The exit During the execution of pow(2, 1), unlike before, the condition n == 1 is truthy, so the first branch of if works: There are no more nested calls, so the function finishes, returning 2. As the function finishes, its execution context is not needed anymore, so it's removed from the memory. The previous one is restored off the top of the stack: <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 2, at line 5 }</span> <span class="function-execution-context-call">pow(2, 2)</span> </li> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 5 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> The execution of pow(2, 2) is resumed. It has the result of the subcall pow(2, 1), so it also can finish the evaluation of x * pow(x, n - 1), returning 4. Then the previous context is restored: <ul class="function-execution-context-list"> <li> <span class="function-execution-context">Context: { x: 2, n: 3, at line 5 }</span> <span class="function-execution-context-call">pow(2, 3)</span> </li> </ul> When it finishes, we have a result of pow(2, 3) = 8. The recursion depth in this case was: 3. As we can see from the illustrations above, recursion depth equals the maximal number of context in the stack. Note the memory requirements. Contexts take memory. In our case, raising to the power of n actually requires the memory for n contexts, for all lower values of n. A loop-based algorithm is more memory-saving: The iterative pow uses a single context changing i and result in the process. Its memory requirements are small, fixed and do not depend on n. Any recursion can be rewritten as a loop. The loop variant usually can be made more effective. ...But sometimes the rewrite is non-trivial, especially when a function uses different recursive subcalls depending on conditions and merges their results or when the branching is more intricate. And the optimization may be unneeded and totally not worth the efforts. Recursion can give a shorter code, easier to understand and support. Optimizations are not required in every place, mostly we need a good code, that's why it's used. ## Recursive traversals Another great application of the recursion is a recursive traversal. Imagine, we have a company. The staff structure can be presented as an object: In other words, a company has departments. - A department may have an array of staff. For instance, sales department has 2 employees: John and Alice. - Or a department may split into subdepartments, like development has two branches: sites and internals. Each of them has their own staff. - It is also possible that when a subdepartment grows, it divides into subsubdepartments (or teams). For instance, the sites department in the future may be split into teams for siteA and siteB. And they, potentially, can split even more. That's not on the picture, just something to have in mind. Now let's say we want a function to get the sum of all salaries. How can we do that? An iterative approach is not easy, because the structure is not simple. The first idea may be to make a for loop over company with nested subloop over 1st level departments. But then we need more nested subloops to iterate over the staff in 2nd level departments like sites... And then another subloop inside those for 3rd level departments that might appear in the future? If we put 3-4 nested subloops in the code to traverse a single object, it becomes rather ugly. Let's try recursion. As we can see, when our function gets a department to sum, there are two possible cases: 1. Either it's a "simple" department with an array of people -- then we can sum the salaries in a simple loop. 2. Or it's an object with N subdepartments -- then we can make N recursive calls to get the sum for each of the subdeps and combine the results. The 1st case is the base of recursion, the trivial case, when we get an array. The 2nd case when we get an object is the recursive step. A complex task is split into subtasks for smaller departments. They may in turn split again, but sooner or later the split will finish at (1). The algorithm is probably even easier to read from the code: The code is short and easy to understand (hopefully?). That's the power of recursion. It also works for any level of subdepartment nesting. Here's the diagram of calls: We can easily see the principle: for an object {...} subcalls are made, while arrays [...] are the "leaves" of the recursion tree, they give immediate result. Note that the code uses smart features that we've covered before: - Method arr.reduce explained in the chapter <info:array-methods> to get the sum of the array. - Loop for(val of Object.values(obj)) to iterate over object values: Object.values returns an array of them. ## Recursive structures A recursive (recursively-defined) data structure is a structure that replicates itself in parts. We've just seen it in the example of a company structure above. A company department is: - Either an array of people. - Or an object with departments. For web-developers there are much better-known examples: HTML and XML documents. In the HTML document, an HTML-tag may contain a list of: - Text pieces. - HTML-comments. - Other HTML-tags (that in turn may contain text pieces/comments or other tags etc). That's once again a recursive definition. For better understanding, we'll cover one more recursive structure named "Linked list" that might be a better alternative for arrays in some cases. ### Linked list Imagine, we want to store an ordered list of objects. The natural choice would be an array: ...But there's a problem with arrays. The "delete element" and "insert element" operations are expensive. For instance, arr.unshift(obj) operation has to renumber all elements to make room for a new obj, and if the array is big, it takes time. Same with arr.shift(). The only structural modifications that do not require mass-renumbering are those that operate with the end of array: arr.push/pop. So an array can be quite slow for big queues, when we have to work with the beginning. Alternatively, if we really need fast insertion/deletion, we can choose another data structure called a linked list. The linked list element is recursively defined as an object with: - value. - next property referencing the next linked list element or null if that's the end. For instance: Graphical representation of the list: An alternative code for creation: Here we can even more clearly see that there are multiple objects, each one has the value and next pointing to the neighbour. The list variable is the first object in the chain, so following next pointers from it we can reach any element. The list can be easily split into multiple parts and later joined back: To join: And surely we can insert or remove items in any place. For instance, to prepend a new value, we need to update the head of the list: To remove a value from the middle, change next of the previous one: We made list.next jump over 1 to value 2. The value 1 is now excluded from the chain. If it's not stored anywhere else, it will be automatically removed from the memory. Unlike arrays, there's no mass-renumbering, we can easily rearrange elements. Naturally, lists are not always better than arrays. Otherwise everyone would use only lists. The main drawback is that we can't easily access an element by its number. In an array that's easy: arr[n] is a direct reference. But in the list we need to start from the first item and go next N times to get the Nth element. ...But we don't always need such operations. For instance, when we need a queue or even a deque -- the ordered structure that must allow very fast adding/removing elements from both ends, but access to its middle is not needed. Lists can be enhanced: - We can add property prev in addition to next to reference the previous element, to move back easily. - We can also add a variable named tail referencing the last element of the list (and update it when adding/removing elements from the end). - ...The data structure may vary according to our needs. ## Summary Terms: - Recursion is a programming term that means calling a function from itself. Recursive functions can be used to solve tasks in elegant ways. When a function calls itself, that's called a recursion step. The basis of recursion is function arguments that make the task so simple that the function does not make further calls. - A recursively-defined data structure is a data structure that can be defined using itself. For instance, the linked list can be defined as a data structure consisting of an object referencing a list (or null). ```js list = { value, next -> list } ``` Trees like HTML elements tree or the department tree from this chapter are also naturally recursive: they have branches and every branch can have other branches. Recursive functions can be used to walk them as we've seen in the sumSalary example. Any recursive function can be rewritten into an iterative one. And that's sometimes required to optimize stuff. But for many tasks a recursive solution is fast enough and easier to write and support.

web,development

Rest parameters and spread syntax

Many JavaScript built-in functions support an arbitrary number of arguments. For instance: - Math.max(arg1, arg2, ..., argN) -- returns the greatest of the arguments. - Object.assign(dest, src1, ..., srcN) -- copies properties from src1..N into dest. - ...and so on. In this chapter we'll learn how to do the same. And also, how to pass arrays to such functions as parameters. ## Rest parameters ... A function can be called with any number of arguments, no matter how it is defined. Like here: There will be no error because of "excessive" arguments. But of course in the result only the first two will be counted, so the result in the code above is 3. The rest of the parameters can be included in the function definition by using three dots ... followed by the name of the array that will contain them. The dots literally mean "gather the remaining parameters into an array". For instance, to gather all arguments into array args: We can choose to get the first parameters as variables, and gather only the rest. Here the first two arguments go into variables and the rest go into titles array: function f(arg1, ...rest, arg2) { // arg2 after ...rest ?! // error ## The "arguments" variable There is also a special array-like object named arguments that contains all arguments by their index. For instance: In old times, rest parameters did not exist in the language, and using arguments was the only way to get all arguments of the function. And it still works, we can find it in the old code. But the downside is that although arguments is both array-like and iterable, it's not an array. It does not support array methods, so we can't call arguments.map(...) for example. Also, it always contains all arguments. We can't capture them partially, like we did with rest parameters. So when we need these features, then rest parameters are preferred. function f() { let showArg = () => alert(arguments[0]); showArg(); f(1); // 1 ## Spread syntax [#spread-syntax] We've just seen how to get an array from the list of parameters. But sometimes we need to do exactly the reverse. For instance, there's a built-in function Math.max that returns the greatest number from a list: Now let's say we have an array [3, 5, 1]. How do we call Math.max with it? Passing it "as is" won't work, because Math.max expects a list of numeric arguments, not a single array: And surely we can't manually list items in the code Math.max(arr[0], arr[1], arr[2]), because we may be unsure how many there are. As our script executes, there could be a lot, or there could be none. And that would get ugly. Spread syntax to the rescue! It looks similar to rest parameters, also using ..., but does quite the opposite. When ...arr is used in the function call, it "expands" an iterable object arr into the list of arguments. For Math.max: We also can pass multiple iterables this way: We can even combine the spread syntax with normal values: Also, the spread syntax can be used to merge arrays: In the examples above we used an array to demonstrate the spread syntax, but any iterable will do. For instance, here we use the spread syntax to turn the string into array of characters: The spread syntax internally uses iterators to gather elements, the same way as for..of does. So, for a string, for..of returns characters and ...str becomes "H","e","l","l","o". The list of characters is passed to array initializer [...str]. For this particular task we could also use Array.from, because it converts an iterable (like a string) into an array: The result is the same as [...str]. But there's a subtle difference between Array.from(obj) and [...obj]: - Array.from operates on both array-likes and iterables. - The spread syntax works only with iterables. So, for the task of turning something into an array, Array.from tends to be more universal. ## Copy an array/object Remember when we talked about Object.assign() in the past? It is possible to do the same thing with the spread syntax. Note that it is possible to do the same thing to make a copy of an object: This way of copying an object is much shorter than let objCopy = Object.assign({}, obj) or for an array let arrCopy = Object.assign([], arr) so we prefer to use it whenever we can. ## Summary When we see "..." in the code, it is either rest parameters or the spread syntax. There's an easy way to distinguish between them: - When ... is at the end of function parameters, it's "rest parameters" and gathers the rest of the list of arguments into an array. - When ... occurs in a function call or alike, it's called a "spread syntax" and expands an array into a list. Use patterns: - Rest parameters are used to create functions that accept any number of arguments. - The spread syntax is used to pass an array to functions that normally require a list of many arguments. Together they help to travel between a list and an array of parameters with ease. All arguments of a function call are also available in "old-style" arguments: array-like iterable object.

web,development

Variable scope, closure

JavaScript is a very function-oriented language. It gives us a lot of freedom. A function can be created at any moment, passed as an argument to another function, and then called from a totally different place of code later. We already know that a function can access variables outside of it ("outer" variables). But what happens if outer variables change since a function is created? Will the function get newer values or the old ones? And what if a function is passed along as an argument and called from another place of code, will it get access to outer variables at the new place? Let's expand our knowledge to understand these scenarios and more complex ones. ## Code blocks If a variable is declared inside a code block {...}, it's only visible inside that block. For example: We can use this to isolate a piece of code that does its own task, with variables that only belong to it: // show message let message = "Hello"; alert(message); // show another message let message = "Goodbye"; // Error: variable already declared alert(message); For if, for, while and so on, variables declared in {...} are also only visible inside: Here, after if finishes, the alert below won't see the phrase, hence the error. That's great, as it allows us to create block-local variables, specific to an if branch. The similar thing holds true for for and while loops: Visually, let i is outside of {...}. But the for construct is special here: the variable, declared inside it, is considered a part of the block. ## Nested functions A function is called "nested" when it is created inside another function. It is easily possible to do this with JavaScript. We can use it to organize our code, like this: Here the nested function getFullName() is made for convenience. It can access the outer variables and so can return the full name. Nested functions are quite common in JavaScript. What's much more interesting, a nested function can be returned: either as a property of a new object or as a result by itself. It can then be used somewhere else. No matter where, it still has access to the same outer variables. Below, makeCounter creates the "counter" function that returns the next number on each invocation: Despite being simple, slightly modified variants of that code have practical uses, for instance, as a random number generator to generate random values for automated tests. How does this work? If we create multiple counters, will they be independent? What's going on with the variables here? Understanding such things is great for the overall knowledge of JavaScript and beneficial for more complex scenarios. So let's go a bit in-depth. ## Lexical Environment For clarity, the explanation is split into multiple steps. ### Step 1. Variables In JavaScript, every running function, code block {...}, and the script as a whole have an internal (hidden) associated object known as the Lexical Environment. The Lexical Environment object consists of two parts: 1. Environment Record -- an object that stores all local variables as its properties (and some other information like the value of this). 2. A reference to the outer lexical environment, the one associated with the outer code. A "variable" is just a property of the special internal object, Environment Record. "To get or change a variable" means "to get or change a property of that object". In this simple code without functions, there is only one Lexical Environment: This is the so-called global Lexical Environment, associated with the whole script. On the picture above, the rectangle means Environment Record (variable store) and the arrow means the outer reference. The global Lexical Environment has no outer reference, that's why the arrow points to null. As the code starts executing and goes on, the Lexical Environment changes. Here's a little bit longer code: Rectangles on the right-hand side demonstrate how the global Lexical Environment changes during the execution: 1. When the script starts, the Lexical Environment is pre-populated with all declared variables. - Initially, they are in the "Uninitialized" state. That's a special internal state, it means that the engine knows about the variable, but it cannot be referenced until it has been declared with let. It's almost the same as if the variable didn't exist. 2. Then let phrase definition appears. There's no assignment yet, so its value is undefined. We can use the variable from this point forward. 3. phrase is assigned a value. 4. phrase changes the value. Everything looks simple for now, right? - A variable is a property of a special internal object, associated with the currently executing block/function/script. - Working with variables is actually working with the properties of that object. ### Step 2. Function Declarations A function is also a value, like a variable. The difference is that a Function Declaration is instantly fully initialized. When a Lexical Environment is created, a Function Declaration immediately becomes a ready-to-use function (unlike let, that is unusable till the declaration). That's why we can use a function, declared as Function Declaration, even before the declaration itself. For example, here's the initial state of the global Lexical Environment when we add a function: Naturally, this behavior only applies to Function Declarations, not Function Expressions where we assign a function to a variable, such as let say = function(name).... ### Step 3. Inner and outer Lexical Environment When a function runs, at the beginning of the call, a new Lexical Environment is created automatically to store local variables and parameters of the call. For instance, for say("John"), it looks like this (the execution is at the line, labelled with an arrow): <!-- ```js let phrase = "Hello"; function say(name) { alert( ${phrase}, ${name} ); say("John"); // Hello, John ```--> During the function call we have two Lexical Environments: the inner one (for the function call) and the outer one (global): - The inner Lexical Environment corresponds to the current execution of say. It has a single property: name, the function argument. We called say("John"), so the value of the name is "John". - The outer Lexical Environment is the global Lexical Environment. It has the phrase variable and the function itself. The inner Lexical Environment has a reference to the outer one. When the code wants to access a variable -- the inner Lexical Environment is searched first, then the outer one, then the more outer one and so on until the global one. If a variable is not found anywhere, that's an error in strict mode (without use strict, an assignment to a non-existing variable creates a new global variable, for compatibility with old code). In this example the search proceeds as follows: - For the name variable, the alert inside say finds it immediately in the inner Lexical Environment. - When it wants to access phrase, then there is no phrase locally, so it follows the reference to the outer Lexical Environment and finds it there. ### Step 4. Returning a function Let's return to the makeCounter example. At the beginning of each makeCounter() call, a new Lexical Environment object is created, to store variables for this makeCounter run. So we have two nested Lexical Environments, just like in the example above: What's different is that, during the execution of makeCounter(), a tiny nested function is created of only one line: return count++. We don't run it yet, only create. All functions remember the Lexical Environment in which they were made. Technically, there's no magic here: all functions have the hidden property named ``, that keeps the reference to the Lexical Environment where the function was created: So, counter. has the reference to {count: 0} Lexical Environment. That's how the function remembers where it was created, no matter where it's called. The `` reference is set once and forever at function creation time. Later, when counter() is called, a new Lexical Environment is created for the call, and its outer Lexical Environment reference is taken from counter.: Now when the code inside counter() looks for count variable, it first searches its own Lexical Environment (empty, as there are no local variables there), then the Lexical Environment of the outer makeCounter() call, where it finds and changes it. A variable is updated in the Lexical Environment where it lives. Here's the state after the execution: If we call counter() multiple times, the count variable will be increased to 2, 3 and so on, at the same place. ## Garbage collection Usually, a Lexical Environment is removed from memory with all the variables after the function call finishes. That's because there are no references to it. As any JavaScript object, it's only kept in memory while it's reachable. However, if there's a nested function that is still reachable after the end of a function, then it has `` property that references the lexical environment. In that case the Lexical Environment is still reachable even after the completion of the function, so it stays alive. For example: Please note that if f() is called many times, and resulting functions are saved, then all corresponding Lexical Environment objects will also be retained in memory. In the code below, all 3 of them: A Lexical Environment object dies when it becomes unreachable (just like any other object). In other words, it exists only while there's at least one nested function referencing it. In the code below, after the nested function is removed, its enclosing Lexical Environment (and hence the value) is cleaned from memory: ### Real-life optimizations As we've seen, in theory while a function is alive, all outer variables are also retained. But in practice, JavaScript engines try to optimize that. They analyze variable usage and if it's obvious from the code that an outer variable is not used -- it is removed. An important side effect in V8 (Chrome, Edge, Opera) is that such variable will become unavailable in debugging. Try running the example below in Chrome with the Developer Tools open. When it pauses, in the console type alert(value). As you could see -- there is no such variable! In theory, it should be accessible, but the engine optimized it out. That may lead to funny (if not such time-consuming) debugging issues. One of them -- we can see a same-named outer variable instead of the expected one: This feature of V8 is good to know. If you are debugging with Chrome/Edge/Opera, sooner or later you will meet it. That is not a bug in the debugger, but rather a special feature of V8. Perhaps it will be changed sometime. You can always check for it by running the examples on this page.

variable

The old "var"

In the very first chapter about variables, we mentioned three ways of variable declaration: 1. let 2. const 3. var The var declaration is similar to let. Most of the time we can replace let by var or vice-versa and expect things to work: But internally var is a very different beast, that originates from very old times. It's generally not used in modern scripts, but still lurks in the old ones. If you don't plan on meeting such scripts you may even skip this chapter or postpone it. On the other hand, it's important to understand differences when migrating old scripts from var to let, to avoid odd errors. ## "var" has no block scope Variables, declared with var, are either function-scoped or global-scoped. They are visible through blocks. For instance: As var ignores code blocks, we've got a global variable test. If we used let test instead of var test, then the variable would only be visible inside if: The same thing for loops: var cannot be block- or loop-local: If a code block is inside a function, then var becomes a function-level variable: As we can see, var pierces through if, for or other code blocks. That's because a long time ago in JavaScript, blocks had no Lexical Environments, and var is a remnant of that. ## "var" tolerates redeclarations If we declare the same variable with let twice in the same scope, that's an error: With var, we can redeclare a variable any number of times. If we use var with an already-declared variable, it's just ignored: ## "var" variables can be declared below their use var declarations are processed when the function starts (or script starts for globals). In other words, var variables are defined from the beginning of the function, no matter where the definition is (assuming that the definition is not in the nested function). So this code: ...Is technically the same as this (moved var phrase above): ...Or even as this (remember, code blocks are ignored): People also call such behavior "hoisting" (raising), because all var are "hoisted" (raised) to the top of the function. So in the example above, if (false) branch never executes, but that doesn't matter. The var inside it is processed in the beginning of the function, so at the moment of (*) the variable exists. Declarations are hoisted, but assignments are not. That's best demonstrated with an example: The line var phrase = "Hello" has two actions in it: 1. Variable declaration var 2. Variable assignment =. The declaration is processed at the start of function execution ("hoisted"), but the assignment always works at the place where it appears. So the code works essentially like this: Because all var declarations are processed at the function start, we can reference them at any place. But variables are undefined until the assignments. In both examples above, alert runs without an error, because the variable phrase exists. But its value is not yet assigned, so it shows undefined. ## IIFE In the past, as there was only var, and it has no block-level visibility, programmers invented a way to emulate it. What they did was called "immediately-invoked function expressions" (abbreviated as IIFE). That's not something we should use nowadays, but you can find them in old scripts. An IIFE looks like this: Here, a Function Expression is created and immediately called. So the code executes right away and has its own private variables. The Function Expression is wrapped with parenthesis (function {...}), because when JavaScript engine encounters "function" in the main code, it understands it as the start of a Function Declaration. But a Function Declaration must have a name, so this kind of code will give an error: Even if we say: "okay, let's add a name", that won't work, as JavaScript does not allow Function Declarations to be called immediately: So, the parentheses around the function is a trick to show JavaScript that the function is created in the context of another expression, and hence it's a Function Expression: it needs no name and can be called immediately. There exist other ways besides parentheses to tell JavaScript that we mean a Function Expression: In all the above cases we declare a Function Expression and run it immediately. Let's note again: nowadays there's no reason to write such code. ## Summary There are two main differences of var compared to let/const: 1. var variables have no block scope, their visibility is scoped to current function, or global, if declared outside function. 2. var declarations are processed at function start (script start for globals). There's one more very minor difference related to the global object, that we'll cover in the next chapter. These differences make var worse than let most of the time. Block-level variables is such a great thing. That's why let was introduced in the standard long ago, and is now a major way (along with const) to declare a variable.

web,development

Global object

The global object provides variables and functions that are available anywhere. By default, those that are built into the language or the environment. In a browser it is named window, for Node.js it is global, for other environments it may have another name. Recently, globalThis was added to the language, as a standardized name for a global object, that should be supported across all environments. It's supported in all major browsers. We'll use window here, assuming that our environment is a browser. If your script may run in other environments, it's better to use globalThis instead. All properties of the global object can be accessed directly: In a browser, global functions and variables declared with var (not let/const!) become the property of the global object: Function declarations have the same effect (statements with function keyword in the main code flow, not function expressions). Please don't rely on that! This behavior exists for compatibility reasons. Modern scripts use JavaScript modules where such a thing doesn't happen. If we used let instead, such thing wouldn't happen: If a value is so important that you'd like to make it available globally, write it directly as a property: That said, using global variables is generally discouraged. There should be as few global variables as possible. The code design where a function gets "input" variables and produces certain "outcome" is clearer, less prone to errors and easier to test than if it uses outer or global variables. ## Using for polyfills We use the global object to test for support of modern language features. For instance, test if a built-in Promise object exists (it doesn't in really old browsers): If there's none (say, we're in an old browser), we can create "polyfills": add functions that are not supported by the environment, but exist in the modern standard. ## Summary - The global object holds variables that should be available everywhere. That includes JavaScript built-ins, such as Array and environment-specific values, such as window.innerHeight -- the window height in the browser. - The global object has a universal name globalThis. ...But more often is referred by "old-school" environment-specific names, such as window (browser) and global (Node.js). - We should store values in the global object only if they're truly global for our project. And keep their number at minimum. - In-browser, unless we're using modules, global functions and variables declared with var become a property of the global object. - To make our code future-proof and easier to understand, we should access properties of the global object directly, as window.x.

object

Function object, NFE

As we already know, a function in JavaScript is a value. Every value in JavaScript has a type. What type is a function? In JavaScript, functions are objects. A good way to imagine functions is as callable "action objects". We can not only call them, but also treat them as objects: add/remove properties, pass by reference etc. ## The "name" property Function objects contain some useable properties. For instance, a function's name is accessible as the "name" property: What's kind of funny, the name-assigning logic is smart. It also assigns the correct name to a function even if it's created without one, and then immediately assigned: It also works if the assignment is done via a default value: In the specification, this feature is called a "contextual name". If the function does not provide one, then in an assignment it is figured out from the context. Object methods have names too: There's no magic though. There are cases when there's no way to figure out the right name. In that case, the name property is empty, like here: In practice, however, most functions do have a name. ## The "length" property There is another built-in property "length" that returns the number of function parameters, for instance: Here we can see that rest parameters are not counted. The length property is sometimes used for introspection in functions that operate on other functions. For instance, in the code below the ask function accepts a question to ask and an arbitrary number of handler functions to call. Once a user provides their answer, the function calls the handlers. We can pass two kinds of handlers: - A zero-argument function, which is only called when the user gives a positive answer. - A function with arguments, which is called in either case and returns an answer. To call handler the right way, we examine the handler.length property. The idea is that we have a simple, no-arguments handler syntax for positive cases (most frequent variant), but are able to support universal handlers as well: This is a particular case of so-called polymorphism) -- treating arguments differently depending on their type or, in our case depending on the length. The idea does have a use in JavaScript libraries. ## Custom properties We can also add properties of our own. Here we add the counter property to track the total calls count: Function properties can replace closures sometimes. For instance, we can rewrite the counter function example from the chapter <info:closure> to use a function property: The count is now stored in the function directly, not in its outer Lexical Environment. Is it better or worse than using a closure? The main difference is that if the value of count lives in an outer variable, then external code is unable to access it. Only nested functions may modify it. And if it's bound to a function, then such a thing is possible: So the choice of implementation depends on our aims. ## Named Function Expression Named Function Expression, or NFE, is a term for Function Expressions that have a name. For instance, let's take an ordinary Function Expression: And add a name to it: Did we achieve anything here? What's the purpose of that additional "func" name? First let's note, that we still have a Function Expression. Adding the name "func" after function did not make it a Function Declaration, because it is still created as a part of an assignment expression. Adding such a name also did not break anything. The function is still available as sayHi(): There are two special things about the name func, that are the reasons for it: 1. It allows the function to reference itself internally. 2. It is not visible outside of the function. For instance, the function sayHi below calls itself again with "Guest" if no who is provided: Why do we use func? Maybe just use sayHi for the nested call? Actually, in most cases we can: The problem with that code is that sayHi may change in the outer code. If the function gets assigned to another variable instead, the code will start to give errors: That happens because the function takes sayHi from its outer lexical environment. There's no local sayHi, so the outer variable is used. And at the moment of the call that outer sayHi is null. The optional name which we can put into the Function Expression is meant to solve exactly these kinds of problems. Let's use it to fix our code: Now it works, because the name "func" is function-local. It is not taken from outside (and not visible there). The specification guarantees that it will always reference the current function. The outer code still has its variable sayHi or welcome. And func is an "internal function name", the way for the function to call itself reliably. ## Summary Functions are objects. Here we covered their properties: - name -- the function name. Usually taken from the function definition, but if there's none, JavaScript tries to guess it from the context (e.g. an assignment). - length -- the number of arguments in the function definition. Rest parameters are not counted. If the function is declared as a Function Expression (not in the main code flow), and it carries the name, then it is called a Named Function Expression. The name can be used inside to reference itself, for recursive calls or such. Also, functions may carry additional properties. Many well-known JavaScript libraries make great use of this feature. They create a "main" function and attach many other "helper" functions to it. For instance, the jQuery library creates a function named $. The lodash library creates a function _, and then adds _.clone, _.keyBy and other properties to it (see the docs when you want to learn more about them). Actually, they do it to lessen their pollution of the global space, so that a single library gives only one global variable. That reduces the possibility of naming conflicts. So, a function can do a useful job by itself and also carry a bunch of other functionality in properties.

function,object

The "new Function" syntax

There's one more way to create a function. It's rarely used, but sometimes there's no alternative. ## Syntax The syntax for creating a function: The function is created with the arguments arg1...argN and the given functionBody. It's easier to understand by looking at an example. Here's a function with two arguments: And here there's a function without arguments, with only the function body: The major difference from other ways we've seen is that the function is created literally from a string, that is passed at run time. All previous declarations required us, programmers, to write the function code in the script. But new Function allows to turn any string into a function. For example, we can receive a new function from a server and then execute it: It is used in very specific cases, like when we receive code from a server, or to dynamically compile a function from a template, in complex web-applications. ## Closure Usually, a function remembers where it was born in the special property ``. It references the Lexical Environment from where it's created (we covered that in the chapter <info:closure>). But when a function is created using new Function, its `` is set to reference not the current Lexical Environment, but the global one. So, such function doesn't have access to outer variables, only to the global ones. Compare it with the regular behavior: This special feature of new Function looks strange, but appears very useful in practice. Imagine that we must create a function from a string. The code of that function is not known at the time of writing the script (that's why we don't use regular functions), but will be known in the process of execution. We may receive it from the server or from another source. Our new function needs to interact with the main script. What if it could access the outer variables? The problem is that before JavaScript is published to production, it's compressed using a minifier -- a special program that shrinks code by removing extra comments, spaces and -- what's important, renames local variables into shorter ones. For instance, if a function has let userName, minifier replaces it with let a (or another letter if this one is occupied), and does it everywhere. That's usually a safe thing to do, because the variable is local, nothing outside the function can access it. And inside the function, minifier replaces every mention of it. Minifiers are smart, they analyze the code structure, so they don't break anything. They're not just a dumb find-and-replace. So if new Function had access to outer variables, it would be unable to find renamed userName. If new Function had access to outer variables, it would have problems with minifiers. Besides, such code would be architecturally bad and prone to errors. To pass something to a function, created as new Function, we should use its arguments. ## Summary The syntax: For historical reasons, arguments can also be given as a comma-separated list. These three declarations mean the same: Functions created with new Function, have `` referencing the global Lexical Environment, not the outer one. Hence, they cannot use outer variables. But that's actually good, because it insures us from errors. Passing parameters explicitly is a much better method architecturally and causes no problems with minifiers.

function

Scheduling: setTimeout and setInterval

We may decide to execute a function not right now, but at a certain time later. That's called "scheduling a call". There are two methods for it: - setTimeout allows us to run a function once after the interval of time. - setInterval allows us to run a function repeatedly, starting after the interval of time, then repeating continuously at that interval. These methods are not a part of JavaScript specification. But most environments have the internal scheduler and provide these methods. In particular, they are supported in all browsers and Node.js. ## setTimeout The syntax: Parameters: func|code : Function or a string of code to execute. Usually, that's a function. For historical reasons, a string of code can be passed, but that's not recommended. delay : The delay before run, in milliseconds (1000 ms = 1 second), by default 0. arg1, arg2... : Arguments for the function For instance, this code calls sayHi() after one second: With arguments: If the first argument is a string, then JavaScript creates a function from it. So, this will also work: But using strings is not recommended, use arrow functions instead of them, like this: // wrong! setTimeout(sayHi(), 1000); ### Canceling with clearTimeout A call to setTimeout returns a "timer identifier" timerId that we can use to cancel the execution. The syntax to cancel: In the code below, we schedule the function and then cancel it (changed our mind). As a result, nothing happens: As we can see from alert output, in a browser the timer identifier is a number. In other environments, this can be something else. For instance, Node.js returns a timer object with additional methods. Again, there is no universal specification for these methods, so that's fine. For browsers, timers are described in the timers section of HTML Living Standard. ## setInterval The setInterval method has the same syntax as setTimeout: All arguments have the same meaning. But unlike setTimeout it runs the function not only once, but regularly after the given interval of time. To stop further calls, we should call clearInterval(timerId). The following example will show the message every 2 seconds. After 5 seconds, the output is stopped: ## Nested setTimeout There are two ways of running something regularly. One is setInterval. The other one is a nested setTimeout, like this: The setTimeout above schedules the next call right at the end of the current one (*). The nested setTimeout is a more flexible method than setInterval. This way the next call may be scheduled differently, depending on the results of the current one. For instance, we need to write a service that sends a request to the server every 5 seconds asking for data, but in case the server is overloaded, it should increase the interval to 10, 20, 40 seconds... Here's the pseudocode: And if the functions that we're scheduling are CPU-hungry, then we can measure the time taken by the execution and plan the next call sooner or later. Nested setTimeout allows to set the delay between the executions more precisely than setInterval. Let's compare two code fragments. The first one uses setInterval: The second one uses nested setTimeout: For setInterval the internal scheduler will run func(i++) every 100ms: Did you notice? The real delay between func calls for setInterval is less than in the code! That's normal, because the time taken by func's execution "consumes" a part of the interval. It is possible that func's execution turns out to be longer than we expected and takes more than 100ms. In this case the engine waits for func to complete, then checks the scheduler and if the time is up, runs it again immediately. In the edge case, if the function always executes longer than delay ms, then the calls will happen without a pause at all. And here is the picture for the nested setTimeout: The nested setTimeout ensures a minimum delay (100ms here) between the end of one call and the beginning of the subsequent one. That's because a new call is planned at the end of the previous one. // the function stays in memory until the scheduler calls it setTimeout(function() {...}, 100); ## Zero delay setTimeout There's a special use case: setTimeout(func, 0), or just setTimeout(func). This schedules the execution of func as soon as possible. But the scheduler will invoke it only after the currently executing script is complete. So the function is scheduled to run "right after" the current script. For instance, this outputs "Hello", then immediately "World": The first line "puts the call into calendar after 0ms". But the scheduler will only "check the calendar" after the current script is complete, so "Hello" is first, and "World" -- after it. There are also advanced browser-related use cases of zero-delay timeout, that we'll discuss in the chapter <info:event-loop>. let start = Date.now(); let times = []; setTimeout(function run() { times.push(Date.now() - start); // remember delay from the previous call if (start + 100 < Date.now()) alert(times); // show the delays after 100ms else setTimeout(run); // else re-schedule }); // an example of the output: // 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100 ## Summary - Methods setTimeout(func, delay, ...args) and setInterval(func, delay, ...args) allow us to run the func once/regularly after delay milliseconds. - To cancel the execution, we should call clearTimeout/clearInterval with the value returned by setTimeout/setInterval. - Nested setTimeout calls are a more flexible alternative to setInterval, allowing us to set the time between executions more precisely. - Zero delay scheduling with setTimeout(func, 0) (the same as setTimeout(func)) is used to schedule the call "as soon as possible, but after the current script is complete". - The browser limits the minimal delay for five or more nested calls of setTimeout or for setInterval (after 5th call) to 4ms. That's for historical reasons. Please note that all scheduling methods do not guarantee the exact delay. For example, the in-browser timer may slow down for a lot of reasons: - The CPU is overloaded. - The browser tab is in the background mode. - The laptop is on battery saving mode. All that may increase the minimal timer resolution (the minimal delay) to 300ms or even 1000ms depending on the browser and OS-level performance settings.

web,development

Decorators and forwarding, call/apply

JavaScript gives exceptional flexibility when dealing with functions. They can be passed around, used as objects, and now we'll see how to forward calls between them and decorate them. ## Transparent caching Let's say we have a function slow(x) which is CPU-heavy, but its results are stable. In other words, for the same x it always returns the same result. If the function is called often, we may want to cache (remember) the results to avoid spending extra-time on recalculations. But instead of adding that functionality into slow() we'll create a wrapper function, that adds caching. As we'll see, there are many benefits of doing so. Here's the code, and explanations follow: In the code above cachingDecorator is a decorator: a special function that takes another function and alters its behavior. The idea is that we can call cachingDecorator for any function, and it will return the caching wrapper. That's great, because we can have many functions that could use such a feature, and all we need to do is to apply cachingDecorator to them. By separating caching from the main function code we also keep the main code simpler. The result of cachingDecorator(func) is a "wrapper": function(x) that "wraps" the call of func(x) into caching logic: From an outside code, the wrapped slow function still does the same. It just got a caching aspect added to its behavior. To summarize, there are several benefits of using a separate cachingDecorator instead of altering the code of slow itself: - The cachingDecorator is reusable. We can apply it to another function. - The caching logic is separate, it did not increase the complexity of slow itself (if there was any). - We can combine multiple decorators if needed (other decorators will follow). ## Using "func.call" for the context The caching decorator mentioned above is not suited to work with object methods. For instance, in the code below worker.slow() stops working after the decoration: The error occurs in the line (*) that tries to access this.someMethod and fails. Can you see why? The reason is that the wrapper calls the original function as func(x) in the line (**). And, when called like that, the function gets this = undefined. We would observe a similar symptom if we tried to run: So, the wrapper passes the call to the original method, but without the context this. Hence the error. Let's fix it. There's a special built-in function method func.call(context, ...args) that allows to call a function explicitly setting this. The syntax is: It runs func providing the first argument as this, and the next as the arguments. To put it simply, these two calls do almost the same: They both call func with arguments 1, 2 and 3. The only difference is that func.call also sets this to obj. As an example, in the code below we call sayHi in the context of different objects: sayHi.call(user) runs sayHi providing this=user, and the next line sets this=admin: And here we use call to call say with the given context and phrase: In our case, we can use call in the wrapper to pass the context to the original function: Now everything is fine. To make it all clear, let's see more deeply how this is passed along: 1. After the decoration worker.slow is now the wrapper function (x) { ... }. 2. So when worker.slow(2) is executed, the wrapper gets 2 as an argument and this=worker (it's the object before dot). 3. Inside the wrapper, assuming the result is not yet cached, func.call(this, x) passes the current this (=worker) and the current argument (=2) to the original method. ## Going multi-argument Now let's make cachingDecorator even more universal. Till now it was working only with single-argument functions. Now how to cache the multi-argument worker.slow method? Previously, for a single argument x we could just cache.set(x, result) to save the result and cache.get(x) to retrieve it. But now we need to remember the result for a combination of arguments (min,max). The native Map takes single value only as the key. There are many solutions possible: 1. Implement a new (or use a third-party) map-like data structure that is more versatile and allows multi-keys. 2. Use nested maps: cache.set(min) will be a Map that stores the pair (max, result). So we can get result as cache.get(min).get(max). 3. Join two values into one. In our particular case we can just use a string "min,max" as the Map key. For flexibility, we can allow to provide a hashing function for the decorator, that knows how to make one value from many. For many practical applications, the 3rd variant is good enough, so we'll stick to it. Also we need to pass not just x, but all arguments in func.call. Let's recall that in a function() we can get a pseudo-array of its arguments as arguments, so func.call(this, x) should be replaced with func.call(this, ...arguments). Here's a more powerful cachingDecorator: Now it works with any number of arguments (though the hash function would also need to be adjusted to allow any number of arguments. An interesting way to handle this will be covered below). There are two changes: - In the line (*) it calls hash to create a single key from arguments. Here we use a simple "joining" function that turns arguments (3, 5) into the key "3,5". More complex cases may require other hashing functions. - Then (**) uses func.call(this, ...arguments) to pass both the context and all arguments the wrapper got (not just the first one) to the original function. ## func.apply Instead of func.call(this, ...arguments) we could use func.apply(this, arguments). The syntax of built-in method func.apply is: It runs the func setting this=context and using an array-like object args as the list of arguments. The only syntax difference between call and apply is that call expects a list of arguments, while apply takes an array-like object with them. So these two calls are almost equivalent: They perform the same call of func with given context and arguments. There's only a subtle difference regarding args: - The spread syntax ... allows to pass iterable args as the list to call. - The apply accepts only array-like args. ...And for objects that are both iterable and array-like, such as a real array, we can use any of them, but apply will probably be faster, because most JavaScript engines internally optimize it better. Passing all arguments along with the context to another function is called call forwarding. That's the simplest form of it: When an external code calls such wrapper, it is indistinguishable from the call of the original function func. ## Borrowing a method [#method-borrowing] Now let's make one more minor improvement in the hashing function: As of now, it works only on two arguments. It would be better if it could glue any number of args. The natural solution would be to use arr.join method: ...Unfortunately, that won't work. Because we are calling hash(arguments), and arguments object is both iterable and array-like, but not a real array. So calling join on it would fail, as we can see below: Still, there's an easy way to use array join: The trick is called method borrowing. We take (borrow) a join method from a regular array ([].join) and use [].join.call to run it in the context of arguments. Why does it work? That's because the internal algorithm of the native method arr.join(glue) is very simple. Taken from the specification almost "as-is": 1. Let glue be the first argument or, if no arguments, then a comma ",". 2. Let result be an empty string. 3. Append this[0] to result. 4. Append glue and this[1]. 5. Append glue and this[2]. 6. ...Do so until this.length items are glued. 7. Return result. So, technically it takes this and joins this[0], this[1] ...etc together. It's intentionally written in a way that allows any array-like this (not a coincidence, many methods follow this practice). That's why it also works with this=arguments. ## Decorators and function properties It is generally safe to replace a function or a method with a decorated one, except for one little thing. If the original function had properties on it, like func.calledCount or whatever, then the decorated one will not provide them. Because that is a wrapper. So one needs to be careful if one uses them. E.g. in the example above if slow function had any properties on it, then cachingDecorator(slow) is a wrapper without them. Some decorators may provide their own properties. E.g. a decorator may count how many times a function was invoked and how much time it took, and expose this information via wrapper properties. There exists a way to create decorators that keep access to function properties, but this requires using a special Proxy object to wrap a function. We'll discuss it later in the article <info:proxy#proxy-apply>. ## Summary Decorator is a wrapper around a function that alters its behavior. The main job is still carried out by the function. Decorators can be seen as "features" or "aspects" that can be added to a function. We can add one or add many. And all this without changing its code! To implement cachingDecorator, we studied methods: - func.call(context, arg1, arg2...) -- calls func with given context and arguments. - func.apply(context, args) -- calls func passing context as this and array-like args into a list of arguments. The generic call forwarding is usually done with apply: We also saw an example of method borrowing when we take a method from an object and call it in the context of another object. It is quite common to take array methods and apply them to arguments. The alternative is to use rest parameters object that is a real array. There are many decorators there in the wild. Check how well you got them by solving the tasks of this chapter.

web,development

Function binding

When passing object methods as callbacks, for instance to setTimeout, there's a known problem: "losing this". In this chapter we'll see the ways to fix it. ## Losing "this" We've already seen examples of losing this. Once a method is passed somewhere separately from the object -- this is lost. Here's how it may happen with setTimeout: As we can see, the output shows not "John" as this.firstName, but undefined! That's because setTimeout got the function user.sayHi, separately from the object. The last line can be rewritten as: The method setTimeout in-browser is a little special: it sets this=window for the function call (for Node.js, this becomes the timer object, but doesn't really matter here). So for this.firstName it tries to get window.firstName, which does not exist. In other similar cases, usually this just becomes undefined. The task is quite typical -- we want to pass an object method somewhere else (here -- to the scheduler) where it will be called. How to make sure that it will be called in the right context? ## Solution 1: a wrapper The simplest solution is to use a wrapping function: Now it works, because it receives user from the outer lexical environment, and then calls the method normally. The same, but shorter: Looks fine, but a slight vulnerability appears in our code structure. What if before setTimeout triggers (there's one second delay!) user changes value? Then, suddenly, it will call the wrong object! The next solution guarantees that such thing won't happen. ## Solution 2: bind Functions provide a built-in method bind that allows to fix this. The basic syntax is: The result of func.bind(context) is a special function-like "exotic object", that is callable as function and transparently passes the call to func setting this=context. In other words, calling boundFunc is like func with fixed this. For instance, here funcUser passes a call to func with this=user: Here func.bind(user) is a "bound variant" of func, with fixed this=user. All arguments are passed to the original func "as is", for instance: Now let's try with an object method: In the line (*) we take the method user.sayHi and bind it to user. The sayHi is a "bound" function, that can be called alone or passed to setTimeout -- doesn't matter, the context will be right. Here we can see that arguments are passed "as is", only this is fixed by bind: for (let key in user) { if (typeof user[key] == 'function') { user[key] = user[key].bind(user); ## Partial functions Until now we have only been talking about binding this. Let's take it a step further. We can bind not only this, but also arguments. That's rarely done, but sometimes can be handy. The full syntax of bind: It allows to bind context as this and starting arguments of the function. For instance, we have a multiplication function mul(a, b): Let's use bind to create a function double on its base: The call to mul.bind(null, 2) creates a new function double that passes calls to mul, fixing null as the context and 2 as the first argument. Further arguments are passed "as is". That's called partial function application -- we create a new function by fixing some parameters of the existing one. Please note that we actually don't use this here. But bind requires it, so we must put in something like null. The function triple in the code below triples the value: Why do we usually make a partial function? The benefit is that we can create an independent function with a readable name (double, triple). We can use it and not provide the first argument every time as it's fixed with bind. In other cases, partial application is useful when we have a very generic function and want a less universal variant of it for convenience. For instance, we have a function send(from, to, text). Then, inside a user object we may want to use a partial variant of it: sendTo(to, text) that sends from the current user. ## Going partial without context What if we'd like to fix some arguments, but not the context this? For example, for an object method. The native bind does not allow that. We can't just omit the context and jump to arguments. Fortunately, a function partial for binding only arguments can be easily implemented. Like this: The result of partial(func[, arg1, arg2...]) call is a wrapper (*) that calls func with: - Same this as it gets (for user.sayNow call it's user) - Then gives it ...argsBound -- arguments from the partial call ("10:00") - Then gives it ...args -- arguments given to the wrapper ("Hello") So easy to do it with the spread syntax, right? Also there's a ready _.partial implementation from lodash library. ## Summary Method func.bind(context, ...args) returns a "bound variant" of function func that fixes the context this and first arguments if given. Usually we apply bind to fix this for an object method, so that we can pass it somewhere. For example, to setTimeout. When we fix some arguments of an existing function, the resulting (less universal) function is called partially applied or partial. Partials are convenient when we don't want to repeat the same argument over and over again. Like if we have a send(from, to) function, and from should always be the same for our task, we can get a partial and go on with it.

function

Arrow functions revisited

Let's revisit arrow functions. Arrow functions are not just a "shorthand" for writing small stuff. They have some very specific and useful features. JavaScript is full of situations where we need to write a small function that's executed somewhere else. For instance: - arr.forEach(func) -- func is executed by forEach for every array item. - setTimeout(func) -- func is executed by the built-in scheduler. - ...there are more. It's in the very spirit of JavaScript to create a function and pass it somewhere. And in such functions we usually don't want to leave the current context. That's where arrow functions come in handy. ## Arrow functions have no "this" As we remember from the chapter <info:object-methods>, arrow functions do not have this. If this is accessed, it is taken from the outside. For instance, we can use it to iterate inside an object method: Here in forEach, the arrow function is used, so this.title in it is exactly the same as in the outer method showList. That is: group.title. If we used a "regular" function, there would be an error: The error occurs because forEach runs functions with this=undefined by default, so the attempt to access undefined.title is made. That doesn't affect arrow functions, because they just don't have this. ## Arrows have no "arguments" Arrow functions also have no arguments variable. That's great for decorators, when we need to forward a call with the current this and arguments. For instance, defer(f, ms) gets a function and returns a wrapper around it that delays the call by ms milliseconds: The same without an arrow function would look like: Here we had to create additional variables args and ctx so that the function inside setTimeout could take them. ## Summary Arrow functions: - Do not have this - Do not have arguments - Can't be called with new - They also don't have super, but we didn't study it yet. We will on the chapter <info:class-inheritance> That's because they are meant for short pieces of code that do not have their own "context", but rather work in the current one. And they really shine in that use case.

function

Property flags and descriptors

As we know, objects can store properties. Until now, a property was a simple "key-value" pair to us. But an object property is actually a more flexible and powerful thing. In this chapter we'll study additional configuration options, and in the next we'll see how to invisibly turn them into getter/setter functions. ## Property flags Object properties, besides a value, have three special attributes (so-called "flags"): - writable -- if true, the value can be changed, otherwise it's read-only. - enumerable -- if true, then listed in loops, otherwise not listed. - configurable -- if true, the property can be deleted and these attributes can be modified, otherwise not. We didn't see them yet, because generally they do not show up. When we create a property "the usual way", all of them are true. But we also can change them anytime. First, let's see how to get those flags. The method Object.getOwnPropertyDescriptor allows to query the full information about a property. The syntax is: obj : The object to get information from. propertyName : The name of the property. The returned value is a so-called "property descriptor" object: it contains the value and all the flags. For instance: To change the flags, we can use Object.defineProperty. The syntax is: obj, propertyName : The object and its property to apply the descriptor. descriptor : Property descriptor object to apply. If the property exists, defineProperty updates its flags. Otherwise, it creates the property with the given value and flags; in that case, if a flag is not supplied, it is assumed false. For instance, here a property name is created with all falsy flags: Compare it with "normally created" user.name above: now all flags are falsy. If that's not what we want then we'd better set them to true in descriptor. Now let's see effects of the flags by example. ## Non-writable Let's make user.name non-writable (can't be reassigned) by changing writable flag: Now no one can change the name of our user, unless they apply their own defineProperty to override ours. Here's the same example, but the property is created from scratch: ## Non-enumerable Now let's add a custom toString to user. Normally, a built-in toString for objects is non-enumerable, it does not show up in for..in. But if we add a toString of our own, then by default it shows up in for..in, like this: If we don't like it, then we can set enumerable:false. Then it won't appear in a for..in loop, just like the built-in one: Non-enumerable properties are also excluded from Object.keys: ## Non-configurable The non-configurable flag (configurable:false) is sometimes preset for built-in objects and properties. A non-configurable property can't be deleted, its attributes can't be modified. For instance, Math.PI is non-writable, non-enumerable and non-configurable: So, a programmer is unable to change the value of Math.PI or overwrite it. We also can't change Math.PI to be writable again: There's absolutely nothing we can do with Math.PI. Making a property non-configurable is a one-way road. We cannot change it back with defineProperty. Please note: configurable: false prevents changes of property flags and its deletion, while allowing to change its value. Here user.name is non-configurable, but we can still change it (as it's writable): And here we make user.name a "forever sealed" constant, just like the built-in Math.PI: ## Object.defineProperties There's a method Object.defineProperties(obj, descriptors) that allows to define many properties at once. The syntax is: For instance: So, we can set many properties at once. ## Object.getOwnPropertyDescriptors To get all property descriptors at once, we can use the method Object.getOwnPropertyDescriptors(obj). Together with Object.defineProperties it can be used as a "flags-aware" way of cloning an object: Normally when we clone an object, we use an assignment to copy properties, like this: ...But that does not copy flags. So if we want a "better" clone then Object.defineProperties is preferred. Another difference is that for..in ignores symbolic and non-enumerable properties, but Object.getOwnPropertyDescriptors returns all property descriptors including symbolic and non-enumerable ones. ## Sealing an object globally Property descriptors work at the level of individual properties. There are also methods that limit access to the whole object: Object.preventExtensions(obj) : Forbids the addition of new properties to the object. Object.seal(obj) : Forbids adding/removing of properties. Sets configurable: false for all existing properties. Object.freeze(obj) : Forbids adding/removing/changing of properties. Sets configurable: false, writable: false for all existing properties. And also there are tests for them: Object.isExtensible(obj) : Returns false if adding properties is forbidden, otherwise true. Object.isSealed(obj) : Returns true if adding/removing properties is forbidden, and all existing properties have configurable: false. Object.isFrozen(obj) : Returns true if adding/removing/changing properties is forbidden, and all current properties are configurable: false, writable: false. These methods are rarely used in practice.

web,development

Property getters and setters

There are two kinds of object properties. The first kind is data properties. We already know how to work with them. All properties that we've been using until now were data properties. The second type of property is something new. It's an accessor property. They are essentially functions that execute on getting and setting a value, but look like regular properties to an external code. ## Getters and setters Accessor properties are represented by "getter" and "setter" methods. In an object literal they are denoted by get and set: The getter works when obj.propName is read, the setter -- when it is assigned. For instance, we have a user object with name and surname: Now we want to add a fullName property, that should be "John Smith". Of course, we don't want to copy-paste existing information, so we can implement it as an accessor: From the outside, an accessor property looks like a regular one. That's the idea of accessor properties. We don't call user.fullName as a function, we read it normally: the getter runs behind the scenes. As of now, fullName has only a getter. If we attempt to assign user.fullName=, there will be an error: Let's fix it by adding a setter for user.fullName: As the result, we have a "virtual" property fullName. It is readable and writable. ## Accessor descriptors Descriptors for accessor properties are different from those for data properties. For accessor properties, there is no value or writable, but instead there are get and set functions. That is, an accessor descriptor may have: - get -- a function without arguments, that works when a property is read, - set -- a function with one argument, that is called when the property is set, - enumerable -- same as for data properties, - configurable -- same as for data properties. For instance, to create an accessor fullName with defineProperty, we can pass a descriptor with get and set: Please note that a property can be either an accessor (has get/set methods) or a data property (has a value), not both. If we try to supply both get and value in the same descriptor, there will be an error: ## Smarter getters/setters Getters/setters can be used as wrappers over "real" property values to gain more control over operations with them. For instance, if we want to forbid too short names for user, we can have a setter name and keep the value in a separate property _name: So, the name is stored in _name property, and the access is done via getter and setter. Technically, external code is able to access the name directly by using user._name. But there is a widely known convention that properties starting with an underscore "_" are internal and should not be touched from outside the object. ## Using for compatibility One of the great uses of accessors is that they allow to take control over a "regular" data property at any moment by replacing it with a getter and a setter and tweak its behavior. Imagine we started implementing user objects using data properties name and age: ...But sooner or later, things may change. Instead of age we may decide to store birthday, because it's more precise and convenient: Now what to do with the old code that still uses age property? We can try to find all such places and fix them, but that takes time and can be hard to do if that code is used by many other people. And besides, age is a nice thing to have in user, right? Let's keep it. Adding a getter for age solves the problem: Now the old code works too and we've got a nice additional property.

web,development

Prototypal inheritance

In programming, we often want to take something and extend it. For instance, we have a user object with its properties and methods, and want to make admin and guest as slightly modified variants of it. We'd like to reuse what we have in user, not copy/reimplement its methods, just build a new object on top of it. Prototypal inheritance is a language feature that helps in that. In JavaScript, objects have a special hidden property ` (as named in the specification), that is either null` or references another object. That object is called "a prototype": When we read a property from object, and it's missing, JavaScript automatically takes it from the prototype. In programming, this is called "prototypal inheritance". And soon we'll study many examples of such inheritance, as well as cooler language features built upon it. The property `` is internal and hidden, but there are many ways to set it. One of them is to use the special name __proto__, like this: Now if we read a property from rabbit, and it's missing, JavaScript will automatically take it from animal. For instance: Here the line (*) sets animal to be the prototype of rabbit. Then, when alert tries to read property rabbit.eats (**), it's not in rabbit, so JavaScript follows the ` reference and finds it in animal` (look from the bottom up): Here we can say that "animal is the prototype of rabbit" or "rabbit prototypically inherits from animal". So if animal has a lot of useful properties and methods, then they become automatically available in rabbit. Such properties are called "inherited". If we have a method in animal, it can be called on rabbit: The method is automatically taken from the prototype, like this: The prototype chain can be longer: Now if we read something from longEar, and it's missing, JavaScript will look for it in rabbit, and then in animal. There are only two limitations: 1. The references can't go in circles. JavaScript will throw an error if we try to assign __proto__ in a circle. 2. The value of __proto__ can be either an object or null. Other types are ignored. Also it may be obvious, but still: there can be only one ``. An object may not inherit from two others. ## Writing doesn't use prototype The prototype is only used for reading properties. Write/delete operations work directly with the object. In the example below, we assign its own walk method to rabbit: From now on, rabbit.walk() call finds the method immediately in the object and executes it, without using the prototype: Accessor properties are an exception, as assignment is handled by a setter function. So writing to such a property is actually the same as calling a function. For that reason admin.fullName works correctly in the code below: Here in the line () the property admin.fullName has a getter in the prototype user, so it is called. And in the line (*) the property has a setter in the prototype, so it is called. ## The value of "this" An interesting question may arise in the example above: what's the value of this inside set fullName(value)? Where are the properties this.name and this.surname written: into user or admin? The answer is simple: this is not affected by prototypes at all. No matter where the method is found: in an object or its prototype. In a method call, this is always the object before the dot. So, the setter call admin.fullName= uses admin as this, not user. That is actually a super-important thing, because we may have a big object with many methods, and have objects that inherit from it. And when the inheriting objects run the inherited methods, they will modify only their own states, not the state of the big object. For instance, here animal represents a "method storage", and rabbit makes use of it. The call rabbit.sleep() sets this.isSleeping on the rabbit object: The resulting picture: If we had other objects, like bird, snake, etc., inheriting from animal, they would also gain access to methods of animal. But this in each method call would be the corresponding object, evaluated at the call-time (before dot), not animal. So when we write data into this, it is stored into these objects. As a result, methods are shared, but the object state is not. ## for..in loop The for..in loop iterates over inherited properties too. For instance: If that's not what we want, and we'd like to exclude inherited properties, there's a built-in method obj.hasOwnProperty(key): it returns true if obj has its own (not inherited) property named key. So we can filter out inherited properties (or do something else with them): Here we have the following inheritance chain: rabbit inherits from animal, that inherits from Object.prototype (because animal is a literal object {...}, so it's by default), and then null above it: Note, there's one funny thing. Where is the method rabbit.hasOwnProperty coming from? We did not define it. Looking at the chain we can see that the method is provided by Object.prototype.hasOwnProperty. In other words, it's inherited. ...But why does hasOwnProperty not appear in the for..in loop like eats and jumps do, if for..in lists inherited properties? The answer is simple: it's not enumerable. Just like all other properties of Object.prototype, it has enumerable:false flag. And for..in only lists enumerable properties. That's why it and the rest of the Object.prototype properties are not listed. ## Summary - In JavaScript, all objects have a hidden ` property that's either another object or null`. - We can use obj.__proto__ to access it (a historical getter/setter, there are other ways, to be covered soon). - The object referenced by `` is called a "prototype". - If we want to read a property of obj or call a method, and it doesn't exist, then JavaScript tries to find it in the prototype. - Write/delete operations act directly on the object, they don't use the prototype (assuming it's a data property, not a setter). - If we call obj.method(), and the method is taken from the prototype, this still references obj. So methods always work with the current object even if they are inherited. - The for..in loop iterates over both its own and its inherited properties. All other key/value-getting methods only operate on the object itself.

web,development

F.prototype

Remember, new objects can be created with a constructor function, like new F(). If F.prototype is an object, then the new operator uses it to set `` for the new object. Please note that F.prototype here means a regular property named "prototype" on F. It sounds something similar to the term "prototype", but here we really mean a regular property with this name. Here's the example: Setting Rabbit.prototype = animal literally states the following: "When a new Rabbit is created, assign its ` to animal`". That's the resulting picture: On the picture, "prototype" is a horizontal arrow, meaning a regular property, and ` is vertical, meaning the inheritance of rabbit from animal`. ## Default F.prototype, constructor property Every function has the "prototype" property even if we don't supply it. The default "prototype" is an object with the only property constructor that points back to the function itself. Like this: We can check it: Naturally, if we do nothing, the constructor property is available to all rabbits through ``: We can use constructor property to create a new object using the same constructor as the existing one. Like here: That's handy when we have an object, don't know which constructor was used for it (e.g. it comes from a 3rd party library), and we need to create another one of the same kind. But probably the most important thing about "constructor" is that... ...JavaScript itself does not ensure the right "constructor" value. Yes, it exists in the default "prototype" for functions, but that's all. What happens with it later -- is totally on us. In particular, if we replace the default prototype as a whole, then there will be no "constructor" in it. For instance: So, to keep the right "constructor" we can choose to add/remove properties to the default "prototype" instead of overwriting it as a whole: Or, alternatively, recreate the constructor property manually: ## Summary In this chapter we briefly described the way of setting a `` for objects created via a constructor function. Later we'll see more advanced programming patterns that rely on it. Everything is quite simple, just a few notes to make things clear: - The F.prototype property (don't mistake it for `) sets of new objects when new F()` is called. - The value of F.prototype should be either an object or null: other values won't work. - The "prototype" property only has such a special effect when set on a constructor function, and invoked with new. On regular objects the prototype is nothing special: By default all functions have F.prototype = { constructor: F }, so we can get the constructor of an object by accessing its "constructor" property.

web,development

Native prototypes

The "prototype" property is widely used by the core of JavaScript itself. All built-in constructor functions use it. First we'll look at the details, and then how to use it for adding new capabilities to built-in objects. ## Object.prototype Let's say we output an empty object: Where's the code that generates the string "[object Object]"? That's a built-in toString method, but where is it? The obj is empty! ...But the short notation obj = {} is the same as obj = new Object(), where Object is a built-in object constructor function, with its own prototype referencing a huge object with toString and other methods. Here's what's going on: When new Object() is called (or a literal object {...} is created), the ` of it is set to Object.prototype` according to the rule that we discussed in the previous chapter: So then when obj.toString() is called the method is taken from Object.prototype. We can check it like this: Please note that there is no more ` in the chain above Object.prototype`: ## Other built-in prototypes Other built-in objects such as Array, Date, Function and others also keep methods in prototypes. For instance, when we create an array [1, 2, 3], the default new Array() constructor is used internally. So Array.prototype becomes its prototype and provides methods. That's very memory-efficient. By specification, all of the built-in prototypes have Object.prototype on the top. That's why some people say that "everything inherits from objects". Here's the overall picture (for 3 built-ins to fit): Let's check the prototypes manually: Some methods in prototypes may overlap, for instance, Array.prototype has its own toString that lists comma-delimited elements: As we've seen before, Object.prototype has toString as well, but Array.prototype is closer in the chain, so the array variant is used. In-browser tools like Chrome developer console also show inheritance (console.dir may need to be used for built-in objects): Other built-in objects also work the same way. Even functions -- they are objects of a built-in Function constructor, and their methods (call/apply and others) are taken from Function.prototype. Functions have their own toString too. ## Primitives The most intricate thing happens with strings, numbers and booleans. As we remember, they are not objects. But if we try to access their properties, temporary wrapper objects are created using built-in constructors String, Number and Boolean. They provide the methods and disappear. These objects are created invisibly to us and most engines optimize them out, but the specification describes it exactly this way. Methods of these objects also reside in prototypes, available as String.prototype, Number.prototype and Boolean.prototype. ## Changing native prototypes [#native-prototype-change] Native prototypes can be modified. For instance, if we add a method to String.prototype, it becomes available to all strings: During the process of development, we may have ideas for new built-in methods we'd like to have, and we may be tempted to add them to native prototypes. But that is generally a bad idea. In modern programming, there is only one case where modifying native prototypes is approved. That's polyfilling. Polyfilling is a term for making a substitute for a method that exists in the JavaScript specification, but is not yet supported by a particular JavaScript engine. We may then implement it manually and populate the built-in prototype with it. For instance: ## Borrowing from prototypes In the chapter <info:call-apply-decorators#method-borrowing> we talked about method borrowing. That's when we take a method from one object and copy it into another. Some methods of native prototypes are often borrowed. For instance, if we're making an array-like object, we may want to copy some Array methods to it. E.g. It works because the internal algorithm of the built-in join method only cares about the correct indexes and the length property. It doesn't check if the object is indeed an array. Many built-in methods are like that. Another possibility is to inherit by setting obj.__proto__ to Array.prototype, so all Array methods are automatically available in obj. But that's impossible if obj already inherits from another object. Remember, we only can inherit from one object at a time. Borrowing methods is flexible, it allows to mix functionalities from different objects if needed. ## Summary - All built-in objects follow the same pattern: - The methods are stored in the prototype (Array.prototype, Object.prototype, Date.prototype, etc.) - The object itself stores only the data (array items, object properties, the date) - Primitives also store methods in prototypes of wrapper objects: Number.prototype, String.prototype and Boolean.prototype. Only undefined and null do not have wrapper objects - Built-in prototypes can be modified or populated with new methods. But it's not recommended to change them. The only allowable case is probably when we add-in a new standard, but it's not yet supported by the JavaScript engine

web,development

Prototype methods, objects without __proto__

In the first chapter of this section, we mentioned that there are modern methods to setup a prototype. Setting or reading the prototype with obj.__proto__ is considered outdated and somewhat deprecated (moved to the so-called "Annex B" of the JavaScript standard, meant for browsers only). The modern methods to get/set a prototype are: - Object.getPrototypeOf(obj) -- returns the ` of obj`. - Object.setPrototypeOf(obj, proto) -- sets the ` of obj to proto`. The only usage of __proto__, that's not frowned upon, is as a property when creating a new object: { __proto__: ... }. Although, there's a special method for this too: - [Object.create(proto[, descriptors])](mdn:js/Object/create) -- creates an empty object with given proto as `` and optional property descriptors. For instance: The Object.create method is a bit more powerful, as it has an optional second argument: property descriptors. We can provide additional properties to the new object there, like this: The descriptors are in the same format as described in the chapter <info:property-descriptors>. We can use Object.create to perform an object cloning more powerful than copying properties in for..in: This call makes a truly exact copy of obj, including all properties: enumerable and non-enumerable, data properties and setters/getters -- everything, and with the right ``. ## Brief history There're so many ways to manage ``. How did that happen? Why? That's for historical reasons. The prototypal inheritance was in the language since its dawn, but the ways to manage it evolved over time. - The prototype property of a constructor function has worked since very ancient times. It's the oldest way to create objects with a given prototype. - Later, in the year 2012, Object.create appeared in the standard. It gave the ability to create objects with a given prototype, but did not provide the ability to get/set it. Some browsers implemented the non-standard __proto__ accessor that allowed the user to get/set a prototype at any time, to give more flexibility to developers. - Later, in the year 2015, Object.setPrototypeOf and Object.getPrototypeOf were added to the standard, to perform the same functionality as __proto__. As __proto__ was de-facto implemented everywhere, it was kind-of deprecated and made its way to the Annex B of the standard, that is: optional for non-browser environments. - Later, in the year 2022, it was officially allowed to use __proto__ in object literals {...} (moved out of Annex B), but not as a getter/setter obj.__proto__ (still in Annex B). Why was __proto__ replaced by the functions getPrototypeOf/setPrototypeOf? Why was __proto__ partially rehabilitated and its usage allowed in {...}, but not as a getter/setter? That's an interesting question, requiring us to understand why __proto__ is bad. And soon we'll get the answer. ## "Very plain" objects [#very-plain] As we know, objects can be used as associative arrays to store key/value pairs. ...But if we try to store user-provided keys in it (for instance, a user-entered dictionary), we can see an interesting glitch: all keys work fine except "__proto__". Check out the example: Here, if the user types in __proto__, the assignment in line 4 is ignored! That could surely be surprising for a non-developer, but pretty understandable for us. The __proto__ property is special: it must be either an object or null. A string can not become a prototype. That's why assigning a string to __proto__ is ignored. But we didn't intend to implement such behavior, right? We want to store key/value pairs, and the key named "__proto__" was not properly saved. So that's a bug! Here the consequences are not terrible. But in other cases we may be storing objects instead of strings in obj, and then the prototype will indeed be changed. As a result, the execution will go wrong in totally unexpected ways. What's worse -- usually developers do not think about such possibility at all. That makes such bugs hard to notice and even turn them into vulnerabilities, especially when JavaScript is used on server-side. Unexpected things also may happen when assigning to obj.toString, as it's a built-in object method. How can we avoid this problem? First, we can just switch to using Map for storage instead of plain objects, then everything's fine: ...But Object syntax is often more appealing, as it's more concise. Fortunately, we can use objects, because language creators gave thought to that problem long ago. As we know, __proto__ is not a property of an object, but an accessor property of Object.prototype: So, if obj.__proto__ is read or set, the corresponding getter/setter is called from its prototype, and it gets/sets ``. As it was said in the beginning of this tutorial section: __proto__ is a way to access `, it is not ` itself. Now, if we intend to use an object as an associative array and be free of such problems, we can do it with a little trick: Object.create(null) creates an empty object without a prototype (` is null`): So, there is no inherited getter/setter for __proto__. Now it is processed as a regular data property, so the example above works right. We can call such objects "very plain" or "pure dictionary" objects, because they are even simpler than the regular plain object {...}. A downside is that such objects lack any built-in object methods, e.g. toString: ...But that's usually fine for associative arrays. Note that most object-related methods are Object.something(...), like Object.keys(obj) -- they are not in the prototype, so they will keep working on such objects: ## Summary - To create an object with the given prototype, use: - literal syntax: { __proto__: ... }, allows to specify multiple properties - or [Object.create(proto[, descriptors])](mdn:js/Object/create), allows to specify property descriptors. The Object.create provides an easy way to shallow-copy an object with all descriptors: ```js let clone = Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)); ``` - Modern methods to get/set the prototype are: - Object.getPrototypeOf(obj) -- returns the ` of obj (same as __proto__` getter). - Object.setPrototypeOf(obj, proto) -- sets the ` of obj to proto (same as __proto__` setter). - Getting/setting the prototype using the built-in __proto__ getter/setter isn't recommended, it's now in the Annex B of the specification. - We also covered prototype-less objects, created with Object.create(null) or {__proto__: null}. These objects are used as dictionaries, to store any (possibly user-generated) keys. Normally, objects inherit built-in methods and __proto__ getter/setter from Object.prototype, making corresponding keys "occupied" and potentially causing side effects. With null prototype, objects are truly empty.

object

Class basic syntax

In practice, we often need to create many objects of the same kind, like users, or goods or whatever. As we already know from the chapter <info:constructor-new>, new function can help with that. But in the modern JavaScript, there's a more advanced "class" construct, that introduces great new features which are useful for object-oriented programming. ## The "class" syntax The basic syntax is: Then use new MyClass() to create a new object with all the listed methods. The constructor() method is called automatically by new, so we can initialize the object there. For example: When new User("John") is called: 1. A new object is created. 2. The constructor runs with the given argument and assigns it to this.name. ...Then we can call object methods, such as user.sayHi(). ## What is a class? So, what exactly is a class? That's not an entirely new language-level entity, as one might think. Let's unveil any magic and see what a class really is. That'll help in understanding many complex aspects. In JavaScript, a class is a kind of function. Here, take a look: What class User {...} construct really does is: 1. Creates a function named User, that becomes the result of the class declaration. The function code is taken from the constructor method (assumed empty if we don't write such method). 2. Stores class methods, such as sayHi, in User.prototype. After new User object is created, when we call its method, it's taken from the prototype, just as described in the chapter <info:function-prototype>. So the object has access to class methods. We can illustrate the result of class User declaration as: Here's the code to introspect it: ## Not just a syntactic sugar Sometimes people say that class is a "syntactic sugar" (syntax that is designed to make things easier to read, but doesn't introduce anything new), because we could actually declare the same thing without using the class keyword at all: The result of this definition is about the same. So, there are indeed reasons why class can be considered a syntactic sugar to define a constructor together with its prototype methods. Still, there are important differences. 1. First, a function created by class is labelled by a special internal property : true. So it's not entirely the same as creating it manually. The language checks for that property in a variety of places. For example, unlike a regular function, it must be called with new: ```js run class User { constructor() {} alert(typeof User); // function User(); // Error: Class constructor User cannot be invoked without 'new' ``` Also, a string representation of a class constructor in most JavaScript engines starts with the "class..." ```js run class User { constructor() {} alert(User); // class User { ... } ``` There are other differences, we'll see them soon. 2. Class methods are non-enumerable. A class definition sets enumerable flag to false for all methods in the "prototype". That's good, because if we for..in over an object, we usually don't want its class methods. 3. Classes always use strict. All code inside the class construct is automatically in strict mode. Besides, class syntax brings many other features that we'll explore later. ## Class Expression Just like functions, classes can be defined inside another expression, passed around, returned, assigned, etc. Here's an example of a class expression: Similar to Named Function Expressions, class expressions may have a name. If a class expression has a name, it's visible inside the class only: We can even make classes dynamically "on-demand", like this: ## Getters/setters Just like literal objects, classes may include getters/setters, computed properties etc. Here's an example for user.name implemented using get/set: Technically, such class declaration works by creating getters and setters in User.prototype. ## Computed names [...] Here's an example with a computed method name using brackets [...]: Such features are easy to remember, as they resemble that of literal objects. ## Class fields Previously, our classes only had methods. "Class fields" is a syntax that allows to add any properties. For instance, let's add name property to class User: So, we just write "<property name> = <value>" in the declaration, and that's it. The important difference of class fields is that they are set on individual objects, not User.prototype: We can also assign values using more complex expressions and function calls: ### Making bound methods with class fields As demonstrated in the chapter <info:bind> functions in JavaScript have a dynamic this. It depends on the context of the call. So if an object method is passed around and called in another context, this won't be a reference to its object any more. For instance, this code will show undefined: The problem is called "losing this". There are two approaches to fixing it, as discussed in the chapter <info:bind>: 1. Pass a wrapper-function, such as setTimeout(() => button.click(), 1000). 2. Bind the method to object, e.g. in the constructor. Class fields provide another, quite elegant syntax: The class field click = () => {...} is created on a per-object basis, there's a separate function for each Button object, with this inside it referencing that object. We can pass button.click around anywhere, and the value of this will always be correct. That's especially useful in browser environment, for event listeners. ## Summary The basic class syntax looks like this: MyClass is technically a function (the one that we provide as constructor), while methods, getters and setters are written to MyClass.prototype. In the next chapters we'll learn more about classes, including inheritance and other features.

web,development

Class inheritance

Class inheritance is a way for one class to extend another class. So we can create new functionality on top of the existing. ## The "extends" keyword Let's say we have class Animal: Here's how we can represent animal object and Animal class graphically: ...And we would like to create another class Rabbit. As rabbits are animals, Rabbit class should be based on Animal, have access to animal methods, so that rabbits can do what "generic" animals can do. The syntax to extend another class is: class Child extends Parent. Let's create class Rabbit that inherits from Animal: Object of Rabbit class have access both to Rabbit methods, such as rabbit.hide(), and also to Animal methods, such as rabbit.run(). Internally, extends keyword works using the good old prototype mechanics. It sets Rabbit.prototype. to Animal.prototype. So, if a method is not found in Rabbit.prototype, JavaScript takes it from Animal.prototype. For instance, to find rabbit.run method, the engine checks (bottom-up on the picture): 1. The rabbit object (has no run). 2. Its prototype, that is Rabbit.prototype (has hide, but not run). 3. Its prototype, that is (due to extends) Animal.prototype, that finally has the run method. As we can recall from the chapter <info:native-prototypes>, JavaScript itself uses prototypal inheritance for built-in objects. E.g. Date.prototype. is Object.prototype. That's why dates have access to generic object methods. function f(phrase) { return class { sayHi() { alert(phrase); } class User extends f("Hello") {} new User().sayHi(); // Hello ## Overriding a method Now let's move forward and override a method. By default, all methods that are not specified in class Rabbit are taken directly "as is" from class Animal. But if we specify our own method in Rabbit, such as stop() then it will be used instead: Usually, however, we don't want to totally replace a parent method, but rather to build on top of it to tweak or extend its functionality. We do something in our method, but call the parent method before/after it or in the process. Classes provide "super" keyword for that. - super.method(...) to call a parent method. - super(...) to call a parent constructor (inside our constructor only). For instance, let our rabbit autohide when stopped: Now Rabbit has the stop method that calls the parent super.stop() in the process. class Rabbit extends Animal { stop() { setTimeout(() => super.stop(), 1000); // call parent stop after 1sec // Unexpected super setTimeout(function() { super.stop() }, 1000); ## Overriding constructor With constructors it gets a little bit tricky. Until now, Rabbit did not have its own constructor. According to the specification, if a class extends another class and has no constructor, then the following "empty" constructor is generated: As we can see, it basically calls the parent constructor passing it all the arguments. That happens if we don't write a constructor of our own. Now let's add a custom constructor to Rabbit. It will specify the earLength in addition to name: Whoops! We've got an error. Now we can't create rabbits. What went wrong? The short answer is: - Constructors in inheriting classes must call super(...), and (!) do it before using this. ...But why? What's going on here? Indeed, the requirement seems strange. Of course, there's an explanation. Let's get into details, so you'll really understand what's going on. In JavaScript, there's a distinction between a constructor function of an inheriting class (so-called "derived constructor") and other functions. A derived constructor has a special internal property :"derived". That's a special internal label. That label affects its behavior with new. - When a regular function is executed with new, it creates an empty object and assigns it to this. - But when a derived constructor runs, it doesn't do this. It expects the parent constructor to do this job. So a derived constructor must call super in order to execute its parent (base) constructor, otherwise the object for this won't be created. And we'll get an error. For the Rabbit constructor to work, it needs to call super() before using this, like here: ### Overriding class fields: a tricky note We can override not only methods, but also class fields. Although, there's a tricky behavior when we access an overridden field in parent constructor, quite different from most other programming languages. Consider this example: Here, class Rabbit extends Animal and overrides the name field with its own value. There's no own constructor in Rabbit, so Animal constructor is called. What's interesting is that in both cases: new Animal() and new Rabbit(), the alert in the line (*) shows animal. In other words, the parent constructor always uses its own field value, not the overridden one. What's odd about it? If it's not clear yet, please compare with methods. Here's the same code, but instead of this.name field we call this.showName() method: Please note: now the output is different. And that's what we naturally expect. When the parent constructor is called in the derived class, it uses the overridden method. ...But for class fields it's not so. As said, the parent constructor always uses the parent field. Why is there a difference? Well, the reason is the field initialization order. The class field is initialized: - Before constructor for the base class (that doesn't extend anything), - Immediately after super() for the derived class. In our case, Rabbit is the derived class. There's no constructor() in it. As said previously, that's the same as if there was an empty constructor with only super(...args). So, new Rabbit() calls super(), thus executing the parent constructor, and (per the rule for derived classes) only after that its class fields are initialized. At the time of the parent constructor execution, there are no Rabbit class fields yet, that's why Animal fields are used. This subtle difference between fields and methods is specific to JavaScript. Luckily, this behavior only reveals itself if an overridden field is used in the parent constructor. Then it may be difficult to understand what's going on, so we're explaining it here. If it becomes a problem, one can fix it by using methods or getters/setters instead of fields. ## Super: internals, Let's get a little deeper under the hood of super. We'll see some interesting things along the way. First to say, from all that we've learned till now, it's impossible for super to work at all! Yeah, indeed, let's ask ourselves, how it should technically work? When an object method runs, it gets the current object as this. If we call super.method() then, the engine needs to get the method from the prototype of the current object. But how? The task may seem simple, but it isn't. The engine knows the current object this, so it could get the parent method as this.__proto__.method. Unfortunately, such a "naive" solution won't work. Let's demonstrate the problem. Without classes, using plain objects for the sake of simplicity. You may skip this part and go below to the `` subsection if you don't want to know the details. That won't harm. Or read on if you're interested in understanding things in-depth. In the example below, rabbit.__proto__ = animal. Now let's try: in rabbit.eat() we'll call animal.eat(), using this.__proto__: At the line (*) we take eat from the prototype (animal) and call it in the context of the current object. Please note that .call(this) is important here, because a simple this.__proto__.eat() would execute parent eat in the context of the prototype, not the current object. And in the code above it actually works as intended: we have the correct alert. Now let's add one more object to the chain. We'll see how things break: The code doesn't work anymore! We can see the error trying to call longEar.eat(). It may be not that obvious, but if we trace longEar.eat() call, then we can see why. In both lines () and (*) the value of this is the current object (longEar). That's essential: all object methods get the current object as this, not a prototype or something. So, in both lines () and (*) the value of this.__proto__ is exactly the same: rabbit. They both call rabbit.eat without going up the chain in the endless loop. Here's the picture of what happens: 1. Inside longEar.eat(), the line (**) calls rabbit.eat providing it with this=longEar. ```js // inside longEar.eat() we have this = longEar this.__proto__.eat.call(this) // (**) // becomes longEar.__proto__.eat.call(this) // that is rabbit.eat.call(this); ``` 2. Then in the line (*) of rabbit.eat, we'd like to pass the call even higher in the chain, but this=longEar, so this.__proto__.eat is again rabbit.eat! ```js // inside rabbit.eat() we also have this = longEar this.__proto__.eat.call(this) // (*) // becomes longEar.__proto__.eat.call(this) // or (again) rabbit.eat.call(this); ``` 3. ...So rabbit.eat calls itself in the endless loop, because it can't ascend any further. The problem can't be solved by using this alone. ### `` To provide the solution, JavaScript adds one more special internal property for functions: ``. When a function is specified as a class or object method, its `` property becomes that object. Then super uses it to resolve the parent prototype and its methods. Let's see how it works, first with plain objects: It works as intended, due to ` mechanics. A method, such as longEar.eat, knows its and takes the parent method from its prototype. Without any use of this`. ### Methods are not "free" As we've known before, generally functions are "free", not bound to objects in JavaScript. So they can be copied between objects and called with another this. The very existence of ` violates that principle, because methods remember their objects. ` can't be changed, so this bond is forever. The only place in the language where ` is used -- is super. So, if a method does not use super, then we can still consider it free and copy between objects. But with super` things may go wrong. Here's the demo of a wrong super result after copying: A call to tree.sayHi() shows "I'm an animal". Definitely wrong. The reason is simple: - In the line (*), the method tree.sayHi was copied from rabbit. Maybe we just wanted to avoid code duplication? - Its ` is rabbit, as it was created in rabbit. There's no way to change `. - The code of tree.sayHi() has super.sayHi() inside. It goes up from rabbit and takes the method from animal. Here's the diagram of what happens: ### Methods, not function properties ` is defined for methods both in classes and in plain objects. But for objects, methods must be specified exactly as method(), not as "method: function()"`. The difference may be non-essential for us, but it's important for JavaScript. In the example below a non-method syntax is used for comparison. `` property is not set and the inheritance doesn't work: ## Summary 1. To extend a class: class Child extends Parent: - That means Child.prototype.__proto__ will be Parent.prototype, so methods are inherited. 2. When overriding a constructor: - We must call parent constructor as super() in Child constructor before using this. 3. When overriding another method: - We can use super.method() in a Child method to call Parent method. 4. Internals: - Methods remember their class/object in the internal ` property. That's how super` resolves parent methods. - So it's not safe to copy a method with super from one object to another. Also: - Arrow functions don't have their own this or super, so they transparently fit into the surrounding context.

web,development

Static properties and methods

We can also assign a method to the class as a whole. Such methods are called static. In a class declaration, they are prepended by static keyword, like this: That actually does the same as assigning it as a property directly: The value of this in User.staticMethod() call is the class constructor User itself (the "object before dot" rule). Usually, static methods are used to implement functions that belong to the class as a whole, but not to any particular object of it. For instance, we have Article objects and need a function to compare them. A natural solution would be to add Article.compare static method: Here Article.compare method stands "above" articles, as a means to compare them. It's not a method of an article, but rather of the whole class. Another example would be a so-called "factory" method. Let's say, we need multiple ways to create an article: 1. Create by given parameters (title, date etc). 2. Create an empty article with today's date. 3. ...or else somehow. The first way can be implemented by the constructor. And for the second one we can make a static method of the class. Such as Article.createTodays() here: Now every time we need to create a today's digest, we can call Article.createTodays(). Once again, that's not a method of an article, but a method of the whole class. Static methods are also used in database-related classes to search/save/remove entries from the database, like this: // ... article.createTodays(); /// Error: article.createTodays is not a function ## Static properties [recent browser=Chrome] Static properties are also possible, they look like regular class properties, but prepended by static: That is the same as a direct assignment to Article: ## Inheritance of static properties and methods [#statics-and-inheritance] Static properties and methods are inherited. For instance, Animal.compare and Animal.planet in the code below are inherited and accessible as Rabbit.compare and Rabbit.planet: Now when we call Rabbit.compare, the inherited Animal.compare will be called. How does it work? Again, using prototypes. As you might have already guessed, extends gives Rabbit the ` reference to Animal`. So, Rabbit extends Animal creates two `` references: 1. Rabbit function prototypally inherits from Animal function. 2. Rabbit.prototype prototypally inherits from Animal.prototype. As a result, inheritance works both for regular and static methods. Here, let's check that by code: ## Summary Static methods are used for the functionality that belongs to the class "as a whole". It doesn't relate to a concrete class instance. For example, a method for comparison Article.compare(article1, article2) or a factory method Article.createTodays(). They are labeled by the word static in class declaration. Static properties are used when we'd like to store class-level data, also not bound to an instance. The syntax is: Technically, static declaration is the same as assigning to the class itself: Static properties and methods are inherited. For class B extends A the prototype of the class B itself points to A: B. = A. So if a field is not found in B, the search continues in A.

web,development

Private and protected properties and methods

One of the most important principles of object oriented programming -- delimiting internal interface from the external one. That is "a must" practice in developing anything more complex than a "hello world" app. To understand this, let's break away from development and turn our eyes into the real world. Usually, devices that we're using are quite complex. But delimiting the internal interface from the external one allows to use them without problems. ## A real-life example For instance, a coffee machine. Simple from outside: a button, a display, a few holes...And, surely, the result -- great coffee! :) But inside... (a picture from the repair manual) A lot of details. But we can use it without knowing anything. Coffee machines are quite reliable, aren't they? We can use one for years, and only if something goes wrong -- bring it for repairs. The secret of reliability and simplicity of a coffee machine -- all details are well-tuned and hidden inside. If we remove the protective cover from the coffee machine, then using it will be much more complex (where to press?), and dangerous (it can electrocute). As we'll see, in programming objects are like coffee machines. But in order to hide inner details, we'll use not a protective cover, but rather special syntax of the language and conventions. ## Internal and external interface In object-oriented programming, properties and methods are split into two groups: - Internal interface -- methods and properties, accessible from other methods of the class, but not from the outside. - External interface -- methods and properties, accessible also from outside the class. If we continue the analogy with the coffee machine -- what's hidden inside: a boiler tube, heating element, and so on -- is its internal interface. An internal interface is used for the object to work, its details use each other. For instance, a boiler tube is attached to the heating element. But from the outside a coffee machine is closed by the protective cover, so that no one can reach those. Details are hidden and inaccessible. We can use its features via the external interface. So, all we need to use an object is to know its external interface. We may be completely unaware how it works inside, and that's great. That was a general introduction. In JavaScript, there are two types of object fields (properties and methods): - Public: accessible from anywhere. They comprise the external interface. Until now we were only using public properties and methods. - Private: accessible only from inside the class. These are for the internal interface. In many other languages there also exist "protected" fields: accessible only from inside the class and those extending it (like private, but plus access from inheriting classes). They are also useful for the internal interface. They are in a sense more widespread than private ones, because we usually want inheriting classes to gain access to them. Protected fields are not implemented in JavaScript on the language level, but in practice they are very convenient, so they are emulated. Now we'll make a coffee machine in JavaScript with all these types of properties. A coffee machine has a lot of details, we won't model them to stay simple (though we could). ## Protecting "waterAmount" Let's make a simple coffee machine class first: Right now the properties waterAmount and power are public. We can easily get/set them from the outside to any value. Let's change waterAmount property to protected to have more control over it. For instance, we don't want anyone to set it below zero. Protected properties are usually prefixed with an underscore _. That is not enforced on the language level, but there's a well-known convention between programmers that such properties and methods should not be accessed from the outside. So our property will be called _waterAmount: Now the access is under control, so setting the water amount below zero becomes impossible. ## Read-only "power" For power property, let's make it read-only. It sometimes happens that a property must be set at creation time only, and then never modified. That's exactly the case for a coffee machine: power never changes. To do so, we only need to make getter, but not the setter: class CoffeeMachine { _waterAmount = 0; !setWaterAmount(value)/! { if (value < 0) value = 0; this._waterAmount = value; !getWaterAmount()/! { return this._waterAmount; new CoffeeMachine().setWaterAmount(100); ## Private "#waterLimit" [recent browser=none] There's a finished JavaScript proposal, almost in the standard, that provides language-level support for private properties and methods. Privates should start with #. They are only accessible from inside the class. For instance, here's a private #waterLimit property and the water-checking private method #fixWaterAmount: On the language level, # is a special sign that the field is private. We can't access it from outside or from inheriting classes. Private fields do not conflict with public ones. We can have both private #waterAmount and public waterAmount fields at the same time. For instance, let's make waterAmount an accessor for #waterAmount: Unlike protected ones, private fields are enforced by the language itself. That's a good thing. But if we inherit from CoffeeMachine, then we'll have no direct access to #waterAmount. We'll need to rely on waterAmount getter/setter: In many scenarios such limitation is too severe. If we extend a CoffeeMachine, we may have legitimate reasons to access its internals. That's why protected fields are used more often, even though they are not supported by the language syntax. class User { ... sayHi() { let fieldName = "name"; alert(Hello, ${!this[fieldName]/!}); ## Summary In terms of OOP, delimiting of the internal interface from the external one is called encapsulation). It gives the following benefits: Protection for users, so that they don't shoot themselves in the foot : Imagine, there's a team of developers using a coffee machine. It was made by the "Best CoffeeMachine" company, and works fine, but a protective cover was removed. So the internal interface is exposed. All developers are civilized -- they use the coffee machine as intended. But one of them, John, decided that he's the smartest one, and made some tweaks in the coffee machine internals. So the coffee machine failed two days later. That's surely not John's fault, but rather the person who removed the protective cover and let John do his manipulations. The same in programming. If a user of a class will change things not intended to be changed from the outside -- the consequences are unpredictable. Supportable : The situation in programming is more complex than with a real-life coffee machine, because we don't just buy it once. The code constantly undergoes development and improvement. If we strictly delimit the internal interface, then the developer of the class can freely change its internal properties and methods, even without informing the users. If you're a developer of such class, it's great to know that private methods can be safely renamed, their parameters can be changed, and even removed, because no external code depends on them. For users, when a new version comes out, it may be a total overhaul internally, but still simple to upgrade if the external interface is the same. Hiding complexity : People adore using things that are simple. At least from outside. What's inside is a different thing. Programmers are not an exception. It's always convenient when implementation details are hidden, and a simple, well-documented external interface is available. To hide an internal interface we use either protected or private properties: - Protected fields start with _. That's a well-known convention, not enforced at the language level. Programmers should only access a field starting with _ from its class and classes inheriting from it. - Private fields start with #. JavaScript makes sure we can only access those from inside the class. Right now, private fields are not well-supported among browsers, but can be polyfilled.

web,development

Extending built-in classes

Built-in classes like Array, Map and others are extendable also. For instance, here PowerArray inherits from the native Array: Please note a very interesting thing. Built-in methods like filter, map and others -- return new objects of exactly the inherited type PowerArray. Their internal implementation uses the object's constructor property for that. In the example above, When arr.filter() is called, it internally creates the new array of results using exactly arr.constructor, not basic Array. That's actually very cool, because we can keep using PowerArray methods further on the result. Even more, we can customize that behavior. We can add a special static getter Symbol.species to the class. If it exists, it should return the constructor that JavaScript will use internally to create new entities in map, filter and so on. If we'd like built-in methods like map or filter to return regular arrays, we can return Array in Symbol.species, like here: As you can see, now .filter returns Array. So the extended functionality is not passed any further. ## No static inheritance in built-ins Built-in objects have their own static methods, for instance Object.keys, Array.isArray etc. As we already know, native classes extend each other. For instance, Array extends Object. Normally, when one class extends another, both static and non-static methods are inherited. That was thoroughly explained in the article [](info:static-properties-methods#statics-and-inheritance). But built-in classes are an exception. They don't inherit statics from each other. For example, both Array and Date inherit from Object, so their instances have methods from Object.prototype. But Array. does not reference Object, so there's no, for instance, Array.keys() (or Date.keys()) static method. Here's the picture structure for Date and Object: As you can see, there's no link between Date and Object. They are independent, only Date.prototype inherits from Object.prototype. That's an important difference of inheritance between built-in objects compared to what we get with extends.

web,development

Class checking: "instanceof"

The instanceof operator allows to check whether an object belongs to a certain class. It also takes inheritance into account. Such a check may be necessary in many cases. For example, it can be used for building a polymorphic function, the one that treats arguments differently depending on their type. ## The instanceof operator [#ref-instanceof] The syntax is: It returns true if obj belongs to the Class or a class inheriting from it. For instance: It also works with constructor functions: ...And with built-in classes like Array: Please note that arr also belongs to the Object class. That's because Array prototypically inherits from Object. Normally, instanceof examines the prototype chain for the check. We can also set a custom logic in the static method Symbol.hasInstance. The algorithm of obj instanceof Class works roughly as follows: 1. If there's a static method Symbol.hasInstance, then just call it: ClassSymbol.hasInstance. It should return either true or false, and we're done. That's how we can customize the behavior of instanceof. For example: ```js run // set up instanceof check that assumes that // anything with canEat property is an animal class Animal { static Symbol.hasInstance { if (obj.canEat) return true; let obj = { canEat: true }; alert(obj instanceof Animal); // true: AnimalSymbol.hasInstance is called ``` 2. Most classes do not have Symbol.hasInstance. In that case, the standard logic is used: obj instanceof Class checks whether Class.prototype is equal to one of the prototypes in the obj prototype chain. In other words, compare one after another: ```js obj.__proto__ === Class.prototype? obj.__proto__.__proto__ === Class.prototype? obj.__proto__.__proto__.__proto__ === Class.prototype? ... // if any answer is true, return true // otherwise, if we reached the end of the chain, return false ``` In the example above rabbit.__proto__ === Rabbit.prototype, so that gives the answer immediately. In the case of an inheritance, the match will be at the second step: ```js run class Animal {} class Rabbit extends Animal {} let rabbit = new Rabbit(); alert(rabbit instanceof Animal); // true // rabbit.__proto__ === Animal.prototype (no match) // rabbit.__proto__.__proto__ === Animal.prototype (match!) ``` Here's the illustration of what rabbit instanceof Animal compares with Animal.prototype: By the way, there's also a method objA.isPrototypeOf(objB), that returns true if objA is somewhere in the chain of prototypes for objB. So the test of obj instanceof Class can be rephrased as Class.prototype.isPrototypeOf(obj). It's funny, but the Class constructor itself does not participate in the check! Only the chain of prototypes and Class.prototype matters. That can lead to interesting consequences when a prototype property is changed after the object is created. Like here: ## Bonus: Object.prototype.toString for the type We already know that plain objects are converted to string as [object Object]: That's their implementation of toString. But there's a hidden feature that makes toString actually much more powerful than that. We can use it as an extended typeof and an alternative for instanceof. Sounds strange? Indeed. Let's demystify. By specification, the built-in toString can be extracted from the object and executed in the context of any other value. And its result depends on that value. - For a number, it will be [object Number] - For a boolean, it will be [object Boolean] - For null: [object Null] - For undefined: [object Undefined] - For arrays: [object Array] - ...etc (customizable). Let's demonstrate: Here we used call as described in the chapter [](info:call-apply-decorators) to execute the function objectToString in the context this=arr. Internally, the toString algorithm examines this and returns the corresponding result. More examples: ### Symbol.toStringTag The behavior of Object toString can be customized using a special object property Symbol.toStringTag. For instance: For most environment-specific objects, there is such a property. Here are some browser specific examples: As you can see, the result is exactly Symbol.toStringTag (if exists), wrapped into [object ...]. At the end we have "typeof on steroids" that not only works for primitive data types, but also for built-in objects and even can be customized. We can use {}.toString.call instead of instanceof for built-in objects when we want to get the type as a string rather than just to check. ## Summary Let's summarize the type-checking methods that we know: As we can see, {}.toString is technically a "more advanced" typeof. And instanceof operator really shines when we are working with a class hierarchy and want to check for the class taking into account inheritance.

web,development

Mixins

In JavaScript we can only inherit from a single object. There can be only one `` for an object. And a class may extend only one other class. But sometimes that feels limiting. For instance, we have a class StreetSweeper and a class Bicycle, and want to make their mix: a StreetSweepingBicycle. Or we have a class User and a class EventEmitter that implements event generation, and we'd like to add the functionality of EventEmitter to User, so that our users can emit events. There's a concept that can help here, called "mixins". As defined in Wikipedia, a mixin is a class containing methods that can be used by other classes without a need to inherit from it. In other words, a mixin provides methods that implement a certain behavior, but we do not use it alone, we use it to add the behavior to other classes. ## A mixin example The simplest way to implement a mixin in JavaScript is to make an object with useful methods, so that we can easily merge them into a prototype of any class. For instance here the mixin sayHiMixin is used to add some "speech" for User: There's no inheritance, but a simple method copying. So User may inherit from another class and also include the mixin to "mix-in" the additional methods, like this: Mixins can make use of inheritance inside themselves. For instance, here sayHiMixin inherits from sayMixin: Please note that the call to the parent method super.say() from sayHiMixin (at lines labelled with (*)) looks for the method in the prototype of that mixin, not the class. Here's the diagram (see the right part): That's because methods sayHi and sayBye were initially created in sayHiMixin. So even though they got copied, their ` internal property references sayHiMixin`, as shown in the picture above. As super looks for parent methods in ., that means it searches sayHiMixin.. ## EventMixin Now let's make a mixin for real life. An important feature of many browser objects (for instance) is that they can generate events. Events are a great way to "broadcast information" to anyone who wants it. So let's make a mixin that allows us to easily add event-related functions to any class/object. - The mixin will provide a method .trigger(name, [...data]) to "generate an event" when something important happens to it. The name argument is a name of the event, optionally followed by additional arguments with event data. - Also the method .on(name, handler) that adds handler function as the listener to events with the given name. It will be called when an event with the given name triggers, and get the arguments from the .trigger call. - ...And the method .off(name, handler) that removes the handler listener. After adding the mixin, an object user will be able to generate an event "login" when the visitor logs in. And another object, say, calendar may want to listen for such events to load the calendar for the logged-in person. Or, a menu can generate the event "select" when a menu item is selected, and other objects may assign handlers to react on that event. And so on. Here's the code: - .on(eventName, handler) -- assigns function handler to run when the event with that name occurs. Technically, there's an _eventHandlers property that stores an array of handlers for each event name, and it just adds it to the list. - .off(eventName, handler) -- removes the function from the handlers list. - .trigger(eventName, ...args) -- generates the event: all handlers from _eventHandlers[eventName] are called, with a list of arguments ...args. Usage: Now, if we'd like any code to react to a menu selection, we can listen for it with menu.on(...). And eventMixin mixin makes it easy to add such behavior to as many classes as we'd like, without interfering with the inheritance chain. ## Summary Mixin -- is a generic object-oriented programming term: a class that contains methods for other classes. Some other languages allow multiple inheritance. JavaScript does not support multiple inheritance, but mixins can be implemented by copying methods into prototype. We can use mixins as a way to augment a class by adding multiple behaviors, like event-handling as we have seen above. Mixins may become a point of conflict if they accidentally overwrite existing class methods. So generally one should think well about the naming methods of a mixin, to minimize the probability of that happening.

web,development

Error handling, "try...catch"

No matter how great we are at programming, sometimes our scripts have errors. They may occur because of our mistakes, an unexpected user input, an erroneous server response, and for a thousand other reasons. Usually, a script "dies" (immediately stops) in case of an error, printing it to console. But there's a syntax construct try...catch that allows us to "catch" errors so the script can, instead of dying, do something more reasonable. ## The "try...catch" syntax The try...catch construct has two main blocks: try, and then catch: It works like this: 1. First, the code in try {...} is executed. 2. If there were no errors, then catch (err) is ignored: the execution reaches the end of try and goes on, skipping catch. 3. If an error occurs, then the try execution is stopped, and control flows to the beginning of catch (err). The err variable (we can use any name for it) will contain an error object with details about what happened. So, an error inside the try {...} block does not kill the script -- we have a chance to handle it in catch. Let's look at some examples. - An errorless example: shows alert (1) and (2): ```js run try { alert('Start of try runs'); // !(1) <--/! // ...no errors here alert('End of try runs'); // !(2) <--/! } catch (err) { alert('Catch is ignored, because there are no errors'); // (3) ``` - An example with an error: shows (1) and (3): ```js run try { alert('Start of try runs'); // !(1) <--/! lalala; // error, variable is not defined! alert('End of try (never reached)'); // (2) } catch (err) { alert(Error has occurred!); // !(3) <--/! ``` try { {{{{{{{{{{{{ } catch (err) { alert("The engine can't understand this code, it's invalid"); try { setTimeout(function() { noSuchVariable; // script will die here }, 1000); } catch (err) { alert( "won't work" ); setTimeout(function() { try { noSuchVariable; // try...catch handles the error! } catch { alert( "error is caught here!" ); }, 1000); ## Error object When an error occurs, JavaScript generates an object containing the details about it. The object is then passed as an argument to catch: For all built-in errors, the error object has two main properties: name : Error name. For instance, for an undefined variable that's "ReferenceError". message : Textual message about error details. There are other non-standard properties available in most environments. One of most widely used and supported is: stack : Current call stack: a string with information about the sequence of nested calls that led to the error. Used for debugging purposes. For instance: ## Optional "catch" binding [recent browser=new] If we don't need error details, catch may omit it: ## Using "try...catch" Let's explore a real-life use case of try...catch. As we already know, JavaScript supports the JSON.parse(str) method to read JSON-encoded values. Usually it's used to decode data received over the network, from the server or another source. We receive it and call JSON.parse like this: You can find more detailed information about JSON in the <info:json> chapter. If json is malformed, JSON.parse generates an error, so the script "dies". Should we be satisfied with that? Of course not! This way, if something's wrong with the data, the visitor will never know that (unless they open the developer console). And people really don't like when something "just dies" without any error message. Let's use try...catch to handle the error: Here we use the catch block only to show the message, but we can do much more: send a new network request, suggest an alternative to the visitor, send information about the error to a logging facility, ... . All much better than just dying. ## Throwing our own errors What if json is syntactically correct, but doesn't have a required name property? Like this: Here JSON.parse runs normally, but the absence of name is actually an error for us. To unify error handling, we'll use the throw operator. ### "Throw" operator The throw operator generates an error. The syntax is: Technically, we can use anything as an error object. That may be even a primitive, like a number or a string, but it's better to use objects, preferably with name and message properties (to stay somewhat compatible with built-in errors). JavaScript has many built-in constructors for standard errors: Error, SyntaxError, ReferenceError, TypeError and others. We can use them to create error objects as well. Their syntax is: For built-in errors (not for any objects, just for errors), the name property is exactly the name of the constructor. And message is taken from the argument. For instance: Let's see what kind of error JSON.parse generates: As we can see, that's a SyntaxError. And in our case, the absence of name is an error, as users must have a name. So let's throw it: In the line (*), the throw operator generates a SyntaxError with the given message, the same way as JavaScript would generate it itself. The execution of try immediately stops and the control flow jumps into catch. Now catch became a single place for all error handling: both for JSON.parse and other cases. ## Rethrowing In the example above we use try...catch to handle incorrect data. But is it possible that another unexpected error occurs within the try {...} block? Like a programming error (variable is not defined) or something else, not just this "incorrect data" thing. For example: Of course, everything's possible! Programmers do make mistakes. Even in open-source utilities used by millions for decades -- suddenly a bug may be discovered that leads to terrible hacks. In our case, try...catch is placed to catch "incorrect data" errors. But by its nature, catch gets all errors from try. Here it gets an unexpected error, but still shows the same "JSON Error" message. That's wrong and also makes the code more difficult to debug. To avoid such problems, we can employ the "rethrowing" technique. The rule is simple: Catch should only process errors that it knows and "rethrow" all others. The "rethrowing" technique can be explained in more detail as: 1. Catch gets all errors. 2. In the catch (err) {...} block we analyze the error object err. 3. If we don't know how to handle it, we do throw err. Usually, we can check the error type using the instanceof operator: We can also get the error class name from err.name property. All native errors have it. Another option is to read err.constructor.name. In the code below, we use rethrowing so that catch only handles SyntaxError: The error throwing on line (*) from inside catch block "falls out" of try...catch and can be either caught by an outer try...catch construct (if it exists), or it kills the script. So the catch block actually handles only errors that it knows how to deal with and "skips" all others. The example below demonstrates how such errors can be caught by one more level of try...catch: Here readData only knows how to handle SyntaxError, while the outer try...catch knows how to handle everything. ## try...catch...finally Wait, that's not all. The try...catch construct may have one more code clause: finally. If it exists, it runs in all cases: - after try, if there were no errors, - after catch, if there were errors. The extended syntax looks like this: Try running this code: The code has two ways of execution: 1. If you answer "Yes" to "Make an error?", then try -> catch -> finally. 2. If you say "No", then try -> finally. The finally clause is often used when we start doing something and want to finalize it in any case of outcome. For instance, we want to measure the time that a Fibonacci numbers function fib(n) takes. Naturally, we can start measuring before it runs and finish afterwards. But what if there's an error during the function call? In particular, the implementation of fib(n) in the code below returns an error for negative or non-integer numbers. The finally clause is a great place to finish the measurements no matter what. Here finally guarantees that the time will be measured correctly in both situations -- in case of a successful execution of fib and in case of an error in it: You can check by running the code with entering 35 into prompt -- it executes normally, finally after try. And then enter -1 -- there will be an immediate error, and the execution will take 0ms. Both measurements are done correctly. In other words, the function may finish with return or throw, that doesn't matter. The finally clause executes in both cases. function func() { try { return 1; } catch (err) { / ... / } finally { alert( 'finally' ); alert( func() ); // first works alert from finally, and then this one function func() { // start doing something that needs completion (like measurements) try { // ... } finally { // complete that thing even if all dies ## Global catch Let's imagine we've got a fatal error outside of try...catch, and the script died. Like a programming error or some other terrible thing. Is there a way to react on such occurrences? We may want to log the error, show something to the user (normally they don't see error messages), etc. There is none in the specification, but environments usually provide it, because it's really useful. For instance, Node.js has process.on("uncaughtException") for that. And in the browser we can assign a function to the special window.onerror property, that will run in case of an uncaught error. The syntax: message : Error message. url : URL of the script where error happened. line, col : Line and column numbers where error happened. error : Error object. For instance: The role of the global handler window.onerror is usually not to recover the script execution -- that's probably impossible in case of programming errors, but to send the error message to developers. There are also web-services that provide error-logging for such cases, like <https://muscula.com> or <https://www.sentry.io>. They work like this: 1. We register at the service and get a piece of JS (or a script URL) from them to insert on pages. 2. That JS script sets a custom window.onerror function. 3. When an error occurs, it sends a network request about it to the service. 4. We can log in to the service web interface and see errors. ## Summary The try...catch construct allows to handle runtime errors. It literally allows to "try" running the code and "catch" errors that may occur in it. The syntax is: There may be no catch section or no finally, so shorter constructs try...catch and try...finally are also valid. Error objects have following properties: - message -- the human-readable error message. - name -- the string with error name (error constructor name). - stack (non-standard, but well-supported) -- the stack at the moment of error creation. If an error object is not needed, we can omit it by using catch { instead of catch (err) {. We can also generate our own errors using the throw operator. Technically, the argument of throw can be anything, but usually it's an error object inheriting from the built-in Error class. More on extending errors in the next chapter. Rethrowing is a very important pattern of error handling: a catch block usually expects and knows how to handle the particular error type, so it should rethrow errors it doesn't know. Even if we don't have try...catch, most environments allow us to setup a "global" error handler to catch errors that "fall out". In-browser, that's window.onerror.

web,development

Custom errors, extending Error

When we develop something, we often need our own error classes to reflect specific things that may go wrong in our tasks. For errors in network operations we may need HttpError, for database operations DbError, for searching operations NotFoundError and so on. Our errors should support basic error properties like message, name and, preferably, stack. But they also may have other properties of their own, e.g. HttpError objects may have a statusCode property with a value like 404 or 403 or 500. JavaScript allows to use throw with any argument, so technically our custom error classes don't need to inherit from Error. But if we inherit, then it becomes possible to use obj instanceof Error to identify error objects. So it's better to inherit from it. As the application grows, our own errors naturally form a hierarchy. For instance, HttpTimeoutError may inherit from HttpError, and so on. ## Extending Error As an example, let's consider a function readUser(json) that should read JSON with user data. Here's an example of how a valid json may look: Internally, we'll use JSON.parse. If it receives malformed json, then it throws SyntaxError. But even if json is syntactically correct, that doesn't mean that it's a valid user, right? It may miss the necessary data. For instance, it may not have name and age properties that are essential for our users. Our function readUser(json) will not only read JSON, but check ("validate") the data. If there are no required fields, or the format is wrong, then that's an error. And that's not a SyntaxError, because the data is syntactically correct, but another kind of error. We'll call it ValidationError and create a class for it. An error of that kind should also carry the information about the offending field. Our ValidationError class should inherit from the Error class. The Error class is built-in, but here's its approximate code so we can understand what we're extending: Now let's inherit ValidationError from it and try it in action: Please note: in the line (1) we call the parent constructor. JavaScript requires us to call super in the child constructor, so that's obligatory. The parent constructor sets the message property. The parent constructor also sets the name property to "Error", so in the line (2) we reset it to the right value. Let's try to use it in readUser(json): The try..catch block in the code above handles both our ValidationError and the built-in SyntaxError from JSON.parse. Please take a look at how we use instanceof to check for the specific error type in the line (*). We could also look at err.name, like this: The instanceof version is much better, because in the future we are going to extend ValidationError, make subtypes of it, like PropertyRequiredError. And instanceof check will continue to work for new inheriting classes. So that's future-proof. Also it's important that if catch meets an unknown error, then it rethrows it in the line (**). The catch block only knows how to handle validation and syntax errors, other kinds (caused by a typo in the code or other unknown reasons) should fall through. ## Further inheritance The ValidationError class is very generic. Many things may go wrong. The property may be absent or it may be in a wrong format (like a string value for age instead of a number). Let's make a more concrete class PropertyRequiredError, exactly for absent properties. It will carry additional information about the property that's missing. The new class PropertyRequiredError is easy to use: we only need to pass the property name: new PropertyRequiredError(property). The human-readable message is generated by the constructor. Please note that this.name in PropertyRequiredError constructor is again assigned manually. That may become a bit tedious -- to assign this.name = <class name> in every custom error class. We can avoid it by making our own "basic error" class that assigns this.name = this.constructor.name. And then inherit all our custom errors from it. Let's call it MyError. Here's the code with MyError and other custom error classes, simplified: Now custom errors are much shorter, especially ValidationError, as we got rid of the "this.name = ..." line in the constructor. ## Wrapping exceptions The purpose of the function readUser in the code above is "to read the user data". There may occur different kinds of errors in the process. Right now we have SyntaxError and ValidationError, but in the future readUser function may grow and probably generate other kinds of errors. The code which calls readUser should handle these errors. Right now it uses multiple ifs in the catch block, that check the class and handle known errors and rethrow the unknown ones. The scheme is like this: In the code above we can see two types of errors, but there can be more. If the readUser function generates several kinds of errors, then we should ask ourselves: do we really want to check for all error types one-by-one every time? Often the answer is "No": we'd like to be "one level above all that". We just want to know if there was a "data reading error" -- why exactly it happened is often irrelevant (the error message describes it). Or, even better, we'd like to have a way to get the error details, but only if we need to. The technique that we describe here is called "wrapping exceptions". 1. We'll make a new class ReadError to represent a generic "data reading" error. 2. The function readUser will catch data reading errors that occur inside it, such as ValidationError and SyntaxError, and generate a ReadError instead. 3. The ReadError object will keep the reference to the original error in its cause property. Then the code that calls readUser will only have to check for ReadError, not for every kind of data reading errors. And if it needs more details of an error, it can check its cause property. Here's the code that defines ReadError and demonstrates its use in readUser and try..catch: In the code above, readUser works exactly as described -- catches syntax and validation errors and throws ReadError errors instead (unknown errors are rethrown as usual). So the outer code checks instanceof ReadError and that's it. No need to list all possible error types. The approach is called "wrapping exceptions", because we take "low level" exceptions and "wrap" them into ReadError that is more abstract. It is widely used in object-oriented programming. ## Summary - We can inherit from Error and other built-in error classes normally. We just need to take care of the name property and don't forget to call super. - We can use instanceof to check for particular errors. It also works with inheritance. But sometimes we have an error object coming from a 3rd-party library and there's no easy way to get its class. Then name property can be used for such checks. - Wrapping exceptions is a widespread technique: a function handles low-level exceptions and creates higher-level errors instead of various low-level ones. Low-level exceptions sometimes become properties of that object like err.cause in the examples above, but that's not strictly required.

web,development

Introduction: callbacks

Many functions are provided by JavaScript host environments that allow you to schedule asynchronous actions. In other words, actions that we initiate now, but they finish later. For instance, one such function is the setTimeout function. There are other real-world examples of asynchronous actions, e.g. loading scripts and modules (we'll cover them in later chapters). Take a look at the function loadScript(src), that loads a script with the given src: It inserts into the document a new, dynamically created, tag <script src="…"> with the given src. The browser automatically starts loading it and executes when complete. We can use this function like this: The script is executed "asynchronously", as it starts loading now, but runs later, when the function has already finished. If there's any code below loadScript(…), it doesn't wait until the script loading finishes. Let's say we need to use the new script as soon as it loads. It declares new functions, and we want to run them. But if we do that immediately after the loadScript(…) call, that wouldn't work: Naturally, the browser probably didn't have time to load the script. As of now, the loadScript function doesn't provide a way to track the load completion. The script loads and eventually runs, that's all. But we'd like to know when it happens, to use new functions and variables from that script. Let's add a callback function as a second argument to loadScript that should execute when the script loads: The onload event is described in the article <info:onload-onerror#loading-a-script>, it basically executes a function after the script is loaded and executed. Now if we want to call new functions from the script, we should write that in the callback: That's the idea: the second argument is a function (usually anonymous) that runs when the action is completed. Here's a runnable example with a real script: That's called a "callback-based" style of asynchronous programming. A function that does something asynchronously should provide a callback argument where we put the function to run after it's complete. Here we did it in loadScript, but of course it's a general approach. ## Callback in callback How can we load two scripts sequentially: the first one, and then the second one after it? The natural solution would be to put the second loadScript call inside the callback, like this: After the outer loadScript is complete, the callback initiates the inner one. What if we want one more script...? So, every new action is inside a callback. That's fine for few actions, but not good for many, so we'll see other variants soon. ## Handling errors In the above examples we didn't consider errors. What if the script loading fails? Our callback should be able to react on that. Here's an improved version of loadScript that tracks loading errors: It calls callback(null, script) for successful load and callback(error) otherwise. The usage: Once again, the recipe that we used for loadScript is actually quite common. It's called the "error-first callback" style. The convention is: 1. The first argument of the callback is reserved for an error if it occurs. Then callback(err) is called. 2. The second argument (and the next ones if needed) are for the successful result. Then callback(null, result1, result2…) is called. So the single callback function is used both for reporting errors and passing back results. ## Pyramid of Doom At first glance, it looks like a viable approach to asynchronous coding. And indeed it is. For one or maybe two nested calls it looks fine. But for multiple asynchronous actions that follow one after another, we'll have code like this: In the code above: 1. We load 1.js, then if there's no error... 2. We load 2.js, then if there's no error... 3. We load 3.js, then if there's no error -- do something else (*). As calls become more nested, the code becomes deeper and increasingly more difficult to manage, especially if we have real code instead of ... that may include more loops, conditional statements and so on. That's sometimes called "callback hell" or "pyramid of doom." <!-- loadScript('1.js', function(error, script) { if (error) { handleError(error); } else { // ... loadScript('2.js', function(error, script) { if (error) { handleError(error); } else { // ... loadScript('3.js', function(error, script) { if (error) { handleError(error); } else { // ... }); }); }); --> The "pyramid" of nested calls grows to the right with every asynchronous action. Soon it spirals out of control. So this way of coding isn't very good. We can try to alleviate the problem by making every action a standalone function, like this: See? It does the same thing, and there's no deep nesting now because we made every action a separate top-level function. It works, but the code looks like a torn apart spreadsheet. It's difficult to read, and you probably noticed that one needs to eye-jump between pieces while reading it. That's inconvenient, especially if the reader is not familiar with the code and doesn't know where to eye-jump. Also, the functions named step* are all of single use, they are created only to avoid the "pyramid of doom." No one is going to reuse them outside of the action chain. So there's a bit of namespace cluttering here. We'd like to have something better. Luckily, there are other ways to avoid such pyramids. One of the best ways is to use "promises", described in the next chapter.

web,development

Promise

Imagine that you're a top singer, and fans ask day and night for your upcoming song. To get some relief, you promise to send it to them when it's published. You give your fans a list. They can fill in their email addresses, so that when the song becomes available, all subscribed parties instantly receive it. And even if something goes very wrong, say, a fire in the studio, so that you can't publish the song, they will still be notified. Everyone is happy: you, because the people don't crowd you anymore, and fans, because they won't miss the song. This is a real-life analogy for things we often have in programming: 1. A "producing code" that does something and takes time. For instance, some code that loads the data over a network. That's a "singer". 2. A "consuming code" that wants the result of the "producing code" once it's ready. Many functions may need that result. These are the "fans". 3. A promise is a special JavaScript object that links the "producing code" and the "consuming code" together. In terms of our analogy: this is the "subscription list". The "producing code" takes whatever time it needs to produce the promised result, and the "promise" makes that result available to all of the subscribed code when it's ready. The analogy isn't terribly accurate, because JavaScript promises are more complex than a simple subscription list: they have additional features and limitations. But it's fine to begin with. The constructor syntax for a promise object is: The function passed to new Promise is called the executor. When new Promise is created, the executor runs automatically. It contains the producing code which should eventually produce the result. In terms of the analogy above: the executor is the "singer". Its arguments resolve and reject are callbacks provided by JavaScript itself. Our code is only inside the executor. When the executor obtains the result, be it soon or late, doesn't matter, it should call one of these callbacks: - resolve(value) — if the job is finished successfully, with result value. - reject(error) — if an error has occurred, error is the error object. So to summarize: the executor runs automatically and attempts to perform a job. When it is finished with the attempt, it calls resolve if it was successful or reject if there was an error. The promise object returned by the new Promise constructor has these internal properties: - state — initially "pending", then changes to either "fulfilled" when resolve is called or "rejected" when reject is called. - result — initially undefined, then changes to value when resolve(value) is called or error when reject(error) is called. So the executor eventually moves promise to one of these states: Later we'll see how "fans" can subscribe to these changes. Here's an example of a promise constructor and a simple executor function with "producing code" that takes time (via setTimeout): We can see two things by running the code above: 1. The executor is called automatically and immediately (by new Promise). 2. The executor receives two arguments: resolve and reject. These functions are pre-defined by the JavaScript engine, so we don't need to create them. We should only call one of them when ready. After one second of "processing", the executor calls resolve("done") to produce the result. This changes the state of the promise object: That was an example of a successful job completion, a "fulfilled promise". And now an example of the executor rejecting the promise with an error: The call to reject(...) moves the promise object to "rejected" state: To summarize, the executor should perform a job (usually something that takes time) and then call resolve or reject to change the state of the corresponding promise object. A promise that is either resolved or rejected is called "settled", as opposed to an initially "pending" promise. let promise = new Promise(function(resolve, reject) { resolve("done"); reject(new Error("…")); // ignored setTimeout(() => resolve("…")); // ignored }); let promise = new Promise(function(resolve, reject) { // not taking our time to do the job resolve(123); // immediately give the result: 123 }); ## Consumers: then, catch A Promise object serves as a link between the executor (the "producing code" or "singer") and the consuming functions (the "fans"), which will receive the result or error. Consuming functions can be registered (subscribed) using the methods .then and .catch. ### then The most important, fundamental one is .then. The syntax is: The first argument of .then is a function that runs when the promise is resolved and receives the result. The second argument of .then is a function that runs when the promise is rejected and receives the error. For instance, here's a reaction to a successfully resolved promise: The first function was executed. And in the case of a rejection, the second one: If we're interested only in successful completions, then we can provide only one function argument to .then: ### catch If we're interested only in errors, then we can use null as the first argument: .then(null, errorHandlingFunction). Or we can use .catch(errorHandlingFunction), which is exactly the same: The call .catch(f) is a complete analog of .then(null, f), it's just a shorthand. ## Cleanup: finally Just like there's a finally clause in a regular try {...} catch {...}, there's finally in promises. The call .finally(f) is similar to .then(f, f) in the sense that f runs always, when the promise is settled: be it resolve or reject. The idea of finally is to set up a handler for performing cleanup/finalizing after the previous operations are complete. E.g. stopping loading indicators, closing no longer needed connections, etc. Think of it as a party finisher. Irresepective of whether a party was good or bad, how many friends were in it, we still need (or at least should) do a cleanup after it. The code may look like this: Please note that finally(f) isn't exactly an alias of then(f,f) though. There are important differences: 1. A finally handler has no arguments. In finally we don't know whether the promise is successful or not. That's all right, as our task is usually to perform "general" finalizing procedures. Please take a look at the example above: as you can see, the finally handler has no arguments, and the promise outcome is handled by the next handler. 2. A finally handler "passes through" the result or error to the next suitable handler. For instance, here the result is passed through finally to then: ```js run new Promise((resolve, reject) => { setTimeout(() => resolve("value"), 2000); .finally(() => alert("Promise ready")) // triggers first .then(result => alert(result)); // <-- .then shows "value" ``` As you can see, the value returned by the first promise is passed through finally to the next then. That's very convenient, because finally is not meant to process a promise result. As said, it's a place to do generic cleanup, no matter what the outcome was. And here's an example of an error, for us to see how it's passed through finally to catch: ```js run new Promise((resolve, reject) => { throw new Error("error"); .finally(() => alert("Promise ready")) // triggers first .catch(err => alert(err)); // <-- .catch shows the error ``` 3. A finally handler also shouldn't return anything. If it does, the returned value is silently ignored. The only exception to this rule is when a finally handler throws an error. Then this error goes to the next handler, instead of any previous outcome. To summarize: - A finally handler doesn't get the outcome of the previous handler (it has no arguments). This outcome is passed through instead, to the next suitable handler. - If a finally handler returns something, it's ignored. - When finally throws an error, then the execution goes to the nearest error handler. These features are helpful and make things work just the right way if we use finally how it's supposed to be used: for generic cleanup procedures. // the promise becomes resolved immediately upon creation let promise = new Promise(resolve => resolve("done!")); promise.then(alert); // done! (shows up right now) ## Example: loadScript [#loadscript] Next, let's see more practical examples of how promises can help us write asynchronous code. We've got the loadScript function for loading a script from the previous chapter. Here's the callback-based variant, just to remind us of it: Let's rewrite it using Promises. The new function loadScript will not require a callback. Instead, it will create and return a Promise object that resolves when the loading is complete. The outer code can add handlers (subscribing functions) to it using .then: Usage: We can immediately see a few benefits over the callback-based pattern: So promises give us better code flow and flexibility. But there's more. We'll see that in the next chapters.

promise

Promises chaining

Let's return to the problem mentioned in the chapter <info:callbacks>: we have a sequence of asynchronous tasks to be performed one after another — for instance, loading scripts. How can we code it well? Promises provide a couple of recipes to do that. In this chapter we cover promise chaining. It looks like this: The idea is that the result is passed through the chain of .then handlers. Here the flow is: 1. The initial promise resolves in 1 second (*), 2. Then the .then handler is called (**), which in turn creates a new promise (resolved with 2 value). 3. The next then (***) gets the result of the previous one, processes it (doubles) and passes it to the next handler. 4. ...and so on. As the result is passed along the chain of handlers, we can see a sequence of alert calls: 1 -> 2 -> 4. The whole thing works, because every call to a .then returns a new promise, so that we can call the next .then on it. When a handler returns a value, it becomes the result of that promise, so the next .then is called with it. A classic newbie error: technically we can also add many .then to a single promise. This is not chaining. For example: What we did here is just adding several handlers to one promise. They don't pass the result to each other; instead they process it independently. Here's the picture (compare it with the chaining above): All .then on the same promise get the same result -- the result of that promise. So in the code above all alert show the same: 1. In practice we rarely need multiple handlers for one promise. Chaining is used much more often. ## Returning promises A handler, used in .then(handler) may create and return a promise. In that case further handlers wait until it settles, and then get its result. For instance: Here the first .then shows 1 and returns new Promise(…) in the line (). After one second it resolves, and the result (the argument of resolve, here it's result 2) is passed on to the handler of the second .then. That handler is in the line (**), it shows 2 and does the same thing. So the output is the same as in the previous example: 1 -> 2 -> 4, but now with 1 second delay between alert calls. Returning promises allows us to build chains of asynchronous actions. ## Example: loadScript Let's use this feature with the promisified loadScript, defined in the previous chapter, to load scripts one by one, in sequence: This code can be made bit shorter with arrow functions: Here each loadScript call returns a promise, and the next .then runs when it resolves. Then it initiates the loading of the next script. So scripts are loaded one after another. We can add more asynchronous actions to the chain. Please note that the code is still "flat" — it grows down, not to the right. There are no signs of the "pyramid of doom". Technically, we could add .then directly to each loadScript, like this: This code does the same: loads 3 scripts in sequence. But it "grows to the right". So we have the same problem as with callbacks. People who start to use promises sometimes don't know about chaining, so they write it this way. Generally, chaining is preferred. Sometimes it's ok to write .then directly, because the nested function has access to the outer scope. In the example above the most nested callback has access to all variables script1, script2, script3. But that's an exception rather than a rule. class Thenable { constructor(num) { this.num = num; then(resolve, reject) { alert(resolve); // function() { native code } // resolve with this.num*2 after the 1 second setTimeout(() => resolve(this.num 2), 1000); // (*) new Promise(resolve => resolve(1)) .then(result => { return new Thenable(result); // (*) .then(alert); // shows 2 after 1000ms ## Bigger example: fetch In frontend programming, promises are often used for network requests. So let's see an extended example of that. We'll use the fetch method to load the information about the user from the remote server. It has a lot of optional parameters covered in separate chapters, but the basic syntax is quite simple: This makes a network request to the url and returns a promise. The promise resolves with a response object when the remote server responds with headers, but before the full response is downloaded. To read the full response, we should call the method response.text(): it returns a promise that resolves when the full text is downloaded from the remote server, with that text as a result. The code below makes a request to user.json and loads its text from the server: The response object returned from fetch also includes the method response.json() that reads the remote data and parses it as JSON. In our case that's even more convenient, so let's switch to it. We'll also use arrow functions for brevity: Now let's do something with the loaded user. For instance, we can make one more request to GitHub, load the user profile and show the avatar: The code works; see comments about the details. However, there's a potential problem in it, a typical error for those who begin to use promises. Look at the line (): how can we do something after* the avatar has finished showing and gets removed? For instance, we'd like to show a form for editing that user or something else. As of now, there's no way. To make the chain extendable, we need to return a promise that resolves when the avatar finishes showing. Like this: That is, the .then handler in line () now returns new Promise, that becomes settled only after the call of resolve(githubUser) in setTimeout (*). The next .then in the chain will wait for that. As a good practice, an asynchronous action should always return a promise. That makes it possible to plan actions after it; even if we don't plan to extend the chain now, we may need it later. Finally, we can split the code into reusable functions: ## Summary If a .then (or catch/finally, doesn't matter) handler returns a promise, the rest of the chain waits until it settles. When it does, its result (or error) is passed further. Here's a full picture:

promise

Error handling with promises

Promise chains are great at error handling. When a promise rejects, the control jumps to the closest rejection handler. That's very convenient in practice. For instance, in the code below the URL to fetch is wrong (no such site) and .catch handles the error: As you can see, the .catch doesn't have to be immediate. It may appear after one or maybe several .then. Or, maybe, everything is all right with the site, but the response is not valid JSON. The easiest way to catch all errors is to append .catch to the end of chain: Normally, such .catch doesn't trigger at all. But if any of the promises above rejects (a network problem or invalid json or whatever), then it would catch it. ## Implicit try..catch The code of a promise executor and promise handlers has an "invisible try..catch" around it. If an exception happens, it gets caught and treated as a rejection. For instance, this code: ...Works exactly the same as this: The "invisible try..catch" around the executor automatically catches the error and turns it into rejected promise. This happens not only in the executor function, but in its handlers as well. If we throw inside a .then handler, that means a rejected promise, so the control jumps to the nearest error handler. Here's an example: This happens for all errors, not just those caused by the throw statement. For example, a programming error: The final .catch not only catches explicit rejections, but also accidental errors in the handlers above. ## Rethrowing As we already noticed, .catch at the end of the chain is similar to try..catch. We may have as many .then handlers as we want, and then use a single .catch at the end to handle errors in all of them. In a regular try..catch we can analyze the error and maybe rethrow it if it can't be handled. The same thing is possible for promises. If we throw inside .catch, then the control goes to the next closest error handler. And if we handle the error and finish normally, then it continues to the next closest successful .then handler. In the example below the .catch successfully handles the error: Here the .catch block finishes normally. So the next successful .then handler is called. In the example below we see the other situation with .catch. The handler (*) catches the error and just can't handle it (e.g. it only knows how to handle URIError), so it throws it again: The execution jumps from the first .catch () to the next one (*) down the chain. ## Unhandled rejections What happens when an error is not handled? For instance, we forgot to append .catch to the end of the chain, like here: In case of an error, the promise becomes rejected, and the execution should jump to the closest rejection handler. But there is none. So the error gets "stuck". There's no code to handle it. In practice, just like with regular unhandled errors in code, it means that something has gone terribly wrong. What happens when a regular error occurs and is not caught by try..catch? The script dies with a message in the console. A similar thing happens with unhandled promise rejections. The JavaScript engine tracks such rejections and generates a global error in that case. You can see it in the console if you run the example above. In the browser we can catch such errors using the event unhandledrejection: The event is the part of the HTML standard. If an error occurs, and there's no .catch, the unhandledrejection handler triggers, and gets the event object with the information about the error, so we can do something. Usually such errors are unrecoverable, so our best way out is to inform the user about the problem and probably report the incident to the server. In non-browser environments like Node.js there are other ways to track unhandled errors. ## Summary - .catch handles errors in promises of all kinds: be it a reject() call, or an error thrown in a handler. - .then also catches errors in the same manner, if given the second argument (which is the error handler). - We should place .catch exactly in places where we want to handle errors and know how to handle them. The handler should analyze errors (custom error classes help) and rethrow unknown ones (maybe they are programming mistakes). - It's ok not to use .catch at all, if there's no way to recover from an error. - In any case we should have the unhandledrejection event handler (for browsers, and analogs for other environments) to track unhandled errors and inform the user (and probably our server) about them, so that our app never "just dies".

promise

Promise API

There are 6 static methods in the Promise class. We'll quickly cover their use cases here. ## Promise.all Let's say we want many promises to execute in parallel and wait until all of them are ready. For instance, download several URLs in parallel and process the content once they are all done. That's what Promise.all is for. The syntax is: Promise.all takes an iterable (usually, an array of promises) and returns a new promise. The new promise resolves when all listed promises are resolved, and the array of their results becomes its result. For instance, the Promise.all below settles after 3 seconds, and then its result is an array [1, 2, 3]: Please note that the order of the resulting array members is the same as in its source promises. Even though the first promise takes the longest time to resolve, it's still first in the array of results. A common trick is to map an array of job data into an array of promises, and then wrap that into Promise.all. For instance, if we have an array of URLs, we can fetch them all like this: A bigger example with fetching user information for an array of GitHub users by their names (we could fetch an array of goods by their ids, the logic is identical): If any of the promises is rejected, the promise returned by Promise.all immediately rejects with that error. For instance: Here the second promise rejects in two seconds. That leads to an immediate rejection of Promise.all, so .catch executes: the rejection error becomes the outcome of the entire Promise.all. Promise.all([ new Promise((resolve, reject) => { setTimeout(() => resolve(1), 1000) }), ]).then(alert); // 1, 2, 3 ## Promise.allSettled [recent browser="new"] Promise.all rejects as a whole if any promise rejects. That's good for "all or nothing" cases, when we need all results successful to proceed: Promise.allSettled just waits for all promises to settle, regardless of the result. The resulting array has: - {status:"fulfilled", value:result} for successful responses, - {status:"rejected", reason:error} for errors. For example, we'd like to fetch the information about multiple users. Even if one request fails, we're still interested in the others. Let's use Promise.allSettled: The results in the line (*) above will be: So for each promise we get its status and value/error. ### Polyfill If the browser doesn't support Promise.allSettled, it's easy to polyfill: In this code, promises.map takes input values, turns them into promises (just in case a non-promise was passed) with p => Promise.resolve(p), and then adds .then handler to every one. That handler turns a successful result value into {status:'fulfilled', value}, and an error reason into {status:'rejected', reason}. That's exactly the format of Promise.allSettled. Now we can use Promise.allSettled to get the results of all given promises, even if some of them reject. ## Promise.race Similar to Promise.all, but waits only for the first settled promise and gets its result (or error). The syntax is: For instance, here the result will be 1: The first promise here was fastest, so it became the result. After the first settled promise "wins the race", all further results/errors are ignored. ## Promise.any Similar to Promise.race, but waits only for the first fulfilled promise and gets its result. If all of the given promises are rejected, then the returned promise is rejected with AggregateError - a special error object that stores all promise errors in its errors property. The syntax is: For instance, here the result will be 1: The first promise here was fastest, but it was rejected, so the second promise became the result. After the first fulfilled promise "wins the race", all further results are ignored. Here's an example when all promises fail: As you can see, error objects for failed promises are available in the errors property of the AggregateError object. ## Promise.resolve/reject Methods Promise.resolve and Promise.reject are rarely needed in modern code, because async/await syntax (we'll cover it a bit later) makes them somewhat obsolete. We cover them here for completeness and for those who can't use async/await for some reason. ### Promise.resolve Promise.resolve(value) creates a resolved promise with the result value. Same as: The method is used for compatibility, when a function is expected to return a promise. For example, the loadCached function below fetches a URL and remembers (caches) its content. For future calls with the same URL it immediately gets the previous content from cache, but uses Promise.resolve to make a promise of it, so the returned value is always a promise: We can write loadCached(url).then(…), because the function is guaranteed to return a promise. We can always use .then after loadCached. That's the purpose of Promise.resolve in the line (*). ### Promise.reject Promise.reject(error) creates a rejected promise with error. Same as: In practice, this method is almost never used. ## Summary There are 6 static methods of Promise class: 1. Promise.all(promises) -- waits for all promises to resolve and returns an array of their results. If any of the given promises rejects, it becomes the error of Promise.all, and all other results are ignored. 2. Promise.allSettled(promises) (recently added method) -- waits for all promises to settle and returns their results as an array of objects with: - status: "fulfilled" or "rejected" - value (if fulfilled) or reason (if rejected). 3. Promise.race(promises) -- waits for the first promise to settle, and its result/error becomes the outcome. 4. Promise.any(promises) (recently added method) -- waits for the first promise to fulfill, and its result becomes the outcome. If all of the given promises are rejected, AggregateError becomes the error of Promise.any. 5. Promise.resolve(value) -- makes a resolved promise with the given value. 6. Promise.reject(error) -- makes a rejected promise with the given error. Of all these, Promise.all is probably the most common in practice.

api,promise

Promisification

"Promisification" is a long word for a simple transformation. It's the conversion of a function that accepts a callback into a function that returns a promise. Such transformations are often required in real-life, as many functions and libraries are callback-based. But promises are more convenient, so it makes sense to promisify them. For better understanding, let's see an example. For instance, we have loadScript(src, callback) from the chapter <info:callbacks>. The function loads a script with the given src, and then calls callback(err) in case of an error, or callback(null, script) in case of successful loading. That's a widespread agreement for using callbacks, we saw it before. Let's promisify it. We'll make a new function loadScriptPromise(src), that does the same (loads the script), but returns a promise instead of using callbacks. In other words, we pass it only src (no callback) and get a promise in return, that resolves with script when the load is successful, and rejects with the error otherwise. Here it is: As we can see, the new function is a wrapper around the original loadScript function. It calls it providing its own callback that translates to promise resolve/reject. Now loadScriptPromise fits well in promise-based code. If we like promises more than callbacks (and soon we'll see more reasons for that), then we will use it instead. In practice we may need to promisify more than one function, so it makes sense to use a helper. We'll call it promisify(f): it accepts a to-promisify function f and returns a wrapper function. The code may look a bit complex, but it's essentially the same that we wrote above, while promisifying loadScript function. A call to promisify(f) returns a wrapper around f (). That wrapper returns a promise and forwards the call to the original f, tracking the result in the custom callback (*). Here, promisify assumes that the original function expects a callback with exactly two arguments (err, result). That's what we encounter most often. Then our custom callback is in exactly the right format, and promisify works great for such a case. But what if the original f expects a callback with more arguments callback(err, res1, res2, ...)? We can improve our helper. Let's make a more advanced version of promisify. - When called as promisify(f) it should work similar to the version above. - When called as promisify(f, true), it should return the promise that resolves with the array of callback results. That's exactly for callbacks with many arguments. As you can see it's essentially the same as above, but resolve is called with only one or all arguments depending on whether manyArgs is truthy. For more exotic callback formats, like those without err at all: callback(result), we can promisify such functions manually without using the helper. There are also modules with a bit more flexible promisification functions, e.g. es6-promisify. In Node.js, there's a built-in util.promisify function for that.

web,development

Microtasks

Promise handlers .then/.catch/.finally are always asynchronous. Even when a Promise is immediately resolved, the code on the lines below .then/.catch/.finally will still execute before these handlers. Here's a demo: If you run it, you see code finished first, and then promise done!. That's strange, because the promise is definitely done from the beginning. Why did the .then trigger afterwards? What's going on? ## Microtasks queue Asynchronous tasks need proper management. For that, the ECMA standard specifies an internal queue PromiseJobs, more often referred to as the "microtask queue" (V8 term). As stated in the specification: - The queue is first-in-first-out: tasks enqueued first are run first. - Execution of a task is initiated only when nothing else is running. Or, to put it more simply, when a promise is ready, its .then/catch/finally handlers are put into the queue; they are not executed yet. When the JavaScript engine becomes free from the current code, it takes a task from the queue and executes it. That's why "code finished" in the example above shows first. Promise handlers always go through this internal queue. If there's a chain with multiple .then/catch/finally, then every one of them is executed asynchronously. That is, it first gets queued, then executed when the current code is complete and previously queued handlers are finished. What if the order matters for us? How can we make code finished appear after promise done? Easy, just put it into the queue with .then: Now the order is as intended. ## Unhandled rejection Remember the unhandledrejection event from the article <info:promise-error-handling>? Now we can see exactly how JavaScript finds out that there was an unhandled rejection. An "unhandled rejection" occurs when a promise error is not handled at the end of the microtask queue. Normally, if we expect an error, we add .catch to the promise chain to handle it: But if we forget to add .catch, then, after the microtask queue is empty, the engine triggers the event: What if we handle the error later? Like this: Now, if we run it, we'll see Promise Failed! first and then caught. If we didn't know about the microtasks queue, we could wonder: "Why did unhandledrejection handler run? We did catch and handle the error!" But now we understand that unhandledrejection is generated when the microtask queue is complete: the engine examines promises and, if any of them is in the "rejected" state, then the event triggers. In the example above, .catch added by setTimeout also triggers. But it does so later, after unhandledrejection has already occurred, so it doesn't change anything. ## Summary Promise handling is always asynchronous, as all promise actions pass through the internal "promise jobs" queue, also called "microtask queue" (V8 term). So .then/catch/finally handlers are always called after the current code is finished. If we need to guarantee that a piece of code is executed after .then/catch/finally, we can add it into a chained .then call. In most Javascript engines, including browsers and Node.js, the concept of microtasks is closely tied with the "event loop" and "macrotasks". As these have no direct relation to promises, they are covered in another part of the tutorial, in the article <info:event-loop>.

web,development

Async/await

There's a special syntax to work with promises in a more comfortable fashion, called "async/await". It's surprisingly easy to understand and use. ## Async functions Let's start with the async keyword. It can be placed before a function, like this: The word "async" before a function means one simple thing: a function always returns a promise. Other values are wrapped in a resolved promise automatically. For instance, this function returns a resolved promise with the result of 1; let's test it: ...We could explicitly return a promise, which would be the same: So, async ensures that the function returns a promise, and wraps non-promises in it. Simple enough, right? But not only that. There's another keyword, await, that works only inside async functions, and it's pretty cool. ## Await The syntax: The keyword await makes JavaScript wait until that promise settles and returns its result. Here's an example with a promise that resolves in 1 second: The function execution "pauses" at the line (*) and resumes when the promise settles, with result becoming its result. So the code above shows "done!" in one second. Let's emphasize: await literally suspends the function execution until the promise settles, and then resumes it with the promise result. That doesn't cost any CPU resources, because the JavaScript engine can do other jobs in the meantime: execute other scripts, handle events, etc. It's just a more elegant syntax of getting the promise result than promise.then. And, it's easier to read and write. function f() { let promise = Promise.resolve(1); let result = await promise; // Syntax error Let's take the showAvatar() example from the chapter <info:promise-chaining> and rewrite it using async/await: 1. We'll need to replace .then calls with await. 2. Also we should make the function async for them to work. Pretty clean and easy to read, right? Much better than before. // we assume this code runs at top level, inside a module let response = await fetch('/article/promise-chaining/user.json'); let user = await response.json(); console.log(user); (async () => { let response = await fetch('/article/promise-chaining/user.json'); let user = await response.json(); ... })(); class Thenable { constructor(num) { this.num = num; then(resolve, reject) { alert(resolve); // resolve with this.num*2 after 1000ms setTimeout(() => resolve(this.num 2), 1000); // () async function f() { // waits for 1 second, then result becomes 2 let result = await new Thenable(1); alert(result); f(); class Waiter { async wait() { return await Promise.resolve(1); new Waiter() .wait() .then(alert); // 1 (this is the same as (result => alert(result))) ## Error handling If a promise resolves normally, then await promise returns the result. But in the case of a rejection, it throws the error, just as if there were a throw statement at that line. This code: ...is the same as this: In real situations, the promise may take some time before it rejects. In that case there will be a delay before await throws an error. We can catch that error using try..catch, the same way as a regular throw: In the case of an error, the control jumps to the catch block. We can also wrap multiple lines: If we don't have try..catch, then the promise generated by the call of the async function f() becomes rejected. We can append .catch to handle it: If we forget to add .catch there, then we get an unhandled promise error (viewable in the console). We can catch such errors using a global unhandledrejection event handler as described in the chapter <info:promise-error-handling>. // wait for the array of results let results = await Promise.all([ fetch(url1), fetch(url2), ... ]); ## Summary The async keyword before a function has two effects: 1. Makes it always return a promise. 2. Allows await to be used in it. The await keyword before a promise makes JavaScript wait until that promise settles, and then: 1. If it's an error, an exception is generated — same as if throw error were called at that very place. 2. Otherwise, it returns the result. Together they provide a great framework to write asynchronous code that is easy to both read and write. With async/await we rarely need to write promise.then/catch, but we still shouldn't forget that they are based on promises, because sometimes (e.g. in the outermost scope) we have to use these methods. Also Promise.all is nice when we are waiting for many tasks simultaneously.

async

Generators

Regular functions return only one, single value (or nothing). Generators can return ("yield") multiple values, one after another, on-demand. They work great with iterables, allowing to create data streams with ease. ## Generator functions To create a generator, we need a special syntax construct: function*, so-called "generator function". It looks like this: Generator functions behave differently from regular ones. When such function is called, it doesn't run its code. Instead it returns a special object, called "generator object", to manage the execution. Here, take a look: The function code execution hasn't started yet: The main method of a generator is next(). When called, it runs the execution until the nearest yield <value> statement (value can be omitted, then it's undefined). Then the function execution pauses, and the yielded value is returned to the outer code. The result of next() is always an object with two properties: - value: the yielded value. - done: true if the function code has finished, otherwise false. For instance, here we create the generator and get its first yielded value: As of now, we got the first value only, and the function execution is on the second line: Let's call generator.next() again. It resumes the code execution and returns the next yield: And, if we call it a third time, the execution reaches the return statement that finishes the function: Now the generator is done. We should see it from done:true and process value:3 as the final result. New calls to generator.next() don't make sense any more. If we do them, they return the same object: {done: true}. ## Generators are iterable As you probably already guessed looking at the next() method, generators are iterable. We can loop over their values using for..of: Looks a lot nicer than calling .next().value, right? ...But please note: the example above shows 1, then 2, and that's all. It doesn't show 3! It's because for..of iteration ignores the last value, when done: true. So, if we want all results to be shown by for..of, we must return them with yield: As generators are iterable, we can call all related functionality, e.g. the spread syntax ...: In the code above, ...generateSequence() turns the iterable generator object into an array of items (read more about the spread syntax in the chapter [](info:rest-parameters-spread#spread-syntax)) ## Using generators for iterables Some time ago, in the chapter [](info:iterable) we created an iterable range object that returns values from..to. Here, let's remember the code: We can use a generator function for iteration by providing it as Symbol.iterator. Here's the same range, but much more compact: That works, because range[Symbol.iterator]() now returns a generator, and generator methods are exactly what for..of expects: - it has a .next() method - that returns values in the form {value: ..., done: true/false} That's not a coincidence, of course. Generators were added to JavaScript language with iterators in mind, to implement them easily. The variant with a generator is much more concise than the original iterable code of range, and keeps the same functionality. ## Generator composition Generator composition is a special feature of generators that allows to transparently "embed" generators in each other. For instance, we have a function that generates a sequence of numbers: Now we'd like to reuse it to generate a more complex sequence: - first, digits 0..9 (with character codes 48..57), - followed by uppercase alphabet letters A..Z (character codes 65..90) - followed by lowercase alphabet letters a..z (character codes 97..122) We can use this sequence e.g. to create passwords by selecting characters from it (could add syntax characters as well), but let's generate it first. In a regular function, to combine results from multiple other functions, we call them, store the results, and then join at the end. For generators, there's a special yield* syntax to "embed" (compose) one generator into another. The composed generator: The yield directive delegates the execution to another generator. This term means that yield gen iterates over the generator gen and transparently forwards its yields outside. As if the values were yielded by the outer generator. The result is the same as if we inlined the code from nested generators: A generator composition is a natural way to insert a flow of one generator into another. It doesn't use extra memory to store intermediate results. ## "yield" is a two-way street Until this moment, generators were similar to iterable objects, with a special syntax to generate values. But in fact they are much more powerful and flexible. That's because yield is a two-way street: it not only returns the result to the outside, but also can pass the value inside the generator. To do so, we should call generator.next(arg), with an argument. That argument becomes the result of yield. Let's see an example: 1. The first call generator.next() should be always made without an argument (the argument is ignored if passed). It starts the execution and returns the result of the first yield "2+2=?". At this point the generator pauses the execution, while staying on the line (*). 2. Then, as shown at the picture above, the result of yield gets into the question variable in the calling code. 3. On generator.next(4), the generator resumes, and 4 gets in as the result: let result = 4. Please note, the outer code does not have to immediately call next(4). It may take time. That's not a problem: the generator will wait. For instance: As we can see, unlike regular functions, a generator and the calling code can exchange results by passing values in next/yield. To make things more obvious, here's another example, with more calls: The execution picture: 1. The first .next() starts the execution... It reaches the first yield. 2. The result is returned to the outer code. 3. The second .next(4) passes 4 back to the generator as the result of the first yield, and resumes the execution. 4. ...It reaches the second yield, that becomes the result of the generator call. 5. The third next(9) passes 9 into the generator as the result of the second yield and resumes the execution that reaches the end of the function, so done: true. It's like a "ping-pong" game. Each next(value) (excluding the first one) passes a value into the generator, that becomes the result of the current yield, and then gets back the result of the next yield. ## generator.throw As we observed in the examples above, the outer code may pass a value into the generator, as the result of yield. ...But it can also initiate (throw) an error there. That's natural, as an error is a kind of result. To pass an error into a yield, we should call generator.throw(err). In that case, the err is thrown in the line with that yield. For instance, here the yield of "2 + 2 = ?" leads to an error: The error, thrown into the generator at line (2) leads to an exception in line (1) with yield. In the example above, try..catch catches it and shows it. If we don't catch it, then just like any exception, it "falls out" the generator into the calling code. The current line of the calling code is the line with generator.throw, labelled as (2). So we can catch it here, like this: If we don't catch the error there, then, as usual, it falls through to the outer calling code (if any) and, if uncaught, kills the script. ## generator.return generator.return(value) finishes the generator execution and return the given value. If we again use generator.return() in a completed generator, it will return that value again (MDN). Often we don't use it, as most of time we want to get all returning values, but it can be useful when we want to stop generator in a specific condition. ## Summary - Generators are created by generator functions function* f(…) {…}. - Inside generators (only) there exists a yield operator. - The outer code and the generator may exchange results via next/yield calls. In modern JavaScript, generators are rarely used. But sometimes they come in handy, because the ability of a function to exchange data with the calling code during the execution is quite unique. And, surely, they are great for making iterable objects. Also, in the next chapter we'll learn async generators, which are used to read streams of asynchronously generated data (e.g paginated fetches over a network) in for await ... of loops. In web-programming we often work with streamed data, so that's another very important use case.

web,development

Async iteration and generators

Asynchronous iteration allow us to iterate over data that comes asynchronously, on-demand. Like, for instance, when we download something chunk-by-chunk over a network. And asynchronous generators make it even more convenient. Let's see a simple example first, to grasp the syntax, and then review a real-life use case. ## Recall iterables Let's recall the topic about iterables. The idea is that we have an object, such as range here: ...And we'd like to use for..of loop on it, such as for(value of range), to get values from 1 to 5. In other words, we want to add an iteration ability to the object. That can be implemented using a special method with the name Symbol.iterator: - This method is called in by the for..of construct when the loop is started, and it should return an object with the next method. - For each iteration, the next() method is invoked for the next value. - The next() should return a value in the form {done: true/false, value:<loop value>}, where done:true means the end of the loop. Here's an implementation for the iterable range: If anything is unclear, please visit the chapter [](info:iterable), it gives all the details about regular iterables. ## Async iterables Asynchronous iteration is needed when values come asynchronously: after setTimeout or another kind of delay. The most common case is that the object needs to make a network request to deliver the next value, we'll see a real-life example of it a bit later. To make an object iterable asynchronously: 1. Use Symbol.asyncIterator instead of Symbol.iterator. 2. The next() method should return a promise (to be fulfilled with the next value). - The async keyword handles it, we can simply make async next(). 3. To iterate over such an object, we should use a for await (let item of iterable) loop. - Note the await word. As a starting example, let's make an iterable range object, similar like the one before, but now it will return values asynchronously, one per second. All we need to do is to perform a few replacements in the code above: As we can see, the structure is similar to regular iterators: 1. To make an object asynchronously iterable, it must have a method Symbol.asyncIterator (1). 2. This method must return the object with next() method returning a promise (2). 3. The next() method doesn't have to be async, it may be a regular method returning a promise, but async allows us to use await, so that's convenient. Here we just delay for a second (3). 4. To iterate, we use for await(let value of range) (4), namely add "await" after "for". It calls range[Symbol.asyncIterator]() once, and then its next() for values. Here's a small table with the differences: alert( [...range] ); // Error, no Symbol.iterator ## Recall generators Now let's recall generators, as they allow to make iteration code much shorter. Most of the time, when we'd like to make an iterable, we'll use generators. For sheer simplicity, omitting some important stuff, they are "functions that generate (yield) values". They are explained in detail in the chapter [](info:generators). Generators are labelled with function* (note the star) and use yield to generate a value, then we can use for..of to loop over them. This example generates a sequence of values from start to end: As we already know, to make an object iterable, we should add Symbol.iterator to it. A common practice for Symbol.iterator is to return a generator, it makes the code shorter, as you can see: Please see the chapter [](info:generators) if you'd like more details. In regular generators we can't use await. All values must come synchronously, as required by the for..of construct. What if we'd like to generate values asynchronously? From network requests, for instance. Let's switch to asynchronous generators to make it possible. ## Async generators (finally) For most practical applications, when we'd like to make an object that asynchronously generates a sequence of values, we can use an asynchronous generator. The syntax is simple: prepend function* with async. That makes the generator asynchronous. And then use for await (...) to iterate over it, like this: As the generator is asynchronous, we can use await inside it, rely on promises, perform network requests and so on. result = await generator.next(); // result = {value: ..., done: true/false} ### Async iterable range Regular generators can be used as Symbol.iterator to make the iteration code shorter. Similar to that, async generators can be used as Symbol.asyncIterator to implement the asynchronous iteration. For instance, we can make the range object generate values asynchronously, once per second, by replacing synchronous Symbol.iterator with asynchronous Symbol.asyncIterator: Now values come with a delay of 1 second between them. ## Real-life example: paginated data So far we've seen basic examples, to gain understanding. Now let's review a real-life use case. There are many online services that deliver paginated data. For instance, when we need a list of users, a request returns a pre-defined count (e.g. 100 users) - "one page", and provides a URL to the next page. This pattern is very common. It's not about users, but just about anything. For instance, GitHub allows us to retrieve commits in the same, paginated fashion: - We should make a request to fetch in the form https://api.github.com/repos/<repo>/commits. - It responds with a JSON of 30 commits, and also provides a link to the next page in the Link header. - Then we can use that link for the next request, to get more commits, and so on. For our code, we'd like to have a simpler way to get commits. Let's make a function fetchCommits(repo) that gets commits for us, making requests whenever needed. And let it care about all pagination stuff. For us it'll be a simple async iteration for await..of. So the usage will be like this: Here's such function, implemented as async generator: More explanations about how it works: 1. We use the browser fetch method to download the commits. - The initial URL is https://api.github.com/repos/<repo>/commits, and the next page will be in the Link header of the response. - The fetch method allows us to supply authorization and other headers if needed -- here GitHub requires User-Agent. 2. The commits are returned in JSON format. 3. We should get the next page URL from the Link header of the response. It has a special format, so we use a regular expression for that (we will learn this feature in Regular expressions). - The next page URL may look like https://api.github.com/repositories/93253246/commits?page=2. It's generated by GitHub itself. 4. Then we yield the received commits one by one, and when they finish, the next while(url) iteration will trigger, making one more request. An example of use (shows commit authors in console): That's just what we wanted. The internal mechanics of paginated requests is invisible from the outside. For us it's just an async generator that returns commits. ## Summary Regular iterators and generators work fine with the data that doesn't take time to generate. When we expect the data to come asynchronously, with delays, their async counterparts can be used, and for await..of instead of for..of. Syntax differences between async and regular iterators: Syntax differences between async and regular generators: In web-development we often meet streams of data, when it flows chunk-by-chunk. For instance, downloading or uploading a big file. We can use async generators to process such data. It's also noteworthy that in some environments, like in browsers, there's also another API called Streams, that provides special interfaces to work with such streams, to transform the data and to pass it from one stream to another (e.g. download from one place and immediately send elsewhere).

async

Modules, introduction

As our application grows bigger, we want to split it into multiple files, so called "modules". A module may contain a class or a library of functions for a specific purpose. For a long time, JavaScript existed without a language-level module syntax. That wasn't a problem, because initially scripts were small and simple, so there was no need. But eventually scripts became more and more complex, so the community invented a variety of ways to organize code into modules, special libraries to load modules on demand. To name some (for historical reasons): - AMD -- one of the most ancient module systems, initially implemented by the library require.js. - CommonJS -- the module system created for Node.js server. - UMD -- one more module system, suggested as a universal one, compatible with AMD and CommonJS. Now these all slowly became a part of history, but we still can find them in old scripts. The language-level module system appeared in the standard in 2015, gradually evolved since then, and is now supported by all major browsers and in Node.js. So we'll study the modern JavaScript modules from now on. ## What is a module? A module is just a file. One script is one module. As simple as that. Modules can load each other and use special directives export and import to interchange functionality, call functions of one module from another one: - export keyword labels variables and functions that should be accessible from outside the current module. - import allows the import of functionality from other modules. For instance, if we have a file sayHi.js exporting a function: ...Then another file may import and use it: The import directive loads the module by path ./sayHi.js relative to the current file, and assigns exported function sayHi to the corresponding variable. Let's run the example in-browser. As modules support special keywords and features, we must tell the browser that a script should be treated as a module, by using the attribute <script type="module">. Like this: [codetabs src="say" height="140" current="index.html"] The browser automatically fetches and evaluates the imported module (and its imports if needed), and then runs the script. ## Core module features What's different in modules, compared to "regular" scripts? There are core features, valid both for browser and server-side JavaScript. ### Always "use strict" Modules always work in strict mode. E.g. assigning to an undeclared variable will give an error. ### Module-level scope Each module has its own top-level scope. In other words, top-level variables and functions from a module are not seen in other scripts. In the example below, two scripts are imported, and hello.js tries to use user variable declared in user.js. It fails, because it's a separate module (you'll see the error in the console): [codetabs src="scopes" height="140" current="index.html"] Modules should export what they want to be accessible from outside and import what they need. - user.js should export the user variable. - hello.js should import it from user.js module. In other words, with modules we use import/export instead of relying on global variables. This is the correct variant: [codetabs src="scopes-working" height="140" current="hello.js"] In the browser, if we talk about HTML pages, independent top-level scope also exists for each <script type="module">. Here are two scripts on the same page, both type="module". They don't see each other's top-level variables: ### A module code is evaluated only the first time when imported If the same module is imported into multiple other modules, its code is executed only once, upon the first import. Then its exports are given to all further importers. The one-time evaluation has important consequences, that we should be aware of. Let's see a couple of examples. First, if executing a module code brings side-effects, like showing a message, then importing it multiple times will trigger it only once -- the first time: The second import shows nothing, because the module has already been evaluated. There's a rule: top-level module code should be used for initialization, creation of module-specific internal data structures. If we need to make something callable multiple times - we should export it as a function, like we did with sayHi above. Now, let's consider a deeper example. Let's say, a module exports an object: If this module is imported from multiple files, the module is only evaluated the first time, admin object is created, and then passed to all further importers. All importers get exactly the one and only admin object: As you can see, when 1.js changes the name property in the imported admin, then 2.js can see the new admin.name. That's exactly because the module is executed only once. Exports are generated, and then they are shared between importers, so if something changes the admin object, other importers will see that. *Such behavior is actually very convenient, because it allows us to configure modules.* In other words, a module can provide a generic functionality that needs a setup. E.g. authentication needs credentials. Then it can export a configuration object expecting the outer code to assign to it. Here's the classical pattern: 1. A module exports some means of configuration, e.g. a configuration object. 2. On the first import we initialize it, write to its properties. The top-level application script may do that. 3. Further imports use the module. For instance, the admin.js module may provide certain functionality (e.g. authentication), but expect the credentials to come into the config object from outside: Here, admin.js exports the config object (initially empty, but may have default properties too). Then in init.js, the first script of our app, we import config from it and set config.user: ...Now the module admin.js is configured. Further importers can call it, and it correctly shows the current user: ### import.meta The object import.meta contains the information about the current module. Its content depends on the environment. In the browser, it contains the URL of the script, or a current webpage URL if inside HTML: ### In a module, "this" is undefined That's kind of a minor feature, but for completeness we should mention it. In a module, top-level this is undefined. Compare it to non-module scripts, where this is a global object: ## Browser-specific features There are also several browser-specific differences of scripts with type="module" compared to regular ones. You may want to skip this section for now if you're reading for the first time, or if you don't use JavaScript in a browser. ### Module scripts are deferred Module scripts are always deferred, same effect as defer attribute (described in the chapter [](info:script-async-defer)), for both external and inline scripts. In other words: - downloading external module scripts <script type="module" src="..."> doesn't block HTML processing, they load in parallel with other resources. - module scripts wait until the HTML document is fully ready (even if they are tiny and load faster than HTML), and then run. - relative order of scripts is maintained: scripts that go first in the document, execute first. As a side effect, module scripts always "see" the fully loaded HTML-page, including HTML elements below them. For instance: Please note: the second script actually runs before the first! So we'll see undefined first, and then object. That's because modules are deferred, so we wait for the document to be processed. The regular script runs immediately, so we see its output first. When using modules, we should be aware that the HTML page shows up as it loads, and JavaScript modules run after that, so the user may see the page before the JavaScript application is ready. Some functionality may not work yet. We should put "loading indicators", or otherwise ensure that the visitor won't be confused by that. ### Async works on inline scripts For non-module scripts, the async attribute only works on external scripts. Async scripts run immediately when ready, independently of other scripts or the HTML document. For module scripts, it works on inline scripts as well. For example, the inline script below has async, so it doesn't wait for anything. It performs the import (fetches ./analytics.js) and runs when ready, even if the HTML document is not finished yet, or if other scripts are still pending. That's good for functionality that doesn't depend on anything, like counters, ads, document-level event listeners. ### External scripts External scripts that have type="module" are different in two aspects: 1. External scripts with the same src run only once: ```html <!-- the script my.js is fetched and executed only once --> <script type="module" src="my.js"></script> <script type="module" src="my.js"></script> ``` 2. External scripts that are fetched from another origin (e.g. another site) require CORS headers, as described in the chapter <info:fetch-crossorigin>. In other words, if a module script is fetched from another origin, the remote server must supply a header Access-Control-Allow-Origin allowing the fetch. ```html <!-- another-site.com must supply Access-Control-Allow-Origin --> <!-- otherwise, the script won't execute --> <script type="module" src="!http://another-site.com/their.js/!"></script> ``` That ensures better security by default. ### No "bare" modules allowed In the browser, import must get either a relative or absolute URL. Modules without any path are called "bare" modules. Such modules are not allowed in import. For instance, this import is invalid: Certain environments, like Node.js or bundle tools allow bare modules, without any path, as they have their own ways for finding modules and hooks to fine-tune them. But browsers do not support bare modules yet. ### Compatibility, "nomodule" Old browsers do not understand type="module". Scripts of an unknown type are just ignored. For them, it's possible to provide a fallback using the nomodule attribute: ## Build tools In real-life, browser modules are rarely used in their "raw" form. Usually, we bundle them together with a special tool such as Webpack and deploy to the production server. One of the benefits of using bundlers -- they give more control over how modules are resolved, allowing bare modules and much more, like CSS/HTML modules. Build tools do the following: 1. Take a "main" module, the one intended to be put in <script type="module"> in HTML. 2. Analyze its dependencies: imports and then imports of imports etc. 3. Build a single file with all modules (or multiple files, that's tunable), replacing native import calls with bundler functions, so that it works. "Special" module types like HTML/CSS modules are also supported. 4. In the process, other transformations and optimizations may be applied: - Unreachable code removed. - Unused exports removed ("tree-shaking"). - Development-specific statements like console and debugger removed. - Modern, bleeding-edge JavaScript syntax may be transformed to older one with similar functionality using Babel. - The resulting file is minified (spaces removed, variables replaced with shorter names, etc). If we use bundle tools, then as scripts are bundled together into a single file (or few files), import/export statements inside those scripts are replaced by special bundler functions. So the resulting "bundled" script does not contain any import/export, it doesn't require type="module", and we can put it into a regular script: That said, native modules are also usable. So we won't be using Webpack here: you can configure it later. ## Summary To summarize, the core concepts are: 1. A module is a file. To make import/export work, browsers need <script type="module">. Modules have several differences: - Deferred by default. - Async works on inline scripts. - To load external scripts from another origin (domain/protocol/port), CORS headers are needed. - Duplicate external scripts are ignored. 2. Modules have their own, local top-level scope and interchange functionality via import/export. 3. Modules always use strict. 4. Module code is executed only once. Exports are created once and shared between importers. When we use modules, each module implements the functionality and exports it. Then we use import to directly import it where it's needed. The browser loads and evaluates the scripts automatically. In production, people often use bundlers such as Webpack to bundle modules together for performance and other reasons. In the next chapter we'll see more examples of modules, and how things can be exported/imported.

web,development

Export and Import

Export and import directives have several syntax variants. In the previous article we saw a simple use, now let's explore more examples. ## Export before declarations We can label any declaration as exported by placing export before it, be it a variable, function or a class. For instance, here all exports are valid: export function sayHi(user) { alert(Hello, ${user}!); } ! // no ; at the end /! ## Export apart from declarations Also, we can put export separately. Here we first declare, and then export: ...Or, technically we could put export above functions as well. ## Import * Usually, we put a list of what to import in curly braces import {...}, like this: But if there's a lot to import, we can import everything as an object using import * as <obj>, for instance: At first sight, "import everything" seems such a cool thing, short to write, why should we ever explicitly list what we need to import? Well, there are few reasons. 1. Explicitly listing what to import gives shorter names: sayHi() instead of say.sayHi(). 2. Explicit list of imports gives better overview of the code structure: what is used and where. It makes code support and refactoring easier. ## Import "as" We can also use as to import under different names. For instance, let's import sayHi into the local variable hi for brevity, and import sayBye as bye: ## Export "as" The similar syntax exists for export. Let's export functions as hi and bye: Now hi and bye are official names for outsiders, to be used in imports: ## Export default In practice, there are mainly two kinds of modules. 1. Modules that contain a library, pack of functions, like say.js above. 2. Modules that declare a single entity, e.g. a module user.js exports only class User. Mostly, the second approach is preferred, so that every "thing" resides in its own module. Naturally, that requires a lot of files, as everything wants its own module, but that's not a problem at all. Actually, code navigation becomes easier if files are well-named and structured into folders. Modules provide a special export default ("the default export") syntax to make the "one thing per module" way look better. Put export default before the entity to export: There may be only one export default per file. ...And then import it without curly braces: Imports without curly braces look nicer. A common mistake when starting to use modules is to forget curly braces at all. So, remember, import needs curly braces for named exports and doesn't need them for the default one. Technically, we may have both default and named exports in a single module, but in practice people usually don't mix them. A module has either named exports or the default one. As there may be at most one default export per file, the exported entity may have no name. For instance, these are all perfectly valid default exports: Not giving a name is fine, because there is only one export default per file, so import without curly braces knows what to import. Without default, such an export would give an error: ### The "default" name In some situations the default keyword is used to reference the default export. For example, to export a function separately from its definition: Or, another situation, let's say a module user.js exports one main "default" thing, and a few named ones (rarely the case, but it happens): Here's how to import the default export along with a named one: And, finally, if importing everything * as an object, then the default property is exactly the default export: ### A word against default exports Named exports are explicit. They exactly name what they import, so we have that information from them; that's a good thing. Named exports force us to use exactly the right name to import: ...While for a default export, we always choose the name when importing: So team members may use different names to import the same thing, and that's not good. Usually, to avoid that and keep the code consistent, there's a rule that imported variables should correspond to file names, e.g: Still, some teams consider it a serious drawback of default exports. So they prefer to always use named exports. Even if only a single thing is exported, it's still exported under a name, without default. That also makes re-export (see below) a little bit easier. ## Re-export "Re-export" syntax export ... from ... allows to import things and immediately export them (possibly under another name), like this: Why would that be needed? Let's see a practical use case. Imagine, we're writing a "package": a folder with a lot of modules, with some of the functionality exported outside (tools like NPM allow us to publish and distribute such packages, but we don't have to use them), and many modules are just "helpers", for internal use in other package modules. The file structure could be like this: We'd like to expose the package functionality via a single entry point. In other words, a person who would like to use our package, should import only from the "main file" auth/index.js. Like this: The "main file", auth/index.js exports all the functionality that we'd like to provide in our package. The idea is that outsiders, other programmers who use our package, should not meddle with its internal structure, search for files inside our package folder. We export only what's necessary in auth/index.js and keep the rest hidden from prying eyes. As the actual exported functionality is scattered among the package, we can import it into auth/index.js and export from it: Now users of our package can import {login} from "auth/index.js". The syntax export ... from ... is just a shorter notation for such import-export: The notable difference of export ... from compared to import/export is that re-exported modules aren't available in the current file. So inside the above example of auth/index.js we can't use re-exported login/logout functions. ### Re-exporting the default export The default export needs separate handling when re-exporting. Let's say we have user.js with the export default class User and would like to re-export it: We can come across two problems with it: 1. export User from './user.js' won't work. That would lead to a syntax error. To re-export the default export, we have to write export {default as User}, as in the example above. 2. export * from './user.js' re-exports only named exports, but ignores the default one. If we'd like to re-export both named and default exports, then two statements are needed: ```js export * from './user.js'; // to re-export named exports export {default} from './user.js'; // to re-export the default export ``` Such oddities of re-exporting a default export are one of the reasons why some developers don't like default exports and prefer named ones. ## Summary Here are all types of export that we covered in this and previous articles. You can check yourself by reading them and recalling what they mean: - Before declaration of a class/function/..: - export [default] class/function/variable ... - Standalone export: - export {x [as y], ...}. - Re-export: - export {x [as y], ...} from "module" - export * from "module" (doesn't re-export default). - export {default [as y]} from "module" (re-export default). Import: - Importing named exports: - import {x [as y], ...} from "module" - Importing the default export: - import x from "module" - import {default as x} from "module" - Import all: - import * as obj from "module" - Import the module (its code runs), but do not assign any of its exports to variables: - import "module" We can put import/export statements at the top or at the bottom of a script, that doesn't matter. So, technically this code is fine: In practice imports are usually at the start of the file, but that's only for more convenience. Please note that import/export statements don't work if inside {...}. A conditional import, like this, won't work: ...But what if we really need to import something conditionally? Or at the right time? Like, load a module upon request, when it's really needed? We'll see dynamic imports in the next article.

web,development

Dynamic imports

Export and import statements that we covered in previous chapters are called "static". The syntax is very simple and strict. First, we can't dynamically generate any parameters of import. The module path must be a primitive string, can't be a function call. This won't work: Second, we can't import conditionally or at run-time: That's because import/export aim to provide a backbone for the code structure. That's a good thing, as code structure can be analyzed, modules can be gathered and bundled into one file by special tools, unused exports can be removed ("tree-shaken"). That's possible only because the structure of imports/exports is simple and fixed. But how can we import a module dynamically, on-demand? ## The import() expression The import(module) expression loads the module and returns a promise that resolves into a module object that contains all its exports. It can be called from any place in the code. We can use it dynamically in any place of the code, for instance: Or, we could use let module = await import(modulePath) if inside an async function. For instance, if we have the following module say.js: ...Then dynamic import can be like this: Or, if say.js has the default export: ...Then, in order to access it, we can use default property of the module object: Here's the full example: [codetabs src="say" current="index.html"]

web,development

Proxy and Reflect

A Proxy object wraps another object and intercepts operations, like reading/writing properties and others, optionally handling them on its own, or transparently allowing the object to handle them. Proxies are used in many libraries and some browser frameworks. We'll see many practical applications in this article. ## Proxy The syntax: - target -- is an object to wrap, can be anything, including functions. - handler -- proxy configuration: an object with "traps", methods that intercept operations. - e.g. get trap for reading a property of target, set trap for writing a property into target, and so on. For operations on proxy, if there's a corresponding trap in handler, then it runs, and the proxy has a chance to handle it, otherwise the operation is performed on target. As a starting example, let's create a proxy without any traps: As there are no traps, all operations on proxy are forwarded to target. 1. A writing operation proxy.test= sets the value on target. 2. A reading operation proxy.test returns the value from target. 3. Iteration over proxy returns values from target. As we can see, without any traps, proxy is a transparent wrapper around target. Proxy is a special "exotic object". It doesn't have own properties. With an empty handler it transparently forwards operations to target. To activate more capabilities, let's add traps. What can we intercept with them? For most operations on objects, there's a so-called "internal method" in the JavaScript specification that describes how it works at the lowest level. For instance `, the internal method to read a property, `, the internal method to write a property, and so on. These methods are only used in the specification, we can't call them directly by name. Proxy traps intercept invocations of these methods. They are listed in the Proxy specification and in the table below. For every internal method, there's a trap in this table: the name of the method that we can add to the handler parameter of new Proxy to intercept the operation: Let's see how that works in practical examples. ## Default value with "get" trap The most common traps are for reading/writing properties. To intercept reading, the handler should have a method get(target, property, receiver). It triggers when a property is read, with following arguments: - target -- is the target object, the one passed as the first argument to new Proxy, - property -- property name, - receiver -- if the target property is a getter, then receiver is the object that's going to be used as this in its call. Usually that's the proxy object itself (or an object that inherits from it, if we inherit from proxy). Right now we don't need this argument, so it will be explained in more detail later. Let's use get to implement default values for an object. We'll make a numeric array that returns 0 for nonexistent values. Usually when one tries to get a non-existing array item, they get undefined, but we'll wrap a regular array into the proxy that traps reading and returns 0 if there's no such property: As we can see, it's quite easy to do with a get trap. We can use Proxy to implement any logic for "default" values. Imagine we have a dictionary, with phrases and their translations: Right now, if there's no phrase, reading from dictionary returns undefined. But in practice, leaving a phrase untranslated is usually better than undefined. So let's make it return an untranslated phrase in that case instead of undefined. To achieve that, we'll wrap dictionary in a proxy that intercepts reading operations: dictionary = new Proxy(dictionary, ...); ## Validation with "set" trap Let's say we want an array exclusively for numbers. If a value of another type is added, there should be an error. The set trap triggers when a property is written. set(target, property, value, receiver): - target -- is the target object, the one passed as the first argument to new Proxy, - property -- property name, - value -- property value, - receiver -- similar to get trap, matters only for setter properties. The set trap should return true if setting is successful, and false otherwise (triggers TypeError). Let's use it to validate new values: Please note: the built-in functionality of arrays is still working! Values are added by push. The length property auto-increases when values are added. Our proxy doesn't break anything. We don't have to override value-adding array methods like push and unshift, and so on, to add checks in there, because internally they use the `` operation that's intercepted by the proxy. So the code is clean and concise. ## Iteration with "ownKeys" and "getOwnPropertyDescriptor" Object.keys, for..in loop and most other methods that iterate over object properties use ` internal method (intercepted by ownKeys` trap) to get a list of properties. Such methods differ in details: - Object.getOwnPropertyNames(obj) returns non-symbol keys. - Object.getOwnPropertySymbols(obj) returns symbol keys. - Object.keys/values() returns non-symbol keys/values with enumerable flag (property flags were explained in the article <info:property-descriptors>). - for..in loops over non-symbol keys with enumerable flag, and also prototype keys. ...But all of them start with that list. In the example below we use ownKeys trap to make for..in loop over user, and also Object.keys and Object.values, to skip properties starting with an underscore _: So far, it works. Although, if we return a key that doesn't exist in the object, Object.keys won't list it: Why? The reason is simple: Object.keys returns only properties with the enumerable flag. To check for it, it calls the internal method ` for every property to get its descriptor. And here, as there's no property, its descriptor is empty, no enumerable` flag, so it's skipped. For Object.keys to return a property, we need it to either exist in the object, with the enumerable flag, or we can intercept calls to ` (the trap getOwnPropertyDescriptor does it), and return a descriptor with enumerable: true`. Here's an example of that: Let's note once again: we only need to intercept `` if the property is absent in the object. ## Protected properties with "deleteProperty" and other traps There's a widespread convention that properties and methods prefixed by an underscore _ are internal. They shouldn't be accessed from outside the object. Technically that's possible though: Let's use proxies to prevent any access to properties starting with _. We'll need the traps: - get to throw an error when reading such property, - set to throw an error when writing, - deleteProperty to throw an error when deleting, - ownKeys to exclude properties starting with _ from for..in and methods like Object.keys. Here's the code: Please note the important detail in the get trap, in the line (*): Why do we need a function to call value.bind(target)? The reason is that object methods, such as user.checkPassword(), must be able to access _password: A call to user.checkPassword() gets proxied user as this (the object before dot becomes this), so when it tries to access this._password, the get trap activates (it triggers on any property read) and throws an error. So we bind the context of object methods to the original object, target, in the line (*). Then their future calls will use target as this, without any traps. That solution usually works, but isn't ideal, as a method may pass the unproxied object somewhere else, and then we'll get messed up: where's the original object, and where's the proxied one? Besides, an object may be proxied multiple times (multiple proxies may add different "tweaks" to the object), and if we pass an unwrapped object to a method, there may be unexpected consequences. So, such a proxy shouldn't be used everywhere. ## "In range" with "has" trap Let's see more examples. We have a range object: We'd like to use the in operator to check that a number is in range. The has trap intercepts in calls. has(target, property) - target -- is the target object, passed as the first argument to new Proxy, - property -- property name Here's the demo: Nice syntactic sugar, isn't it? And very simple to implement. ## Wrapping functions: "apply" [#proxy-apply] We can wrap a proxy around a function as well. The apply(target, thisArg, args) trap handles calling a proxy as function: - target is the target object (function is an object in JavaScript), - thisArg is the value of this. - args is a list of arguments. For example, let's recall delay(f, ms) decorator, that we did in the article <info:call-apply-decorators>. In that article we did it without proxies. A call to delay(f, ms) returned a function that forwards all calls to f after ms milliseconds. Here's the previous, function-based implementation: As we've seen already, that mostly works. The wrapper function (*) performs the call after the timeout. But a wrapper function does not forward property read/write operations or anything else. After the wrapping, the access is lost to properties of the original functions, such as name, length and others: Proxy is much more powerful, as it forwards everything to the target object. Let's use Proxy instead of a wrapping function: The result is the same, but now not only calls, but all operations on the proxy are forwarded to the original function. So sayHi.length is returned correctly after the wrapping in the line (*). We've got a "richer" wrapper. Other traps exist: the full list is in the beginning of this article. Their usage pattern is similar to the above. ## Reflect Reflect is a built-in object that simplifies creation of Proxy. It was said previously that internal methods, such as `, ` and others are specification-only, they can't be called directly. The Reflect object makes that somewhat possible. Its methods are minimal wrappers around the internal methods. Here are examples of operations and Reflect calls that do the same: For example: In particular, Reflect allows us to call operators (new, delete...) as functions (Reflect.construct, Reflect.deleteProperty, ...). That's an interesting capability, but here another thing is important. For every internal method, trappable by Proxy, there's a corresponding method in Reflect, with the same name and arguments as the Proxy trap. So we can use Reflect to forward an operation to the original object. In this example, both traps get and set transparently (as if they didn't exist) forward reading/writing operations to the object, showing a message: Here: - Reflect.get reads an object property. - Reflect.set writes an object property and returns true if successful, false otherwise. That is, everything's simple: if a trap wants to forward the call to the object, it's enough to call Reflect.<method> with the same arguments. In most cases we can do the same without Reflect, for instance, reading a property Reflect.get(target, prop, receiver) can be replaced by target[prop]. There are important nuances though. ### Proxying a getter Let's see an example that demonstrates why Reflect.get is better. And we'll also see why get/set have the third argument receiver, that we didn't use before. We have an object user with _name property and a getter for it. Here's a proxy around it: The get trap is "transparent" here, it returns the original property, and doesn't do anything else. That's enough for our example. Everything seems to be all right. But let's make the example a little bit more complex. After inheriting another object admin from user, we can observe the incorrect behavior: Reading admin.name should return "Admin", not "Guest"! What's the matter? Maybe we did something wrong with the inheritance? But if we remove the proxy, then everything will work as expected. The problem is actually in the proxy, in the line (*). 1. When we read admin.name, as admin object doesn't have such own property, the search goes to its prototype. 2. The prototype is userProxy. 3. When reading name property from the proxy, its get trap triggers and returns it from the original object as target[prop] in the line (*). A call to target[prop], when prop is a getter, runs its code in the context this=target. So the result is this._name from the original object target, that is: from user. To fix such situations, we need receiver, the third argument of get trap. It keeps the correct this to be passed to a getter. In our case that's admin. How to pass the context for a getter? For a regular function we could use call/apply, but that's a getter, it's not "called", just accessed. Reflect.get can do that. Everything will work right if we use it. Here's the corrected variant: Now receiver that keeps a reference to the correct this (that is admin), is passed to the getter using Reflect.get in the line (*). We can rewrite the trap even shorter: Reflect calls are named exactly the same way as traps and accept the same arguments. They were specifically designed this way. So, return Reflect... provides a safe no-brainer to forward the operation and make sure we don't forget anything related to that. ## Proxy limitations Proxies provide a unique way to alter or tweak the behavior of the existing objects at the lowest level. Still, it's not perfect. There are limitations. ### Built-in objects: Internal slots Many built-in objects, for example Map, Set, Date, Promise and others make use of so-called "internal slots". These are like properties, but reserved for internal, specification-only purposes. For instance, Map stores items in the internal slot `. Built-in methods access them directly, not via / internal methods. So Proxy` can't intercept that. Why care? They're internal anyway! Well, here's the issue. After a built-in object like that gets proxied, the proxy doesn't have these internal slots, so built-in methods will fail. For example: Internally, a Map stores all data in its ` internal slot. The proxy doesn't have such a slot. The built-in method Map.prototype.set method tries to access the internal property this., but because this=proxy, can't find it in proxy` and just fails. Fortunately, there's a way to fix it: Now it works fine, because get trap binds function properties, such as map.set, to the target object (map) itself. Unlike the previous example, the value of this inside proxy.set(...) will be not proxy, but the original map. So when the internal implementation of set tries to access this. internal slot, it succeeds. ### Private fields A similar thing happens with private class fields. For example, getName() method accesses the private #name property and breaks after proxying: The reason is that private fields are implemented using internal slots. JavaScript does not use / when accessing them. In the call getName() the value of this is the proxied user, and it doesn't have the slot with private fields. Once again, the solution with binding the method makes it work: That said, the solution has drawbacks, as explained previously: it exposes the original object to the method, potentially allowing it to be passed further and breaking other proxied functionality. ### Proxy != target The proxy and the original object are different objects. That's natural, right? So if we use the original object as a key, and then proxy it, then the proxy can't be found: As we can see, after proxying we can't find user in the set allUsers, because the proxy is a different object. ## Revocable proxies A revocable proxy is a proxy that can be disabled. Let's say we have a resource, and would like to close access to it any moment. What we can do is to wrap it into a revocable proxy, without any traps. Such a proxy will forward operations to object, and we can disable it at any moment. The syntax is: The call returns an object with the proxy and revoke function to disable it. Here's an example: A call to revoke() removes all internal references to the target object from the proxy, so they are no longer connected. Initially, revoke is separate from proxy, so that we can pass proxy around while leaving revoke in the current scope. We can also bind revoke method to proxy by setting proxy.revoke = revoke. Another option is to create a WeakMap that has proxy as the key and the corresponding revoke as the value, that allows to easily find revoke for a proxy: We use WeakMap instead of Map here because it won't block garbage collection. If a proxy object becomes "unreachable" (e.g. no variable references it any more), WeakMap allows it to be wiped from memory together with its revoke that we won't need any more. ## References - Specification: Proxy. - MDN: Proxy. ## Summary Proxy is a wrapper around an object, that forwards operations on it to the object, optionally trapping some of them. It can wrap any kind of object, including classes and functions. The syntax is: ...Then we should use proxy everywhere instead of target. A proxy doesn't have its own properties or methods. It traps an operation if the trap is provided, otherwise forwards it to target object. We can trap: - Reading (get), writing (set), deleting (deleteProperty) a property (even a non-existing one). - Calling a function (apply trap). - The new operator (construct trap). - Many other operations (the full list is at the beginning of the article and in the docs). That allows us to create "virtual" properties and methods, implement default values, observable objects, function decorators and so much more. We can also wrap an object multiple times in different proxies, decorating it with various aspects of functionality. The Reflect API is designed to complement Proxy. For any Proxy trap, there's a Reflect call with same arguments. We should use those to forward calls to target objects. Proxies have some limitations: - Built-in objects have "internal slots", access to those can't be proxied. See the workaround above. - The same holds true for private class fields, as they are internally implemented using slots. So proxied method calls must have the target object as this to access them. - Object equality tests === can't be intercepted. - Performance: benchmarks depend on an engine, but generally accessing a property using a simplest proxy takes a few times longer. In practice that only matters for some "bottleneck" objects though.

web,development

Eval: run a code string

The built-in eval function allows to execute a string of code. The syntax is: For example: A string of code may be long, contain line breaks, function declarations, variables and so on. The result of eval is the result of the last statement. For example: The eval'ed code is executed in the current lexical environment, so it can see outer variables: It can change outer variables as well: In strict mode, eval has its own lexical environment. So functions and variables, declared inside eval, are not visible outside: Without use strict, eval doesn't have its own lexical environment, so we would see x and f outside. ## Using "eval" In modern programming eval is used very sparingly. It's often said that "eval is evil". The reason is simple: long, long time ago JavaScript was a much weaker language, many things could only be done with eval. But that time passed a decade ago. Right now, there's almost no reason to use eval. If someone is using it, there's a good chance they can replace it with a modern language construct or a JavaScript Module. Please note that its ability to access outer variables has side-effects. Code minifiers (tools used before JS gets to production, to compress it) rename local variables into shorter ones (like a, b etc) to make the code smaller. That's usually safe, but not if eval is used, as local variables may be accessed from eval'ed code string. So minifiers don't do that renaming for all variables potentially visible from eval. That negatively affects code compression ratio. Using outer local variables inside eval is also considered a bad programming practice, as it makes maintaining the code more difficult. There are two ways how to be totally safe from such problems. If eval'ed code doesn't use outer variables, please call eval as window.eval(...): This way the code is executed in the global scope: If eval'ed code needs local variables, change eval to new Function and pass them as arguments: The new Function construct is explained in the chapter <info:new-function>. It creates a function from a string, also in the global scope. So it can't see local variables. But it's so much clearer to pass them explicitly as arguments, like in the example above. ## Summary A call to eval(code) runs the string of code and returns the result of the last statement. - Rarely used in modern JavaScript, as there's usually no need. - Can access outer local variables. That's considered bad practice. - Instead, to eval the code in the global scope, use window.eval(code). - Or, if your code needs some data from the outer scope, use new Function and pass it as arguments.

string

Currying

Currying is an advanced technique of working with functions. It's used not only in JavaScript, but in other languages as well. Currying is a transformation of functions that translates a function from callable as f(a, b, c) into callable as f(a)(b)(c). Currying doesn't call a function. It just transforms it. Let's see an example first, to better understand what we're talking about, and then practical applications. We'll create a helper function curry(f) that performs currying for a two-argument f. In other words, curry(f) for two-argument f(a, b) translates it into a function that runs as f(a)(b): As you can see, the implementation is straightforward: it's just two wrappers. - The result of curry(func) is a wrapper function(a). - When it is called like curriedSum(1), the argument is saved in the Lexical Environment, and a new wrapper is returned function(b). - Then this wrapper is called with 2 as an argument, and it passes the call to the original sum. More advanced implementations of currying, such as _.curry from lodash library, return a wrapper that allows a function to be called both normally and partially: ## Currying? What for? To understand the benefits we need a worthy real-life example. For instance, we have the logging function log(date, importance, message) that formats and outputs the information. In real projects such functions have many useful features like sending logs over the network, here we'll just use alert: Let's curry it! After that log works normally: ...But also works in the curried form: Now we can easily make a convenience function for current logs: Now logNow is log with fixed first argument, in other words "partially applied function" or "partial" for short. We can go further and make a convenience function for current debug logs: So: 1. We didn't lose anything after currying: log is still callable normally. 2. We can easily generate partial functions such as for today's logs. ## Advanced curry implementation In case you'd like to get in to the details, here's the "advanced" curry implementation for multi-argument functions that we could use above. It's pretty short: Usage examples: The new curry may look complicated, but it's actually easy to understand. The result of curry(func) call is the wrapper curried that looks like this: When we run it, there are two if execution branches: 1. If passed args count is the same or more than the original function has in its definition (func.length) , then just pass the call to it using func.apply. 2. Otherwise, get a partial: we don't call func just yet. Instead, another wrapper is returned, that will re-apply curried providing previous arguments together with the new ones. Then, if we call it, again, we'll get either a new partial (if not enough arguments) or, finally, the result. ## Summary Currying is a transform that makes f(a,b,c) callable as f(a)(b)(c). JavaScript implementations usually both keep the function callable normally and return the partial if the arguments count is not enough. Currying allows us to easily get partials. As we've seen in the logging example, after currying the three argument universal function log(date, importance, message) gives us partials when called with one argument (like log(date)) or two arguments (like log(date, importance)).

web,development

Reference Type

A dynamically evaluated method call can lose this. For instance: On the last line there is a conditional operator that chooses either user.hi or user.bye. In this case the result is user.hi. Then the method is immediately called with parentheses (). But it doesn't work correctly! As you can see, the call results in an error, because the value of "this" inside the call becomes undefined. This works (object dot method): This doesn't (evaluated method): Why? If we want to understand why it happens, let's get under the hood of how obj.method() call works. ## Reference type explained Looking closely, we may notice two operations in obj.method() statement: 1. First, the dot '.' retrieves the property obj.method. 2. Then parentheses () execute it. So, how does the information about this get passed from the first part to the second one? If we put these operations on separate lines, then this will be lost for sure: Here hi = user.hi puts the function into the variable, and then on the last line it is completely standalone, and so there's no this. To make user.hi() calls work, JavaScript uses a trick -- the dot '.' returns not a function, but a value of the special Reference Type. The Reference Type is a "specification type". We can't explicitly use it, but it is used internally by the language. The value of Reference Type is a three-value combination (base, name, strict), where: - base is the object. - name is the property name. - strict is true if use strict is in effect. The result of a property access user.hi is not a function, but a value of Reference Type. For user.hi in strict mode it is: When parentheses () are called on the Reference Type, they receive the full information about the object and its method, and can set the right this (user in this case). Reference type is a special "intermediary" internal type, with the purpose to pass information from dot . to calling parentheses (). Any other operation like assignment hi = user.hi discards the reference type as a whole, takes the value of user.hi (a function) and passes it on. So any further operation "loses" this. So, as the result, the value of this is only passed the right way if the function is called directly using a dot obj.method() or square brackets obj['method']() syntax (they do the same here). There are various ways to solve this problem such as func.bind(). ## Summary Reference Type is an internal type of the language. Reading a property, such as with dot . in obj.method() returns not exactly the property value, but a special "reference type" value that stores both the property value and the object it was taken from. That's for the subsequent method call () to get the object and set this to it. For all other operations, the reference type automatically becomes the property value (a function in our case). The whole mechanics is hidden from our eyes. It only matters in subtle cases, such as when a method is obtained dynamically from the object, using an expression.

web,development

BigInt

[recent caniuse="bigint"] BigInt is a special numeric type that provides support for integers of arbitrary length. A bigint is created by appending n to the end of an integer literal or by calling the function BigInt that creates bigints from strings, numbers etc. ## Math operators BigInt can mostly be used like a regular number, for example: Please note: the division 5/2 returns the result rounded towards zero, without the decimal part. All operations on bigints return bigints. We can't mix bigints and regular numbers: We should explicitly convert them if needed: using either BigInt() or Number(), like this: The conversion operations are always silent, never give errors, but if the bigint is too huge and won't fit the number type, then extra bits will be cut off, so we should be careful doing such conversion. let bigint = 1n; alert( +bigint ); // error ## Comparisons Comparisons, such as <, > work with bigints and numbers just fine: Please note though, as numbers and bigints belong to different types, they can be equal ==, but not strictly equal ===: ## Boolean operations When inside if or other boolean operations, bigints behave like numbers. For instance, in if, bigint 0n is falsy, other values are truthy: Boolean operators, such as ||, && and others also work with bigints similar to numbers: ## Polyfills Polyfilling bigints is tricky. The reason is that many JavaScript operators, such as +, - and so on behave differently with bigints compared to regular numbers. For example, division of bigints always returns a bigint (rounded if necessary). To emulate such behavior, a polyfill would need to analyze the code and replace all such operators with its functions. But doing so is cumbersome and would cost a lot of performance. So, there's no well-known good polyfill. Although, the other way around is proposed by the developers of JSBI library. This library implements big numbers using its own methods. We can use them instead of native bigints: ...And then use the polyfill (Babel plugin) to convert JSBI calls to native bigints for those browsers that support them. In other words, this approach suggests that we write code in JSBI instead of native bigints. But JSBI works with numbers as with bigints internally, emulates them closely following the specification, so the code will be "bigint-ready". We can use such JSBI code "as is" for engines that don't support bigints and for those that do support - the polyfill will convert the calls to native bigints. ## References - MDN docs on BigInt. - Specification.

web,development

Unicode, String internals

As we already know, JavaScript strings are based on Unicode: each character is represented by a byte sequence of 1-4 bytes. JavaScript allows us to insert a character into a string by specifying its hexadecimal Unicode code with one of these three notations: - \xXX XX must be two hexadecimal digits with a value between 00 and FF, then \xXX is the character whose Unicode code is XX. Because the \xXX notation supports only two hexadecimal digits, it can be used only for the first 256 Unicode characters. These first 256 characters include the Latin alphabet, most basic syntax characters, and some others. For example, "\x7A" is the same as "z" (Unicode U+007A). ```js run alert( "\x7A" ); // z alert( "\xA9" ); // ©, the copyright symbol ``` - \uXXXX XXXX must be exactly 4 hex digits with the value between 0000 and FFFF, then \uXXXX is the character whose Unicode code is XXXX. Characters with Unicode values greater than U+FFFF can also be represented with this notation, but in this case, we will need to use a so called surrogate pair (we will talk about surrogate pairs later in this chapter). ```js run alert( "\u00A9" ); // ©, the same as \xA9, using the 4-digit hex notation alert( "\u044F" ); // я, the Cyrillic alphabet letter alert( "\u2191" ); // ↑, the arrow up symbol ``` - \u{X…XXXXXX} X…XXXXXX must be a hexadecimal value of 1 to 6 bytes between 0 and 10FFFF (the highest code point defined by Unicode). This notation allows us to easily represent all existing Unicode characters. ```js run alert( "\u{20331}" ); // 佫, a rare Chinese character (long Unicode) alert( "\u{1F60D}" ); // 😍, a smiling face symbol (another long Unicode) ``` ## Surrogate pairs All frequently used characters have 2-byte codes (4 hex digits). Letters in most European languages, numbers, and the basic unified CJK ideographic sets (CJK -- from Chinese, Japanese, and Korean writing systems), have a 2-byte representation. Initially, JavaScript was based on UTF-16 encoding that only allowed 2 bytes per character. But 2 bytes only allow 65536 combinations and that's not enough for every possible symbol of Unicode. So rare symbols that require more than 2 bytes are encoded with a pair of 2-byte characters called "a surrogate pair". As a side effect, the length of such symbols is 2: That's because surrogate pairs did not exist at the time when JavaScript was created, and thus are not correctly processed by the language! We actually have a single symbol in each of the strings above, but the length property shows a length of 2. Getting a symbol can also be tricky, because most language features treat surrogate pairs as two characters. For example, here we can see two odd characters in the output: Pieces of a surrogate pair have no meaning without each other. So the alerts in the example above actually display garbage. Technically, surrogate pairs are also detectable by their codes: if a character has the code in the interval of 0xd800..0xdbff, then it is the first part of the surrogate pair. The next character (second part) must have the code in interval 0xdc00..0xdfff. These intervals are reserved exclusively for surrogate pairs by the standard. So the methods String.fromCodePoint and str.codePointAt were added in JavaScript to deal with surrogate pairs. They are essentially the same as String.fromCharCode and str.charCodeAt, but they treat surrogate pairs correctly. One can see the difference here: That said, if we take from position 1 (and that's rather incorrect here), then they both return only the 2nd part of the pair: You will find more ways to deal with surrogate pairs later in the chapter <info:iterable>. There are probably special libraries for that too, but nothing famous enough to suggest here. alert( 'hi 😂'.slice(0, 4) ); // hi [?] ## Diacritical marks and normalization In many languages, there are symbols that are composed of the base character with a mark above/under it. For instance, the letter a can be the base character for these characters: àáâäãåā. Most common "composite" characters have their own code in the Unicode table. But not all of them, because there are too many possible combinations. To support arbitrary compositions, the Unicode standard allows us to use several Unicode characters: the base character followed by one or many "mark" characters that "decorate" it. For instance, if we have S followed by the special "dot above" character (code \u0307), it is shown as Ṡ. If we need an additional mark above the letter (or below it) -- no problem, just add the necessary mark character. For instance, if we append a character "dot below" (code \u0323), then we'll have "S with dots above and below": Ṩ. For example: This provides great flexibility, but also an interesting problem: two characters may visually look the same, but be represented with different Unicode compositions. For instance: To solve this, there exists a "Unicode normalization" algorithm that brings each string to the single "normal" form. It is implemented by str.normalize(). It's funny that in our situation normalize() actually brings together a sequence of 3 characters to one: \u1e68 (S with two dots). In reality, this is not always the case. The reason is that the symbol Ṩ is "common enough", so Unicode creators included it in the main table and gave it the code. If you want to learn more about normalization rules and variants -- they are described in the appendix of the Unicode standard: Unicode Normalization Forms, but for most practical purposes the information from this section is enough.

string

WeakRef and FinalizationRegistry

Recalling the basic concept of the reachability principle from the <info:garbage-collection> chapter, we can note that the JavaScript engine is guaranteed to keep values in memory that are accessible or in use. For example: Or a similar, but slightly more complicated code with two strong references: The object { name: "John" } would only be deleted from memory if there were no strong references to it (if we also overwrote the value of the admin variable). In JavaScript, there is a concept called WeakRef, which behaves slightly differently in this case. // the user variable holds a strong reference to this object let user = { name: "John" }; ## WeakRef WeakRef - is an object, that contains a weak reference to another object, called target or referent. The peculiarity of WeakRef is that it does not prevent the garbage collector from deleting its referent-object. In other words, a WeakRef object does not keep the referent object alive. Now let's take the user variable as the "referent" and create a weak reference from it to the admin variable. To create a weak reference, you need to use the WeakRef constructor, passing in the target object (the object you want a weak reference to). In our case — this is the user variable: The diagram below depicts two types of references: a strong reference using the user variable and a weak reference using the admin variable: Then, at some point, we stop using the user variable - it gets overwritten, goes out of scope, etc., while keeping the WeakRef instance in the admin variable: A weak reference to an object is not enough to keep it "alive". When the only remaining references to a referent-object are weak references, the garbage collector is free to destroy this object and use its memory for something else. However, until the object is actually destroyed, the weak reference may return it, even if there are no more strong references to this object. That is, our object becomes a kind of "Schrödinger's cat" – we cannot know for sure whether it's "alive" or "dead": At this point, to get the object from the WeakRef instance, we will use its deref() method. The deref() method returns the referent-object that the WeakRef points to, if the object is still in memory. If the object has been deleted by the garbage collector, then the deref() method will return undefined: ## WeakRef use cases WeakRef is typically used to create caches or associative arrays that store resource-intensive objects. This allows one to avoid preventing these objects from being collected by the garbage collector solely based on their presence in the cache or associative array. One of the primary examples - is a situation when we have numerous binary image objects (for instance, represented as ArrayBuffer or Blob), and we want to associate a name or path with each image. Existing data structures are not quite suitable for these purposes: - Using Map to create associations between names and images, or vice versa, will keep the image objects in memory since they are present in the Map as keys or values. - WeakMap is ineligible for this goal either: because the objects represented as WeakMap keys use weak references, and are not protected from deletion by the garbage collector. But, in this situation, we need a data structure that would use weak references in its values. For this purpose, we can use a Map collection, whose values are WeakRef instances referring to the large objects we need. Consequently, we will not keep these large and unnecessary objects in memory longer than they should be. Otherwise, this is a way to get the image object from the cache if it is still reachable. If it has been garbage collected, we will re-generate or re-download it again. This way, less memory is used in some situations. ## Example №1: using WeakRef for caching Below is a code snippet that demonstrates the technique of using WeakRef. In short, we use a Map with string keys and WeakRef objects as their values. If the WeakRef object has not been collected by the garbage collector, we get it from the cache. Otherwise, we re-download it again and put it in the cache for further possible reuse: Let's delve into the details of what happened here: 1. weakRefCache - is a higher-order function that takes another function, fetchImg, as an argument. In this example, we can neglect a detailed description of the fetchImg function, since it can be any logic for downloading images. 2. imgCache - is a cache of images, that stores cached results of the fetchImg function, in the form of string keys (image name) and WeakRef objects as their values. 3. Return an anonymous function that takes the image name as an argument. This argument will be used as a key for the cached image. 4. Trying to get the cached result from the cache, using the provided key (image name). 5. If the cache contains a value for the specified key, and the WeakRef object has not been deleted by the garbage collector, return the cached result. 6. If there is no entry in the cache with the requested key, or deref() method returns undefined (meaning that the WeakRef object has been garbage collected), the fetchImg function downloads the image again. 7. Put the downloaded image into the cache as a WeakRef object. Now we have a Map collection, where the keys - are image names as strings, and values - are WeakRef objects containing the images themselves. This technique helps to avoid allocating a large amount of memory for resource-intensive objects, that nobody uses anymore. It also saves memory and time in case of reusing cached objects. Here is a visual representation of what this code looks like: But, this implementation has its drawbacks: over time, Map will be filled with strings as keys, that point to a WeakRef, whose referent-object has already been garbage collected: One way to handle this problem - is to periodically scavenge the cache and clear out "dead" entries. Another way - is to use finalizers, which we will explore next. ## Example №2: Using WeakRef to track DOM objects Another use case for WeakRef - is tracking DOM objects. Let's imagine a scenario where some third-party code or library interacts with elements on our page as long as they exist in the DOM. For example, it could be an external utility for monitoring and notifying about the system's state (commonly so-called "logger" – a program that sends informational messages called "logs"). Interactive example: [codetabs height=420 src="weakref-dom"] When the "Start sending messages" button is clicked, in the so-called "logs display window" (an element with the .window__body class), messages (logs) start to appear. But, as soon as this element is deleted from the DOM, the logger should stop sending messages. To reproduce the removal of this element, just click the "Close" button in the top right corner. In order not to complicate our work, and not to notify third-party code every time our DOM-element is available, and when it is not, it will be enough to create a weak reference to it using WeakRef. Once the element is removed from the DOM, the logger will notice it and stop sending messages. Now let's take a closer look at the source code (tab index.js): 1. Get the DOM-element of the "Start sending messages" button. 2. Get the DOM-element of the "Close" button. 3. Get the DOM-element of the logs display window using the new WeakRef() constructor. This way, the windowElementRef variable holds a weak reference to the DOM-element. 4. Add an event listener on the "Start sending messages" button, responsible for starting the logger when clicked. 5. Add an event listener on the "Close" button, responsible for closing the logs display window when clicked. 6. Use setInterval to start displaying a new message every second. 7. If the DOM-element of the logs display window is still accessible and kept in memory, create and send a new message. 8. If the deref() method returns undefined, it means that the DOM-element has been deleted from memory. In this case, the logger stops displaying messages and clears the timer. 9. alert, which will be called, after the DOM-element of the logs display window is deleted from memory (i.e. after clicking the "Close" button). Note, that deletion from memory may not happen immediately, as it depends only on the internal mechanisms of the garbage collector. We cannot control this process directly from the code. However, despite this, we still have the option to force garbage collection from the browser. In Google Chrome, for example, to do this, you need to open the developer tools (key:Ctrl + key:Shift + key:J on Windows/Linux or key:Option + key:⌘ + key:J on macOS), go to the "Performance" tab, and click on the bin icon button – "Collect garbage": <br> This functionality is supported in most modern browsers. After the actions are taken, the <code>alert</code> will trigger immediately. ## FinalizationRegistry Now it is time to talk about finalizers. Before we move on, let's clarify the terminology: Cleanup callback (finalizer) - is a function that is executed, when an object, registered in the FinalizationRegistry, is deleted from memory by the garbage collector. Its purpose - is to provide the ability to perform additional operations, related to the object, after it has been finally deleted from memory. Registry (or FinalizationRegistry) - is a special object in JavaScript that manages the registration and unregistration of objects and their cleanup callbacks. This mechanism allows registering an object to track and associate a cleanup callback with it. Essentially it is a structure that stores information about registered objects and their cleanup callbacks, and then automatically invokes those callbacks when the objects are deleted from memory. To create an instance of the FinalizationRegistry, it needs to call its constructor, which takes a single argument - the cleanup callback (finalizer). Syntax: Here: - cleanupCallback - a cleanup callback that will be automatically called when a registered object is deleted from memory. - heldValue - the value that is passed as an argument to the cleanup callback. If heldValue is an object, the registry keeps a strong reference to it. - registry - an instance of FinalizationRegistry. FinalizationRegistry methods: - register(target, heldValue [, unregisterToken]) - used to register objects in the registry. target - the object being registered for tracking. If the target is garbage collected, the cleanup callback will be called with heldValue as its argument. Optional unregisterToken – an unregistration token. It can be passed to unregister an object before the garbage collector deletes it. Typically, the target object is used as unregisterToken, which is the standard practice. - unregister(unregisterToken) - the unregister method is used to unregister an object from the registry. It takes one argument - unregisterToken (the unregister token that was obtained when registering the object). Now let's move on to a simple example. Let's use the already-known user object and create an instance of FinalizationRegistry: Then, we will register the object, that requires a cleanup callback by calling the register method: The registry does not keep a strong reference to the object being registered, as this would defeat its purpose. If the registry kept a strong reference, then the object would never be garbage collected. If the object is deleted by the garbage collector, our cleanup callback may be called at some point in the future, with the heldValue passed to it: There are also situations where, even in implementations that use a cleanup callback, there is a chance that it will not be called. For example: - When the program fully terminates its operation (for example, when closing a tab in a browser). - When the FinalizationRegistry instance itself is no longer reachable to JavaScript code. If the object that creates the FinalizationRegistry instance goes out of scope or is deleted, the cleanup callbacks registered in that registry might also not be invoked. ## Caching with FinalizationRegistry Returning to our weak cache example, we can notice the following: - Even though the values wrapped in the WeakRef have been collected by the garbage collector, there is still an issue of "memory leakage" in the form of the remaining keys, whose values have been collected by the garbage collector. Here is an improved caching example using FinalizationRegistry: 1. To manage the cleanup of "dead" cache entries, when the associated WeakRef objects are collected by the garbage collector, we create a FinalizationRegistry cleanup registry. The important point here is, that in the cleanup callback, it should be checked, if the entry was deleted by the garbage collector and not re-added, in order not to delete a "live" entry. 2. Once the new value (image) is downloaded and put into the cache, we register it in the finalizer registry to track the WeakRef object. This implementation contains only actual or "live" key/value pairs. In this case, each WeakRef object is registered in the FinalizationRegistry. And after the objects are cleaned up by the garbage collector, the cleanup callback will delete all undefined values. Here is a visual representation of the updated code: A key aspect of the updated implementation is that finalizers allow parallel processes to be created between the "main" program and cleanup callbacks. In the context of JavaScript, the "main" program - is our JavaScript-code, that runs and executes in our application or web page. Hence, from the moment an object is marked for deletion by the garbage collector, and to the actual execution of the cleanup callback, there may be a certain time gap. It is important to understand that during this time gap, the main program can make any changes to the object or even bring it back to memory. That's why, in the cleanup callback, we must check to see if an entry has been added back to the cache by the main program to avoid deleting "live" entries. Similarly, when searching for a key in the cache, there is a chance that the value has been deleted by the garbage collector, but the cleanup callback has not been executed yet. Such situations require special attention if you are working with FinalizationRegistry. ## Using WeakRef and FinalizationRegistry in practice Moving from theory to practice, imagine a real-life scenario, where a user synchronizes their photos on a mobile device with some cloud service (such as iCloud or Google Photos), and wants to view them from other devices. In addition to the basic functionality of viewing photos, such services offer a lot of additional features, for example: - Photo editing and video effects. - Creating "memories" and albums. - Video montage from a series of photos. - ...and much more. Here, as an example, we will use a fairly primitive implementation of such a service. The main point - is to show a possible scenario of using WeakRef and FinalizationRegistry together in real life. Here is what it looks like: <br> On the left side, there is a cloud library of photos (they are displayed as thumbnails). We can select the images we need and create a collage, by clicking the "Create collage" button on the right side of the page. Then, the resulting collage can be downloaded as an image. </br><br> To increase page loading speed, it would be reasonable to download and display photo thumbnails in compressed quality. But, to create a collage from selected photos, download and use them in full-size quality. Below, we can see, that the intrinsic size of the thumbnails is 240x240 pixels. The size was chosen on purpose to increase loading speed. Moreover, we do not need full-size photos in preview mode. <br> Let's assume, that we need to create a collage of 4 photos: we select them, and then click the "Create collage" button. At this stage, the already known to us <code>weakRefCache</code> function checks whether the required image is in the cache. If not, it downloads it from the cloud and puts it in the cache for further use. This happens for each selected image: </br><br> </br> Paying attention to the output in the console, you can see, which of the photos were downloaded from the cloud - this is indicated by <span style="background-color:#133159;color:white;font-weight:500">FETCHED_IMAGE</span>. Since this is the first attempt to create a collage, this means, that at this stage the "weak cache" was still empty, and all the photos were downloaded from the cloud and put in it. But, along with the process of downloading images, there is also a process of memory cleanup by the garbage collector. This means, that the object stored in the cache, which we refer to, using a weak reference, is deleted by the garbage collector. And our finalizer executes successfully, thereby deleting the key, by which the image was stored in the cache. <span style="background-color:#901e30;color:white;font-weight:500;">CLEANED_IMAGE</span> notifies us about it: <br> Next, we realize that we do not like the resulting collage, and decide to change one of the images and create a new one. To do this, just deselect the unnecessary image, select another one, and click the "Create collage" button again: </br><br> <br> But this time not all images were downloaded from the network, and one of them was taken from the weak cache: the <span style="background-color:#385950;color:white;font-weight:500;">CACHED_IMAGE</span> message tells us about it. This means that at the time of collage creation, the garbage collector had not yet deleted our image, and we boldly took it from the cache, thereby reducing the number of network requests and speeding up the overall time of the collage creation process: </br><br> <br> Let's "play around" a little more, by replacing one of the images again and creating a new collage: </br><br> <br> This time the result is even more impressive. Of the 4 images selected, 3 of them were taken from the weak cache, and only one had to be downloaded from the network. The reduction in network load was about 75%. Impressive, isn't it? </br><br> </br> Of course, it is important to remember, that such behavior is not guaranteed, and depends on the specific implementation and operation of the garbage collector. Based on this, a completely logical question immediately arises: why do not we use an ordinary cache, where we can manage its entities ourselves, instead of relying on the garbage collector? That's right, in the vast majority of cases there is no need to use WeakRef and FinalizationRegistry. Here, we simply demonstrated an alternative implementation of similar functionality, using a non-trivial approach with interesting language features. Still, we cannot rely on this example, if we need a constant and predictable result. You can open this example in the sandbox. ## Summary WeakRef - designed to create weak references to objects, allowing them to be deleted from memory by the garbage collector if there are no longer strong references to them. This is beneficial for addressing excessive memory usage and optimizing the utilization of system resources in applications. FinalizationRegistry - is a tool for registering callbacks, that are executed when objects that are no longer strongly referenced, are destroyed. This allows releasing resources associated with the object or performing other necessary operations before deleting the object from memory.

web,development
Back to Home