Naming Variables, Methods, Classes, Etc. Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer www.nakov.com.

Slides:



Advertisements
Similar presentations
Revealing the Secrets of Self-Documenting Code Svetlin Nakov Telerik Corporation For C# Developers.
Advertisements

Revealing the Secrets of Self-Documenting Code Svetlin Nakov Telerik Corporation For C# Developers.
Windows Basic and Dynamic Disk Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
HTML Forms, GET, POST Methods Tran Anh Tuan Edit from Telerik Academy
Make swiftly iOS development Telerik Academy Telerik Academy Plus.
Amazon S 3, App Engine Blobstore, Google Cloud Storage, Azure Blobs Svetlin Nakov Telerik Software Academy academy.telerik.com.
RPN and Shunting-yard algorithm Ivaylo Kenov Telerik Software Academy academy.telerik.com Technical Assistant
Shortest paths in edge-weighted digraph Krasin Georgiev Technical University of Sofia g.krasin at gmail com Assistant Professor.
Telerik Software Academy Telerik School Academy.
Asynchronous Programming with C# and WinRT
Unleash the Power of JavaScript Tooling Telerik Software Academy End-to-end JavaScript Applications.
Character sequences, C-strings and the C++ String class, Working with Strings Learning & Development Team Telerik Software Academy.
Done already for your convenience! Telerik School Academy Unity 2D Game Development.
Processing Sequences of Elements Telerik School Academy C# Fundamentals – Part 1.
C# Fundamentals – Part I
The Business Plan and the Business Model Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System Analyst Telerik Corporation.
What are ADTs, STL Intro, vector, list, queue, stack Learning & Development Team Telerik Software Academy.
Making JavaScript code by template! Learning & Development Team Telerik Software Academy.
Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training Who, What, Why?
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Processing Matrices and Multidimensional Tables Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Learning & Development Telerik Software Academy.
Reading and Writing Text Files Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Telerik Software Academy ASP.NET Web Forms.
Classical OOP in JavaScript Classes and stuff Telerik Software Academy
Naming Variables, Methods, Classes, Etc. Doncho Minkov High-quality Programming Code codecourse.telerik.com Technical Trainer
Optimization problems, Greedy Algorithms, Optimal Substructure and Greedy choice Learning & Development Team Telerik Software.
Using Selenium for Mobile Web Testing Powered by KendoUI Telerik QA Academy Atanas Georgiev Senior QA Engineer KendoUI Team.
NoSQL Concepts, Redis, MongoDB, CouchDB Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
New features: classes, generators, iterators, etc. Telerik Academy Plus JavaScript.Next.
Throwing and Catching Exceptions Tran Anh Tuan Edit from Telerik Software Academy
When and How to Refactor? Refactoring Patterns Telerik Software Academy High-Quality Code.
Naming Identifiers Naming Variables, Methods, Parameters, Properties, Constants, Classes, Interfaces, Etc. SoftUni Team Technical Trainers Software University.
Naming Variables, Methods, Classes, Etc. Svetlin Nakov Telerik Corporation
Loops, Conditional Statements, Functions Tran Anh Tuan Edit from Telerik Academy
Private/Public fields, Module, Revealing Module Learning & Development Team Telerik Software Academy.
Building Data-Driven ASP.NET Web Forms Apps Telerik Software Academy ASP.NET Web Forms.
Course Introduction Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
Telerik Software Academy End-to-end JavaScript Applications.
General and reusable solutions to common problems in software design Vasil Dininski Telerik Software Academy academy.telerik.com Intern at Telerik Academy.
Planning and Tracking Software Quality Yordan Dimitrov Telerik Corporation Team Leader, Team Pulse, Team Leader, Team Pulse, Telerik Corporation,
What you need to know Ivaylo Kenov Telerik Corporation Telerik Academy Student.
Data binding concepts, Bindings in WinJS George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net.
Objects, Properties, Primitive and Reference Types Learning & Development Team Telerik Software Academy.
When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Doing the Canvas the "easy way"! Learning & Development Telerik Software Academy.
Creating and Running Your First C# Program Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
Revealing the Secrets of Self-Documenting Code Nikolay Kostov Telerik Software Academy academy.telerik.com Senior Software Developer and Technical Trainer.
Correctly Formatting the Source Code Nikolay Kostov Telerik Software Academy academy.telerik.com Senior Software Developer and Technical Trainer
Data Types, Primitive Types in C++, Variables – Declaration, Initialization, Scope Telerik Software Academy academy.telerik.com Learning and Development.
The past, the present, the future Learning & Development Team Telerik Software Academy.
Learn to Design Error Steady Code Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Naming Identifiers Naming Variables, Methods, Parameters, Properties, Constants, Classes, Interfaces, Etc. SoftUni Team Technical Trainers Software University.
Connecting, Queries, Best Practices Tran Anh Tuan Edit from Telerik Software Academy
Processing Sequences of Elements Telerik Software Academy C# Fundamentals – Part 2.
Telerik JavaScript Framework Telerik Software Academy Hybrid Mobile Applications.
Telerik Software Academy Databases.
Things start to get serious Telerik Software Academy JavaScript OOP.
Learning & Development Mobile apps for iPhone & iPad.
Processing Matrices and Multidimensional Tables Telerik Software Academy C# Fundamentals – Part 2.
Nikolay Kostov Telerik Software Academy academy.telerik.com Team Lead, Senior Developer and Trainer
Functions and Function Expressions Closures, Function Scope, Nested Functions Telerik Software Academy
Implementing Control Logic in C# Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical trainer
Inheritance, Abstraction, Encapsulation, Polymorphism Telerik Software Academy Mobile apps for iPhone & iPad.
Mocking tools for easier unit testing Telerik Software Academy High Quality Code.
What why and how? Telerik School Academy Unity 2D Game Development.
Windows Security Model Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Presentation transcript:

