## Enumerated Constants, or enums, in Soapi.js

The advantages of using enums include the elimination of magic strings scattered about your codebase and the ability to update all references to an enum value in one location.

Typically, in a statically typed language, enums are readonly or immutable values. While this concept is alien to the dynamically typed JavaScript language the benefits of enums are not mitigated. You simply need to treat them as immutable and *not* assign values to them.

Soapi.js defines 'enums' for all of the 'choice' parameters and return types in the API. Using enums may seem like more work in that they are more verbose than using string constant but in reality they make your code more robust and much easier to read and maintain.


For example:

    var $sd = Soapi.Domain;
    
    // as a parameter
    
    route.Sort = $sd.UserSort.reputation;
    
    
    // identifying values in return types
    
    switch(user.user_type){
       case $sd.UserType.anonymous:
          // do something 
          break;
       case $sd.UserType.unregistered:
          // do something 
          break;
       case $sd.UserType.registered:
          // do something 
          break;
       case $sd.UserType.moderator:
          // do something 
          break;
    }




**Enums used in parameters**


SortOrder

- desc
- asc

PostSort

- activity
- views
- creation
- votes

CommentSort

- creation
- votes

QuestionSort

- activity
- votes
- creation
- featured
- hot
- week
- month

TagSort

- popular
- activity
- name

UserSort

- reputation
- creation
- name

FavoritesSort

- activity
- views
- creation
- added
- votes



Enums used in return types

SiteState

- normal
- closed_beta
- open_beta
- linked_meta

UserType

- anonymous
- unregistered
- registered
- moderator

PostType

- question
- answer

PostTimelineType

- question
- answer
- comment
- revision
- votes
- state
- accepted
- unaccepted

RevisionType

- single_user
- vote_based

UserTimelineType

- comment
- askoranswered
- badge
- revision
- accepted

Users of Visual Studio will get extra benefit from the use of the defined `enum` types as they have the luxury of intellisense code completion, which will be covered in detail in the **Intellisense Support** post.

![alt text][1]


Next:  [Studio JavaScript Intellisense and Code Completion Support][2]


  [1]: https://i.sstatic.net/OIx41.png
  [2]: https://stackapps.com/questions/494/soapi-js/662#662