Naming Variables, Methods, Classes, Etc. Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer

1. General Naming Guidelines  The Power of Meaningful Names 2. Naming Classes / Types / Applications  Naming Classes, Interfaces, Types, Delegates, Enumerations, Namespaces, Files, Folders, Assemblies, Applications 3. Naming Methods and Method Parameters 4. Naming Variables and Constants 5. Other Naming Guidelines 2

 Always use English  How will you feel if you read Vietnamese code with variables named in Vietnamese?  English is the only language that all software developers speak  Avoid abbreviations  Example: scrpCnt vs. scriptsCount  Avoid hard-to-pronounce names  Example: dtbgRegExPtrn vs. dateTimeBulgarianRegExPattern 4

 Always prefer meaningful names  Names should answer these questions:  What does this class do? What is the intent of this variable? What is this variable / class used for?  Examples:  FactorialCalculator, studentsCount, Math.PI, configFileName, CreateReport  Incorrect examples:  k, k2, k3, junk, f33, KJJ, button1, variable, temp, tmp, temp_var, something, someValue 5

 Whether a name is meaningful or not depends on its context (its enclosing type)  Examples of meaningful names:  Generate() in the class LabyrinthGenerator  Find(string fileName) in the class FileFinder  Deposit(decimal amount) in the class Account  Examples of meaningless names:  Generate() in the class Program  Find(string name) in the class Program 6

 Junior developers often use “fake” meaningful names that are in fact meaningless  Bad naming examples:  Topic6Exercise12, LoopsExercise12, Problem7, OOPLecture_LastExercise  Yes, Topic6Exercise12 indicates that this is solution to exercise 12, but what is it about?  Sum of numbers or Tetris game?  Better naming:  MaximalNumbersSubsequence 7

 Naming types (classes, structures, etc.)  Use PascalCase character casing  In C#, JavaScript, Java, PHP  Examples:  RecursiveFactorialCalculator, TreeSet, XmlDocument, IEnumerable, Color, TreeNode, InvalidTransactionException, MainForm  Incorrect examples:  recursiveFactorialCalculator, recursive_factorial_calculator, RECURSIVE_FACTORIAL_CALCULATOR 9

 Use the following formats:  [Noun]  [Adjective] + [Noun]  Examples:  Student, FileSystem, BinaryTreeNode, Constants, MathUtils, CheckBox, Calendar  Incorrect examples:  Move, FindUsers, Fast, ExtremlyFast, Optimize, Check, FastFindInDatabase 10

 Following formats are acceptable:  ' I ' + [Verb] + ' able '  ' I ' + [Noun], ' I ' + [Adjective] + [Noun]  Examples:  IEnumerable, IFormattable, IDataReader, IList, IHttpModule, ICommandExecutor  Incorrect examples:  List, iFindUsers, IFast, IMemoryOptimize, Optimizer, FastFindInDatabase, CheckBox 11

 Following formats are acceptable:  [Verb] + ' able '  [Noun], [Adjective] + [Noun]  Examples:  Serializable, Enumerable, Comparable, Runnable, CharSequence, OutputStream  Incorrect examples:  list, FindUsers, Run, Inumber, OPTIMIZER, IMemoryOptimize, FastFindInDatabase 12

 Several formats are acceptable:  [Noun] or [Verb] or [Adjective]  Use the same style for all members  Examples:  enum Day {Monday, Tuesday, Wednesday, …}, enum AppState {Running, Finished, …}, enum WindowState {Normal, Maximized, …}  Incorrect examples:  enum Color {red, green, blue, white}, enum PAGE_FORMAT {A4, A5, A3, LEGAL, …} 13

 Several formats are acceptable:  [Noun] or [Verb] or [Adjective]  Use PascalCase for the enumeration and CAPITALS for its members  Examples:  enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES}, enum Color {RED, GREEN, BLUE, …}  Incorrect examples:  enum Color {red, green, blue, white}, enum PAGE_FORMAT {A4, A5, A3, LEGAL, …} 14

 Attributes  Add 'Attribute ' as suffix  Example: WebServiceAttribute  Incorrect example: WebService  Collection Classes  Add 'Collection ' as suffix  Example: StringsCollection  Incorrect example: ListOfStrings 15

 Exceptions  Add 'Exception ' as suffix  Use informative name  Example: FileNotFoundException  Incorrect example: FileNotFoundError  Delegate Classes  Add 'Delegate ' or ' EventHandler ' as suffix  Example: DownloadFinishedDelegate  Incorrect example: WakeUpNotification 16

 How long could be the name of a class / struct / interface / enum / delegate?  The name should be as long as required  Don't abbreviate the names if this could make them unclear  Your IDE has autocomplete, right?  Examples: FileNotFoundException, CustomerSupportNotificationService  Incorrect examples: FNFException, CustSuppNotifSrvc 17

 Namespaces naming guidelines  Use PascalCase  Following formats are acceptable:  Company. Product. Component. …  Product. Component. …  Example:  Telerik.WinControls.GridView  Incorrect examples:  Telerik_WinControlsGridView, Classes 18

 Packages naming guidelines  Use camelCase  Following formats are acceptable:  com. company. product. component. …  product. component. …  Example:  com.apple.quicktime, hibernate.core  Incorrect examples:  IBM.DB2.Data, ibm.db2_data, Tetris.UI 19

 Project folders' names should follow the project namespaces / packages  Examples:  com  apple  quicktime  Telerik.WinControls.GridView  Incorrect examples:  com_apple_quicktime, quicktime.src 20

 Files with source code should have names matching their content  File containing a class Student should be names Student.cs / student.java  Example:  StudentDAO.cs, Constants.java, CryptographyAlgorithms.cs  Incorrect examples:  Program.cs, SourceCode.java, _d2.cs, WebApplication1.jsp, Page1.aspx 21

 Use small letters and hyphens for JavaScript file names (+ optionally.min + version)  Put a single library / component in a single file  Examples:  jquery min.js, widgets.js, kendo.common.min.js, scriptaculous.js  Incorrect examples:  KendoUI.js, jQuery_classes.js, MyAjax.Library.js, jQuery js 22

.NET assembly names should follow the root namespace in its class hierarchy  Examples:  Oracle.DataAccess.dll  Interop.CAPICOM.dll  Telerik.WinControls.GridView.dll  Incorrect examples:  OracleDataAccess.dll  Telerik_WinControlsGridView.dll 23

 JAR files names should consist of single word or several words separated by hyphen  Can contain version information  Examples:  xalan25.jar  ant-apache-log4j.jar  Incorrect examples:  Ant.Apache.Log4J.jar  Oracle.JDBC.Drivers.jar 24

 Applications should be named meaningfully  Use [Noun] or [Adjective] + [Noun]  Use PascalCase  Examples:  BlogEngine  NewsAggregatorSerivice  Incorrect examples:  ConsoleApplication4, WebSite2  zadacha_14, online_shop_temp2 25

 Methods naming guidelines  Use meaningful method names  Method names should answer the question:  What does this method do?  If you cannot find a good name for a method, think about whether it has a clear intent  Examples: FindStudent, LoadReport, Sinus  Incorrect examples: Method1, DoSomething, HandleStuff, SampleMethod, DirtyHack 27

 Use PascalCase for C# and camelCase for JavaScript, PHP and Java  Example (C#): LoadSettings  Example (JS/PHP/Java): loadSettings  Prefer the following formats:  [Verb], [Verb] + [Noun], [Verb] + [Adjective] + [Noun]  Examples: Show, LoadSettingsFile, FindNodeByPattern, ToString, PrintList  Incorrect examples: Student, Generator, Counter, White, Approximation, MathUtils 28

 Methods returning values should describe the returned value  Examples:  ConvertMetersToInches, not MetersInches or Convert or ConvertUnit  Meters2Inches is still acceptable  CalculateSinus is good but Sinus is still acceptable  Ensure that the unit of measure is obvious  Prefer MeasureFontInPixels to MeasureFont 29

 Methods should have a single purpose!  Otherwise they cannot be named well  How to name a method that creates annual incomes report, downloads updates from internet and scans the system for viruses?  CreateAnnualIncomesReportDownloadUpda tesAndScanForViruses is a nice name, right?  Methods that have multiple purposes (weak cohesion) are hard to be named  Need to be refactored instead of named 30

 Use consistent naming in the entire project  LoadFile, LoadImageFromFile, LoadSettings, LoadFont, LoadLibrary, but not ReadTextFile  Use consistently the opposites at the same level of abstraction:  LoadLibrary vs. UnloadLibrary, but not FreeHandle  OpenFile vs. CloseFile, but not DeallocateResource  GetName vs. SetName, but not AssignName 31

 How long could be the name of a method?  The name should be as long as required  Don't abbreviate  Your IDE has autocomplete  Examples (C#):  LoadCustomerSupportNotificationService, CreateMonthlyAndAnnualIncomesReport  Incorrect examples:  LoadCustSuppSrvc, CreateMonthIncReport 32

 Method parameters names  Preferred form: [Noun] or [Adjective] + [Noun]  Should be in camelCase  Should be meaningful  Unit of measure should be obvious  Examples: firstName, report, speedKmH, usersList, fontSizeInPixels, font  Incorrect examples: p, p1, p2, populate, LastName, last_name, convertImage 33

 Variable names  Should be in camelCase  Preferred form: [Noun] or [Adjective] + [Noun]  Should explain the purpose of the variable  If you can't find good name for a variable check if it has a single purpose  Exception: variables with very small scope, e.g. the index variable in a 3 -lines long for-loop  Names should be consistent in the project 35

 Examples:  firstName, report, config, usersList, fontSize, maxSpeed, font, startIndex, endIndex, charsCount, configSettingsXml, dbConnection, createUserSqlCommand  Incorrect examples:  foo, bar, p, p1, p2, populate, LastName, last_name, LAST_NAME, convertImage, moveMargin, MAXSpeed, _firtName, __temp, firstNameMiddleNameAndLastName 36

 The name should address the problem we solve, not to the means used to solve it  Prefer nouns from the business domain to computer science terms  Examples:  accounts, customers, customerAddress, accountHolder, paymentPlan, vipPlayer  Incorrect examples:  paymentsPriorityQueue, playersArray, accountsLinkedList, customersHashtable 37

 Give to boolean variables names that imply true or false  Use positive boolean variable names  Incorrect example:  Examples:  hasPendingPayment, customerFound, validAddress, positiveBalance, isPrime  Incorrect examples:  notFound, findCustomerById, player, programStop, run, list, isUnsuccessfull 38 if (! notFound) { … }

 Naming counters  Establish a convention, e.g. [Noun] + ' Count '  Examples: ticketsCount, customersCount  State  Establish a convention, e.g. [Noun] + ' State '  Examples: blogParseState, threadState  Variables with small scope and span  E.g. loop counters  Short names can be used, e.g. index, i, u 39

 Do you really think temporary variables exist?  All variables in the program are temporary because are used temporary only during the program execution, right?  Temporary variables can always be named better than temp or tmp : 40 // Swap a[i] and a[j] int temp = a[i]; a[i] = a[j]; a[j] = temp; // Swap a[i] and a[j] int oldValue = a[i]; a[i] = a[j]; a[j] = oldValue;

 How long could be the name of a variable?  Depends on the variable scope and live time  More "famous" variables should have longer and more descriptive name  Acceptable naming examples:  Unacceptable naming examples: 41 for (int i=0; i<users.Length; i++) if (i % 2 == 0) if (i % 2 == 0) sum += users[i].Weight; sum += users[i].Weight; class Student { public string lastName; public string lastName;} class Student { private int i; private int i;} class LinkedList { public int flag { get; set; } public int flag { get; set; }}

 Use CAPITAL_LETTERS for const fields and PascalCase for readonly fields  Use meaningful names that describe their value  Examples:  Incorrect examples: 42 private const int READ_BUFFER_SIZE = 8192; public static readonly PageSize DefaultPageSize = PageSize.A4; private const int FONT_SIZE_IN_POINTS = 16; public const int MAX = 512; // Max what? Apples or Oranges? public const int BUF256 = 256; // What about BUF256 = 1024? public const string GREATER = ">"; // GREATER_HTML_ENTITY public const int FONT_SIZE = 16; // 16pt or 16px? public const PageSize PAGE = PageSize.A4; // Maybe PAGE_SIZE?

 Use CAPITAL_LETTERS for JavaScript / Java / PHP / C++ constants  Use meaningful names  Constants should describe their value  Examples:  Incorrect examples: 43 public static final int READ_BUFFER_SIZE = 8192; public static final PageSize DEFAULT_PAGE_SIZE = PageSize.A4; public static final int FONT_SIZE_IN_POINTS = 16; public static final int NAME = "BMW"; // What name? Car name? public static final int BufSize = 256; // Use CAPITALS public static final int font_size_pixels = 16; // CAPITALS

 Don't use numbers in the identifiers names  Example:  PrintReport and PrintReport2  What is the difference?  Exceptions:  When the number is part of the name itself, e.g. RS232Port, COM3, Win32APIFunctions  Don't use Cyrillic or letters from other alphabet  FindСтудентByName, DisplayΩ2Protein 45

 Giving a misleading name is even worse than giving a totally unclear name  Example:  Consider a method that calculates the sum of all elements in an array  Its should be named Sum or CalculateSum  What about naming it CalculateAverage or Max or CheckForNegativeNumber ?  It's crazy, but be careful with "copy-paste" 46

47 FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew); // Create the writer for data. BinaryWriter w = new BinaryWriter(fs); // Write data to Test.data. for (int i = 0; i < 11; i++) { w.Write( (int) i); w.Write( (int) i);}w.Close();fs.Close(); // Create the reader for data. fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); // Read data from Test.data. for (int i = 0; i < 11; i++) { Console.WriteLine(r.ReadInt32()); Console.WriteLine(r.ReadInt32());}r.Close();fs.Close(); Source:

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране

1. Refactor the following examples to produce code with well-named C# identifiers: class class_123 { const int max_count=6; const int max_count=6; class InClass_class_123 { class InClass_class_123 { void Метод_нА_class_InClass_class_123(bool promenliva) { void Метод_нА_class_InClass_class_123(bool promenliva) { string promenlivaKatoString=promenliva.ToString(); string promenlivaKatoString=promenliva.ToString(); Console.WriteLine(promenlivaKatoString); } Console.WriteLine(promenlivaKatoString); } } public static void Метод_За_Вход() { public static void Метод_За_Вход() { class_123.InClass_class_123 инстанция = class_123.InClass_class_123 инстанция = new class_123.InClass_class_123(); new class_123.InClass_class_123(); инстанция.Метод_нА_class_InClass_class_123(true); инстанция.Метод_нА_class_InClass_class_123(true); }}C# 49

2. Refactor the following examples to produce code with well-named identifiers in C#: class Hauptklasse { enum Пол { ултра_Батка, Яка_Мацка }; enum Пол { ултра_Батка, Яка_Мацка }; class чуек class чуек { public Пол пол { get; set; } public Пол пол { get; set; } public string име_на_Чуека { get; set; } public string име_на_Чуека { get; set; } public int Възраст { get; set; } public int Възраст { get; set; } } // continues at the next slide … C# 50

51 public void Make_Чуек(int магическия_НомерНаЕДИНЧОВЕК) public void Make_Чуек(int магическия_НомерНаЕДИНЧОВЕК) { чуек new_Чуек = new чуек(); чуек new_Чуек = new чуек(); new_Чуек.Възраст = магическия_НомерНаЕДИНЧОВЕК; new_Чуек.Възраст = магическия_НомерНаЕДИНЧОВЕК; if (магическия_НомерНаЕДИНЧОВЕК%2 == 0) if (магическия_НомерНаЕДИНЧОВЕК%2 == 0) { new_Чуек.име_на_Чуека = "Батката"; new_Чуек.име_на_Чуека = "Батката"; new_Чуек.пол = Пол.ултра_Батка; new_Чуек.пол = Пол.ултра_Батка; } else else { new_Чуек.име_на_Чуека = "Мацето"; new_Чуек.име_на_Чуека = "Мацето"; new_Чуек.пол = Пол.Яка_Мацка; new_Чуек.пол = Пол.Яка_Мацка; } }} C#

3. Refactor the following examples to produce code with well-named identifiers in JavaScript function _ClickON_TheButton( THE_event, argumenti) { var moqProzorec= window; var moqProzorec= window; var brauzyra = moqProzorec.navigator.appCodeName; var brauzyra = moqProzorec.navigator.appCodeName; var ism=brauzyra=="Mozilla"; var ism=brauzyra=="Mozilla"; if(ism) { if(ism) { alert("Yes"); } alert("Yes"); } else else { alert("No"); } alert("No"); }} JavaScript 52

4. Refactor and improve the naming in the C# source project “3. Naming-Identifiers-Homework.zip”. You are allowed to make other improvements in the code as well (not only naming) as well as to fix bugs. 3. Naming-Identifiers-Homework.zip3. Naming-Identifiers-Homework.zip 53

 C# Telerik Academy  csharpfundamentals.telerik.com csharpfundamentals.telerik.com  Telerik Software Academy  academy.telerik.com academy.telerik.com  Telerik Facebook  facebook.com/TelerikAcademy facebook.com/TelerikAcademy  Telerik Software Academy Forums  forums.academy.telerik.com forums.academy.telerik.com